mirror of
https://github.com/tiennm99/lombok.git
synced 2026-10-15 16:14:46 +00:00
Merge pull request #10 from jvanderhel/Issue_90
Proposed fix for issue 90 - disables lombok when the AST is being parsed for an autoformatter run, and patches various methods of the ControlStatementFinder to not try to find generated nodes.
This commit is contained in:
commit
68c38e93e6
2 files changed
+31
No files matched your search
@@ -89,6 +89,7 @@ public class EclipsePatcher extends Agent {
|
||||
patchHideGeneratedNodes(sm);
|
||||
patchPostCompileHookEclipse(sm);
|
||||
patchFixSourceTypeConverter(sm);
|
||||
patchDisableLombokForCodeFormatterAndCleanup(sm);
|
||||
} else {
|
||||
patchPostCompileHookEcj(sm);
|
||||
}
|
||||
@@ -99,6 +100,26 @@ public class EclipsePatcher extends Agent {
|
||||
if (reloadExistingClasses) sm.reloadClasses(instrumentation);
|
||||
}
|
||||
|
||||
private static void patchDisableLombokForCodeFormatterAndCleanup(ScriptManager sm) {
|
||||
sm.addScript(ScriptBuilder.setSymbolDuringMethodCall()
|
||||
.target(new MethodTarget("org.eclipse.jdt.internal.formatter.DefaultCodeFormatter", "formatCompilationUnit"))
|
||||
.callToWrap(new Hook("org.eclipse.jdt.internal.core.util.CodeSnippetParsingUtil", "parseCompilationUnit", "org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration", "char[]", "java.util.Map", "boolean"))
|
||||
.symbol("lombok.disable")
|
||||
.build());
|
||||
|
||||
sm.addScript(ScriptBuilder.exitEarly()
|
||||
.target(new MethodTarget("org.eclipse.jdt.internal.corext.fix.ControlStatementsFix$ControlStatementFinder", "visit", "boolean", "org.eclipse.jdt.core.dom.DoStatement"))
|
||||
.target(new MethodTarget("org.eclipse.jdt.internal.corext.fix.ControlStatementsFix$ControlStatementFinder", "visit", "boolean", "org.eclipse.jdt.core.dom.EnhancedForStatement"))
|
||||
.target(new MethodTarget("org.eclipse.jdt.internal.corext.fix.ControlStatementsFix$ControlStatementFinder", "visit", "boolean", "org.eclipse.jdt.core.dom.ForStatement"))
|
||||
.target(new MethodTarget("org.eclipse.jdt.internal.corext.fix.ControlStatementsFix$ControlStatementFinder", "visit", "boolean", "org.eclipse.jdt.core.dom.IfStatement"))
|
||||
.target(new MethodTarget("org.eclipse.jdt.internal.corext.fix.ControlStatementsFix$ControlStatementFinder", "visit", "boolean", "org.eclipse.jdt.core.dom.WhileStatement"))
|
||||
.decisionMethod(new Hook("lombok.eclipse.agent.PatchFixes", "isGenerated", "boolean", "org.eclipse.jdt.core.dom.Statement"))
|
||||
.request(StackRequest.PARAM1)
|
||||
.valueMethod(new Hook("lombok.eclipse.agent.PatchFixes", "isGenerated", "boolean", "org.eclipse.jdt.core.dom.Statement"))
|
||||
.build());
|
||||
}
|
||||
|
||||
|
||||
private static void patchDomAstReparseIssues(ScriptManager sm) {
|
||||
sm.addScript(ScriptBuilder.replaceMethodCall()
|
||||
.target(new MethodTarget("org.eclipse.jdt.internal.core.dom.rewrite.ASTRewriteAnalyzer", "visit"))
|
||||
|
||||
@@ -41,6 +41,16 @@ import org.eclipse.jdt.internal.compiler.ast.Annotation;
|
||||
import org.eclipse.jdt.internal.core.dom.rewrite.TokenScanner;
|
||||
|
||||
public class PatchFixes {
|
||||
public static boolean isGenerated(org.eclipse.jdt.core.dom.Statement statement) {
|
||||
boolean result = false;
|
||||
try {
|
||||
result = ((Boolean)statement.getClass().getField("$isGenerated").get(statement)).booleanValue();
|
||||
} catch (Exception e) {
|
||||
// better to assume it isn't generated
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static int fixRetrieveStartingCatchPosition(int original, int start) {
|
||||
return original == -1 ? start : original;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user