mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
multiple jdks/not exported dependencies: check that declared type of the qualifier doesn't contain unknown types
This commit is contained in:
+11
-2
@@ -1336,14 +1336,23 @@ public class GenericsHighlightUtil {
|
||||
}
|
||||
|
||||
public static HighlightInfo areSupersAccessible(@NotNull PsiClass aClass) {
|
||||
return areSupersAccessible(aClass, aClass.getResolveScope(), HighlightNamesUtil.getClassDeclarationTextRange(aClass));
|
||||
}
|
||||
|
||||
public static HighlightInfo areSupersAccessible(@NotNull PsiClass aClass, PsiElement ref) {
|
||||
return areSupersAccessible(aClass, ref.getResolveScope(), ref.getTextRange());
|
||||
}
|
||||
|
||||
private static HighlightInfo areSupersAccessible(@NotNull PsiClass aClass,
|
||||
GlobalSearchScope resolveScope,
|
||||
TextRange range) {
|
||||
final JavaPsiFacade factory = JavaPsiFacade.getInstance(aClass.getProject());
|
||||
final GlobalSearchScope resolveScope = aClass.getResolveScope();
|
||||
for (PsiClassType superType : aClass.getSuperTypes()) {
|
||||
final String notAccessibleErrorMessage = isSuperTypeAccessible(superType, new HashSet<PsiClass>(), resolveScope, factory);
|
||||
if (notAccessibleErrorMessage != null) {
|
||||
return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR)
|
||||
.descriptionAndTooltip(notAccessibleErrorMessage)
|
||||
.range(HighlightNamesUtil.getClassDeclarationTextRange(aClass))
|
||||
.range(range)
|
||||
.create();
|
||||
}
|
||||
}
|
||||
|
||||
+8
-1
@@ -1221,7 +1221,14 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh
|
||||
}
|
||||
if (!myHolder.hasErrorResults()) myHolder.add(GenericsHighlightUtil.checkAccessStaticFieldFromEnumConstructor(expression, result));
|
||||
if (!myHolder.hasErrorResults()) myHolder.add(HighlightUtil.checkClassReferenceAfterQualifier(expression, resolved));
|
||||
myHolder.add(HighlightUtil.checkUnqualifiedSuperInDefaultMethod(myLanguageLevel, expression, expression.getQualifierExpression()));
|
||||
final PsiExpression qualifierExpression = expression.getQualifierExpression();
|
||||
myHolder.add(HighlightUtil.checkUnqualifiedSuperInDefaultMethod(myLanguageLevel, expression, qualifierExpression));
|
||||
if (!myHolder.hasErrorResults() && qualifierExpression != null) {
|
||||
final PsiClass psiClass = PsiUtil.resolveClassInType(qualifierExpression.getType());
|
||||
if (psiClass != null) {
|
||||
myHolder.add(GenericsHighlightUtil.areSupersAccessible(psiClass, qualifierExpression));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
package p;
|
||||
abstract class B {
|
||||
void f(A a) {
|
||||
<error descr="Cannot access java.util.stream.Stream">a</error>.foo();
|
||||
}
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
package p;
|
||||
import java.util.stream.Stream;
|
||||
import java.util.List;
|
||||
|
||||
public abstract class A implements List<Stream<String>> {
|
||||
public void foo() {}
|
||||
}
|
||||
@@ -117,6 +117,10 @@ public class MultipleJdksHighlightingTest extends UsefulTestCase {
|
||||
public void testSuperclassImplementsUnknownType() throws Exception {
|
||||
doTestWithoutLibrary();
|
||||
}
|
||||
|
||||
public void testDeclaredTypeOfVariableImplementsUnknownType() throws Exception {
|
||||
doTestWithoutLibrary();
|
||||
}
|
||||
|
||||
public void testSuperclassImplementsGenericsOfUnknownType() throws Exception {
|
||||
doTestWithoutLibrary();
|
||||
|
||||
Reference in New Issue
Block a user