java: type args on raw type: ignore method calls for java 7+ completely (IDEA-262803)

GitOrigin-RevId: 99292415f76a328617b7fcbb2516085e58be76d2
This commit is contained in:
Anna Kozlova
2021-02-23 21:35:18 +00:00
committed by intellij-monorepo-bot
parent 1dbf9d4dc4
commit 669059a88f
3 changed files with 6 additions and 8 deletions
@@ -1215,7 +1215,8 @@ public final class GenericsHighlightUtil {
return null;
}
static HighlightInfo checkParametersOnRaw(@NotNull PsiReferenceParameterList refParamList) {
static HighlightInfo checkParametersOnRaw(@NotNull PsiReferenceParameterList refParamList,
LanguageLevel languageLevel) {
JavaResolveResult resolveResult = null;
PsiElement parent = refParamList.getParent();
PsiElement qualifier = null;
@@ -1237,13 +1238,10 @@ public final class GenericsHighlightUtil {
if (qualifier instanceof PsiJavaCodeReferenceElement && ((PsiJavaCodeReferenceElement)qualifier).resolve() instanceof PsiTypeParameter) return null;
PsiClass containingClass = ((PsiMember)element).getContainingClass();
if (containingClass != null && PsiUtil.isRawSubstitutor(containingClass, resolveResult.getSubstitutor())) {
if ((parent instanceof PsiCallExpression || parent instanceof PsiMethodReferenceExpression) && PsiUtil.isLanguageLevel7OrHigher(parent)) {
return null;
}
if (element instanceof PsiMethod) {
if (languageLevel.isAtLeast(LanguageLevel.JDK_1_7)) return null;
if (((PsiMethod)element).findSuperMethods().length > 0) return null;
if (qualifier instanceof PsiReferenceExpression){
if (qualifier instanceof PsiReferenceExpression) {
final PsiType type = ((PsiReferenceExpression)qualifier).getType();
final boolean isJavac7 = JavaVersionService.getInstance().isAtLeast(containingClass, JavaSdkVersion.JDK_1_7);
if (type instanceof PsiClassType && isJavac7 && ((PsiClassType)type).isRaw()) return null;
@@ -1712,7 +1712,7 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh
myHolder.add(checkFeature(list, HighlightingFeature.GENERICS));
if (!myHolder.hasErrorResults()) myHolder.add(GenericsHighlightUtil.checkParametersAllowed(list));
if (!myHolder.hasErrorResults()) myHolder.add(GenericsHighlightUtil.checkParametersOnRaw(list));
if (!myHolder.hasErrorResults()) myHolder.add(GenericsHighlightUtil.checkParametersOnRaw(list, myLanguageLevel));
if (!myHolder.hasErrorResults()) {
for (PsiTypeElement typeElement : list.getTypeParameterElements()) {
if (typeElement.getType() instanceof PsiDiamondType) {
@@ -13,7 +13,7 @@ class GenericsTest {
public static void main(String[] args) {
String v1 = new SomeClass().<error descr="Type arguments given on a raw method"><String></error>getX();
<error descr="Incompatible types. Found: 'java.lang.Object', required: 'java.lang.String'">String v1 = new SomeClass().<String>getX();</error>
String v2 = new SomeClass().f(); //
}