diff --git a/compiler/light-classes-base/build.gradle.kts b/compiler/light-classes-base/build.gradle.kts index 5ab1b1635c4..2673e43d344 100644 --- a/compiler/light-classes-base/build.gradle.kts +++ b/compiler/light-classes-base/build.gradle.kts @@ -7,6 +7,7 @@ dependencies { api(project(":compiler:util")) api(project(":compiler:frontend.common")) api(project(":compiler:frontend.common-psi")) + api(project(":compiler:frontend.common.jvm")) api(project(":compiler:resolution.common.jvm")) api(project(":core:compiler.common.jvm")) compileOnly(intellijCore()) diff --git a/compiler/light-classes-base/src/org/jetbrains/kotlin/asJava/builder/LightElementOrigin.kt b/compiler/light-classes-base/src/org/jetbrains/kotlin/asJava/builder/LightElementOrigin.kt new file mode 100644 index 00000000000..ed061f10841 --- /dev/null +++ b/compiler/light-classes-base/src/org/jetbrains/kotlin/asJava/builder/LightElementOrigin.kt @@ -0,0 +1,65 @@ +/* + * 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.builder + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.psi.KtDeclaration +import org.jetbrains.kotlin.psi.KtParameter +import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKind + +interface LightElementOrigin { + val originalElement: PsiElement? + val originKind: JvmDeclarationOriginKind? + + object None : LightElementOrigin { + override val originalElement: PsiElement? + get() = null + override val originKind: JvmDeclarationOriginKind? + get() = null + + override fun toString() = "NONE" + } +} + +interface LightMemberOrigin : LightElementOrigin { + override val originalElement: KtDeclaration? + override val originKind: JvmDeclarationOriginKind + val parametersForJvmOverloads: List? get() = null + val auxiliaryOriginalElement: KtDeclaration? get() = null + + fun isValid(): Boolean + + fun isEquivalentTo(other: LightMemberOrigin?): Boolean + fun isEquivalentTo(other: PsiElement?): Boolean + + fun copy(): LightMemberOrigin +} + +data class LightMemberOriginForDeclaration( + override val originalElement: KtDeclaration, + override val originKind: JvmDeclarationOriginKind, + override val parametersForJvmOverloads: List? = null, + override val auxiliaryOriginalElement: KtDeclaration? = null +) : LightMemberOrigin { + override fun isValid(): Boolean = originalElement.isValid + + override fun isEquivalentTo(other: LightMemberOrigin?): Boolean { + if (other !is LightMemberOriginForDeclaration) return false + return isEquivalentTo(other.originalElement) + } + + override fun isEquivalentTo(other: PsiElement?): Boolean { + return originalElement.isEquivalentTo(other) + } + + override fun copy(): LightMemberOrigin { + return LightMemberOriginForDeclaration(originalElement.copy() as KtDeclaration, originKind, parametersForJvmOverloads) + } +} + +data class DefaultLightElementOrigin(override val originalElement: PsiElement?) : LightElementOrigin { + override val originKind: JvmDeclarationOriginKind? get() = null +} diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightElementOrigin.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightElementOrigin.kt index 99044c82efb..5eca3acc37c 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightElementOrigin.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightElementOrigin.kt @@ -1,17 +1,6 @@ /* - * 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. + * 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.builder @@ -19,72 +8,12 @@ package org.jetbrains.kotlin.asJava.builder import com.intellij.psi.PsiElement import org.jetbrains.kotlin.psi.KtAnnotationEntry import org.jetbrains.kotlin.psi.KtDeclaration -import org.jetbrains.kotlin.psi.KtParameter import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin -import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKind - -interface LightElementOrigin { - val originalElement: PsiElement? - val originKind: JvmDeclarationOriginKind? - - object None : LightElementOrigin { - override val originalElement: PsiElement? - get() = null - override val originKind: JvmDeclarationOriginKind? - get() = null - - override fun toString() = "NONE" - } -} - -fun JvmDeclarationOrigin.toLightMemberOrigin(): LightElementOrigin { - val originalElement = element - return when (originalElement) { - is KtAnnotationEntry -> DefaultLightElementOrigin(originalElement) - is KtDeclaration -> LightMemberOriginForDeclaration(originalElement, originKind, parametersForJvmOverload) - else -> LightElementOrigin.None - } -} - -interface LightMemberOrigin : LightElementOrigin { - override val originalElement: KtDeclaration? - override val originKind: JvmDeclarationOriginKind - val parametersForJvmOverloads: List? get() = null - val auxiliaryOriginalElement: KtDeclaration? get() = null - - fun isValid(): Boolean - - fun isEquivalentTo(other: LightMemberOrigin?): Boolean - fun isEquivalentTo(other: PsiElement?): Boolean - - fun copy(): LightMemberOrigin -} - -data class LightMemberOriginForDeclaration( - override val originalElement: KtDeclaration, - override val originKind: JvmDeclarationOriginKind, - override val parametersForJvmOverloads: List? = null, - override val auxiliaryOriginalElement: KtDeclaration? = null -) : LightMemberOrigin { - override fun isValid(): Boolean = originalElement.isValid - - override fun isEquivalentTo(other: LightMemberOrigin?): Boolean { - if (other !is LightMemberOriginForDeclaration) return false - return isEquivalentTo(other.originalElement) - } - - override fun isEquivalentTo(other: PsiElement?): Boolean { - return originalElement.isEquivalentTo(other) - } - - override fun copy(): LightMemberOrigin { - return LightMemberOriginForDeclaration(originalElement.copy() as KtDeclaration, originKind, parametersForJvmOverloads) - } -} - -data class DefaultLightElementOrigin(override val originalElement: PsiElement?) : LightElementOrigin { - override val originKind: JvmDeclarationOriginKind? get() = null +fun JvmDeclarationOrigin.toLightMemberOrigin(): LightElementOrigin = when (val originalElement = element) { + is KtAnnotationEntry -> DefaultLightElementOrigin(originalElement) + is KtDeclaration -> LightMemberOriginForDeclaration(originalElement, originKind, parametersForJvmOverload) + else -> LightElementOrigin.None } fun PsiElement?.toLightClassOrigin(): LightElementOrigin {