From ffad98d1c075daa0eec5e03f45cd8c11a3c2392e Mon Sep 17 00:00:00 2001 From: Nicolay Mitropolsky Date: Wed, 12 Dec 2018 19:33:39 +0300 Subject: [PATCH] [i18n] `UastPatterns.stringLiteralExpression` and `UastLiteralReferenceProvider` cleanup --- .../PropertiesReferenceContributor.java | 33 +++++++++---------- .../ResourceBundleReferenceProvider.java | 13 +++----- .../UastPropertiesReferenceProvider.java | 18 ++++++---- 3 files changed, 32 insertions(+), 32 deletions(-) diff --git a/plugins/java-i18n/src/com/intellij/lang/properties/PropertiesReferenceContributor.java b/plugins/java-i18n/src/com/intellij/lang/properties/PropertiesReferenceContributor.java index 0b505d186648..e50d70d806b1 100644 --- a/plugins/java-i18n/src/com/intellij/lang/properties/PropertiesReferenceContributor.java +++ b/plugins/java-i18n/src/com/intellij/lang/properties/PropertiesReferenceContributor.java @@ -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; } } diff --git a/plugins/java-i18n/src/com/intellij/lang/properties/ResourceBundleReferenceProvider.java b/plugins/java-i18n/src/com/intellij/lang/properties/ResourceBundleReferenceProvider.java index b7c7b2d7a62e..a847dc3dc2d6 100644 --- a/plugins/java-i18n/src/com/intellij/lang/properties/ResourceBundleReferenceProvider.java +++ b/plugins/java-i18n/src/com/intellij/lang/properties/ResourceBundleReferenceProvider.java @@ -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)}; } } diff --git a/plugins/java-i18n/src/com/intellij/lang/properties/UastPropertiesReferenceProvider.java b/plugins/java-i18n/src/com/intellij/lang/properties/UastPropertiesReferenceProvider.java index 89d7bac4b598..ad410d9371c4 100644 --- a/plugins/java-i18n/src/com/intellij/lang/properties/UastPropertiesReferenceProvider.java +++ b/plugins/java-i18n/src/com/intellij/lang/properties/UastPropertiesReferenceProvider.java @@ -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 resourceBundleValue = Ref.create(); if (JavaI18nUtil.mustBePropertyKey(element, resourceBundleValue)) {