diff --git a/analysis/low-level-api-fir/testdata/getOrBuildFir/invalidCode/javaClassLiteral.kt b/analysis/low-level-api-fir/testdata/getOrBuildFir/invalidCode/javaClassLiteral.kt new file mode 100644 index 00000000000..4deec9673c8 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/getOrBuildFir/invalidCode/javaClassLiteral.kt @@ -0,0 +1,6 @@ +fun main(args: Array) { + val anyClass = Any() + funOne(anyClass.class) +} + +fun funOne(x: Any): Unit {} \ No newline at end of file diff --git a/analysis/low-level-api-fir/testdata/getOrBuildFir/invalidCode/javaClassLiteral.txt b/analysis/low-level-api-fir/testdata/getOrBuildFir/invalidCode/javaClassLiteral.txt new file mode 100644 index 00000000000..1fb6aa2f828 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/getOrBuildFir/invalidCode/javaClassLiteral.txt @@ -0,0 +1,6 @@ +KT element: KtNameReferenceExpression +FIR element: FirPropertyAccessExpressionImpl +FIR source kind: KtRealSourceElementKind + +FIR element rendered: +R|/anyClass| \ No newline at end of file diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/GetOrBuildFirTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/GetOrBuildFirTestGenerated.java index eff086667d3..729933af515 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/GetOrBuildFirTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/GetOrBuildFirTestGenerated.java @@ -540,6 +540,22 @@ public class GetOrBuildFirTestGenerated extends AbstractGetOrBuildFirTest { } } + @Nested + @TestMetadata("analysis/low-level-api-fir/testdata/getOrBuildFir/invalidCode") + @TestDataPath("$PROJECT_ROOT") + public class InvalidCode { + @Test + public void testAllFilesPresentInInvalidCode() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/low-level-api-fir/testdata/getOrBuildFir/invalidCode"), Pattern.compile("^(.+)\\.kt$"), null, true); + } + + @Test + @TestMetadata("javaClassLiteral.kt") + public void testJavaClassLiteral() throws Exception { + runTest("analysis/low-level-api-fir/testdata/getOrBuildFir/invalidCode/javaClassLiteral.kt"); + } + } + @Nested @TestMetadata("analysis/low-level-api-fir/testdata/getOrBuildFir/qualifiedExpressions") @TestDataPath("$PROJECT_ROOT") diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt index 9dcc7f5577c..d1c25addd78 100644 --- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt +++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt @@ -557,6 +557,18 @@ class ExpressionsConverter( result = convertFirSelector(it, dotQualifiedExpression.toFirSourceElement(), firReceiver!!) as? FirExpression } + val receiver = firReceiver + if (receiver != null) { + (firSelector as? FirErrorExpression)?.let { errorExpression -> + return buildQualifiedErrorAccessExpression { + this.receiver = receiver + this.selector = errorExpression + source = dotQualifiedExpression.toFirSourceElement() + diagnostic = ConeSimpleDiagnostic("Qualified expression with unexpected selector", DiagnosticKind.Syntax) + } + } + } + return result ?: buildErrorExpression { source = null diagnostic = ConeSimpleDiagnostic("Qualified expression without selector", DiagnosticKind.Syntax) diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt index 8ca72efd1d3..47e11b2065c 100644 --- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt +++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt @@ -2462,6 +2462,14 @@ open class RawFirBuilder( return convertFirSelector(firSelector, expression.toFirSourceElement(), receiver) } + if (firSelector is FirErrorExpression) { + return buildQualifiedErrorAccessExpression { + this.receiver = receiver + this.selector = firSelector + source = expression.toFirSourceElement() + diagnostic = ConeSimpleDiagnostic("Qualified expression with unexpected selector", DiagnosticKind.Syntax) + } + } return firSelector } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirQualifiedErrorAccessExpression.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirQualifiedErrorAccessExpression.kt new file mode 100644 index 00000000000..350b6490e6c --- /dev/null +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirQualifiedErrorAccessExpression.kt @@ -0,0 +1,37 @@ +/* + * Copyright 2010-2022 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.fir.expressions + +import org.jetbrains.kotlin.KtSourceElement +import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic +import org.jetbrains.kotlin.fir.diagnostics.FirDiagnosticHolder +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +abstract class FirQualifiedErrorAccessExpression : FirExpression(), FirDiagnosticHolder { + abstract override val source: KtSourceElement? + abstract override val typeRef: FirTypeRef + abstract override val annotations: List + abstract override val diagnostic: ConeDiagnostic + abstract val selector: FirErrorExpression + abstract val receiver: FirExpression + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitQualifiedErrorAccessExpression(this, data) + + @Suppress("UNCHECKED_CAST") + override fun transform(transformer: FirTransformer, data: D): E = + transformer.transformQualifiedErrorAccessExpression(this, data) as E + + abstract override fun replaceTypeRef(newTypeRef: FirTypeRef) + + abstract override fun transformAnnotations(transformer: FirTransformer, data: D): FirQualifiedErrorAccessExpression +} diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirQualifiedErrorAccessExpressionBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirQualifiedErrorAccessExpressionBuilder.kt new file mode 100644 index 00000000000..d6f072b7e76 --- /dev/null +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirQualifiedErrorAccessExpressionBuilder.kt @@ -0,0 +1,64 @@ +/* + * Copyright 2010-2022 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. + */ + +@file:Suppress("DuplicatedCode") + +package org.jetbrains.kotlin.fir.expressions.builder + +import kotlin.contracts.* +import org.jetbrains.kotlin.KtSourceElement +import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder +import org.jetbrains.kotlin.fir.builder.FirBuilderDsl +import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic +import org.jetbrains.kotlin.fir.diagnostics.ConeStubDiagnostic +import org.jetbrains.kotlin.fir.expressions.FirAnnotation +import org.jetbrains.kotlin.fir.expressions.FirErrorExpression +import org.jetbrains.kotlin.fir.expressions.FirExpression +import org.jetbrains.kotlin.fir.expressions.FirQualifiedErrorAccessExpression +import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder +import org.jetbrains.kotlin.fir.expressions.impl.FirQualifiedErrorAccessExpressionImpl +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.types.impl.FirErrorTypeRefImpl +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +@FirBuilderDsl +class FirQualifiedErrorAccessExpressionBuilder : FirAnnotationContainerBuilder, FirExpressionBuilder { + override var source: KtSourceElement? = null + override val annotations: MutableList = mutableListOf() + lateinit var diagnostic: ConeDiagnostic + lateinit var selector: FirErrorExpression + lateinit var receiver: FirExpression + + override fun build(): FirQualifiedErrorAccessExpression { + return FirQualifiedErrorAccessExpressionImpl( + source, + annotations, + diagnostic, + selector, + receiver, + ) + } + + + @Deprecated("Modification of 'typeRef' has no impact for FirQualifiedErrorAccessExpressionBuilder", level = DeprecationLevel.HIDDEN) + override var typeRef: FirTypeRef + get() = throw IllegalStateException() + set(_) { + throw IllegalStateException() + } +} + +@OptIn(ExperimentalContracts::class) +inline fun buildQualifiedErrorAccessExpression(init: FirQualifiedErrorAccessExpressionBuilder.() -> Unit): FirQualifiedErrorAccessExpression { + contract { + callsInPlace(init, kotlin.contracts.InvocationKind.EXACTLY_ONCE) + } + return FirQualifiedErrorAccessExpressionBuilder().apply(init).build() +} diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirQualifiedErrorAccessExpressionImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirQualifiedErrorAccessExpressionImpl.kt new file mode 100644 index 00000000000..daf54fcabec --- /dev/null +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirQualifiedErrorAccessExpressionImpl.kt @@ -0,0 +1,58 @@ +/* + * Copyright 2010-2022 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. + */ + +@file:Suppress("DuplicatedCode") + +package org.jetbrains.kotlin.fir.expressions.impl + +import org.jetbrains.kotlin.KtSourceElement +import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic +import org.jetbrains.kotlin.fir.diagnostics.ConeStubDiagnostic +import org.jetbrains.kotlin.fir.expressions.FirAnnotation +import org.jetbrains.kotlin.fir.expressions.FirErrorExpression +import org.jetbrains.kotlin.fir.expressions.FirExpression +import org.jetbrains.kotlin.fir.expressions.FirQualifiedErrorAccessExpression +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.types.impl.FirErrorTypeRefImpl +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +internal class FirQualifiedErrorAccessExpressionImpl( + override val source: KtSourceElement?, + override val annotations: MutableList, + override val diagnostic: ConeDiagnostic, + override var selector: FirErrorExpression, + override var receiver: FirExpression, +) : FirQualifiedErrorAccessExpression() { + override var typeRef: FirTypeRef = FirErrorTypeRefImpl(source, null, ConeStubDiagnostic(diagnostic), false) + + override fun acceptChildren(visitor: FirVisitor, data: D) { + typeRef.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + selector.accept(visitor, data) + receiver.accept(visitor, data) + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirQualifiedErrorAccessExpressionImpl { + typeRef = typeRef.transform(transformer, data) + transformAnnotations(transformer, data) + selector = selector.transform(transformer, data) + receiver = receiver.transform(transformer, data) + return this + } + + override fun transformAnnotations(transformer: FirTransformer, data: D): FirQualifiedErrorAccessExpressionImpl { + annotations.transformInplace(transformer, data) + return this + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) { + typeRef = newTypeRef + } +} diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitor.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitor.kt index 5e665d8e849..e06c0eaf363 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitor.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitor.kt @@ -93,6 +93,7 @@ import org.jetbrains.kotlin.fir.expressions.FirErrorExpression import org.jetbrains.kotlin.fir.declarations.FirErrorFunction import org.jetbrains.kotlin.fir.declarations.FirErrorProperty import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression +import org.jetbrains.kotlin.fir.expressions.FirQualifiedErrorAccessExpression import org.jetbrains.kotlin.fir.expressions.FirPropertyAccessExpression import org.jetbrains.kotlin.fir.expressions.FirFunctionCall import org.jetbrains.kotlin.fir.expressions.FirIntegerLiteralOperatorCall diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitorVoid.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitorVoid.kt index 5454bfb521c..e9139487717 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitorVoid.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitorVoid.kt @@ -93,6 +93,7 @@ import org.jetbrains.kotlin.fir.expressions.FirErrorExpression import org.jetbrains.kotlin.fir.declarations.FirErrorFunction import org.jetbrains.kotlin.fir.declarations.FirErrorProperty import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression +import org.jetbrains.kotlin.fir.expressions.FirQualifiedErrorAccessExpression import org.jetbrains.kotlin.fir.expressions.FirPropertyAccessExpression import org.jetbrains.kotlin.fir.expressions.FirFunctionCall import org.jetbrains.kotlin.fir.expressions.FirIntegerLiteralOperatorCall diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt index d2c1295533d..c1e49bb1564 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt @@ -93,6 +93,7 @@ import org.jetbrains.kotlin.fir.expressions.FirErrorExpression import org.jetbrains.kotlin.fir.declarations.FirErrorFunction import org.jetbrains.kotlin.fir.declarations.FirErrorProperty import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression +import org.jetbrains.kotlin.fir.expressions.FirQualifiedErrorAccessExpression import org.jetbrains.kotlin.fir.expressions.FirPropertyAccessExpression import org.jetbrains.kotlin.fir.expressions.FirFunctionCall import org.jetbrains.kotlin.fir.expressions.FirIntegerLiteralOperatorCall @@ -500,6 +501,10 @@ abstract class FirTransformer : FirVisitor() { return transformElement(qualifiedAccessExpression, data) } + open fun transformQualifiedErrorAccessExpression(qualifiedErrorAccessExpression: FirQualifiedErrorAccessExpression, data: D): FirStatement { + return transformElement(qualifiedErrorAccessExpression, data) + } + open fun transformPropertyAccessExpression(propertyAccessExpression: FirPropertyAccessExpression, data: D): FirStatement { return transformElement(propertyAccessExpression, data) } @@ -1048,6 +1053,10 @@ abstract class FirTransformer : FirVisitor() { return transformQualifiedAccessExpression(qualifiedAccessExpression, data) } + final override fun visitQualifiedErrorAccessExpression(qualifiedErrorAccessExpression: FirQualifiedErrorAccessExpression, data: D): FirStatement { + return transformQualifiedErrorAccessExpression(qualifiedErrorAccessExpression, data) + } + final override fun visitPropertyAccessExpression(propertyAccessExpression: FirPropertyAccessExpression, data: D): FirStatement { return transformPropertyAccessExpression(propertyAccessExpression, data) } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt index 33d5d8f0984..db321a2c9e3 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt @@ -93,6 +93,7 @@ import org.jetbrains.kotlin.fir.expressions.FirErrorExpression import org.jetbrains.kotlin.fir.declarations.FirErrorFunction import org.jetbrains.kotlin.fir.declarations.FirErrorProperty import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression +import org.jetbrains.kotlin.fir.expressions.FirQualifiedErrorAccessExpression import org.jetbrains.kotlin.fir.expressions.FirPropertyAccessExpression import org.jetbrains.kotlin.fir.expressions.FirFunctionCall import org.jetbrains.kotlin.fir.expressions.FirIntegerLiteralOperatorCall @@ -325,6 +326,8 @@ abstract class FirVisitor { open fun visitQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression, data: D): R = visitElement(qualifiedAccessExpression, data) + open fun visitQualifiedErrorAccessExpression(qualifiedErrorAccessExpression: FirQualifiedErrorAccessExpression, data: D): R = visitElement(qualifiedErrorAccessExpression, data) + open fun visitPropertyAccessExpression(propertyAccessExpression: FirPropertyAccessExpression, data: D): R = visitElement(propertyAccessExpression, data) open fun visitFunctionCall(functionCall: FirFunctionCall, data: D): R = visitElement(functionCall, data) diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt index 26ebeac4e2e..46edb374931 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt @@ -93,6 +93,7 @@ import org.jetbrains.kotlin.fir.expressions.FirErrorExpression import org.jetbrains.kotlin.fir.declarations.FirErrorFunction import org.jetbrains.kotlin.fir.declarations.FirErrorProperty import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression +import org.jetbrains.kotlin.fir.expressions.FirQualifiedErrorAccessExpression import org.jetbrains.kotlin.fir.expressions.FirPropertyAccessExpression import org.jetbrains.kotlin.fir.expressions.FirFunctionCall import org.jetbrains.kotlin.fir.expressions.FirIntegerLiteralOperatorCall @@ -499,6 +500,10 @@ abstract class FirVisitorVoid : FirVisitor() { visitElement(qualifiedAccessExpression) } + open fun visitQualifiedErrorAccessExpression(qualifiedErrorAccessExpression: FirQualifiedErrorAccessExpression) { + visitElement(qualifiedErrorAccessExpression) + } + open fun visitPropertyAccessExpression(propertyAccessExpression: FirPropertyAccessExpression) { visitElement(propertyAccessExpression) } @@ -1047,6 +1052,10 @@ abstract class FirVisitorVoid : FirVisitor() { visitQualifiedAccessExpression(qualifiedAccessExpression) } + final override fun visitQualifiedErrorAccessExpression(qualifiedErrorAccessExpression: FirQualifiedErrorAccessExpression, data: Nothing?) { + visitQualifiedErrorAccessExpression(qualifiedErrorAccessExpression) + } + final override fun visitPropertyAccessExpression(propertyAccessExpression: FirPropertyAccessExpression, data: Nothing?) { visitPropertyAccessExpression(propertyAccessExpression) } diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt index 53420845f9f..8b520d63996 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt @@ -116,6 +116,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() { val errorFunction by element(Declaration, function, diagnosticHolder) val errorProperty by element(Declaration, variable, diagnosticHolder) val qualifiedAccessExpression by element(Expression, expression, qualifiedAccess) + val qualifiedErrorAccessExpression by element(Expression, expression, diagnosticHolder) val propertyAccessExpression by element(Expression, qualifiedAccessExpression) val functionCall by element(Expression, qualifiedAccessExpression, call) val integerLiteralOperatorCall by element(Expression, functionCall) diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt index aa21b3213bf..3c92bc1d3fa 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt @@ -433,6 +433,11 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator() useTypes(errorTypeRefImplType, coneStubDiagnosticType) } + impl(qualifiedErrorAccessExpression) { + default("typeRef", "FirErrorTypeRefImpl(source, null, ConeStubDiagnostic(diagnostic), false)") + useTypes(errorTypeRefImplType, coneStubDiagnosticType) + } + impl(errorFunction) { defaultNull("receiverParameter", "body", withGetter = true) default("returnTypeRef", "FirErrorTypeRefImpl(null, null, diagnostic, false)") diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt index 6e4bcb2a777..c49f92d6748 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt @@ -207,6 +207,11 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild +fieldList("nonFatalDiagnostics", coneDiagnosticType) } + qualifiedErrorAccessExpression.configure { + +field("selector", errorExpression) + +field("receiver", expression) + } + constExpression.configure { withArg("T") +field("kind", constKindType.withArgs("T"), withReplace = true) diff --git a/compiler/testData/diagnostics/tests/incompleteCode/illegalSelectorCallableReference.fir.kt b/compiler/testData/diagnostics/tests/incompleteCode/illegalSelectorCallableReference.fir.kt index f16f4271f63..36a67ca024b 100644 --- a/compiler/testData/diagnostics/tests/incompleteCode/illegalSelectorCallableReference.fir.kt +++ b/compiler/testData/diagnostics/tests/incompleteCode/illegalSelectorCallableReference.fir.kt @@ -3,6 +3,6 @@ fun test() { "a"."b"::foo "a"."b"::class - "a"."b"."c"::foo - "a"."b"."c"::class + "a"."b"."c"::foo + "a"."b"."c"::class }