From ff7b1fbb438dbb378f9e0f725ed5f80fa7b82f55 Mon Sep 17 00:00:00 2001 From: Rawi01 Date: Thu, 28 Oct 2021 10:14:20 +0200 Subject: Patch getMethodDeclarationNode method instead of individual calls --- .../lombok/eclipse/agent/EclipsePatcher.java | 25 ++++++++++++---------- 1 file changed, 14 insertions(+), 11 deletions(-) (limited to 'src/eclipseAgent/lombok/eclipse/agent/EclipsePatcher.java') diff --git a/src/eclipseAgent/lombok/eclipse/agent/EclipsePatcher.java b/src/eclipseAgent/lombok/eclipse/agent/EclipsePatcher.java index 06e10960..76a65e16 100644 --- a/src/eclipseAgent/lombok/eclipse/agent/EclipsePatcher.java +++ b/src/eclipseAgent/lombok/eclipse/agent/EclipsePatcher.java @@ -95,6 +95,7 @@ public class EclipsePatcher implements AgentLauncher.AgentLaunchable { patchEclipseDebugPatches(sm); patchJavadoc(sm); patchASTConverterLiterals(sm); + patchASTNodeSearchUtil(sm); patchPostCompileHookEcj(sm); @@ -174,17 +175,6 @@ public class EclipsePatcher implements AgentLauncher.AgentLaunchable { .transplant() .build()); - /* Get real generated node instead of a random one generated by the annotation */ - sm.addScriptIfWitness(OSGI_TYPES, ScriptBuilder.replaceMethodCall() - .target(new MethodTarget("org.eclipse.jdt.internal.corext.refactoring.structure.ExtractInterfaceProcessor", "createMemberDeclarations")) - .target(new MethodTarget("org.eclipse.jdt.internal.corext.refactoring.structure.ExtractInterfaceProcessor", "createMethodComments")) - .target(new MethodTarget("org.eclipse.jdt.internal.corext.refactoring.structure.PullUpRefactoringProcessor", "createAbstractMethod")) - .target(new MethodTarget("org.eclipse.jdt.internal.corext.refactoring.structure.PullUpRefactoringProcessor", "addMethodStubForAbstractMethod")) - .target(new MethodTarget("org.eclipse.jdt.internal.corext.refactoring.structure.PullUpRefactoringProcessor", "createChangeManager")) - .methodToReplace(new Hook("org.eclipse.jdt.internal.corext.refactoring.structure.ASTNodeSearchUtil", "getMethodDeclarationNode", "org.eclipse.jdt.core.dom.MethodDeclaration", "org.eclipse.jdt.core.IMethod", "org.eclipse.jdt.core.dom.CompilationUnit")) - .replacementMethod(new Hook("lombok.launch.PatchFixesHider$PatchFixes", "getRealMethodDeclarationNode", "org.eclipse.jdt.core.dom.MethodDeclaration", "org.eclipse.jdt.core.IMethod", "org.eclipse.jdt.core.dom.CompilationUnit")) - .transplant().build()); - /* Do not add @Override's for generated methods */ sm.addScriptIfWitness(OSGI_TYPES, ScriptBuilder.exitEarly() .target(new MethodTarget("org.eclipse.jdt.core.dom.rewrite.ListRewrite", "insertFirst")) @@ -995,5 +985,18 @@ public class EclipsePatcher implements AgentLauncher.AgentLaunchable { .transplant() .build()); } + + private static void patchASTNodeSearchUtil(ScriptManager sm) { + /* + * If an annotation generates more than one method the normal node search returns one of them instead of the right one. + * This patch method also compares method name and method parameter types to identify the right method. + */ + sm.addScriptIfWitness(OSGI_TYPES, ScriptBuilder.wrapReturnValue() + .target(new MethodTarget("org.eclipse.jdt.internal.corext.refactoring.structure.ASTNodeSearchUtil", "getMethodDeclarationNode", "org.eclipse.jdt.core.dom.MethodDeclaration", "org.eclipse.jdt.core.IMethod", "org.eclipse.jdt.core.dom.CompilationUnit")) + .wrapMethod(new Hook("lombok.launch.PatchFixesHider$PatchFixes", "getRealMethodDeclarationNode", "org.eclipse.jdt.core.dom.MethodDeclaration", "org.eclipse.jdt.core.dom.MethodDeclaration", "org.eclipse.jdt.core.IMethod", "org.eclipse.jdt.core.dom.CompilationUnit")) + .request(StackRequest.RETURN_VALUE, StackRequest.PARAM1, StackRequest.PARAM2) + .transplant() + .build()); + } } -- cgit