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