Introduce language feature DestructuringLambdaParameters
#KT-5828 Fixed
This commit is contained in:
@@ -27,7 +27,8 @@ enum class LanguageFeature(val sinceVersion: LanguageVersion) {
|
|||||||
Coroutines(KOTLIN_1_1),
|
Coroutines(KOTLIN_1_1),
|
||||||
AdditionalBuiltInsMembers(KOTLIN_1_1),
|
AdditionalBuiltInsMembers(KOTLIN_1_1),
|
||||||
DataClassInheritance(KOTLIN_1_1),
|
DataClassInheritance(KOTLIN_1_1),
|
||||||
InlineProperties(KOTLIN_1_1)
|
InlineProperties(KOTLIN_1_1),
|
||||||
|
DestructuringLambdaParameters(KOTLIN_1_1),
|
||||||
;
|
;
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|||||||
@@ -291,6 +291,10 @@ public class DescriptorResolver {
|
|||||||
|
|
||||||
List<VariableDescriptor> destructuringVariables;
|
List<VariableDescriptor> destructuringVariables;
|
||||||
if (destructuringDeclaration != null) {
|
if (destructuringDeclaration != null) {
|
||||||
|
if (!languageVersionSettings.supportsFeature(LanguageFeature.DestructuringLambdaParameters)) {
|
||||||
|
trace.report(Errors.UNSUPPORTED_FEATURE.on(valueParameter, LanguageFeature.DestructuringLambdaParameters));
|
||||||
|
}
|
||||||
|
|
||||||
destructuringVariables = destructuringDeclarationResolver.resolveLocalVariablesFromDestructuringDeclaration(
|
destructuringVariables = destructuringDeclarationResolver.resolveLocalVariablesFromDestructuringDeclaration(
|
||||||
scope, destructuringDeclaration, new TransientReceiver(type), /* initializer = */ null,
|
scope, destructuringDeclaration, new TransientReceiver(type), /* initializer = */ null,
|
||||||
ExpressionTypingContext.newContext(trace, scope, DataFlowInfoFactory.EMPTY, TypeUtils.NO_EXPECTED_TYPE)
|
ExpressionTypingContext.newContext(trace, scope, DataFlowInfoFactory.EMPTY, TypeUtils.NO_EXPECTED_TYPE)
|
||||||
|
|||||||
Vendored
+13
@@ -0,0 +1,13 @@
|
|||||||
|
// !LANGUAGE: -DestructuringLambdaParameters
|
||||||
|
// !CHECK_TYPE
|
||||||
|
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||||
|
data class A(val x: Int, val y: String)
|
||||||
|
|
||||||
|
fun foo(block: (A) -> Unit) { }
|
||||||
|
|
||||||
|
fun bar() {
|
||||||
|
foo { <!UNSUPPORTED_FEATURE!>(a, b)<!> ->
|
||||||
|
a checkType { _<Int>() }
|
||||||
|
b checkType { _<String>() }
|
||||||
|
}
|
||||||
|
}
|
||||||
Vendored
+16
@@ -0,0 +1,16 @@
|
|||||||
|
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
|
||||||
|
}
|
||||||
@@ -7519,6 +7519,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest {
|
|||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/functionLiterals/destructuringInLambdas/simple.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/functionLiterals/destructuringInLambdas/simple.kt");
|
||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("unsupportedFeature.kt")
|
||||||
|
public void testUnsupportedFeature() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/functionLiterals/destructuringInLambdas/unsupportedFeature.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("compiler/testData/diagnostics/tests/functionLiterals/return")
|
@TestMetadata("compiler/testData/diagnostics/tests/functionLiterals/return")
|
||||||
|
|||||||
Reference in New Issue
Block a user