diff --git a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/compiler/CompileBatch.java b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/compiler/CompileBatch.java index 061f8dd4c4..d18d965d4c 100644 --- a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/compiler/CompileBatch.java +++ b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/compiler/CompileBatch.java @@ -168,6 +168,7 @@ private List options() { "-XDcompilePolicy=byfile", "-XD-Xprefer=source", "-XDide", + "-XDkeepCommentsOverride=ignore", "-XDsuppressAbortOnBadClassFile", "-XDshould-stop.at=GENERATE", "-XDdiags.formatterOptions=-source", diff --git a/subprojects/javac-services/src/main/java/com/itsaky/androidide/javac/services/NBParserFactory.java b/subprojects/javac-services/src/main/java/com/itsaky/androidide/javac/services/NBParserFactory.java index 004c14adae..a378835377 100644 --- a/subprojects/javac-services/src/main/java/com/itsaky/androidide/javac/services/NBParserFactory.java +++ b/subprojects/javac-services/src/main/java/com/itsaky/androidide/javac/services/NBParserFactory.java @@ -35,6 +35,7 @@ */ package com.itsaky.androidide.javac.services; +import com.itsaky.androidide.utils.ILogger; import openjdk.tools.javac.parser.JavacParser; import openjdk.tools.javac.parser.Lexer; import openjdk.tools.javac.parser.ParserFactory; @@ -52,6 +53,7 @@ import openjdk.tools.javac.util.List; import openjdk.tools.javac.util.Name; import openjdk.tools.javac.util.Names; +import openjdk.tools.javac.util.Options; import openjdk.tools.javac.util.Position; /** @@ -59,10 +61,18 @@ */ public class NBParserFactory extends ParserFactory { + public static final String KEEP_COMMENTS_OVERRIDE = "keepCommentsOverride"; + public static final String KEEP_COMMENTS_OVERRIDE_KEEP = "keep"; + public static final String KEEP_COMMENTS_OVERRIDE_IGNORE = "ignore"; + + private static final ILogger LOG = ILogger.newInstance("NBParserFactory"); + protected final ScannerFactory scannerFactory; protected final Names names; protected final CancelService cancelService; + protected final String keepCommentsOverride; + public static void preRegister(Context context) { context.put(parserFactoryKey, (Context.Factory) NBParserFactory::new); } @@ -72,6 +82,8 @@ protected NBParserFactory(Context context) { this.scannerFactory = ScannerFactory.instance(context); this.names = Names.instance(context); this.cancelService = CancelService.instance(context); + this.keepCommentsOverride = Options.instance(context).get(KEEP_COMMENTS_OVERRIDE); + } @Override @@ -81,9 +93,20 @@ public JavacParser newParser( boolean keepEndPos, boolean keepLineMap, boolean parseModuleInfo) { - Lexer lexer = scannerFactory.newScanner(input, keepDocComments); + var keepDocCommentsOverride = keepDocComments; + if (this.keepCommentsOverride != null) { + if (KEEP_COMMENTS_OVERRIDE_IGNORE.equals(this.keepCommentsOverride)) { + keepDocCommentsOverride = false; + } else if (KEEP_COMMENTS_OVERRIDE_KEEP.equals(this.keepCommentsOverride)) { + keepDocCommentsOverride = true; + } + LOG.debug("'keepComments' overridden to ", this.keepCommentsOverride); + } + + Lexer lexer = scannerFactory.newScanner(input, keepDocCommentsOverride); return new NBJavacParser( - this, lexer, keepDocComments, keepLineMap, keepEndPos, parseModuleInfo, cancelService); + this, lexer, keepDocCommentsOverride, keepLineMap, keepEndPos, parseModuleInfo, + cancelService); } public static class NBJavacParser extends JavacParser { @@ -201,7 +224,9 @@ public int getEndPos(JCTree jctree) { @Override public void storeEnd(JCTree tree, int endpos) { - if (endpos >= 0) delegate.storeEnd(tree, endpos); + if (endpos >= 0) { + delegate.storeEnd(tree, endpos); + } } @Override