diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 20f93223b509..b94eb0244038 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1470,10 +1470,10 @@ jobs: timeout-minutes: 60 strategy: matrix: - java: [ '21', '26' ] + java: [ '21', '27-ea' ] config: [ 'batch1', 'batch2' ] exclude: - - java: ${{ github.event_name == 'pull_request' && 'nothing' || '26' }} + - java: ${{ github.event_name == 'pull_request' && 'nothing' || '27-ea' }} fail-fast: false steps: diff --git a/java/java.completion/nbproject/project.properties b/java/java.completion/nbproject/project.properties index b3039af84b89..83d3b0b0d9fc 100644 --- a/java/java.completion/nbproject/project.properties +++ b/java/java.completion/nbproject/project.properties @@ -15,7 +15,7 @@ # specific language governing permissions and limitations # under the License. is.autoload=true -javac.release=17 +javac.release=21 javac.compilerargs=-Xlint -Xlint:-serial spec.version.base=2.19.0 #test configs diff --git a/java/java.completion/src/org/netbeans/modules/java/completion/BaseTask.java b/java/java.completion/src/org/netbeans/modules/java/completion/BaseTask.java index 2346cd89d170..7cdc90cd5e86 100644 --- a/java/java.completion/src/org/netbeans/modules/java/completion/BaseTask.java +++ b/java/java.completion/src/org/netbeans/modules/java/completion/BaseTask.java @@ -717,22 +717,32 @@ private SourcePositionsImpl(Tree root, SourcePositions original, SourcePositions @Override public long getStartPosition(CompilationUnitTree compilationUnitTree, Tree tree) { + return getStartPosition(tree); + } + + @Override + public long getStartPosition(Tree tree) { if (tree == root) { return startOffset; } found = false; scan(root, tree); - return found ? modified.getStartPosition(compilationUnitTree, tree) + startOffset : original.getStartPosition(compilationUnitTree, tree); + return found ? modified.getStartPosition(tree) + startOffset : original.getStartPosition(tree); } @Override public long getEndPosition(CompilationUnitTree compilationUnitTree, Tree tree) { + return getEndPosition(tree); + } + + @Override + public long getEndPosition(Tree tree) { if (tree == root) { return endOffset; } found = false; scan(root, tree); - return found ? modified.getEndPosition(compilationUnitTree, tree) + startOffset : original.getEndPosition(compilationUnitTree, tree); + return found ? modified.getEndPosition(tree) + startOffset : original.getEndPosition(tree); } @Override diff --git a/java/java.completion/src/org/netbeans/modules/java/completion/JavaCompletionTask.java b/java/java.completion/src/org/netbeans/modules/java/completion/JavaCompletionTask.java index 72b984aa9c61..b64d08600776 100644 --- a/java/java.completion/src/org/netbeans/modules/java/completion/JavaCompletionTask.java +++ b/java/java.completion/src/org/netbeans/modules/java/completion/JavaCompletionTask.java @@ -2058,7 +2058,7 @@ private void insideLambdaExpression(Env env) throws IOException { } case COMMA -> { if (let.getParameters().isEmpty() - || !env.getController().getTreeUtilities().isSynthetic(new TreePath(path, let.getParameters().get(0).getType()))) { + || (let.getParameters().get(0).getType() instanceof Tree type && type.getKind() != Kind.VAR_TYPE)) { addClassTypes(env, null); addPrimitiveTypeKeywords(env); addKeyword(env, FINAL_KEYWORD, SPACE, false); diff --git a/java/java.editor.base/src/org/netbeans/modules/java/editor/base/javadoc/JavadocImports.java b/java/java.editor.base/src/org/netbeans/modules/java/editor/base/javadoc/JavadocImports.java index 2d91d7065f64..1d4dbee96d92 100644 --- a/java/java.editor.base/src/org/netbeans/modules/java/editor/base/javadoc/JavadocImports.java +++ b/java/java.editor.base/src/org/netbeans/modules/java/editor/base/javadoc/JavadocImports.java @@ -434,12 +434,11 @@ public Void scan(DocTree node, Void p) { result[0] = trees.getElement(getCurrentPath()); } else { long startPosition = positions.getStartPosition(javac.getCompilationUnit(), node); - long endPosition = positions.getEndPosition(javac.getCompilationUnit(), node); - if (startPosition == 0 && endPosition == -1) {//vanilla javac returns 0 for start and -1 for end positions + if (startPosition == 0) {//vanilla javac returns 0 for start if (parentNode != null && parentNode.toString().contains(node.toString())) { long parentNodeStartPosition = positions.getStartPosition(javac.getCompilationUnit(), docComment, parentNode); startPosition = parentNode.toString().indexOf(node.toString()) + parentNodeStartPosition; - endPosition = startPosition + node.toString().length(); + long endPosition = startPosition + node.toString().length(); if (startPosition <= offset && endPosition >= offset) { result[0] = trees.getElement(getCurrentPath()); diff --git a/java/java.hints/src/org/netbeans/modules/java/hints/errors/AddDefaultCase.java b/java/java.hints/src/org/netbeans/modules/java/hints/errors/AddDefaultCase.java index 05f9111bb164..b0e32965c4ab 100644 --- a/java/java.hints/src/org/netbeans/modules/java/hints/errors/AddDefaultCase.java +++ b/java/java.hints/src/org/netbeans/modules/java/hints/errors/AddDefaultCase.java @@ -50,7 +50,9 @@ public class AddDefaultCase implements ErrorRule { private static final Set CODES = Set.of( "compiler.err.not.exhaustive", - "compiler.err.not.exhaustive.statement" + "compiler.err.not.exhaustive.details", + "compiler.err.not.exhaustive.statement", + "compiler.err.not.exhaustive.statement.details" ); private static final String THROW_ISE = "throw new IllegalStateException(\"Unexpected value: \" + %1$s);"; diff --git a/java/java.hints/src/org/netbeans/modules/java/hints/errors/ConvertInvalidVarToExplicitArrayType.java b/java/java.hints/src/org/netbeans/modules/java/hints/errors/ConvertInvalidVarToExplicitArrayType.java index 2037aab81e88..65c1ae9d2c2e 100644 --- a/java/java.hints/src/org/netbeans/modules/java/hints/errors/ConvertInvalidVarToExplicitArrayType.java +++ b/java/java.hints/src/org/netbeans/modules/java/hints/errors/ConvertInvalidVarToExplicitArrayType.java @@ -18,6 +18,7 @@ */ package org.netbeans.modules.java.hints.errors; +import com.sun.source.tree.ArrayTypeTree; import com.sun.source.tree.ExpressionTree; import com.sun.source.tree.NewArrayTree; import com.sun.source.tree.Tree; @@ -41,6 +42,7 @@ import org.netbeans.spi.java.hints.JavaFix; import org.openide.util.NbBundle.Messages; import javax.lang.model.util.Types; +import org.netbeans.api.java.source.GeneratorUtilities; /** * @@ -164,14 +166,10 @@ protected void performRewrite(TransformationContext tc) throws Exception { } arrayType = Utilities.resolveCapturedType(wc, arrayType); + ArrayTypeTree newType = make.ArrayType(make.Type(arrayType)); + VariableTree newVariable = Utilities.setVariableType(wc, oldVariableTree, newType); - VariableTree newVariableTree = make.Variable( - oldVariableTree.getModifiers(), - oldVariableTree.getName(), - make.ArrayType(make.Type(arrayType)), - oldVariableTree.getInitializer() - ); - tc.getWorkingCopy().rewrite(oldVariableTree, newVariableTree); + tc.getWorkingCopy().rewrite(oldVariableTree, newVariable); } } } diff --git a/java/java.hints/src/org/netbeans/modules/java/hints/errors/Utilities.java b/java/java.hints/src/org/netbeans/modules/java/hints/errors/Utilities.java index 9ba26120810b..b171fe9b3268 100644 --- a/java/java.hints/src/org/netbeans/modules/java/hints/errors/Utilities.java +++ b/java/java.hints/src/org/netbeans/modules/java/hints/errors/Utilities.java @@ -3407,4 +3407,19 @@ private static Name getLeftTreeName(StatementTree statement) { return ((IdentifierTree) assignTree.getVariable()).getName(); } + public static VariableTree setVariableType(WorkingCopy copy, VariableTree var, Tree newType) { + TreeMaker make = copy.getTreeMaker(); + Tree origType = var.getType(); + + if (origType != null) { + GeneratorUtilities.get(copy).copyComments(origType, newType, true); + GeneratorUtilities.get(copy).copyComments(origType, newType, false); + } + + return make.Variable(var.getModifiers(), + var.getName(), + newType, + var.getInitializer() + ); + } } diff --git a/java/java.hints/src/org/netbeans/modules/java/hints/errors/VarCompDeclaration.java b/java/java.hints/src/org/netbeans/modules/java/hints/errors/VarCompDeclaration.java index 11dd86ab9adf..80e5fcb95d48 100644 --- a/java/java.hints/src/org/netbeans/modules/java/hints/errors/VarCompDeclaration.java +++ b/java/java.hints/src/org/netbeans/modules/java/hints/errors/VarCompDeclaration.java @@ -56,7 +56,7 @@ public Set getCodes() { @Override public List run(CompilationInfo info, String diagnosticKey, int offset, TreePath treePath, Data data) { - Tree.Kind parentKind = treePath.getParentPath().getLeaf().getKind(); + Tree.Kind parentKind = treePath.getParentPath().getParentPath().getLeaf().getKind(); if (parentKind != Tree.Kind.BLOCK && parentKind != Tree.Kind.CASE) { return null; } @@ -102,7 +102,7 @@ public String toDebugString() { @Override protected void performRewrite(TransformationContext ctx) throws Exception { - TreePath statementPath = ctx.getPath(); + TreePath statementPath = ctx.getPath().getParentPath(); Tree parent = statementPath.getParentPath().getLeaf(); List statements = null; switch (parent.getKind()) { diff --git a/java/java.hints/src/org/netbeans/modules/java/hints/jdk/ConvertVarToExplicitType.java b/java/java.hints/src/org/netbeans/modules/java/hints/jdk/ConvertVarToExplicitType.java index 151b7b614900..15f341d16cca 100644 --- a/java/java.hints/src/org/netbeans/modules/java/hints/jdk/ConvertVarToExplicitType.java +++ b/java/java.hints/src/org/netbeans/modules/java/hints/jdk/ConvertVarToExplicitType.java @@ -118,17 +118,9 @@ protected void performRewrite(TransformationContext tc) throws Exception { EnhancedForLoopTree elfTree = (EnhancedForLoopTree) statementPath.getLeaf(); ExpressionTree expTree = elfTree.getExpression(); VariableTree vtt = elfTree.getVariable(); - String elfTreeVariable = elfTree.getVariable().getType().toString(); - if (expTree == null) { - return; - } + TypeMirror type = wc.getTrees().getTypeMirror(new TreePath(statementPath, vtt)); //VariableTree with null ExpressionTree as no initialization required - VariableTree newVariableTree = make.Variable( - vtt.getModifiers(), - vtt.getName(), - make.Type(elfTreeVariable), - null - ); + VariableTree newVariableTree = Utilities.setVariableType(wc, vtt, make.Type(type)); StatementTree statement = ((EnhancedForLoopTree) statementPath.getLeaf()).getStatement(); EnhancedForLoopTree newElfTree = make.EnhancedForLoop(newVariableTree, expTree, statement); wc.rewrite(elfTree, newElfTree); diff --git a/java/java.hints/src/org/netbeans/modules/java/hints/suggestions/ExpectedTypeResolver.java b/java/java.hints/src/org/netbeans/modules/java/hints/suggestions/ExpectedTypeResolver.java index b266c3944ae8..0043c39bd875 100644 --- a/java/java.hints/src/org/netbeans/modules/java/hints/suggestions/ExpectedTypeResolver.java +++ b/java/java.hints/src/org/netbeans/modules/java/hints/suggestions/ExpectedTypeResolver.java @@ -85,6 +85,7 @@ import com.sun.source.tree.UnaryTree; import com.sun.source.tree.UnionTypeTree; import com.sun.source.tree.UsesTree; +import com.sun.source.tree.VarTypeTree; import com.sun.source.tree.VariableTree; import com.sun.source.tree.WhileLoopTree; import com.sun.source.tree.WildcardTree; @@ -313,6 +314,11 @@ public List visitVariable(VariableTree node, Object p) { return null; } + @Override + public List visitVarType(VarTypeTree node, Object p) { + return null; + } + @Override public List visitDoWhileLoop(DoWhileLoopTree node, Object p) { if (theExpression == null) { diff --git a/java/java.hints/src/org/netbeans/modules/java/hints/suggestions/Lambda.java b/java/java.hints/src/org/netbeans/modules/java/hints/suggestions/Lambda.java index ce0869e1b17f..82b8b351e19e 100644 --- a/java/java.hints/src/org/netbeans/modules/java/hints/suggestions/Lambda.java +++ b/java/java.hints/src/org/netbeans/modules/java/hints/suggestions/Lambda.java @@ -651,13 +651,16 @@ protected String getText() { @Override protected void performRewrite(TransformationContext ctx) throws Exception { + WorkingCopy wc = ctx.getWorkingCopy(); + TreeMaker make = wc.getTreeMaker(); LambdaExpressionTree let = (LambdaExpressionTree) ctx.getPath().getLeaf(); for (VariableTree var : let.getParameters()) { - TreePath typePath = TreePath.getPath(ctx.getPath(), var.getType()); - if (ctx.getWorkingCopy().getTreeUtilities().isSynthetic(typePath)) { - Tree imported = ctx.getWorkingCopy().getTreeMaker().Type(ctx.getWorkingCopy().getTrees().getTypeMirror(typePath)); - ctx.getWorkingCopy().rewrite(var.getType(), imported); + if (var.getType() == null || var.getType().getKind() == Kind.VAR_TYPE) { + Tree newType = make.Type(wc.getTrees().getTypeMirror(new TreePath(ctx.getPath(), var))); + VariableTree newVariable = Utilities.setVariableType(wc, var, newType); + + wc.rewrite(var, newVariable); } } } @@ -680,7 +683,10 @@ protected void performRewrite(JavaFix.TransformationContext ctx) throws Exceptio LambdaExpressionTree let = (LambdaExpressionTree) ctx.getPath().getLeaf(); TreeMaker make = ctx.getWorkingCopy().getTreeMaker(); let.getParameters().forEach((var) -> { - ctx.getWorkingCopy().rewrite(var.getType(), make.Type("var")); // NOI18N + Tree newType = make.Type("var"); //XXX: make.VarType()! + VariableTree newVariable = Utilities.setVariableType(ctx.getWorkingCopy(), var, newType); + + ctx.getWorkingCopy().rewrite(var, newVariable); // NOI18N }); } } diff --git a/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/errors/ConvertInvalidVarToExplicitArrayTypeTest.java b/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/errors/ConvertInvalidVarToExplicitArrayTypeTest.java index 0563cb846820..fbfed38fe8f7 100644 --- a/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/errors/ConvertInvalidVarToExplicitArrayTypeTest.java +++ b/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/errors/ConvertInvalidVarToExplicitArrayTypeTest.java @@ -118,7 +118,8 @@ public void testArrayObjectElementsFix() throws Exception { performFixTest("test/Test.java", "package test; public class Test {{final/*comment1*/ var/**comment2**/ j/*comment3*/ = /*comment4*/{new java.util.ArrayList(),new java.util.ArrayList()};}}", -1, FIX_MSG, - "package test; import java.util.ArrayList; public class Test {{final/*comment1*/ ArrayList[]/**comment2**/ j/*comment3*/ = /*comment4*/{new java.util.ArrayList(),new java.util.ArrayList()};}}"); + //TODO: the space between ArrayList[] and /**comment2**/ + "package test; import java.util.ArrayList; public class Test {{final/*comment1*/ ArrayList[] /**comment2**/ j/*comment3*/ = /*comment4*/{new java.util.ArrayList(),new java.util.ArrayList()};}}"); } public void testArrayPrimitiveNumericElementsFix() throws Exception { @@ -198,7 +199,8 @@ public void testArrayObject7ElementsFix() throws Exception { "package test; public class Test {{var/*comment1*/ a = {2,3.1f};}}", -1, FIX_MSG, - "package test; public class Test {{float[]/*comment1*/ a = {2,3.1f};}}"); + //TODO: the space between float[] and /*comment1*/ + "package test; public class Test {{float[] /*comment1*/ a = {2,3.1f};}}"); } public void testArrayObject8ElementsFix() throws Exception { @@ -213,7 +215,8 @@ public void testArrayObject9ElementsFix() throws Exception { performFixTest("test/Test.java", "package test; public class Test {{var/*comment1*/ k = {1,'c'};}}", -1, FIX_MSG, - "package test; public class Test {{int[]/*comment1*/ k = {1,'c'};}}"); + //TODO: the space between int[] and /*comment1*/ + "package test; public class Test {{int[] /*comment1*/ k = {1,'c'};}}"); } @Override diff --git a/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/introduce/FlowTest.java b/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/introduce/FlowTest.java index 50535c79b6b0..6d23d4079e3c 100644 --- a/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/introduce/FlowTest.java +++ b/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/introduce/FlowTest.java @@ -1621,7 +1621,7 @@ interface I { } } """, - "int ii"); + "/*missing*/ ii"); } public void testCatchParameters() throws Exception { diff --git a/java/java.source.base/nbproject/project.properties b/java/java.source.base/nbproject/project.properties index d977f1c852c0..c1df18068f8f 100644 --- a/java/java.source.base/nbproject/project.properties +++ b/java/java.source.base/nbproject/project.properties @@ -18,7 +18,7 @@ #javac.compilerargs=-Xlint:unchecked nbroot=../.. is.autoload=true -javac.release=17 +javac.release=21 javadoc.name=Java Source Base javadoc.title=Java Source Base javadoc.arch=${basedir}/arch.xml diff --git a/java/java.source.base/src/org/netbeans/api/java/source/TreeUtilities.java b/java/java.source.base/src/org/netbeans/api/java/source/TreeUtilities.java index 1f2d439a0078..240c618ddabc 100644 --- a/java/java.source.base/src/org/netbeans/api/java/source/TreeUtilities.java +++ b/java/java.source.base/src/org/netbeans/api/java/source/TreeUtilities.java @@ -804,7 +804,7 @@ private static T doParse(JavacTaskImpl task, String text, Sourc try { CharBuffer buf = CharBuffer.wrap((text+"\u0000").toCharArray(), 0, text.length()); ParserFactory factory = ParserFactory.instance(context); - Parser parser = factory.newParser(buf, false, true, false, false); + Parser parser = factory.newParser(buf, false, true, false); if (parser instanceof JavacParser javacParser) { if (sourcePositions != null) sourcePositions[0] = new ParserSourcePositions(javacParser, offset); @@ -844,11 +844,20 @@ private ParserSourcePositions(JavacParser parser, int offset) { @Override public long getStartPosition(CompilationUnitTree file, Tree tree) { + return getStartPosition(tree); + } + + @Override + public long getStartPosition(Tree tree) { return parser.getStartPos((JCTree)tree) - offset; } @Override public long getEndPosition(CompilationUnitTree file, Tree tree) { + return getEndPosition(tree); + } + @Override + public long getEndPosition(Tree tree) { return parser.getEndPos((JCTree)tree) - offset; } } diff --git a/java/java.source.base/src/org/netbeans/api/java/source/WorkingCopy.java b/java/java.source.base/src/org/netbeans/api/java/source/WorkingCopy.java index 5faa20961473..867a289a601e 100644 --- a/java/java.source.base/src/org/netbeans/api/java/source/WorkingCopy.java +++ b/java/java.source.base/src/org/netbeans/api/java/source/WorkingCopy.java @@ -509,22 +509,6 @@ private void addSyntheticTrees(DiffContext diffContext, Tree node) { } } } - if (node.getKind() == Kind.VARIABLE) { - JCVariableDecl var = (JCVariableDecl) node; - - if (var.declaredUsingVar()) { - diffContext.syntheticTrees.add(var.vartype); - } - } - if (node.getKind() == Kind.LAMBDA_EXPRESSION) { - JCLambda lambda = (JCLambda) node; - - if (lambda.paramKind == JCLambda.ParameterKind.IMPLICIT) { - for (JCVariableDecl param : lambda.params) { - diffContext.syntheticTrees.add(param.vartype); - } - } - } } /** diff --git a/java/java.source.base/src/org/netbeans/modules/java/source/NoJavacHelper.java b/java/java.source.base/src/org/netbeans/modules/java/source/NoJavacHelper.java index 4ed8c4b5fcc3..06031176e470 100644 --- a/java/java.source.base/src/org/netbeans/modules/java/source/NoJavacHelper.java +++ b/java/java.source.base/src/org/netbeans/modules/java/source/NoJavacHelper.java @@ -26,7 +26,7 @@ */ public class NoJavacHelper { - public static final int REQUIRED_JAVAC_VERSION = 26; // <- TODO: increment on every release + public static final int REQUIRED_JAVAC_VERSION = 27; // <- TODO: increment on every release private static final boolean HAS_WORKING_JAVAC; static { diff --git a/java/java.source.base/src/org/netbeans/modules/java/source/builder/TreeFactory.java b/java/java.source.base/src/org/netbeans/modules/java/source/builder/TreeFactory.java index f4df92838029..991512dc9d15 100644 --- a/java/java.source.base/src/org/netbeans/modules/java/source/builder/TreeFactory.java +++ b/java/java.source.base/src/org/netbeans/modules/java/source/builder/TreeFactory.java @@ -69,6 +69,7 @@ import com.sun.tools.javac.tree.JCTree; import com.sun.tools.javac.tree.JCTree.*; import com.sun.tools.javac.tree.JCTree.JCCaseLabel; +import com.sun.tools.javac.tree.JCTree.JCVariableDecl.DeclKind; import com.sun.tools.javac.util.DiagnosticSource; import com.sun.tools.javac.util.ListBuffer; import com.sun.tools.javac.util.Name; @@ -419,7 +420,11 @@ public DoWhileLoopTree DoWhileLoop(ExpressionTree condition, StatementTree state public EmptyStatementTree EmptyStatement() { return make.at(NOPOS).Skip(); } - + + public VarTypeTree VarType() { + return make.at(NOPOS).VarType(); + } + public EnhancedForLoopTree EnhancedForLoop(VariableTree variable, ExpressionTree expression, StatementTree statement) { @@ -941,8 +946,13 @@ public VariableTree Variable(ModifiersTree modifiers, CharSequence name, Tree type, ExpressionTree initializer) { + DeclKind kind = switch (type) { + case null -> DeclKind.IMPLICIT; + case VarTypeTree vtt -> DeclKind.VAR; + default -> DeclKind.EXPLICIT; + }; return make.at(NOPOS).VarDef((JCModifiers)modifiers, names.fromString(name.toString()), - (JCExpression)type, (JCExpression)initializer); + (JCExpression)type, (JCExpression)initializer, kind); } public VariableTree RecordComponent(ModifiersTree modifiers, diff --git a/java/java.source.base/src/org/netbeans/modules/java/source/indexing/VanillaCompileWorker.java b/java/java.source.base/src/org/netbeans/modules/java/source/indexing/VanillaCompileWorker.java index d2a90273c32d..11e1f8c9923e 100644 --- a/java/java.source.base/src/org/netbeans/modules/java/source/indexing/VanillaCompileWorker.java +++ b/java/java.source.base/src/org/netbeans/modules/java/source/indexing/VanillaCompileWorker.java @@ -823,6 +823,10 @@ private void fixRecordMethods(JCClassDecl clazz) { clazz.defs = clazz.defs.prepend(make.MethodDef((MethodSymbol) s, make.Block(0, com.sun.tools.javac.util.List.of(throwTree("java.lang.runtime.ObjectMethods does not exist!"))))); s.flags_field &= ~Flags.RECORD; } + //clear other record flags: + clazz.sym.flags_field &= ~Flags.RECORD; + clazz.mods.flags &= ~Flags.RECORD; + clazz.defs.forEach(t -> { if (t instanceof JCVariableDecl var) var.mods.flags &= ~Flags.RECORD; }); } private JCStatement clearAndWrapAnonymous(JCNewClass nc) { diff --git a/java/java.source.base/src/org/netbeans/modules/java/source/parsing/TranslatePositionsVisitor.java b/java/java.source.base/src/org/netbeans/modules/java/source/parsing/TranslatePositionsVisitor.java index a81da5f28f6d..f454299a6e1a 100644 --- a/java/java.source.base/src/org/netbeans/modules/java/source/parsing/TranslatePositionsVisitor.java +++ b/java/java.source.base/src/org/netbeans/modules/java/source/parsing/TranslatePositionsVisitor.java @@ -24,9 +24,9 @@ import com.sun.source.tree.Tree; import com.sun.source.tree.VariableTree; import org.netbeans.api.java.source.support.ErrorAwareTreeScanner; -import com.sun.tools.javac.tree.EndPosTable; import com.sun.tools.javac.tree.JCTree; import com.sun.tools.javac.tree.JCTree.JCVariableDecl; +import com.sun.tools.javac.util.Position; /** * Helper visitor for partial reparse. @@ -36,16 +36,13 @@ class TranslatePositionsVisitor extends ErrorAwareTreeScanner { private final MethodTree changedMethod; - private final EndPosTable endPos; private final int delta; boolean active; boolean inMethod; - public TranslatePositionsVisitor (final MethodTree changedMethod, final EndPosTable endPos, final int delta) { + public TranslatePositionsVisitor (final MethodTree changedMethod, final int delta) { // assert changedMethod != null; - assert endPos != null; this.changedMethod = changedMethod; - this.endPos = endPos; this.delta = delta; active = changedMethod == null;//hack @@ -60,21 +57,20 @@ public Void scan(Tree node, Void p) { } } Void result = super.scan(node, p); + JCTree jcNode = (JCTree) node; if (inMethod && node != null) { - endPos.replaceTree((JCTree) node, null);//remove + jcNode.endpos = Position.NOPOS; } if (active && node != null) { - Integer pos = endPos.replaceTree((JCTree) node, null);//remove - if (pos != null) { - int newPos; - if (pos < 0) { - newPos = pos; - } - else { - newPos = pos+delta; - } - endPos.storeEnd((JCTree)node,newPos); - } + int pos = jcNode.endpos; + int newPos; + if (pos < 0) { + newPos = pos; + } + else { + newPos = pos+delta; + } + jcNode.endpos = newPos; } return result; } diff --git a/java/java.source.base/src/org/netbeans/modules/java/source/parsing/VanillaPartialReparser.java b/java/java.source.base/src/org/netbeans/modules/java/source/parsing/VanillaPartialReparser.java index ce3e41b9c0ef..9b43eed15d80 100644 --- a/java/java.source.base/src/org/netbeans/modules/java/source/parsing/VanillaPartialReparser.java +++ b/java/java.source.base/src/org/netbeans/modules/java/source/parsing/VanillaPartialReparser.java @@ -41,7 +41,6 @@ import com.sun.tools.javac.parser.LazyDocCommentTable; import com.sun.tools.javac.parser.Scanner; import com.sun.tools.javac.parser.ScannerFactory; -import com.sun.tools.javac.tree.EndPosTable; import com.sun.tools.javac.tree.JCTree; import com.sun.tools.javac.tree.TreeInfo; import com.sun.tools.javac.tree.TreeMaker; @@ -220,7 +219,6 @@ public boolean reparseMethod (final CompilationInfoImpl ci, long start = System.currentTimeMillis(); Map docComments = new HashMap<>(); block = reparseMethodBody(ctx, cu, orig, newBody + " ", docComments); - final EndPosTable endPos = ((JCTree.JCCompilationUnit)cu).endPositions; LOGGER.log(Level.FINER, "Reparsed method in: {0}", fo); //NOI18N if (block == null) { LOGGER.log( @@ -250,7 +248,7 @@ public boolean reparseMethod (final CompilationInfoImpl ci, JavacParser.logTime (fo,Phase.PARSED,(end-start)); } final int delta = newEndPos - origEndPos; - final TranslatePositionsVisitor tpv = new TranslatePositionsVisitor(orig, endPos, delta); + final TranslatePositionsVisitor tpv = new TranslatePositionsVisitor(orig, delta); tpv.scan(cu, null); Enter.instance(ctx).unenter((JCTree.JCCompilationUnit) cu, ((JCTree.JCMethodDecl)orig).body); ((JCTree.JCMethodDecl)orig).body = block; @@ -326,7 +324,7 @@ public JCTree.JCBlock reparseMethodBody(Context ctx, CompilationUnitTree topLeve } body[startPos + newBodyText.length()] = '\u0000'; CharBuffer buf = CharBuffer.wrap(body, 0, body.length - 1); - com.sun.tools.javac.parser.JavacParser parser = newParser(ctx, buf, ((JCTree.JCBlock)methodToReparse.getBody()).pos, ((JCTree.JCCompilationUnit)topLevel).endPositions); + com.sun.tools.javac.parser.JavacParser parser = newParser(ctx, buf, ((JCTree.JCBlock)methodToReparse.getBody()).pos); final JCTree.JCStatement statement = parser.parseStatement(); if (statement.getKind() == Tree.Kind.BLOCK) { if (docComments != null) { @@ -337,42 +335,16 @@ public JCTree.JCBlock reparseMethodBody(Context ctx, CompilationUnitTree topLeve return null; } - private com.sun.tools.javac.parser.JavacParser newParser(Context context, CharSequence input, int startPos, final EndPosTable endPos) { + private com.sun.tools.javac.parser.JavacParser newParser(Context context, CharSequence input, int startPos) { NBParserFactory parserFactory = (NBParserFactory) NBParserFactory.instance(context); //TODO: eliminate the cast ScannerFactory scannerFactory = ScannerFactory.instance(context); CancelService cancelService = CancelService.instance(context); Scanner lexer = scannerFactory.newScanner(input, true); // lexer.seek(startPos); - if (endPos instanceof NBParserFactory.NBJavacParser.EndPosTableImpl table) { - table.resetErrorEndPos(); - } - return new NBParserFactory.NBJavacParser(parserFactory, lexer, true, false, true, false, cancelService) { - @Override protected com.sun.tools.javac.parser.JavacParser.AbstractEndPosTable newEndPosTable(boolean keepEndPositions) { - return new com.sun.tools.javac.parser.JavacParser.AbstractEndPosTable() { - - @Override - public T storeEnd(T tree, int endpos) { - return ((NBParserFactory.NBJavacParser.EndPosTableImpl)endPos).storeEnd(tree, endpos); - } - - @Override - public int getEndPos(JCTree tree) { - return endPos.getEndPos(tree); - } - - @Override - public int replaceTree(JCTree oldtree, JCTree newtree) { - return endPos.replaceTree(oldtree, newtree); - } - - @Override - public void setErrorEndPos(int errPos) { - super.setErrorEndPos(errPos); - ((NBParserFactory.NBJavacParser.EndPosTableImpl)endPos).setErrorEndPos(errPos); - } - }; - } - }; +// if (endPos instanceof NBParserFactory.NBJavacParser.EndPosTableImpl table) { +// table.resetErrorEndPos(); +// } + return new NBParserFactory.NBJavacParser(parserFactory, lexer, true, false, false, cancelService); } public BlockTree reattrMethodBody(Context context, Scope scope, MethodTree methodToReparse, BlockTree block) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException { diff --git a/java/java.source.base/src/org/netbeans/modules/java/source/pretty/VeryPretty.java b/java/java.source.base/src/org/netbeans/modules/java/source/pretty/VeryPretty.java index 2f6a72220103..9c98bfd0c649 100644 --- a/java/java.source.base/src/org/netbeans/modules/java/source/pretty/VeryPretty.java +++ b/java/java.source.base/src/org/netbeans/modules/java/source/pretty/VeryPretty.java @@ -317,7 +317,7 @@ private int getOldPos(JCTree oldT) { return TreeInfo.getStartPos(oldT); } public int endPos(JCTree t) { - return TreeInfo.getEndPos(t, diffContext.origUnit.endPositions); + return TreeInfo.getEndPos(t); } private java.util.List getStatements(Tree tree) { @@ -1830,7 +1830,7 @@ public void visitTypeCast(JCTypeCast tree) { needSpace(); if (diffContext.origUnit != null && TreePath.getPath(diffContext.origUnit, tree.expr) != null) { int a = TreeInfo.getStartPos(tree.expr); - int b = TreeInfo.getEndPos(tree.expr, diffContext.origUnit.endPositions); + int b = TreeInfo.getEndPos(tree.expr); print(diffContext.origText.substring(a, b)); return; } @@ -1885,6 +1885,7 @@ public void visitLiteral(JCLiteral tree) { && diffContext.origUnit != null && (start = diffContext.trees.getSourcePositions().getStartPosition(diffContext.origUnit, tree)) >= 0 //#137564 && (end = diffContext.getEndPosition(diffContext.origUnit, tree)) >= 0 + && diffContext.isPartOfCompilationUnit(diffContext.origUnit, tree) && origText != null) { print(origText.substring((int) start, (int) end)); return ; @@ -1893,6 +1894,7 @@ public void visitLiteral(JCLiteral tree) { && diffContext.mainUnit != null && (start = diffContext.trees.getSourcePositions().getStartPosition(diffContext.mainUnit, tree)) >= 0 //#137564 && (end = diffContext.getEndPosition(diffContext.mainUnit, tree)) >= 0 + && diffContext.isPartOfCompilationUnit(diffContext.mainUnit, tree) && diffContext.mainCode != null) { print(diffContext.mainCode.substring((int) start, (int) end)); return ; @@ -2788,7 +2790,6 @@ private void adjustSpans(Iterable original, String code) { ClasspathInfo cpInfo = ClasspathInfo.create(JavaPlatformManager.getDefault().getDefaultPlatform().getBootstrapLibraries(), empty, empty); JavacTaskImpl javacTask = JavacParser.createJavacTask(cpInfo, null, null, null, null, null, null, null, Arrays.asList(FileObjects.memoryFileObject("", "Scratch.java", code))); com.sun.tools.javac.util.Context ctx = javacTask.getContext(); - JavaCompiler.instance(ctx).genEndPos = true; CompilationUnitTree tree = javacTask.parse().iterator().next(); //NOI18N SourcePositions sp = JavacTrees.instance(ctx).getSourcePositions(); ClassTree clazz = (ClassTree) tree.getTypeDecls().get(0); @@ -3066,7 +3067,7 @@ private void printStat(JCTree tree, boolean member, boolean first, boolean col, } private void printIndentedStat(JCTree tree, BracesGenerationStyle redundantBraces, boolean spaceBeforeLeftBrace, WrapStyle wrapStat) { - if (fromOffset >= 0 && toOffset >= 0 && (TreeInfo.getStartPos(tree) < fromOffset || TreeInfo.getEndPos(tree, diffContext.origUnit.endPositions) > toOffset)) + if (fromOffset >= 0 && toOffset >= 0 && (TreeInfo.getStartPos(tree) < fromOffset || TreeInfo.getEndPos(tree) > toOffset)) redundantBraces = BracesGenerationStyle.LEAVE_ALONE; switch(redundantBraces) { case GENERATE: diff --git a/java/java.source.base/src/org/netbeans/modules/java/source/save/CasualDiff.java b/java/java.source.base/src/org/netbeans/modules/java/source/save/CasualDiff.java index 2126b3f5be75..a6a9a0f78a44 100644 --- a/java/java.source.base/src/org/netbeans/modules/java/source/save/CasualDiff.java +++ b/java/java.source.base/src/org/netbeans/modules/java/source/save/CasualDiff.java @@ -544,14 +544,14 @@ public int endPos(JCTree t) { if (t instanceof FieldGroupTree) { FieldGroupTree fgt = (FieldGroupTree)t; VariableTree vt = fgt.getVariables().get(fgt.getVariables().size() - 1); - return TreeInfo.getEndPos((JCTree)vt, oldTopLevel.endPositions); + return TreeInfo.getEndPos((JCTree)vt); } int endPos = diffContext.getEndPosition(oldTopLevel, t); if (endPos == Position.NOPOS) { if (t instanceof JCAssign) { // [NETBEANS-4299], might be a synthetic annotation attribute, try rhs - endPos = TreeInfo.getEndPos(((JCAssign)t).rhs, oldTopLevel.endPositions); + endPos = TreeInfo.getEndPos(((JCAssign)t).rhs); } else { endPos = getOldPos(t); } diff --git a/java/java.source.base/src/org/netbeans/modules/java/source/save/DiffContext.java b/java/java.source.base/src/org/netbeans/modules/java/source/save/DiffContext.java index 36b2ad673b7c..db578a633dcb 100644 --- a/java/java.source.base/src/org/netbeans/modules/java/source/save/DiffContext.java +++ b/java/java.source.base/src/org/netbeans/modules/java/source/save/DiffContext.java @@ -21,6 +21,7 @@ import com.sun.source.tree.CompilationUnitTree; import com.sun.source.tree.Tree; +import com.sun.source.util.TreePathScanner; import com.sun.source.util.Trees; import com.sun.tools.javac.tree.JCTree; import com.sun.tools.javac.tree.JCTree.JCCompilationUnit; @@ -59,6 +60,7 @@ public class DiffContext { public final PositionConverter positionConverter; public final FileObject file; public final Set syntheticTrees; + public final Map> cut2ContainedTrees = new HashMap<>(); public final JCCompilationUnit mainUnit; public final String mainCode; @@ -141,7 +143,7 @@ public static final CodeStyle getCodeStyle(CompilationInfo info) { } public int getEndPosition(JCCompilationUnit unit, JCTree t) { - int endPos = TreeInfo.getEndPos(t, unit.endPositions); + int endPos = TreeInfo.getEndPos(t); if (endPos == Position.NOPOS && unit == origUnit) { endPos = syntheticEndPositions.getOrDefault(t, Position.NOPOS); @@ -149,4 +151,22 @@ public int getEndPosition(JCCompilationUnit unit, JCTree t) { return endPos; } + + public boolean isPartOfCompilationUnit(CompilationUnitTree cut, Tree tree2Test) { + return cut2ContainedTrees.computeIfAbsent(cut, c -> { + Set containedTree = new HashSet<>(); + + new TreePathScanner<>() { + @Override + public Object scan(Tree tree, Object p) { + if (tree != null) { + containedTree.add(tree); + } + return super.scan(tree, p); + } + }.scan(c, null); + + return containedTree; + }).contains(tree2Test); + } } diff --git a/java/java.source.base/src/org/netbeans/modules/java/source/save/Reformatter.java b/java/java.source.base/src/org/netbeans/modules/java/source/save/Reformatter.java index 0070d2581374..b0e2ae74316d 100644 --- a/java/java.source.base/src/org/netbeans/modules/java/source/save/Reformatter.java +++ b/java/java.source.base/src/org/netbeans/modules/java/source/save/Reformatter.java @@ -113,7 +113,6 @@ public static String reformat(String text, CodeStyle style, int rightMargin) { ClasspathInfo cpInfo = ClasspathInfo.create(JavaPlatformManager.getDefault().getDefaultPlatform().getBootstrapLibraries(), empty, empty); JavacTaskImpl javacTask = JavacParser.createJavacTask(cpInfo, null, null, null, null, null, null, null, Arrays.asList(FileObjects.memoryFileObject("","Scratch.java", text))); com.sun.tools.javac.util.Context ctx = javacTask.getContext(); - JavaCompiler.instance(ctx).genEndPos = true; CompilationUnitTree tree = javacTask.parse().iterator().next(); //NOI18N SourcePositions sp = JavacTrees.instance(ctx).getSourcePositions(); TokenSequence tokens = TokenHierarchy.create(text, JavaTokenId.language()).tokenSequence(JavaTokenId.language()); diff --git a/java/java.source.base/src/org/netbeans/modules/java/source/save/Reindenter.java b/java/java.source.base/src/org/netbeans/modules/java/source/save/Reindenter.java index a94ed9c40406..0294c9981c3e 100644 --- a/java/java.source.base/src/org/netbeans/modules/java/source/save/Reindenter.java +++ b/java/java.source.base/src/org/netbeans/modules/java/source/save/Reindenter.java @@ -263,7 +263,6 @@ private boolean initRegionData(final Region region) { public void report(Diagnostic diagnostic) { } }, Collections.singletonList("-proc:none"), null, Collections.emptySet(), ctx); //NOI18N - JavaCompiler.instance(ctx).genEndPos = true; text = context.document().getText(currentEmbeddingStartOffset, currentEmbeddingLength); if (JavacParser.MIME_TYPE.equals(context.mimePath())) { FileObject fo = Utilities.getFileObject(context.document()); @@ -277,12 +276,19 @@ public void report(Diagnostic diagnostic) { sp = new SourcePositions() { @Override public long getStartPosition(CompilationUnitTree file, Tree tree) { - return currentEmbeddingStartOffset + psp[0].getStartPosition(file, tree) - 1; + return getStartPosition(tree); + } + @Override + public long getStartPosition(Tree tree) { + return currentEmbeddingStartOffset + psp[0].getStartPosition(tree) - 1; } - @Override public long getEndPosition(CompilationUnitTree file, Tree tree) { - return currentEmbeddingStartOffset + psp[0].getEndPosition(file, tree) - 1; + return getEndPosition(tree); + } + @Override + public long getEndPosition(Tree tree) { + return currentEmbeddingStartOffset + psp[0].getEndPosition(tree) - 1; } }; } diff --git a/java/java.source.base/src/org/netbeans/modules/java/source/transform/ImmutableTreeTranslator.java b/java/java.source.base/src/org/netbeans/modules/java/source/transform/ImmutableTreeTranslator.java index d2fd9688387f..1574bcd6fedb 100644 --- a/java/java.source.base/src/org/netbeans/modules/java/source/transform/ImmutableTreeTranslator.java +++ b/java/java.source.base/src/org/netbeans/modules/java/source/transform/ImmutableTreeTranslator.java @@ -370,7 +370,12 @@ public Tree visitVariable(VariableTree tree, Object p) { currentSym = oldSym; return result; } - + + @Override + public Tree visitVarType(VarTypeTree tree, Object p) { + return rewriteChildren(tree); + } + @Override public Tree visitEmptyStatement(EmptyStatementTree tree, Object p) { return rewriteChildren(tree); @@ -749,7 +754,7 @@ protected final MethodTree rewriteChildren(MethodTree tree) { } return tree; } - + protected final VariableTree rewriteChildren(VariableTree tree) { ModifiersTree mods = (ModifiersTree)translate(tree.getModifiers()); ExpressionTree vartype = (ExpressionTree)translateClassRef(tree.getType()); @@ -763,6 +768,10 @@ protected final VariableTree rewriteChildren(VariableTree tree) { return tree; } + protected final VarTypeTree rewriteChildren(VarTypeTree tree) { + return tree; + } + protected final EmptyStatementTree rewriteChildren(EmptyStatementTree tree) { return tree; } @@ -888,10 +897,6 @@ protected final LambdaExpressionTree rewriteChildren(LambdaExpressionTree tree) parameters != tree.getParameters()) { LambdaExpressionTree n = make.LambdaExpression(parameters, body); - // issue #239256, NETBEANS-345 - // Subsequent to the construction of tree, the vartype of the head - // param might have been filled in, so we need to copy tree's paramKind. - ((JCLambda)n).paramKind = ((JCLambda)tree).paramKind; model.setType(n, model.getType(tree)); copyCommentTo(tree,n); copyPosTo(tree,n); diff --git a/java/java.source.base/src/org/netbeans/modules/java/source/transform/TreeDuplicator.java b/java/java.source.base/src/org/netbeans/modules/java/source/transform/TreeDuplicator.java index d516505f6d70..0501b74fb35f 100644 --- a/java/java.source.base/src/org/netbeans/modules/java/source/transform/TreeDuplicator.java +++ b/java/java.source.base/src/org/netbeans/modules/java/source/transform/TreeDuplicator.java @@ -84,6 +84,7 @@ import com.sun.source.tree.UnaryTree; import com.sun.source.tree.UnionTypeTree; import com.sun.source.tree.UsesTree; +import com.sun.source.tree.VarTypeTree; import com.sun.source.tree.VariableTree; import com.sun.source.tree.WhileLoopTree; import com.sun.source.tree.WildcardTree; @@ -583,6 +584,15 @@ public Tree visitVariable(VariableTree tree, Void p) { return n; } + @Override + public Tree visitVarType(VarTypeTree tree, Void p) { + VarTypeTree n = make.VarType(); + model.setType(n, model.getType(tree)); + comments.copyComments(tree, n); + model.setPos(n, model.getPos(tree)); + return n; + } + @Override public Tree visitWhileLoop(WhileLoopTree tree, Void p) { WhileLoopTree n = make.WhileLoop(tree.getCondition(), tree.getStatement()); diff --git a/java/java.source.base/test/unit/src/org/netbeans/api/java/source/TreePathHandleTest.java b/java/java.source.base/test/unit/src/org/netbeans/api/java/source/TreePathHandleTest.java index 6d762690fcdc..83b09ae38a59 100644 --- a/java/java.source.base/test/unit/src/org/netbeans/api/java/source/TreePathHandleTest.java +++ b/java/java.source.base/test/unit/src/org/netbeans/api/java/source/TreePathHandleTest.java @@ -453,13 +453,13 @@ public void testVarInstanceMember() throws Exception { CompilationInfo info = SourceUtilsTestUtil.getCompilationInfo(js, Phase.RESOLVED); assertTrue(info.getDiagnostics().size() > 0); - TreePath tp = info.getTreeUtilities().pathFor(code.indexOf("var v1") + 1); //NOI18N + TreePath tp = info.getTreeUtilities().pathFor(code.indexOf("var v1") + 5); //NOI18N VariableElement elem = (VariableElement) info.getTrees().getElement(tp); ClassFileUtil.createFieldDescriptor(elem); TreePathHandle handle = TreePathHandle.create(tp, info); assertNotNull(handle.getElementHandle()); - tp = info.getTreeUtilities().pathFor(code.indexOf("var v2") + 1); //NOI18N + tp = info.getTreeUtilities().pathFor(code.indexOf("var v2") + 5); //NOI18N elem = (VariableElement) info.getTrees().getElement(tp); ClassFileUtil.createFieldDescriptor(elem); diff --git a/java/java.source.base/test/unit/src/org/netbeans/api/java/source/gen/LambdaTest.java b/java/java.source.base/test/unit/src/org/netbeans/api/java/source/gen/LambdaTest.java index 03899bdb79b9..24050a722854 100644 --- a/java/java.source.base/test/unit/src/org/netbeans/api/java/source/gen/LambdaTest.java +++ b/java/java.source.base/test/unit/src/org/netbeans/api/java/source/gen/LambdaTest.java @@ -833,7 +833,7 @@ public void run(final WorkingCopy workingCopy) throws IOException { new ErrorAwareTreeScanner() { @Override public Void visitLambdaExpression(LambdaExpressionTree node, Void p) { for (VariableTree par : node.getParameters()) { - workingCopy.rewrite(par.getType(), make.Identifier("String")); + workingCopy.rewrite(par, make.Variable(par.getModifiers(), par.getName(), make.Identifier("String"), par.getInitializer())); } return super.visitLambdaExpression(node, p); } diff --git a/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/indexing/VanillaCompileWorkerTest.java b/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/indexing/VanillaCompileWorkerTest.java index 6ee3a6a53fb5..6e9ca9c3b74e 100644 --- a/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/indexing/VanillaCompileWorkerTest.java +++ b/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/indexing/VanillaCompileWorkerTest.java @@ -1177,7 +1177,6 @@ public void testFieldInit() throws Exception { " }\n" + " \n" + " public Test(String s) {\n" + - " super();\n" + " }\n" + "}"); if (!"\n".equals(System.lineSeparator())) file2Fixed.replaceAll((k, v) -> v.replaceAll(System.lineSeparator(), "\n")); @@ -2359,15 +2358,13 @@ public void testWrongRecordComponent() throws Exception { Map expected = Collections.singletonMap("test/Test.java", "package test;\n" + "\n" + - "public class Test {\n" + + "public record Test(int wait) {\n" + " static {\n" + " throw new java.lang.RuntimeException(\"Uncompilable code - compiler.err.illegal.record.component.name\");\n" + " }\n" + " \n" + " public Test(int wait) {\n" + - " super();\n" + " }\n" + - " private final int wait;\n" + "}"); if (!"\n".equals(System.lineSeparator())) file2Fixed.replaceAll((k, v) -> v.replaceAll(System.lineSeparator(), "\n")); assertEquals(expected, file2Fixed); @@ -2453,12 +2450,10 @@ public void testRecord2() throws Exception { Map expected = Collections.singletonMap("test/Test.java", "package test;\n" + "\n" + - "class Test {\n" + + "record Test(int i) {\n" + " \n" + " Test(int i) {\n" + - " super();\n" + " }\n" + - " private final int i;\n" + "}"); if (!"\n".equals(System.lineSeparator())) file2Fixed.replaceAll((k, v) -> v.replaceAll(System.lineSeparator(), "\n")); assertEquals(expected, file2Fixed); diff --git a/java/java.source/test/unit/src/org/netbeans/api/java/source/gen/LambdaTest.java b/java/java.source/test/unit/src/org/netbeans/api/java/source/gen/LambdaTest.java index 5d4c3e2e2375..8f803560117b 100644 --- a/java/java.source/test/unit/src/org/netbeans/api/java/source/gen/LambdaTest.java +++ b/java/java.source/test/unit/src/org/netbeans/api/java/source/gen/LambdaTest.java @@ -732,7 +732,7 @@ public void run(final WorkingCopy workingCopy) throws IOException { new ErrorAwareTreeScanner() { @Override public Void visitLambdaExpression(LambdaExpressionTree node, Void p) { for (VariableTree par : node.getParameters()) { - workingCopy.rewrite(par.getType(), make.Identifier("String")); + workingCopy.rewrite(par, make.Variable(par.getModifiers(), par.getName(), make.Identifier("String"), par.getInitializer())); } return super.visitLambdaExpression(node, p); } diff --git a/java/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBParserFactory.java b/java/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBParserFactory.java index 5454ffb26ea1..426cab8b9ac0 100644 --- a/java/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBParserFactory.java +++ b/java/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBParserFactory.java @@ -70,9 +70,9 @@ protected NBParserFactory(Context context) { } @Override - public JavacParser newParser(CharSequence input, boolean keepDocComments, boolean keepEndPos, boolean keepLineMap, boolean parseModuleInfo) { + public JavacParser newParser(CharSequence input, boolean keepDocComments, boolean keepLineMap, boolean parseModuleInfo) { Lexer lexer = scannerFactory.newScanner(input, keepDocComments); - return new NBJavacParser(this, lexer, keepDocComments, keepLineMap, keepEndPos, parseModuleInfo, cancelService); + return new NBJavacParser(this, lexer, keepDocComments, keepLineMap, parseModuleInfo, cancelService); } public static class NBJavacParser extends JavacParser { @@ -80,8 +80,8 @@ public static class NBJavacParser extends JavacParser { private final NBTreeMaker make; private final CancelService cancelService; - public NBJavacParser(NBParserFactory fac, Lexer S, boolean keepDocComments, boolean keepLineMap, boolean keepEndPos, boolean parseModuleInfo, CancelService cancelService) { - super(fac, S, keepDocComments, keepLineMap, keepEndPos, parseModuleInfo); + public NBJavacParser(NBParserFactory fac, Lexer S, boolean keepDocComments, boolean keepLineMap, boolean parseModuleInfo, CancelService cancelService) { + super(fac, S, keepDocComments, keepLineMap, parseModuleInfo); this.make = fac.make; this.cancelService = cancelService; } @@ -120,17 +120,6 @@ public JCCompilationUnit parseCompilationUnit() { return unit; } - @Override - protected AbstractEndPosTable newEndPosTable(boolean keepEndPositions) { - AbstractEndPosTable res = super.newEndPosTable(keepEndPositions); - - if (keepEndPositions) { - return new EndPosTableImpl(S, this, (SimpleEndPosTable) res); - } - - return res; - } - @Override protected JCClassDecl classDeclaration(JCModifiers mods, Comment dc) { if (cancelService != null) { @@ -166,7 +155,7 @@ protected JCTree methodDeclaratorRest(int pos, JCModifiers mods, JCExpression ty @Override public int getEndPos(JCTree jctree) { - return TreeInfo.getEndPos(jctree, endPosTable); + return TreeInfo.getEndPos(jctree); } @Override @@ -179,60 +168,11 @@ public JCStatement parseSimpleStatement() { if (result instanceof JCEnhancedForLoop) { JCEnhancedForLoop tree = (JCEnhancedForLoop) result; if (getEndPos(tree.var) == Position.NOPOS) { - ((EndPosTableImpl) endPosTable).setEnd(tree.var, getEndPos(tree.var.vartype)); + tree.var.endpos = getEndPos(tree.var.vartype); } } return result; } - - public final class EndPosTableImpl extends AbstractEndPosTable { - - private final SimpleEndPosTable delegate; - - private EndPosTableImpl(Lexer lexer, JavacParser parser, SimpleEndPosTable delegate) { - this.delegate = delegate; - } - - public void resetErrorEndPos() { - delegate.errorEndPos = Position.NOPOS; - errorEndPos = delegate.errorEndPos; - } - - @Override - public T storeEnd(T tree, int endpos) { - if (endpos >= 0) - return delegate.storeEnd(tree, endpos); - return null; - } - - public void setEnd(JCTree tree, int endpos) { - if (endpos >= 0) { - int oldErrorEndPos = delegate.errorEndPos; - try { - delegate.errorEndPos = -1; - delegate.storeEnd(tree, endpos); - } finally { - delegate.errorEndPos = oldErrorEndPos; - } - } - } - - @Override - public void setErrorEndPos(int errPos) { - delegate.setErrorEndPos(errPos); - errorEndPos = delegate.errorEndPos; - } - - @Override - public int getEndPos(JCTree jctree) { - return delegate.getEndPos(jctree); - } - - @Override - public int replaceTree(JCTree jctree, JCTree jctree1) { - return delegate.replaceTree(jctree, jctree1); - } - } } } diff --git a/java/libs.javacapi/external/binaries-list b/java/libs.javacapi/external/binaries-list index 10da1b4fc791..5a8882711353 100644 --- a/java/libs.javacapi/external/binaries-list +++ b/java/libs.javacapi/external/binaries-list @@ -14,5 +14,5 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. -162196CDF0DAE37B7D3AD7991DE4310B78AFA30F com.dukescript.nbjavac:nb-javac:jdk-26+27 -F9B91950111918341594B7B5641B3731CA8CCF80 com.dukescript.nbjavac:nb-javac:jdk-26+27:api \ No newline at end of file +09FA4E057434BFE5185C2B4A19DA1F764F65AA55 com.dukescript.nbjavac:nb-javac:jdk-27+23 +0DD22CB122CED2E4BF142F59B6F24EF7C3EFEE22 com.dukescript.nbjavac:nb-javac:jdk-27+23:api diff --git a/java/libs.javacapi/external/nb-javac-jdk-26+27-license.txt b/java/libs.javacapi/external/nb-javac-jdk-27+23-license.txt similarity index 99% rename from java/libs.javacapi/external/nb-javac-jdk-26+27-license.txt rename to java/libs.javacapi/external/nb-javac-jdk-27+23-license.txt index 42327cc242fb..1dabda666b2d 100644 --- a/java/libs.javacapi/external/nb-javac-jdk-26+27-license.txt +++ b/java/libs.javacapi/external/nb-javac-jdk-27+23-license.txt @@ -1,7 +1,7 @@ Name: Javac Compiler Implementation Description: Javac Compiler Implementation -Version: 26+27 -Files: nb-javac-jdk-26+27-api.jar nb-javac-jdk-26+27.jar +Version: 27+23 +Files: nb-javac-jdk-27+23-api.jar nb-javac-jdk-27+23.jar License: GPL-2-CP Origin: OpenJDK (https://github.com/openjdk/jdk) Source: https://github.com/openjdk/jdk diff --git a/java/libs.javacapi/nbproject/org-netbeans-libs-javacapi.sig b/java/libs.javacapi/nbproject/org-netbeans-libs-javacapi.sig index 2dfdaea4d54a..c5a05805b0b8 100644 --- a/java/libs.javacapi/nbproject/org-netbeans-libs-javacapi.sig +++ b/java/libs.javacapi/nbproject/org-netbeans-libs-javacapi.sig @@ -1,5 +1,5 @@ #Signature file v4.1 -#Version 8.56.0 +#Version 8.57.0 CLSS public abstract interface com.sun.source.doctree.AttributeTree innr public final static !enum ValueKind @@ -786,6 +786,7 @@ fld public final static com.sun.source.tree.Tree$Kind UNSIGNED_RIGHT_SHIFT fld public final static com.sun.source.tree.Tree$Kind UNSIGNED_RIGHT_SHIFT_ASSIGNMENT fld public final static com.sun.source.tree.Tree$Kind USES fld public final static com.sun.source.tree.Tree$Kind VARIABLE +fld public final static com.sun.source.tree.Tree$Kind VAR_TYPE fld public final static com.sun.source.tree.Tree$Kind WHILE_LOOP fld public final static com.sun.source.tree.Tree$Kind XOR fld public final static com.sun.source.tree.Tree$Kind XOR_ASSIGNMENT @@ -861,6 +862,7 @@ meth public abstract {com.sun.source.tree.TreeVisitor%0} visitTypeParameter(com. meth public abstract {com.sun.source.tree.TreeVisitor%0} visitUnary(com.sun.source.tree.UnaryTree,{com.sun.source.tree.TreeVisitor%1}) meth public abstract {com.sun.source.tree.TreeVisitor%0} visitUnionType(com.sun.source.tree.UnionTypeTree,{com.sun.source.tree.TreeVisitor%1}) meth public abstract {com.sun.source.tree.TreeVisitor%0} visitUses(com.sun.source.tree.UsesTree,{com.sun.source.tree.TreeVisitor%1}) +meth public abstract {com.sun.source.tree.TreeVisitor%0} visitVarType(com.sun.source.tree.VarTypeTree,{com.sun.source.tree.TreeVisitor%1}) meth public abstract {com.sun.source.tree.TreeVisitor%0} visitVariable(com.sun.source.tree.VariableTree,{com.sun.source.tree.TreeVisitor%1}) meth public abstract {com.sun.source.tree.TreeVisitor%0} visitWhileLoop(com.sun.source.tree.WhileLoopTree,{com.sun.source.tree.TreeVisitor%1}) meth public abstract {com.sun.source.tree.TreeVisitor%0} visitWildcard(com.sun.source.tree.WildcardTree,{com.sun.source.tree.TreeVisitor%1}) @@ -896,6 +898,9 @@ CLSS public abstract interface com.sun.source.tree.UsesTree intf com.sun.source.tree.DirectiveTree meth public abstract com.sun.source.tree.ExpressionTree getServiceName() +CLSS public abstract interface com.sun.source.tree.VarTypeTree +intf com.sun.source.tree.Tree + CLSS public abstract interface com.sun.source.tree.VariableTree intf com.sun.source.tree.StatementTree meth public abstract com.sun.source.tree.ExpressionTree getInitializer() @@ -919,8 +924,12 @@ meth public abstract com.sun.source.tree.ExpressionTree getValue() CLSS public abstract interface com.sun.source.util.DocSourcePositions intf com.sun.source.util.SourcePositions -meth public abstract long getEndPosition(com.sun.source.tree.CompilationUnitTree,com.sun.source.doctree.DocCommentTree,com.sun.source.doctree.DocTree) -meth public abstract long getStartPosition(com.sun.source.tree.CompilationUnitTree,com.sun.source.doctree.DocCommentTree,com.sun.source.doctree.DocTree) +meth public abstract long getEndPosition(com.sun.source.doctree.DocCommentTree,com.sun.source.doctree.DocTree) +meth public abstract long getStartPosition(com.sun.source.doctree.DocCommentTree,com.sun.source.doctree.DocTree) +meth public long getEndPosition(com.sun.source.tree.CompilationUnitTree,com.sun.source.doctree.DocCommentTree,com.sun.source.doctree.DocTree) + anno 0 java.lang.Deprecated() +meth public long getStartPosition(com.sun.source.tree.CompilationUnitTree,com.sun.source.doctree.DocCommentTree,com.sun.source.doctree.DocTree) + anno 0 java.lang.Deprecated() CLSS public abstract interface com.sun.source.util.DocTreeFactory meth public abstract com.sun.source.doctree.AttributeTree newAttributeTree(javax.lang.model.element.Name,com.sun.source.doctree.AttributeTree$ValueKind,java.util.List) @@ -1209,6 +1218,7 @@ meth public {com.sun.source.util.SimpleTreeVisitor%0} visitTypeParameter(com.sun meth public {com.sun.source.util.SimpleTreeVisitor%0} visitUnary(com.sun.source.tree.UnaryTree,{com.sun.source.util.SimpleTreeVisitor%1}) meth public {com.sun.source.util.SimpleTreeVisitor%0} visitUnionType(com.sun.source.tree.UnionTypeTree,{com.sun.source.util.SimpleTreeVisitor%1}) meth public {com.sun.source.util.SimpleTreeVisitor%0} visitUses(com.sun.source.tree.UsesTree,{com.sun.source.util.SimpleTreeVisitor%1}) +meth public {com.sun.source.util.SimpleTreeVisitor%0} visitVarType(com.sun.source.tree.VarTypeTree,{com.sun.source.util.SimpleTreeVisitor%1}) meth public {com.sun.source.util.SimpleTreeVisitor%0} visitVariable(com.sun.source.tree.VariableTree,{com.sun.source.util.SimpleTreeVisitor%1}) meth public {com.sun.source.util.SimpleTreeVisitor%0} visitWhileLoop(com.sun.source.tree.WhileLoopTree,{com.sun.source.util.SimpleTreeVisitor%1}) meth public {com.sun.source.util.SimpleTreeVisitor%0} visitWildcard(com.sun.source.tree.WildcardTree,{com.sun.source.util.SimpleTreeVisitor%1}) @@ -1216,8 +1226,12 @@ meth public {com.sun.source.util.SimpleTreeVisitor%0} visitYield(com.sun.source. supr java.lang.Object CLSS public abstract interface com.sun.source.util.SourcePositions -meth public abstract long getEndPosition(com.sun.source.tree.CompilationUnitTree,com.sun.source.tree.Tree) -meth public abstract long getStartPosition(com.sun.source.tree.CompilationUnitTree,com.sun.source.tree.Tree) +meth public abstract long getEndPosition(com.sun.source.tree.Tree) +meth public abstract long getStartPosition(com.sun.source.tree.Tree) +meth public long getEndPosition(com.sun.source.tree.CompilationUnitTree,com.sun.source.tree.Tree) + anno 0 java.lang.Deprecated() +meth public long getStartPosition(com.sun.source.tree.CompilationUnitTree,com.sun.source.tree.Tree) + anno 0 java.lang.Deprecated() CLSS public final com.sun.source.util.TaskEvent cons public init(com.sun.source.util.TaskEvent$Kind) @@ -1341,6 +1355,7 @@ meth public {com.sun.source.util.TreeScanner%0} visitTypeParameter(com.sun.sourc meth public {com.sun.source.util.TreeScanner%0} visitUnary(com.sun.source.tree.UnaryTree,{com.sun.source.util.TreeScanner%1}) meth public {com.sun.source.util.TreeScanner%0} visitUnionType(com.sun.source.tree.UnionTypeTree,{com.sun.source.util.TreeScanner%1}) meth public {com.sun.source.util.TreeScanner%0} visitUses(com.sun.source.tree.UsesTree,{com.sun.source.util.TreeScanner%1}) +meth public {com.sun.source.util.TreeScanner%0} visitVarType(com.sun.source.tree.VarTypeTree,{com.sun.source.util.TreeScanner%1}) meth public {com.sun.source.util.TreeScanner%0} visitVariable(com.sun.source.tree.VariableTree,{com.sun.source.util.TreeScanner%1}) meth public {com.sun.source.util.TreeScanner%0} visitWhileLoop(com.sun.source.tree.WhileLoopTree,{com.sun.source.util.TreeScanner%1}) meth public {com.sun.source.util.TreeScanner%0} visitWildcard(com.sun.source.tree.WildcardTree,{com.sun.source.util.TreeScanner%1}) @@ -1641,6 +1656,7 @@ fld public final static javax.lang.model.SourceVersion RELEASE_23 fld public final static javax.lang.model.SourceVersion RELEASE_24 fld public final static javax.lang.model.SourceVersion RELEASE_25 fld public final static javax.lang.model.SourceVersion RELEASE_26 +fld public final static javax.lang.model.SourceVersion RELEASE_27 fld public final static javax.lang.model.SourceVersion RELEASE_3 fld public final static javax.lang.model.SourceVersion RELEASE_4 fld public final static javax.lang.model.SourceVersion RELEASE_5 @@ -2086,7 +2102,7 @@ meth public abstract javax.lang.model.type.TypeMirror getExtendsBound() meth public abstract javax.lang.model.type.TypeMirror getSuperBound() CLSS public abstract javax.lang.model.util.AbstractAnnotationValueVisitor14<%0 extends java.lang.Object, %1 extends java.lang.Object> - anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_26) + anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_27) cons protected init() supr javax.lang.model.util.AbstractAnnotationValueVisitor9<{javax.lang.model.util.AbstractAnnotationValueVisitor14%0},{javax.lang.model.util.AbstractAnnotationValueVisitor14%1}> @@ -2117,12 +2133,12 @@ cons protected init() supr javax.lang.model.util.AbstractAnnotationValueVisitor8<{javax.lang.model.util.AbstractAnnotationValueVisitor9%0},{javax.lang.model.util.AbstractAnnotationValueVisitor9%1}> CLSS public abstract javax.lang.model.util.AbstractAnnotationValueVisitorPreview<%0 extends java.lang.Object, %1 extends java.lang.Object> - anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_26) + anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_27) cons protected init() supr javax.lang.model.util.AbstractAnnotationValueVisitor14<{javax.lang.model.util.AbstractAnnotationValueVisitorPreview%0},{javax.lang.model.util.AbstractAnnotationValueVisitorPreview%1}> CLSS public abstract javax.lang.model.util.AbstractElementVisitor14<%0 extends java.lang.Object, %1 extends java.lang.Object> - anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_26) + anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_27) cons protected init() meth public abstract {javax.lang.model.util.AbstractElementVisitor14%0} visitRecordComponent(javax.lang.model.element.RecordComponentElement,{javax.lang.model.util.AbstractElementVisitor14%1}) supr javax.lang.model.util.AbstractElementVisitor9<{javax.lang.model.util.AbstractElementVisitor14%0},{javax.lang.model.util.AbstractElementVisitor14%1}> @@ -2157,12 +2173,12 @@ meth public abstract {javax.lang.model.util.AbstractElementVisitor9%0} visitModu supr javax.lang.model.util.AbstractElementVisitor8<{javax.lang.model.util.AbstractElementVisitor9%0},{javax.lang.model.util.AbstractElementVisitor9%1}> CLSS public abstract javax.lang.model.util.AbstractElementVisitorPreview<%0 extends java.lang.Object, %1 extends java.lang.Object> - anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_26) + anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_27) cons protected init() supr javax.lang.model.util.AbstractElementVisitor14<{javax.lang.model.util.AbstractElementVisitorPreview%0},{javax.lang.model.util.AbstractElementVisitorPreview%1}> CLSS public abstract javax.lang.model.util.AbstractTypeVisitor14<%0 extends java.lang.Object, %1 extends java.lang.Object> - anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_26) + anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_27) cons protected init() supr javax.lang.model.util.AbstractTypeVisitor9<{javax.lang.model.util.AbstractTypeVisitor14%0},{javax.lang.model.util.AbstractTypeVisitor14%1}> @@ -2197,7 +2213,7 @@ cons protected init() supr javax.lang.model.util.AbstractTypeVisitor8<{javax.lang.model.util.AbstractTypeVisitor9%0},{javax.lang.model.util.AbstractTypeVisitor9%1}> CLSS public abstract javax.lang.model.util.AbstractTypeVisitorPreview<%0 extends java.lang.Object, %1 extends java.lang.Object> - anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_26) + anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_27) cons protected init() supr javax.lang.model.util.AbstractTypeVisitor14<{javax.lang.model.util.AbstractTypeVisitorPreview%0},{javax.lang.model.util.AbstractTypeVisitorPreview%1}> @@ -2225,7 +2241,7 @@ supr java.lang.Object hfds CONSTRUCTOR_KIND,FIELD_KINDS,METHOD_KIND,MODULE_KIND,PACKAGE_KIND,RECORD_COMPONENT_KIND,TYPE_KINDS CLSS public javax.lang.model.util.ElementKindVisitor14<%0 extends java.lang.Object, %1 extends java.lang.Object> - anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_26) + anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_27) cons protected init() cons protected init({javax.lang.model.util.ElementKindVisitor14%0}) meth public {javax.lang.model.util.ElementKindVisitor14%0} visitRecordComponent(javax.lang.model.element.RecordComponentElement,{javax.lang.model.util.ElementKindVisitor14%1}) @@ -2285,13 +2301,13 @@ meth public {javax.lang.model.util.ElementKindVisitor9%0} visitModule(javax.lang supr javax.lang.model.util.ElementKindVisitor8<{javax.lang.model.util.ElementKindVisitor9%0},{javax.lang.model.util.ElementKindVisitor9%1}> CLSS public javax.lang.model.util.ElementKindVisitorPreview<%0 extends java.lang.Object, %1 extends java.lang.Object> - anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_26) + anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_27) cons protected init() cons protected init({javax.lang.model.util.ElementKindVisitorPreview%0}) supr javax.lang.model.util.ElementKindVisitor14<{javax.lang.model.util.ElementKindVisitorPreview%0},{javax.lang.model.util.ElementKindVisitorPreview%1}> CLSS public javax.lang.model.util.ElementScanner14<%0 extends java.lang.Object, %1 extends java.lang.Object> - anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_26) + anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_27) cons protected init() cons protected init({javax.lang.model.util.ElementScanner14%0}) meth public {javax.lang.model.util.ElementScanner14%0} visitExecutable(javax.lang.model.element.ExecutableElement,{javax.lang.model.util.ElementScanner14%1}) @@ -2340,7 +2356,7 @@ meth public {javax.lang.model.util.ElementScanner9%0} visitModule(javax.lang.mod supr javax.lang.model.util.ElementScanner8<{javax.lang.model.util.ElementScanner9%0},{javax.lang.model.util.ElementScanner9%1}> CLSS public javax.lang.model.util.ElementScannerPreview<%0 extends java.lang.Object, %1 extends java.lang.Object> - anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_26) + anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_27) cons protected init() cons protected init({javax.lang.model.util.ElementScannerPreview%0}) supr javax.lang.model.util.ElementScanner14<{javax.lang.model.util.ElementScannerPreview%0},{javax.lang.model.util.ElementScannerPreview%1}> @@ -2402,7 +2418,7 @@ meth public static javax.lang.model.util.Elements$Origin[] values() supr java.lang.Enum CLSS public javax.lang.model.util.SimpleAnnotationValueVisitor14<%0 extends java.lang.Object, %1 extends java.lang.Object> - anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_26) + anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_27) cons protected init() cons protected init({javax.lang.model.util.SimpleAnnotationValueVisitor14%0}) supr javax.lang.model.util.SimpleAnnotationValueVisitor9<{javax.lang.model.util.SimpleAnnotationValueVisitor14%0},{javax.lang.model.util.SimpleAnnotationValueVisitor14%1}> @@ -2451,13 +2467,13 @@ cons protected init({javax.lang.model.util.SimpleAnnotationValueVisitor9%0}) supr javax.lang.model.util.SimpleAnnotationValueVisitor8<{javax.lang.model.util.SimpleAnnotationValueVisitor9%0},{javax.lang.model.util.SimpleAnnotationValueVisitor9%1}> CLSS public javax.lang.model.util.SimpleAnnotationValueVisitorPreview<%0 extends java.lang.Object, %1 extends java.lang.Object> - anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_26) + anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_27) cons protected init() cons protected init({javax.lang.model.util.SimpleAnnotationValueVisitorPreview%0}) supr javax.lang.model.util.SimpleAnnotationValueVisitor14<{javax.lang.model.util.SimpleAnnotationValueVisitorPreview%0},{javax.lang.model.util.SimpleAnnotationValueVisitorPreview%1}> CLSS public javax.lang.model.util.SimpleElementVisitor14<%0 extends java.lang.Object, %1 extends java.lang.Object> - anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_26) + anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_27) cons protected init() cons protected init({javax.lang.model.util.SimpleElementVisitor14%0}) meth public {javax.lang.model.util.SimpleElementVisitor14%0} visitRecordComponent(javax.lang.model.element.RecordComponentElement,{javax.lang.model.util.SimpleElementVisitor14%1}) @@ -2501,13 +2517,13 @@ meth public {javax.lang.model.util.SimpleElementVisitor9%0} visitModule(javax.la supr javax.lang.model.util.SimpleElementVisitor8<{javax.lang.model.util.SimpleElementVisitor9%0},{javax.lang.model.util.SimpleElementVisitor9%1}> CLSS public javax.lang.model.util.SimpleElementVisitorPreview<%0 extends java.lang.Object, %1 extends java.lang.Object> - anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_26) + anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_27) cons protected init() cons protected init({javax.lang.model.util.SimpleElementVisitorPreview%0}) supr javax.lang.model.util.SimpleElementVisitor14<{javax.lang.model.util.SimpleElementVisitorPreview%0},{javax.lang.model.util.SimpleElementVisitorPreview%1}> CLSS public javax.lang.model.util.SimpleTypeVisitor14<%0 extends java.lang.Object, %1 extends java.lang.Object> - anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_26) + anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_27) cons protected init() cons protected init({javax.lang.model.util.SimpleTypeVisitor14%0}) supr javax.lang.model.util.SimpleTypeVisitor9<{javax.lang.model.util.SimpleTypeVisitor14%0},{javax.lang.model.util.SimpleTypeVisitor14%1}> @@ -2554,13 +2570,13 @@ cons protected init({javax.lang.model.util.SimpleTypeVisitor9%0}) supr javax.lang.model.util.SimpleTypeVisitor8<{javax.lang.model.util.SimpleTypeVisitor9%0},{javax.lang.model.util.SimpleTypeVisitor9%1}> CLSS public javax.lang.model.util.SimpleTypeVisitorPreview<%0 extends java.lang.Object, %1 extends java.lang.Object> - anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_26) + anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_27) cons protected init() cons protected init({javax.lang.model.util.SimpleTypeVisitorPreview%0}) supr javax.lang.model.util.SimpleTypeVisitor14<{javax.lang.model.util.SimpleTypeVisitorPreview%0},{javax.lang.model.util.SimpleTypeVisitorPreview%1}> CLSS public javax.lang.model.util.TypeKindVisitor14<%0 extends java.lang.Object, %1 extends java.lang.Object> - anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_26) + anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_27) cons protected init() cons protected init({javax.lang.model.util.TypeKindVisitor14%0}) supr javax.lang.model.util.TypeKindVisitor9<{javax.lang.model.util.TypeKindVisitor14%0},{javax.lang.model.util.TypeKindVisitor14%1}> @@ -2611,7 +2627,7 @@ meth public {javax.lang.model.util.TypeKindVisitor9%0} visitNoTypeAsModule(javax supr javax.lang.model.util.TypeKindVisitor8<{javax.lang.model.util.TypeKindVisitor9%0},{javax.lang.model.util.TypeKindVisitor9%1}> CLSS public javax.lang.model.util.TypeKindVisitorPreview<%0 extends java.lang.Object, %1 extends java.lang.Object> - anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_26) + anno 0 javax.annotation.processing.SupportedSourceVersion(javax.lang.model.SourceVersion value=RELEASE_27) cons protected init() cons protected init({javax.lang.model.util.TypeKindVisitorPreview%0}) supr javax.lang.model.util.TypeKindVisitor14<{javax.lang.model.util.TypeKindVisitorPreview%0},{javax.lang.model.util.TypeKindVisitorPreview%1}> diff --git a/java/libs.javacapi/nbproject/project.xml b/java/libs.javacapi/nbproject/project.xml index 9e3cab61ae0c..dea30a9a27cb 100644 --- a/java/libs.javacapi/nbproject/project.xml +++ b/java/libs.javacapi/nbproject/project.xml @@ -40,11 +40,11 @@ - external/nb-javac-jdk-26+27-api.jar + external/nb-javac-jdk-27+23-api.jar - external/nb-javac-jdk-26+27.jar + external/nb-javac-jdk-27+23.jar diff --git a/java/libs.nbjavacapi/external/binaries-list b/java/libs.nbjavacapi/external/binaries-list index ce8c570f6590..5a8882711353 100644 --- a/java/libs.nbjavacapi/external/binaries-list +++ b/java/libs.nbjavacapi/external/binaries-list @@ -14,5 +14,5 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. -162196CDF0DAE37B7D3AD7991DE4310B78AFA30F com.dukescript.nbjavac:nb-javac:jdk-26+27 -F9B91950111918341594B7B5641B3731CA8CCF80 com.dukescript.nbjavac:nb-javac:jdk-26+27:api +09FA4E057434BFE5185C2B4A19DA1F764F65AA55 com.dukescript.nbjavac:nb-javac:jdk-27+23 +0DD22CB122CED2E4BF142F59B6F24EF7C3EFEE22 com.dukescript.nbjavac:nb-javac:jdk-27+23:api diff --git a/java/libs.nbjavacapi/external/nb-javac-jdk-26+27-license.txt b/java/libs.nbjavacapi/external/nb-javac-jdk-27+23-license.txt similarity index 99% rename from java/libs.nbjavacapi/external/nb-javac-jdk-26+27-license.txt rename to java/libs.nbjavacapi/external/nb-javac-jdk-27+23-license.txt index 42327cc242fb..1dabda666b2d 100644 --- a/java/libs.nbjavacapi/external/nb-javac-jdk-26+27-license.txt +++ b/java/libs.nbjavacapi/external/nb-javac-jdk-27+23-license.txt @@ -1,7 +1,7 @@ Name: Javac Compiler Implementation Description: Javac Compiler Implementation -Version: 26+27 -Files: nb-javac-jdk-26+27-api.jar nb-javac-jdk-26+27.jar +Version: 27+23 +Files: nb-javac-jdk-27+23-api.jar nb-javac-jdk-27+23.jar License: GPL-2-CP Origin: OpenJDK (https://github.com/openjdk/jdk) Source: https://github.com/openjdk/jdk diff --git a/java/libs.nbjavacapi/nbproject/project.properties b/java/libs.nbjavacapi/nbproject/project.properties index 324f20a552d1..959aad09bcc6 100644 --- a/java/libs.nbjavacapi/nbproject/project.properties +++ b/java/libs.nbjavacapi/nbproject/project.properties @@ -18,8 +18,8 @@ javac.release=17 javac.compilerargs=-Xlint -Xlint:-serial license.file.override=${nb_all}/nbbuild/licenses/GPL-2-CP -release.external/nb-javac-jdk-26+27-api.jar=modules/ext/nb-javac-jdk-26-27-api.jar -release.external/nb-javac-jdk-26+27.jar=modules/ext/nb-javac-jdk-26-27.jar +release.external/nb-javac-jdk-27+23-api.jar=modules/ext/nb-javac-jdk-27-23-api.jar +release.external/nb-javac-jdk-27+23.jar=modules/ext/nb-javac-jdk-27-23.jar # for tests requires.nb.javac=true diff --git a/java/libs.nbjavacapi/nbproject/project.xml b/java/libs.nbjavacapi/nbproject/project.xml index 30ffb3bf7501..a3bab38765f3 100644 --- a/java/libs.nbjavacapi/nbproject/project.xml +++ b/java/libs.nbjavacapi/nbproject/project.xml @@ -45,12 +45,12 @@ - ext/nb-javac-jdk-26-27-api.jar - external/nb-javac-jdk-26+27-api.jar + ext/nb-javac-jdk-27-23-api.jar + external/nb-javac-jdk-27+23-api.jar - ext/nb-javac-jdk-26-27.jar - external/nb-javac-jdk-26+27.jar + ext/nb-javac-jdk-27-23.jar + external/nb-javac-jdk-27+23.jar diff --git a/java/libs.nbjavacapi/src/org/netbeans/modules/nbjavac/api/Bundle.properties b/java/libs.nbjavacapi/src/org/netbeans/modules/nbjavac/api/Bundle.properties index 1905befb638e..b4100c2fd81c 100644 --- a/java/libs.nbjavacapi/src/org/netbeans/modules/nbjavac/api/Bundle.properties +++ b/java/libs.nbjavacapi/src/org/netbeans/modules/nbjavac/api/Bundle.properties @@ -18,6 +18,6 @@ OpenIDE-Module-Display-Category=Java OpenIDE-Module-Long-Description=\ This library provides a Java language parser for the IDE. \ - Supports JDK-26 features. + Supports JDK-27 features. OpenIDE-Module-Name=The nb-javac Java editing support library OpenIDE-Module-Short-Description=The nb-javac Java editing support library diff --git a/java/spi.java.hints/src/org/netbeans/modules/java/hints/spiimpl/Utilities.java b/java/spi.java.hints/src/org/netbeans/modules/java/hints/spiimpl/Utilities.java index efae473d7a15..bce678532be8 100644 --- a/java/spi.java.hints/src/org/netbeans/modules/java/hints/spiimpl/Utilities.java +++ b/java/spi.java.hints/src/org/netbeans/modules/java/hints/spiimpl/Utilities.java @@ -68,7 +68,6 @@ import com.sun.tools.javac.parser.ScannerFactory; import com.sun.tools.javac.parser.Tokens.Token; import com.sun.tools.javac.parser.Tokens.TokenKind; -import com.sun.tools.javac.tree.EndPosTable; import com.sun.tools.javac.tree.JCTree; import com.sun.tools.javac.tree.JCTree.JCCase; import com.sun.tools.javac.tree.JCTree.JCCatch; @@ -1259,7 +1258,7 @@ public JackpotJavacParser(Context ctx, NBParserFactory fac, boolean keepLineMap, CancelService cancelService, Names names) { - super(fac, S, keepDocComments, keepLineMap, true, false, cancelService); + super(fac, S, keepDocComments, keepLineMap, false, cancelService); this.ctx = ctx; this.make = com.sun.tools.javac.tree.TreeMaker.instance(ctx); this.dollar = names.fromString("$"); @@ -1471,7 +1470,7 @@ private static boolean isSynthetic(CompilationUnitTree cut, Tree leaf) throws Nu IdentifierTree it = (IdentifierTree) mit.getMethodSelect(); if ("super".equals(it.getName().toString())) { - return ((JCCompilationUnit) cut).endPositions.getEndPos(tree) == (-1); + return tree.endpos == (-1); } } } @@ -1534,12 +1533,22 @@ private record OffsetSourcePositions(SourcePositions delegate, long offset) impl @Override public long getStartPosition(CompilationUnitTree cut, Tree tree) { - return delegate.getStartPosition(cut, tree) + offset; + return getStartPosition(tree); + } + + @Override + public long getStartPosition(Tree tree) { + return delegate.getStartPosition(tree) + offset; } @Override public long getEndPosition(CompilationUnitTree cut, Tree tree) { - return delegate.getEndPosition(cut, tree) + offset; + return getEndPosition(tree); + } + + @Override + public long getEndPosition(Tree tree) { + return delegate.getEndPosition(tree) + offset; } } @@ -1570,22 +1579,7 @@ public long getStartPosition() { @Override public long getEndPosition() { if (delegate instanceof JCDiagnostic jcDiag) { - return jcDiag.getDiagnosticPosition().getEndPosition(new EndPosTable() { - @Override public int getEndPos(JCTree tree) { - return (int) sp.getEndPosition(null, tree); - } - @Override - public T storeEnd(T tree, int endpos) { - throw new UnsupportedOperationException("Not supported yet."); - } - @Override - public void setErrorEndPos(int errpos) { - throw new UnsupportedOperationException("Not supported yet."); - } - @Override public int replaceTree(JCTree oldtree, JCTree newtree) { - throw new UnsupportedOperationException("Not supported yet."); - } - }) + offset; + return jcDiag.getDiagnosticPosition().getEndPosition() + offset; } return delegate.getEndPosition() + offset; } @@ -1616,11 +1610,21 @@ private record ParserSourcePositions(JavacParser parser) implements SourcePositi @Override public long getStartPosition(CompilationUnitTree file, Tree tree) { + return getStartPosition(tree); + } + + @Override + public long getStartPosition(Tree tree) { return parser.getStartPos((JCTree)tree); } @Override public long getEndPosition(CompilationUnitTree file, Tree tree) { + return getEndPosition(tree); + } + + @Override + public long getEndPosition(Tree tree) { return parser.getEndPos((JCTree)tree); } } diff --git a/nbbuild/antsrc/org/netbeans/nbbuild/extlibs/ignored-overlaps b/nbbuild/antsrc/org/netbeans/nbbuild/extlibs/ignored-overlaps index 580afd5ca114..6c7ee8891260 100644 --- a/nbbuild/antsrc/org/netbeans/nbbuild/extlibs/ignored-overlaps +++ b/nbbuild/antsrc/org/netbeans/nbbuild/extlibs/ignored-overlaps @@ -93,8 +93,8 @@ nb/ide.launcher/external/launcher-external-binaries-4-8e2bc77e581e.zip platform/ nb/ide.launcher/external/launcher-external-binaries-4-8e2bc77e581e.zip harness/apisupport.harness/external/launcher-external-binaries-4-8e2bc77e581e.zip # only one is part of the product: -java/libs.javacapi/external/nb-javac-jdk-26+27-api.jar java/libs.nbjavacapi/external/nb-javac-jdk-26+27-api.jar -java/libs.javacapi/external/nb-javac-jdk-26+27.jar java/libs.nbjavacapi/external/nb-javac-jdk-26+27.jar +java/libs.javacapi/external/nb-javac-jdk-27+23-api.jar java/libs.nbjavacapi/external/nb-javac-jdk-27+23-api.jar +java/libs.javacapi/external/nb-javac-jdk-27+23.jar java/libs.nbjavacapi/external/nb-javac-jdk-27+23.jar # Used only in unittests for mysql db specific tests ide/db.metadata.model/external/mysql-connector-j-8.0.31.jar ide/db.mysql/external/mysql-connector-j-8.0.31.jar diff --git a/nbbuild/javadoctools/template.xml b/nbbuild/javadoctools/template.xml index 9d3f9b933efd..4f2088009c04 100644 --- a/nbbuild/javadoctools/template.xml +++ b/nbbuild/javadoctools/template.xml @@ -148,6 +148,12 @@ cause it to fail. + + + + + + @@ -349,6 +355,7 @@ cause it to fail. + @@ -377,6 +384,7 @@ cause it to fail. ${javadoc.footer} +