From b42fef8edc8b3d5458c74c8b049c0cbb842b1ca1 Mon Sep 17 00:00:00 2001 From: Reinier Zwitserloot Date: Thu, 9 Feb 2017 22:46:21 +0100 Subject: A shot-in-the-dark fix for issue #1293 which is not reproducible: Occasional duplicate class def errors in eclipse. --- src/launch/lombok/launch/ShadowClassLoader.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/launch') diff --git a/src/launch/lombok/launch/ShadowClassLoader.java b/src/launch/lombok/launch/ShadowClassLoader.java index 37c479ee..2bcf46b5 100644 --- a/src/launch/lombok/launch/ShadowClassLoader.java +++ b/src/launch/lombok/launch/ShadowClassLoader.java @@ -451,7 +451,12 @@ class ShadowClassLoader extends ClassLoader { Class alreadyDefined = highlanderMap.get(name); if (alreadyDefined != null) return alreadyDefined; } - throw e; + try { + c = this.findLoadedClass(name); + } catch (LinkageError e2) { + throw e; + } + if (c == null) throw e; } if (highlanders.contains(name)) { -- cgit From fc7d32af36f3913e13b2827780326a9a5c728fb2 Mon Sep 17 00:00:00 2001 From: Reinier Zwitserloot Date: Fri, 10 Feb 2017 03:09:59 +0100 Subject: Updated ShadowClassLoader’s finding of ‘self’; it failed exactly once on me and I’d like to know the classloader when that happens (error condition was loading lombok.jar as an AP in eclipse which normally you don’t even do, so it’s not a big deal). MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/launch/lombok/launch/ShadowClassLoader.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'src/launch') diff --git a/src/launch/lombok/launch/ShadowClassLoader.java b/src/launch/lombok/launch/ShadowClassLoader.java index 2bcf46b5..72f006e8 100644 --- a/src/launch/lombok/launch/ShadowClassLoader.java +++ b/src/launch/lombok/launch/ShadowClassLoader.java @@ -118,12 +118,16 @@ class ShadowClassLoader extends ClassLoader { SELF_BASE = selfBase; SELF_BASE_LENGTH = selfBase.length(); } else { - String sclClassUrl = ShadowClassLoader.class.getResource("ShadowClassLoader.class").toString(); - if (!sclClassUrl.endsWith(SELF_NAME)) throw new InternalError("ShadowLoader can't find itself."); - SELF_BASE_LENGTH = sclClassUrl.length() - SELF_NAME.length(); + URL sclClassUrl = ShadowClassLoader.class.getResource("ShadowClassLoader.class"); + String sclClassStr = sclClassUrl == null ? null : sclClassUrl.toString(); + if (sclClassStr == null || !sclClassStr.endsWith(SELF_NAME)) { + ClassLoader cl = ShadowClassLoader.class.getClassLoader(); + throw new RuntimeException("ShadowLoader can't find itself. SCL loader type: " + (cl == null ? "*NULL*" : cl.getClass().toString())); + } + SELF_BASE_LENGTH = sclClassStr.length() - SELF_NAME.length(); String decoded; try { - decoded = URLDecoder.decode(sclClassUrl.substring(0, SELF_BASE_LENGTH), "UTF-8"); + decoded = URLDecoder.decode(sclClassStr.substring(0, SELF_BASE_LENGTH), "UTF-8"); } catch (UnsupportedEncodingException e) { throw new InternalError("UTF-8 not available"); } -- cgit