From 02543295f9e436fd28b9afa9aa59ff63d899414c Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Tue, 22 Mar 2016 17:56:15 +0300 Subject: [PATCH] Refactor: Make LightMemberOrigin an interface, extract one implementation --- .../asJava/ClsWrapperStubPsiFactory.java | 8 +++---- .../kotlin/asJava/KtWrappingLightClass.java | 2 +- .../kotlin/asJava/LightElementOrigin.kt | 21 +++++++++++++------ 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/ClsWrapperStubPsiFactory.java b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/ClsWrapperStubPsiFactory.java index 321eb338fa6..58be0a0c8a1 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/ClsWrapperStubPsiFactory.java +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/ClsWrapperStubPsiFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2010-2015 JetBrains s.r.o. + * 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. @@ -34,13 +34,13 @@ public class ClsWrapperStubPsiFactory extends StubPsiFactory { private final StubPsiFactory delegate = new ClsStubPsiFactory(); @Nullable - public static LightMemberOrigin getMemberOrigin(@NotNull PsiMember member) { + public static LightMemberOriginForDeclaration getMemberOrigin(@NotNull PsiMember member) { if (member instanceof ClsRepositoryPsiElement) { StubElement stubElement = ((ClsRepositoryPsiElement) member).getStub(); if (stubElement instanceof UserDataHolder) { LightElementOrigin origin = ((UserDataHolder) stubElement).getUserData(ORIGIN); - if (origin instanceof LightMemberOrigin) { - return (LightMemberOrigin) origin; + if (origin instanceof LightMemberOriginForDeclaration) { + return (LightMemberOriginForDeclaration) origin; } } } diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtWrappingLightClass.java b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtWrappingLightClass.java index 76833b52992..a95e4c17c11 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtWrappingLightClass.java +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtWrappingLightClass.java @@ -136,7 +136,7 @@ public abstract class KtWrappingLightClass extends AbstractLightClass implements return ArraysKt.map(getDelegate().getMethods(), new Function1() { @Override public PsiMethod invoke(PsiMethod method) { - LightMemberOrigin origin = ClsWrapperStubPsiFactory.getMemberOrigin(method); + LightMemberOriginForDeclaration origin = ClsWrapperStubPsiFactory.getMemberOrigin(method); KtDeclaration originalElement = origin != null ? origin.getOriginalElement() : null; if (originalElement instanceof KtPropertyAccessor) { //noinspection ConstantConditions diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightElementOrigin.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightElementOrigin.kt index adfbbec2fac..4d6fdbda6c7 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightElementOrigin.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightElementOrigin.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2015 JetBrains s.r.o. + * 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. @@ -40,13 +40,24 @@ interface LightElementOrigin { fun JvmDeclarationOrigin.toLightMemberOrigin(): LightElementOrigin { val originalElement = element return when (originalElement) { - is KtDeclaration -> LightMemberOrigin(originalElement, originKind) is KtAnnotationEntry -> DefaultLightElementOrigin(originalElement) + is KtDeclaration -> LightMemberOriginForDeclaration(originalElement, originKind) else -> LightElementOrigin.None } } -data class LightMemberOrigin(override val originalElement: KtDeclaration, override val originKind: JvmDeclarationOriginKind) : LightElementOrigin +interface LightMemberOrigin : LightElementOrigin { + override val originalElement: KtDeclaration? + override val originKind: JvmDeclarationOriginKind + + fun copy(): LightMemberOrigin +} + +data class LightMemberOriginForDeclaration(override val originalElement: KtDeclaration, override val originKind: JvmDeclarationOriginKind) : LightMemberOrigin { + override fun copy(): LightMemberOrigin { + return LightMemberOriginForDeclaration(originalElement.copy() as KtDeclaration, originKind) + } +} data class DefaultLightElementOrigin(override val originalElement: PsiElement?) : LightElementOrigin { override val originKind: JvmDeclarationOriginKind? get() = null @@ -54,6 +65,4 @@ data class DefaultLightElementOrigin(override val originalElement: PsiElement?) fun PsiElement?.toLightClassOrigin(): LightElementOrigin { return if (this != null) DefaultLightElementOrigin(this) else LightElementOrigin.None -} - -fun LightMemberOrigin.copy() = LightMemberOrigin(originalElement.copy() as KtDeclaration, originKind) \ No newline at end of file +} \ No newline at end of file