diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DeclarationsChecker.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DeclarationsChecker.java index 1d13abe148b..36137d54713 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DeclarationsChecker.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DeclarationsChecker.java @@ -105,6 +105,14 @@ public class DeclarationsChecker { modifiersChecker.checkModifiersForDeclaration(property, propertyDescriptor); } + for (Map.Entry entry : bodiesResolveContext.getSecondaryConstructors().entrySet()) { + ConstructorDescriptor constructorDescriptor = entry.getValue(); + JetSecondaryConstructor declaration = entry.getKey(); + modifiersChecker.reportIllegalModalityModifiers(declaration); + reportErrorIfHasIllegalModifier(declaration); + modifiersChecker.checkModifiersForDeclaration(declaration, constructorDescriptor); + } + } private void reportErrorIfHasIllegalModifier(JetModifierListOwner declaration) { diff --git a/compiler/testData/diagnostics/tests/modifiers/IllegalModifiers.kt b/compiler/testData/diagnostics/tests/modifiers/IllegalModifiers.kt index d36c9bc6546..c36563ef06b 100644 --- a/compiler/testData/diagnostics/tests/modifiers/IllegalModifiers.kt +++ b/compiler/testData/diagnostics/tests/modifiers/IllegalModifiers.kt @@ -88,7 +88,7 @@ abstract class IllegalModifiers6() { private IllegalModifiers6() init {} } -// strange Check inappropriate modifiers +// strange inappropriate modifiers usages override out in @@ -112,3 +112,26 @@ class IllegalModifiers7() { reified fun foo() {} } + +// Secondary constructors +class IllegalModifiers8 { + abstract + enum + open + inner + annotation + override + out + in + final + vararg + reified + constructor() {} + + constructor(private enum abstract x: Int) {} +} + +class IllegalModifiers9 { + private protected constructor() {} + private internal constructor(x: Int) {} +} diff --git a/compiler/testData/diagnostics/tests/modifiers/IllegalModifiers.txt b/compiler/testData/diagnostics/tests/modifiers/IllegalModifiers.txt index 2103af5027e..6697c7aff79 100644 --- a/compiler/testData/diagnostics/tests/modifiers/IllegalModifiers.txt +++ b/compiler/testData/diagnostics/tests/modifiers/IllegalModifiers.txt @@ -93,6 +93,22 @@ package illegal_modifiers { public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } + internal final class IllegalModifiers8 { + public constructor IllegalModifiers8() + public constructor IllegalModifiers8(/*0*/ x: 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 IllegalModifiers9 { + private constructor IllegalModifiers9() + private constructor IllegalModifiers9(/*0*/ x: 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 LegalModifier { public constructor LegalModifier(/*0*/ a: kotlin.Int, /*1*/ illegal_modifiers.annotated() b: kotlin.String, /*2*/ illegal_modifiers.annotated() vararg v: kotlin.Int /*kotlin.IntArray*/) internal final val a: kotlin.Int