diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightClassForExplicitDeclaration.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightClassForExplicitDeclaration.kt index 53347a78c5f..e4ebdf78a06 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightClassForExplicitDeclaration.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightClassForExplicitDeclaration.kt @@ -19,12 +19,10 @@ package org.jetbrains.kotlin.asJava import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.util.Comparing import com.intellij.openapi.util.Key -import com.intellij.openapi.util.TextRange import com.intellij.psi.* import com.intellij.psi.impl.DebugUtil import com.intellij.psi.impl.java.stubs.PsiJavaFileStub import com.intellij.psi.impl.light.LightClass -import com.intellij.psi.impl.light.LightIdentifier import com.intellij.psi.impl.light.LightMethod import com.intellij.psi.scope.PsiScopeProcessor import com.intellij.psi.search.SearchScope @@ -58,6 +56,8 @@ open class KtLightClassForExplicitDeclaration( : KtWrappingLightClass(classOrObject.manager), KtJavaMirrorMarker, StubBasedPsiElement> { private var delegate: PsiClass? = null + private val lightIdentifier = KtLightIdentifier(this, classOrObject) + private fun getLocalClassParent(): PsiElement? { fun getParentByPsiMethod(method: PsiMethod?, name: String?, forceMethodWrapping: Boolean): PsiElement? { if (method == null || name == null) return null @@ -385,6 +385,8 @@ open class KtLightClassForExplicitDeclaration( override fun getElementType(): IStubElementType, *>? = classOrObject.elementType override fun getStub(): KotlinClassOrObjectStub? = classOrObject.stub + override fun getNameIdentifier() = lightIdentifier + companion object { private val JAVA_API_STUB = Key.create>("JAVA_API_STUB") 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 6b5183d276b..e74143b72cb 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightField.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightField.kt @@ -25,6 +25,7 @@ import org.jetbrains.kotlin.idea.KotlinLanguage import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtEnumEntry +import org.jetbrains.kotlin.psi.KtNamedDeclaration interface KtLightField : PsiField, KtLightDeclaration @@ -34,6 +35,8 @@ sealed class KtLightFieldImpl( private val delegate: PsiField, private val containingClass: KtLightClass ) : LightElement(delegate.manager, KotlinLanguage.INSTANCE), KtLightField { + private val lightIdentifier = KtLightIdentifier(this, origin as? KtNamedDeclaration) + @Throws(IncorrectOperationException::class) override fun setInitializer(initializer: PsiExpression?) = throw IncorrectOperationException("Not supported") @@ -41,7 +44,7 @@ sealed class KtLightFieldImpl( override fun getName() = delegate.name - override fun getNameIdentifier() = delegate.nameIdentifier + override fun getNameIdentifier() = lightIdentifier override fun getDocComment() = delegate.docComment diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightIdentifier.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightIdentifier.kt new file mode 100644 index 00000000000..057f258b4e1 --- /dev/null +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightIdentifier.kt @@ -0,0 +1,30 @@ +/* + * 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 + +import com.intellij.openapi.util.TextRange +import com.intellij.psi.PsiNameIdentifierOwner +import com.intellij.psi.impl.light.LightIdentifier +import org.jetbrains.kotlin.psi.KtNamedDeclaration + +class KtLightIdentifier( + private val lightOwner: PsiNameIdentifierOwner, + private val ktDeclaration: KtNamedDeclaration? +) : LightIdentifier(lightOwner.manager, ktDeclaration?.name ?: "") { + override fun getParent() = lightOwner + override fun getTextRange() = ktDeclaration?.nameIdentifier?.textRange ?: TextRange.EMPTY_RANGE +} \ No newline at end of file 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 9c02a69bf35..46ea07d6c9e 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightMethod.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightMethod.kt @@ -38,6 +38,8 @@ sealed class KtLightMethodImpl( ) : LightMethod(delegate.manager, delegate, containingClass), KtLightMethod { private val origin = lightMethodOrigin?.originalElement as? KtDeclaration + private val lightIdentifier = KtLightIdentifier(this, origin as? KtNamedDeclaration) + override fun getContainingClass(): KtLightClass = super.getContainingClass() as KtLightClass private val paramsList: CachedValue by lazy { @@ -112,6 +114,8 @@ sealed class KtLightMethodImpl( override fun getModifierList() = _modifierList + override fun getNameIdentifier() = lightIdentifier + override fun getParameterList() = paramsList.value override fun getTypeParameterList() = typeParamsList.value 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 f93690eb18c..d1190ef363a 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightParameter.java +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightParameter.java @@ -41,6 +41,7 @@ public class KtLightParameter extends LightParameter implements KtLightDeclarati private final PsiParameter delegate; private final int index; private final KtLightMethod method; + private final KtLightIdentifier lightIdentifier; public KtLightParameter(final PsiParameter delegate, int index, KtLightMethod method) { super(getName(delegate, index), delegate.getType(), method, KotlinLanguage.INSTANCE); @@ -55,6 +56,8 @@ public class KtLightParameter extends LightParameter implements KtLightDeclarati return delegate.getModifierList(); } }; + + lightIdentifier = new KtLightIdentifier(this, getOrigin()); } @NotNull @@ -140,4 +143,9 @@ public class KtLightParameter extends LightParameter implements KtLightDeclarati public String getText() { return ""; } + + @Override + public PsiIdentifier getNameIdentifier() { + return lightIdentifier; + } }