This is an automated email from the ASF dual-hosted git repository.

mbien 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 9c92a818e3 Make NetBeans aware of the StringTemplate.STR default field 
import.
     new b951c317d2 Merge pull request #6908 from 
mbien/java-lang-default-static-import-fixes
9c92a818e3 is described below

commit 9c92a818e3cda94e6a8a37c529a4c14886ec20b8
Author: Michael Bien <[email protected]>
AuthorDate: Wed Jan 3 01:56:16 2024 +0100

    Make NetBeans aware of the StringTemplate.STR default field import.
    
     - auto import after paste should not import STR
     - organize imports and fix imports should not import STR
     - java.lang imports removal hint should suggest removal of
       'import static java.lang.StringTemplate.STR' too
     - handling of StringTemplate.RAW should remain unchanged since
       it is not a default import
---
 .../java/editor/imports/ClipboardHandler.java      |  4 +++
 .../java/editor/imports/ComputeImports.java        |  5 ----
 .../org/netbeans/modules/java/hints/Imports.java   | 24 +++++++++------
 .../modules/java/hints/Bundle_test.properties      |  3 ++
 .../netbeans/modules/java/hints/ImportsTest.java   | 35 ++++++++++++++++++++++
 .../api/java/source/GeneratorUtilities.java        |  8 +++--
 6 files changed, 63 insertions(+), 16 deletions(-)

diff --git 
a/java/java.editor/src/org/netbeans/modules/java/editor/imports/ClipboardHandler.java
 
b/java/java.editor/src/org/netbeans/modules/java/editor/imports/ClipboardHandler.java
index 8d94703306..de9d02c5df 100644
--- 
a/java/java.editor/src/org/netbeans/modules/java/editor/imports/ClipboardHandler.java
+++ 
b/java/java.editor/src/org/netbeans/modules/java/editor/imports/ClipboardHandler.java
@@ -252,6 +252,10 @@ public class ClipboardHandler {
                 SourcePositions[] sps = new SourcePositions[1];
 
                 OUTER: for (Entry<String, String> e : simple2FQNs.entrySet()) {
+                    // skip default static imports
+                    if ("java.lang.StringTemplate.STR".equals(e.getValue())) {
+                        continue;
+                    }
                     Element el = fqn2element(cc.getElements(), e.getValue());
                     if (el == null) {
                         continue;
diff --git 
a/java/java.editor/src/org/netbeans/modules/java/editor/imports/ComputeImports.java
 
b/java/java.editor/src/org/netbeans/modules/java/editor/imports/ComputeImports.java
index ab5d17201b..91ca3295b0 100644
--- 
a/java/java.editor/src/org/netbeans/modules/java/editor/imports/ComputeImports.java
+++ 
b/java/java.editor/src/org/netbeans/modules/java/editor/imports/ComputeImports.java
@@ -37,7 +37,6 @@ import com.sun.source.tree.VariableTree;
 import com.sun.source.util.TreePath;
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.EnumSet;
 import java.util.HashMap;
@@ -59,7 +58,6 @@ import javax.lang.model.element.Modifier;
 import javax.lang.model.element.ModuleElement;
 import javax.lang.model.element.PackageElement;
 import javax.lang.model.element.TypeElement;
-import javax.lang.model.element.VariableElement;
 import javax.lang.model.type.ArrayType;
 import javax.lang.model.type.DeclaredType;
 import javax.lang.model.type.ExecutableType;
@@ -70,7 +68,6 @@ import javax.lang.model.util.Types;
 import org.netbeans.api.annotations.common.NonNull;
 import org.netbeans.api.annotations.common.NullAllowed;
 import org.netbeans.api.editor.mimelookup.MimeLookup;
-import org.netbeans.api.java.classpath.ClassPath;
 import org.netbeans.api.java.lexer.JavaTokenId;
 import org.netbeans.api.java.source.ClassIndex;
 import org.netbeans.api.java.source.CompilationInfo;
@@ -86,8 +83,6 @@ import org.netbeans.api.java.source.Task;
 import org.netbeans.api.java.source.support.CancellableTreePathScanner;
 import org.netbeans.modules.java.completion.Utilities;
 import org.netbeans.modules.java.editor.base.javadoc.JavadocImports;
-import org.netbeans.modules.parsing.api.ResultIterator;
-import org.netbeans.modules.parsing.api.UserTask;
 import org.netbeans.spi.java.classpath.support.ClassPathSupport;
 import org.openide.util.Exceptions;
 import org.openide.util.Union2;
diff --git a/java/java.hints/src/org/netbeans/modules/java/hints/Imports.java 
b/java/java.hints/src/org/netbeans/modules/java/hints/Imports.java
index 8437f450ce..8946acf529 100644
--- a/java/java.hints/src/org/netbeans/modules/java/hints/Imports.java
+++ b/java/java.hints/src/org/netbeans/modules/java/hints/Imports.java
@@ -53,7 +53,6 @@ import org.openide.util.NbBundle;
 public class Imports {
   
     private static final String DEFAULT_PACKAGE = "java.lang"; // NOI18N
-    private String IMPORTS_ID = "Imports_"; // NOI18N
     
 
     @Hint(displayName = "#DN_Imports_STAR", description = 
"#DESC_Imports_STAR", category="imports", id="Imports_STAR", enabled=false, 
options=Options.QUERY, suppressWarnings={"", "OnDemandImport"})
@@ -114,11 +113,11 @@ public class Imports {
         if (violatingImports.size() > 1) {
             allFix = new ImportsFix(violatingImports, kind).toEditorFix();
         }
-        List<ErrorDescription> result = new 
ArrayList<ErrorDescription>(violatingImports.size());
+        List<ErrorDescription> result = new 
ArrayList<>(violatingImports.size());
         for (TreePathHandle it : violatingImports) {
             TreePath resolvedIt = it.resolve(ctx.getInfo());
             if (resolvedIt == null) continue; //#204580
-            List<Fix> fixes = new ArrayList<Fix>();
+            List<Fix> fixes = new ArrayList<>();
             fixes.add(new ImportsFix(Collections.singletonList(it), 
kind).toEditorFix());
             if (allFix != null) {
                 fixes.add(allFix);
@@ -155,20 +154,26 @@ public class Imports {
 
         CompilationUnitTree cut = ci.getCompilationUnit();
         TreePath topLevel = new TreePath(cut);
-        List<TreePathHandle> result = new ArrayList<TreePathHandle>(3);
+        List<TreePathHandle> result = new ArrayList<>(3);
 
         List<? extends ImportTree> imports = cut.getImports();
         for (ImportTree it : imports) {
-            if (it.isStatic()) {
-                continue; // XXX
-            }
             if (it.getQualifiedIdentifier() instanceof MemberSelectTree) {
                 MemberSelectTree ms = (MemberSelectTree) 
it.getQualifiedIdentifier();
                 if (kind == ImportHintKind.DEFAULT_PACKAGE) {
-                    if (ms.getExpression().toString().equals(DEFAULT_PACKAGE)) 
{
-                        result.add(TreePathHandle.create(new 
TreePath(topLevel, it), ci));
+                    if (it.isStatic()) {
+                        if 
(ms.getExpression().toString().equals("java.lang.StringTemplate") && 
ms.getIdentifier().toString().equals("STR")) {
+                            result.add(TreePathHandle.create(new 
TreePath(topLevel, it), ci));
+                        }
+                    } else {
+                        if 
((ms.getExpression().toString().equals(DEFAULT_PACKAGE))) {
+                            result.add(TreePathHandle.create(new 
TreePath(topLevel, it), ci));
+                        }
                     }
                 }
+                if (it.isStatic()) {
+                    continue; // XXX
+                }
                 if (kind == ImportHintKind.SAME_PACKAGE) {
                     ExpressionTree packageName = cut.getPackageName();
                     if (packageName != null &&
@@ -219,6 +224,7 @@ public class Imports {
             this.ihk = ihk;
         }
         
+        @Override
         public String getText() {
             if ( tphList.size() == 1 ) {
                 return NbBundle.getMessage(Imports.class, 
"LBL_Imports_Fix_One_" + ihk.toString()); // NOI18N
diff --git 
a/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/Bundle_test.properties
 
b/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/Bundle_test.properties
index 0f0c7869ee..7a62d950ac 100644
--- 
a/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/Bundle_test.properties
+++ 
b/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/Bundle_test.properties
@@ -93,6 +93,9 @@ 
FIX_WrongStringComparison_ReverseOperands=[WrongStringComparisonFix:Use equals()
 DN_Imports_UNUSED=DN_Imports_UNUSED
 LBL_Imports_Fix_One_UNUSED=LBL_Imports_Fix_One_UNUSED
 
+DN_Imports_DEFAULT_PACKAGE=DN_Imports_DEFAULT_PACKAGE
+LBL_Imports_Fix_All_DEFAULT_PACKAGE=LBL_Imports_Fix_All_DEFAULT_PACKAGE
+
 MSG_GenEquals=MSG_GenEquals
 MSG_GenHashCode=MSG_GenHashCode
 
diff --git 
a/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/ImportsTest.java
 
b/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/ImportsTest.java
index e8c266bf84..3957dc7f5b 100644
--- 
a/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/ImportsTest.java
+++ 
b/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/ImportsTest.java
@@ -18,9 +18,12 @@
  */
 package org.netbeans.modules.java.hints;
 
+import javax.lang.model.SourceVersion;
 import org.netbeans.junit.NbTestCase;
 import org.netbeans.modules.java.hints.test.api.HintTest;
 
+import static org.junit.Assume.assumeTrue;
+
 /**
  *
  * @author lahvac
@@ -56,4 +59,36 @@ public class ImportsTest extends NbTestCase {
                               "    }\n" +
                               "}");
     }
+
+    public void testRedundantLangImportRemove() throws Exception {
+        assumeTrue(Runtime.version().feature() >= 21); // API dependency
+        HintTest.create()
+                .sourceLevel(SourceVersion.latest().name())
+                .options("--enable-preview")
+                .input(
+                    "package test;\n" +
+                    "import java.lang.System;\n" +
+                    "import static java.lang.StringTemplate.STR;\n" +
+                    "import static java.lang.StringTemplate.RAW;\n" +
+                    "public class Test {\n" +
+                    "    public static void main(String[] args) {\n" +
+                    "        System.out.println(STR.\"hello world\");\n" +
+                    "        System.out.println(RAW.\"hello world\");" +
+                    "    }\n" +
+                    "}")
+                .run(Imports.class)
+                
.assertWarnings("1:0-1:24:verifier:DN_Imports_DEFAULT_PACKAGE", 
"2:0-2:43:verifier:DN_Imports_DEFAULT_PACKAGE")
+                .findWarning("1:0-1:24:verifier:DN_Imports_DEFAULT_PACKAGE")
+                .applyFix("LBL_Imports_Fix_All_DEFAULT_PACKAGE")
+                .assertCompilable()
+                .assertOutput(
+                    "package test;\n" +
+                    "import static java.lang.StringTemplate.RAW;\n" +
+                    "public class Test {\n" +
+                    "    public static void main(String[] args) {\n" +
+                    "        System.out.println(STR.\"hello world\");\n" +
+                    "        System.out.println(RAW.\"hello world\");" +
+                    "    }\n" +
+                    "}");
+    }
 }
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 9ad8712542..02ecc97368 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
@@ -1101,8 +1101,12 @@ public final class GeneratorUtilities {
                 case METHOD:
                 case ENUM_CONSTANT:
                 case FIELD:
-                    StringBuilder name = new 
StringBuilder(((TypeElement)e.getEnclosingElement()).getQualifiedName()).append('.').append(e.getSimpleName());
-                    if (!staticImportNames.add(name.toString()))
+                    String name = new 
StringBuilder(((TypeElement)e.getEnclosingElement()).getQualifiedName()).append('.').append(e.getSimpleName()).toString();
+                    // skip default static imports
+                    if ("java.lang.StringTemplate.STR".equals(name)) {
+                        break;
+                    }
+                    if (!staticImportNames.add(name))
                         break;
                 default:
                     elementsToImport.add(e);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists

Reply via email to