Added ad-hoc KtValueArgument.stringTemplateExpression
Use only stub stringTemplateExpression if it is present and don't use ast nodes as it could be unbounded #KT-47034 Fixed
This commit is contained in:
committed by
Space
parent
a383c1ce79
commit
2c8d583d8b
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberDescriptor
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||
|
||||
object JvmFileClassUtil {
|
||||
val JVM_NAME: FqName = FqName("kotlin.jvm.JvmName")
|
||||
@@ -99,9 +100,13 @@ object JvmFileClassUtil {
|
||||
}
|
||||
|
||||
fun getLiteralStringFromAnnotation(annotation: KtAnnotationEntry): String? {
|
||||
val argumentExpression = annotation.valueArguments.firstOrNull()?.getArgumentExpression() ?: return null
|
||||
val stringTemplate = argumentExpression as? KtStringTemplateExpression ?: return null
|
||||
val singleEntry = stringTemplate.entries.singleOrNull() as? KtLiteralStringTemplateEntry ?: return null
|
||||
val stringTemplateExpression = annotation.valueArguments.firstOrNull()?.run {
|
||||
when (this) {
|
||||
is KtValueArgument -> stringTemplateExpression
|
||||
else -> getArgumentExpression().safeAs<KtStringTemplateExpression>()
|
||||
}
|
||||
} ?: return null
|
||||
val singleEntry = stringTemplateExpression.entries.singleOrNull() as? KtLiteralStringTemplateEntry ?: return null
|
||||
return singleEntry.text
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,6 +59,10 @@ public class KtValueArgument extends KtElementImplStub<KotlinValueArgumentStub<?
|
||||
KtStubElementTypes.STRING_TEMPLATE
|
||||
);
|
||||
|
||||
private static final TokenSet STRING_TEMPLATE_EXPRESSIONS_TYPES = TokenSet.create(
|
||||
KtStubElementTypes.STRING_TEMPLATE
|
||||
);
|
||||
|
||||
@Override
|
||||
@Nullable @IfNotParsed
|
||||
public KtExpression getArgumentExpression() {
|
||||
@@ -73,6 +77,19 @@ public class KtValueArgument extends KtElementImplStub<KotlinValueArgumentStub<?
|
||||
return findChildByClass(KtExpression.class);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public KtStringTemplateExpression getStringTemplateExpression() {
|
||||
KotlinPlaceHolderStub<? extends KtValueArgument> stub = getStub();
|
||||
KtExpression expression;
|
||||
if (stub != null) {
|
||||
KtExpression[] stringTemplateExpressions = stub.getChildrenByType(STRING_TEMPLATE_EXPRESSIONS_TYPES, KtExpression.EMPTY_ARRAY);
|
||||
expression = stringTemplateExpressions.length != 0 ? stringTemplateExpressions[0] : null;
|
||||
} else {
|
||||
expression = findChildByClass(KtExpression.class);
|
||||
}
|
||||
return expression instanceof KtStringTemplateExpression ? (KtStringTemplateExpression)expression : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public KtValueArgumentName getArgumentName() {
|
||||
|
||||
Reference in New Issue
Block a user