Java PSI - Getting actual type parameter of generic base class

Hi,

I'm trying my hand at writing some Java inspections.

In the sources that I want to analyze I have something like this:


    abstract class Base<T>

    class Derived extends Base<String>


In the inspection while visiting the Derived class I would like to get the type parameter of the parent as String.

I tried these lines, in vain.


    PsiClass derived = ... // Initialization code

    PsiClass base = derived.getSuperClass();

    String typeParameter = base.getTypeParameters()[0].getName(); // Gives T

    typeParameter = derived.getExtendsListTypes()[0].resolveGenerics()
                    .getElement().getTypeParameters()[0].getName(); // This too gives T

 

 

0
1 comment
Avatar
Permanently deleted user

After all, I managed to solve it like this:

 

PsiClass derived = ... // Initialization code

PsiClassType base = derived.getExtendsListTypes()[0];

Map<PsiTypeParameter, PsiType> map = base.resolveGenerics().getSubstitutor().getSubstitutionMap();

PsiType paramType = map.get(base.resolve().getTypeParameters()[0]).getName(); // This gives String

0

Please sign in to leave a comment.