UAST: findAttributeValue returns default value when no declared value found
This commit is contained in:
+11
-1
@@ -42,7 +42,7 @@ class KotlinUAnnotation(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun findAttributeValue(name: String?): UExpression? =
|
override fun findAttributeValue(name: String?): UExpression? =
|
||||||
findDeclaredAttributeValue(name)
|
findDeclaredAttributeValue(name) ?: findAttributeDefaultValue(name ?: "value")
|
||||||
|
|
||||||
override fun findDeclaredAttributeValue(name: String?): UExpression? {
|
override fun findDeclaredAttributeValue(name: String?): UExpression? {
|
||||||
return attributeValues.find {
|
return attributeValues.find {
|
||||||
@@ -52,5 +52,15 @@ class KotlinUAnnotation(
|
|||||||
}?.expression
|
}?.expression
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun findAttributeDefaultValue(name: String): UExpression? {
|
||||||
|
val parameter = resolvedAnnotation
|
||||||
|
?.annotationClass
|
||||||
|
?.unsubstitutedPrimaryConstructor
|
||||||
|
?.valueParameters
|
||||||
|
?.find { it.name.asString() == name } ?: return null
|
||||||
|
|
||||||
|
val defaultValue = (parameter.source.getPsi() as? KtParameter)?.defaultValue ?: return null
|
||||||
|
return getLanguagePlugin().convertWithParent(defaultValue)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -104,4 +104,12 @@ class KotlinUastApiTest : AbstractKotlinUastTest() {
|
|||||||
assertEquals("String", elvisExpression.getExpressionType()!!.presentableText)
|
assertEquals("String", elvisExpression.getExpressionType()!!.presentableText)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test fun testFindAttributeDefaultValue() {
|
||||||
|
doTest("AnnotationParameters") { _, file ->
|
||||||
|
val witDefaultValue = file.findElementByText<UAnnotation>("@WithDefaultValue")
|
||||||
|
assertEquals(42, witDefaultValue.findAttributeValue("value")!!.evaluate())
|
||||||
|
assertEquals(42, witDefaultValue.findAttributeValue(null)!!.evaluate())
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user