From e3ec501419afca7fa66e61811c9514626dbf34f7 Mon Sep 17 00:00:00 2001 From: Igor Yakovlev Date: Mon, 13 May 2019 15:30:41 +0300 Subject: [PATCH] Fix realization of LightClass methods by KtLightClassForSourceDeclaration #KT-31022 Fixed --- .../KtLightClassForSourceDeclaration.kt | 31 +++++++++---------- .../kotlin/asJava/LightClassFromTextTest.kt | 16 ++++++++++ 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForSourceDeclaration.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForSourceDeclaration.kt index 105d2324b35..01690623b05 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForSourceDeclaration.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForSourceDeclaration.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-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.classes @@ -22,6 +11,7 @@ import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.project.Project import com.intellij.openapi.util.Comparing import com.intellij.openapi.util.Key +import com.intellij.openapi.util.TextRange import com.intellij.openapi.util.registry.Registry import com.intellij.psi.* import com.intellij.psi.impl.PsiSubstitutorImpl @@ -48,10 +38,7 @@ import org.jetbrains.kotlin.asJava.builder.InvalidLightClassDataHolder import org.jetbrains.kotlin.asJava.builder.LightClassData import org.jetbrains.kotlin.asJava.builder.LightClassDataHolder import org.jetbrains.kotlin.asJava.builder.LightClassDataProviderForClassOrObject -import org.jetbrains.kotlin.asJava.elements.FakeFileForLightClass -import org.jetbrains.kotlin.asJava.elements.KtLightIdentifier -import org.jetbrains.kotlin.asJava.elements.KtLightModifierList -import org.jetbrains.kotlin.asJava.elements.KtLightPsiReferenceList +import org.jetbrains.kotlin.asJava.elements.* import org.jetbrains.kotlin.asJava.hasInterfaceDefaultImpls import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap @@ -77,6 +64,16 @@ abstract class KtLightClassForSourceDeclaration( StubBasedPsiElement> { private val lightIdentifier = KtLightIdentifier(this, classOrObject) + override fun getText() = kotlinOrigin.text ?: "" + + override fun getTextRange(): TextRange = kotlinOrigin.textRange ?: TextRange.EMPTY_RANGE + + override fun getTextOffset() = kotlinOrigin.textOffset + + override fun getStartOffsetInParent() = kotlinOrigin.startOffsetInParent + + override fun isWritable() = kotlinOrigin.isWritable + private val _extendsList by lazyPub { createExtendsList() } private val _implementsList by lazyPub { createImplementsList() } diff --git a/idea/tests/org/jetbrains/kotlin/asJava/LightClassFromTextTest.kt b/idea/tests/org/jetbrains/kotlin/asJava/LightClassFromTextTest.kt index 972d0b99f74..e8e86183a14 100644 --- a/idea/tests/org/jetbrains/kotlin/asJava/LightClassFromTextTest.kt +++ b/idea/tests/org/jetbrains/kotlin/asJava/LightClassFromTextTest.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.asJava +import com.intellij.openapi.util.TextRange import com.intellij.psi.PsiClass import com.intellij.psi.PsiClassType import com.intellij.psi.PsiType @@ -32,6 +33,21 @@ class LightClassFromTextTest : KotlinLightCodeInsightFixtureTestCase() { assertEquals("O", classes[1].qualifiedName) } + fun testLightClassImplementation() { + myFixture.configureByText("Dummy.kt", "") as KtFile + val classes = classesFromText("import something\nclass C;") + + assertEquals(1, classes.size) + + val classC = classes[0] + assertEquals("C", classC.qualifiedName) + assertEquals("class C", classC.text) + assertEquals(TextRange(17, 24), classC.textRange) + assertEquals(23, classC.textOffset) + assertEquals(17, classC.startOffsetInParent) + assertTrue(classC.isWritable) + } + fun testFileClass() { myFixture.configureByText("A.kt", "fun f() {}") as KtFile val classes = classesFromText("fun g() {}", fileName = "A.kt")