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

matthiasblaesing 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 b2dbf811bd [3803]Fixing printing of type names for captured types with 
type variables.
     new a6433d1de9 Merge pull request #3877 from jlahoda/3803
b2dbf811bd is described below

commit b2dbf811bd78ddbfbcab2f6cec595917e50dcb43
Author: Jan Lahoda <jlah...@netbeans.org>
AuthorDate: Sun Mar 27 13:41:50 2022 +0200

    [3803]Fixing printing of type names for captured types with type variables.
---
 .../netbeans/modules/editor/java/AutoImport.java   |  2 --
 .../editor/java/JavaCodeTemplateProcessorTest.java | 22 ++++++++++++++++++++++
 .../netbeans/api/java/source/TypeUtilities.java    |  2 --
 .../api/java/source/TypeUtilitiesTest.java         | 13 ++++++++++++-
 4 files changed, 34 insertions(+), 5 deletions(-)

diff --git 
a/java/java.editor/src/org/netbeans/modules/editor/java/AutoImport.java 
b/java/java.editor/src/org/netbeans/modules/editor/java/AutoImport.java
index e365ded940..07dd17bd49 100644
--- a/java/java.editor/src/org/netbeans/modules/editor/java/AutoImport.java
+++ b/java/java.editor/src/org/netbeans/modules/editor/java/AutoImport.java
@@ -144,8 +144,6 @@ public class AutoImport extends SimpleTypeVisitor6<Void, 
Void> {
             bound = type.getUpperBound();
             if (bound != null && bound.getKind() != TypeKind.NULL) {
                 builder.append(" extends "); //NOI18N
-                if (bound.getKind() == TypeKind.TYPEVAR)
-                    bound = ((TypeVariable)bound).getLowerBound();
                 visit(bound);
             }
         }
diff --git 
a/java/java.editor/test/unit/src/org/netbeans/modules/editor/java/JavaCodeTemplateProcessorTest.java
 
b/java/java.editor/test/unit/src/org/netbeans/modules/editor/java/JavaCodeTemplateProcessorTest.java
index e4843ca98b..4313b46eb9 100644
--- 
a/java/java.editor/test/unit/src/org/netbeans/modules/editor/java/JavaCodeTemplateProcessorTest.java
+++ 
b/java/java.editor/test/unit/src/org/netbeans/modules/editor/java/JavaCodeTemplateProcessorTest.java
@@ -203,6 +203,28 @@ public class JavaCodeTemplateProcessorTest extends 
NbTestCase {
                              "}");
     }
 
+    public void testInfiteLoop() throws Exception {
+         doTestTemplateInsert("for (${IT_TYPE rightSideType 
type=\"java.util.Iterator\" default=\"Iterator\" editable=false} ${IT 
newVarName default=\"it\"} = ${COL instanceof=\"java.util.Collection\" 
default=\"col\"}.iterator(); ${IT}.hasNext();) {\n" +
+                              "    ${TYPE rightSideType default=\"Object\"} 
${ELEM newVarName default=\"elem\"} = ${TYPE_CAST cast default=\"\" 
editable=false}${IT}.next();\n" +
+                              "    ${selection}${cursor}\n" +
+                              "}\n",
+                             "import java.util.Collection;\n" +
+                             "public class Test<E> {\n" +
+                             "    private void t(Collection<? extends E> c) 
{\n" +
+                             "        |\n" +
+                             "    }\n" +
+                             "}",
+                             "import java.util.Collection;\n" +
+                             "public class Test<E> {\n" +
+                             "    private void t(Collection<? extends E> c) 
{\n" +
+                             "        for (Iterator<? extends E> iterator| = 
c.iterator(); iterator.hasNext();) {\n" +
+                             "            E next = iterator.next();\n" +
+                             "            \n" +
+                             "        }\n" +
+                             "    }\n" +
+                             "}");
+    }
+
     private void assertFileObjectTextMatchesRegex(String regex) throws 
IOException {
         String text = testFile.asText();
         assertTrue("The file text must match the regular expression", 
text.matches(regex));
diff --git 
a/java/java.source.base/src/org/netbeans/api/java/source/TypeUtilities.java 
b/java/java.source.base/src/org/netbeans/api/java/source/TypeUtilities.java
index a2b892adf5..0c8071efca 100644
--- a/java/java.source.base/src/org/netbeans/api/java/source/TypeUtilities.java
+++ b/java/java.source.base/src/org/netbeans/api/java/source/TypeUtilities.java
@@ -424,8 +424,6 @@ public final class TypeUtilities {
                     bound = t.getUpperBound();
                     if (bound != null && bound.getKind() != TypeKind.NULL) {
                         DEFAULT_VALUE.append(" extends "); //NOI18N
-                        if (bound.getKind() == TypeKind.TYPEVAR)
-                            bound = ((TypeVariable)bound).getLowerBound();
                         visit(bound, p);
                     }
                 }
diff --git 
a/java/java.source.base/test/unit/src/org/netbeans/api/java/source/TypeUtilitiesTest.java
 
b/java/java.source.base/test/unit/src/org/netbeans/api/java/source/TypeUtilitiesTest.java
index 2aa1900f82..fcf99f71c0 100644
--- 
a/java/java.source.base/test/unit/src/org/netbeans/api/java/source/TypeUtilitiesTest.java
+++ 
b/java/java.source.base/test/unit/src/org/netbeans/api/java/source/TypeUtilitiesTest.java
@@ -24,6 +24,7 @@ import com.sun.source.tree.ExpressionStatementTree;
 import com.sun.source.tree.ExpressionTree;
 import com.sun.source.tree.MemberSelectTree;
 import com.sun.source.tree.MethodInvocationTree;
+import com.sun.source.tree.MethodTree;
 import java.io.File;
 import java.io.IOException;
 import java.net.URL;
@@ -131,7 +132,7 @@ public class TypeUtilitiesTest extends NbTestCase {
     public void testTypeName() throws Exception {
         FileObject root = FileUtil.createMemoryFileSystem().getRoot();
         FileObject src  = root.createData("Test.java");
-        TestUtilities.copyStringToFile(src, "package test; public class Test { 
{ get().run(); } private <Z extends Exception&Runnable> Z get() { return null; 
} }");
+        TestUtilities.copyStringToFile(src, "package test; public class Test { 
{ get().run(); } private <Z extends Exception&Runnable> Z get() { return null; 
} } class C<E> { C<? extends E> get() { get(); }");
         JavaSource js = 
JavaSource.create(ClasspathInfo.create(ClassPathSupport.createClassPath(SourceUtilsTestUtil.getBootClassPath().toArray(new
 URL[0])), ClassPathSupport.createClassPath(new URL[0]), 
ClassPathSupport.createClassPath(new URL[0])), src);
         
         js.runUserActionTask(new Task<CompilationController>() {
@@ -142,12 +143,22 @@ public class TypeUtilitiesTest extends NbTestCase {
                 assertEquals("List<String>[]", 
info.getTypeUtilities().getTypeName(info.getTreeUtilities().parseType("java.util.List<java.lang.String>[]",
 context)));
                 assertEquals("java.util.List<java.lang.String>...", 
info.getTypeUtilities().getTypeName(info.getTreeUtilities().parseType("java.util.List<java.lang.String>[]",
 context), TypeUtilities.TypeNameOptions.PRINT_FQN, 
TypeUtilities.TypeNameOptions.PRINT_AS_VARARG));
                 assertEquals("List<String>...", 
info.getTypeUtilities().getTypeName(info.getTreeUtilities().parseType("java.util.List<java.lang.String>[]",
 context), TypeUtilities.TypeNameOptions.PRINT_AS_VARARG));
+                {
                 ClassTree clazz = (ClassTree) 
info.getCompilationUnit().getTypeDecls().get(0);
                 BlockTree init = (BlockTree) clazz.getMembers().get(1);
                 ExpressionStatementTree var = (ExpressionStatementTree) 
init.getStatements().get(0);
                 ExpressionTree getInvocation = ((MemberSelectTree) 
((MethodInvocationTree) var.getExpression()).getMethodSelect()).getExpression();
                 TypeMirror intersectionType = 
info.getTrees().getTypeMirror(info.getTrees().getPath(info.getCompilationUnit(),
 getInvocation));
                 assertEquals("Exception & Runnable", 
info.getTypeUtilities().getTypeName(intersectionType));
+                }
+                {
+                ClassTree clazz = (ClassTree) 
info.getCompilationUnit().getTypeDecls().get(1);
+                MethodTree mt = (MethodTree) clazz.getMembers().get(1);
+                ExpressionStatementTree var = (ExpressionStatementTree) 
mt.getBody().getStatements().get(0);
+                ExpressionTree getInvocation = var.getExpression();
+                TypeMirror captureType = 
info.getTrees().getTypeMirror(info.getTrees().getPath(info.getCompilationUnit(),
 getInvocation));
+                assertEquals("C<? extends E>", 
info.getTypeUtilities().getTypeName(captureType));
+                }
             }
         }, true);
         


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@netbeans.apache.org
For additional commands, e-mail: commits-h...@netbeans.apache.org

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

Reply via email to