You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by ge...@apache.org on 2021/03/29 21:31:08 UTC
[netbeans] branch master updated: Fixing codegen handling of both
rewrite of an import and an adding of an import due to qual ident.
This is an automated email from the ASF dual-hosted git repository.
geertjan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git
The following commit(s) were added to refs/heads/master by this push:
new e8d85af Fixing codegen handling of both rewrite of an import and an adding of an import due to qual ident.
new 4482ad1 Merge pull request #2808 from jlahoda/import-rewrite-and-qual-ident
e8d85af is described below
commit e8d85afc5db8793016bde8980be5eeaac9e8845d
Author: Jan Lahoda <jl...@netbeans.org>
AuthorDate: Sat Mar 13 07:44:54 2021 +0100
Fixing codegen handling of both rewrite of an import and an adding of an import due to qual ident.
---
.../api/java/source/GeneratorUtilities.java | 16 +++++-
.../java/source/GeneratorUtilitiesAccessor.java | 65 ++++++++++++++++++++++
.../source/transform/ImmutableTreeTranslator.java | 6 +-
.../api/java/source/gen/ImportAnalysis2Test.java | 36 ++++++++++++
4 files changed, 121 insertions(+), 2 deletions(-)
diff --git a/java/java.source.base/src/org/netbeans/api/java/source/GeneratorUtilities.java b/java/java.source.base/src/org/netbeans/api/java/source/GeneratorUtilities.java
index 40a051c..b945f7e 100644
--- a/java/java.source.base/src/org/netbeans/api/java/source/GeneratorUtilities.java
+++ b/java/java.source.base/src/org/netbeans/api/java/source/GeneratorUtilities.java
@@ -121,6 +121,7 @@ import org.netbeans.api.lexer.TokenHierarchy;
import org.netbeans.api.lexer.TokenSequence;
import org.netbeans.api.queries.FileEncodingQuery;
import org.netbeans.api.scripting.Scripting;
+import org.netbeans.modules.java.source.GeneratorUtilitiesAccessor;
import org.netbeans.modules.java.source.TreeShims;
import org.netbeans.modules.java.source.builder.CommentHandlerService;
import org.netbeans.modules.java.source.builder.CommentSetImpl;
@@ -1068,6 +1069,10 @@ public final class GeneratorUtilities {
* @since 0.86
*/
public CompilationUnitTree addImports(CompilationUnitTree cut, Set<? extends Element> toImport) {
+ return addImports(cut, cut.getImports(), toImport);
+ }
+
+ private CompilationUnitTree addImports(CompilationUnitTree cut, List<? extends ImportTree> cutImports, Set<? extends Element> toImport) {
assert cut != null && toImport != null && toImport.size() > 0;
ArrayList<Element> elementsToImport = new ArrayList<Element>(toImport.size());
@@ -1175,7 +1180,7 @@ public final class GeneratorUtilities {
}
}
}
- List<ImportTree> imports = new ArrayList<ImportTree>(cut.getImports());
+ List<ImportTree> imports = new ArrayList<ImportTree>(cutImports);
for (ImportTree imp : imports) {
Element e = getImportedElement(cut, imp);
if (!elementsToImport.contains(e)) {
@@ -2247,4 +2252,13 @@ public final class GeneratorUtilities {
}.scan(tree, false);
return b != null ? b : false;
}
+
+ static {
+ GeneratorUtilitiesAccessor.setInstance(new GeneratorUtilitiesAccessor() {
+ @Override
+ public CompilationUnitTree addImports(GeneratorUtilities gu, CompilationUnitTree cut, List<? extends ImportTree> cutImports, Set<? extends Element> toImport) {
+ return gu.addImports(cut, cutImports, toImport);
+ }
+ });
+ }
}
diff --git a/java/java.source.base/src/org/netbeans/modules/java/source/GeneratorUtilitiesAccessor.java b/java/java.source.base/src/org/netbeans/modules/java/source/GeneratorUtilitiesAccessor.java
new file mode 100644
index 0000000..3e96b8d
--- /dev/null
+++ b/java/java.source.base/src/org/netbeans/modules/java/source/GeneratorUtilitiesAccessor.java
@@ -0,0 +1,65 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.netbeans.modules.java.source;
+
+import com.sun.source.tree.CompilationUnitTree;
+import com.sun.source.tree.ImportTree;
+import java.util.List;
+import java.util.Set;
+import javax.lang.model.element.Element;
+import org.netbeans.api.java.source.GeneratorUtilities;
+
+public abstract class GeneratorUtilitiesAccessor {
+
+ private static volatile GeneratorUtilitiesAccessor INSTANCE;
+
+ public static GeneratorUtilitiesAccessor getInstance() {
+ GeneratorUtilitiesAccessor result = INSTANCE;
+
+ if (result == null) {
+ synchronized (GeneratorUtilitiesAccessor.class) {
+ if (INSTANCE == null) {
+ Class c = GeneratorUtilities.class;
+ try {
+ Class.forName(c.getName(), true, c.getClassLoader());
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+
+ assert INSTANCE != null;
+ }
+
+ return INSTANCE;
+ }
+ }
+
+ return result;
+ }
+
+ public static void setInstance(GeneratorUtilitiesAccessor instance) {
+ assert instance != null;
+ INSTANCE = instance;
+ }
+
+ protected GeneratorUtilitiesAccessor() {
+ }
+
+ public abstract CompilationUnitTree addImports(GeneratorUtilities gu, CompilationUnitTree cut, List<? extends ImportTree> cutImports, Set<? extends Element> toImport);
+
+}
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 a4a93ce..3d6c6fc 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
@@ -24,6 +24,7 @@ import com.sun.source.tree.*;
import com.sun.source.tree.Tree.Kind;
import com.sun.tools.javac.code.Flags;
import com.sun.tools.javac.model.JavacElements;
+import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
import com.sun.tools.javac.tree.JCTree.JCLambda;
import com.sun.tools.javac.tree.JCTree.JCModifiers;
import com.sun.tools.javac.util.Context;
@@ -39,6 +40,7 @@ import javax.lang.model.util.Elements;
import org.netbeans.api.java.source.GeneratorUtilities;
import org.netbeans.api.java.source.TreeMaker;
import org.netbeans.api.java.source.WorkingCopy;
+import org.netbeans.modules.java.source.GeneratorUtilitiesAccessor;
import org.netbeans.modules.java.source.TreeShims;
import org.netbeans.modules.java.source.builder.ASTService;
import org.netbeans.modules.java.source.builder.CommentHandlerService;
@@ -546,7 +548,9 @@ public class ImmutableTreeTranslator implements TreeVisitor<Tree,Object> {
Set<? extends Element> newImports = importAnalysis.getImports();
if (copy != null && newImports != null && !newImports.isEmpty()) {
- imps = GeneratorUtilities.get(copy).addImports(tree, newImports).getImports();
+ imps = GeneratorUtilitiesAccessor.getInstance()
+ .addImports(GeneratorUtilities.get(copy), tree, imps, newImports)
+ .getImports();
}
if (!annotations.equals(tree.getPackageAnnotations()) || pid!=tree.getPackageName() || !imps.equals(tree.getImports()) ||
diff --git a/java/java.source.base/test/unit/src/org/netbeans/api/java/source/gen/ImportAnalysis2Test.java b/java/java.source.base/test/unit/src/org/netbeans/api/java/source/gen/ImportAnalysis2Test.java
index e9a65e6..5104e1d 100644
--- a/java/java.source.base/test/unit/src/org/netbeans/api/java/source/gen/ImportAnalysis2Test.java
+++ b/java/java.source.base/test/unit/src/org/netbeans/api/java/source/gen/ImportAnalysis2Test.java
@@ -911,6 +911,42 @@ public class ImportAnalysis2Test extends GeneratorTestMDRCompat {
assertEquals(golden, res);
}
+ public void testQualIdentAndImportChange() throws Exception {
+ testFile = new File(getWorkDir(), "hierbas/del/litoral/Test.java");
+ assertTrue(testFile.getParentFile().mkdirs());
+ TestUtilities.copyStringToFile(testFile,
+ "package hierbas.del.litoral;\n" +
+ "import java.lang.String;\n" +
+ "public class Test {\n" +
+ "}\n"
+ );
+ String golden =
+ "package hierbas.del.litoral;\n" +
+ "import java.lang.CharSequence;\n" +
+ "import java.util.List;\n" +
+ "public class Test {\n\n" +
+ " List test;\n" +
+ "}\n";
+
+ JavaSource src = getJavaSource(testFile);
+ Task<WorkingCopy> task = new Task<WorkingCopy>() {
+
+ public void run(WorkingCopy workingCopy) throws IOException {
+ workingCopy.toPhase(Phase.RESOLVED);
+ TreeMaker make = workingCopy.getTreeMaker();
+ ImportTree imp = workingCopy.getCompilationUnit().getImports().get(0);
+ workingCopy.rewrite(imp.getQualifiedIdentifier(), make.MemberSelect(make.MemberSelect(make.Identifier("java"), "lang"), "CharSequence"));
+ ClassTree clazz = (ClassTree) workingCopy.getCompilationUnit().getTypeDecls().get(0);
+ workingCopy.rewrite(clazz, make.addClassMember(clazz, make.Variable(make.Modifiers(EnumSet.noneOf(Modifier.class)), "test", make.QualIdent("java.util.List"), null)));
+ }
+
+ };
+ src.runModificationTask(task).commit();
+ String res = TestUtilities.copyFileToString(testFile);
+ //System.err.println(res);
+ assertEquals(golden, res);
+ }
+
String getGoldenPckg() {
return "";
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists