diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java index 4aa4bc17ad4..79268a0a45e 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java @@ -123,6 +123,7 @@ public interface Errors { DiagnosticFactory3.create(ERROR); DiagnosticFactory1 CONFLICTING_PROJECTION_IN_TYPEALIAS_EXPANSION = DiagnosticFactory1.create(ERROR); DiagnosticFactory1 TYPEALIAS_SHOULD_EXPAND_TO_CLASS = DiagnosticFactory1.create(ERROR); + DiagnosticFactory2 TYPEALIAS_EXPANDED_TO_MALFORMED_TYPE = DiagnosticFactory2.create(ERROR); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java index 0e3df96205c..a74202c9366 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java @@ -427,6 +427,7 @@ public class DefaultErrorMessages { RENDER_TYPE, RENDER_TYPE, NAME); MAP.put(CONFLICTING_PROJECTION_IN_TYPEALIAS_EXPANSION, "Conflicting projection in type alias expansion in intermediate type ''{0}''", RENDER_TYPE); MAP.put(TYPEALIAS_SHOULD_EXPAND_TO_CLASS, "Type alias expands to {0}, which is not a class, an interface, or an object", RENDER_TYPE); + MAP.put(TYPEALIAS_EXPANDED_TO_MALFORMED_TYPE, "Type alias expanded to malformed type {0}: {1}", RENDER_TYPE, STRING); MAP.put(TOO_MANY_ARGUMENTS, "Too many arguments for {0}", FQ_NAMES_IN_TYPES); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DeclarationsChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DeclarationsChecker.kt index 6dea0a8c3ea..80c81233046 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DeclarationsChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DeclarationsChecker.kt @@ -36,6 +36,7 @@ import org.jetbrains.kotlin.resolve.DescriptorUtils.classCanHaveOpenMembers import org.jetbrains.kotlin.types.* import org.jetbrains.kotlin.types.checker.KotlinTypeChecker import org.jetbrains.kotlin.types.typeUtil.contains +import org.jetbrains.kotlin.types.typeUtil.isArrayOfNothing import org.jetbrains.kotlin.types.typeUtil.isNothing import java.util.* @@ -162,6 +163,10 @@ class DeclarationsChecker( if (expandedType.isDynamic() || expandedClassifier is TypeParameterDescriptor) { trace.report(TYPEALIAS_SHOULD_EXPAND_TO_CLASS.on(typeReference, expandedType)) } + + if (TypeUtils.contains(expandedType) { it.isArrayOfNothing()} ) { + trace.report(TYPEALIAS_EXPANDED_TO_MALFORMED_TYPE.on(typeReference, expandedType, "Array is illegal")) + } } private class TypeAliasDeclarationCheckingReportStrategy( diff --git a/compiler/testData/diagnostics/tests/typealias/illegalTypeInTypeAliasExpansion.kt b/compiler/testData/diagnostics/tests/typealias/illegalTypeInTypeAliasExpansion.kt new file mode 100644 index 00000000000..e2725ad5c3c --- /dev/null +++ b/compiler/testData/diagnostics/tests/typealias/illegalTypeInTypeAliasExpansion.kt @@ -0,0 +1,6 @@ +typealias A = Array +typealias AA = A> + +typealias AN = A + +typealias AAN = AA diff --git a/compiler/testData/diagnostics/tests/typealias/illegalTypeInTypeAliasExpansion.txt b/compiler/testData/diagnostics/tests/typealias/illegalTypeInTypeAliasExpansion.txt new file mode 100644 index 00000000000..dbe6824d71d --- /dev/null +++ b/compiler/testData/diagnostics/tests/typealias/illegalTypeInTypeAliasExpansion.txt @@ -0,0 +1,6 @@ +package + +public typealias A = kotlin.Array +public typealias AA = A> +public typealias AAN = AA +public typealias AN = A diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index f9b7ff353c9..5504bb4b5c9 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -19509,6 +19509,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { doTest(fileName); } + @TestMetadata("illegalTypeInTypeAliasExpansion.kt") + public void testIllegalTypeInTypeAliasExpansion() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/typealias/illegalTypeInTypeAliasExpansion.kt"); + doTest(fileName); + } + @TestMetadata("import.kt") public void testImport() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/typealias/import.kt");