Commit 81f9374a authored by Nicolay Mitropolsky's avatar Nicolay Mitropolsky
Browse files

`UastStringLiteralReferenceProvider` as a replacement for `UastLiteralReferenceProvider`

parent 837acd61
Showing with 26 additions and 3 deletions
+26 -3
......@@ -60,7 +60,7 @@ public class JavaI18nUtil extends I18nUtil {
return isPassedToAnnotatedParam(expression, AnnotationUtil.PROPERTY_KEY, resourceBundleRef, null);
}
public static boolean mustBePropertyKey(@NotNull ULiteralExpression expression, @Nullable Ref<? super UExpression> resourceBundleRef) {
public static boolean mustBePropertyKey(@NotNull UExpression expression, @Nullable Ref<? super UExpression> resourceBundleRef) {
final UElement parent = expression.getUastParent();
if (parent instanceof UVariable) {
UAnnotation annotation = ((UVariable)parent).findAnnotation(AnnotationUtil.PROPERTY_KEY);
......
......@@ -7,7 +7,7 @@ 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.UastLiteralReferenceProvider;
import com.intellij.psi.UastStringLiteralReferenceProvider;
import com.intellij.util.ProcessingContext;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.uast.*;
......@@ -15,7 +15,7 @@ import org.jetbrains.uast.*;
/**
* @author cdr
*/
class UastPropertiesReferenceProvider extends UastLiteralReferenceProvider {
class UastPropertiesReferenceProvider extends UastStringLiteralReferenceProvider {
private final boolean myDefaultSoft;
......
......@@ -39,4 +39,27 @@ abstract class UastLiteralReferenceProvider : UastReferenceProvider() {
host: PsiLanguageInjectionHost,
context: ProcessingContext): Array<PsiReference>
}
abstract class UastStringLiteralReferenceProvider : UastReferenceProvider() {
override val supportedUElementTypes: List<Class<out UElement>> = listOf(UExpression::class.java)
override fun getReferencesByElement(element: UElement, context: ProcessingContext): Array<PsiReference> {
val injectionHost = context[REQUESTED_PSI_ELEMENT] as? PsiLanguageInjectionHost ?: return PsiReference.EMPTY_ARRAY
if (element is ULiteralExpression)
return getReferencesByULiteral(element, injectionHost, context) // simple string (java usually)
if (element is UPolyadicExpression) { // Kotlin, see KT-27283
return element.operands.asSequence().filterIsInstance<ULiteralExpression>().flatMap {
getReferencesByULiteral(it, injectionHost, context).asSequence()
}.toList().toTypedArray()
}
return PsiReference.EMPTY_ARRAY
}
abstract fun getReferencesByULiteral(uLiteral: ULiteralExpression,
host: PsiLanguageInjectionHost,
context: ProcessingContext): Array<PsiReference>
}
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment