From af3a123c1538b904213cef04ba3b223cdaee1b7a Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 25 May 2017 16:35:45 +0300 Subject: [PATCH] Report WRONG_MODIFIER_CONTAINING_DECLARATION for vararg in setter --- .../org/jetbrains/kotlin/resolve/ModifiersChecker.kt | 11 ++++++----- .../diagnostics/tests/varargs/varargInSetter.kt | 6 ++++++ .../diagnostics/tests/varargs/varargInSetter.txt | 9 +++++++++ .../kotlin/checkers/DiagnosticsTestGenerated.java | 6 ++++++ 4 files changed, 27 insertions(+), 5 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/varargs/varargInSetter.kt create mode 100644 compiler/testData/diagnostics/tests/varargs/varargInSetter.txt diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.kt index d0e6dea0cff..6ad514333cd 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.kt @@ -21,9 +21,7 @@ import com.intellij.psi.PsiElement import com.intellij.psi.tree.TokenSet import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageVersionSettings -import org.jetbrains.kotlin.descriptors.ClassDescriptor -import org.jetbrains.kotlin.descriptors.DeclarationDescriptor -import org.jetbrains.kotlin.descriptors.FunctionDescriptor +import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget.* import org.jetbrains.kotlin.diagnostics.Errors @@ -122,7 +120,8 @@ object ModifierCheckerCore { INTERFACE, ENUM_CLASS, ENUM_ENTRY, FILE), COMPANION_KEYWORD to EnumSet.of(CLASS_ONLY, ENUM_CLASS, INTERFACE), FINAL_KEYWORD to EnumSet.of(CLASS_ONLY, LOCAL_CLASS, OBJECT, OBJECT_LITERAL, - ENUM_CLASS, ENUM_ENTRY, ANNOTATION_CLASS, FILE) + ENUM_CLASS, ENUM_ENTRY, ANNOTATION_CLASS, FILE), + VARARG_KEYWORD to EnumSet.of(CONSTRUCTOR, FUNCTION, CLASS) ) val deprecatedParentTargetMap = mapOf>() @@ -303,6 +302,8 @@ object ModifierCheckerCore { val modifier = node.elementType as KtModifierKeywordToken val actualParents: List = when (parentDescriptor) { is ClassDescriptor -> KotlinTarget.classActualTargets(parentDescriptor) + is PropertySetterDescriptor -> listOf(PROPERTY_SETTER) + is PropertyGetterDescriptor -> listOf(PROPERTY_GETTER) is FunctionDescriptor -> listOf(FUNCTION) else -> listOf(FILE) } @@ -362,7 +363,7 @@ object ModifierCheckerCore { // JetFunction or JetPropertyAccessor for (parameter in listOwner.valueParameters) { if (!parameter.hasValOrVar()) { - check(parameter, trace, null, languageVersionSettings) + check(parameter, trace, trace[BindingContext.VALUE_PARAMETER, parameter], languageVersionSettings) } } } diff --git a/compiler/testData/diagnostics/tests/varargs/varargInSetter.kt b/compiler/testData/diagnostics/tests/varargs/varargInSetter.kt new file mode 100644 index 00000000000..9e81717e938 --- /dev/null +++ b/compiler/testData/diagnostics/tests/varargs/varargInSetter.kt @@ -0,0 +1,6 @@ +class My { + var x: String = "" + set(vararg value) { + x = value + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/varargs/varargInSetter.txt b/compiler/testData/diagnostics/tests/varargs/varargInSetter.txt new file mode 100644 index 00000000000..e12eaaab4a5 --- /dev/null +++ b/compiler/testData/diagnostics/tests/varargs/varargInSetter.txt @@ -0,0 +1,9 @@ +package + +public final class My { + public constructor My() + public final var x: 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/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index d631430ee94..25e9d9949f6 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -23011,6 +23011,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { doTest(fileName); } + @TestMetadata("varargInSetter.kt") + public void testVarargInSetter() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/varargs/varargInSetter.kt"); + doTest(fileName); + } + @TestMetadata("varargIterator.kt") public void testVarargIterator() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/varargs/varargIterator.kt");