mirror of
https://github.com/tiennm99/lombok.git
synced 2026-10-19 08:15:20 +00:00
Merge branch 'Issue_138' of https://github.com/jvanderhel/lombok into jvanderhel-Issue_138
Conflicts: src/eclipseAgent/lombok/eclipse/agent/EclipsePatcher.java
This commit is contained in:
commit
1cdd42ac10
2 files changed
+55
-1
No files matched your search
@@ -90,6 +90,7 @@ public class EclipsePatcher extends Agent {
|
||||
patchPostCompileHookEclipse(sm);
|
||||
patchFixSourceTypeConverter(sm);
|
||||
patchDisableLombokForCodeFormatterAndCleanup(sm);
|
||||
patchListRewriteHandleGeneratedMethods(sm);
|
||||
} else {
|
||||
patchPostCompileHookEcj(sm);
|
||||
}
|
||||
@@ -119,7 +120,14 @@ public class EclipsePatcher extends Agent {
|
||||
.build());
|
||||
}
|
||||
|
||||
|
||||
private static void patchListRewriteHandleGeneratedMethods(ScriptManager sm) {
|
||||
sm.addScript(ScriptBuilder.replaceMethodCall()
|
||||
.target(new MethodTarget("org.eclipse.jdt.internal.core.dom.rewrite.ASTRewriteAnalyzer$ListRewriter", "rewriteList"))
|
||||
.methodToReplace(new Hook("org.eclipse.jdt.internal.core.dom.rewrite.RewriteEvent", "getChildren", "org.eclipse.jdt.internal.core.dom.rewrite.RewriteEvent[]"))
|
||||
.replacementMethod(new Hook("lombok.eclipse.agent.PatchFixes", "listRewriteHandleGeneratedMethods", "org.eclipse.jdt.internal.core.dom.rewrite.RewriteEvent[]", "org.eclipse.jdt.internal.core.dom.rewrite.RewriteEvent"))
|
||||
.build());
|
||||
}
|
||||
|
||||
private static void patchDomAstReparseIssues(ScriptManager sm) {
|
||||
sm.addScript(ScriptBuilder.replaceMethodCall()
|
||||
.target(new MethodTarget("org.eclipse.jdt.internal.core.dom.rewrite.ASTRewriteAnalyzer", "visit"))
|
||||
@@ -246,6 +254,13 @@ public class EclipsePatcher extends Agent {
|
||||
"org.eclipse.jdt.core.dom.ASTNode", "org.eclipse.jdt.internal.compiler.ast.ASTNode"))
|
||||
.transplant().build());
|
||||
|
||||
sm.addScript(ScriptBuilder.wrapReturnValue()
|
||||
.target(new MethodTarget("org.eclipse.jdt.core.dom.ASTConverter", "convert", "org.eclipse.jdt.core.dom.ASTNode", "boolean", "org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration"))
|
||||
.request(StackRequest.PARAM2, StackRequest.RETURN_VALUE)
|
||||
.wrapMethod(new Hook("lombok.eclipse.agent.PatchFixes", "setIsGeneratedFlag", "void",
|
||||
"org.eclipse.jdt.core.dom.ASTNode", "org.eclipse.jdt.internal.compiler.ast.ASTNode"))
|
||||
.transplant().build());
|
||||
|
||||
sm.addScript(ScriptBuilder.wrapMethodCall()
|
||||
.target(new TargetMatcher() {
|
||||
@Override public boolean matches(String classSpec, String methodName, String descriptor) {
|
||||
@@ -266,6 +281,14 @@ public class EclipsePatcher extends Agent {
|
||||
.wrapMethod(new Hook("lombok.eclipse.agent.PatchFixes", "setIsGeneratedFlagForSimpleName", "void",
|
||||
"org.eclipse.jdt.core.dom.SimpleName", "java.lang.Object"))
|
||||
.transplant().build());
|
||||
|
||||
sm.addScript(ScriptBuilder.wrapMethodCall()
|
||||
.target(new MethodTarget("org.eclipse.jdt.core.dom.ASTConverter", "convert", "org.eclipse.jdt.core.dom.ASTNode", "boolean", "org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration"))
|
||||
.methodToWrap(new Hook("org.eclipse.jdt.core.dom.SimpleName", "<init>", "void", "org.eclipse.jdt.core.dom.AST"))
|
||||
.requestExtra(StackRequest.PARAM2)
|
||||
.wrapMethod(new Hook("lombok.eclipse.agent.PatchFixes", "setIsGeneratedFlagForSimpleName", "void",
|
||||
"org.eclipse.jdt.core.dom.SimpleName", "java.lang.Object"))
|
||||
.transplant().build());
|
||||
}
|
||||
|
||||
private static void patchAvoidReparsingGeneratedCode(ScriptManager sm) {
|
||||
|
||||
@@ -38,6 +38,8 @@ import org.eclipse.jdt.core.IAnnotation;
|
||||
import org.eclipse.jdt.core.IMethod;
|
||||
import org.eclipse.jdt.core.dom.SimpleName;
|
||||
import org.eclipse.jdt.internal.compiler.ast.Annotation;
|
||||
import org.eclipse.jdt.internal.core.dom.rewrite.NodeRewriteEvent;
|
||||
import org.eclipse.jdt.internal.core.dom.rewrite.RewriteEvent;
|
||||
import org.eclipse.jdt.internal.core.dom.rewrite.TokenScanner;
|
||||
|
||||
public class PatchFixes {
|
||||
@@ -92,6 +94,35 @@ public class PatchFixes {
|
||||
}
|
||||
}
|
||||
|
||||
public static RewriteEvent[] listRewriteHandleGeneratedMethods(RewriteEvent parent) {
|
||||
RewriteEvent[] children = parent.getChildren();
|
||||
List<RewriteEvent> newChildren = new ArrayList<RewriteEvent>();
|
||||
List<RewriteEvent> modifiedChildren = new ArrayList<RewriteEvent>();
|
||||
for (int i=0; i<children.length; i++) {
|
||||
RewriteEvent child = children[i];
|
||||
boolean isGenerated = false;
|
||||
try {
|
||||
org.eclipse.jdt.core.dom.ASTNode originalValue = (org.eclipse.jdt.core.dom.ASTNode)child.getOriginalValue();
|
||||
isGenerated = (Boolean) originalValue.getClass().getField("$isGenerated").get(originalValue);
|
||||
} catch (Exception e) {
|
||||
// If this fails, better to break some refactor scripts than to crash eclipse.
|
||||
}
|
||||
if (isGenerated
|
||||
&& (child.getChangeKind() == RewriteEvent.REPLACED || child.getChangeKind() == RewriteEvent.REMOVED)
|
||||
&& child.getOriginalValue() instanceof org.eclipse.jdt.core.dom.MethodDeclaration
|
||||
) {
|
||||
if (child.getNewValue() != null)
|
||||
modifiedChildren.add(new NodeRewriteEvent(null, child.getNewValue()));
|
||||
} else {
|
||||
newChildren.add(child);
|
||||
}
|
||||
}
|
||||
// Since Eclipse doesn't honor the "insert at specified location" for already existing members,
|
||||
// we'll just add them last
|
||||
newChildren.addAll(modifiedChildren);
|
||||
return newChildren.toArray(new RewriteEvent[newChildren.size()]);
|
||||
}
|
||||
|
||||
public static int getTokenEndOffsetFixed(TokenScanner scanner, int token, int startOffset, Object domNode) throws CoreException {
|
||||
boolean isGenerated = false;
|
||||
try {
|
||||
|
||||
Reference in new issue
Block a user