diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java index dfa954cbd48..5b3177aaba0 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java @@ -80,6 +80,7 @@ public class DescriptorResolver { private final LanguageVersionSettings languageVersionSettings; private final FunctionsTypingVisitor functionsTypingVisitor; private final DestructuringDeclarationResolver destructuringDeclarationResolver; + private final ModifiersChecker modifiersChecker; public DescriptorResolver( @NotNull AnnotationResolver annotationResolver, @@ -92,7 +93,8 @@ public class DescriptorResolver { @NotNull OverloadChecker overloadChecker, @NotNull LanguageVersionSettings languageVersionSettings, @NotNull FunctionsTypingVisitor functionsTypingVisitor, - @NotNull DestructuringDeclarationResolver destructuringDeclarationResolver + @NotNull DestructuringDeclarationResolver destructuringDeclarationResolver, + @NotNull ModifiersChecker modifiersChecker ) { this.annotationResolver = annotationResolver; this.builtIns = builtIns; @@ -105,6 +107,7 @@ public class DescriptorResolver { this.languageVersionSettings = languageVersionSettings; this.functionsTypingVisitor = functionsTypingVisitor; this.destructuringDeclarationResolver = destructuringDeclarationResolver; + this.modifiersChecker = modifiersChecker; } public List resolveSupertypes( @@ -300,6 +303,8 @@ public class DescriptorResolver { scope, destructuringDeclaration, new TransientReceiver(type), /* initializer = */ null, ExpressionTypingContext.newContext(trace, scope, DataFlowInfoFactory.EMPTY, TypeUtils.NO_EXPECTED_TYPE) ); + + modifiersChecker.withTrace(trace).checkModifiersForDestructuringDeclaration(destructuringDeclaration); } else { destructuringVariables = null; diff --git a/compiler/testData/diagnostics/tests/functionLiterals/destructuringInLambdas/modifiers.kt b/compiler/testData/diagnostics/tests/functionLiterals/destructuringInLambdas/modifiers.kt new file mode 100644 index 00000000000..01a8f59148a --- /dev/null +++ b/compiler/testData/diagnostics/tests/functionLiterals/destructuringInLambdas/modifiers.kt @@ -0,0 +1,15 @@ +// !CHECK_TYPE +// !DIAGNOSTICS: -UNUSED_PARAMETER +data class A(val x: Int, val y: String) + +fun foo(block: (A) -> Unit) { } + +@Target(AnnotationTarget.VALUE_PARAMETER) +annotation class Ann + +fun bar() { + foo { (private inline a, @Ann b) -> + a checkType { _() } + b checkType { _() } + } +} diff --git a/compiler/testData/diagnostics/tests/functionLiterals/destructuringInLambdas/modifiers.txt b/compiler/testData/diagnostics/tests/functionLiterals/destructuringInLambdas/modifiers.txt new file mode 100644 index 00000000000..e0dceba0553 --- /dev/null +++ b/compiler/testData/diagnostics/tests/functionLiterals/destructuringInLambdas/modifiers.txt @@ -0,0 +1,23 @@ +package + +public fun bar(): kotlin.Unit +public fun foo(/*0*/ block: (A) -> kotlin.Unit): kotlin.Unit + +public final data class A { + public constructor A(/*0*/ x: kotlin.Int, /*1*/ y: kotlin.String) + public final val x: kotlin.Int + public final val y: kotlin.String + public final operator /*synthesized*/ fun component1(): kotlin.Int + public final operator /*synthesized*/ fun component2(): kotlin.String + public final /*synthesized*/ fun copy(/*0*/ x: kotlin.Int = ..., /*1*/ y: kotlin.String = ...): A + public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String +} + +@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.VALUE_PARAMETER}) public final annotation class Ann : kotlin.Annotation { + public constructor Ann() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index d85cf6b440f..39bb3516f93 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -7712,6 +7712,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { doTest(fileName); } + @TestMetadata("modifiers.kt") + public void testModifiers() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/functionLiterals/destructuringInLambdas/modifiers.kt"); + doTest(fileName); + } + @TestMetadata("noExpectedType.kt") public void testNoExpectedType() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/functionLiterals/destructuringInLambdas/noExpectedType.kt");