mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[i18n] UastPatterns.stringLiteralExpression and UastLiteralReferenceProvider cleanup
This commit is contained in:
+16
-17
@@ -19,7 +19,6 @@ import com.intellij.codeInsight.AnnotationUtil;
|
||||
import com.intellij.lang.properties.psi.impl.PropertyValueImpl;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.patterns.PsiJavaPatterns;
|
||||
import com.intellij.patterns.uast.ULiteralExpressionPattern;
|
||||
import com.intellij.patterns.uast.UastPatterns;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.source.resolve.reference.impl.providers.JavaClassReferenceProvider;
|
||||
@@ -27,7 +26,9 @@ import com.intellij.psi.search.LocalSearchScope;
|
||||
import com.intellij.psi.search.searches.AnnotatedElementsSearch;
|
||||
import com.intellij.util.ProcessingContext;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.uast.*;
|
||||
import org.jetbrains.uast.UElement;
|
||||
import org.jetbrains.uast.UExpression;
|
||||
import org.jetbrains.uast.UField;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
@@ -45,31 +46,29 @@ public class PropertiesReferenceContributor extends PsiReferenceContributor{
|
||||
return true;
|
||||
}
|
||||
};
|
||||
private static final ULiteralExpressionPattern BASE_PATTERN =
|
||||
UastPatterns.stringLiteralExpression().and(UastPatterns.capture(UElement.class).withUastParent(UastPatterns.capture(UElement.class).filter(p -> {
|
||||
if (!(p instanceof UPolyadicExpression)) return true;
|
||||
return !(((UPolyadicExpression)p).getOperator() instanceof UastBinaryOperator.ArithmeticOperator);
|
||||
})));
|
||||
|
||||
|
||||
@Override
|
||||
public void registerReferenceProviders(@NotNull final PsiReferenceRegistrar registrar) {
|
||||
UastReferenceRegistrar.registerUastReferenceProvider(registrar, BASE_PATTERN, new UastPropertiesReferenceProvider(true), PsiReferenceRegistrar.DEFAULT_PRIORITY);
|
||||
UastReferenceRegistrar.registerUastReferenceProvider(registrar, UastPatterns.injectionHostUExpression(),
|
||||
new UastPropertiesReferenceProvider(true), PsiReferenceRegistrar.DEFAULT_PRIORITY);
|
||||
|
||||
UastReferenceRegistrar.registerUastReferenceProvider(registrar,
|
||||
UastPatterns.stringLiteralExpression().annotationParam(AnnotationUtil.PROPERTY_KEY,
|
||||
AnnotationUtil.PROPERTY_KEY_RESOURCE_BUNDLE_PARAMETER),
|
||||
UastPatterns.injectionHostUExpression()
|
||||
.annotationParam(AnnotationUtil.PROPERTY_KEY,
|
||||
AnnotationUtil.PROPERTY_KEY_RESOURCE_BUNDLE_PARAMETER),
|
||||
new ResourceBundleReferenceProvider(), PsiReferenceRegistrar.DEFAULT_PRIORITY);
|
||||
|
||||
UastReferenceRegistrar.registerUastReferenceProvider(registrar, BASE_PATTERN, new UastLiteralReferenceProvider() {
|
||||
UastReferenceRegistrar
|
||||
.registerUastReferenceProvider(registrar, UastPatterns.injectionHostUExpression(), new UastInjectionHostReferenceProvider() {
|
||||
private final ResourceBundleReferenceProvider myUnderlying = new ResourceBundleReferenceProvider();
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public PsiReference[] getReferencesByULiteral(@NotNull ULiteralExpression uLiteral,
|
||||
@NotNull PsiLanguageInjectionHost host,
|
||||
@NotNull ProcessingContext context) {
|
||||
final UElement parent = uLiteral.getUastParent();
|
||||
public PsiReference[] getReferencesForInjectionHost(@NotNull UExpression uExpression,
|
||||
@NotNull PsiLanguageInjectionHost host,
|
||||
@NotNull ProcessingContext context) {
|
||||
final UElement parent = uExpression.getUastParent();
|
||||
if (!(parent instanceof UField)) {
|
||||
return PsiReference.EMPTY_ARRAY;
|
||||
}
|
||||
@@ -78,7 +77,7 @@ public class PropertiesReferenceContributor extends PsiReferenceContributor{
|
||||
if (initializer == null) return PsiReference.EMPTY_ARRAY;
|
||||
PsiElement initializerSource = initializer.getSourcePsi();
|
||||
if (initializerSource == null) return PsiReference.EMPTY_ARRAY;
|
||||
PsiElement elementSource = uLiteral.getSourcePsi();
|
||||
PsiElement elementSource = uExpression.getSourcePsi();
|
||||
if (initializerSource != elementSource ||
|
||||
!field.isFinal() ||
|
||||
!field.getType().equalsToText(CommonClassNames.JAVA_LANG_STRING)) {
|
||||
@@ -99,7 +98,7 @@ public class PropertiesReferenceContributor extends PsiReferenceContributor{
|
||||
if (AnnotationUtil.PROPERTY_KEY_RESOURCE_BUNDLE_PARAMETER.equals(pair.getName())) {
|
||||
final PsiAnnotationMemberValue value = pair.getValue();
|
||||
if (value instanceof PsiReferenceExpression && ((PsiReferenceExpression)value).resolve() == field.getSourcePsi()) {
|
||||
Collections.addAll(references, myUnderlying.getReferencesByElement(uLiteral, context));
|
||||
Collections.addAll(references, myUnderlying.getReferencesForInjectionHost(uExpression, host, context));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
+5
-8
@@ -4,11 +4,9 @@ package com.intellij.lang.properties;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.util.ProcessingContext;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.uast.UElement;
|
||||
import org.jetbrains.uast.ULiteralExpression;
|
||||
import org.jetbrains.uast.UastLiteralUtils;
|
||||
import org.jetbrains.uast.UExpression;
|
||||
|
||||
public class ResourceBundleReferenceProvider extends UastReferenceProvider {
|
||||
public class ResourceBundleReferenceProvider extends UastInjectionHostReferenceProvider {
|
||||
@Override
|
||||
public boolean acceptsTarget(@NotNull PsiElement target) {
|
||||
return target instanceof PsiFile && PropertiesImplUtil.isPropertiesFile((PsiFile)target);
|
||||
@@ -16,10 +14,9 @@ public class ResourceBundleReferenceProvider extends UastReferenceProvider {
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public PsiReference[] getReferencesByElement(@NotNull UElement element, @NotNull ProcessingContext context) {
|
||||
if (!(element instanceof ULiteralExpression)) return PsiReference.EMPTY_ARRAY;
|
||||
PsiLanguageInjectionHost host = UastLiteralUtils.getPsiLanguageInjectionHost((ULiteralExpression)element);
|
||||
if (host == null) return PsiReference.EMPTY_ARRAY;
|
||||
public PsiReference[] getReferencesForInjectionHost(@NotNull UExpression uExpression,
|
||||
@NotNull PsiLanguageInjectionHost host,
|
||||
@NotNull ProcessingContext context) {
|
||||
return new PsiReference[]{new ResourceBundleReference(host, false)};
|
||||
}
|
||||
}
|
||||
|
||||
+11
-7
@@ -7,15 +7,18 @@ import com.intellij.openapi.util.Ref;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiLanguageInjectionHost;
|
||||
import com.intellij.psi.PsiReference;
|
||||
import com.intellij.psi.UastStringLiteralReferenceProvider;
|
||||
import com.intellij.psi.UastInjectionHostReferenceProvider;
|
||||
import com.intellij.util.ProcessingContext;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.uast.*;
|
||||
import org.jetbrains.uast.UCallExpression;
|
||||
import org.jetbrains.uast.UElement;
|
||||
import org.jetbrains.uast.UExpression;
|
||||
import org.jetbrains.uast.UIfExpression;
|
||||
|
||||
/**
|
||||
* @author cdr
|
||||
*/
|
||||
class UastPropertiesReferenceProvider extends UastStringLiteralReferenceProvider {
|
||||
class UastPropertiesReferenceProvider extends UastInjectionHostReferenceProvider {
|
||||
|
||||
private final boolean myDefaultSoft;
|
||||
|
||||
@@ -28,17 +31,18 @@ class UastPropertiesReferenceProvider extends UastStringLiteralReferenceProvider
|
||||
return target instanceof IProperty;
|
||||
}
|
||||
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public PsiReference[] getReferencesByULiteral(@NotNull ULiteralExpression element,
|
||||
@NotNull PsiLanguageInjectionHost host,
|
||||
@NotNull ProcessingContext context) {
|
||||
public PsiReference[] getReferencesForInjectionHost(@NotNull UExpression element,
|
||||
@NotNull PsiLanguageInjectionHost host,
|
||||
@NotNull ProcessingContext context) {
|
||||
Object value = null;
|
||||
String bundleName = null;
|
||||
boolean soft = myDefaultSoft;
|
||||
|
||||
if (canBePropertyKeyRef(element)) {
|
||||
value = element.getValue();
|
||||
value = element.evaluate();
|
||||
|
||||
final Ref<UExpression> resourceBundleValue = Ref.create();
|
||||
if (JavaI18nUtil.mustBePropertyKey(element, resourceBundleValue)) {
|
||||
|
||||
Reference in New Issue
Block a user