diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightPsiClassObjectAccessExpression.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightPsiClassObjectAccessExpression.kt new file mode 100644 index 00000000000..9a641510da8 --- /dev/null +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightPsiClassObjectAccessExpression.kt @@ -0,0 +1,35 @@ +/* + * Copyright 2010-2022 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.kotlin.asJava.elements + +import com.intellij.psi.PsiClassObjectAccessExpression +import com.intellij.psi.PsiElement +import com.intellij.psi.PsiType +import com.intellij.psi.PsiTypeElement +import com.intellij.psi.impl.light.LightTypeElement +import org.jetbrains.kotlin.asJava.LightClassGenerationSupport +import org.jetbrains.kotlin.psi.KtClassLiteralExpression +import org.jetbrains.kotlin.resolve.BindingContext +import org.jetbrains.kotlin.resolve.constants.KClassValue +import org.jetbrains.kotlin.types.TypeUtils +import org.jetbrains.kotlin.utils.addToStdlib.safeAs + +class KtLightPsiClassObjectAccessExpression(override val kotlinOrigin: KtClassLiteralExpression, lightParent: PsiElement) : + KtLightPsiLiteral(kotlinOrigin, lightParent), PsiClassObjectAccessExpression { + override fun getType(): PsiType { + val bindingContext = LightClassGenerationSupport.getInstance(this.project).analyze(kotlinOrigin) + val (classId, arrayDimensions) = bindingContext[BindingContext.COMPILE_TIME_VALUE, kotlinOrigin] + ?.toConstantValue(TypeUtils.NO_EXPECTED_TYPE)?.safeAs()?.value + ?.safeAs()?.value ?: return PsiType.VOID + var type = psiType(classId.asSingleFqName().asString(), kotlinOrigin, boxPrimitiveType = arrayDimensions > 0) + repeat(arrayDimensions) { + type = type.createArrayType() + } + return type + } + + override fun getOperand(): PsiTypeElement = LightTypeElement(kotlinOrigin.manager, type) +} diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightAnnotationsValues.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightPsiLiteral.kt similarity index 60% rename from compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightAnnotationsValues.kt rename to compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightPsiLiteral.kt index 30ff00e735e..edcb4c4a6dc 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightAnnotationsValues.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightPsiLiteral.kt @@ -7,17 +7,12 @@ package org.jetbrains.kotlin.asJava.elements import com.intellij.openapi.util.text.StringUtil import com.intellij.psi.* -import com.intellij.psi.impl.light.LightTypeElement import org.jetbrains.kotlin.asJava.LightClassGenerationSupport import org.jetbrains.kotlin.asJava.computeExpression -import org.jetbrains.kotlin.psi.KtClassLiteralExpression import org.jetbrains.kotlin.psi.KtExpression import org.jetbrains.kotlin.psi.KtPsiFactory import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.constants.KClassValue import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe -import org.jetbrains.kotlin.types.TypeUtils -import org.jetbrains.kotlin.utils.addToStdlib.safeAs open class KtLightPsiLiteral( override val kotlinOrigin: KtExpression, @@ -46,20 +41,3 @@ open class KtLightPsiLiteral( override fun getReference(): PsiReference? = references.singleOrNull() override fun getReferences(): Array = kotlinOrigin.references } - -class KtLightPsiClassObjectAccessExpression(override val kotlinOrigin: KtClassLiteralExpression, lightParent: PsiElement) : - KtLightPsiLiteral(kotlinOrigin, lightParent), PsiClassObjectAccessExpression { - override fun getType(): PsiType { - val bindingContext = LightClassGenerationSupport.getInstance(this.project).analyze(kotlinOrigin) - val (classId, arrayDimensions) = bindingContext[BindingContext.COMPILE_TIME_VALUE, kotlinOrigin] - ?.toConstantValue(TypeUtils.NO_EXPECTED_TYPE)?.safeAs()?.value - ?.safeAs()?.value ?: return PsiType.VOID - var type = psiType(classId.asSingleFqName().asString(), kotlinOrigin, boxPrimitiveType = arrayDimensions > 0) - repeat(arrayDimensions) { - type = type.createArrayType() - } - return type - } - - override fun getOperand(): PsiTypeElement = LightTypeElement(kotlinOrigin.manager, type) -}