diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java index be37328879c..caf7c08156a 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java @@ -123,7 +123,6 @@ public interface Errors { DiagnosticFactory0 REIFIED_TYPE_IN_CATCH_CLAUSE = DiagnosticFactory0.create(ERROR); DiagnosticFactory0 GENERIC_THROWABLE_SUBCLASS = DiagnosticFactory0.create(ERROR); - DiagnosticFactory0 UNSUPPORTED_TYPEALIAS = DiagnosticFactory0.create(ERROR); DiagnosticFactory1 RECURSIVE_TYPEALIAS_EXPANSION = DiagnosticFactory1.create(ERROR); DiagnosticFactory3 UPPER_BOUND_VIOLATED_IN_TYPEALIAS_EXPANSION = DiagnosticFactory3.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 a097d49d474..33c03172d55 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java @@ -425,7 +425,6 @@ public class DefaultErrorMessages { MAP.put(USELESS_ELVIS_RIGHT_IS_NULL, "Right operand of elvis operator (?:) is useless if it is null"); MAP.put(CONFLICTING_UPPER_BOUNDS, "Upper bounds of {0} have empty intersection", NAME); - MAP.put(UNSUPPORTED_TYPEALIAS, "Type aliases are unsupported (min Kotlin language level: 1.1)"); MAP.put(RECURSIVE_TYPEALIAS_EXPANSION, "Recursive type alias in expansion: {0}", NAME); MAP.put(UPPER_BOUND_VIOLATED_IN_TYPEALIAS_EXPANSION, "Type argument resulting from type alias expansion is not within required bounds for ''{2}'': " + diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java index 6240b9243b9..178dd2f1249 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java @@ -667,7 +667,7 @@ public class DescriptorResolver { else if (!languageVersionSettings.supportsFeature(LanguageFeature.TypeAliases)) { typeResolver.resolveAbbreviatedType(scopeWithTypeParameters, typeReference, trace); PsiElement typeAliasKeyword = typeAlias.getTypeAliasKeyword(); - trace.report(UNSUPPORTED_TYPEALIAS.on(typeAliasKeyword != null ? typeAliasKeyword : typeAlias)); + trace.report(UNSUPPORTED_FEATURE.on(typeAliasKeyword != null ? typeAliasKeyword : typeAlias, LanguageFeature.TypeAliases)); typeAliasDescriptor.initialize( typeParameterDescriptors, ErrorUtils.createErrorType(name.asString()), diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/LazyTopDownAnalyzer.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/LazyTopDownAnalyzer.kt index 91b8a49cf9b..5dc4f3d03c8 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/LazyTopDownAnalyzer.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/LazyTopDownAnalyzer.kt @@ -19,7 +19,6 @@ package org.jetbrains.kotlin.resolve import com.google.common.collect.HashMultimap import com.google.common.collect.Multimap import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.diagnostics.Errors.* @@ -229,8 +228,6 @@ class LazyTopDownAnalyzer( } private fun createTypeAliasDescriptors(c: TopDownAnalysisContext, topLevelFqNames: Multimap, typeAliases: List) { - if (!languageVersionSettings.supportsFeature(LanguageFeature.TypeAliases)) return - for (typeAlias in typeAliases) { val descriptor = lazyDeclarationResolver.resolveToDescriptor(typeAlias) as TypeAliasDescriptor diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/TypeResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/TypeResolver.kt index ab35088fca6..e49da6592bf 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/TypeResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/TypeResolver.kt @@ -456,7 +456,7 @@ class TypeResolver( return createErrorTypeForTypeConstructor(c, projectionFromAllQualifierParts, typeConstructor) } if (!languageVersionSettings.supportsFeature(LanguageFeature.TypeAliases)) { - c.trace.report(UNSUPPORTED_TYPEALIAS.on(type)) + c.trace.report(UNSUPPORTED_FEATURE.on(type, LanguageFeature.TypeAliases)) return createErrorTypeForTypeConstructor(c, projectionFromAllQualifierParts, typeConstructor) } diff --git a/compiler/testData/cli/jvm/unsupportedTypeAlias.args b/compiler/testData/cli/jvm/unsupportedTypeAlias.args new file mode 100644 index 00000000000..ce89167f1ed --- /dev/null +++ b/compiler/testData/cli/jvm/unsupportedTypeAlias.args @@ -0,0 +1,5 @@ +-language-version +1.0 +$TESTDATA_DIR$/unsupportedTypeAlias.kt +-d +$TEMP_DIR$ diff --git a/compiler/testData/cli/jvm/unsupportedTypeAlias.kt b/compiler/testData/cli/jvm/unsupportedTypeAlias.kt new file mode 100644 index 00000000000..82e694f5c03 --- /dev/null +++ b/compiler/testData/cli/jvm/unsupportedTypeAlias.kt @@ -0,0 +1,3 @@ +package test + +typealias Unused = String \ No newline at end of file diff --git a/compiler/testData/cli/jvm/unsupportedTypeAlias.out b/compiler/testData/cli/jvm/unsupportedTypeAlias.out new file mode 100644 index 00000000000..fb5f3e044d2 --- /dev/null +++ b/compiler/testData/cli/jvm/unsupportedTypeAlias.out @@ -0,0 +1,4 @@ +compiler/testData/cli/jvm/unsupportedTypeAlias.kt:3:1: error: the feature is only available since Kotlin 1.1: type aliases +typealias Unused = String +^ +COMPILATION_ERROR \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/typealias/unsupportedTypeAlias.kt b/compiler/testData/diagnostics/tests/typealias/unsupportedTypeAlias.kt index 9ae4701cc2e..43be33ef29e 100644 --- a/compiler/testData/diagnostics/tests/typealias/unsupportedTypeAlias.kt +++ b/compiler/testData/diagnostics/tests/typealias/unsupportedTypeAlias.kt @@ -2,12 +2,13 @@ class C -typealias S = String -typealias L = List -typealias CA = C +typealias S = String +typealias L = List +typealias CA = C +typealias Unused = Any -val test1: S = "" +val test1: S = "" -fun test2(x: L<S>) = x +fun test2(x: L<S>) = x -class Test3 : CA() \ No newline at end of file +class Test3 : CA() \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/typealias/unsupportedTypeAlias.txt b/compiler/testData/diagnostics/tests/typealias/unsupportedTypeAlias.txt index cf3988b0ef6..caf6dd40f3e 100644 --- a/compiler/testData/diagnostics/tests/typealias/unsupportedTypeAlias.txt +++ b/compiler/testData/diagnostics/tests/typealias/unsupportedTypeAlias.txt @@ -19,3 +19,4 @@ public final class Test3 { public typealias CA = [ERROR : CA] public typealias L = [ERROR : L] public typealias S = [ERROR : S] +public typealias Unused = [ERROR : Unused] diff --git a/compiler/tests/org/jetbrains/kotlin/cli/CliTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/cli/CliTestGenerated.java index 6290eded415..1b3f881f333 100644 --- a/compiler/tests/org/jetbrains/kotlin/cli/CliTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/cli/CliTestGenerated.java @@ -271,6 +271,12 @@ public class CliTestGenerated extends AbstractCliTest { doJvmTest(fileName); } + @TestMetadata("unsupportedTypeAlias.args") + public void testUnsupportedTypeAlias() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/cli/jvm/unsupportedTypeAlias.args"); + doJvmTest(fileName); + } + @TestMetadata("version.args") public void testVersion() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/cli/jvm/version.args");