PsiSubstitutor (Project project, PsiElement context, PsiClass targetClass) { if (context == null || targetClass == null) return PsiSubstitutor.EMPTY; PsiTypeParameterListOwner currContext = PsiTreeUtil.getParentOfType(context, PsiTypeParameterListOwner.class); PsiManager manager = context.getManager(); PsiSubstitutor substitutor = PsiSubstitutor.EMPTY; while (currContext != null && !manager.areElementsEquivalent(currContext, targetClass)) { PsiTypeParameter[] typeParameters = currContext.getTypeParameters(); substitutor = JavaPsiFacade.getElementFactory(project).createRawSubstitutor(substitutor, typeParameters); currContext = currContext.getContainingClass(); } return substitutor; }