mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-94908: forbid to select raw type from parameterized parent
This commit is contained in:
+23
@@ -1395,5 +1395,28 @@ public class GenericsHighlightUtil {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.8
|
||||
*/
|
||||
@Nullable
|
||||
public static HighlightInfo checkRawOnParameterizedType(PsiReferenceParameterList list) {
|
||||
if (list.getTypeArguments().length > 0) return null;
|
||||
final PsiElement parent = list.getParent();
|
||||
if (parent instanceof PsiJavaCodeReferenceElement) {
|
||||
final PsiElement qualifier = ((PsiJavaCodeReferenceElement)parent).getQualifier();
|
||||
if (qualifier instanceof PsiJavaCodeReferenceElement) {
|
||||
if (((PsiJavaCodeReferenceElement)qualifier).getTypeParameters().length > 0) {
|
||||
final PsiElement resolve = ((PsiJavaCodeReferenceElement)parent).resolve();
|
||||
if (resolve instanceof PsiTypeParameterListOwner
|
||||
&& ((PsiTypeParameterListOwner)resolve).hasTypeParameters()
|
||||
&& !((PsiTypeParameterListOwner)resolve).hasModifierProperty(PsiModifier.STATIC)) {
|
||||
return HighlightInfo.createHighlightInfo(HighlightInfoType.ERROR, parent, "Improper formed type; some type parameters are missing");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
@@ -1014,6 +1014,7 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh
|
||||
public void visitReferenceParameterList(PsiReferenceParameterList list) {
|
||||
myHolder.add(GenericsHighlightUtil.checkParametersAllowed(list));
|
||||
if (!myHolder.hasErrorResults()) myHolder.add(GenericsHighlightUtil.checkParametersOnRaw(list));
|
||||
if (!myHolder.hasErrorResults()) myHolder.add(GenericsHighlightUtil.checkRawOnParameterizedType(list));
|
||||
}
|
||||
|
||||
@Override public void visitReturnStatement(PsiReturnStatement statement) {
|
||||
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
class GenericOuter<T> {
|
||||
public class GenericInner<U> {
|
||||
}
|
||||
|
||||
public static class StaticGenericInner<U> {
|
||||
}
|
||||
|
||||
public class SimpleInner {
|
||||
}
|
||||
}
|
||||
|
||||
class OuterClient {
|
||||
public void context() {
|
||||
<error descr="Improper formed type; some type parameters are missing">GenericOuter<String>.GenericInner</error> v1 = null;
|
||||
GenericOuter.GenericInner<error descr="Type arguments given on a raw type"><String></error> v2 = null;
|
||||
GenericOuter.GenericInner v3 = null;
|
||||
GenericOuter<String>.GenericInner<String> v4 = null;
|
||||
|
||||
GenericOuter<error descr="Cannot select static class 'GenericOuter.StaticGenericInner' from parameterized type"><String></error>.StaticGenericInner sv1 = null;
|
||||
GenericOuter.StaticGenericInner<String> sv2 = null;
|
||||
GenericOuter.StaticGenericInner sv3 = null;
|
||||
GenericOuter<error descr="Cannot select static class 'GenericOuter.StaticGenericInner' from parameterized type"><String></error>.StaticGenericInner<String> sv4 = null;
|
||||
|
||||
GenericOuter<String>.SimpleInner iv1 = null;
|
||||
GenericOuter.SimpleInner<error descr="Type arguments given on a raw type"><String></error> iv2 = null;
|
||||
GenericOuter.SimpleInner iv3 = null;
|
||||
GenericOuter<String>.SimpleInner<error descr="Type 'GenericOuter.SimpleInner' does not have type parameters"><String></error> iv4 = null;
|
||||
}
|
||||
}
|
||||
@@ -194,6 +194,7 @@ public class GenericsHighlightingTest extends LightDaemonAnalyzerTestCase {
|
||||
public void testDifferentTypeParamsInOverloadedMethods() throws Exception { doTest(true); }
|
||||
public void testIDEA91626() throws Exception { doTest(true); }
|
||||
public void testIDEA92022() throws Exception { doTest(false); }
|
||||
public void testRawOnParameterized() throws Exception { doTest(false); }
|
||||
|
||||
public void testJavaUtilCollections_NoVerify() throws Exception {
|
||||
PsiClass collectionsClass = getJavaFacade().findClass("java.util.Collections", GlobalSearchScope.moduleWithLibrariesScope(getModule()));
|
||||
|
||||
Reference in New Issue
Block a user