User: rednesto Date: 10 Jul 24 13:23 Revision: bef547ed8cd90dfc824b1237e452f307c05139f9 Summary: Translation: Make ref identifiers more lenient Now supports polyadic expression evaluation TeamCity URL: https://ci.mcdev.io/viewModification.html?tab=vcsModificationFiles&modId=9395&personal=false Index: src/main/kotlin/translations/identification/ReferenceTranslationIdentifier.kt =================================================================== --- src/main/kotlin/translations/identification/ReferenceTranslationIdentifier.kt (revision 389e45d411241fcf2f8bc52ede8656c48c9e59c5) +++ src/main/kotlin/translations/identification/ReferenceTranslationIdentifier.kt (revision bef547ed8cd90dfc824b1237e452f307c05139f9) @@ -23,7 +23,6 @@ import com.intellij.codeInsight.completion.CompletionUtilCore import com.intellij.psi.PsiManager import com.intellij.psi.PsiType -import org.jetbrains.uast.ULiteralExpression import org.jetbrains.uast.UReferenceExpression import org.jetbrains.uast.UVariable import org.jetbrains.uast.resolveToUElement @@ -44,7 +43,7 @@ return null } - val referenceElement = reference.uastInitializer as? ULiteralExpression ?: return null + val referenceElement = reference.uastInitializer ?: return null val result = identify(project, element, statement, referenceElement) ?: return null val infix = result.key.infix.replace(CompletionUtilCore.DUMMY_IDENTIFIER_TRIMMED, "") Index: src/main/kotlin/util/expression-utils.kt =================================================================== --- src/main/kotlin/util/expression-utils.kt (revision 389e45d411241fcf2f8bc52ede8656c48c9e59c5) +++ src/main/kotlin/util/expression-utils.kt (revision bef547ed8cd90dfc824b1237e452f307c05139f9) @@ -25,9 +25,10 @@ import org.jetbrains.uast.UBinaryExpressionWithType import org.jetbrains.uast.UCallExpression import org.jetbrains.uast.UExpression -import org.jetbrains.uast.ULiteralExpression import org.jetbrains.uast.UReferenceExpression import org.jetbrains.uast.UVariable +import org.jetbrains.uast.evaluateString +import org.jetbrains.uast.resolveToUElement import org.jetbrains.uast.util.isTypeCast fun UExpression.evaluate(allowReferences: Boolean, allowTranslations: Boolean): String? { @@ -43,15 +44,12 @@ return eval(expr.operand, defaultValue) expr is UReferenceExpression -> { - val reference = expr.resolve() + val reference = expr.resolveToUElement() if (reference is UVariable && reference.uastInitializer != null) { return eval(reference.uastInitializer, "\${${expr.asSourceString()}}") } } - expr is ULiteralExpression -> - return expr.value.toString() - expr is UCallExpression && allowTranslations -> for (argument in expr.valueArguments) { val translation = TranslationInstance.find(argument) ?: continue @@ -61,6 +59,8 @@ return translation.text } + + else -> expr?.evaluateString()?.let { return it } } return if (allowReferences && expr != null) {