From d569ea5974c7ce55004651a2a577fe515e329536 Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Fri, 20 Mar 2015 12:28:01 +0300 Subject: [PATCH] JS frontend: added diagnostic about secondary constructors not supported yet. --- .../secondaryConstructor.kt | 15 +++++++++++ .../secondaryConstructor.txt | 25 +++++++++++++++++++ ...tDiagnosticsTestWithJsStdLibGenerated.java | 6 +++++ .../diagnostics/DefaultErrorMessagesJs.kt | 1 + .../js/resolve/diagnostics/ErrorsJs.java | 1 + .../js/resolve/unsupportedFeatureCheckers.kt | 6 +++++ 6 files changed, 54 insertions(+) create mode 100644 compiler/testData/diagnostics/testsWithJsStdLib/unsupportedFeatures/secondaryConstructor.kt create mode 100644 compiler/testData/diagnostics/testsWithJsStdLib/unsupportedFeatures/secondaryConstructor.txt diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/unsupportedFeatures/secondaryConstructor.kt b/compiler/testData/diagnostics/testsWithJsStdLib/unsupportedFeatures/secondaryConstructor.kt new file mode 100644 index 00000000000..cc16e63bd68 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJsStdLib/unsupportedFeatures/secondaryConstructor.kt @@ -0,0 +1,15 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER + +class A { + constructor() {} +} + +class B { + constructor() {} + constructor(a: Int) {} +} + +class C(a: Int) { + constructor() : this(1) {} + constructor(a: String) : this(2) {} +} diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/unsupportedFeatures/secondaryConstructor.txt b/compiler/testData/diagnostics/testsWithJsStdLib/unsupportedFeatures/secondaryConstructor.txt new file mode 100644 index 00000000000..acb928468bb --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJsStdLib/unsupportedFeatures/secondaryConstructor.txt @@ -0,0 +1,25 @@ +package + +internal final class A { + public constructor 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 constructor B(/*0*/ a: kotlin.Int) + 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 C { + public constructor C() + public constructor C(/*0*/ a: kotlin.Int) + public constructor C(/*0*/ a: kotlin.String) + 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/JetDiagnosticsTestWithJsStdLibGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestWithJsStdLibGenerated.java index b98547d8131..65be4aec383 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestWithJsStdLibGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestWithJsStdLibGenerated.java @@ -572,5 +572,11 @@ public class JetDiagnosticsTestWithJsStdLibGenerated extends AbstractJetDiagnost String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/unsupportedFeatures/nestedInnerClassifier.kt"); doTest(fileName); } + + @TestMetadata("secondaryConstructor.kt") + public void testSecondaryConstructor() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/unsupportedFeatures/secondaryConstructor.kt"); + doTest(fileName); + } } } diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/DefaultErrorMessagesJs.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/DefaultErrorMessagesJs.kt index a51a400d28d..35c5f002a58 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/DefaultErrorMessagesJs.kt +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/DefaultErrorMessagesJs.kt @@ -37,6 +37,7 @@ private val DIAGNOSTIC_FACTORY_TO_RENDERER by Delegates.lazy { put(ErrorsJs.NOT_SUPPORTED, "Cannot translate (not supported yet): ''{0}''", RenderFirstLineOfElementText) put(ErrorsJs.REFERENCE_TO_BUILTIN_MEMBERS_NOT_SUPPORTED, "Callable references for builtin members are not supported yet: ''{0}''", RenderFirstLineOfElementText) put(ErrorsJs.NON_TOPLEVEL_CLASS_DECLARATION, "Non-toplevel {0} declarations not supported yet", Renderers.STRING) + put(ErrorsJs.SECONDARY_CONSTRUCTOR, "Secondary constructors not supported yet") this diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/ErrorsJs.java b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/ErrorsJs.java index 04f4441dba4..bb606c4436d 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/ErrorsJs.java +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/ErrorsJs.java @@ -43,6 +43,7 @@ public interface ErrorsJs { DiagnosticFactory1 NOT_SUPPORTED = DiagnosticFactory1.create(ERROR, DEFAULT); DiagnosticFactory1 REFERENCE_TO_BUILTIN_MEMBERS_NOT_SUPPORTED = DiagnosticFactory1.create(ERROR, DEFAULT); DiagnosticFactory1 NON_TOPLEVEL_CLASS_DECLARATION = DiagnosticFactory1.create(ERROR, DECLARATION_NAME); + DiagnosticFactory0 SECONDARY_CONSTRUCTOR = DiagnosticFactory0.create(ERROR, DECLARATION_SIGNATURE_OR_DEFAULT); @SuppressWarnings("UnusedDeclaration") Object _initializer = new Object() { diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/unsupportedFeatureCheckers.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/unsupportedFeatureCheckers.kt index 8ac9a876d8a..09bf397d073 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/unsupportedFeatureCheckers.kt +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/unsupportedFeatureCheckers.kt @@ -34,6 +34,12 @@ class ClassDeclarationChecker : DeclarationChecker { if (declaration !is JetClassOrObject || declaration is JetObjectDeclaration || declaration is JetEnumEntry) return + if (declaration is JetClass) { + declaration.getSecondaryConstructors().forEach { + diagnosticHolder.report(ErrorsJs.SECONDARY_CONSTRUCTOR.on(it)) + } + } + // hack to avoid to get diagnostics when compile kotlin builtins val fqNameUnsafe = DescriptorUtils.getFqName(descriptor) if (fqNameUnsafe.asString().startsWith("kotlin.")) return