From 00036ba49808fa9cb8c534346e22a45175322ef2 Mon Sep 17 00:00:00 2001 From: Dmitry Savvinov Date: Wed, 18 Apr 2018 17:57:47 +0300 Subject: [PATCH] [BE IR] Skip comments for determining startOffset of declaration --- .../jetbrains/kotlin/psi2ir/KotlinUtils.kt | 6 +-- .../AnonymousInitializerGenerator.kt | 6 +-- .../generators/ArgumentsGenerationUtils.kt | 18 +++---- .../psi2ir/generators/AssignmentGenerator.kt | 22 ++++---- .../kotlin/psi2ir/generators/BodyGenerator.kt | 27 +++++----- .../BranchingExpressionGenerator.kt | 22 ++++---- .../kotlin/psi2ir/generators/CallGenerator.kt | 4 +- .../psi2ir/generators/ClassGenerator.kt | 6 +-- .../psi2ir/generators/DeclarationGenerator.kt | 6 +-- .../generators/DelegatedPropertyGenerator.kt | 32 ++++++------ .../generators/ErrorExpressionGenerator.kt | 8 +-- .../psi2ir/generators/FunctionGenerator.kt | 8 +-- .../psi2ir/generators/LocalClassGenerator.kt | 4 +- .../generators/LocalFunctionGenerator.kt | 6 +-- .../generators/LoopExpressionGenerator.kt | 20 ++++---- .../generators/OperatorExpressionGenerator.kt | 28 +++++----- .../psi2ir/generators/PropertyGenerator.kt | 12 ++--- .../ReflectionReferencesGenerator.kt | 8 +-- .../psi2ir/generators/StatementGenerator.kt | 44 ++++++++-------- .../generators/TryCatchExpressionGenerator.kt | 8 +-- .../jetbrains/kotlin/psi/psiUtil/psiUtils.kt | 19 ++++--- compiler/testData/ir/sourceRanges/comments.kt | 34 +++++++++++++ .../testData/ir/sourceRanges/comments.txt | 51 +++++++++++++++++++ compiler/testData/ir/sourceRanges/kt17108.txt | 32 ++++++------ .../ir/IrSourceRangesTestCaseGenerated.java | 5 ++ 25 files changed, 267 insertions(+), 169 deletions(-) create mode 100644 compiler/testData/ir/sourceRanges/comments.kt create mode 100644 compiler/testData/ir/sourceRanges/comments.txt diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/KotlinUtils.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/KotlinUtils.kt index 3bf36661a0a..4501fb2caf4 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/KotlinUtils.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/KotlinUtils.kt @@ -24,7 +24,7 @@ import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.endOffset -import org.jetbrains.kotlin.psi.psiUtil.startOffset +import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.calls.model.ArgumentMatch @@ -74,7 +74,7 @@ fun MemberScope.findSingleFunction(name: Name): FunctionDescriptor = fun KotlinBuiltIns.findSingleFunction(name: Name): FunctionDescriptor = builtInsPackageScope.findSingleFunction(name) -val PsiElement?.startOffsetOrUndefined get() = this?.startOffset ?: UNDEFINED_OFFSET +val PsiElement?.startOffsetOrUndefined get() = this?.startOffsetSkippingComments ?: UNDEFINED_OFFSET val PsiElement?.endOffsetOrUndefined get() = this?.endOffset ?: UNDEFINED_OFFSET val PropertyDescriptor.unwrappedGetMethod: FunctionDescriptor? @@ -83,5 +83,5 @@ val PropertyDescriptor.unwrappedGetMethod: FunctionDescriptor? val PropertyDescriptor.unwrappedSetMethod: FunctionDescriptor? get() = if (this is SyntheticPropertyDescriptor) this.setMethod else setter -val KtPureElement?.pureStartOffsetOrUndefined get() = this?.psiOrParent?.startOffset ?: UNDEFINED_OFFSET +val KtPureElement?.pureStartOffsetOrUndefined get() = this?.psiOrParent?.startOffsetSkippingComments ?: UNDEFINED_OFFSET val KtPureElement?.pureEndOffsetOrUndefined get() = this?.psiOrParent?.endOffset ?: UNDEFINED_OFFSET \ No newline at end of file diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/AnonymousInitializerGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/AnonymousInitializerGenerator.kt index e81277d8201..2529d5ee18a 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/AnonymousInitializerGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/AnonymousInitializerGenerator.kt @@ -23,7 +23,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl import org.jetbrains.kotlin.psi.KtAnonymousInitializer import org.jetbrains.kotlin.psi.KtBlockExpression import org.jetbrains.kotlin.psi.psiUtil.endOffset -import org.jetbrains.kotlin.psi.psiUtil.startOffset +import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments class AnonymousInitializerGenerator( declarationGenerator: DeclarationGenerator @@ -34,12 +34,12 @@ class AnonymousInitializerGenerator( classDescriptor: ClassDescriptor ): IrDeclaration = context.symbolTable.declareAnonymousInitializer( - ktAnonymousInitializer.startOffset, ktAnonymousInitializer.endOffset, IrDeclarationOrigin.DEFINED, classDescriptor + ktAnonymousInitializer.startOffsetSkippingComments, ktAnonymousInitializer.endOffset, IrDeclarationOrigin.DEFINED, classDescriptor ).buildWithScope { irAnonymousInitializer -> val bodyGenerator = createBodyGenerator(irAnonymousInitializer.symbol) val statementGenerator = bodyGenerator.createStatementGenerator() val ktBody = ktAnonymousInitializer.body!! - val irBlockBody = IrBlockBodyImpl(ktBody.startOffset, ktBody.endOffset) + val irBlockBody = IrBlockBodyImpl(ktBody.startOffsetSkippingComments, ktBody.endOffset) if (ktBody is KtBlockExpression) { statementGenerator.generateStatements(ktBody.statements, irBlockBody) } else { diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ArgumentsGenerationUtils.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ArgumentsGenerationUtils.kt index f4bddecc45c..a560be0e40f 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ArgumentsGenerationUtils.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ArgumentsGenerationUtils.kt @@ -27,7 +27,7 @@ import org.jetbrains.kotlin.ir.expressions.IrExpressionWithCopy import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.psiUtil.endOffset -import org.jetbrains.kotlin.psi.psiUtil.startOffset +import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments import org.jetbrains.kotlin.psi2ir.intermediate.* import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.DescriptorUtils @@ -44,7 +44,7 @@ fun StatementGenerator.generateReceiverOrNull(ktDefaultElement: KtElement, recei receiver?.let { generateReceiver(ktDefaultElement, receiver) } fun StatementGenerator.generateReceiver(ktDefaultElement: KtElement, receiver: ReceiverValue): IntermediateValue = - generateReceiver(ktDefaultElement.startOffset, ktDefaultElement.endOffset, receiver) + generateReceiver(ktDefaultElement.startOffsetSkippingComments, ktDefaultElement.endOffset, receiver) fun StatementGenerator.generateReceiver(defaultStartOffset: Int, defaultEndOffset: Int, receiver: ReceiverValue): IntermediateValue { val irReceiverType = receiver.type.toIrType() @@ -71,7 +71,7 @@ fun StatementGenerator.generateReceiver(defaultStartOffset: Int, defaultEndOffse generateExpression(receiver.expression) is ClassValueReceiver -> IrGetObjectValueImpl( - receiver.expression.startOffset, receiver.expression.endOffset, irReceiverType, + receiver.expression.startOffsetSkippingComments, receiver.expression.endOffset, irReceiverType, context.symbolTable.referenceClass(receiver.classQualifier.descriptor as ClassDescriptor) ) is ExtensionReceiver -> @@ -132,7 +132,7 @@ private fun StatementGenerator.generateThisOrSuperReceiver(receiver: ReceiverVal receiver as? ExpressionReceiver ?: throw AssertionError("'this' or 'super' receiver should be an expression receiver") val ktReceiver = expressionReceiver.expression return IrGetValueImpl( - ktReceiver.startOffset, ktReceiver.endOffset, + ktReceiver.startOffsetSkippingComments, ktReceiver.endOffset, expressionReceiver.type.toIrType(), context.symbolTable.referenceValueParameter(classDescriptor.thisAsReceiverParameter) ) @@ -164,7 +164,7 @@ fun StatementGenerator.generateCallReceiver( "Call for member imported from object $calleeDescriptor has non-null dispatch receiver $dispatchReceiver" } dispatchReceiverValue = - generateReceiverForCalleeImportedFromObject(ktDefaultElement.startOffset, ktDefaultElement.endOffset, calleeDescriptor) + generateReceiverForCalleeImportedFromObject(ktDefaultElement.startOffsetSkippingComments, ktDefaultElement.endOffset, calleeDescriptor) extensionReceiverValue = generateReceiverOrNull(ktDefaultElement, extensionReceiver) } is TypeAliasConstructorDescriptor -> { @@ -186,7 +186,7 @@ fun StatementGenerator.generateCallReceiver( SimpleCallReceiver(dispatchReceiverValue, extensionReceiverValue) extensionReceiverValue != null || dispatchReceiverValue != null -> SafeCallReceiver( - this, ktDefaultElement.startOffset, ktDefaultElement.endOffset, + this, ktDefaultElement.startOffsetSkippingComments, ktDefaultElement.endOffset, extensionReceiverValue, dispatchReceiverValue, isAssignmentReceiver ) else -> @@ -218,7 +218,7 @@ fun StatementGenerator.generateVarargExpression( } val varargStartOffset = varargArgument.arguments.fold(Int.MAX_VALUE) { minStartOffset, argument -> - Math.min(minStartOffset, argument.asElement().startOffset) + Math.min(minStartOffset, argument.asElement().startOffsetSkippingComments) } val varargEndOffset = varargArgument.arguments.fold(Int.MIN_VALUE) { maxEndOffset, argument -> Math.max(maxEndOffset, argument.asElement().endOffset) @@ -235,7 +235,7 @@ fun StatementGenerator.generateVarargExpression( val irVarargElement = if (argument.getSpreadElement() != null) IrSpreadElementImpl( - ktArgumentExpression.startOffset, ktArgumentExpression.endOffset, + ktArgumentExpression.startOffsetSkippingComments, ktArgumentExpression.endOffset, generateExpression(ktArgumentExpression) ) else @@ -333,7 +333,7 @@ fun StatementGenerator.pregenerateExtensionInvokeCall(resolvedCall: ResolvedCall call.callReceiver = if (resolvedCall.call.isSafeCall()) SafeExtensionInvokeCallReceiver( - this, ktCallElement.startOffset, ktCallElement.endOffset, + this, ktCallElement.startOffsetSkippingComments, ktCallElement.endOffset, call, functionReceiverValue, extensionInvokeReceiverValue ) else diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/AssignmentGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/AssignmentGenerator.kt index 5c758466ba8..cb992e6ca0b 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/AssignmentGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/AssignmentGenerator.kt @@ -28,7 +28,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl import org.jetbrains.kotlin.ir.util.referenceFunction import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.endOffset -import org.jetbrains.kotlin.psi.psiUtil.startOffset +import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments import org.jetbrains.kotlin.psi2ir.intermediate.* import org.jetbrains.kotlin.psi2ir.unwrappedGetMethod import org.jetbrains.kotlin.psi2ir.unwrappedSetMethod @@ -76,7 +76,7 @@ class AssignmentGenerator(statementGenerator: StatementGenerator) : StatementGen val irAssignmentReceiver = generateAssignmentReceiver(ktBaseExpression, origin) return irAssignmentReceiver.assign { irLValue -> - irBlock(ktExpression.startOffset, ktExpression.endOffset, origin, irLValue.type) { + irBlock(ktExpression.startOffsetSkippingComments, ktExpression.endOffset, origin, irLValue.type) { val opCall = statementGenerator.pregenerateCall(opResolvedCall) opCall.setExplicitReceiverValue(irLValue) val irOpCall = CallGenerator(statementGenerator).generateCall(ktExpression, opCall, origin) @@ -92,7 +92,7 @@ class AssignmentGenerator(statementGenerator: StatementGenerator) : StatementGen val irAssignmentReceiver = generateAssignmentReceiver(ktBaseExpression, origin) return irAssignmentReceiver.assign { irLValue -> - irBlock(ktExpression.startOffset, ktExpression.endOffset, origin, irLValue.type) { + irBlock(ktExpression.startOffsetSkippingComments, ktExpression.endOffset, origin, irLValue.type) { val temporary = irTemporary(irLValue.load()) val opCall = statementGenerator.pregenerateCall(opResolvedCall) opCall.setExplicitReceiverValue( @@ -116,7 +116,7 @@ class AssignmentGenerator(statementGenerator: StatementGenerator) : StatementGen return when (descriptor) { is SyntheticFieldDescriptor -> { val receiverValue = - statementGenerator.generateBackingFieldReceiver(ktLeft.startOffset, ktLeft.endOffset, resolvedCall, descriptor) + statementGenerator.generateBackingFieldReceiver(ktLeft.startOffsetSkippingComments, ktLeft.endOffset, resolvedCall, descriptor) createBackingFieldLValue(ktLeft, descriptor.propertyDescriptor, receiverValue, origin) } is LocalVariableDescriptor -> @@ -124,7 +124,7 @@ class AssignmentGenerator(statementGenerator: StatementGenerator) : StatementGen if (descriptor.isDelegated) DelegatedLocalPropertyLValue( context, - ktLeft.startOffset, ktLeft.endOffset, + ktLeft.startOffsetSkippingComments, ktLeft.endOffset, descriptor.type.toIrType(), descriptor.getter?.let { context.symbolTable.referenceDeclaredFunction(it) }, descriptor.setter?.let { context.symbolTable.referenceDeclaredFunction(it) }, @@ -148,7 +148,7 @@ class AssignmentGenerator(statementGenerator: StatementGenerator) : StatementGen ) = VariableLValue( context, - ktExpression.startOffset, ktExpression.endOffset, + ktExpression.startOffsetSkippingComments, ktExpression.endOffset, context.symbolTable.referenceValue(descriptor), descriptor.type.toIrType(), origin @@ -162,7 +162,7 @@ class AssignmentGenerator(statementGenerator: StatementGenerator) : StatementGen ): BackingFieldLValue = BackingFieldLValue( context, - ktExpression.startOffset, ktExpression.endOffset, + ktExpression.startOffsetSkippingComments, ktExpression.endOffset, descriptor.type.toIrType(), context.symbolTable.referenceField(descriptor), receiverValue, origin @@ -179,7 +179,7 @@ class AssignmentGenerator(statementGenerator: StatementGenerator) : StatementGen val thisAsReceiverParameter = thisClass.thisAsReceiverParameter val thisType = thisAsReceiverParameter.type.toIrType() val irThis = IrGetValueImpl( - ktLeft.startOffset, ktLeft.endOffset, + ktLeft.startOffsetSkippingComments, ktLeft.endOffset, thisType, context.symbolTable.referenceValueParameter(thisAsReceiverParameter) ) @@ -222,7 +222,7 @@ class AssignmentGenerator(statementGenerator: StatementGenerator) : StatementGen AccessorPropertyLValue( context, scope, - ktExpression.startOffset, ktExpression.endOffset, origin, + ktExpression.startOffsetSkippingComments, ktExpression.endOffset, origin, propertyIrType, getterSymbol, getterDescriptor, @@ -236,7 +236,7 @@ class AssignmentGenerator(statementGenerator: StatementGenerator) : StatementGen FieldPropertyLValue( context, scope, - ktExpression.startOffset, ktExpression.endOffset, origin, + ktExpression.startOffsetSkippingComments, ktExpression.endOffset, origin, context.symbolTable.referenceField(descriptor), propertyIrType, propertyReceiver, @@ -275,7 +275,7 @@ class AssignmentGenerator(statementGenerator: StatementGenerator) : StatementGen return ArrayAccessAssignmentReceiver( irArray, irIndexExpressions, indexedGetCall, indexedSetCall, CallGenerator(statementGenerator), - ktLeft.startOffset, ktLeft.endOffset, origin + ktLeft.startOffsetSkippingComments, ktLeft.endOffset, origin ) } diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/BodyGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/BodyGenerator.kt index c875b4535f3..c8cdd6592e6 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/BodyGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/BodyGenerator.kt @@ -28,6 +28,7 @@ import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.pureEndOffset import org.jetbrains.kotlin.psi.psiUtil.pureStartOffset import org.jetbrains.kotlin.psi.psiUtil.startOffset +import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments import org.jetbrains.kotlin.psi.synthetics.findClassDescriptor import org.jetbrains.kotlin.psi2ir.intermediate.VariableLValue import org.jetbrains.kotlin.resolve.BindingContext @@ -52,7 +53,7 @@ class BodyGenerator( fun generateFunctionBody(ktBody: KtExpression): IrBody { val statementGenerator = createStatementGenerator() - val irBlockBody = IrBlockBodyImpl(ktBody.startOffset, ktBody.endOffset) + val irBlockBody = IrBlockBodyImpl(ktBody.startOffsetSkippingComments, ktBody.endOffset) if (ktBody is KtBlockExpression) { statementGenerator.generateStatements(ktBody.statements, irBlockBody) } else { @@ -69,14 +70,14 @@ class BodyGenerator( val statementGenerator = createStatementGenerator() val ktBody = ktFun.bodyExpression!! - val irBlockBody = IrBlockBodyImpl(ktBody.startOffset, ktBody.endOffset) + val irBlockBody = IrBlockBodyImpl(ktBody.startOffsetSkippingComments, ktBody.endOffset) for (ktParameter in ktFun.valueParameters) { val ktDestructuringDeclaration = ktParameter.destructuringDeclaration ?: continue val valueParameter = getOrFail(BindingContext.VALUE_PARAMETER, ktParameter) val parameterValue = VariableLValue( context, - ktDestructuringDeclaration.startOffset, ktDestructuringDeclaration.endOffset, + ktDestructuringDeclaration.startOffsetSkippingComments, ktDestructuringDeclaration.endOffset, context.symbolTable.referenceValue(valueParameter), valueParameter.type.toIrType(), IrStatementOrigin.DESTRUCTURING_DECLARATION @@ -94,9 +95,9 @@ class BodyGenerator( } else { irBlockBody.statements.add( generateReturnExpression( - ktBody.startOffset, ktBody.endOffset, + ktBody.startOffsetSkippingComments, ktBody.endOffset, IrGetObjectValueImpl( - ktBody.startOffset, ktBody.endOffset, context.irBuiltIns.unitType, + ktBody.startOffsetSkippingComments, ktBody.endOffset, context.irBuiltIns.unitType, context.symbolTable.referenceClass(context.builtIns.unit) ) ) @@ -134,7 +135,7 @@ class BodyGenerator( fun generateSecondaryConstructorBody(ktConstructor: KtSecondaryConstructor): IrBody { - val irBlockBody = IrBlockBodyImpl(ktConstructor.startOffset, ktConstructor.endOffset) + val irBlockBody = IrBlockBodyImpl(ktConstructor.startOffsetSkippingComments, ktConstructor.endOffset) generateDelegatingConstructorCall(irBlockBody, ktConstructor) @@ -164,7 +165,7 @@ class BodyGenerator( val delegatingConstructorCall = statementGenerator.pregenerateCall(delegatingConstructorResolvedCall) val irDelegatingConstructorCall = CallGenerator(statementGenerator).generateDelegatingConstructorCall( - ktDelegatingConstructorCall.startOffset, ktDelegatingConstructorCall.endOffset, + ktDelegatingConstructorCall.startOffsetSkippingComments, ktDelegatingConstructorCall.endOffset, delegatingConstructorCall ) irBlockBody.statements.add(irDelegatingConstructorCall) @@ -197,14 +198,14 @@ class BodyGenerator( } fun generateSecondaryConstructorBodyWithNestedInitializers(ktConstructor: KtSecondaryConstructor): IrBody { - val irBlockBody = IrBlockBodyImpl(ktConstructor.startOffset, ktConstructor.endOffset) + val irBlockBody = IrBlockBodyImpl(ktConstructor.startOffsetSkippingComments, ktConstructor.endOffset) generateDelegatingConstructorCall(irBlockBody, ktConstructor) val classDescriptor = getOrFail(BindingContext.CONSTRUCTOR, ktConstructor).containingDeclaration as ClassDescriptor irBlockBody.statements.add( IrInstanceInitializerCallImpl( - ktConstructor.startOffset, ktConstructor.endOffset, + ktConstructor.startOffsetSkippingComments, ktConstructor.endOffset, context.symbolTable.referenceClass(classDescriptor), context.irBuiltIns.unitType ) @@ -239,7 +240,7 @@ class BodyGenerator( if (ktSuperTypeListEntry is KtSuperTypeCallEntry) { val superConstructorCall = statementGenerator.pregenerateCall(getResolvedCall(ktSuperTypeListEntry)!!) val irSuperConstructorCall = CallGenerator(statementGenerator).generateDelegatingConstructorCall( - ktSuperTypeListEntry.startOffset, ktSuperTypeListEntry.endOffset, superConstructorCall + ktSuperTypeListEntry.startOffsetSkippingComments, ktSuperTypeListEntry.endOffset, superConstructorCall ) irBlockBody.statements.add(irSuperConstructorCall) return @@ -278,7 +279,7 @@ class BodyGenerator( val enumConstructor = context.builtIns.enum.constructors.single() irBlockBody.statements.add( IrEnumConstructorCallImpl( - ktElement.startOffset, ktElement.endOffset, + ktElement.startOffsetSkippingComments, ktElement.endOffset, context.irBuiltIns.unitType, context.symbolTable.referenceConstructor(enumConstructor), 1 // kotlin.Enum has a single type parameter @@ -296,7 +297,7 @@ class BodyGenerator( if (ktEnumEntry.declarations.isNotEmpty()) { val enumEntryConstructor = enumEntryDescriptor.unsubstitutedPrimaryConstructor!! return IrEnumConstructorCallImpl( - ktEnumEntry.startOffset, ktEnumEntry.endOffset, + ktEnumEntry.startOffsetSkippingComments, ktEnumEntry.endOffset, context.irBuiltIns.unitType, context.symbolTable.referenceConstructor(enumEntryConstructor), 0 // enums can't be generic @@ -328,7 +329,7 @@ class BodyGenerator( ktEnumEntry: KtEnumEntry ) = CallGenerator(this).generateEnumConstructorSuperCall( - ktEnumEntry.startOffset, ktEnumEntry.endOffset, + ktEnumEntry.startOffsetSkippingComments, ktEnumEntry.endOffset, pregenerateCall(constructorCall) ) diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/BranchingExpressionGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/BranchingExpressionGenerator.kt index ff3e9eddcda..0bcc7018255 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/BranchingExpressionGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/BranchingExpressionGenerator.kt @@ -28,7 +28,7 @@ import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.classifierOrNull import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.endOffset -import org.jetbrains.kotlin.psi.psiUtil.startOffset +import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments import org.jetbrains.kotlin.psi2ir.deparenthesize import org.jetbrains.kotlin.psi2ir.intermediate.defaultLoad import org.jetbrains.kotlin.resolve.BindingContext @@ -71,12 +71,12 @@ class BranchingExpressionGenerator(statementGenerator: StatementGenerator) : Sta ): IrWhen { if (irBranches.size == 1) { val irBranch0 = irBranches[0] - return buildStatement(ktIf.startOffset, ktIf.endOffset) { + return buildStatement(ktIf.startOffsetSkippingComments, ktIf.endOffset) { irIfThenMaybeElse(resultType, irBranch0.condition, irBranch0.result, irElseResult) } } - val irWhen = IrWhenImpl(ktIf.startOffset, ktIf.endOffset, resultType, IrStatementOrigin.WHEN) + val irWhen = IrWhenImpl(ktIf.startOffsetSkippingComments, ktIf.endOffset, resultType, IrStatementOrigin.WHEN) irWhen.branches.addAll(irBranches) @@ -108,7 +108,7 @@ class BranchingExpressionGenerator(statementGenerator: StatementGenerator) : Sta else -> context.irBuiltIns.unitType } - val irWhen = IrWhenImpl(expression.startOffset, expression.endOffset, resultType, IrStatementOrigin.WHEN) + val irWhen = IrWhenImpl(expression.startOffsetSkippingComments, expression.endOffset, resultType, IrStatementOrigin.WHEN) for (ktEntry in expression.entries) { if (ktEntry.isElse) { @@ -169,16 +169,16 @@ class BranchingExpressionGenerator(statementGenerator: StatementGenerator) : Sta private fun generateWhenBody(expression: KtWhenExpression, irSubject: IrVariable?, irWhen: IrWhen): IrExpression = if (irSubject == null) { if (irWhen.branches.isEmpty()) - IrBlockImpl(expression.startOffset, expression.endOffset, context.irBuiltIns.unitType, IrStatementOrigin.WHEN) + IrBlockImpl(expression.startOffsetSkippingComments, expression.endOffset, context.irBuiltIns.unitType, IrStatementOrigin.WHEN) else irWhen } else { if (irWhen.branches.isEmpty()) { - val irBlock = IrBlockImpl(expression.startOffset, expression.endOffset, context.irBuiltIns.unitType, IrStatementOrigin.WHEN) + val irBlock = IrBlockImpl(expression.startOffsetSkippingComments, expression.endOffset, context.irBuiltIns.unitType, IrStatementOrigin.WHEN) irBlock.statements.add(irSubject) irBlock } else { - val irBlock = IrBlockImpl(expression.startOffset, expression.endOffset, irWhen.type, IrStatementOrigin.WHEN) + val irBlock = IrBlockImpl(expression.startOffsetSkippingComments, expression.endOffset, irWhen.type, IrStatementOrigin.WHEN) irBlock.statements.add(irSubject) irBlock.statements.add(irWhen) irBlock @@ -206,7 +206,7 @@ class BranchingExpressionGenerator(statementGenerator: StatementGenerator) : Sta val irTypeOperand = typeOperand.toIrType() val typeSymbol = irTypeOperand.classifierOrNull ?: throw AssertionError("Not a classifier type: $typeOperand") val irInstanceOf = IrTypeOperatorCallImpl( - ktCondition.startOffset, ktCondition.endOffset, + ktCondition.startOffsetSkippingComments, ktCondition.endOffset, context.irBuiltIns.booleanType, IrTypeOperator.INSTANCEOF, irTypeOperand, typeSymbol, @@ -214,7 +214,7 @@ class BranchingExpressionGenerator(statementGenerator: StatementGenerator) : Sta ) return if (ktCondition.isNegated) IrUnaryPrimitiveImpl( - ktCondition.startOffset, ktCondition.endOffset, + ktCondition.startOffsetSkippingComments, ktCondition.endOffset, context.irBuiltIns.booleanType, IrStatementOrigin.EXCL, context.irBuiltIns.booleanNotSymbol, irInstanceOf @@ -233,7 +233,7 @@ class BranchingExpressionGenerator(statementGenerator: StatementGenerator) : Sta irInCall IrStatementOrigin.NOT_IN -> IrUnaryPrimitiveImpl( - ktCondition.startOffset, ktCondition.endOffset, + ktCondition.startOffsetSkippingComments, ktCondition.endOffset, context.irBuiltIns.booleanType, IrStatementOrigin.EXCL, context.irBuiltIns.booleanNotSymbol, irInCall @@ -246,7 +246,7 @@ class BranchingExpressionGenerator(statementGenerator: StatementGenerator) : Sta val ktExpression = ktCondition.expression val irExpression = ktExpression!!.genExpr() return OperatorExpressionGenerator(statementGenerator).generateEquality( - ktCondition.startOffset, ktCondition.endOffset, IrStatementOrigin.EQEQ, + ktCondition.startOffsetSkippingComments, ktCondition.endOffset, IrStatementOrigin.EQEQ, irSubject.defaultLoad(), irExpression, context.bindingContext[BindingContext.PRIMITIVE_NUMERIC_COMPARISON_INFO, ktExpression] ) diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/CallGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/CallGenerator.kt index 3a23d8de450..0791de8a6d0 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/CallGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/CallGenerator.kt @@ -24,7 +24,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.util.referenceFunction import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.psiUtil.endOffset -import org.jetbrains.kotlin.psi.psiUtil.startOffset +import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments import org.jetbrains.kotlin.psi2ir.intermediate.* import org.jetbrains.kotlin.psi2ir.unwrappedGetMethod import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall @@ -260,7 +260,7 @@ class CallGenerator(statementGenerator: StatementGenerator) : StatementGenerator } fun CallGenerator.generateCall(ktElement: KtElement, call: CallBuilder, origin: IrStatementOrigin? = null) = - generateCall(ktElement.startOffset, ktElement.endOffset, call, origin) + generateCall(ktElement.startOffsetSkippingComments, ktElement.endOffset, call, origin) fun CallGenerator.generateCall(irExpression: IrExpression, call: CallBuilder, origin: IrStatementOrigin? = null) = generateCall(irExpression.startOffset, irExpression.endOffset, call, origin) diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt index de551bdce82..5ee38eef0b3 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt @@ -35,7 +35,7 @@ import org.jetbrains.kotlin.psi.KtPureClassOrObject import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.pureEndOffset import org.jetbrains.kotlin.psi.psiUtil.pureStartOffset -import org.jetbrains.kotlin.psi.psiUtil.startOffset +import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments import org.jetbrains.kotlin.psi.synthetics.SyntheticClassOrObjectDescriptor import org.jetbrains.kotlin.psi.synthetics.findClassDescriptor import org.jetbrains.kotlin.resolve.BindingContext @@ -141,7 +141,7 @@ class ClassGenerator( ?: throw AssertionError("Unexpected supertype constructor for delegation: $superTypeConstructorDescriptor") val delegateDescriptor = IrImplementingDelegateDescriptorImpl(irClass.descriptor, delegateType, superType) val irDelegateField = context.symbolTable.declareField( - ktDelegateExpression.startOffset, ktDelegateExpression.endOffset, + ktDelegateExpression.startOffsetSkippingComments, ktDelegateExpression.endOffset, IrDeclarationOrigin.DELEGATE, delegateDescriptor, delegateDescriptor.type.toIrType(), createBodyGenerator(irClass.symbol).generateExpressionBody(ktDelegateExpression) @@ -385,7 +385,7 @@ class ClassGenerator( fun generateEnumEntry(ktEnumEntry: KtEnumEntry): IrEnumEntry { val enumEntryDescriptor = getOrFail(BindingContext.CLASS, ktEnumEntry) return context.symbolTable.declareEnumEntry( - ktEnumEntry.startOffset, + ktEnumEntry.startOffsetSkippingComments, ktEnumEntry.endOffset, IrDeclarationOrigin.DEFINED, enumEntryDescriptor diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DeclarationGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DeclarationGenerator.kt index 9928bc81819..b150f459a6a 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DeclarationGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DeclarationGenerator.kt @@ -26,7 +26,7 @@ import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.ir.util.withScope import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.endOffset -import org.jetbrains.kotlin.psi.psiUtil.startOffset +import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments import org.jetbrains.kotlin.psi2ir.endOffsetOrUndefined import org.jetbrains.kotlin.psi2ir.pureEndOffsetOrUndefined import org.jetbrains.kotlin.psi2ir.pureStartOffsetOrUndefined @@ -53,7 +53,7 @@ class DeclarationGenerator(override val context: GeneratorContext) : Generator { generateTypeAliasDeclaration(ktDeclaration) else -> IrErrorDeclarationImpl( - ktDeclaration.startOffset, ktDeclaration.endOffset, + ktDeclaration.startOffsetSkippingComments, ktDeclaration.endOffset, getOrFail(BindingContext.DECLARATION_TO_DESCRIPTOR, ktDeclaration) ) } @@ -82,7 +82,7 @@ class DeclarationGenerator(override val context: GeneratorContext) : Generator { private fun generateTypeAliasDeclaration(ktDeclaration: KtTypeAlias): IrDeclaration = IrTypeAliasImpl( - ktDeclaration.startOffset, ktDeclaration.endOffset, IrDeclarationOrigin.DEFINED, + ktDeclaration.startOffsetSkippingComments, ktDeclaration.endOffset, IrDeclarationOrigin.DEFINED, getOrFail(BindingContext.TYPE_ALIAS, ktDeclaration) ) diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DelegatedPropertyGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DelegatedPropertyGenerator.kt index e08cff3010b..d02a2293f31 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DelegatedPropertyGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DelegatedPropertyGenerator.kt @@ -39,7 +39,7 @@ import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtProperty import org.jetbrains.kotlin.psi.KtPropertyDelegate import org.jetbrains.kotlin.psi.psiUtil.endOffset -import org.jetbrains.kotlin.psi.psiUtil.startOffset +import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments import org.jetbrains.kotlin.psi2ir.intermediate.* import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.types.KotlinType @@ -56,7 +56,7 @@ class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : D val kPropertyType = getKPropertyTypeForDelegatedProperty(propertyDescriptor) val irProperty = IrPropertyImpl( - ktProperty.startOffset, ktProperty.endOffset, IrDeclarationOrigin.DEFINED, + ktProperty.startOffsetSkippingComments, ktProperty.endOffset, IrDeclarationOrigin.DEFINED, isDelegated = true, descriptor = propertyDescriptor ).apply { @@ -97,7 +97,7 @@ class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : D generateBody: (IrFunction) -> IrBody ): IrSimpleFunction = context.symbolTable.declareSimpleFunctionWithOverrides( - ktDelegate.startOffset, ktDelegate.endOffset, + ktDelegate.startOffsetSkippingComments, ktDelegate.endOffset, IrDeclarationOrigin.DELEGATED_PROPERTY_ACCESSOR, accessorDescriptor ).buildWithScope { irAccessor -> @@ -125,7 +125,7 @@ class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : D val delegateDescriptor = createPropertyDelegateDescriptor(propertyDescriptor, delegateType, kPropertyType) return context.symbolTable.declareField( - ktDelegate.startOffset, ktDelegate.endOffset, IrDeclarationOrigin.DELEGATE, + ktDelegate.startOffsetSkippingComments, ktDelegate.endOffset, IrDeclarationOrigin.DELEGATE, delegateDescriptor, delegateDescriptor.type.toIrType() ).also { irDelegate -> irDelegate.initializer = generateInitializerBodyForPropertyDelegate( @@ -152,7 +152,7 @@ class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : D provideDelegateCall.setExplicitReceiverValue(OnceExpressionValue(irDelegateInitializer.expression)) provideDelegateCall.irValueArgumentsByIndex[1] = createCallableReference(ktDelegate, kPropertyType, property, scopeOwner) val irProvideDelegate = - CallGenerator(statementGenerator).generateCall(ktDelegate.startOffset, ktDelegate.endOffset, provideDelegateCall) + CallGenerator(statementGenerator).generateCall(ktDelegate.startOffsetSkippingComments, ktDelegate.endOffset, provideDelegateCall) return IrExpressionBodyImpl(irProvideDelegate) } @@ -164,7 +164,7 @@ class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : D val thisValue = createThisValueForDelegate(thisClass, ktDelegate) return BackingFieldLValue( context, - ktDelegate.startOffset, ktDelegate.endOffset, + ktDelegate.startOffsetSkippingComments, ktDelegate.endOffset, irDelegateField.descriptor.type.toIrType(), irDelegateField, thisValue, @@ -177,7 +177,7 @@ class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : D generateExpressionValue(it.thisAsReceiverParameter.type.toIrType()) { val thisAsReceiverParameter = thisClass.thisAsReceiverParameter IrGetValueImpl( - ktDelegate.startOffset, ktDelegate.endOffset, + ktDelegate.startOffsetSkippingComments, ktDelegate.endOffset, thisAsReceiverParameter.type.toIrType(), context.symbolTable.referenceValueParameter(thisAsReceiverParameter) ) @@ -191,7 +191,7 @@ class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : D statementGenerator: StatementGenerator ): IrCallableReference = ReflectionReferencesGenerator(statementGenerator).generateCallableReference( - ktElement.startOffset, ktElement.endOffset, type, + ktElement.startOffsetSkippingComments, ktElement.endOffset, type, referencedDescriptor, null, IrStatementOrigin.PROPERTY_REFERENCE_FOR_DELEGATE ) @@ -215,7 +215,7 @@ class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : D scopeOwner: IrSymbol ): IrLocalDelegatedPropertyReference = ReflectionReferencesGenerator(createBodyGenerator(scopeOwner).createStatementGenerator()).generateLocalDelegatedPropertyReference( - ktElement.startOffset, ktElement.endOffset, + ktElement.startOffsetSkippingComments, ktElement.endOffset, type, variableDescriptor, irDelegateSymbol, IrStatementOrigin.PROPERTY_REFERENCE_FOR_DELEGATE ) @@ -229,7 +229,7 @@ class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : D val kPropertyType = getKPropertyTypeForLocalDelegatedProperty(variableDescriptor) val irLocalDelegatedProperty = IrLocalDelegatedPropertyImpl( - ktProperty.startOffset, ktProperty.endOffset, IrDeclarationOrigin.DEFINED, + ktProperty.startOffsetSkippingComments, ktProperty.endOffset, IrDeclarationOrigin.DEFINED, variableDescriptor, variableDescriptor.type.toIrType() ).apply { @@ -280,7 +280,7 @@ class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : D val delegateDescriptor = createLocalPropertyDelegatedDescriptor(variableDescriptor, delegateType, kPropertyType) return context.symbolTable.declareVariable( - ktDelegate.startOffset, ktDelegate.endOffset, IrDeclarationOrigin.DELEGATE, + ktDelegate.startOffsetSkippingComments, ktDelegate.endOffset, IrDeclarationOrigin.DELEGATE, delegateDescriptor, delegateDescriptor.type.toIrType() ).also { irVariable -> irVariable.initializer = generateInitializerForLocalDelegatedPropertyDelegate( @@ -323,11 +323,11 @@ class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : D createLocalDelegatedPropertyReference(ktDelegate, kPropertyType, variableDescriptor, delegateSymbol, scopeOwner) } - return CallGenerator(statementGenerator).generateCall(ktDelegate.startOffset, ktDelegate.endOffset, provideDelegateCall) + return CallGenerator(statementGenerator).generateCall(ktDelegate.startOffsetSkippingComments, ktDelegate.endOffset, provideDelegateCall) } private fun createVariableValueForDelegate(irDelegate: IrVariableSymbol, ktDelegate: KtPropertyDelegate) = - VariableLValue(context, ktDelegate.startOffset, ktDelegate.endOffset, irDelegate, irDelegate.descriptor.type.toIrType()) + VariableLValue(context, ktDelegate.startOffsetSkippingComments, ktDelegate.endOffset, irDelegate, irDelegate.descriptor.type.toIrType()) private inline fun createLocalPropertyAccessor( getterDescriptor: VariableAccessorDescriptor, @@ -335,7 +335,7 @@ class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : D generateBody: (IrFunction) -> IrBody ) = context.symbolTable.declareSimpleFunctionWithOverrides( - ktDelegate.startOffset, ktDelegate.endOffset, + ktDelegate.startOffsetSkippingComments, ktDelegate.endOffset, IrDeclarationOrigin.DELEGATED_PROPERTY_ACCESSOR, getterDescriptor ).buildWithScope { irAccessor -> @@ -369,7 +369,7 @@ class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : D irPropertyReference: IrCallableReference ): IrBody = with(createBodyGenerator(irGetter.symbol)) { - val startOffset = ktDelegate.startOffset + val startOffset = ktDelegate.startOffsetSkippingComments val endOffset = ktDelegate.endOffset irBlockBody(startOffset, endOffset) { val statementGenerator = createStatementGenerator() @@ -394,7 +394,7 @@ class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : D delegateReceiverValue: IntermediateValue, irPropertyReference: IrCallableReference ): IrBody = with(createBodyGenerator(irSetter.symbol)) { - val startOffset = ktDelegate.startOffset + val startOffset = ktDelegate.startOffsetSkippingComments val endOffset = ktDelegate.endOffset irBlockBody(startOffset, endOffset) { val statementGenerator = createStatementGenerator() diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ErrorExpressionGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ErrorExpressionGenerator.kt index 6f6c45f18fe..9ebd63d4307 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ErrorExpressionGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ErrorExpressionGenerator.kt @@ -21,7 +21,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrErrorCallExpressionImpl import org.jetbrains.kotlin.ir.expressions.impl.IrErrorExpressionImpl import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.endOffset -import org.jetbrains.kotlin.psi.psiUtil.startOffset +import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments import org.jetbrains.kotlin.types.ErrorUtils class ErrorExpressionGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) { @@ -41,7 +41,7 @@ class ErrorExpressionGenerator(statementGenerator: StatementGenerator) : Stateme else ErrorUtils.createErrorType("") IrErrorExpressionImpl( - ktElement.startOffset, ktElement.endOffset, + ktElement.startOffsetSkippingComments, ktElement.endOffset, errorExpressionType.toIrType(), e.message ?: "" ) @@ -50,7 +50,7 @@ class ErrorExpressionGenerator(statementGenerator: StatementGenerator) : Stateme fun generateErrorCall(ktCall: KtCallExpression): IrExpression = generateErrorExpression(ktCall) { val type = getErrorExpressionType(ktCall).toIrType() - val irErrorCall = IrErrorCallExpressionImpl(ktCall.startOffset, ktCall.endOffset, type, "") // TODO problem description? + val irErrorCall = IrErrorCallExpressionImpl(ktCall.startOffsetSkippingComments, ktCall.endOffset, type, "") // TODO problem description? irErrorCall.explicitReceiver = (ktCall.parent as? KtDotQualifiedExpression)?.run { receiverExpression.genExpr() } @@ -71,7 +71,7 @@ class ErrorExpressionGenerator(statementGenerator: StatementGenerator) : Stateme fun generateErrorSimpleName(ktName: KtSimpleNameExpression): IrExpression = generateErrorExpression(ktName) { val type = getErrorExpressionType(ktName).toIrType() - val irErrorCall = IrErrorCallExpressionImpl(ktName.startOffset, ktName.endOffset, type, "") // TODO problem description? + val irErrorCall = IrErrorCallExpressionImpl(ktName.startOffsetSkippingComments, ktName.endOffset, type, "") // TODO problem description? irErrorCall.explicitReceiver = (ktName.parent as? KtDotQualifiedExpression)?.let { ktParent -> if (ktParent.receiverExpression == ktName) null else ktParent.receiverExpression.genExpr() diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/FunctionGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/FunctionGenerator.kt index 8f17c62fe8b..28b1ce16c4f 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/FunctionGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/FunctionGenerator.kt @@ -27,7 +27,7 @@ import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.pureEndOffset import org.jetbrains.kotlin.psi.psiUtil.pureStartOffset -import org.jetbrains.kotlin.psi.psiUtil.startOffset +import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments import org.jetbrains.kotlin.psi2ir.* import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils @@ -144,7 +144,7 @@ class FunctionGenerator(declarationGenerator: DeclarationGenerator) : Declaratio ): IrBlockBody { val property = getter.correspondingProperty - val startOffset = ktProperty.startOffset + val startOffset = ktProperty.startOffsetSkippingComments val endOffset = ktProperty.endOffset val irBody = IrBlockBodyImpl(startOffset, endOffset) @@ -172,7 +172,7 @@ class FunctionGenerator(declarationGenerator: DeclarationGenerator) : Declaratio ): IrBlockBody { val property = setter.correspondingProperty - val startOffset = ktProperty.startOffset + val startOffset = ktProperty.startOffsetSkippingComments val endOffset = ktProperty.endOffset val irBody = IrBlockBodyImpl(startOffset, endOffset) @@ -197,7 +197,7 @@ class FunctionGenerator(declarationGenerator: DeclarationGenerator) : Declaratio is ClassDescriptor -> { val thisAsReceiverParameter = containingDeclaration.thisAsReceiverParameter IrGetValueImpl( - ktProperty.startOffset, ktProperty.endOffset, + ktProperty.startOffsetSkippingComments, ktProperty.endOffset, thisAsReceiverParameter.type.toIrType(), context.symbolTable.referenceValue(thisAsReceiverParameter) ) diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/LocalClassGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/LocalClassGenerator.kt index cd02cfa9ae5..1c77f050802 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/LocalClassGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/LocalClassGenerator.kt @@ -23,11 +23,11 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtObjectLiteralExpression import org.jetbrains.kotlin.psi.psiUtil.endOffset -import org.jetbrains.kotlin.psi.psiUtil.startOffset +import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments class LocalClassGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) { fun generateObjectLiteral(ktObjectLiteral: KtObjectLiteralExpression): IrStatement { - val startOffset = ktObjectLiteral.startOffset + val startOffset = ktObjectLiteral.startOffsetSkippingComments val endOffset = ktObjectLiteral.endOffset val objectLiteralType = getInferredTypeWithImplicitCastsOrFail(ktObjectLiteral).toIrType() val irBlock = IrBlockImpl(startOffset, endOffset, objectLiteralType, IrStatementOrigin.OBJECT_LITERAL) diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/LocalFunctionGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/LocalFunctionGenerator.kt index ec03780e41d..15f6e19a23d 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/LocalFunctionGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/LocalFunctionGenerator.kt @@ -24,7 +24,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrFunctionReferenceImpl import org.jetbrains.kotlin.psi.KtLambdaExpression import org.jetbrains.kotlin.psi.KtNamedFunction import org.jetbrains.kotlin.psi.psiUtil.endOffset -import org.jetbrains.kotlin.psi.psiUtil.startOffset +import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments class LocalFunctionGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) { fun generateLambda(ktLambda: KtLambdaExpression): IrStatement { @@ -50,14 +50,14 @@ class LocalFunctionGenerator(statementGenerator: StatementGenerator) : Statement } else { // anonymous function expression val funExpressionType = getInferredTypeWithImplicitCastsOrFail(ktFun).toIrType() - val irBlock = IrBlockImpl(ktFun.startOffset, ktFun.endOffset, funExpressionType, IrStatementOrigin.ANONYMOUS_FUNCTION) + val irBlock = IrBlockImpl(ktFun.startOffsetSkippingComments, ktFun.endOffset, funExpressionType, IrStatementOrigin.ANONYMOUS_FUNCTION) val irFun = generateFunctionDeclaration(ktFun) irBlock.statements.add(irFun) irBlock.statements.add( IrFunctionReferenceImpl( - ktFun.startOffset, ktFun.endOffset, funExpressionType, + ktFun.startOffsetSkippingComments, ktFun.endOffset, funExpressionType, irFun.symbol, irFun.symbol.descriptor, 0, IrStatementOrigin.ANONYMOUS_FUNCTION ) diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/LoopExpressionGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/LoopExpressionGenerator.kt index 534e8c891cb..3ec2ade364e 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/LoopExpressionGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/LoopExpressionGenerator.kt @@ -24,7 +24,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.getParentOfType -import org.jetbrains.kotlin.psi.psiUtil.startOffset +import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments import org.jetbrains.kotlin.psi2ir.intermediate.VariableLValue import org.jetbrains.kotlin.psi2ir.intermediate.setExplicitReceiverValue import org.jetbrains.kotlin.resolve.BindingContext @@ -32,7 +32,7 @@ import org.jetbrains.kotlin.resolve.BindingContext class LoopExpressionGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) { fun generateWhileLoop(ktWhile: KtWhileExpression): IrExpression { val irLoop = IrWhileLoopImpl( - ktWhile.startOffset, ktWhile.endOffset, + ktWhile.startOffsetSkippingComments, ktWhile.endOffset, context.irBuiltIns.unitType, IrStatementOrigin.WHILE_LOOP ) @@ -54,7 +54,7 @@ class LoopExpressionGenerator(statementGenerator: StatementGenerator) : Statemen fun generateDoWhileLoop(ktDoWhile: KtDoWhileExpression): IrExpression { val irLoop = IrDoWhileLoopImpl( - ktDoWhile.startOffset, ktDoWhile.endOffset, + ktDoWhile.startOffsetSkippingComments, ktDoWhile.endOffset, context.irBuiltIns.unitType, IrStatementOrigin.DO_WHILE_LOOP ) @@ -71,21 +71,21 @@ class LoopExpressionGenerator(statementGenerator: StatementGenerator) : Statemen irLoop.label = getLoopLabel(ktDoWhile) - return IrBlockImpl(ktDoWhile.startOffset, ktDoWhile.endOffset, context.irBuiltIns.unitType).apply { + return IrBlockImpl(ktDoWhile.startOffsetSkippingComments, ktDoWhile.endOffset, context.irBuiltIns.unitType).apply { statements.add(irLoop) } } private fun generateWhileLoopBody(ktLoopBody: KtBlockExpression): IrExpression = IrBlockImpl( - ktLoopBody.startOffset, ktLoopBody.endOffset, context.irBuiltIns.unitType, null, + ktLoopBody.startOffsetSkippingComments, ktLoopBody.endOffset, context.irBuiltIns.unitType, null, ktLoopBody.statements.map { it.genStmt() } ) private fun generateDoWhileLoopBody(ktLoopBody: KtBlockExpression): IrExpression = IrCompositeImpl( - ktLoopBody.startOffset, ktLoopBody.endOffset, context.irBuiltIns.unitType, null, + ktLoopBody.startOffsetSkippingComments, ktLoopBody.endOffset, context.irBuiltIns.unitType, null, ktLoopBody.statements.map { it.genStmt() } ) @@ -93,7 +93,7 @@ class LoopExpressionGenerator(statementGenerator: StatementGenerator) : Statemen val parentLoop = findParentLoop(ktBreak) ?: return ErrorExpressionGenerator(statementGenerator).generateErrorExpression( ktBreak, RuntimeException("Loop not found for break expression: ${ktBreak.text}") ) - return IrBreakImpl(ktBreak.startOffset, ktBreak.endOffset, context.irBuiltIns.nothingType, parentLoop).apply { + return IrBreakImpl(ktBreak.startOffsetSkippingComments, ktBreak.endOffset, context.irBuiltIns.nothingType, parentLoop).apply { label = ktBreak.getLabelName() } } @@ -102,7 +102,7 @@ class LoopExpressionGenerator(statementGenerator: StatementGenerator) : Statemen val parentLoop = findParentLoop(ktContinue) ?: return ErrorExpressionGenerator(statementGenerator).generateErrorExpression( ktContinue, RuntimeException("Loop not found for continue expression: ${ktContinue.text}") ) - return IrContinueImpl(ktContinue.startOffset, ktContinue.endOffset, context.irBuiltIns.nothingType, parentLoop).apply { + return IrContinueImpl(ktContinue.startOffsetSkippingComments, ktContinue.endOffset, context.irBuiltIns.nothingType, parentLoop).apply { label = ktContinue.getLabelName() } } @@ -154,7 +154,7 @@ class LoopExpressionGenerator(statementGenerator: StatementGenerator) : Statemen val callGenerator = CallGenerator(statementGenerator) - val startOffset = ktFor.startOffset + val startOffset = ktFor.startOffsetSkippingComments val endOffset = ktFor.endOffset val irForBlock = IrBlockImpl(startOffset, endOffset, context.irBuiltIns.unitType, IrStatementOrigin.FOR_LOOP) @@ -185,7 +185,7 @@ class LoopExpressionGenerator(statementGenerator: StatementGenerator) : Statemen if (ktLoopParameter != null && ktLoopDestructuringDeclaration == null) { val loopParameter = getOrFail(BindingContext.VALUE_PARAMETER, ktLoopParameter) context.symbolTable.declareVariable( - ktLoopParameter.startOffset, ktLoopParameter.endOffset, IrDeclarationOrigin.FOR_LOOP_VARIABLE, + ktLoopParameter.startOffsetSkippingComments, ktLoopParameter.endOffset, IrDeclarationOrigin.FOR_LOOP_VARIABLE, loopParameter, loopParameter.type.toIrType(), irNextCall ) diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/OperatorExpressionGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/OperatorExpressionGenerator.kt index ef9fb30ad0f..88cd5497c5b 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/OperatorExpressionGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/OperatorExpressionGenerator.kt @@ -33,7 +33,7 @@ import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.endOffset -import org.jetbrains.kotlin.psi.psiUtil.startOffset +import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments import org.jetbrains.kotlin.psi2ir.containsNull import org.jetbrains.kotlin.psi2ir.findSingleFunction import org.jetbrains.kotlin.psi2ir.intermediate.safeCallOnDispatchReceiver @@ -52,7 +52,7 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat private fun createErrorExpression(ktExpression: KtExpression, text: String) = IrErrorExpressionImpl( - ktExpression.startOffset, + ktExpression.startOffsetSkippingComments, ktExpression.endOffset, context.irBuiltIns.nothingType, text @@ -103,7 +103,7 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat } return IrTypeOperatorCallImpl( - expression.startOffset, expression.endOffset, resultType.toIrType(), irOperator, rhsType.toIrType(), + expression.startOffsetSkippingComments, expression.endOffset, resultType.toIrType(), irOperator, rhsType.toIrType(), context.symbolTable.referenceClassifier(rhsType.constructor.declarationDescriptor!!), expression.left.genExpr() ) @@ -115,7 +115,7 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat val againstType = getOrFail(BindingContext.TYPE, expression.typeReference) return IrTypeOperatorCallImpl( - expression.startOffset, expression.endOffset, context.irBuiltIns.booleanType, irOperator, + expression.startOffsetSkippingComments, expression.endOffset, context.irBuiltIns.booleanType, irOperator, againstType.toIrType(), context.symbolTable.referenceClassifier(againstType.constructor.declarationDescriptor!!), expression.leftHandSide.genExpr() @@ -151,7 +151,7 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat val irArgument0 = expression.left!!.genExpr() val irArgument1 = expression.right!!.genExpr() - return irBlock(expression.startOffset, expression.endOffset, IrStatementOrigin.ELVIS, resultType) { + return irBlock(expression.startOffsetSkippingComments, expression.endOffset, IrStatementOrigin.ELVIS, resultType) { val temporary = irTemporary(irArgument0, "elvis_lhs") +irIfNull( resultType, @@ -167,9 +167,9 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat val irArgument1 = expression.right!!.genExpr() return when (irOperator) { IrStatementOrigin.OROR -> - context.oror(expression.startOffset, expression.endOffset, irArgument0, irArgument1) + context.oror(expression.startOffsetSkippingComments, expression.endOffset, irArgument0, irArgument1) IrStatementOrigin.ANDAND -> - context.andand(expression.startOffset, expression.endOffset, irArgument0, irArgument1) + context.andand(expression.startOffsetSkippingComments, expression.endOffset, irArgument0, irArgument1) else -> throw AssertionError("Unexpected binary boolean operator $irOperator") } @@ -185,7 +185,7 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat irContainsCall IrStatementOrigin.NOT_IN -> IrUnaryPrimitiveImpl( - expression.startOffset, expression.endOffset, + expression.startOffsetSkippingComments, expression.endOffset, context.irBuiltIns.booleanType, IrStatementOrigin.NOT_IN, context.irBuiltIns.booleanNotSymbol, @@ -202,7 +202,7 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat val irArgument1 = expression.right!!.genExpr() val irIdentityEquals = IrBinaryPrimitiveImpl( - expression.startOffset, expression.endOffset, + expression.startOffsetSkippingComments, expression.endOffset, context.irBuiltIns.booleanType, irOperator, context.irBuiltIns.eqeqeqSymbol, @@ -214,7 +214,7 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat irIdentityEquals IrStatementOrigin.EXCLEQEQ -> IrUnaryPrimitiveImpl( - expression.startOffset, expression.endOffset, + expression.startOffsetSkippingComments, expression.endOffset, context.irBuiltIns.booleanType, IrStatementOrigin.EXCLEQEQ, context.irBuiltIns.booleanNotSymbol, @@ -241,7 +241,7 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat ?: context.irBuiltIns.eqeqSymbol val irEquals = IrBinaryPrimitiveImpl( - expression.startOffset, expression.endOffset, + expression.startOffsetSkippingComments, expression.endOffset, context.irBuiltIns.booleanType, irOperator, eqeqSymbol, @@ -254,7 +254,7 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat irEquals IrStatementOrigin.EXCLEQ -> IrUnaryPrimitiveImpl( - expression.startOffset, expression.endOffset, + expression.startOffsetSkippingComments, expression.endOffset, context.irBuiltIns.booleanType, IrStatementOrigin.EXCLEQ, context.irBuiltIns.booleanNotSymbol, @@ -354,7 +354,7 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat } private fun generateComparisonOperator(expression: KtBinaryExpression, origin: IrStatementOrigin): IrExpression { - val startOffset = expression.startOffset + val startOffset = expression.startOffsetSkippingComments val endOffset = expression.endOffset val comparisonInfo = getPrimitiveNumericComparisonInfo(expression) @@ -403,7 +403,7 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat val resultType = irArgument.type.makeNotNull() - return irBlock(ktOperator.startOffset, ktOperator.endOffset, origin, resultType) { + return irBlock(ktOperator.startOffsetSkippingComments, ktOperator.endOffset, origin, resultType) { val temporary = irTemporary(irArgument, "notnull") +irIfNull( resultType, diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/PropertyGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/PropertyGenerator.kt index d549ea73b5e..c3da3ae244c 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/PropertyGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/PropertyGenerator.kt @@ -26,9 +26,9 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl import org.jetbrains.kotlin.ir.util.declareFieldWithOverrides import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.endOffset -import org.jetbrains.kotlin.psi.psiUtil.startOffset import org.jetbrains.kotlin.psi2ir.pureEndOffsetOrUndefined import org.jetbrains.kotlin.psi2ir.pureStartOffsetOrUndefined +import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.hasBackingField @@ -47,7 +47,7 @@ class PropertyGenerator(declarationGenerator: DeclarationGenerator) : Declaratio val irPropertyType = propertyDescriptor.type.toIrType() return IrPropertyImpl( - ktParameter.startOffset, ktParameter.endOffset, + ktParameter.startOffsetSkippingComments, ktParameter.endOffset, IrDeclarationOrigin.DEFINED, false, propertyDescriptor ).also { irProperty -> @@ -55,7 +55,7 @@ class PropertyGenerator(declarationGenerator: DeclarationGenerator) : Declaratio generatePropertyBackingField(ktParameter, propertyDescriptor) { IrExpressionBodyImpl( IrGetValueImpl( - ktParameter.startOffset, ktParameter.endOffset, + ktParameter.startOffsetSkippingComments, ktParameter.endOffset, irPropertyType, irValueParameter.symbol, IrStatementOrigin.INITIALIZE_PROPERTY_FROM_PARAMETER @@ -83,7 +83,7 @@ class PropertyGenerator(declarationGenerator: DeclarationGenerator) : Declaratio generateInitializer: (IrField) -> IrExpressionBody? ): IrField = context.symbolTable.declareField( - ktPropertyElement.startOffset, ktPropertyElement.endOffset, + ktPropertyElement.startOffsetSkippingComments, ktPropertyElement.endOffset, IrDeclarationOrigin.PROPERTY_BACKING_FIELD, propertyDescriptor, propertyDescriptor.type.toIrType() ).also { @@ -101,7 +101,7 @@ class PropertyGenerator(declarationGenerator: DeclarationGenerator) : Declaratio private fun generateSimpleProperty(ktProperty: KtProperty, propertyDescriptor: PropertyDescriptor): IrProperty = IrPropertyImpl( - ktProperty.startOffset, ktProperty.endOffset, + ktProperty.startOffsetSkippingComments, ktProperty.endOffset, IrDeclarationOrigin.DEFINED, false, propertyDescriptor @@ -114,7 +114,7 @@ class PropertyGenerator(declarationGenerator: DeclarationGenerator) : Declaratio if (propertyDescriptor.isConst && compileTimeConst != null) IrExpressionBodyImpl( context.constantValueGenerator.generateConstantValueAsExpression( - ktInitializer.startOffset, ktInitializer.endOffset, + ktInitializer.startOffsetSkippingComments, ktInitializer.endOffset, compileTimeConst ) ) diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ReflectionReferencesGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ReflectionReferencesGenerator.kt index 3297bfd445a..ae1fe3997b9 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ReflectionReferencesGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ReflectionReferencesGenerator.kt @@ -26,7 +26,7 @@ import org.jetbrains.kotlin.ir.util.referenceFunction import org.jetbrains.kotlin.psi.KtCallableReferenceExpression import org.jetbrains.kotlin.psi.KtClassLiteralExpression import org.jetbrains.kotlin.psi.psiUtil.endOffset -import org.jetbrains.kotlin.psi.psiUtil.startOffset +import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.ImportedFromObjectCallableDescriptor import org.jetbrains.kotlin.types.KotlinType @@ -41,7 +41,7 @@ class ReflectionReferencesGenerator(statementGenerator: StatementGenerator) : St return if (lhs is DoubleColonLHS.Expression && !lhs.isObjectQualifier) { IrGetClassImpl( - ktClassLiteral.startOffset, ktClassLiteral.endOffset, resultType, + ktClassLiteral.startOffsetSkippingComments, ktClassLiteral.endOffset, resultType, ktArgument.genExpr() ) } else { @@ -49,7 +49,7 @@ class ReflectionReferencesGenerator(statementGenerator: StatementGenerator) : St val typeClass = typeConstructorDeclaration ?: throw AssertionError("Unexpected type constructor for ${lhs.type}: $typeConstructorDeclaration") IrClassReferenceImpl( - ktClassLiteral.startOffset, ktClassLiteral.endOffset, resultType, + ktClassLiteral.startOffsetSkippingComments, ktClassLiteral.endOffset, resultType, context.symbolTable.referenceClassifier(typeClass), lhs.type.toIrType() ) } @@ -62,7 +62,7 @@ class ReflectionReferencesGenerator(statementGenerator: StatementGenerator) : St val descriptorImportedFromObject = resultingDescriptor as? ImportedFromObjectCallableDescriptor<*> val referencedDescriptor = descriptorImportedFromObject?.callableFromObject ?: resultingDescriptor - val startOffset = ktCallableReference.startOffset + val startOffset = ktCallableReference.startOffsetSkippingComments val endOffset = ktCallableReference.endOffset return statementGenerator.generateCallReceiver( diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/StatementGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/StatementGenerator.kt index ee8d51e6a41..1cc5739fdac 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/StatementGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/StatementGenerator.kt @@ -31,7 +31,7 @@ import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.ir.util.referenceFunction import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.endOffset -import org.jetbrains.kotlin.psi.psiUtil.startOffset +import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments import org.jetbrains.kotlin.psi2ir.deparenthesize import org.jetbrains.kotlin.psi2ir.intermediate.IntermediateValue import org.jetbrains.kotlin.psi2ir.intermediate.createTemporaryVariableInBlock @@ -81,7 +81,7 @@ class StatementGenerator( override fun visitExpression(expression: KtExpression, data: Nothing?): IrStatement = IrErrorExpressionImpl( - expression.startOffset, + expression.startOffsetSkippingComments, expression.endOffset, context.irBuiltIns.nothingType, expression::class.java.simpleName @@ -98,7 +98,7 @@ class StatementGenerator( } return context.symbolTable.declareVariable( - property.startOffset, property.endOffset, IrDeclarationOrigin.DEFINED, + property.startOffsetSkippingComments, property.endOffset, IrDeclarationOrigin.DEFINED, variableDescriptor, variableDescriptor.type.toIrType(), property.initializer?.genExpr() @@ -116,7 +116,7 @@ class StatementGenerator( override fun visitDestructuringDeclaration(multiDeclaration: KtDestructuringDeclaration, data: Nothing?): IrStatement { val irBlock = IrCompositeImpl( - multiDeclaration.startOffset, multiDeclaration.endOffset, + multiDeclaration.startOffsetSkippingComments, multiDeclaration.endOffset, context.irBuiltIns.unitType, IrStatementOrigin.DESTRUCTURING_DECLARATION ) val ktInitializer = multiDeclaration.initializer!! @@ -145,11 +145,11 @@ class StatementGenerator( if (componentVariable.name.isSpecial) continue val irComponentCall = callGenerator.generateCall( - ktEntry.startOffset, ktEntry.endOffset, componentSubstitutedCall, + ktEntry.startOffsetSkippingComments, ktEntry.endOffset, componentSubstitutedCall, IrStatementOrigin.COMPONENT_N.withIndex(index + 1) ) val irComponentVar = context.symbolTable.declareVariable( - ktEntry.startOffset, ktEntry.endOffset, IrDeclarationOrigin.DEFINED, + ktEntry.startOffsetSkippingComments, ktEntry.endOffset, IrDeclarationOrigin.DEFINED, componentVariable, componentVariable.type.toIrType(), irComponentCall ) irBlock.statements.add(irComponentVar) @@ -161,7 +161,7 @@ class StatementGenerator( if (isBlockBody) throw AssertionError("Use IrBlockBody and corresponding body generator to generate blocks as function bodies") val returnType = getInferredTypeWithImplicitCasts(expression) ?: context.builtIns.unitType - val irBlock = IrBlockImpl(expression.startOffset, expression.endOffset, returnType.toIrType()) + val irBlock = IrBlockImpl(expression.startOffsetSkippingComments, expression.endOffset, returnType.toIrType()) expression.statements.forEach { irBlock.statements.add(it.genStmt()) @@ -173,11 +173,11 @@ class StatementGenerator( override fun visitReturnExpression(expression: KtReturnExpression, data: Nothing?): IrStatement { val returnTarget = getReturnExpressionTarget(expression) val irReturnedExpression = expression.returnedExpression?.genExpr() ?: IrGetObjectValueImpl( - expression.startOffset, expression.endOffset, context.irBuiltIns.unitType, + expression.startOffsetSkippingComments, expression.endOffset, context.irBuiltIns.unitType, context.symbolTable.referenceClass(context.builtIns.unit) ) return IrReturnImpl( - expression.startOffset, expression.endOffset, context.irBuiltIns.nothingType, + expression.startOffsetSkippingComments, expression.endOffset, context.irBuiltIns.nothingType, context.symbolTable.referenceFunction(returnTarget), irReturnedExpression ) } @@ -207,7 +207,7 @@ class StatementGenerator( override fun visitThrowExpression(expression: KtThrowExpression, data: Nothing?): IrStatement { return IrThrowImpl( - expression.startOffset, + expression.startOffsetSkippingComments, expression.endOffset, context.irBuiltIns.nothingType, expression.thrownExpression!!.genExpr() @@ -223,7 +223,7 @@ class StatementGenerator( fun generateConstantExpression(expression: KtExpression, constant: CompileTimeConstant<*>): IrExpression = context.constantValueGenerator.generateConstantValueAsExpression( - expression.startOffset, + expression.startOffsetSkippingComments, expression.endOffset, constant.toConstantValue(getInferredTypeWithImplicitCastsOrFail(expression)) ) @@ -237,20 +237,20 @@ class StatementGenerator( if (irArg is IrConst<*> && irArg.kind == IrConstKind.String) irArg else - IrStringConcatenationImpl(expression.startOffset, expression.endOffset, resultType, listOf(irArg)) + IrStringConcatenationImpl(expression.startOffsetSkippingComments, expression.endOffset, resultType, listOf(irArg)) } 0 -> - IrConstImpl.string(expression.startOffset, expression.endOffset, resultType, "") + IrConstImpl.string(expression.startOffsetSkippingComments, expression.endOffset, resultType, "") else -> - IrStringConcatenationImpl(expression.startOffset, expression.endOffset, resultType, entries.map { it.genExpr() }) + IrStringConcatenationImpl(expression.startOffsetSkippingComments, expression.endOffset, resultType, entries.map { it.genExpr() }) } } override fun visitLiteralStringTemplateEntry(entry: KtLiteralStringTemplateEntry, data: Nothing?): IrStatement = - IrConstImpl.string(entry.startOffset, entry.endOffset, context.irBuiltIns.stringType, entry.text) + IrConstImpl.string(entry.startOffsetSkippingComments, entry.endOffset, context.irBuiltIns.stringType, entry.text) override fun visitEscapeStringTemplateEntry(entry: KtEscapeStringTemplateEntry, data: Nothing?): IrStatement = - IrConstImpl.string(entry.startOffset, entry.endOffset, context.irBuiltIns.stringType, entry.unescapedValue) + IrConstImpl.string(entry.startOffsetSkippingComments, entry.endOffset, context.irBuiltIns.stringType, entry.unescapedValue) override fun visitStringTemplateEntryWithExpression(entry: KtStringTemplateEntryWithExpression, data: Nothing?): IrStatement = entry.expression!!.genExpr() @@ -283,7 +283,7 @@ class StatementGenerator( resolvedCall: ResolvedCall<*>? ): IrExpression = CallGenerator(this).generateValueReference( - expression.startOffset, expression.endOffset, + expression.startOffsetSkippingComments, expression.endOffset, descriptor, resolvedCall, null ) @@ -304,14 +304,14 @@ class StatementGenerator( else null - return CallGenerator(this).generateCall(expression.startOffset, expression.endOffset, pregenerateCall(resolvedCall), origin) + return CallGenerator(this).generateCall(expression.startOffsetSkippingComments, expression.endOffset, pregenerateCall(resolvedCall), origin) } override fun visitArrayAccessExpression(expression: KtArrayAccessExpression, data: Nothing?): IrStatement { val indexedGetCall = getOrFail(BindingContext.INDEXED_LVALUE_GET, expression) return CallGenerator(this).generateCall( - expression.startOffset, expression.endOffset, + expression.startOffsetSkippingComments, expression.endOffset, pregenerateCall(indexedGetCall), IrStatementOrigin.GET_ARRAY_ELEMENT ) } @@ -329,7 +329,7 @@ class StatementGenerator( val thisAsReceiverParameter = referenceTarget.thisAsReceiverParameter val thisType = thisAsReceiverParameter.type.toIrType() IrGetValueImpl( - expression.startOffset, expression.endOffset, + expression.startOffsetSkippingComments, expression.endOffset, thisType, context.symbolTable.referenceValueParameter(thisAsReceiverParameter) ) @@ -339,7 +339,7 @@ class StatementGenerator( val extensionReceiver = referenceTarget.extensionReceiverParameter ?: TODO("No extension receiver: $referenceTarget") val extensionReceiverType = extensionReceiver.type.toIrType() IrGetValueImpl( - expression.startOffset, expression.endOffset, + expression.startOffsetSkippingComments, expression.endOffset, extensionReceiverType, context.symbolTable.referenceValueParameter(extensionReceiver) ) @@ -402,7 +402,7 @@ class StatementGenerator( override fun visitTypeAlias(typeAlias: KtTypeAlias, data: Nothing?): IrStatement = IrTypeAliasImpl( - typeAlias.startOffset, typeAlias.endOffset, IrDeclarationOrigin.DEFINED, + typeAlias.startOffsetSkippingComments, typeAlias.endOffset, IrDeclarationOrigin.DEFINED, getOrFail(BindingContext.TYPE_ALIAS, typeAlias) ) diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/TryCatchExpressionGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/TryCatchExpressionGenerator.kt index aea0c18dd6a..bb44d39cc14 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/TryCatchExpressionGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/TryCatchExpressionGenerator.kt @@ -22,13 +22,13 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrCatchImpl import org.jetbrains.kotlin.ir.expressions.impl.IrTryImpl import org.jetbrains.kotlin.psi.KtTryExpression import org.jetbrains.kotlin.psi.psiUtil.endOffset -import org.jetbrains.kotlin.psi.psiUtil.startOffset +import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments import org.jetbrains.kotlin.resolve.BindingContext class TryCatchExpressionGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) { fun generateTryCatch(ktTry: KtTryExpression): IrExpression { val resultType = getInferredTypeWithImplicitCastsOrFail(ktTry).toIrType() - val irTryCatch = IrTryImpl(ktTry.startOffset, ktTry.endOffset, resultType) + val irTryCatch = IrTryImpl(ktTry.startOffsetSkippingComments, ktTry.endOffset, resultType) irTryCatch.tryResult = ktTry.tryBlock.genExpr() @@ -38,9 +38,9 @@ class TryCatchExpressionGenerator(statementGenerator: StatementGenerator) : Stat val catchParameterDescriptor = getOrFail(BindingContext.VALUE_PARAMETER, ktCatchParameter) val irCatch = IrCatchImpl( - ktCatchClause.startOffset, ktCatchClause.endOffset, + ktCatchClause.startOffsetSkippingComments, ktCatchClause.endOffset, context.symbolTable.declareVariable( - ktCatchParameter.startOffset, ktCatchParameter.endOffset, + ktCatchParameter.startOffsetSkippingComments, ktCatchParameter.endOffset, IrDeclarationOrigin.CATCH_PARAMETER, catchParameterDescriptor, catchParameterDescriptor.type.toIrType() ) diff --git a/compiler/psi/src/org/jetbrains/kotlin/psi/psiUtil/psiUtils.kt b/compiler/psi/src/org/jetbrains/kotlin/psi/psiUtil/psiUtils.kt index c3004daea23..8b962bd5bba 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/psi/psiUtil/psiUtils.kt +++ b/compiler/psi/src/org/jetbrains/kotlin/psi/psiUtil/psiUtils.kt @@ -296,11 +296,18 @@ val PsiElement.endOffset: Int get() = textRange.endOffset val KtPureElement.pureStartOffset: Int - get() = psiOrParent.textRange.startOffset + get() = psiOrParent.textRangeWithoutComments.startOffset val KtPureElement.pureEndOffset: Int - get() = psiOrParent.textRange.endOffset + get() = psiOrParent.textRangeWithoutComments.endOffset +val PsiElement.startOffsetSkippingComments: Int + get() { + if (!startsWithComment()) return startOffset // fastpath + val firstNonCommentChild = generateSequence(firstChild) { it.nextSibling } + .firstOrNull { it !is PsiWhiteSpace && it !is PsiComment } + return firstNonCommentChild?.startOffset ?: startOffset + } fun PsiElement.getStartOffsetIn(ancestor: PsiElement): Int { var offset = 0 @@ -357,10 +364,10 @@ private fun findFirstLeafWhollyInRange(file: PsiFile, range: TextRange): PsiElem } val PsiElement.textRangeWithoutComments: TextRange - get() { - val firstNonCommentChild = children.firstOrNull { it !is PsiWhiteSpace && it !is PsiComment } ?: return textRange - return TextRange(firstNonCommentChild.startOffset, endOffset) - } + get() = if (!startsWithComment()) textRange else TextRange(startOffsetSkippingComments, endOffset) + +fun PsiElement.startsWithComment(): Boolean = firstChild is PsiComment + // ---------------------------------- Debug/logging ---------------------------------------------------------------------------------------- diff --git a/compiler/testData/ir/sourceRanges/comments.kt b/compiler/testData/ir/sourceRanges/comments.kt new file mode 100644 index 00000000000..892533ec983 --- /dev/null +++ b/compiler/testData/ir/sourceRanges/comments.kt @@ -0,0 +1,34 @@ +// One-line comment +class Foo { + + // Several + // lines + // of + // oneline + // commentaries + inner class Inner /* comment for constructor */ private constructor(x: Int) { + /** dangling comment at the end of body*/ + } // Comment for closing bracket + + /* + very + long + multiline + comment + */ + protected open fun foo(y: Int) { // Comment for opening bracket + + /* Comment for closing bracket */ } + + /** + * Javadoc comment + */ + val x: Int = 42 + // Comment for getter + get() = field + 1 + // Dangling comment + + fun test() { + foo(/* comment inside call */ 42) + } +} \ No newline at end of file diff --git a/compiler/testData/ir/sourceRanges/comments.txt b/compiler/testData/ir/sourceRanges/comments.txt new file mode 100644 index 00000000000..ba2e9c3590b --- /dev/null +++ b/compiler/testData/ir/sourceRanges/comments.txt @@ -0,0 +1,51 @@ +@0:0..33:1 FILE fqName: fileName:/comments.kt + @1:0..33:1 CLASS CLASS name:Foo modality:FINAL visibility:public flags: superTypes:[kotlin.Any] + @1:0..33:1 VALUE_PARAMETER INSTANCE_RECEIVER name: type:Foo flags: + @1:0..33:1 CONSTRUCTOR visibility:public <> () returnType:Foo flags:primary + @1:0..33:1 BLOCK_BODY + @1:0..33:1 DELEGATING_CONSTRUCTOR_CALL 'constructor Any()' + @1:0..33:1 INSTANCE_INITIALIZER_CALL classDescriptor='Foo' + @8:4..10:36 CLASS CLASS name:Inner modality:FINAL visibility:public flags:inner superTypes:[kotlin.Any] + @8:4..10:36 VALUE_PARAMETER INSTANCE_RECEIVER name: type:Foo.Inner flags: + @8:4..10:36 CONSTRUCTOR visibility:private <> ($this:Foo, x:kotlin.Int) returnType:Foo.Inner flags:primary + @8:52..79 VALUE_PARAMETER name: type:Foo flags: + @8:72..78 VALUE_PARAMETER name:x index:0 type:kotlin.Int flags: + @8:4..10:36 BLOCK_BODY + @8:4..10:36 DELEGATING_CONSTRUCTOR_CALL 'constructor Any()' + @8:4..10:36 INSTANCE_INITIALIZER_CALL classDescriptor='Inner' + @8:4..10:36 FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean flags: + @8:4..10:36 VALUE_PARAMETER name: type:kotlin.Any flags: + @-1:-1..-1 VALUE_PARAMETER name:other index:0 type:kotlin.Any? flags: + @8:4..10:36 FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int flags: + @8:4..10:36 VALUE_PARAMETER name: type:kotlin.Any flags: + @8:4..10:36 FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String flags: + @8:4..10:36 VALUE_PARAMETER name: type:kotlin.Any flags: + @18:4..20:39 FUN name:foo visibility:protected modality:OPEN <> ($this:Foo, y:kotlin.Int) returnType:kotlin.Unit flags: + @18:4..20:39 VALUE_PARAMETER name: type:Foo flags: + @18:27..33 VALUE_PARAMETER name:y index:0 type:kotlin.Int flags: + @18:35..20:39 BLOCK_BODY + @25:4..27:25 PROPERTY name:x visibility:public modality:FINAL flags:val + @25:4..27:25 FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.Int visibility:public flags:final + @25:17..19 EXPRESSION_BODY + @25:17..19 CONST Int type=kotlin.Int value=42 + @27:8..25 FUN name: visibility:public modality:FINAL <> ($this:Foo) returnType:kotlin.Int flags: + @27:8..25 VALUE_PARAMETER name: type:Foo flags: + @27:16..25 BLOCK_BODY + @27:16..25 RETURN type=kotlin.Nothing from='(): Int' + @27:16..25 CALL 'plus(Int): Int' type=kotlin.Int origin=PLUS + @27:16..21 GET_FIELD 'x: Int' type=kotlin.Int origin=null + @27:16..21 GET_VAR 'this@Foo: Foo' type=Foo origin=null + @27:24..25 CONST Int type=kotlin.Int value=1 + @30:4..32:5 FUN name:test visibility:public modality:FINAL <> ($this:Foo) returnType:kotlin.Unit flags: + @30:4..32:5 VALUE_PARAMETER name: type:Foo flags: + @30:15..32:5 BLOCK_BODY + @31:8..41 CALL 'foo(Int): Unit' type=kotlin.Unit origin=null + @31:8..41 GET_VAR 'this@Foo: Foo' type=Foo origin=null + @31:38..40 CONST Int type=kotlin.Int value=42 + @1:0..33:1 FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean flags: + @1:0..33:1 VALUE_PARAMETER name: type:kotlin.Any flags: + @-1:-1..-1 VALUE_PARAMETER name:other index:0 type:kotlin.Any? flags: + @1:0..33:1 FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int flags: + @1:0..33:1 VALUE_PARAMETER name: type:kotlin.Any flags: + @1:0..33:1 FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String flags: + @1:0..33:1 VALUE_PARAMETER name: type:kotlin.Any flags: diff --git a/compiler/testData/ir/sourceRanges/kt17108.txt b/compiler/testData/ir/sourceRanges/kt17108.txt index 60f9170023a..99bbafc1a93 100644 --- a/compiler/testData/ir/sourceRanges/kt17108.txt +++ b/compiler/testData/ir/sourceRanges/kt17108.txt @@ -1,24 +1,24 @@ @0:0..26:1 FILE fqName: fileName:/kt17108.kt - @0:0..26:1 CLASS INTERFACE name:Boolean modality:ABSTRACT visibility:public flags: superTypes:[kotlin.Any] - @0:0..26:1 VALUE_PARAMETER INSTANCE_RECEIVER name: type:Boolean flags: - @5:4..8:38 FUN name:not visibility:public modality:ABSTRACT <> ($this:Boolean) returnType:Boolean flags: - @5:4..8:38 VALUE_PARAMETER name: type:Boolean flags: - @10:4..13:42 FUN name:and visibility:public modality:ABSTRACT <> ($this:Boolean, other:Boolean) returnType:Boolean flags: - @10:4..13:42 VALUE_PARAMETER name: type:Boolean flags: + @4:0..26:1 CLASS INTERFACE name:Boolean modality:ABSTRACT visibility:public flags: superTypes:[kotlin.Any] + @4:0..26:1 VALUE_PARAMETER INSTANCE_RECEIVER name: type:Boolean flags: + @8:4..38 FUN name:not visibility:public modality:ABSTRACT <> ($this:Boolean) returnType:Boolean flags: + @8:4..38 VALUE_PARAMETER name: type:Boolean flags: + @13:4..42 FUN name:and visibility:public modality:ABSTRACT <> ($this:Boolean, other:Boolean) returnType:Boolean flags: + @13:4..42 VALUE_PARAMETER name: type:Boolean flags: @13:18..32 VALUE_PARAMETER name:other index:0 type:Boolean flags: - @15:4..18:41 FUN name:or visibility:public modality:ABSTRACT <> ($this:Boolean, other:Boolean) returnType:Boolean flags: - @15:4..18:41 VALUE_PARAMETER name: type:Boolean flags: + @18:4..41 FUN name:or visibility:public modality:ABSTRACT <> ($this:Boolean, other:Boolean) returnType:Boolean flags: + @18:4..41 VALUE_PARAMETER name: type:Boolean flags: @18:17..31 VALUE_PARAMETER name:other index:0 type:Boolean flags: - @20:4..23:42 FUN name:xor visibility:public modality:ABSTRACT <> ($this:Boolean, other:Boolean) returnType:Boolean flags: - @20:4..23:42 VALUE_PARAMETER name: type:Boolean flags: + @23:4..42 FUN name:xor visibility:public modality:ABSTRACT <> ($this:Boolean, other:Boolean) returnType:Boolean flags: + @23:4..42 VALUE_PARAMETER name: type:Boolean flags: @23:18..32 VALUE_PARAMETER name:other index:0 type:Boolean flags: @25:4..38 FUN name:compareTo visibility:public modality:ABSTRACT <> ($this:Boolean, other:Boolean) returnType:kotlin.Int flags: @25:4..38 VALUE_PARAMETER name: type:Boolean flags: @25:18..32 VALUE_PARAMETER name:other index:0 type:Boolean flags: - @0:0..26:1 FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean flags: - @0:0..26:1 VALUE_PARAMETER name: type:kotlin.Any flags: + @4:0..26:1 FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean flags: + @4:0..26:1 VALUE_PARAMETER name: type:kotlin.Any flags: @-1:-1..-1 VALUE_PARAMETER name:other index:0 type:kotlin.Any? flags: - @0:0..26:1 FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int flags: - @0:0..26:1 VALUE_PARAMETER name: type:kotlin.Any flags: - @0:0..26:1 FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String flags: - @0:0..26:1 VALUE_PARAMETER name: type:kotlin.Any flags: + @4:0..26:1 FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int flags: + @4:0..26:1 VALUE_PARAMETER name: type:kotlin.Any flags: + @4:0..26:1 FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String flags: + @4:0..26:1 VALUE_PARAMETER name: type:kotlin.Any flags: diff --git a/compiler/tests/org/jetbrains/kotlin/ir/IrSourceRangesTestCaseGenerated.java b/compiler/tests/org/jetbrains/kotlin/ir/IrSourceRangesTestCaseGenerated.java index 43c61d7d741..c6cdeae9111 100644 --- a/compiler/tests/org/jetbrains/kotlin/ir/IrSourceRangesTestCaseGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/ir/IrSourceRangesTestCaseGenerated.java @@ -34,6 +34,11 @@ public class IrSourceRangesTestCaseGenerated extends AbstractIrSourceRangesTestC runTest("compiler/testData/ir/sourceRanges/augmentedAssignmentWithExpression.kt"); } + @TestMetadata("comments.kt") + public void testComments() throws Exception { + runTest("compiler/testData/ir/sourceRanges/comments.kt"); + } + @TestMetadata("kt17108.kt") public void testKt17108() throws Exception { runTest("compiler/testData/ir/sourceRanges/kt17108.kt");