mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-13 21:55:01 +07:00
capture wildcard for getClass calls
This commit is contained in:
+2
-1
@@ -200,8 +200,9 @@ public class PsiMethodCallExpressionImpl extends ExpressionPsiElement implements
|
||||
Map<PsiTypeParameter, PsiType> map = new HashMap<PsiTypeParameter, PsiType>();
|
||||
map.put(javaLangClass.getTypeParameters()[0], PsiWildcardType.createExtends(manager, qualifierType));
|
||||
PsiSubstitutor substitutor = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory().createSubstitutor(map);
|
||||
return JavaPsiFacade.getInstance(manager.getProject()).getElementFactory()
|
||||
final PsiClassType classType = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory()
|
||||
.createType(javaLangClass, substitutor, languageLevel);
|
||||
return PsiUtil.captureToplevelWildcards(classType, methodExpression);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
import java.lang.reflect.*;
|
||||
|
||||
class Example {
|
||||
private void demo() {
|
||||
<error descr="Cannot resolve symbol 'TypeVariable'">TypeVariable</error><Class<? extends Example>>[] typeParameters = getClass().getTypeParameters();
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -60,8 +60,8 @@ abstract class C {
|
||||
try { g(); }
|
||||
catch (IE1 | IE2 e) {
|
||||
Class<? extends E> clazz1 = e.getClass();
|
||||
<error descr="Incompatible types. Found: 'java.lang.Class<? extends C.E>', required: 'java.lang.Class<? extends C.IE1>'">Class<? extends IE1> clazz2 = e.getClass();</error>
|
||||
<error descr="Incompatible types. Found: 'java.lang.Class<? extends C.E>', required: 'java.lang.Class<? extends C.I>'">Class<? extends I> clazz3 = e.getClass();</error>
|
||||
<error descr="Incompatible types. Found: 'java.lang.Class<capture<? extends C.E>>', required: 'java.lang.Class<? extends C.IE1>'">Class<? extends IE1> clazz2 = e.getClass();</error>
|
||||
<error descr="Incompatible types. Found: 'java.lang.Class<capture<? extends C.E>>', required: 'java.lang.Class<? extends C.I>'">Class<? extends I> clazz3 = e.getClass();</error>
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
@@ -304,5 +304,7 @@ public class LightAdvHighlightingJdk7Test extends LightDaemonAnalyzerTestCase {
|
||||
}
|
||||
|
||||
public void testIDEA84533() throws Exception { doTest(false, false); }
|
||||
|
||||
public void testClassLiteral() throws Exception { doTest(false, false);}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user