KT-29862 startOffset of class declaration

NB startOffset of primary class constructor declaration should still
point to the 'class' keyword (because of debugger requirements).
This commit is contained in:
Dmitry Petrov
2019-02-15 13:49:28 +03:00
parent 92a160e6c3
commit 1b0d410a6f
9 changed files with 115 additions and 20 deletions
@@ -54,7 +54,7 @@ class ClassGenerator(
fun generateClass(ktClassOrObject: KtPureClassOrObject): IrClass {
val classDescriptor = ktClassOrObject.findClassDescriptor(this.context.bindingContext)
val startOffset = ktClassOrObject.getStartOffsetOfClassDeclarationKeywordOrNull() ?: ktClassOrObject.pureStartOffset
val startOffset = ktClassOrObject.getStartOffsetOfClassDeclarationOrNull() ?: ktClassOrObject.pureStartOffset
val endOffset = ktClassOrObject.pureEndOffset
return context.symbolTable.declareClass(
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.psi2ir.generators
import com.intellij.psi.tree.TokenSet
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
import org.jetbrains.kotlin.psi2ir.getChildTokenStartOffsetOrNull
private val FUNCTION_DECL_TOKENS = TokenSet.create(KtTokens.FUN_KEYWORD)
@@ -26,9 +27,9 @@ internal fun KtPureElement.getStartOffsetOfFunctionDeclarationKeywordOrNull(): I
else -> null
}
internal fun KtPureClassOrObject.getStartOffsetOfClassDeclarationKeywordOrNull(): Int? =
internal fun KtPureClassOrObject.getStartOffsetOfClassDeclarationOrNull(): Int? =
when (this) {
is KtClassOrObject -> getChildTokenStartOffsetOrNull(CLASS_DECL_TOKENS)
is KtClassOrObject -> startOffsetSkippingComments
else -> null
}