From 6b5bddeed7c6546e42febca8637e3fb892451fd6 Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Tue, 25 May 2021 00:03:41 -0700 Subject: [PATCH] FIR/UAST: commonize KotlinEvaluatableUElement --- .../BaseKotlinUastResolveProviderService.kt | 2 ++ .../expressions/KotlinEvaluatableUElement.kt | 16 +++++++++ .../FirKotlinUastResolveProviderService.kt | 4 +++ .../KotlinUastResolveProviderService.kt | 9 +++++ .../kotlin/expressions/KotlinUExpression.kt | 34 ------------------- 5 files changed, 31 insertions(+), 34 deletions(-) create mode 100644 plugins/uast-kotlin-base/src/org/jetbrains/uast/kotlin/expressions/KotlinEvaluatableUElement.kt delete mode 100644 plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/expressions/KotlinUExpression.kt diff --git a/plugins/uast-kotlin-base/src/org/jetbrains/uast/kotlin/BaseKotlinUastResolveProviderService.kt b/plugins/uast-kotlin-base/src/org/jetbrains/uast/kotlin/BaseKotlinUastResolveProviderService.kt index fc6aceda30a..6e2bd1a638a 100644 --- a/plugins/uast-kotlin-base/src/org/jetbrains/uast/kotlin/BaseKotlinUastResolveProviderService.kt +++ b/plugins/uast-kotlin-base/src/org/jetbrains/uast/kotlin/BaseKotlinUastResolveProviderService.kt @@ -19,4 +19,6 @@ interface BaseKotlinUastResolveProviderService { fun resolveToDeclaration(ktExpression: KtExpression): PsiElement? fun getExpressionType(uExpression: UExpression): PsiType? + + fun evaluate(uExpression: UExpression): Any? } diff --git a/plugins/uast-kotlin-base/src/org/jetbrains/uast/kotlin/expressions/KotlinEvaluatableUElement.kt b/plugins/uast-kotlin-base/src/org/jetbrains/uast/kotlin/expressions/KotlinEvaluatableUElement.kt new file mode 100644 index 00000000000..6bcde285e4a --- /dev/null +++ b/plugins/uast-kotlin-base/src/org/jetbrains/uast/kotlin/expressions/KotlinEvaluatableUElement.kt @@ -0,0 +1,16 @@ +/* + * 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 org.jetbrains.uast.UExpression + +interface KotlinEvaluatableUElement : UExpression { + val baseResolveProviderService: BaseKotlinUastResolveProviderService + + override fun evaluate(): Any? { + return baseResolveProviderService.evaluate(this) + } +} diff --git a/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/FirKotlinUastResolveProviderService.kt b/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/FirKotlinUastResolveProviderService.kt index 1717deaf646..4941f55001c 100644 --- a/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/FirKotlinUastResolveProviderService.kt +++ b/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/FirKotlinUastResolveProviderService.kt @@ -35,4 +35,8 @@ interface FirKotlinUastResolveProviderService : BaseKotlinUastResolveProviderSer override fun getExpressionType(uExpression: UExpression): PsiType? { TODO("Not yet implemented") } + + override fun evaluate(uExpression: UExpression): Any? { + TODO("Not yet implemented") + } } diff --git a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinUastResolveProviderService.kt b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinUastResolveProviderService.kt index 5499cc58638..a0e71200460 100644 --- a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinUastResolveProviderService.kt +++ b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinUastResolveProviderService.kt @@ -13,6 +13,8 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtExpression import org.jetbrains.kotlin.resolve.BindingContext +import org.jetbrains.kotlin.resolve.constants.UnsignedErrorValueTypeConstant +import org.jetbrains.kotlin.types.TypeUtils import org.jetbrains.uast.UElement import org.jetbrains.uast.UExpression @@ -35,4 +37,11 @@ interface KotlinUastResolveProviderService : BaseKotlinUastResolveProviderServic val ktType = ktElement.analyze()[BindingContext.EXPRESSION_TYPE_INFO, ktElement]?.type ?: return null return ktType.toPsiType(uExpression, ktElement, boxed = false) } + + override fun evaluate(uExpression: UExpression): Any? { + val ktElement = uExpression.sourcePsi as? KtExpression ?: return null + val compileTimeConst = ktElement.analyze()[BindingContext.COMPILE_TIME_VALUE, ktElement] + if (compileTimeConst is UnsignedErrorValueTypeConstant) return null + return compileTimeConst?.getValue(TypeUtils.NO_EXPECTED_TYPE) + } } diff --git a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/expressions/KotlinUExpression.kt b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/expressions/KotlinUExpression.kt deleted file mode 100644 index 1e481638e95..00000000000 --- a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/expressions/KotlinUExpression.kt +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2010-2016 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 org.jetbrains.kotlin.psi.KtExpression -import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.constants.UnsignedErrorValueTypeConstant -import org.jetbrains.kotlin.types.TypeUtils -import org.jetbrains.uast.UExpression - -interface KotlinEvaluatableUElement : UExpression { - override fun evaluate(): Any? { - val ktElement = sourcePsi as? KtExpression ?: return null - - val compileTimeConst = ktElement.analyze()[BindingContext.COMPILE_TIME_VALUE, ktElement] - if (compileTimeConst is UnsignedErrorValueTypeConstant) return null - - return compileTimeConst?.getValue(TypeUtils.NO_EXPECTED_TYPE) - } -}