From 33ff90a6da9d58318c777f8012d156c61f5dfe6d Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Fri, 18 Jun 2021 00:16:09 -0700 Subject: [PATCH] FIR/UAST: commonize named/vararg expressions --- .../expressions/KotlinUNamedExpression.kt | 50 ++++++++ .../expressions/KotlinUVarargExpression.kt | 61 ++++++++++ .../expressions/KotlinUNamedExpression.kt | 108 ------------------ 3 files changed, 111 insertions(+), 108 deletions(-) create mode 100644 plugins/uast-kotlin-base/src/org/jetbrains/uast/kotlin/expressions/KotlinUNamedExpression.kt create mode 100644 plugins/uast-kotlin-base/src/org/jetbrains/uast/kotlin/expressions/KotlinUVarargExpression.kt delete mode 100644 plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/expressions/KotlinUNamedExpression.kt diff --git a/plugins/uast-kotlin-base/src/org/jetbrains/uast/kotlin/expressions/KotlinUNamedExpression.kt b/plugins/uast-kotlin-base/src/org/jetbrains/uast/kotlin/expressions/KotlinUNamedExpression.kt new file mode 100644 index 00000000000..50373b51d81 --- /dev/null +++ b/plugins/uast-kotlin-base/src/org/jetbrains/uast/kotlin/expressions/KotlinUNamedExpression.kt @@ -0,0 +1,50 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.uast.kotlin + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.psi.ValueArgument +import org.jetbrains.uast.* + +class KotlinUNamedExpression private constructor( + override val name: String?, + override val sourcePsi: PsiElement?, + givenParent: UElement?, + expressionProducer: (UElement) -> UExpression +) : KotlinAbstractUElement(givenParent), UNamedExpression { + + override val expression: UExpression by lz { expressionProducer(this) } + + override val uAnnotations: List = emptyList() + + override val psi: PsiElement? = null + + override val javaPsi: PsiElement? = null + + companion object { + fun create( + name: String?, + valueArgument: ValueArgument, + uastParent: UElement? + ): UNamedExpression { + val expression = valueArgument.getArgumentExpression() + return KotlinUNamedExpression(name, valueArgument.asElement(), uastParent) { expressionParent -> + expression?.let { expressionParent.getLanguagePlugin().convertOpt(it, expressionParent) } + ?: UastEmptyExpression(expressionParent) + } + } + + fun create( + name: String?, + valueArguments: List, + uastParent: UElement? + ): UNamedExpression { + return KotlinUNamedExpression(name, null, uastParent) { expressionParent -> + KotlinUVarargExpression(valueArguments, expressionParent) + } + } + } +} diff --git a/plugins/uast-kotlin-base/src/org/jetbrains/uast/kotlin/expressions/KotlinUVarargExpression.kt b/plugins/uast-kotlin-base/src/org/jetbrains/uast/kotlin/expressions/KotlinUVarargExpression.kt new file mode 100644 index 00000000000..9bad06926a0 --- /dev/null +++ b/plugins/uast-kotlin-base/src/org/jetbrains/uast/kotlin/expressions/KotlinUVarargExpression.kt @@ -0,0 +1,61 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.uast.kotlin + +import com.intellij.psi.PsiElement +import com.intellij.psi.PsiType +import org.jetbrains.kotlin.psi.ValueArgument +import org.jetbrains.uast.* +import org.jetbrains.uast.kotlin.internal.DelegatedMultiResolve + +class KotlinUVarargExpression( + private val valueArgs: List, + uastParent: UElement? +) : KotlinAbstractUExpression(uastParent), UCallExpression, DelegatedMultiResolve { + override val kind: UastCallKind = UastCallKind.NESTED_ARRAY_INITIALIZER + + override val valueArguments: List by lz { + valueArgs.map { + it.getArgumentExpression()?.let { argumentExpression -> + getLanguagePlugin().convertOpt(argumentExpression, this) + } ?: UastEmptyExpression(this) + } + } + + override fun getArgumentForParameter(i: Int): UExpression? = valueArguments.getOrNull(i) + + override val valueArgumentCount: Int + get() = valueArgs.size + + override val psi: PsiElement? + get() = null + + override val methodIdentifier: UIdentifier? + get() = null + + override val classReference: UReferenceExpression? + get() = null + + override val methodName: String? + get() = null + + override val typeArgumentCount: Int + get() = 0 + + override val typeArguments: List + get() = emptyList() + + override val returnType: PsiType? + get() = null + + override fun resolve() = null + + override val receiver: UExpression? + get() = null + + override val receiverType: PsiType? + get() = null +} diff --git a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/expressions/KotlinUNamedExpression.kt b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/expressions/KotlinUNamedExpression.kt deleted file mode 100644 index 2992c897140..00000000000 --- a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/expressions/KotlinUNamedExpression.kt +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright 2010-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.uast.kotlin - -import com.intellij.psi.PsiElement -import com.intellij.psi.PsiType -import org.jetbrains.kotlin.psi.ValueArgument -import org.jetbrains.uast.* -import org.jetbrains.uast.kotlin.internal.DelegatedMultiResolve - -class KotlinUNamedExpression private constructor( - override val name: String?, - override val sourcePsi: PsiElement?, - givenParent: UElement?, - expressionProducer: (UElement) -> UExpression -) : KotlinAbstractUElement(givenParent), UNamedExpression { - - override val expression: UExpression by lz { expressionProducer(this) } - - override val annotations: List = emptyList() - - override val psi: PsiElement? = null - - override val javaPsi: PsiElement? = null - - companion object { - internal fun create(name: String?, valueArgument: ValueArgument, uastParent: UElement?): UNamedExpression { - val expression = valueArgument.getArgumentExpression() - return KotlinUNamedExpression(name, valueArgument.asElement(), uastParent) { expressionParent -> - expression?.let { expressionParent.getLanguagePlugin().convertOpt(it, expressionParent) } - ?: UastEmptyExpression(expressionParent) - } - } - - internal fun create( - name: String?, - valueArguments: List, - uastParent: UElement? - ): UNamedExpression { - return KotlinUNamedExpression(name, null, uastParent) { expressionParent -> - KotlinUVarargExpression(valueArguments, expressionParent) - } - } - } -} - -class KotlinUVarargExpression( - private val valueArgs: List, - uastParent: UElement? -) : KotlinAbstractUExpression(uastParent), UCallExpressionEx, DelegatedMultiResolve { - override val kind: UastCallKind = UastCallKind.NESTED_ARRAY_INITIALIZER - - override val valueArguments: List by lz { - valueArgs.map { - it.getArgumentExpression()?.let { argumentExpression -> - getLanguagePlugin().convert(argumentExpression, this) - } ?: UastEmptyExpression(this) - } - } - - override fun getArgumentForParameter(i: Int): UExpression? = valueArguments.getOrNull(i) - - override val valueArgumentCount: Int - get() = valueArgs.size - - override val psi: PsiElement? - get() = null - - override val methodIdentifier: UIdentifier? - get() = null - - override val classReference: UReferenceExpression? - get() = null - - override val methodName: String? - get() = null - - override val typeArgumentCount: Int - get() = 0 - - override val typeArguments: List - get() = emptyList() - - override val returnType: PsiType? - get() = null - - override fun resolve() = null - - override val receiver: UExpression? - get() = null - - override val receiverType: PsiType? - get() = null -}