PsiType (PsiType substituted, @NotNull PsiType original) { if (substituted != null) { return substituted; } return original.accept(new PsiTypeVisitor<PsiType>() { @Override public PsiType visitArrayType(@NotNull PsiArrayType arrayType) { return new PsiArrayType(arrayType.getComponentType().accept(this)); } @Override public PsiType visitEllipsisType(@NotNull PsiEllipsisType ellipsisType) { return new PsiEllipsisType(ellipsisType.getComponentType().accept(this)); } @Override public PsiType visitClassType(@NotNull PsiClassType classType) { PsiClass aClass = classType.resolve(); if (aClass == null) { return classType; } if (aClass instanceof PsiTypeParameter) { return rawTypeForTypeParameter((PsiTypeParameter)aClass); } return JavaPsiFacade.getElementFactory(aClass.getProject()).createType(aClass); } }); }