下面列出了怎么用com.intellij.psi.PsiReferenceRegistrar的API类实例代码及写法,或者点击链接到github查看源代码。
@Override
public void registerReferenceProviders(@NotNull PsiReferenceRegistrar registrar) {
PsiJavaElementPattern.Capture<PsiLiteralExpression> pattern = PsiJavaPatterns
.literalExpression()
.insideAnnotationParam(CamelIdeaUtils.BEAN_INJECT_ANNOTATION);
registrar.registerReferenceProvider(pattern, new CamelPsiReferenceProvider() {
@Override
protected PsiReference[] getCamelReferencesByElement(PsiElement element, ProcessingContext context) {
PsiNameValuePair param = PsiTreeUtil.getParentOfType(element, PsiNameValuePair.class);
if (param != null && param.getAttributeName().equals("value")) {
String value = param.getLiteralValue();
if (value != null) {
return new PsiReference[] {new BeanReference(element, value)};
}
}
return new PsiReference[0];
}
});
}
@Override
public void registerReferenceProviders(@NotNull PsiReferenceRegistrar registrar) {
registrar.registerReferenceProvider(
PlatformPatterns.psiElement(BuckIdentifier.class),
new PsiReferenceProvider() {
@NotNull
@Override
public PsiReference[] getReferencesByElement(
@NotNull PsiElement element, @NotNull ProcessingContext context) {
if (element instanceof BuckIdentifier) {
BuckIdentifier identifier = (BuckIdentifier) element;
return new PsiReference[] {new BuckIdentifierReference(identifier)};
} else {
return new PsiReference[0];
}
}
});
}
@Override
public void registerReferenceProviders(PsiReferenceRegistrar registrar) {
registrar.registerReferenceProvider(StandardPatterns.instanceOf(PhpPsiElement.class), new YiiPsiReferenceProvider());
registrar.registerReferenceProvider(
PlatformPatterns.psiElement(PsiElement.class).withParent(isParamListInMethodWithName(".+?widget\\(.+"))
, new WidgetCallReferenceProvider());
//View-to-view
registrar.registerReferenceProvider(
PlatformPatterns.psiElement(PhpPsiElement.class)
.withParent(isParamListInMethodWithName(".+?render(Partial)*\\(.+"))
.andNot(inFile(PlatformPatterns.string().endsWith("Controller.php")))
, new ViewRenderViewReferenceProvider());
//Controller-to-view
registrar.registerReferenceProvider(
PlatformPatterns.psiElement(PhpPsiElement.class)
.withParent(isParamListInMethodWithName("(?sim).+?render(Partial)*\\(.+"))
.and(inFile(PlatformPatterns.string().endsWith("Controller.php")))
, new ControllerRenderViewReferenceProvider());
}
@Override
public void registerReferenceProviders(@NotNull PsiReferenceRegistrar registrar) {
registrar.registerReferenceProvider(
PlatformPatterns.or(
instanceOf(IdentifierMixin.class),
instanceOf(ParamIdentifierMixin.class)),
PSI_REFERENCE_PROVIDER);
}
@Override
public void registerReferenceProviders(@NotNull PsiReferenceRegistrar registrar) {
registrar.registerReferenceProvider(
PlatformPatterns.psiElement(YAMLKeyValue.class),
new NodeTypeReferenceProvider()
);
}
@Override
public void registerReferenceProviders(@NotNull final PsiReferenceRegistrar registrar) {
registrar.registerReferenceProvider(localDefinitionsPattern(), createLocalReferenceProvider());
registrar.registerReferenceProvider(
mappingSchemaNamePattern(), createSchemaNameReferenceProvider());
registrar.registerReferenceProvider(filePattern(), createFileReferenceProvider());
}
@Override
public void registerReferenceProviders(@NotNull final PsiReferenceRegistrar registrar) {
registrar.registerReferenceProvider(localDefinitionsPattern(), createLocalReferenceProvider());
registrar.registerReferenceProvider(
mappingSchemaNamePattern(), createSchemaNameReferenceProvider());
registrar.registerReferenceProvider(filePattern(), createFileReferenceProvider());
}
@Override
public void registerReferenceProviders(PsiReferenceRegistrar registrar) {
JavaClassReferenceProvider provider = new JavaClassReferenceProvider();
provider.setOption(JavaClassReferenceProvider.CLASS_KIND, ClassKind.CLASS);
registrar.registerReferenceProvider(
JavaClassQualifiedNameReference.PATTERN, new JavaClassReferenceProvider());
}
@Override
public void registerReferenceProviders(@NotNull PsiReferenceRegistrar registrar) {
registrar.registerReferenceProvider(
psiElement(PyStringLiteralExpression.class),
new PantsTargetPathReferenceProvider()
);
}
@Override
public void registerReferenceProviders(PsiReferenceRegistrar registrar) {
PsiElementPattern.Capture<PsiNamedElement> variableCapture =
PlatformPatterns.psiElement(PsiNamedElement.class).withParent(HaskellVars.class).withParent(HaskellGendecl.class).withLanguage(HaskellLanguage.INSTANCE);
registrar.registerReferenceProvider(variableCapture,
new HaskellReferenceProvider());
}
@Override
public void registerReferenceProviders(@NotNull PsiReferenceRegistrar registrar) {
registrar.registerReferenceProvider(PlatformPatterns.psiElement(NASMNamedElement.class),
new NASMReferenceProvider());
}
@Override
public void registerReferenceProviders(@NotNull PsiReferenceRegistrar registrar) {
registrar.registerReferenceProvider(psiElement()
.withText(string().startsWith(INCLUDE_TAG))
, new IncludeFilePathReferenceProvider());
}
@Override
public void registerReferenceProviders(@NotNull PsiReferenceRegistrar registrar) {
registrar.registerReferenceProvider(PlatformPatterns.psiElement(XmlAttributeValue.class), new BlueprintJavaClassReferenceProvider());
registrar.registerReferenceProvider(PlatformPatterns.psiElement(XmlAttributeValue.class), new BeanReferenceProvider());
registrar.registerReferenceProvider(PlatformPatterns.psiElement(XmlAttributeValue.class), new BlueprintPropertyNameReferenceProvider());
}
@Override
public void registerReferenceProviders(@NotNull PsiReferenceRegistrar registrar) {
CamelEndpointPsiReferenceProvider provider = createProvider();
registrar.registerReferenceProvider(PsiJavaPatterns.literalExpression(), provider);
registrar.registerReferenceProvider(XmlPatterns.xmlAttributeValue("uri"), provider);
}
@Override
public void registerReferenceProviders(@Nonnull final PsiReferenceRegistrar registrar) {
registrar.registerReferenceProvider(PlatformPatterns.psiElement(PsiExtraFile.class), new PsiExtraFileReferenceProvider());
}
@Override
public void registerReferenceProviders(PsiReferenceRegistrar psiReferenceRegistrar) {
RequirejsPsiReferenceProvider provider = new RequirejsPsiReferenceProvider();
psiReferenceRegistrar.registerReferenceProvider(StandardPatterns.instanceOf(JSLiteralExpression.class), provider);
}
@Override
public void registerReferenceProviders(PsiReferenceRegistrar registrar) {
registrar.registerReferenceProvider(categoryPattern(), new I18nReferenceProvider());
}
@Override
public PsiReferenceRegistrar getRegistrar(Language language) {
return null;
}
@Override
public void registerReferenceProviders(@Nonnull PsiReferenceRegistrar registrar) {
registrar.registerReferenceProvider(PlatformPatterns.psiElement(PsiComment.class), COMMENTS_REFERENCE_PROVIDER_TYPE.getProvider());
}
@Override
public void registerReferenceProviders(PsiReferenceRegistrar psiReferenceRegistrar) {
psiReferenceRegistrar.registerReferenceProvider(PhpPatterns.psiElement(PhpElementTypes.PARAMETER),
new PhpStringLiteralExpressionReference(ParameterReference.class)
.addCall("Yii", "getParameter")
);
}