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 5b55a370fb Fix: Java completion parameter tooltip is not shown if
previous parameter is type variable
new 1a29d61d4c Merge pull request #6268 from
matthiasblaesing/parameter_tooltip
5b55a370fb is described below
commit 5b55a370fb1c2dc79c9af614e0c7a2629f182b86
Author: Matthias Bläsing <[email protected]>
AuthorDate: Fri Jul 28 22:46:41 2023 +0200
Fix: Java completion parameter tooltip is not shown if previous parameter
is type variable
Testsetup:
public class TestParamResolution {
public static void main(String[] args) {
List.of("Hallo", "World");
testMethod("Hello", "World", "Test");
testMethod(1, "Hello", "World");
}
public static <S extends String & Comparable<String> & Serializable>
void testMethod(S genericParam, String dummy1_1, String dummy1_2) {}
public static <S extends Integer> void testMethod(S genericParam,
String dummy2_1, String dummy2_2) {}
public static <T extends Integer & Externalizable> void
testArgumentTypeVariableParameter(T genericParam, List<? super String> x) {
testMethod(genericParam, "x", "dfd");
}
}
Inside main the problem can be demonstrated with all demonstrated
calls. When the caret is placed in the first argument (before first
comma), the parameter popup (CTRL+P) can be opened for all case. If the
caret is placed in the second argument (after first comma), it does not
work anymore.
Investigation shows that javax.lang.model.util.Types#isAssignable
returns false if the target type is a TypeVariable. To fix this the
upper bound of the TypeMirror is unwrapped and the check is repeated.
This also works if the argument is a TypeVariable itself.
With this fix applied all places (main and
testArgumentTypeVariableParameter) allow to invoke the parameter popup.
---
.../netbeans/modules/java/completion/JavaTooltipTask.java | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git
a/java/java.completion/src/org/netbeans/modules/java/completion/JavaTooltipTask.java
b/java/java.completion/src/org/netbeans/modules/java/completion/JavaTooltipTask.java
index 81a9308ced..10149c3d09 100644
---
a/java/java.completion/src/org/netbeans/modules/java/completion/JavaTooltipTask.java
+++
b/java/java.completion/src/org/netbeans/modules/java/completion/JavaTooltipTask.java
@@ -275,7 +275,7 @@ public final class JavaTooltipTask extends BaseTask {
ret.add(paramStrings);
break;
}
- if (argTypes[i] == null || argTypes[i].getKind() !=
TypeKind.ERROR && !types.isAssignable(argTypes[i], param)) {
+ if (argTypes[i] == null || argTypes[i].getKind() !=
TypeKind.ERROR && !isAssignable(types, argTypes[i], param)) {
break;
}
}
@@ -284,4 +284,14 @@ public final class JavaTooltipTask extends BaseTask {
}
return ret.isEmpty() ? null : ret;
}
+
+ private static boolean isAssignable(Types types, TypeMirror arg,
TypeMirror parameter) {
+ if(types.isAssignable(arg, parameter)) {
+ return true;
+ } else if (parameter instanceof TypeVariable) {
+ TypeMirror requiredTypes = ((TypeVariable)
parameter).getUpperBound();
+ return types.isAssignable(arg, requiredTypes);
+ }
+ return false;
+ }
}
---------------------------------------------------------------------
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