I’m creating a PsiReferenceContributor
to reference annotated parameters (@Param
) in methods/functions for Java and Kotlin languages.
My difficulty is in how to create the ElementPattern
. I tried these ways, but it doesn’t call the getReferencesByElement
method, neither for PsiMethod
nor for PsiParameter
.
I couldn’t identify what I’m doing wrong.
Could someone help me filter and reference the parameters?
<psi.referenceContributor language="UAST" implementation="dev.eltonsandre.reference.ParamsReferenceContributor"/>
public class ParamsReferenceContributor extends PsiReferenceContributor {
public void registerReferenceProviders(@NotNull final PsiReferenceRegistrar registrar) {
UastReferenceRegistrar.registerUastReferenceProvider(registrar, UastPatterns.uMethod(), new UParamReferenceProvider(), 0);
registrar.registerReferenceProvider(PlatformPatterns.psiElement(PsiMethod.class), new PathVariablePsiReferenceProvider());
}
}
private static class UParamReferenceProvider extends UastReferenceProvider {
@NotNull
@Override
public PsiReference[] getReferencesByElement(@NotNull final UElement uElement, @NotNull final ProcessingContext processingContext) {
if (uElement instanceof UComment)
return PsiReference.EMPTY_ARRAY;
return getReferencesParam(uElement);
}
}
private static class PsiParamReferenceProvider extends PsiReferenceProvider {
@NotNull
@Override
public PsiReference[] getReferencesByElement(@NotNull final PsiElement element, @NotNull final ProcessingContext context) {
if (uElement instanceof UComment)
return PsiReference.EMPTY_ARRAY;
return getReferencesParam(element);
}
//...