From 27a3efeb1cb6f79ecefc6e641ba78de6d69406c3 Mon Sep 17 00:00:00 2001 From: Reinier Zwitserloot Date: Sat, 26 Sep 2009 09:00:12 +0200 Subject: [PATCH] Rewrite of the eclipse agent to use the new lombok.patcher project. --- .classpath | 1 + lib/eclipse.agent/lombok-patcher.jar | Bin 0 -> 66886 bytes .../lombok/eclipse/ClassLoaderWorkaround.java | 4 + .../java/lombok/eclipse/PatchFixes.java | 14 ++ .../agent/EclipseASTConverterTransformer.java | 95 ---------- .../agent/EclipseASTNodeTransformer.java | 68 ------- .../eclipse/agent/EclipseCUDTransformer.java | 66 ------- .../agent/EclipseParserTransformer.java | 178 ------------------ .../lombok/eclipse/agent/EclipsePatcher.java | 59 ++++++ 9 files changed, 78 insertions(+), 407 deletions(-) create mode 100644 lib/eclipse.agent/lombok-patcher.jar create mode 100644 src_eclipseagent/java/lombok/eclipse/PatchFixes.java delete mode 100644 src_eclipseagent/lombok/eclipse/agent/EclipseASTConverterTransformer.java delete mode 100644 src_eclipseagent/lombok/eclipse/agent/EclipseASTNodeTransformer.java delete mode 100644 src_eclipseagent/lombok/eclipse/agent/EclipseCUDTransformer.java delete mode 100644 src_eclipseagent/lombok/eclipse/agent/EclipseParserTransformer.java diff --git a/.classpath b/.classpath index adbcc311..95ce615b 100644 --- a/.classpath +++ b/.classpath @@ -18,5 +18,6 @@ + diff --git a/lib/eclipse.agent/lombok-patcher.jar b/lib/eclipse.agent/lombok-patcher.jar new file mode 100644 index 0000000000000000000000000000000000000000..3c22f4f054976e4386f3f6958ab0e18e560dfb43 GIT binary patch literal 66886 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 e{ATd~$iHng1n8{vHh&}{u12) literal 0 HcmV?d00001 diff --git a/src_eclipseagent/java/lombok/eclipse/ClassLoaderWorkaround.java b/src_eclipseagent/java/lombok/eclipse/ClassLoaderWorkaround.java index f5c8bbd3..3d8e9ec9 100644 --- a/src_eclipseagent/java/lombok/eclipse/ClassLoaderWorkaround.java +++ b/src_eclipseagent/java/lombok/eclipse/ClassLoaderWorkaround.java @@ -52,6 +52,10 @@ public class ClassLoaderWorkaround { private static final Map transform = new HashMap(); + public static void transformCompilationUnitDeclarationSwapped(Object cud, Object parser) throws Exception { + transformCompilationUnitDeclaration(parser, cud); + } + public static void transformCompilationUnitDeclaration(Object parser, Object cud) throws Exception { Method transformMethod = getTransformMethod(cud); try { diff --git a/src_eclipseagent/java/lombok/eclipse/PatchFixes.java b/src_eclipseagent/java/lombok/eclipse/PatchFixes.java new file mode 100644 index 00000000..23c60d32 --- /dev/null +++ b/src_eclipseagent/java/lombok/eclipse/PatchFixes.java @@ -0,0 +1,14 @@ +package java.lombok.eclipse; + +public class PatchFixes { + public static int fixRetrieveStartingCatchPosition(int in) { + return in; + } + + private static final int BIT24 = 0x800000; + + public static boolean checkBit24(Object node) throws Exception { + int bits = (Integer)(node.getClass().getField("bits").get(node)); + return (bits & BIT24) != 0; + } +} diff --git a/src_eclipseagent/lombok/eclipse/agent/EclipseASTConverterTransformer.java b/src_eclipseagent/lombok/eclipse/agent/EclipseASTConverterTransformer.java deleted file mode 100644 index 4245e246..00000000 --- a/src_eclipseagent/lombok/eclipse/agent/EclipseASTConverterTransformer.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright © 2009 Reinier Zwitserloot and Roel Spilker. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package lombok.eclipse.agent; - -import org.mangosdk.spi.ProviderFor; -import org.objectweb.asm.ClassAdapter; -import org.objectweb.asm.ClassReader; -import org.objectweb.asm.ClassVisitor; -import org.objectweb.asm.ClassWriter; -import org.objectweb.asm.MethodAdapter; -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -/** - * Transforms Eclipse's org.eclipse.jdt.core.dom.ASTConverter class, which sometimes rescans bits and pieces - * of source files because Eclipse's own AST doesn't actually have enough information for eclipse (why they don't just fix - * the AST tree generator is beyond me). At any rate, for catch blocks generated by lombok, eclipse tries to rescan the - * source file to find the source position of the catch statement, which will of course fail as there's nothing there. - * We will fix the code to return the original starting position, which is a pretty good simile, instead of '-1', which - * screws up all sorts of things. - * - * Transformations applied:

    - *
  • The retrieveStartingCatchPosition(int, int) method is instrumented to return its first parameter - * instead of the constant -1.
- */ -@ProviderFor(EclipseTransformer.class) -public class EclipseASTConverterTransformer implements EclipseTransformer { - public byte[] transform(byte[] classfileBuffer) { - ClassReader reader = new ClassReader(classfileBuffer); - ClassWriter writer = new ClassWriter(reader, 0); - - ClassAdapter adapter = new ASTConverterPatcherAdapter(writer); - reader.accept(adapter, 0); - return writer.toByteArray(); - } - - private static class ASTConverterPatcherAdapter extends ClassAdapter { - public ASTConverterPatcherAdapter(ClassVisitor cv) { - super(cv); - } - - @Override public MethodVisitor visitMethod(int access, String name, String desc, - String signature, String[] exceptions) { - MethodVisitor writerVisitor = super.visitMethod(access, name, desc, signature, exceptions); - if ( !name.equals("retrieveStartingCatchPosition") ) return writerVisitor; - - return new RetrieveStartingCatchPositionPatcher(writerVisitor); - } - } - - static class RetrieveStartingCatchPositionPatcher extends MethodAdapter { - RetrieveStartingCatchPositionPatcher(MethodVisitor mv) { - super(mv); - } - - int count = 0; - @Override public void visitInsn(int opcode) { - if ( opcode == Opcodes.IRETURN ) { - if ( count++ == 0 ) { - super.visitInsn(opcode); - return; - } - //replaces: "return -1" with "return [firstParam]"; - super.visitInsn(Opcodes.POP); - super.visitVarInsn(Opcodes.ILOAD, 1); - super.visitInsn(Opcodes.IRETURN); - } else { - super.visitInsn(opcode); - } - } - } - - @Override public String getTargetClassName() { - return "org/eclipse/jdt/core/dom/ASTConverter"; - } -} diff --git a/src_eclipseagent/lombok/eclipse/agent/EclipseASTNodeTransformer.java b/src_eclipseagent/lombok/eclipse/agent/EclipseASTNodeTransformer.java deleted file mode 100644 index e27aa08c..00000000 --- a/src_eclipseagent/lombok/eclipse/agent/EclipseASTNodeTransformer.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright © 2009 Reinier Zwitserloot and Roel Spilker. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package lombok.eclipse.agent; - -import org.mangosdk.spi.ProviderFor; -import org.objectweb.asm.ClassAdapter; -import org.objectweb.asm.ClassReader; -import org.objectweb.asm.ClassVisitor; -import org.objectweb.asm.ClassWriter; -import org.objectweb.asm.FieldVisitor; -import org.objectweb.asm.Opcodes; - -/** - * Transforms Eclipse's {@code org.eclipse.jdt.internal.compiler.ast.ASTNode} class, - * which is the super-class of all AST Node class for Eclipse. - * - * Transformations applied:
    - *
  • A field is added: 'public transient ASTNode $generatedBy = null;'. It is set to something other than {@code null} if - * this node is generated; the reference then points at the node that is responsible for its generation (example: a {@code @Data} annotation).
- */ -@ProviderFor(EclipseTransformer.class) -public class EclipseASTNodeTransformer implements EclipseTransformer { - private static final String ASTNODE = "org/eclipse/jdt/internal/compiler/ast/ASTNode"; - - public byte[] transform(byte[] classfileBuffer) { - ClassReader reader = new ClassReader(classfileBuffer); - ClassWriter writer = new ClassWriter(reader, 0); - - ClassAdapter adapter = new ASTNodePatcherAdapter(writer); - reader.accept(adapter, 0); - return writer.toByteArray(); - } - - private static class ASTNodePatcherAdapter extends ClassAdapter { - ASTNodePatcherAdapter(ClassVisitor cv) { - super(cv); - } - - @Override public void visitEnd() { - FieldVisitor fv = cv.visitField(Opcodes.ACC_PUBLIC | Opcodes.ACC_TRANSIENT, "$generatedBy", "L" + ASTNODE + ";", null, null); - fv.visitEnd(); - cv.visitEnd(); - } - } - - @Override public String getTargetClassName() { - return ASTNODE; - } -} diff --git a/src_eclipseagent/lombok/eclipse/agent/EclipseCUDTransformer.java b/src_eclipseagent/lombok/eclipse/agent/EclipseCUDTransformer.java deleted file mode 100644 index b18a1ff1..00000000 --- a/src_eclipseagent/lombok/eclipse/agent/EclipseCUDTransformer.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright © 2009 Reinier Zwitserloot and Roel Spilker. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package lombok.eclipse.agent; - -import org.mangosdk.spi.ProviderFor; -import org.objectweb.asm.ClassAdapter; -import org.objectweb.asm.ClassReader; -import org.objectweb.asm.ClassVisitor; -import org.objectweb.asm.ClassWriter; -import org.objectweb.asm.FieldVisitor; -import org.objectweb.asm.Opcodes; - -/** - * Transforms Eclipse's org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration class, - * which is the top-level AST Node class for Eclipse. - * - * Transformations applied:
    - *
  • A field is added: 'public transient Object $lombokAST = null;'. We use it to cache our own AST object, - * usually of type lombok.eclipse.EclipseAST.
- */ -@ProviderFor(EclipseTransformer.class) -public class EclipseCUDTransformer implements EclipseTransformer { - public byte[] transform(byte[] classfileBuffer) { - ClassReader reader = new ClassReader(classfileBuffer); - ClassWriter writer = new ClassWriter(reader, 0); - - ClassAdapter adapter = new CUDPatcherAdapter(writer); - reader.accept(adapter, 0); - return writer.toByteArray(); - } - - private static class CUDPatcherAdapter extends ClassAdapter { - CUDPatcherAdapter(ClassVisitor cv) { - super(cv); - } - - @Override public void visitEnd() { - FieldVisitor fv = cv.visitField(Opcodes.ACC_PUBLIC | Opcodes.ACC_TRANSIENT, "$lombokAST", "Ljava/lang/Object;", null, null); - fv.visitEnd(); - cv.visitEnd(); - } - } - - @Override public String getTargetClassName() { - return "org/eclipse/jdt/internal/compiler/ast/CompilationUnitDeclaration"; - } -} diff --git a/src_eclipseagent/lombok/eclipse/agent/EclipseParserTransformer.java b/src_eclipseagent/lombok/eclipse/agent/EclipseParserTransformer.java deleted file mode 100644 index 38917332..00000000 --- a/src_eclipseagent/lombok/eclipse/agent/EclipseParserTransformer.java +++ /dev/null @@ -1,178 +0,0 @@ -/* - * Copyright © 2009 Reinier Zwitserloot and Roel Spilker. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package lombok.eclipse.agent; - -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - -import lombok.Lombok; - -import org.mangosdk.spi.ProviderFor; -import org.objectweb.asm.ClassAdapter; -import org.objectweb.asm.ClassReader; -import org.objectweb.asm.ClassVisitor; -import org.objectweb.asm.ClassWriter; -import org.objectweb.asm.Label; -import org.objectweb.asm.MethodAdapter; -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -/** - * Transforms Eclipse's org.eclipse.jdt.internal.compiler.parser.Parser class, - * which handles all the actual java source to AST tree conversion in eclipse. - * - * Transformations applied:
    - *
  • The CompilationUnitDeclaration endParse(int) method is instrumented to call - * the lombok framework via ClassLoaderWorkaround to TransformEclipseAST with the CompilationUnitDeclaration - * right before it returns the CompilationUnitDeclaration.
  • - *
  • The getMethodBodies(CompilationUnitDeclaration) is similarly instrumented; eclipse uses a - * 2-step parsing system, where the bodies of methods aren't filled in until its actually neccessary. Lombok - * gets a chance to change the AST immediately after either step.
  • - *
  • The parse(MethodDeclaration, CUD), parse(ConstructorDeclaration, CUD) and - * parse(Initializer, TypeDeclaration, CUD) methods are all instrumented to not attempt to - * complete parsing a method generated by lombok, as the source positions are obviously all wrong - * (the method content isn't in the source file!) - lombok has already filled in the complete AST. - * - * Bit24 on the flags field on all ASTNode objects is used as a marker.
- */ -@ProviderFor(EclipseTransformer.class) -public class EclipseParserTransformer implements EclipseTransformer { - private static final String COMPILER_PKG = - "Lorg/eclipse/jdt/internal/compiler/ast/"; - private static final String TARGET_STATIC_CLASS = "java/lombok/eclipse/ClassLoaderWorkaround"; - private static final String TARGET_STATIC_METHOD_NAME = "transformCompilationUnitDeclaration"; - private static final String TARGET_STATIC_METHOD_DESC = "(Ljava/lang/Object;Ljava/lang/Object;)V"; - - private static final Map> rewriters; - - static { - Map> map = new HashMap>(); - map.put(String.format("endParse(I)%sCompilationUnitDeclaration;", COMPILER_PKG), EndParsePatcher.class); - map.put(String.format("getMethodBodies(%sCompilationUnitDeclaration;)V", COMPILER_PKG), GetMethodBodiesPatcher.class); - map.put(String.format("parse(%1$sMethodDeclaration;%1$sCompilationUnitDeclaration;)V", COMPILER_PKG), ParseBlockContainerPatcher.class); - map.put(String.format("parse(%1$sConstructorDeclaration;%1$sCompilationUnitDeclaration;Z)V", COMPILER_PKG), ParseBlockContainerPatcher.class); - map.put(String.format("parse(%1$sInitializer;%1$sTypeDeclaration;%1$sCompilationUnitDeclaration;)V", COMPILER_PKG), ParseBlockContainerPatcher.class); - rewriters = Collections.unmodifiableMap(map); - } - - public byte[] transform(byte[] classfileBuffer) { - ClassReader reader = new ClassReader(classfileBuffer); - ClassWriter writer = new ClassWriter(reader, 0); - - ClassAdapter adapter = new ParserPatcherAdapter(writer); - reader.accept(adapter, 0); - return writer.toByteArray(); - } - - private static class ParserPatcherAdapter extends ClassAdapter { - public ParserPatcherAdapter(ClassVisitor cv) { - super(cv); - } - - @Override public MethodVisitor visitMethod(int access, String name, String desc, - String signature, String[] exceptions) { - MethodVisitor writerVisitor = super.visitMethod(access, name, desc, signature, exceptions); - Class targetVisitorClass = rewriters.get(name+desc); - if ( targetVisitorClass == null ) return writerVisitor; - - try { - Constructor c = targetVisitorClass.getDeclaredConstructor(MethodVisitor.class); - c.setAccessible(true); - return c.newInstance(writerVisitor); - } catch ( InvocationTargetException e ) { - throw Lombok.sneakyThrow(e.getCause()); - } catch ( Exception e ) { - //NoSuchMethodException: We know they exist. - //IllegalAccessException: We called setAccessible. - //InstantiationException: None of these classes are abstract. - throw Lombok.sneakyThrow(e); - } - } - } - - private static final int BIT24 = 0x800000; - - static class GetMethodBodiesPatcher extends MethodAdapter { - GetMethodBodiesPatcher(MethodVisitor mv) { - super(mv); - } - - @Override public void visitInsn(int opcode) { - if ( opcode == Opcodes.RETURN ) { - //injects: ClassLoaderWorkaround.transformCUD(parser, compilationUnitDeclaration); - super.visitVarInsn(Opcodes.ALOAD, 0); - super.visitVarInsn(Opcodes.ALOAD, 1); - super.visitMethodInsn(Opcodes.INVOKESTATIC, TARGET_STATIC_CLASS, - TARGET_STATIC_METHOD_NAME, TARGET_STATIC_METHOD_DESC); - } - super.visitInsn(opcode); - } - } - - static class ParseBlockContainerPatcher extends MethodAdapter { - ParseBlockContainerPatcher(MethodVisitor mv) { - super(mv); - } - - @Override public void visitCode() { - //injects: if ( constructorDeclaration.bits & BIT24 > 0 ) return; - mv.visitVarInsn(Opcodes.ALOAD, 1); - mv.visitFieldInsn(Opcodes.GETFIELD, "org/eclipse/jdt/internal/compiler/ast/ASTNode", "bits", "I"); - mv.visitLdcInsn(Integer.valueOf(BIT24)); - mv.visitInsn(Opcodes.IAND); - Label l0 = new Label(); - mv.visitJumpInsn(Opcodes.IFLE, l0); - mv.visitInsn(Opcodes.RETURN); - mv.visitLabel(l0); - mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null); - super.visitCode(); - } - } - - static class EndParsePatcher extends MethodAdapter { - private static final String TARGET_STATIC_METHOD_NAME = "transformCompilationUnitDeclaration"; - - EndParsePatcher(MethodVisitor mv) { - super(mv); - } - - @Override public void visitInsn(int opcode) { - if ( opcode == Opcodes.ARETURN ) { - //injects: ClassLoaderWorkaround.transformCUD(parser, compilationUnitDeclaration); - super.visitInsn(Opcodes.DUP); - super.visitVarInsn(Opcodes.ALOAD, 0); - super.visitInsn(Opcodes.SWAP); - super.visitMethodInsn(Opcodes.INVOKESTATIC, TARGET_STATIC_CLASS, - TARGET_STATIC_METHOD_NAME, TARGET_STATIC_METHOD_DESC); - } - - super.visitInsn(opcode); - } - } - - @Override public String getTargetClassName() { - return "org/eclipse/jdt/internal/compiler/parser/Parser"; - } -} diff --git a/src_eclipseagent/lombok/eclipse/agent/EclipsePatcher.java b/src_eclipseagent/lombok/eclipse/agent/EclipsePatcher.java index 7659302c..c7aa48ff 100644 --- a/src_eclipseagent/lombok/eclipse/agent/EclipsePatcher.java +++ b/src_eclipseagent/lombok/eclipse/agent/EclipsePatcher.java @@ -37,8 +37,17 @@ import java.util.jar.JarFile; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.objectweb.asm.Opcodes; + import lombok.Lombok; import lombok.core.SpiLoadUtil; +import lombok.patcher.Hook; +import lombok.patcher.MethodTarget; +import lombok.patcher.ScriptManager; +import lombok.patcher.StackRequest; +import lombok.patcher.scripts.AddFieldScript; +import lombok.patcher.scripts.ExitFromMethodEarlyScript; +import lombok.patcher.scripts.WrapReturnValuesScript; /** * This is a java-agent that patches some of eclipse's classes so AST Nodes are handed off to Lombok @@ -108,6 +117,56 @@ public class EclipsePatcher { public static void premain(String agentArgs, Instrumentation instrumentation) throws Exception { registerPatcher(instrumentation, false); addLombokToSearchPaths(instrumentation); + ScriptManager sm = new ScriptManager(); + sm.registerTransformer(instrumentation); + + sm.addScript(new WrapReturnValuesScript( + new MethodTarget("org.eclipse.jdt.core.dom.ASTConverter", "retrieveStartingCatchPosition"), + new Hook("java/lombok/eclipse/PatchFixes", "fixRetrieveStartingCatchPosition", "(I)I"), + StackRequest.PARAM1)); + + sm.addScript(new AddFieldScript("org.eclipse.jdt.internal.compiler.ast.ASTNode", + Opcodes.ACC_PUBLIC | Opcodes.ACC_TRANSIENT, "$generatedBy", "Lorg/eclipse/jdt/internal/compiler/ast/ASTNode;")); + + sm.addScript(new AddFieldScript("org.eclipse.jdt.core.dom.ASTNode", + Opcodes.ACC_PUBLIC | Opcodes.ACC_TRANSIENT, "$isGenerated", "Z")); + + sm.addScript(new AddFieldScript("org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration", + Opcodes.ACC_PUBLIC | Opcodes.ACC_TRANSIENT, "$lombokAST", "Ljava/lang/Object;")); + + sm.addScript(new WrapReturnValuesScript( + new MethodTarget("org.eclipse.jdt.internal.compiler.parser.Parser", "getMethodBodies", "void", + "org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration"), + new Hook("java/lombok/eclipse/ClassLoaderWorkaround", "transformCompilationUnitDeclaration", + "(Ljava/lang/Object;Ljava/lang/Object;)V"), StackRequest.THIS, StackRequest.PARAM1)); + + sm.addScript(new WrapReturnValuesScript( + new MethodTarget("org.eclipse.jdt.internal.compiler.parser.Parser", "endParse", + "org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration", "int"), + new Hook("java/lombok/eclipse/ClassLoaderWorkaround", "transformCompilationUnitDeclarationSwapped", + "(Ljava/lang/Object;Ljava/lang/Object;)V"), StackRequest.THIS, StackRequest.RETURN_VALUE)); + + sm.addScript(new ExitFromMethodEarlyScript( + new MethodTarget("org.eclipse.jdt.internal.compiler.parser.Parser", "parse", "void", + "org.eclipse.jdt.internal.compiler.ast.MethodDeclaration", + "org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration"), + new Hook("java/lombok/eclipse/PatchFixes", "checkBit24", + "(Ljava/lang/Object;)Z"), null, StackRequest.PARAM1)); + + sm.addScript(new ExitFromMethodEarlyScript( + new MethodTarget("org.eclipse.jdt.internal.compiler.parser.Parser", "parse", "void", + "org.eclipse.jdt.internal.compiler.ast.ConstructorDeclaration", + "org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration", "boolean"), + new Hook("java/lombok/eclipse/PatchFixes", "checkBit24", + "(Ljava/lang/Object;)Z"), null, StackRequest.PARAM1)); + + sm.addScript(new ExitFromMethodEarlyScript( + new MethodTarget("org.eclipse.jdt.internal.compiler.parser.Parser", "parse", "void", + "org.eclipse.jdt.internal.compiler.ast.Initializer", + "org.eclipse.jdt.internal.compiler.ast.TypeDeclaration", + "org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration"), + new Hook("java/lombok/eclipse/PatchFixes", "checkBit24", + "(Ljava/lang/Object;)Z"), null, StackRequest.PARAM1)); } private static void registerPatcher(Instrumentation instrumentation, boolean transformExisting) throws IOException {