mirror of
https://github.com/tiennm99/lombok.git
synced 2026-10-11 12:19:00 +00:00
Adapt to changes made in the JDT TokenScanner API.
- Support older/newer API depending on the value of the first parameter - TokenScanner#getTokenEndOffset(int, int) first parameter becomes an enum called TerminalToken Signed-off-by: Roland Grunberg <rgrunber@redhat.com>
This commit is contained in:
1 parent
f5beede847
commit
f1a0c7447b
2 files changed
+40
-2
No files matched your search
@@ -332,7 +332,14 @@ public class EclipsePatcher implements AgentLauncher.AgentLaunchable {
|
||||
.requestExtra(StackRequest.PARAM1)
|
||||
.transplant()
|
||||
.build());
|
||||
|
||||
|
||||
sm.addScriptIfWitness(new String [] {"org/eclipse/jdt/internal/compiler/parser/TerminalToken"}, ScriptBuilder.replaceMethodCall()
|
||||
.target(new MethodTarget("org.eclipse.jdt.internal.core.dom.rewrite.ASTRewriteAnalyzer", "visit"))
|
||||
.methodToReplace(new Hook("org.eclipse.jdt.internal.core.dom.rewrite.TokenScanner", "getTokenEndOffset", "int", "org.eclipse.jdt.internal.compiler.parser.TerminalToken", "int"))
|
||||
.replacementMethod(new Hook("lombok.launch.PatchFixesHider$PatchFixes", "getTokenEndOffsetFixed", "int", "org.eclipse.jdt.internal.core.dom.rewrite.TokenScanner", "java.lang.Object", "int", "java.lang.Object"))
|
||||
.requestExtra(StackRequest.PARAM1)
|
||||
.transplant()
|
||||
.build());
|
||||
}
|
||||
|
||||
private static void patchPostCompileHookEclipse(ScriptManager sm) {
|
||||
|
||||
@@ -791,7 +791,38 @@ final class PatchFixesHider {
|
||||
// If this fails, better to break some refactor scripts than to crash eclipse.
|
||||
}
|
||||
if (isGenerated) return -1;
|
||||
return scanner.getTokenEndOffset(token, startOffset);
|
||||
|
||||
Object res = -1;
|
||||
try {
|
||||
Method m = Permit.getMethod(TokenScanner.class, "getTokenEndOffset", int.class, int.class);
|
||||
res = Permit.invoke(m, scanner, token, startOffset);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
// continue
|
||||
}
|
||||
return (Integer) res;
|
||||
}
|
||||
|
||||
public static int getTokenEndOffsetFixed(TokenScanner scanner, Object token, int startOffset, Object domNode) throws CoreException {
|
||||
boolean isGenerated = false;
|
||||
try {
|
||||
isGenerated = (Boolean) domNode.getClass().getField("$isGenerated").get(domNode);
|
||||
} catch (Exception e) {
|
||||
// If this fails, better to break some refactor scripts than to crash eclipse.
|
||||
}
|
||||
if (isGenerated) return -1;
|
||||
|
||||
Object res = -1;
|
||||
try {
|
||||
// https://github.com/eclipse-jdt/eclipse.jdt.core/issues/3303
|
||||
Class<?> TERMINAL_TOKEN_CLASS = Class.forName("org.eclipse.jdt.internal.compiler.parser.TerminalToken");
|
||||
Method m = Permit.getMethod(TokenScanner.class, "getTokenEndOffset", TERMINAL_TOKEN_CLASS, int.class);
|
||||
res = Permit.invoke(m, scanner, token, startOffset);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
// continue
|
||||
}
|
||||
return (Integer) res;
|
||||
}
|
||||
|
||||
public static IMethod[] removeGeneratedMethods(IMethod[] methods) throws Exception {
|
||||
|
||||
Reference in new issue
Block a user