summaryrefslogtreecommitdiff
path: root/plugins/kotlin/uast/uast-kotlin-base/src/org/jetbrains/uast/kotlin/declarations/KotlinUField.kt
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/kotlin/uast/uast-kotlin-base/src/org/jetbrains/uast/kotlin/declarations/KotlinUField.kt')
-rw-r--r--plugins/kotlin/uast/uast-kotlin-base/src/org/jetbrains/uast/kotlin/declarations/KotlinUField.kt23
1 files changed, 23 insertions, 0 deletions
diff --git a/plugins/kotlin/uast/uast-kotlin-base/src/org/jetbrains/uast/kotlin/declarations/KotlinUField.kt b/plugins/kotlin/uast/uast-kotlin-base/src/org/jetbrains/uast/kotlin/declarations/KotlinUField.kt
index 6bebb0ab0ac1..b037a50dcde5 100644
--- a/plugins/kotlin/uast/uast-kotlin-base/src/org/jetbrains/uast/kotlin/declarations/KotlinUField.kt
+++ b/plugins/kotlin/uast/uast-kotlin-base/src/org/jetbrains/uast/kotlin/declarations/KotlinUField.kt
@@ -2,6 +2,7 @@
package org.jetbrains.uast.kotlin
import com.intellij.psi.*
+import org.jetbrains.annotations.ApiStatus
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.KtProperty
@@ -11,6 +12,7 @@ import org.jetbrains.uast.UFieldEx
import org.jetbrains.uast.internal.acceptList
import org.jetbrains.uast.visitor.UastVisitor
+@ApiStatus.Internal
open class KotlinUField(
psi: PsiField,
override val sourcePsi: KtElement?,
@@ -22,6 +24,10 @@ open class KotlinUField(
override val psi = javaPsi
+ override fun getType(): PsiType {
+ return delegateExpression?.getExpressionType() ?: javaPsi.type
+ }
+
override fun acceptsAnnotationTarget(target: AnnotationUseSiteTarget?): Boolean =
target == AnnotationUseSiteTarget.FIELD ||
target == AnnotationUseSiteTarget.PROPERTY_DELEGATE_FIELD ||
@@ -54,4 +60,21 @@ open class KotlinUField(
delegateExpression?.accept(visitor)
visitor.afterVisitField(this)
}
+
+ override fun asRenderString(): String = buildString {
+ if (uAnnotations.isNotEmpty()) {
+ uAnnotations.joinTo(this, separator = " ", postfix = " ") { it.asRenderString() }
+ }
+ append(javaPsi.renderModifiers())
+ // NB: use of (potentially delegated) `type`, instead of `javaPsiInternal.type`, is the only major difference.
+ append("var ").append(javaPsi.name).append(": ").append(type.getCanonicalText(false))
+ uastInitializer?.let { initializer -> append(" = " + initializer.asRenderString()) }
+ }
+}
+
+// copy of internal org.jetbrains.uast.InternalUastUtilsKt.renderModifiers
+// original function should be used instead as soon as becomes public
+private fun PsiModifierListOwner.renderModifiers(): String {
+ val modifiers = PsiModifier.MODIFIERS.filter { hasModifierProperty(it) }.joinToString(" ")
+ return if (modifiers.isEmpty()) "" else modifiers + " "
}