void (@NotNull PsiReferenceRegistrar registrar) { registrar.registerReferenceProvider(Holder.PATTERN, new JavaReflectionReferenceProvider() { @Override protected PsiReference @Nullable [] getReferencesByMethod(@NotNull PsiLiteralExpression literalArgument, @NotNull PsiReferenceExpression methodReference, @NotNull ProcessingContext context) { final PsiExpression qualifier = methodReference.getQualifierExpression(); return qualifier != null ? new PsiReference[]{new JavaLangClassMemberReference(literalArgument, qualifier)} : null; } }); registrar.registerReferenceProvider(Holder.CLASS_PATTERN, new ReflectionClassNameReferenceProvider()); registrar.registerReferenceProvider(Holder.METHOD_HANDLE_PATTERN, new JavaLangInvokeHandleReference.JavaLangInvokeHandleReferenceProvider()); JavaReflectionReferenceProvider atomicProvider = new JavaReflectionReferenceProvider() { @Override protected PsiReference[] getReferencesByMethod(@NotNull PsiLiteralExpression literalArgument, @NotNull PsiReferenceExpression methodReference, @NotNull ProcessingContext context) { PsiElement parent = literalArgument.getParent(); if (parent instanceof PsiExpressionList) { PsiExpression[] arguments = ((PsiExpressionList)parent).getExpressions(); return new PsiReference[]{new JavaLangClassMemberReference(literalArgument, arguments[0])}; } return PsiReference.EMPTY_ARRAY; } }; registrar.registerReferenceProvider(Holder.ATOMIC_NUMERIC_PATTERN, atomicProvider); registrar.registerReferenceProvider(Holder.ATOMIC_REFERENCE_PATTERN, atomicProvider); }