PsiClassType (PsiElement member, final String superTypeFQN) { if (member instanceof PsiMember) { final PsiType type = PropertyUtilBase.getPropertyType((PsiMember)member); if (type instanceof PsiClassType) { final PsiClassType.ClassResolveResult resolveResult = ((PsiClassType)type).resolveGenerics(); final PsiClass attributeClass = resolveResult.getElement(); if (attributeClass != null) { final PsiClass objectProperty = JavaPsiFacade.getInstance(attributeClass.getProject()) .findClass(superTypeFQN, attributeClass.getResolveScope()); if (objectProperty != null) { final PsiSubstitutor superClassSubstitutor = TypeConversionUtil .getClassSubstitutor(objectProperty, attributeClass, resolveResult.getSubstitutor()); if (superClassSubstitutor != null) { final PsiType propertyType = superClassSubstitutor.substitute(objectProperty.getTypeParameters()[0]); if (propertyType instanceof PsiClassType) { return (PsiClassType)propertyType; } } else { return (PsiClassType)type; } } } } } return null; }