diff options
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.kt | 23 |
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 + " " } |