hide generified api warning when derived class is used which 'raw'-inherits the changed jdk class

This commit is contained in:
Anna Kozlova
2015-05-26 16:38:13 +02:00
parent ebd0433bb6
commit 07dba8b585
4 changed files with 34 additions and 1 deletions
@@ -269,7 +269,8 @@ public class Java15APIUsageInspectionBase extends BaseJavaBatchLocalInspectionTo
final PsiReferenceParameterList parameterList = reference.getParameterList();
if (parameterList != null && parameterList.getTypeParameterElements().length > 0) {
for (String generifiedClass : ourGenerifiedClasses) {
if (InheritanceUtil.isInheritor((PsiClass)resolved, generifiedClass)) {
if (InheritanceUtil.isInheritor((PsiClass)resolved, generifiedClass) &&
!isRawInheritance(generifiedClass, (PsiClass)resolved, new HashSet<PsiClass>())) {
String message = InspectionsBundle.message("inspection.1.7.problem.descriptor", getJdkName(languageLevel));
myHolder.registerProblem(reference, message);
break;
@@ -281,6 +282,22 @@ public class Java15APIUsageInspectionBase extends BaseJavaBatchLocalInspectionTo
}
}
private boolean isRawInheritance(String generifiedClassQName, PsiClass currentClass, Set<PsiClass> visited) {
for (PsiClassType classType : currentClass.getSuperTypes()) {
if (classType.isRaw()) {
return true;
}
final PsiClassType.ClassResolveResult resolveResult = classType.resolveGenerics();
final PsiClass superClass = resolveResult.getElement();
if (visited.add(superClass) && InheritanceUtil.isInheritor(superClass, generifiedClassQName)) {
if (isRawInheritance(generifiedClassQName, superClass, visited)) {
return true;
}
}
}
return false;
}
private boolean isIgnored(PsiClass psiClass) {
final String qualifiedName = psiClass.getQualifiedName();
return qualifiedName != null && ourIgnored16ClassesAPI.contains(qualifiedName);
@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<problems/>
@@ -0,0 +1,5 @@
class Test {
private AbstractCCM<String> myModel;
}
abstract class AbstractCCM<T> extends javax.swing.AbstractListModel {}
@@ -79,6 +79,15 @@ public class JavaAPIUsagesInspectionTest extends InspectionTestCase {
});
}
public void testRawInheritFromNewlyGenerified() throws Exception {
IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_1_6, new Runnable() {
@Override
public void run() {
doTest();
}
});
}
@Override
protected Sdk getTestProjectSdk() {
return IdeaTestUtil.getMockJdk18();