Light classes: Fix getTextOffset() for identifiers

Before this commit, getTextOffset() and getTextRange() implementations were inconsistent.
This commit is contained in:
Yan Zhulanow
2019-07-03 17:10:56 +09:00
parent 0f4085066f
commit 7078302e6c
2 changed files with 40 additions and 0 deletions
@@ -46,4 +46,5 @@ open class KtLightIdentifier(
override fun getParent() = lightOwner
override fun getContainingFile() = lightOwner.containingFile
override fun getTextRange() = origin?.textRange ?: TextRange.EMPTY_RANGE
override fun getTextOffset(): Int = origin?.textOffset ?: -1
}
@@ -0,0 +1,39 @@
/*
* 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.idea.lightClasses
import com.intellij.psi.PsiMethod
import com.intellij.testFramework.LightProjectDescriptor
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor
import org.jetbrains.kotlin.test.JUnit3WithIdeaConfigurationRunner
import org.junit.runner.RunWith
@RunWith(JUnit3WithIdeaConfigurationRunner::class)
class LightClassBehaviorTest : KotlinLightCodeInsightFixtureTestCase() {
fun testIdentifierOffsets() {
myFixture.configureByText(
"test.kt", """
class A {
fun foo() {}
}
""".trimIndent()
)
val aClass = myFixture.javaFacade.findClass("A")!!
val fooMethodName = (aClass.findMethodsByName("foo").single() as PsiMethod).nameIdentifier!!
val offset = fooMethodName.textOffset
val range = fooMethodName.textRange
assert(offset > 0)
assert(offset == range.startOffset)
}
override fun getProjectDescriptor(): LightProjectDescriptor {
return KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE
}
}