From 8436147cec0ee305a6af70646dc46381343a9f86 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Tue, 4 Nov 2014 10:22:13 +0200 Subject: [PATCH] KT-1056 Don't allow passing type arguments to T #KT-1056 Fixed --- .../jetbrains/jet/lang/resolve/TypeResolver.kt | 5 ++++- .../diagnostics/tests/PackageQualified.kt | 2 +- .../diagnostics/tests/generics/argumentsForT.kt | 7 +++++++ .../tests/generics/argumentsForT.txt | 17 +++++++++++++++++ .../checkers/JetDiagnosticsTestGenerated.java | 6 ++++++ 5 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/generics/argumentsForT.kt create mode 100644 compiler/testData/diagnostics/tests/generics/argumentsForT.txt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeResolver.kt b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeResolver.kt index 5911af2b801..6533b1c78d7 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeResolver.kt +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeResolver.kt @@ -131,7 +131,10 @@ public class TypeResolver( scopeForTypeParameter) ) - resolveTypeProjections(c, ErrorUtils.createErrorType("No type").getConstructor(), type.getTypeArguments()) + val arguments = resolveTypeProjections(c, ErrorUtils.createErrorType("No type").getConstructor(), type.getTypeArguments()) + if (!arguments.isEmpty()) { + c.trace.report(WRONG_NUMBER_OF_TYPE_ARGUMENTS.on(type.getTypeArgumentList(), 0)) + } val containing = classifierDescriptor.getContainingDeclaration() if (containing is ClassDescriptor) { diff --git a/compiler/testData/diagnostics/tests/PackageQualified.kt b/compiler/testData/diagnostics/tests/PackageQualified.kt index 7383ffbc43e..77229743413 100644 --- a/compiler/testData/diagnostics/tests/PackageQualified.kt +++ b/compiler/testData/diagnostics/tests/PackageQualified.kt @@ -11,7 +11,7 @@ package foobar.a package foobar abstract class Foo() { - abstract val x : T + abstract val x : T } // FILE: b.kt diff --git a/compiler/testData/diagnostics/tests/generics/argumentsForT.kt b/compiler/testData/diagnostics/tests/generics/argumentsForT.kt new file mode 100644 index 00000000000..62094b66761 --- /dev/null +++ b/compiler/testData/diagnostics/tests/generics/argumentsForT.kt @@ -0,0 +1,7 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER + +fun foo(t: T) {} + +trait A +class B +fun foo1(t: TString>>) {} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/generics/argumentsForT.txt b/compiler/testData/diagnostics/tests/generics/argumentsForT.txt new file mode 100644 index 00000000000..59e77e20cf6 --- /dev/null +++ b/compiler/testData/diagnostics/tests/generics/argumentsForT.txt @@ -0,0 +1,17 @@ +package + +internal fun foo(/*0*/ t: T): kotlin.Unit +internal fun foo1(/*0*/ t: T): kotlin.Unit + +internal trait A { + 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 +} + +internal final class B { + public constructor B() + 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/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index 8f9d55e4832..04bd2989805 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -4391,6 +4391,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/diagnostics/tests/generics"), Pattern.compile("^(.+)\\.kt$"), true); } + @TestMetadata("argumentsForT.kt") + public void testArgumentsForT() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/generics/argumentsForT.kt"); + doTest(fileName); + } + @TestMetadata("ClassObjectBoundsAreNotSupported.kt") public void testClassObjectBoundsAreNotSupported() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/generics/ClassObjectBoundsAreNotSupported.kt");