diff options
Diffstat (limited to 'src_eclipseagent/java/lombok')
-rw-r--r-- | src_eclipseagent/java/lombok/ClassLoaderWorkaround.java | 49 |
1 files changed, 20 insertions, 29 deletions
diff --git a/src_eclipseagent/java/lombok/ClassLoaderWorkaround.java b/src_eclipseagent/java/lombok/ClassLoaderWorkaround.java index 0238b592..a3fc1521 100644 --- a/src_eclipseagent/java/lombok/ClassLoaderWorkaround.java +++ b/src_eclipseagent/java/lombok/ClassLoaderWorkaround.java @@ -3,8 +3,10 @@ package java.lombok; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; +import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; + /** * Allows you to inject the lombok classes into any classloader, even if that classloader does not * know how to find the lombok classes. @@ -14,35 +16,32 @@ import java.lang.reflect.Method; * @author rzwitserloot */ public class ClassLoaderWorkaround { - private static boolean initialized; - private static Method transformCompilationUnitDeclaration; - private static Method transformMethodDeclaration; - private static Method transformConstructorDeclaration; - private static Method transformInitializer; - - public static void transformCompilationUnitDeclaration(Object parser, Object cud) throws Exception { - initialize(cud); - transformCompilationUnitDeclaration.invoke(null, parser, cud); + static RuntimeException sneakyThrow(Throwable t) { + if ( t == null ) throw new NullPointerException("t"); + ClassLoaderWorkaround.<RuntimeException>sneakyThrow0(t); + return null; } - public static void transformMethodDeclaration(Object parser, Object methodDeclaration) throws Exception { - initialize(methodDeclaration); - transformMethodDeclaration.invoke(null, parser, methodDeclaration); + @SuppressWarnings("unchecked") + private static <T extends Throwable> void sneakyThrow0(Throwable t) throws T { + throw (T)t; } - public static void transformConstructorDeclaration(Object parser, Object constructorDeclaration) throws Exception { - initialize(constructorDeclaration); - transformConstructorDeclaration.invoke(null, parser, constructorDeclaration); - } + private static boolean initialized; + private static Method transform; - public static void transformInitializer(Object parser, Object initializer) throws Exception { - initialize(initializer); - transformInitializer.invoke(null, parser, initializer); + public static void transformCompilationUnitDeclaration(Object parser, Object cud) throws Exception { + initialize(cud); + try { + transform.invoke(null, parser, cud); + } catch ( InvocationTargetException e ) { + throw sneakyThrow(e.getCause()); + } } private static void initialize(Object cud) throws ClassNotFoundException { if ( initialized ) { - if ( transformInitializer == null ) throw new ClassNotFoundException("lombok.eclipse.TransformEclipseAST"); + if ( transform == null ) throw new ClassNotFoundException("lombok.eclipse.TransformEclipseAST"); return; } @@ -87,15 +86,7 @@ public class ClassLoaderWorkaround { Class<?> c = loader.loadClass("lombok.eclipse.TransformEclipseAST"); for ( Method m : c.getMethods() ) { if ( m.getName().equals("transform") ) { - if ( m.getParameterTypes().length >= 2 ) { - Class<?> astType = m.getParameterTypes()[1]; - String astName = astType.getName(); - astName = astName.substring(astName.lastIndexOf('.') + 1); - if ( astName.equals("CompilationUnitDeclaration") ) transformCompilationUnitDeclaration = m; - else if ( astName.equals("MethodDeclaration") ) transformMethodDeclaration = m; - else if ( astName.equals("ConstructorDeclaration") ) transformConstructorDeclaration = m; - else if ( astName.equals("Initializer") ) transformInitializer = m; - } + transform = m; } } } catch ( ClassNotFoundException ignore ) {} |