detect type parameters in type arguments (IDEA-175309)

This commit is contained in:
Anna.Kozlova
2017-07-03 16:53:16 +02:00
parent 8bd81c1d4c
commit 5e10723b79
@@ -16,7 +16,7 @@
package com.intellij.refactoring.util.classMembers;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiUtil;
import com.intellij.psi.util.PsiTypesUtil;
/**
* @author dsl
@@ -61,11 +61,16 @@ public class ElementNeedsThis extends ClassThisReferencesVisitor {
@Override
public void visitReferenceExpression(PsiReferenceExpression expression) {
super.visitReferenceExpression(expression);
final PsiClass aClass = PsiUtil.resolveClassInType(expression.getType());
if (aClass instanceof PsiTypeParameter) {
final PsiTypeParameterListOwner owner = ((PsiTypeParameter)aClass).getOwner();
if (owner instanceof PsiClass && myClassSuperClasses.contains(owner)) {
myResult = true;
PsiType type = expression.getType();
if (type != null) {
PsiTypesUtil.TypeParameterSearcher searcher = new PsiTypesUtil.TypeParameterSearcher();
type.accept(searcher);
for (PsiTypeParameter parameter : searcher.getTypeParameters()) {
final PsiTypeParameterListOwner owner = parameter.getOwner();
if (owner instanceof PsiClass && myClassSuperClasses.contains(owner)) {
myResult = true;
break;
}
}
}
}