diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliExtraDiagnosticsProvider.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliExtraDiagnosticsProvider.kt index 729c209e2db..5bde17a58c3 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliExtraDiagnosticsProvider.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliExtraDiagnosticsProvider.kt @@ -12,12 +12,12 @@ import com.intellij.psi.util.CachedValuesManager import org.jetbrains.kotlin.asJava.KotlinAsJavaSupport import org.jetbrains.kotlin.asJava.KotlinExtraDiagnosticsProvider import org.jetbrains.kotlin.asJava.LightClassGenerationSupport +import org.jetbrains.kotlin.asJava.builder.LightClassDataHolder +import org.jetbrains.kotlin.asJava.builder.buildLightClass import org.jetbrains.kotlin.asJava.classes.getOutermostClassOrObject import org.jetbrains.kotlin.asJava.classes.safeIsLocal import org.jetbrains.kotlin.asJava.classes.safeScript import org.jetbrains.kotlin.asJava.classes.shouldNotBeVisibleAsLightClass -import org.jetbrains.kotlin.cli.jvm.compiler.builder.LightClassDataHolder -import org.jetbrains.kotlin.cli.jvm.compiler.builder.buildLightClass import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtFile diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliLightClassGenerationSupport.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliLightClassGenerationSupport.kt index 10e8811b404..cefecc7c63a 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliLightClassGenerationSupport.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliLightClassGenerationSupport.kt @@ -6,12 +6,16 @@ package org.jetbrains.kotlin.cli.jvm.compiler import com.intellij.openapi.project.Project +import org.jetbrains.kotlin.asJava.LightClassBuilder import org.jetbrains.kotlin.asJava.LightClassGenerationSupport +import org.jetbrains.kotlin.asJava.builder.InvalidLightClassDataHolder +import org.jetbrains.kotlin.asJava.builder.LightClassConstructionContext +import org.jetbrains.kotlin.asJava.builder.LightClassDataHolder +import org.jetbrains.kotlin.asJava.builder.LightClassDataHolderImpl import org.jetbrains.kotlin.asJava.classes.KtUltraLightSupport import org.jetbrains.kotlin.asJava.classes.cleanFromAnonymousTypes import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.classes.tryGetPredefinedName -import org.jetbrains.kotlin.cli.jvm.compiler.builder.* import org.jetbrains.kotlin.codegen.ClassBuilderMode import org.jetbrains.kotlin.codegen.JvmCodegenUtil import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper @@ -125,5 +129,3 @@ class CliLightClassGenerationSupport( override fun analyzeWithContent(element: KtClassOrObject) = traceHolder.bindingContext } - -typealias LightClassBuilder = (LightClassConstructionContext) -> LightClassBuilderResult diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/LightClassDataProvider.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/LightClassDataProvider.kt index a4064fe0fc3..1b233412c78 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/LightClassDataProvider.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/LightClassDataProvider.kt @@ -10,10 +10,10 @@ import com.intellij.psi.util.CachedValueProvider import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.kotlin.analyzer.KotlinModificationTrackerService import org.jetbrains.kotlin.asJava.LightClassGenerationSupport +import org.jetbrains.kotlin.asJava.builder.LightClassDataHolder +import org.jetbrains.kotlin.asJava.builder.buildLightClass import org.jetbrains.kotlin.asJava.classes.getOutermostClassOrObject import org.jetbrains.kotlin.asJava.classes.safeIsLocal -import org.jetbrains.kotlin.cli.jvm.compiler.builder.LightClassDataHolder -import org.jetbrains.kotlin.cli.jvm.compiler.builder.buildLightClass import org.jetbrains.kotlin.codegen.MemberCodegen import org.jetbrains.kotlin.codegen.state.GenerationState import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/builder/LightClassConstructionContext.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/builder/LightClassConstructionContext.kt deleted file mode 100644 index 17542da4eb1..00000000000 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/builder/LightClassConstructionContext.kt +++ /dev/null @@ -1,18 +0,0 @@ -/* - * 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.cli.jvm.compiler.builder - -import org.jetbrains.kotlin.config.JvmTarget -import org.jetbrains.kotlin.config.LanguageVersionSettings -import org.jetbrains.kotlin.descriptors.ModuleDescriptor -import org.jetbrains.kotlin.resolve.BindingContext - -open class LightClassConstructionContext( - val bindingContext: BindingContext, - val module: ModuleDescriptor, - val languageVersionSettings: LanguageVersionSettings?, - val jvmTarget: JvmTarget, -) \ No newline at end of file diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassGenerationSupport.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassGenerationSupport.kt index 4ad992cba66..bab06f96522 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassGenerationSupport.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassGenerationSupport.kt @@ -8,6 +8,8 @@ package org.jetbrains.kotlin.asJava import com.intellij.openapi.components.ServiceManager import com.intellij.openapi.project.Project import com.intellij.psi.PsiManager +import org.jetbrains.kotlin.asJava.builder.LightClassBuilderResult +import org.jetbrains.kotlin.asJava.builder.LightClassConstructionContext import org.jetbrains.kotlin.asJava.classes.* import org.jetbrains.kotlin.config.AnalysisFlags import org.jetbrains.kotlin.descriptors.DeclarationDescriptor @@ -19,6 +21,8 @@ import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluator import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyClassDescriptor +typealias LightClassBuilder = (LightClassConstructionContext) -> LightClassBuilderResult + abstract class LightClassGenerationSupport { abstract fun resolveToDescriptor(declaration: KtDeclaration): DeclarationDescriptor? diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/builder/KotlinLightClassBuilderFactory.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/KotlinLightClassBuilderFactory.kt similarity index 65% rename from compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/builder/KotlinLightClassBuilderFactory.kt rename to compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/KotlinLightClassBuilderFactory.kt index 815d23734eb..4f64ec52058 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/builder/KotlinLightClassBuilderFactory.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/KotlinLightClassBuilderFactory.kt @@ -1,9 +1,20 @@ /* - * 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. + * 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.kotlin.cli.jvm.compiler.builder +package org.jetbrains.kotlin.asJava.builder import com.intellij.openapi.diagnostic.Logger import com.intellij.psi.PsiElement @@ -22,8 +33,7 @@ class KotlinLightClassBuilderFactory(private val javaFileStub: PsiJavaFileStub) } override fun getClassBuilderMode(): ClassBuilderMode = ClassBuilderMode.LIGHT_CLASSES - override fun newClassBuilder(origin: JvmDeclarationOrigin) = - StubClassBuilder(stubStack, javaFileStub) + override fun newClassBuilder(origin: JvmDeclarationOrigin) = StubClassBuilder(stubStack, javaFileStub) override fun asText(builder: ClassBuilder) = throw UnsupportedOperationException("asText is not implemented") override fun asBytes(builder: ClassBuilder) = throw UnsupportedOperationException("asBytes is not implemented") @@ -32,9 +42,8 @@ class KotlinLightClassBuilderFactory(private val javaFileStub: PsiJavaFileStub) fun result(): PsiJavaFileStub { val pop = stubStack.pop() if (pop !== javaFileStub) { - LOG.error("Unbalanced stack operations: $pop") + LOG.error("Unbalanced stack operations: " + pop) } - return javaFileStub } } diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/builder/LightClassBuilder.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightClassBuilder.kt similarity index 97% rename from compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/builder/LightClassBuilder.kt rename to compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightClassBuilder.kt index e3171bc800e..e0b12bb03cc 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/builder/LightClassBuilder.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightClassBuilder.kt @@ -3,7 +3,7 @@ * 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.cli.jvm.compiler.builder +package org.jetbrains.kotlin.asJava.builder import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.progress.ProcessCanceledException @@ -13,7 +13,6 @@ import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.impl.compiled.ClsFileImpl import com.intellij.psi.impl.java.stubs.PsiJavaFileStub import com.intellij.psi.impl.java.stubs.impl.PsiJavaFileStubImpl -import org.jetbrains.kotlin.asJava.builder.ClsWrapperStubPsiFactory import org.jetbrains.kotlin.codegen.state.GenerationState import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.JVMConfigurationKeys diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightClassConstructionContext.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightClassConstructionContext.kt new file mode 100644 index 00000000000..30165a36e34 --- /dev/null +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightClassConstructionContext.kt @@ -0,0 +1,29 @@ +/* + * 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.kotlin.asJava.builder + +import org.jetbrains.kotlin.config.JvmTarget +import org.jetbrains.kotlin.config.LanguageVersionSettings +import org.jetbrains.kotlin.descriptors.ModuleDescriptor +import org.jetbrains.kotlin.resolve.BindingContext + +open class LightClassConstructionContext( + val bindingContext: BindingContext, + val module: ModuleDescriptor, + val languageVersionSettings: LanguageVersionSettings?, + val jvmTarget: JvmTarget, +) diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/builder/LightClassDataHolder.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightClassDataHolder.kt similarity index 94% rename from compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/builder/LightClassDataHolder.kt rename to compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightClassDataHolder.kt index eeef28470ad..9745827de59 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/builder/LightClassDataHolder.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightClassDataHolder.kt @@ -3,7 +3,7 @@ * 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.cli.jvm.compiler.builder +package org.jetbrains.kotlin.asJava.builder import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/builder/stubComputationTracker.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightClassDataProvider.kt similarity index 61% rename from compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/builder/stubComputationTracker.kt rename to compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightClassDataProvider.kt index b968d95177b..a914c6c7c79 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/builder/stubComputationTracker.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightClassDataProvider.kt @@ -3,14 +3,10 @@ * 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.cli.jvm.compiler.builder +package org.jetbrains.kotlin.asJava.builder -import com.intellij.openapi.project.Project import com.intellij.psi.impl.java.stubs.PsiJavaFileStub -fun stubComputationTrackerInstance(project: Project): StubComputationTracker? { - return project.getComponent(StubComputationTracker::class.java) -} interface StubComputationTracker { fun onStubComputed(javaFileStub: PsiJavaFileStub, context: LightClassConstructionContext) diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/MemberIndex.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/MemberIndex.kt new file mode 100644 index 00000000000..ceb16d65f79 --- /dev/null +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/MemberIndex.kt @@ -0,0 +1,32 @@ +/* + * 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.kotlin.asJava.builder + +import com.intellij.openapi.util.Key +import com.intellij.openapi.util.UserDataHolder +import com.intellij.psi.PsiMember +import com.intellij.psi.StubBasedPsiElement + +data class MemberIndex(private val index: Int) { + companion object { + @JvmField + val KEY = Key.create("MEMBER_INDEX") + } +} + +val PsiMember.memberIndex: MemberIndex? + get() = ((this as? StubBasedPsiElement<*>)?.stub as? UserDataHolder)?.getUserData(MemberIndex.KEY) \ No newline at end of file diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/builder/StubClassBuilder.java b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/StubClassBuilder.java similarity index 90% rename from compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/builder/StubClassBuilder.java rename to compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/StubClassBuilder.java index 53d09e01f99..1c33c8491d3 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/builder/StubClassBuilder.java +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/StubClassBuilder.java @@ -1,9 +1,20 @@ /* - * 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. + * 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.kotlin.cli.jvm.compiler.builder; +package org.jetbrains.kotlin.asJava.builder; import com.intellij.psi.PsiElement; import com.intellij.psi.impl.compiled.InnerClassSourceStrategy; @@ -15,9 +26,6 @@ import com.intellij.psi.stubs.StubElement; import com.intellij.util.containers.Stack; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.kotlin.asJava.builder.ClsWrapperStubPsiFactory; -import org.jetbrains.kotlin.asJava.builder.LightElementOrigin; -import org.jetbrains.kotlin.asJava.builder.LightElementOriginKt; import org.jetbrains.kotlin.codegen.AbstractClassBuilder; import org.jetbrains.kotlin.fileClasses.OldPackageFacadeClassUtils; import org.jetbrains.kotlin.name.FqName; @@ -46,6 +54,7 @@ public class StubClassBuilder extends AbstractClassBuilder { private StubBuildingVisitor v; private final Stack parentStack; private boolean isPackageClass = false; + private int memberIndex = 0; public StubClassBuilder(@NotNull Stack parentStack, @NotNull PsiJavaFileStub fileStub) { this.parentStack = parentStack; @@ -190,6 +199,7 @@ public class StubClassBuilder extends AbstractClassBuilder { } last.putUserData(ClsWrapperStubPsiFactory.ORIGIN, LightElementOriginKt.toLightMemberOrigin(origin)); + last.putUserData(MemberIndex.KEY, new MemberIndex(memberIndex++)); } @Override diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/stubComputationTracker.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/stubComputationTracker.kt new file mode 100644 index 00000000000..85874a3a4e8 --- /dev/null +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/stubComputationTracker.kt @@ -0,0 +1,14 @@ +/* + * Copyright 2010-2019 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.openapi.project.Project + +fun stubComputationTrackerInstance(project: Project): StubComputationTracker? { + return project.getComponent(StubComputationTracker::class.java) +} + + diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightMethods.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightMethods.kt index d7dd0c81a80..203f3a132e8 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightMethods.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightMethods.kt @@ -14,6 +14,7 @@ import com.intellij.psi.javadoc.PsiDocComment import com.intellij.psi.util.MethodSignature import com.intellij.psi.util.MethodSignatureBackedByPsiMethod import org.jetbrains.kotlin.asJava.builder.LightMemberOriginForDeclaration +import org.jetbrains.kotlin.asJava.builder.MemberIndex import org.jetbrains.kotlin.asJava.elements.KtLightAbstractAnnotation import org.jetbrains.kotlin.asJava.elements.KtLightMethodImpl import org.jetbrains.kotlin.asJava.elements.KtUltraLightModifierList @@ -121,7 +122,10 @@ internal abstract class KtUltraLightMethod( abstract val checkNeedToErasureParametersTypes: Boolean - override val psiTypeForNullabilityAnnotation: PsiType? get() = returnType + override val memberIndex: MemberIndex? = null + + override val psiTypeForNullabilityAnnotation: PsiType? + get() = returnType // These two overrides are necessary because ones from KtLightMethodImpl suppose that clsDelegate.returnTypeElement is valid // While here we only set return type for LightMethodBuilder (see org.jetbrains.kotlin.asJava.classes.KtUltraLightClass.asJavaMethod) diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightMethodImpl.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightMethodImpl.kt index e200e7e8bf7..855b3073034 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightMethodImpl.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightMethodImpl.kt @@ -13,6 +13,7 @@ import com.intellij.psi.util.MethodSignatureBackedByPsiMethod import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.kotlin.asJava.* import org.jetbrains.kotlin.asJava.builder.LightMemberOriginForDeclaration +import org.jetbrains.kotlin.asJava.builder.MemberIndex import org.jetbrains.kotlin.asJava.classes.KtLightClass import org.jetbrains.kotlin.asJava.classes.cannotModify import org.jetbrains.kotlin.asJava.classes.lazyPub @@ -97,6 +98,8 @@ abstract class KtLightMethodImpl protected constructor( return typeParameters.all { processor.execute(it, state) } } + protected abstract val memberIndex: MemberIndex? + /* comparing origin and member index should be enough to determine equality: for compiled elements origin contains delegate for source elements index is unique to each member @@ -104,10 +107,13 @@ abstract class KtLightMethodImpl protected constructor( override fun equals(other: Any?): Boolean = other === this || other is KtLightMethodImpl && other.javaClass == javaClass && + other.memberIndex == memberIndex && other.containingClass == containingClass && other.lightMemberOrigin == lightMemberOrigin - override fun hashCode(): Int = name.hashCode().times(31).plus(containingClass.hashCode()) + override fun hashCode(): Int = name.hashCode() + .times(31).plus(containingClass.hashCode()) + .times(31).plus(memberIndex.hashCode()) abstract override fun getDefaultValue(): PsiAnnotationMemberValue?