diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightField.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightField.kt index f97c70676ac..f6be5ef78ee 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightField.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightField.kt @@ -123,7 +123,7 @@ sealed class KtLightFieldImpl( fun create(origin: LightMemberOrigin?, delegate: PsiField, containingClass: KtLightClass): KtLightField { when (delegate) { is PsiEnumConstant -> { - val kotlinEnumEntry = origin?.originalElement as? KtEnumEntry + val kotlinEnumEntry = (origin as? LightMemberOriginForDeclaration)?.originalElement as? KtEnumEntry val initializingClass = if (kotlinEnumEntry != null && kotlinEnumEntry.declarations.isNotEmpty()) { val enumConstantFqName = FqName(containingClass.getFqName().asString() + "." + kotlinEnumEntry.name) KtLightClassForEnumEntry(enumConstantFqName, kotlinEnumEntry, delegate) diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightMethod.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightMethod.kt index 240ff98919a..a038874997b 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightMethod.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightMethod.kt @@ -28,15 +28,16 @@ import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKind interface KtLightMethod : PsiMethod, KtLightDeclaration { + val lightMethodOrigin: LightMemberOrigin? val isDelegated: Boolean } sealed class KtLightMethodImpl( override val clsDelegate: PsiMethod, - private val lightMethodOrigin: LightMemberOrigin?, + override val lightMethodOrigin: LightMemberOrigin?, containingClass: KtLightClass ) : LightMethod(clsDelegate.manager, clsDelegate, containingClass), KtLightMethod { - override val kotlinOrigin: KtDeclaration? = lightMethodOrigin?.originalElement as? KtDeclaration + override val kotlinOrigin: KtDeclaration? get() = lightMethodOrigin?.originalElement as? KtDeclaration private val lightIdentifier by lazy { KtLightIdentifier(this, kotlinOrigin as? KtNamedDeclaration) } @@ -58,22 +59,23 @@ sealed class KtLightMethodImpl( private val typeParamsList: CachedValue by lazy { val cacheManager = CachedValuesManager.getManager(clsDelegate.project) cacheManager.createCachedValue({ - val origin = kotlinOrigin - val list = if (origin is KtClassOrObject) { - KotlinLightTypeParameterListBuilder(manager) - } - else if (origin == null) { - clsDelegate.typeParameterList - } - else { - LightClassUtil.buildLightTypeParameterList(this@KtLightMethodImpl, origin) - } - CachedValueProvider.Result.create(list, PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT) - }, false) + val origin = (lightMethodOrigin as? LightMemberOriginForDeclaration)?.originalElement + val list = if (origin != null) { + if (origin is KtClassOrObject) { + KotlinLightTypeParameterListBuilder(manager) + } + else { + LightClassUtil.buildLightTypeParameterList(this@KtLightMethodImpl, origin) + } + } + else { + clsDelegate.typeParameterList + } + CachedValueProvider.Result.create(list, PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT) + }, false) } override fun getNavigationElement(): PsiElement = kotlinOrigin?.navigationElement ?: super.getNavigationElement() - override fun getOriginalElement(): PsiElement = kotlinOrigin ?: super.getOriginalElement() override fun getParent(): PsiElement? = containingClass override fun getText() = kotlinOrigin?.text ?: "" override fun getTextRange() = kotlinOrigin?.textRange ?: TextRange.EMPTY_RANGE @@ -152,11 +154,11 @@ sealed class KtLightMethodImpl( override fun equals(other: Any?): Boolean = other is KtLightMethod && name == other.name && - kotlinOrigin == other.kotlinOrigin && + lightMethodOrigin == other.lightMethodOrigin && containingClass == other.containingClass && clsDelegate == other.clsDelegate - override fun hashCode(): Int = ((name.hashCode() * 31 + (kotlinOrigin?.hashCode() ?: 0)) * 31 + containingClass.hashCode()) * 31 + clsDelegate.hashCode() + override fun hashCode(): Int = ((name.hashCode() * 31 + (lightMethodOrigin?.hashCode() ?: 0)) * 31 + containingClass.hashCode()) * 31 + clsDelegate.hashCode() override fun toString(): String = "${this.javaClass.simpleName}:$name" diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightParameter.java b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightParameter.java index 2b0105ad03d..cd12080d840 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightParameter.java +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightParameter.java @@ -105,6 +105,11 @@ public class KtLightParameter extends LightParameter implements KtLightDeclarati return origin != null ? origin : super.getNavigationElement(); } + @Override + public boolean isValid() { + return method.isValid(); + } + @Override public PsiElement setName(@NonNls @NotNull String name) throws IncorrectOperationException { KtParameter origin = getKotlinOrigin(); @@ -116,8 +121,7 @@ public class KtLightParameter extends LightParameter implements KtLightDeclarati @Override public PsiFile getContainingFile() { - KtDeclaration declaration = method.getKotlinOrigin(); - return declaration != null ? declaration.getContainingFile() : super.getContainingFile(); + return method.getContainingFile(); } @NotNull