Report WRONG_MODIFIER_CONTAINING_DECLARATION for vararg in setter
This commit is contained in:
@@ -21,9 +21,7 @@ import com.intellij.psi.PsiElement
|
|||||||
import com.intellij.psi.tree.TokenSet
|
import com.intellij.psi.tree.TokenSet
|
||||||
import org.jetbrains.kotlin.config.LanguageFeature
|
import org.jetbrains.kotlin.config.LanguageFeature
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget
|
import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget.*
|
import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget.*
|
||||||
import org.jetbrains.kotlin.diagnostics.Errors
|
import org.jetbrains.kotlin.diagnostics.Errors
|
||||||
@@ -122,7 +120,8 @@ object ModifierCheckerCore {
|
|||||||
INTERFACE, ENUM_CLASS, ENUM_ENTRY, FILE),
|
INTERFACE, ENUM_CLASS, ENUM_ENTRY, FILE),
|
||||||
COMPANION_KEYWORD to EnumSet.of(CLASS_ONLY, ENUM_CLASS, INTERFACE),
|
COMPANION_KEYWORD to EnumSet.of(CLASS_ONLY, ENUM_CLASS, INTERFACE),
|
||||||
FINAL_KEYWORD to EnumSet.of(CLASS_ONLY, LOCAL_CLASS, OBJECT, OBJECT_LITERAL,
|
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<KtModifierKeywordToken, Set<KotlinTarget>>()
|
val deprecatedParentTargetMap = mapOf<KtModifierKeywordToken, Set<KotlinTarget>>()
|
||||||
@@ -303,6 +302,8 @@ object ModifierCheckerCore {
|
|||||||
val modifier = node.elementType as KtModifierKeywordToken
|
val modifier = node.elementType as KtModifierKeywordToken
|
||||||
val actualParents: List<KotlinTarget> = when (parentDescriptor) {
|
val actualParents: List<KotlinTarget> = when (parentDescriptor) {
|
||||||
is ClassDescriptor -> KotlinTarget.classActualTargets(parentDescriptor)
|
is ClassDescriptor -> KotlinTarget.classActualTargets(parentDescriptor)
|
||||||
|
is PropertySetterDescriptor -> listOf(PROPERTY_SETTER)
|
||||||
|
is PropertyGetterDescriptor -> listOf(PROPERTY_GETTER)
|
||||||
is FunctionDescriptor -> listOf(FUNCTION)
|
is FunctionDescriptor -> listOf(FUNCTION)
|
||||||
else -> listOf(FILE)
|
else -> listOf(FILE)
|
||||||
}
|
}
|
||||||
@@ -362,7 +363,7 @@ object ModifierCheckerCore {
|
|||||||
// JetFunction or JetPropertyAccessor
|
// JetFunction or JetPropertyAccessor
|
||||||
for (parameter in listOwner.valueParameters) {
|
for (parameter in listOwner.valueParameters) {
|
||||||
if (!parameter.hasValOrVar()) {
|
if (!parameter.hasValOrVar()) {
|
||||||
check(parameter, trace, null, languageVersionSettings)
|
check(parameter, trace, trace[BindingContext.VALUE_PARAMETER, parameter], languageVersionSettings)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
class My {
|
||||||
|
var x: String = ""
|
||||||
|
set(<!WRONG_MODIFIER_CONTAINING_DECLARATION!>vararg<!> value) {
|
||||||
|
x = value
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
}
|
||||||
@@ -23011,6 +23011,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest {
|
|||||||
doTest(fileName);
|
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")
|
@TestMetadata("varargIterator.kt")
|
||||||
public void testVarargIterator() throws Exception {
|
public void testVarargIterator() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/varargs/varargIterator.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/varargs/varargIterator.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user