From 5dd7ff4d7fe9f0766c8a95f06058c2df097de7da Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Fri, 20 Apr 2018 21:29:55 +0300 Subject: [PATCH] Up KotlinAbstractUElement / UElementWithComments / UVariable in branches --- .../uast/kotlin/KotlinAbstractUElement.kt.172 | 2 +- .../declarations/KotlinUVariable.kt.172 | 2 +- .../declarations/KotlinUVariable.kt.181 | 3 +-- .../declarations/KotlinUVariable.kt.as32 | 2 +- .../KotlinUElementWithComments.kt.172 | 21 ++++++++++++++++++- 5 files changed, 24 insertions(+), 6 deletions(-) diff --git a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinAbstractUElement.kt.172 b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinAbstractUElement.kt.172 index 469c8926548..c64ba19ef16 100644 --- a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinAbstractUElement.kt.172 +++ b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinAbstractUElement.kt.172 @@ -28,7 +28,7 @@ import org.jetbrains.uast.* import org.jetbrains.uast.kotlin.expressions.KotlinUElvisExpression import org.jetbrains.uast.kotlin.psi.UastKotlinPsiVariable -abstract class KotlinAbstractUElement(private val givenParent: UElement?) : UElement { +abstract class KotlinAbstractUElement(private val givenParent: UElement?) : KotlinUElementWithComments, UElement { override val uastParent: UElement? by lz { givenParent ?: convertParent() diff --git a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUVariable.kt.172 b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUVariable.kt.172 index 6fb2f3f8428..74f39e9ba9d 100644 --- a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUVariable.kt.172 +++ b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUVariable.kt.172 @@ -35,7 +35,7 @@ import org.jetbrains.uast.kotlin.psi.UastKotlinPsiVariable import org.jetbrains.uast.visitor.UastVisitor abstract class AbstractKotlinUVariable(givenParent: UElement?) - : KotlinAbstractUElement(givenParent), PsiVariable, UVariable, KotlinUElementWithComments { + : KotlinAbstractUElement(givenParent), PsiVariable, UVariable { override val uastInitializer: UExpression? get() { diff --git a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUVariable.kt.181 b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUVariable.kt.181 index fe52b4ba6b1..a9402bd1226 100644 --- a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUVariable.kt.181 +++ b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUVariable.kt.181 @@ -39,8 +39,7 @@ import org.jetbrains.uast.kotlin.psi.UastKotlinPsiParameter import org.jetbrains.uast.kotlin.psi.UastKotlinPsiVariable import org.jetbrains.uast.visitor.UastVisitor -abstract class AbstractKotlinUVariable(givenParent: UElement?) : KotlinAbstractUElement(givenParent), PsiVariable, UVariable, UAnchorOwner, - KotlinUElementWithComments { +abstract class AbstractKotlinUVariable(givenParent: UElement?) : KotlinAbstractUElement(givenParent), PsiVariable, UVariable, UAnchorOwner { override val uastInitializer: UExpression? get() { diff --git a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUVariable.kt.as32 b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUVariable.kt.as32 index 78a1665e80c..6926a5e9353 100644 --- a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUVariable.kt.as32 +++ b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUVariable.kt.as32 @@ -39,7 +39,7 @@ import org.jetbrains.uast.kotlin.psi.UastKotlinPsiVariable import org.jetbrains.uast.visitor.UastVisitor abstract class AbstractKotlinUVariable(givenParent: UElement?) - : KotlinAbstractUElement(givenParent), PsiVariable, UVariable, KotlinUElementWithComments { + : KotlinAbstractUElement(givenParent), PsiVariable, UVariable { override val uastInitializer: UExpression? get() { diff --git a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/internal/KotlinUElementWithComments.kt.172 b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/internal/KotlinUElementWithComments.kt.172 index 1c5de8fa704..9a7248f5974 100644 --- a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/internal/KotlinUElementWithComments.kt.172 +++ b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/internal/KotlinUElementWithComments.kt.172 @@ -21,9 +21,28 @@ import org.jetbrains.uast.UComment import org.jetbrains.uast.UElement interface KotlinUElementWithComments : UElement { + override val comments: List get() { val psi = psi ?: return emptyList() - return psi.children.filter { it is PsiComment }.map { UComment(it, this) } + val childrenComments = psi.children.filterIsInstance().map { UComment(it, this) } + if (this !is UExpression) return childrenComments + val childrenAndSiblingComments = childrenComments + + psi.nearestCommentSibling(forward = true)?.let { listOf(UComment(it, this)) }.orEmpty() + + psi.nearestCommentSibling(forward = false)?.let { listOf(UComment(it, this)) }.orEmpty() + val parent = psi.parent as? KtValueArgument ?: return childrenAndSiblingComments + + return childrenAndSiblingComments + + parent.nearestCommentSibling(forward = true)?.let { listOf(UComment(it, this)) }.orEmpty() + + parent.nearestCommentSibling(forward = false)?.let { listOf(UComment(it, this)) }.orEmpty() } + + private fun PsiElement.nearestCommentSibling(forward: Boolean): PsiComment? { + var sibling = if (forward) nextSibling else prevSibling + while (sibling is PsiWhiteSpace && !sibling.text.contains('\n')) { + sibling = if (forward) sibling.nextSibling else sibling.prevSibling + } + return sibling as? PsiComment + } + } \ No newline at end of file