[FIR] Fix handling of WRONG_MODIFIER_TARGET

Implement DEPRECATED_MODIFIER, DEPRECATED_MODIFIER_FOR_TARGET, REDUNDANT_MODIFIER_FOR_TARGET
This commit is contained in:
Ivan Kochurkin
2021-08-04 20:20:38 +03:00
committed by TeamCityServer
parent e85940a1ac
commit cd6384eb20
114 changed files with 504 additions and 1033 deletions
@@ -38,5 +38,5 @@ object F {
} }
fun foo() { fun foo() {
const val a = "2" <!WRONG_MODIFIER_TARGET!>const<!> val a = "2"
} }
@@ -6,11 +6,11 @@ infix fun Int.good(x: Int) {}
<!INAPPLICABLE_INFIX_MODIFIER!>infix fun baz(x: Int, y: Int) {}<!> <!INAPPLICABLE_INFIX_MODIFIER!>infix fun baz(x: Int, y: Int) {}<!>
infix class A <!WRONG_MODIFIER_TARGET!>infix<!> class A
infix typealias B = A <!WRONG_MODIFIER_TARGET!>infix<!> typealias B = A
infix val x = 1 <!WRONG_MODIFIER_TARGET!>infix<!> val x = 1
class C { class C {
infix fun good(x: Int) {} infix fun good(x: Int) {}
@@ -82,4 +82,4 @@ abstract interface AbstractInterface
// Redundant final object // Redundant final object
<!REDUNDANT_MODALITY_MODIFIER!>final<!> object FinalObject <!REDUNDANT_MODALITY_MODIFIER!>final<!> object FinalObject
// Open interface // Open interface
open interface OpenInterface <!REDUNDANT_MODIFIER_FOR_TARGET!>open<!> interface OpenInterface
@@ -1,5 +1,5 @@
fun f() { fun f() {
<!REDUNDANT_VISIBILITY_MODIFIER!>public<!> <!CAN_BE_VAL!>var<!> <!UNUSED_VARIABLE!>baz<!> = 0 <!REDUNDANT_VISIBILITY_MODIFIER, WRONG_MODIFIER_TARGET!>public<!> <!CAN_BE_VAL!>var<!> <!UNUSED_VARIABLE!>baz<!> = 0
class LocalClass { class LocalClass {
<!REDUNDANT_VISIBILITY_MODIFIER!>internal<!> var foo = 0 <!REDUNDANT_VISIBILITY_MODIFIER!>internal<!> var foo = 0
} }
@@ -1,7 +1,7 @@
class A { class A {
<!INLINE_CLASS_NOT_TOP_LEVEL!>inline<!> inner class B(val x: Int) <!INLINE_CLASS_NOT_TOP_LEVEL!>inline<!> inner class B(val x: Int)
fun foo() { fun foo() {
<!INLINE_CLASS_NOT_TOP_LEVEL!>inline<!> class C(val x: Int) <!INLINE_CLASS_NOT_TOP_LEVEL, WRONG_MODIFIER_TARGET!>inline<!> class C(val x: Int)
} }
inner <!INLINE_CLASS_NOT_TOP_LEVEL!>value<!> class D(val x: Int) inner <!INLINE_CLASS_NOT_TOP_LEVEL!>value<!> class D(val x: Int)
} }
@@ -307,10 +307,22 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
parameter<String>("redundantModifier") parameter<String>("redundantModifier")
parameter<String>("conflictingModifier") parameter<String>("conflictingModifier")
} }
val DEPRECATED_MODIFIER by warning<PsiElement> {
parameter<String>("deprecatedModifier")
parameter<String>("actualModifier")
}
val DEPRECATED_MODIFIER_PAIR by error<PsiElement> { val DEPRECATED_MODIFIER_PAIR by error<PsiElement> {
parameter<String>("deprecatedModifier") parameter<String>("deprecatedModifier")
parameter<String>("conflictingModifier") parameter<String>("conflictingModifier")
} }
val DEPRECATED_MODIFIER_FOR_TARGET by warning<PsiElement> {
parameter<String>("deprecatedModifier")
parameter<String>("target")
}
val REDUNDANT_MODIFIER_FOR_TARGET by warning<PsiElement> {
parameter<String>("redundantModifier")
parameter<String>("target")
}
val INCOMPATIBLE_MODIFIERS by error<PsiElement> { val INCOMPATIBLE_MODIFIERS by error<PsiElement> {
parameter<String>("modifier1") parameter<String>("modifier1")
parameter<String>("modifier2") parameter<String>("modifier2")
@@ -37,7 +37,6 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.lexer.KtKeywordToken import org.jetbrains.kotlin.lexer.KtKeywordToken
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtAnnotationEntry import org.jetbrains.kotlin.psi.KtAnnotationEntry
@@ -256,7 +255,10 @@ object FirErrors {
val INAPPLICABLE_INFIX_MODIFIER by error0<PsiElement>() val INAPPLICABLE_INFIX_MODIFIER by error0<PsiElement>()
val REPEATED_MODIFIER by error1<PsiElement, String>() val REPEATED_MODIFIER by error1<PsiElement, String>()
val REDUNDANT_MODIFIER by error2<PsiElement, String, String>() val REDUNDANT_MODIFIER by error2<PsiElement, String, String>()
val DEPRECATED_MODIFIER by warning2<PsiElement, String, String>()
val DEPRECATED_MODIFIER_PAIR by error2<PsiElement, String, String>() val DEPRECATED_MODIFIER_PAIR by error2<PsiElement, String, String>()
val DEPRECATED_MODIFIER_FOR_TARGET by warning2<PsiElement, String, String>()
val REDUNDANT_MODIFIER_FOR_TARGET by warning2<PsiElement, String, String>()
val INCOMPATIBLE_MODIFIERS by error2<PsiElement, String, String>() val INCOMPATIBLE_MODIFIERS by error2<PsiElement, String, String>()
val REDUNDANT_OPEN_IN_INTERFACE by warning0<KtModifierListOwner>(SourceElementPositioningStrategies.OPEN_MODIFIER) val REDUNDANT_OPEN_IN_INTERFACE by warning0<KtModifierListOwner>(SourceElementPositioningStrategies.OPEN_MODIFIER)
val WRONG_MODIFIER_TARGET by error2<PsiElement, String, String>() val WRONG_MODIFIER_TARGET by error2<PsiElement, String, String>()
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget
import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
import org.jetbrains.kotlin.fir.analysis.diagnostics.* import org.jetbrains.kotlin.fir.analysis.diagnostics.*
@@ -33,13 +34,12 @@ import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.*
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.StandardClassIds
import org.jetbrains.kotlin.psi.KtModifierList import org.jetbrains.kotlin.psi.KtModifierList
import org.jetbrains.kotlin.psi.KtParameter.VAL_VAR_TOKEN_SET import org.jetbrains.kotlin.psi.KtParameter.VAL_VAR_TOKEN_SET
import org.jetbrains.kotlin.psi.psiUtil.visibilityModifierType import org.jetbrains.kotlin.psi.psiUtil.visibilityModifierType
import org.jetbrains.kotlin.resolve.AnnotationTargetList
import org.jetbrains.kotlin.resolve.AnnotationTargetLists
import org.jetbrains.kotlin.types.AbstractTypeChecker import org.jetbrains.kotlin.types.AbstractTypeChecker
import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.types.Variance
import org.jetbrains.kotlin.types.model.KotlinTypeMarker import org.jetbrains.kotlin.types.model.KotlinTypeMarker
@@ -671,3 +671,80 @@ fun FirFunctionSymbol<*>.isFunctionForExpectTypeFromCastFeature(): Boolean {
return true return true
} }
fun getActualTargetList(annotated: FirDeclaration): AnnotationTargetList {
fun CallableId.isMember(): Boolean {
return classId != null || isLocal // TODO: Replace with .containingClass (after fixing)
}
return when (annotated) {
is FirRegularClass -> {
AnnotationTargetList(
KotlinTarget.classActualTargets(annotated.classKind, annotated.isInner, annotated.isCompanion, annotated.isLocal)
)
}
is FirEnumEntry -> AnnotationTargetList(
KotlinTarget.classActualTargets(ClassKind.ENUM_ENTRY, annotated.isInner, isCompanionObject = false, isLocalClass = false)
)
is FirProperty -> {
when {
annotated.isLocal ->
if (annotated.source?.kind == FirFakeSourceElementKind.DesugaredComponentFunctionCall) {
TargetLists.T_DESTRUCTURING_DECLARATION
} else {
TargetLists.T_LOCAL_VARIABLE
}
annotated.symbol.callableId.isMember() ->
if (annotated.source?.kind == FirFakeSourceElementKind.PropertyFromParameter) {
TargetLists.T_VALUE_PARAMETER_WITH_VAL
} else {
TargetLists.T_MEMBER_PROPERTY(annotated.hasBackingField, annotated.delegate != null)
}
else ->
TargetLists.T_TOP_LEVEL_PROPERTY(annotated.hasBackingField, annotated.delegate != null)
}
}
is FirValueParameter -> {
when {
annotated.hasValOrVar -> TargetLists.T_VALUE_PARAMETER_WITH_VAL
else -> TargetLists.T_VALUE_PARAMETER_WITHOUT_VAL
}
}
is FirConstructor -> TargetLists.T_CONSTRUCTOR
is FirAnonymousFunction -> {
TargetLists.T_FUNCTION_EXPRESSION
}
is FirSimpleFunction -> {
when {
annotated.isLocal -> TargetLists.T_LOCAL_FUNCTION
annotated.symbol.callableId.isMember() -> TargetLists.T_MEMBER_FUNCTION
else -> TargetLists.T_TOP_LEVEL_FUNCTION
}
}
is FirTypeAlias -> TargetLists.T_TYPEALIAS
is FirPropertyAccessor -> if (annotated.isGetter) TargetLists.T_PROPERTY_GETTER else TargetLists.T_PROPERTY_SETTER
is FirFile -> TargetLists.T_FILE
is FirTypeParameter -> TargetLists.T_TYPE_PARAMETER
is FirAnonymousInitializer -> TargetLists.T_INITIALIZER
is FirAnonymousObject ->
if (annotated.source?.kind == FirFakeSourceElementKind.EnumInitializer) {
AnnotationTargetList(
KotlinTarget.classActualTargets(
ClassKind.ENUM_ENTRY,
isInnerClass = false,
isCompanionObject = false,
isLocalClass = false
)
)
} else {
TargetLists.T_OBJECT_LITERAL
}
// TODO: properly implement those cases
// is KtDestructuringDeclarationEntry -> TargetLists.T_LOCAL_VARIABLE
// is KtDestructuringDeclaration -> TargetLists.T_DESTRUCTURING_DECLARATION
// is KtLambdaExpression -> TargetLists.T_FUNCTION_LITERAL
else -> TargetLists.EMPTY
}
}
private typealias TargetLists = AnnotationTargetLists
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget
import org.jetbrains.kotlin.fir.FirFakeSourceElementKind import org.jetbrains.kotlin.fir.FirFakeSourceElementKind
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
import org.jetbrains.kotlin.fir.analysis.checkers.context.findClosest import org.jetbrains.kotlin.fir.analysis.checkers.context.findClosest
import org.jetbrains.kotlin.fir.analysis.checkers.getActualTargetList
import org.jetbrains.kotlin.fir.analysis.checkers.getAllowedAnnotationTargets import org.jetbrains.kotlin.fir.analysis.checkers.getAllowedAnnotationTargets
import org.jetbrains.kotlin.fir.analysis.diagnostics.* import org.jetbrains.kotlin.fir.analysis.diagnostics.*
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
@@ -198,72 +199,5 @@ object FirAnnotationChecker : FirAnnotatedDeclarationChecker() {
} }
} }
} }
private fun getActualTargetList(annotated: FirDeclaration): AnnotationTargetList {
return when (annotated) {
is FirRegularClass -> {
AnnotationTargetList(
KotlinTarget.classActualTargets(annotated.classKind, annotated.isInner, annotated.isCompanion, annotated.isLocal)
)
}
is FirEnumEntry -> AnnotationTargetList(
KotlinTarget.classActualTargets(ClassKind.ENUM_ENTRY, annotated.isInner, isCompanionObject = false, isLocalClass = false)
)
is FirProperty -> {
when {
annotated.isLocal ->
if (annotated.source?.kind == FirFakeSourceElementKind.DesugaredComponentFunctionCall) {
TargetLists.T_DESTRUCTURING_DECLARATION
} else {
TargetLists.T_LOCAL_VARIABLE
}
annotated.symbol.callableId.classId != null ->
if (annotated.source?.kind == FirFakeSourceElementKind.PropertyFromParameter) {
TargetLists.T_VALUE_PARAMETER_WITH_VAL
} else {
TargetLists.T_MEMBER_PROPERTY(annotated.hasBackingField, annotated.delegate != null)
}
else ->
TargetLists.T_TOP_LEVEL_PROPERTY(annotated.hasBackingField, annotated.delegate != null)
}
}
is FirValueParameter -> TargetLists.T_VALUE_PARAMETER_WITHOUT_VAL
is FirConstructor -> TargetLists.T_CONSTRUCTOR
is FirAnonymousFunction -> {
TargetLists.T_FUNCTION_EXPRESSION
}
is FirSimpleFunction -> {
when {
annotated.isLocal -> TargetLists.T_LOCAL_FUNCTION
annotated.symbol.callableId.classId != null -> TargetLists.T_MEMBER_FUNCTION
else -> TargetLists.T_TOP_LEVEL_FUNCTION
}
}
is FirTypeAlias -> TargetLists.T_TYPEALIAS
is FirPropertyAccessor -> if (annotated.isGetter) TargetLists.T_PROPERTY_GETTER else TargetLists.T_PROPERTY_SETTER
is FirFile -> TargetLists.T_FILE
is FirTypeParameter -> TargetLists.T_TYPE_PARAMETER
is FirAnonymousInitializer -> TargetLists.T_INITIALIZER
is FirAnonymousObject ->
if (annotated.source?.kind == FirFakeSourceElementKind.EnumInitializer) {
AnnotationTargetList(
KotlinTarget.classActualTargets(
ClassKind.ENUM_ENTRY,
isInnerClass = false,
isCompanionObject = false,
isLocalClass = false
)
)
} else {
TargetLists.T_OBJECT_LITERAL
}
// TODO: properly implement those cases
// is KtDestructuringDeclarationEntry -> TargetLists.T_LOCAL_VARIABLE
// is KtDestructuringDeclaration -> TargetLists.T_DESTRUCTURING_DECLARATION
// is KtLambdaExpression -> TargetLists.T_FUNCTION_LITERAL
else -> TargetLists.EMPTY
}
}
} }
private typealias TargetLists = AnnotationTargetLists
@@ -5,61 +5,65 @@
package org.jetbrains.kotlin.fir.analysis.checkers.declaration package org.jetbrains.kotlin.fir.analysis.checkers.declaration
import org.jetbrains.kotlin.KtNodeTypes import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.analysis.checkers.FirModifier import org.jetbrains.kotlin.fir.analysis.checkers.*
import org.jetbrains.kotlin.fir.analysis.checkers.FirModifierList
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
import org.jetbrains.kotlin.fir.analysis.checkers.getModifierList
import org.jetbrains.kotlin.fir.analysis.checkers.getKeywordType
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticFactory2
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
import org.jetbrains.kotlin.fir.analysis.diagnostics.reportOn import org.jetbrains.kotlin.fir.analysis.diagnostics.reportOn
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor import org.jetbrains.kotlin.fir.declarations.impl.FirPrimaryConstructor
import org.jetbrains.kotlin.resolve.Compatibility import org.jetbrains.kotlin.fir.declarations.utils.hasBody
import org.jetbrains.kotlin.resolve.KeywordType import org.jetbrains.kotlin.fir.declarations.utils.isCompanion
import org.jetbrains.kotlin.resolve.compatibility import org.jetbrains.kotlin.fir.declarations.utils.isInner
import org.jetbrains.kotlin.fir.declarations.utils.isLocal
import org.jetbrains.kotlin.fir.languageVersionSettings
import org.jetbrains.kotlin.resolve.*
object FirModifierChecker : FirBasicDeclarationChecker() { object FirModifierChecker : FirBasicDeclarationChecker() {
override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) { override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
if (declaration is FirFile) return if (declaration is FirFile) return
val source = declaration.source ?: return val source = declaration.source ?: return
if (!isDeclarationMappedToSourceCorrectly(declaration, source)) return if (source.kind is FirFakeSourceElementKind) return
if (context.containingDeclarations.last() is FirDefaultPropertyAccessor) return
val modifierList = source.getModifierList() if (declaration is FirProperty) {
modifierList?.let { checkModifiers(it, declaration, reporter, context) } fun checkPropertyAccessor(propertyAccessor: FirPropertyAccessor?) {
} if (propertyAccessor != null && !propertyAccessor.hasBody) {
check(propertyAccessor, context, reporter)
}
}
private fun isDeclarationMappedToSourceCorrectly(declaration: FirDeclaration, source: FirSourceElement): Boolean = checkPropertyAccessor(declaration.getter)
when (source.elementType) { checkPropertyAccessor(declaration.setter)
KtNodeTypes.CLASS -> declaration is FirClass
KtNodeTypes.OBJECT_DECLARATION -> declaration is FirClass
KtNodeTypes.PROPERTY -> declaration is FirProperty
KtNodeTypes.VALUE_PARAMETER -> declaration is FirValueParameter
// TODO more FIR-PSI relations possibly have to be added
else -> true
} }
source.getModifierList()?.let { checkModifiers(it, declaration, context, reporter) }
}
private fun checkModifiers( private fun checkModifiers(
list: FirModifierList, list: FirModifierList,
owner: FirDeclaration, owner: FirDeclaration,
reporter: DiagnosticReporter, context: CheckerContext,
context: CheckerContext reporter: DiagnosticReporter
) { ) {
// general strategy: report no more than one error and any number of warnings // general strategy: report no more than one error and any number of warnings
// therefore, a track of nodes with already reported errors should be kept // therefore, a track of nodes with already reported errors should be kept
val reportedNodes = hashSetOf<FirModifier<*>>() val reportedNodes = hashSetOf<FirModifier<*>>()
val actualTargets = getActualTargetList(owner).defaultTargets
val modifiers = list.modifiers val modifiers = list.modifiers
for (secondModifier in modifiers) { for ((secondIndex, secondModifier) in modifiers.withIndex()) {
for (firstModifier in modifiers) { for (firstIndex in 0 until secondIndex) {
if (firstModifier == secondModifier) { checkCompatibilityType(modifiers[firstIndex], secondModifier, reporter, reportedNodes, owner, context)
break }
if (secondModifier !in reportedNodes) {
when {
!checkTarget(modifierSource, modifierType, actualTargets, parent, context, reporter) -> reportedNodes += secondModifier
!checkParent(modifierSource, modifierType, actualParents, context, reporter) -> reportedNodes += secondModifier
} }
checkCompatibilityType(firstModifier, secondModifier, reporter, reportedNodes, owner, context)
} }
} }
} }
@@ -141,7 +145,68 @@ object FirModifierChecker : FirBasicDeclarationChecker() {
} }
} }
private fun KeywordType.render(): String { private fun checkTarget(
return this.toString().lowercase() modifier: FirModifier<*>,
actualTargets: List<KotlinTarget>,
parent: FirDeclaration?,
context: CheckerContext,
reporter: DiagnosticReporter
): Boolean {
val modifierType = getKeywordType(modifier)
fun checkModifier(factory: FirDiagnosticFactory2<String, String>): Boolean {
val map = when (factory) {
FirErrors.WRONG_MODIFIER_TARGET -> possibleTargetMap
FirErrors.DEPRECATED_MODIFIER_FOR_TARGET -> deprecatedTargetMap
else -> redundantTargetMap
}
val set = map[modifierType] ?: emptySet()
val checkResult = if (factory == FirErrors.WRONG_MODIFIER_TARGET) {
actualTargets.none { it in set }
} else {
actualTargets.any { it in set }
}
if (checkResult) {
reporter.reportOn(
modifier.source,
factory,
modifierType.render(),
actualTargets.firstOrThis(),
context
)
return false
}
return true
}
if (!checkModifier(FirErrors.WRONG_MODIFIER_TARGET)) {
return false
}
if (parent is FirRegularClass) {
if (modifierType == KeywordType.Expect || modifierType == KeywordType.Header) {
reporter.reportOn(modifierSource, FirErrors.WRONG_MODIFIER_TARGET, modifierType.render(), "nested class", context)
return false
}
}
val deprecatedModifierReplacement = deprecatedModifierMap[modifierType]
if (deprecatedModifierReplacement != null) {
reporter.reportOn(
modifier.source,
FirErrors.DEPRECATED_MODIFIER,
modifierType.render(),
deprecatedModifierReplacement.render(),
context
)
} else if (checkModifier(FirErrors.DEPRECATED_MODIFIER_FOR_TARGET)) {
checkModifier(FirErrors.REDUNDANT_MODIFIER_FOR_TARGET)
}
return true
}
private fun List<KotlinTarget>.firstOrThis(): String {
return firstOrNull()?.description ?: "this"
} }
} }
@@ -10,12 +10,12 @@ import org.jetbrains.kotlin.diagnostics.rendering.Renderers.RENDER_POSITION_VARI
import org.jetbrains.kotlin.diagnostics.rendering.Renderers.STRING import org.jetbrains.kotlin.diagnostics.rendering.Renderers.STRING
import org.jetbrains.kotlin.diagnostics.rendering.Renderers.commaSeparated import org.jetbrains.kotlin.diagnostics.rendering.Renderers.commaSeparated
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.AMBIGUOUS_CALLS import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.AMBIGUOUS_CALLS
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.COLLECTION
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.DECLARATION_NAME import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.DECLARATION_NAME
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.FIR import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.FIR
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.FQ_NAMES_IN_TYPES import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.FQ_NAMES_IN_TYPES
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.COLLECTION
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.MODULE_DATA
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.FUNCTION_PARAMETERS import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.FUNCTION_PARAMETERS
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.MODULE_DATA
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.NOT_RENDERED import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.NOT_RENDERED
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.NULLABLE_STRING import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.NULLABLE_STRING
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.RENDER_CLASS_OR_OBJECT import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.RENDER_CLASS_OR_OBJECT
@@ -125,6 +125,8 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DELEGATE_SPECIAL_
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DELEGATION_IN_INTERFACE import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DELEGATION_IN_INTERFACE
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DELEGATION_NOT_TO_INTERFACE import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DELEGATION_NOT_TO_INTERFACE
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DELEGATION_SUPER_CALL_IN_ENUM_CONSTRUCTOR import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DELEGATION_SUPER_CALL_IN_ENUM_CONSTRUCTOR
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DEPRECATED_MODIFIER
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DEPRECATED_MODIFIER_FOR_TARGET
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DEPRECATED_MODIFIER_PAIR import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DEPRECATED_MODIFIER_PAIR
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DEPRECATED_SINCE_KOTLIN_OUTSIDE_KOTLIN_SUBPACKAGE import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DEPRECATED_SINCE_KOTLIN_OUTSIDE_KOTLIN_SUBPACKAGE
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DEPRECATED_SINCE_KOTLIN_WITHOUT_ARGUMENTS import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DEPRECATED_SINCE_KOTLIN_WITHOUT_ARGUMENTS
@@ -340,6 +342,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REDUNDANT_EXPLICI
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REDUNDANT_INLINE_SUSPEND_FUNCTION_TYPE import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REDUNDANT_INLINE_SUSPEND_FUNCTION_TYPE
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REDUNDANT_MODALITY_MODIFIER import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REDUNDANT_MODALITY_MODIFIER
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REDUNDANT_MODIFIER import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REDUNDANT_MODIFIER
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REDUNDANT_MODIFIER_FOR_TARGET
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REDUNDANT_OPEN_IN_INTERFACE import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REDUNDANT_OPEN_IN_INTERFACE
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REDUNDANT_PROJECTION import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REDUNDANT_PROJECTION
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REDUNDANT_RETURN_UNIT_TYPE import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REDUNDANT_RETURN_UNIT_TYPE
@@ -466,7 +469,6 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.WRONG_MODIFIER_TA
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.WRONG_NUMBER_OF_TYPE_ARGUMENTS import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.WRONG_NUMBER_OF_TYPE_ARGUMENTS
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.WRONG_SETTER_PARAMETER_TYPE import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.WRONG_SETTER_PARAMETER_TYPE
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.WRONG_SETTER_RETURN_TYPE import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.WRONG_SETTER_RETURN_TYPE
import org.jetbrains.kotlin.name.StandardClassIds
@Suppress("unused") @Suppress("unused")
class FirDefaultErrorMessages { class FirDefaultErrorMessages {
@@ -727,7 +729,10 @@ class FirDefaultErrorMessages {
map.put(INAPPLICABLE_INFIX_MODIFIER, "''infix'' modifier is inapplicable on this function") map.put(INAPPLICABLE_INFIX_MODIFIER, "''infix'' modifier is inapplicable on this function")
map.put(REPEATED_MODIFIER, "Repeated ''{0}''", STRING) map.put(REPEATED_MODIFIER, "Repeated ''{0}''", STRING)
map.put(REDUNDANT_MODIFIER, "Modifier ''{0}'' is redundant because ''{1}'' is present", STRING, STRING) map.put(REDUNDANT_MODIFIER, "Modifier ''{0}'' is redundant because ''{1}'' is present", STRING, STRING)
map.put(DEPRECATED_MODIFIER, "Modifier ''{0}'' is deprecated, use ''{1}'' instead", STRING, STRING)
map.put(DEPRECATED_MODIFIER_PAIR, "Modifier ''{0}'' is deprecated in presence of ''{1}''", STRING, STRING) map.put(DEPRECATED_MODIFIER_PAIR, "Modifier ''{0}'' is deprecated in presence of ''{1}''", STRING, STRING)
map.put(DEPRECATED_MODIFIER_FOR_TARGET, "Modifier ''{0}'' is deprecated for ''{1}''", STRING, STRING)
map.put(REDUNDANT_MODIFIER_FOR_TARGET, "Modifier ''{0}'' is redundant for ''{1}''", STRING, STRING)
map.put(INCOMPATIBLE_MODIFIERS, "Modifier ''{0}'' is incompatible with ''{1}''", STRING, STRING) map.put(INCOMPATIBLE_MODIFIERS, "Modifier ''{0}'' is incompatible with ''{1}''", STRING, STRING)
map.put(REDUNDANT_OPEN_IN_INTERFACE, "Modifier 'open' is redundant for abstract interface members") map.put(REDUNDANT_OPEN_IN_INTERFACE, "Modifier 'open' is redundant for abstract interface members")
map.put(WRONG_MODIFIER_TARGET, "Modifier ''{0}'' is not applicable to ''{1}''", STRING, STRING) map.put(WRONG_MODIFIER_TARGET, "Modifier ''{0}'' is not applicable to ''{1}''", STRING, STRING)
@@ -1379,7 +1379,7 @@ class DeclarationsConverter(
} }
return buildValueParameter { return buildValueParameter {
source = setterParameter.toFirSourceElement() source = firValueParameter.source
moduleData = baseModuleData moduleData = baseModuleData
origin = FirDeclarationOrigin.Source origin = FirDeclarationOrigin.Source
returnTypeRef = if (firValueParameter.returnTypeRef == implicitType) propertyTypeRef else firValueParameter.returnTypeRef returnTypeRef = if (firValueParameter.returnTypeRef == implicitType) propertyTypeRef else firValueParameter.returnTypeRef
+19 -19
View File
@@ -3,44 +3,44 @@ package MyPackage
//properties //properties
<!MUST_BE_INITIALIZED!>val a: Int<!> <!MUST_BE_INITIALIZED!>val a: Int<!>
val a1: Int = 1 val a1: Int = 1
abstract val a2: Int <!WRONG_MODIFIER_TARGET!>abstract<!> val a2: Int
abstract val a3: Int = 1 <!WRONG_MODIFIER_TARGET!>abstract<!> val a3: Int = 1
<!MUST_BE_INITIALIZED!>var b: Int<!> private set <!MUST_BE_INITIALIZED!>var b: Int<!> private set
var b1: Int = 0; private set var b1: Int = 0; private set
abstract var b2: Int private set <!WRONG_MODIFIER_TARGET!>abstract<!> var b2: Int private set
abstract var b3: Int = 0; private set <!WRONG_MODIFIER_TARGET!>abstract<!> var b3: Int = 0; private set
<!MUST_BE_INITIALIZED!>var c: Int<!> set(v: Int) { field = v } <!MUST_BE_INITIALIZED!>var c: Int<!> set(v: Int) { field = v }
var c1: Int = 0; set(v: Int) { field = v } var c1: Int = 0; set(v: Int) { field = v }
abstract var c2: Int set(v: Int) { field = v } <!WRONG_MODIFIER_TARGET!>abstract<!> var c2: Int set(v: Int) { field = v }
abstract var c3: Int = 0; set(v: Int) { field = v } <!WRONG_MODIFIER_TARGET!>abstract<!> var c3: Int = 0; set(v: Int) { field = v }
val e: Int get() = a val e: Int get() = a
val e1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; get() = a val e1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; get() = a
abstract val e2: Int get() = a <!WRONG_MODIFIER_TARGET!>abstract<!> val e2: Int get() = a
abstract val e3: Int = 0; get() = a <!WRONG_MODIFIER_TARGET!>abstract<!> val e3: Int = 0; get() = a
//methods //methods
<!NON_MEMBER_FUNCTION_NO_BODY!>fun f()<!> <!NON_MEMBER_FUNCTION_NO_BODY!>fun f()<!>
fun g() {} fun g() {}
abstract fun h() <!WRONG_MODIFIER_TARGET!>abstract<!> fun h()
abstract fun j() {} <!WRONG_MODIFIER_TARGET!>abstract<!> fun j() {}
//property accessors //property accessors
var i: Int abstract get abstract set var i: Int <!WRONG_MODIFIER_TARGET!>abstract<!> get <!WRONG_MODIFIER_TARGET!>abstract<!> set
var i1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; abstract get abstract set var i1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; <!WRONG_MODIFIER_TARGET!>abstract<!> get <!WRONG_MODIFIER_TARGET!>abstract<!> set
var j: Int get() = i; abstract set var j: Int get() = i; <!WRONG_MODIFIER_TARGET!>abstract<!> set
var j1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; get() = i; abstract set var j1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; get() = i; <!WRONG_MODIFIER_TARGET!>abstract<!> set
<!MUST_BE_INITIALIZED!>var k: Int<!> abstract set <!MUST_BE_INITIALIZED!>var k: Int<!> <!WRONG_MODIFIER_TARGET!>abstract<!> set
var k1: Int = 0; abstract set var k1: Int = 0; <!WRONG_MODIFIER_TARGET!>abstract<!> set
var l: Int abstract get abstract set var l: Int <!WRONG_MODIFIER_TARGET!>abstract<!> get <!WRONG_MODIFIER_TARGET!>abstract<!> set
var l1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; abstract get abstract set var l1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; <!WRONG_MODIFIER_TARGET!>abstract<!> get <!WRONG_MODIFIER_TARGET!>abstract<!> set
var n: Int abstract get abstract set(v: Int) {} var n: Int <!WRONG_MODIFIER_TARGET!>abstract<!> get <!WRONG_MODIFIER_TARGET!>abstract<!> set(v: Int) {}
// FILE: c.kt // FILE: c.kt
//creating an instance //creating an instance
@@ -1,45 +0,0 @@
package abstract
abstract class MyAbstractClass() {
//properties
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val a: Int<!>
val a1: Int = 1
abstract val a2: Int
abstract val a3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>1<!>
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var b: Int<!> private set
var b1: Int = 0; private set
abstract var b2: Int <!PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY!>private<!> set
abstract var b3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; <!PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY!>private<!> set
<!MUST_BE_INITIALIZED!>var c: Int<!> set(v: Int) { field = v }
var c1: Int = 0; set(v: Int) { field = v }
abstract var c2: Int <!ABSTRACT_PROPERTY_WITH_SETTER!>set(v: Int) { field = v }<!>
abstract var c3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; <!ABSTRACT_PROPERTY_WITH_SETTER!>set(v: Int) { field = v }<!>
val e: Int get() = a
val e1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; get() = a
abstract val e2: Int <!ABSTRACT_PROPERTY_WITH_GETTER!>get() = a<!>
abstract val e3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; <!ABSTRACT_PROPERTY_WITH_GETTER!>get() = a<!>
//methods
<!NON_ABSTRACT_FUNCTION_WITH_NO_BODY!>fun f()<!>
fun g() {}
abstract fun h()
<!ABSTRACT_FUNCTION_WITH_BODY!>abstract<!> fun j() {}
//property accessors
var i: Int abstract get abstract set
var i1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; abstract get abstract set
var j: Int get() = i; abstract set
var j1: Int get() = i; abstract set
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var k: Int<!> abstract set
var k1: Int = 0; abstract set
var l: Int abstract get abstract set
var l1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; abstract get abstract set
var n: Int abstract get abstract set(v: Int) {}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
package abstract package abstract
abstract class MyAbstractClass() { abstract class MyAbstractClass() {
@@ -1,45 +0,0 @@
package abstract
class MyClass() {
//properties
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val a: Int<!>
val a1: Int = 1
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> val a2: Int
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> val a3: Int = 1
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var b: Int<!> private set
var b1: Int = 0; private set
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> var b2: Int private set
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> var b3: Int = 0; private set
<!MUST_BE_INITIALIZED!>var c: Int<!> set(v: Int) { field = v }
var c1: Int = 0; set(v: Int) { field = v }
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> var c2: Int set(v: Int) { field = v }
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> var c3: Int = 0; set(v: Int) { field = v }
val e: Int get() = a
val e1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; get() = a
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> val e2: Int get() = a
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> val e3: Int = 0; get() = a
//methods
<!NON_ABSTRACT_FUNCTION_WITH_NO_BODY!>fun f()<!>
fun g() {}
<!ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS!>abstract<!> fun h()
<!ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS, ABSTRACT_FUNCTION_WITH_BODY!>abstract<!> fun j() {}
//property accessors
var i: Int abstract get abstract set
var i1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; abstract get abstract set
var j: Int get() = i; abstract set
var j1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; get() = i; abstract set
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var k: Int<!> abstract set
var k1: Int = 0; abstract set
var l: Int abstract get abstract set
var l1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; abstract get abstract set
var n: Int abstract get abstract set(v: Int) {}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
package abstract package abstract
class MyClass() { class MyClass() {
@@ -1,45 +0,0 @@
package abstract
interface MyTrait {
//properties
val a: Int
val a1: Int = <!PROPERTY_INITIALIZER_IN_INTERFACE!>1<!>
abstract val a2: Int
abstract val a3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>1<!>
var b: Int <!PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY!>private<!> set
var b1: Int = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>; <!PRIVATE_SETTER_FOR_OPEN_PROPERTY!>private<!> set
abstract var b2: Int <!PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY!>private<!> set
abstract var b3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; <!PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY!>private<!> set
<!BACKING_FIELD_IN_INTERFACE!>var c: Int<!> set(v: Int) { field = v }
<!BACKING_FIELD_IN_INTERFACE!>var c1: Int<!> = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>; set(v: Int) { field = v }
abstract var c2: Int <!ABSTRACT_PROPERTY_WITH_SETTER!>set(v: Int) { field = v }<!>
abstract var c3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; <!ABSTRACT_PROPERTY_WITH_SETTER!>set(v: Int) { field = v }<!>
val e: Int get() = a
val e1: Int = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>; get() = a
abstract val e2: Int <!ABSTRACT_PROPERTY_WITH_GETTER!>get() = a<!>
abstract val e3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; <!ABSTRACT_PROPERTY_WITH_GETTER!>get() = a<!>
//methods
fun f()
fun g() {}
abstract fun h()
<!ABSTRACT_FUNCTION_WITH_BODY!>abstract<!> fun j() {}
//property accessors
var i: Int abstract get abstract set
var i1: Int = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>; abstract get abstract set
var j: Int get() = i; abstract set
var j1: Int = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>; get() = i; abstract set
var k: Int abstract set
var k1: Int = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>; abstract set
var l: Int abstract get abstract set
var l1: Int = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>; abstract get abstract set
var n: Int abstract get abstract set(v: Int) {}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
package abstract package abstract
interface MyTrait { interface MyTrait {
@@ -1,15 +0,0 @@
annotation class B
class A {
annotation companion object {}
}
annotation object O {}
annotation interface T {}
annotation fun f() = 0
annotation val x = 0
annotation var y = 0
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
annotation class B annotation class B
class A { class A {
@@ -4,7 +4,7 @@
annotation class Ann annotation class Ann
fun foo() { fun foo() {
for (@Ann private x in 1..100) { for (@Ann <!WRONG_MODIFIER_TARGET!>private<!> x in 1..100) {
if (x == 1) return if (x == 1) return
} }
} }
@@ -1,7 +0,0 @@
@Target(AnnotationTarget.CLASS)
annotation class My
data class Pair(val a: Int, val b: Int)
fun foo(): Int {
val (<!WRONG_ANNOTATION_TARGET!>@My<!> private a, <!WRONG_ANNOTATION_TARGET!>@My<!> public b) = Pair(12, 34)
return a + b
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
@Target(AnnotationTarget.CLASS) @Target(AnnotationTarget.CLASS)
annotation class My annotation class My
data class Pair(val a: Int, val b: Int) data class Pair(val a: Int, val b: Int)
@@ -1,8 +0,0 @@
// KT-9145
@Target(AnnotationTarget.CLASS)
annotation class Ann
var x: Int
get() = 1
set(<!WRONG_ANNOTATION_TARGET!>@Ann<!> private x) { }
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// KT-9145 // KT-9145
@Target(AnnotationTarget.CLASS) @Target(AnnotationTarget.CLASS)
@@ -1,9 +0,0 @@
// See EA-73584
data class<!SYNTAX!><!> {
}
// See KT-9296
data interface<!SYNTAX!><!> {
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// See EA-73584 // See EA-73584
data class<!SYNTAX!><!> { data class<!SYNTAX!><!> {
@@ -1 +0,0 @@
data object Object<!CONSTRUCTOR_IN_OBJECT!>(val x: Int, val y: Int)<!>
@@ -1 +1,2 @@
// FIR_IDENTICAL
<!WRONG_MODIFIER_TARGET!>data<!> object Object<!CONSTRUCTOR_IN_OBJECT!>(val x: Int, val y: Int)<!> <!WRONG_MODIFIER_TARGET!>data<!> object Object<!CONSTRUCTOR_IN_OBJECT!>(val x: Int, val y: Int)<!>
@@ -1,10 +1,10 @@
data enum class First(val x: Int) { <!WRONG_MODIFIER_TARGET!>data<!> enum class First(val x: Int) {
A(1), A(1),
B(2) B(2)
} }
data object Second <!WRONG_MODIFIER_TARGET!>data<!> object Second
data interface Third <!WRONG_MODIFIER_TARGET!>data<!> interface Third
data annotation class Fourth(val x: Int) <!WRONG_MODIFIER_TARGET!>data<!> annotation class Fourth(val x: Int)
@@ -93,7 +93,7 @@ class Foo {
private val packagePrivateProperty = object : MyClass(), MyTrait {} private val packagePrivateProperty = object : MyClass(), MyTrait {}
protected val packageProtectedProperty = object : MyClass(), MyTrait {} <!WRONG_MODIFIER_TARGET!>protected<!> val packageProtectedProperty = object : MyClass(), MyTrait {}
val packageInternalProperty = object : MyClass(), MyTrait {} val packageInternalProperty = object : MyClass(), MyTrait {}
@@ -101,7 +101,7 @@ internal val packageInternal2Property = object : MyClass(), MyTrait {}
public val packagePublicProperty = object : MyClass(), MyTrait {} public val packagePublicProperty = object : MyClass(), MyTrait {}
protected fun packageProtectedFunction() = object : MyClass(), MyTrait {} <!WRONG_MODIFIER_TARGET!>protected<!> fun packageProtectedFunction() = object : MyClass(), MyTrait {}
fun packageInternalFunction() = object : MyClass(), MyTrait {} fun packageInternalFunction() = object : MyClass(), MyTrait {}
@@ -1,19 +0,0 @@
// !DIAGNOSTICS: -MANY_COMPANION_OBJECTS -REDECLARATION -DUPLICATE_CLASS_NAMES
// KT-3464 Front-end shouldn't allow override modifier in class declaration
override class A {
override companion object {}
open companion object {}
abstract companion object {}
final companion object {}
}
override object B1 {}
open object B2 {}
abstract object B3 {}
final object B4 {}
override enum class C {}
override interface D {}
override annotation class E
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -MANY_COMPANION_OBJECTS -REDECLARATION -DUPLICATE_CLASS_NAMES // !DIAGNOSTICS: -MANY_COMPANION_OBJECTS -REDECLARATION -DUPLICATE_CLASS_NAMES
// KT-3464 Front-end shouldn't allow override modifier in class declaration // KT-3464 Front-end shouldn't allow override modifier in class declaration
@@ -5,8 +5,8 @@ class T {
} }
fun foo() { fun foo() {
public val i = 11 <!WRONG_MODIFIER_TARGET!>public<!> val i = 11
abstract val <!VARIABLE_WITH_NO_TYPE_NO_INITIALIZER!>j<!> <!WRONG_MODIFIER_TARGET!>abstract<!> val <!VARIABLE_WITH_NO_TYPE_NO_INITIALIZER!>j<!>
override fun T.baz() = 2 <!WRONG_MODIFIER_TARGET!>override<!> fun T.baz() = 2
private fun bar() = 2 <!WRONG_MODIFIER_TARGET!>private<!> fun bar() = 2
} }
@@ -4,10 +4,10 @@ class T {
fun baz() = 1 fun baz() = 1
} }
override fun zzz() {} <!WRONG_MODIFIER_TARGET!>override<!> fun zzz() {}
fun foo(t: T) { fun foo(t: T) {
override fun T.baz() = 2 <!WRONG_MODIFIER_TARGET!>override<!> fun T.baz() = 2
// was "Visibility is unknown yet exception" // was "Visibility is unknown yet exception"
t.baz() t.baz()
@@ -7,7 +7,7 @@ fun test() {
val <T> a0 = 0 val <T> a0 = 0
val <T : __UNRESOLVED__> a1 = "" val <T : __UNRESOLVED__> a1 = ""
val <T : String> a2 = 0 val <T : String> a2 = 0
const val <T> a3 = 0 <!WRONG_MODIFIER_TARGET!>const<!> val <T> a3 = 0
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> val <T> a4 = 0 <!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> val <T> a4 = 0
val <T> a5 by Delegate<Int>() val <T> a5 by Delegate<Int>()
val <T> a6 by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE!>Delegate<<!UNRESOLVED_REFERENCE!>T<!>>()<!> val <T> a6 by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE!>Delegate<<!UNRESOLVED_REFERENCE!>T<!>>()<!>
@@ -7,7 +7,7 @@ fun test() {
val <T> a0 = 0 val <T> a0 = 0
val <T : __UNRESOLVED__> a1 = "" val <T : __UNRESOLVED__> a1 = ""
val <T : String> a2 = 0 val <T : String> a2 = 0
const val <T> a3 = 0 <!WRONG_MODIFIER_TARGET!>const<!> val <T> a3 = 0
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> val <T> a4 = 0 <!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> val <T> a4 = 0
val <T> a5 by Delegate<Int>() val <T> a5 by Delegate<Int>()
val <T> a6 by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE!>Delegate<<!UNRESOLVED_REFERENCE!>T<!>>()<!> val <T> a6 by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE!>Delegate<<!UNRESOLVED_REFERENCE!>T<!>>()<!>
@@ -1,12 +0,0 @@
package d
abstract val a : Int = 1
override val c : Int = 1
final fun foo() = 2
abstract fun baz() = 2
class T {}
override fun T.bar() = 2
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
package d package d
<!WRONG_MODIFIER_TARGET!>abstract<!> val a : Int = 1 <!WRONG_MODIFIER_TARGET!>abstract<!> val a : Int = 1
@@ -1,10 +1,10 @@
package d package d
override val f : ()-> Int = { 12 } <!WRONG_MODIFIER_TARGET!>override<!> val f : ()-> Int = { 12 }
fun test() { fun test() {
f() f()
} }
var g: Int = 1 var g: Int = 1
protected set(i: Int) {} protected set(i: Int) {}
@@ -1,18 +0,0 @@
interface A {
sealed fun foo()
sealed var bar: Unit
}
interface B {
abstract fun foo()
abstract var bar: Unit
}
interface C : A, B
abstract class D(sealed var x: Int) {
abstract var y: Unit
sealed set
}
abstract class E : D(42)
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
interface A { interface A {
<!WRONG_MODIFIER_TARGET!>sealed<!> fun foo() <!WRONG_MODIFIER_TARGET!>sealed<!> fun foo()
<!WRONG_MODIFIER_TARGET!>sealed<!> var bar: Unit <!WRONG_MODIFIER_TARGET!>sealed<!> var bar: Unit
@@ -1,175 +0,0 @@
open class MyClass {
fun f1() {}
}
class Foo {
protected val protectedProperty = object : MyClass() {}
public val publicProperty = object : MyClass() {}
protected val protected2Property : MyClass = object : MyClass() {fun invisible() {}}
public val public2Property : MyClass = object : MyClass() {fun invisible() {}}
private val privateProperty = object : MyClass() {fun visible() {}}
internal val internalProperty = object : MyClass() { fun invisible() {}}
fun testProperties() {
privateProperty.f1()
internalProperty.f1()
protected2Property.f1()
public2Property.f1()
privateProperty.visible()
protected2Property.<!UNRESOLVED_REFERENCE!>invisible<!>()
public2Property.<!UNRESOLVED_REFERENCE!>invisible<!>()
internalProperty.<!UNRESOLVED_REFERENCE!>invisible<!>()
}
protected fun protectedFunction() = object : MyClass() {}
public fun publicFunction() = object : MyClass() {}
protected fun protected2Function(): MyClass = object : MyClass() {fun visible() {}}
public fun public2Function(): MyClass = object : MyClass() {fun visible() {}}
private fun privateFunction() = object : MyClass() {fun visible() {}}
internal fun internalFunction() = object : MyClass() {fun invisible() {}}
fun testFunctions() {
privateFunction().f1()
internalFunction().f1()
public2Function().f1()
protected2Function().f1()
privateFunction().visible()
internalFunction().<!UNRESOLVED_REFERENCE!>invisible<!>()
public2Function().<!UNRESOLVED_REFERENCE!>invisible<!>()
protected2Function().<!UNRESOLVED_REFERENCE!>invisible<!>()
}
class FooInner {
public val publicProperty = object : MyClass() {}
protected val protectedProperty = object : MyClass() {}
protected val protected2Property : MyClass = object : MyClass() {fun invisible() {}}
public val public2Property : MyClass = object : MyClass() {fun invisible() {}}
private val privateProperty = object : MyClass() {fun visible() {}}
internal val internalProperty = object : MyClass() { fun invisible() {}}
fun testProperties() {
privateProperty.f1()
internalProperty.f1()
protected2Property.f1()
public2Property.f1()
privateProperty.visible()
protected2Property.<!UNRESOLVED_REFERENCE!>invisible<!>()
public2Property.<!UNRESOLVED_REFERENCE!>invisible<!>()
internalProperty.<!UNRESOLVED_REFERENCE!>invisible<!>()
}
protected fun protectedFunction() = object : MyClass() {}
public fun publicFunction() = object : MyClass() {}
protected fun protected2Function(): MyClass = object : MyClass() {fun visible() {}}
public fun public2Function(): MyClass = object : MyClass() {fun visible() {}}
private fun privateFunction() = object : MyClass() {fun visible() {}}
internal fun internalFunction() = object : MyClass() {fun invisible() {}}
fun testFunctions() {
privateFunction().f1()
internalFunction().f1()
public2Function().f1()
protected2Function().f1()
privateFunction().visible()
internalFunction().<!UNRESOLVED_REFERENCE!>invisible<!>()
public2Function().<!UNRESOLVED_REFERENCE!>invisible<!>()
protected2Function().<!UNRESOLVED_REFERENCE!>invisible<!>()
}
}
fun foo() {
val localVar = object : MyClass() {}
localVar.f1()
fun foo2() = object : MyClass() {}
foo2().f1()
}
}
protected val packageProtectedProperty = object : MyClass() {}
public val packagePublicProperty = object : MyClass() {}
public val packagePublic2Property : MyClass = object : MyClass() {fun invisible() {}}
private val packagePrivateProperty = object : MyClass() {fun invisible() {}}
internal val packageInternalProperty = object : MyClass() {fun invisible() {}}
fun testProperties() {
packagePrivateProperty.f1()
packageInternalProperty.f1()
packagePublic2Property.f1()
packagePrivateProperty.invisible()
packageInternalProperty.<!UNRESOLVED_REFERENCE!>invisible<!>()
packagePublic2Property.<!UNRESOLVED_REFERENCE!>invisible<!>()
}
private fun privateFunction() = object : MyClass() {fun invisible() {}}
protected fun protectedFunction() = object : MyClass() {}
public fun publicFunction() = object : MyClass() {}
public fun public2Function() : MyClass = object : MyClass() {fun invisible() {}}
internal fun internalFunction() = object : MyClass() {fun invisible() {}}
fun testFunctions() {
privateFunction().f1()
internalFunction().f1()
public2Function().f1()
privateFunction().invisible()
internalFunction().<!UNRESOLVED_REFERENCE!>invisible<!>()
public2Function().<!UNRESOLVED_REFERENCE!>invisible<!>()
}
fun fooPackage() {
val packageLocalVar = object : MyClass() {fun visible() {}}
packageLocalVar.f1()
packageLocalVar.visible()
fun fooPackageLocal() = object : MyClass() {fun visible() {}}
fooPackageLocal().f1()
fooPackageLocal().visible()
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
open class MyClass { open class MyClass {
fun f1() {} fun f1() {}
} }
@@ -8,7 +8,7 @@ interface T {}
class Br(t : T) : T by t {} class Br(t : T) : T by t {}
open enum class EN() { <!WRONG_MODIFIER_TARGET!>open<!> enum class EN() {
A A
} }
@@ -1,3 +0,0 @@
package abstract
abstract enum class MyAbstractEnum() {}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
package abstract package abstract
<!WRONG_MODIFIER_TARGET!>abstract<!> enum class MyAbstractEnum() {} <!WRONG_MODIFIER_TARGET!>abstract<!> enum class MyAbstractEnum() {}
@@ -31,17 +31,17 @@ enum class MyEnum() {
<!ABSTRACT_FUNCTION_WITH_BODY!>abstract<!> fun j() {} <!ABSTRACT_FUNCTION_WITH_BODY!>abstract<!> fun j() {}
//property accessors //property accessors
var i: Int abstract get abstract set var i: Int <!WRONG_MODIFIER_TARGET!>abstract<!> get <!WRONG_MODIFIER_TARGET!>abstract<!> set
var i1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; abstract get abstract set var i1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; <!WRONG_MODIFIER_TARGET!>abstract<!> get <!WRONG_MODIFIER_TARGET!>abstract<!> set
var j: Int get() = i; abstract set var j: Int get() = i; <!WRONG_MODIFIER_TARGET!>abstract<!> set
var j1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; get() = i; abstract set var j1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; get() = i; <!WRONG_MODIFIER_TARGET!>abstract<!> set
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var k: Int<!> abstract set <!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var k: Int<!> <!WRONG_MODIFIER_TARGET!>abstract<!> set
var k1: Int = 0; abstract set var k1: Int = 0; <!WRONG_MODIFIER_TARGET!>abstract<!> set
var l: Int abstract get abstract set var l: Int <!WRONG_MODIFIER_TARGET!>abstract<!> get <!WRONG_MODIFIER_TARGET!>abstract<!> set
var l1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; abstract get abstract set var l1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; <!WRONG_MODIFIER_TARGET!>abstract<!> get <!WRONG_MODIFIER_TARGET!>abstract<!> set
var n: Int abstract get abstract set(v: Int) {} var n: Int <!WRONG_MODIFIER_TARGET!>abstract<!> get <!WRONG_MODIFIER_TARGET!>abstract<!> set(v: Int) {}
} }
@@ -1,15 +0,0 @@
enum class B {}
class A {
enum companion object {}
}
enum object O {}
enum interface T {}
enum fun f() = 0
enum val x = 0
enum var y = 0
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
enum class B {} enum class B {}
class A { class A {
@@ -1,3 +0,0 @@
annotation enum class E {
D
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
<!WRONG_MODIFIER_TARGET!>annotation<!> enum class E { <!WRONG_MODIFIER_TARGET!>annotation<!> enum class E {
D D
} }
@@ -2,7 +2,7 @@
public enum MyJavaEnum {} public enum MyJavaEnum {}
// FILE: test.kt // FILE: test.kt
open enum class MyEnum() { <!WRONG_MODIFIER_TARGET!>open<!> enum class MyEnum() {
A() A()
} }
@@ -2,7 +2,7 @@
enum class E { enum class E {
ABC { ABC {
enum class F { <!WRONG_MODIFIER_TARGET!>enum<!> class F {
DEF DEF
} }
} }
@@ -2,7 +2,7 @@
enum class E { enum class E {
ABC { ABC {
enum class F { <!WRONG_MODIFIER_TARGET!>enum<!> class F {
DEF DEF
} }
} }
@@ -1,8 +1,8 @@
enum interface Some { <!WRONG_MODIFIER_TARGET!>enum<!> interface Some {
// Enum part // Enum part
D; D;
// Interface like part // Interface like part
fun test() fun test()
val foo: Int val foo: Int
} }
+5 -5
View File
@@ -1,20 +1,20 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE // !DIAGNOSTICS: -UNUSED_VARIABLE
fun foo() { fun foo() {
enum class A { <!WRONG_MODIFIER_TARGET!>enum<!> class A {
FOO, FOO,
BAR BAR
} }
val foo = A.FOO val foo = A.FOO
val b = object { val b = object {
enum class B {} <!WRONG_MODIFIER_TARGET!>enum<!> class B {}
} }
class C { class C {
enum class D {} <!WRONG_MODIFIER_TARGET!>enum<!> class D {}
} }
val f = { val f = {
enum class E {} <!WRONG_MODIFIER_TARGET!>enum<!> class E {}
} }
enum class<!SYNTAX!><!> {} <!WRONG_MODIFIER_TARGET!>enum<!> class<!SYNTAX!><!> {}
} }
@@ -1,23 +0,0 @@
enum class E {
public final SUBCLASS {
fun foo() {}
},
public PUBLIC,
protected PROTECTED,
private PRIVATE,
internal INTERNAL,
abstract ABSTRACT,
open OPEN,
override OVERRIDE,
final FINAL,
inner INNER,
annotation ANNOTATION,
enum ENUM,
out OUT,
in IN,
vararg VARARG,
reified REIFIED
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
enum class E { enum class E {
<!WRONG_MODIFIER_TARGET!>public<!> <!WRONG_MODIFIER_TARGET!>final<!> SUBCLASS { <!WRONG_MODIFIER_TARGET!>public<!> <!WRONG_MODIFIER_TARGET!>final<!> SUBCLASS {
fun foo() {} fun foo() {}
@@ -1,15 +0,0 @@
// !CHECK_TYPE
// !DIAGNOSTICS: -UNUSED_PARAMETER
data class A(val x: Int, val y: String)
fun foo(block: (A) -> Unit) { }
@Target(AnnotationTarget.VALUE_PARAMETER)
annotation class Ann
fun bar() {
foo { (private inline a, <!WRONG_ANNOTATION_TARGET!>@Ann<!> b) ->
a checkType { _<Int>() }
b checkType { _<String>() }
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !CHECK_TYPE // !CHECK_TYPE
// !DIAGNOSTICS: -UNUSED_PARAMETER // !DIAGNOSTICS: -UNUSED_PARAMETER
data class A(val x: Int, val y: String) data class A(val x: Int, val y: String)
@@ -1,59 +0,0 @@
abstract class Test() {
abstract val x : Int
abstract val x1 : Int get
abstract val x2 : Int <!ABSTRACT_PROPERTY_WITH_GETTER!>get() = 1<!>
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val a : Int<!>
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val b : Int<!> get
val c = 1
val c1 = 1
get
val c2 : Int
get() = 1
val c3 : Int
get() { return 1 }
val c4 : Int
get() = 1
<!MUST_BE_INITIALIZED!>val c5 : Int<!>
get() = field + 1
abstract var y : Int
abstract var y1 : Int get
abstract var y2 : Int set
abstract var y3 : Int set get
abstract var y4 : Int set <!ABSTRACT_PROPERTY_WITH_GETTER!>get() = 1<!>
abstract var y5 : Int <!ABSTRACT_PROPERTY_WITH_SETTER!>set(x) {}<!> <!ABSTRACT_PROPERTY_WITH_GETTER!>get() = 1<!>
abstract var y6 : Int <!ABSTRACT_PROPERTY_WITH_SETTER!>set(x) {}<!>
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var v : Int<!>
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var v1 : Int<!> get
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var v2 : Int<!> get set
<!MUST_BE_INITIALIZED!>var v3 : Int<!> get() = 1; set
var v4 : Int get() = 1; set(x){}
<!MUST_BE_INITIALIZED!>var v5 : Int<!> get() = 1; set(x){field = x}
<!MUST_BE_INITIALIZED!>var v6 : Int<!> get() = field + 1; set(x){}
abstract val v7 : Int get
abstract var v8 : Int get set
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var v9 : Int<!> set
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var v10 : Int<!> get
abstract val v11 : Int abstract get
abstract var v12 : Int abstract get abstract set
}
open class Super(i : Int)
class TestPCParameters(w : Int, x : Int, val y : Int, var z : Int) : Super(w) {
val xx = w
init {
w + 1
}
fun foo() = <!UNRESOLVED_REFERENCE!>x<!>
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
abstract class Test() { abstract class Test() {
abstract val x : Int abstract val x : Int
abstract val x1 : Int get abstract val x1 : Int get
@@ -1,8 +0,0 @@
// !LANGUAGE: +InlineClasses, -JvmInlineValueClasses
inline class Foo(val x: Int)
inline interface InlineInterface
inline annotation class InlineAnn
inline object InlineObject
inline enum class InlineEnum
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !LANGUAGE: +InlineClasses, -JvmInlineValueClasses // !LANGUAGE: +InlineClasses, -JvmInlineValueClasses
inline class Foo(val x: Int) inline class Foo(val x: Int)
@@ -3,8 +3,8 @@
inline class Foo(val x: Int) inline class Foo(val x: Int)
inline annotation class InlineAnn <!WRONG_MODIFIER_TARGET!>inline<!> annotation class InlineAnn
inline object InlineObject <!WRONG_MODIFIER_TARGET!>inline<!> object InlineObject
inline enum class InlineEnum <!WRONG_MODIFIER_TARGET!>inline<!> enum class InlineEnum
inline class NotVal(<!INLINE_CLASS_CONSTRUCTOR_NOT_FINAL_READ_ONLY_PARAMETER!>x: Int<!>) inline class NotVal(<!INLINE_CLASS_CONSTRUCTOR_NOT_FINAL_READ_ONLY_PARAMETER!>x: Int<!>)
@@ -29,7 +29,7 @@ object B2 {
} }
fun foo() { fun foo() {
<!INLINE_CLASS_NOT_TOP_LEVEL!>inline<!> class C4(val x: Int) <!INLINE_CLASS_NOT_TOP_LEVEL, WRONG_MODIFIER_TARGET!>inline<!> class C4(val x: Int)
} }
final inline class D0(val x: Int) final inline class D0(val x: Int)
@@ -3,6 +3,6 @@
inline class Foo(val x: Int) { inline class Foo(val x: Int) {
<!INNER_CLASS_INSIDE_INLINE_CLASS!>inner<!> class InnerC <!INNER_CLASS_INSIDE_INLINE_CLASS!>inner<!> class InnerC
<!INNER_CLASS_INSIDE_INLINE_CLASS!>inner<!> object InnerO <!INNER_CLASS_INSIDE_INLINE_CLASS, WRONG_MODIFIER_TARGET!>inner<!> object InnerO
<!INNER_CLASS_INSIDE_INLINE_CLASS!>inner<!> interface InnerI <!INNER_CLASS_INSIDE_INLINE_CLASS, WRONG_MODIFIER_TARGET!>inner<!> interface InnerI
} }
@@ -1,45 +0,0 @@
// !LANGUAGE: -InnerClassInEnumEntryClass
inner fun foo() {}
inner val prop = 42
inner class A
inner interface B
inner object C
class D {
inner class E
inner interface F
inner object G
inner enum class R
inner annotation class S
inner companion object
}
enum class H {
I0 {
inner class II0
},
inner I {
inner class II
};
inner class J
}
interface K {
inner class L
}
object N {
inner class O
}
class P {
companion object {
inner class Q
}
}
val R = object {
inner class S
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !LANGUAGE: -InnerClassInEnumEntryClass // !LANGUAGE: -InnerClassInEnumEntryClass
<!WRONG_MODIFIER_TARGET!>inner<!> fun foo() {} <!WRONG_MODIFIER_TARGET!>inner<!> fun foo() {}
<!WRONG_MODIFIER_TARGET!>inner<!> val prop = 42 <!WRONG_MODIFIER_TARGET!>inner<!> val prop = 42
@@ -1,45 +0,0 @@
// !LANGUAGE: +InnerClassInEnumEntryClass
inner fun foo() {}
inner val prop = 42
inner class A
inner interface B
inner object C
class D {
inner class E
inner interface F
inner object G
inner enum class R
inner annotation class S
inner companion object
}
enum class H {
I0 {
inner class II0
},
inner I {
inner class II
};
inner class J
}
interface K {
inner class L
}
object N {
inner class O
}
class P {
companion object {
inner class Q
}
}
val R = object {
inner class S
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !LANGUAGE: +InnerClassInEnumEntryClass // !LANGUAGE: +InnerClassInEnumEntryClass
<!WRONG_MODIFIER_TARGET!>inner<!> fun foo() {} <!WRONG_MODIFIER_TARGET!>inner<!> fun foo() {}
<!WRONG_MODIFIER_TARGET!>inner<!> val prop = 42 <!WRONG_MODIFIER_TARGET!>inner<!> val prop = 42
@@ -10,7 +10,7 @@ enum class Enum {
<!LOCAL_OBJECT_NOT_ALLOWED!>object TestObject<!> <!LOCAL_OBJECT_NOT_ALLOWED!>object TestObject<!>
enum class TestEnumClass { <!WRONG_MODIFIER_TARGET!>enum<!> class TestEnumClass {
OTHER_ENTRY OTHER_ENTRY
} }
@@ -10,7 +10,7 @@ enum class Enum {
<!LOCAL_OBJECT_NOT_ALLOWED!>object TestObject<!> <!LOCAL_OBJECT_NOT_ALLOWED!>object TestObject<!>
enum class TestEnumClass { <!WRONG_MODIFIER_TARGET!>enum<!> class TestEnumClass {
OTHER_ENTRY OTHER_ENTRY
} }
@@ -10,7 +10,7 @@ enum class Enum {
<!LOCAL_OBJECT_NOT_ALLOWED!>object TestObject<!> <!LOCAL_OBJECT_NOT_ALLOWED!>object TestObject<!>
enum class TestEnumClass { <!WRONG_MODIFIER_TARGET!>enum<!> class TestEnumClass {
OTHER_ENTRY OTHER_ENTRY
} }
@@ -8,17 +8,17 @@ abstract class A() {
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>open var r: String<!> <!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>open var r: String<!>
get get
abstract protected set <!WRONG_MODIFIER_TARGET!>abstract<!> protected set
} }
final interface T {} <!WRONG_MODIFIER_TARGET!>final<!> interface T {}
class FinalClass() { class FinalClass() {
<!NON_FINAL_MEMBER_IN_FINAL_CLASS!>open<!> fun foo() {} <!NON_FINAL_MEMBER_IN_FINAL_CLASS!>open<!> fun foo() {}
val i: Int = 1 val i: Int = 1
open get(): Int = field <!WRONG_MODIFIER_TARGET!>open<!> get(): Int = field
var j: Int = 1 var j: Int = 1
open set(v: Int) {} <!WRONG_MODIFIER_TARGET!>open<!> set(v: Int) {}
} }
<!INCOMPATIBLE_MODIFIERS!>private<!> <!INCOMPATIBLE_MODIFIERS!>public<!> class C <!INCOMPATIBLE_MODIFIERS!>private<!> <!INCOMPATIBLE_MODIFIERS!>public<!> class C
@@ -32,107 +32,107 @@ class LegalModifier(val a: Int, @annotated private var b: String, @annotated var
//Check illegal modifier in constructor parameters //Check illegal modifier in constructor parameters
class IllegalModifiers1( class IllegalModifiers1(
<!INCOMPATIBLE_MODIFIERS!>in<!> <!WRONG_MODIFIER_TARGET!>in<!>
<!INCOMPATIBLE_MODIFIERS!>out<!> <!INCOMPATIBLE_MODIFIERS!>out<!>
reified <!WRONG_MODIFIER_TARGET!>reified<!>
enum <!WRONG_MODIFIER_TARGET!>enum<!>
private <!WRONG_MODIFIER_TARGET!>private<!>
const <!WRONG_MODIFIER_TARGET!>const<!>
a: Int) a: Int)
//Check multiple illegal modifiers in constructor //Check multiple illegal modifiers in constructor
class IllegalModifiers2(<!INCOMPATIBLE_MODIFIERS!>private<!> <!INCOMPATIBLE_MODIFIERS!>abstract<!> a: Int) class IllegalModifiers2(<!WRONG_MODIFIER_TARGET!>private<!> <!INCOMPATIBLE_MODIFIERS!>abstract<!> a: Int)
//Check annotations with illegal modifiers in constructor //Check annotations with illegal modifiers in constructor
class IllegalModifiers3(@annotated public abstract b: String) class IllegalModifiers3(@annotated <!WRONG_MODIFIER_TARGET!>public<!> <!WRONG_MODIFIER_TARGET!>abstract<!> b: String)
//Check annotations and vararg with illegal modifiers in constructor //Check annotations and vararg with illegal modifiers in constructor
class IllegalModifiers4(val a: Int, @annotated("a text") protected vararg v: Int) class IllegalModifiers4(val a: Int, @annotated("a text") <!WRONG_MODIFIER_TARGET!>protected<!> vararg v: Int)
//Check illegal modifiers for functions and catch block //Check illegal modifiers for functions and catch block
abstract class IllegalModifiers5() { abstract class IllegalModifiers5() {
//Check illegal modifier in function parameter //Check illegal modifier in function parameter
abstract fun foo(public a: Int, vararg v: String) abstract fun foo(<!WRONG_MODIFIER_TARGET!>public<!> a: Int, vararg v: String)
//Check multiple illegal modifiers in function parameter //Check multiple illegal modifiers in function parameter
abstract fun bar(public abstract a: Int, vararg v: String) abstract fun bar(<!WRONG_MODIFIER_TARGET!>public<!> <!WRONG_MODIFIER_TARGET!>abstract<!> a: Int, vararg v: String)
//Check annotations with illegal modifiers //Check annotations with illegal modifiers
abstract fun baz(@annotated("a text") public abstract a: Int) abstract fun baz(@annotated("a text") <!WRONG_MODIFIER_TARGET!>public<!> <!WRONG_MODIFIER_TARGET!>abstract<!> a: Int)
private fun qux() { private fun qux() {
//Check illegal modifier in catch block //Check illegal modifier in catch block
try {} catch (<!INCOMPATIBLE_MODIFIERS!>in<!> <!INCOMPATIBLE_MODIFIERS!>out<!> reified enum public e: Exception) {} try {} catch (<!WRONG_MODIFIER_TARGET!>in<!> <!INCOMPATIBLE_MODIFIERS!>out<!> <!WRONG_MODIFIER_TARGET!>reified<!> <!WRONG_MODIFIER_TARGET!>enum<!> <!WRONG_MODIFIER_TARGET!>public<!> e: Exception) {}
//Check multiple illegal modifiers in catch block //Check multiple illegal modifiers in catch block
try {} catch (<!INCOMPATIBLE_MODIFIERS!>in<!> <!INCOMPATIBLE_MODIFIERS!>out<!> reified enum abstract public e: Exception) {} try {} catch (<!WRONG_MODIFIER_TARGET!>in<!> <!INCOMPATIBLE_MODIFIERS!>out<!> <!WRONG_MODIFIER_TARGET!>reified<!> <!WRONG_MODIFIER_TARGET!>enum<!> <!WRONG_MODIFIER_TARGET!>abstract<!> <!WRONG_MODIFIER_TARGET!>public<!> e: Exception) {}
//Check annotations with illegal modifiers //Check annotations with illegal modifiers
try {} catch (@annotated("a text") abstract public e: Exception) {} try {} catch (@annotated("a text") <!WRONG_MODIFIER_TARGET!>abstract<!> <!WRONG_MODIFIER_TARGET!>public<!> e: Exception) {}
} }
} }
//Check illegal modifiers on anonymous initializers //Check illegal modifiers on anonymous initializers
abstract class IllegalModifiers6() { abstract class IllegalModifiers6() {
public init {} <!WRONG_MODIFIER_TARGET!>public<!> init {}
private init {} <!WRONG_MODIFIER_TARGET!>private<!> init {}
protected init {} <!WRONG_MODIFIER_TARGET!>protected<!> init {}
vararg init {} <!WRONG_MODIFIER_TARGET!>vararg<!> init {}
abstract init {} <!WRONG_MODIFIER_TARGET!>abstract<!> init {}
open init {} <!WRONG_MODIFIER_TARGET!>open<!> init {}
final init {} <!WRONG_MODIFIER_TARGET!>final<!> init {}
public @annotated init {} <!WRONG_MODIFIER_TARGET!>public<!> @annotated init {}
private @IllegalModifiers6() init {} <!WRONG_MODIFIER_TARGET!>private<!> @IllegalModifiers6() init {}
} }
// strange inappropriate modifiers usages // strange inappropriate modifiers usages
override <!WRONG_MODIFIER_TARGET!>override<!>
<!INCOMPATIBLE_MODIFIERS!>out<!> <!WRONG_MODIFIER_TARGET!>out<!>
<!INCOMPATIBLE_MODIFIERS!>in<!> <!INCOMPATIBLE_MODIFIERS!>in<!>
vararg <!WRONG_MODIFIER_TARGET!>vararg<!>
reified <!WRONG_MODIFIER_TARGET!>reified<!>
class IllegalModifiers7() { class IllegalModifiers7() {
enum <!WRONG_MODIFIER_TARGET!>enum<!>
inner <!WRONG_MODIFIER_TARGET!>inner<!>
annotation <!WRONG_MODIFIER_TARGET!>annotation<!>
<!INCOMPATIBLE_MODIFIERS!>out<!> <!WRONG_MODIFIER_TARGET!>out<!>
<!INCOMPATIBLE_MODIFIERS!>in<!> <!INCOMPATIBLE_MODIFIERS!>in<!>
vararg <!WRONG_MODIFIER_TARGET!>vararg<!>
reified <!WRONG_MODIFIER_TARGET!>reified<!>
val x = 1 val x = 1
enum <!WRONG_MODIFIER_TARGET!>enum<!>
inner <!WRONG_MODIFIER_TARGET!>inner<!>
annotation <!WRONG_MODIFIER_TARGET!>annotation<!>
<!INCOMPATIBLE_MODIFIERS!>out<!> <!WRONG_MODIFIER_TARGET!>out<!>
<!INCOMPATIBLE_MODIFIERS!>in<!> <!INCOMPATIBLE_MODIFIERS!>in<!>
vararg <!WRONG_MODIFIER_TARGET!>vararg<!>
reified <!WRONG_MODIFIER_TARGET!>reified<!>
const <!WRONG_MODIFIER_TARGET!>const<!>
fun foo() {} fun foo() {}
} }
// Secondary constructors // Secondary constructors
class IllegalModifiers8 { class IllegalModifiers8 {
<!INCOMPATIBLE_MODIFIERS!>abstract<!> <!WRONG_MODIFIER_TARGET!>abstract<!>
enum enum
<!INCOMPATIBLE_MODIFIERS, REDUNDANT_MODIFIER!>open<!> <!REDUNDANT_MODIFIER, WRONG_MODIFIER_TARGET!>open<!>
inner <!WRONG_MODIFIER_TARGET!>inner<!>
annotation <!WRONG_MODIFIER_TARGET!>annotation<!>
<!INCOMPATIBLE_MODIFIERS!>override<!> <!WRONG_MODIFIER_TARGET!>override<!>
<!INCOMPATIBLE_MODIFIERS!>out<!> <!WRONG_MODIFIER_TARGET!>out<!>
<!INCOMPATIBLE_MODIFIERS!>in<!> <!INCOMPATIBLE_MODIFIERS!>in<!>
<!INCOMPATIBLE_MODIFIERS!>final<!> <!INCOMPATIBLE_MODIFIERS!>final<!>
vararg <!WRONG_MODIFIER_TARGET!>vararg<!>
reified <!WRONG_MODIFIER_TARGET!>reified<!>
<!INCOMPATIBLE_MODIFIERS!>const<!><!SYNTAX!><!> <!INCOMPATIBLE_MODIFIERS!>const<!><!SYNTAX!><!>
constructor() {} constructor() {}
constructor(<!INCOMPATIBLE_MODIFIERS!>private<!> enum <!INCOMPATIBLE_MODIFIERS!>abstract<!> x: Int) {} constructor(<!WRONG_MODIFIER_TARGET!>private<!> <!WRONG_MODIFIER_TARGET!>enum<!> <!INCOMPATIBLE_MODIFIERS!>abstract<!> x: Int) {}
} }
class IllegalModifiers9 { class IllegalModifiers9 {
@@ -143,17 +143,17 @@ class IllegalModifiers9 {
// Illegal modifiers on primary constructor // Illegal modifiers on primary constructor
class IllegalModifiers10 class IllegalModifiers10
<!INCOMPATIBLE_MODIFIERS!>abstract<!> <!WRONG_MODIFIER_TARGET!>abstract<!>
enum <!WRONG_MODIFIER_TARGET!>enum<!>
<!INCOMPATIBLE_MODIFIERS, REDUNDANT_MODIFIER!>open<!> <!REDUNDANT_MODIFIER, WRONG_MODIFIER_TARGET!>open<!>
inner <!WRONG_MODIFIER_TARGET!>inner<!>
annotation <!WRONG_MODIFIER_TARGET!>annotation<!>
<!INCOMPATIBLE_MODIFIERS!>override<!> <!WRONG_MODIFIER_TARGET!>override<!>
<!INCOMPATIBLE_MODIFIERS!>out<!> <!WRONG_MODIFIER_TARGET!>out<!>
<!INCOMPATIBLE_MODIFIERS!>in<!> <!INCOMPATIBLE_MODIFIERS!>in<!>
<!INCOMPATIBLE_MODIFIERS!>final<!> <!INCOMPATIBLE_MODIFIERS!>final<!>
vararg <!WRONG_MODIFIER_TARGET!>vararg<!>
reified <!WRONG_MODIFIER_TARGET!>reified<!>
<!INCOMPATIBLE_MODIFIERS!>const<!> constructor() <!INCOMPATIBLE_MODIFIERS!>const<!> constructor()
class IllegalModifiers11 <!INCOMPATIBLE_MODIFIERS!>private<!> <!INCOMPATIBLE_MODIFIERS!>protected<!> constructor() class IllegalModifiers11 <!INCOMPATIBLE_MODIFIERS!>private<!> <!INCOMPATIBLE_MODIFIERS!>protected<!> constructor()
@@ -1,6 +0,0 @@
fun foo() {
public class A
private class B
protected class C
internal class D
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
fun foo() { fun foo() {
<!WRONG_MODIFIER_TARGET!>public<!> class A <!WRONG_MODIFIER_TARGET!>public<!> class A
<!WRONG_MODIFIER_TARGET!>private<!> class B <!WRONG_MODIFIER_TARGET!>private<!> class B
@@ -48,7 +48,7 @@ const val withExplicitDefaultGetter: Int = 1
<!CONST_VAL_WITH_GETTER!>get<!> <!CONST_VAL_WITH_GETTER!>get<!>
fun foo(): Int { fun foo(): Int {
const val local: Int = 14 <!WRONG_MODIFIER_TARGET!>const<!> val local: Int = 14
return 15 return 15
} }
@@ -1,55 +0,0 @@
companion class A {
companion object {
}
}
class B {
companion object
val c: Int = 1
}
class C {
companion object A {
}
}
class D {
companion object A {
companion object {
}
}
}
companion object G {
companion object
}
companion interface H {
companion object
}
class J {
companion object C {
companion object
}
}
companion enum class Enum {
E1,
E2;
companion object
}
companion fun main() {
}
companion var prop: Int = 1
companion get
companion set
class Z(companion val c: Int)
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
<!WRONG_MODIFIER_TARGET!>companion<!> class A { <!WRONG_MODIFIER_TARGET!>companion<!> class A {
companion object { companion object {
@@ -19,34 +19,34 @@ class A : (vararg Int)->Unit {
get(): (vararg x: Int)->Unit = {} get(): (vararg x: Int)->Unit = {}
} }
val allProhibited: (<!INCOMPATIBLE_MODIFIERS, REDUNDANT_MODIFIER!>abstract<!> val allProhibited: (<!REDUNDANT_MODIFIER, WRONG_MODIFIER_TARGET!>abstract<!>
annotation <!WRONG_MODIFIER_TARGET!>annotation<!>
companion <!WRONG_MODIFIER_TARGET!>companion<!>
<!INCOMPATIBLE_MODIFIERS!>const<!> <!INCOMPATIBLE_MODIFIERS!>const<!>
<!INCOMPATIBLE_MODIFIERS!>crossinline<!> <!INCOMPATIBLE_MODIFIERS!>crossinline<!>
<!INCOMPATIBLE_MODIFIERS!>data<!> <!INCOMPATIBLE_MODIFIERS!>data<!>
enum <!WRONG_MODIFIER_TARGET!>enum<!>
external <!WRONG_MODIFIER_TARGET!>external<!>
<!INCOMPATIBLE_MODIFIERS!>final<!> <!INCOMPATIBLE_MODIFIERS!>final<!>
<!INCOMPATIBLE_MODIFIERS!>in<!> <!WRONG_MODIFIER_TARGET!>in<!>
<!INCOMPATIBLE_MODIFIERS!>inline<!> <!INCOMPATIBLE_MODIFIERS!>inline<!>
<!INCOMPATIBLE_MODIFIERS!>inner<!> <!INCOMPATIBLE_MODIFIERS!>inner<!>
<!INCOMPATIBLE_MODIFIERS!>internal<!> <!WRONG_MODIFIER_TARGET!>internal<!>
lateinit <!WRONG_MODIFIER_TARGET!>lateinit<!>
<!INCOMPATIBLE_MODIFIERS!>noinline<!> <!INCOMPATIBLE_MODIFIERS!>noinline<!>
<!INCOMPATIBLE_MODIFIERS, REDUNDANT_MODIFIER!>open<!> <!INCOMPATIBLE_MODIFIERS, REDUNDANT_MODIFIER!>open<!>
operator <!WRONG_MODIFIER_TARGET!>operator<!>
<!INCOMPATIBLE_MODIFIERS!>out<!> <!INCOMPATIBLE_MODIFIERS!>out<!>
<!INCOMPATIBLE_MODIFIERS!>override<!> <!INCOMPATIBLE_MODIFIERS!>override<!>
<!INCOMPATIBLE_MODIFIERS!>private<!> <!INCOMPATIBLE_MODIFIERS!>private<!>
<!INCOMPATIBLE_MODIFIERS!>protected<!> <!INCOMPATIBLE_MODIFIERS!>protected<!>
<!INCOMPATIBLE_MODIFIERS!>public<!> <!INCOMPATIBLE_MODIFIERS!>public<!>
reified <!WRONG_MODIFIER_TARGET!>reified<!>
<!INCOMPATIBLE_MODIFIERS!>sealed<!> <!INCOMPATIBLE_MODIFIERS!>sealed<!>
tailrec <!WRONG_MODIFIER_TARGET!>tailrec<!>
vararg vararg
x: Int)->Unit = {} x: Int)->Unit = {}
val valProhibited: (val x: Int)->Unit = {} val valProhibited: (val x: Int)->Unit = {}
val varProhibited: (var x: Int)->Unit = {} val varProhibited: (var x: Int)->Unit = {}
@@ -1,10 +0,0 @@
open interface First
// Now inspection
abstract interface Second
// Now inspection
final enum class Third {
FOURTH,
FIFTH
}
// Now inspection
final object Sixth
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
<!REDUNDANT_MODIFIER_FOR_TARGET!>open<!> interface First <!REDUNDANT_MODIFIER_FOR_TARGET!>open<!> interface First
// Now inspection // Now inspection
abstract interface Second abstract interface Second
@@ -11,7 +11,7 @@ class Bzz(public <!REPEATED_MODIFIER!>public<!> val q: Int = 1) {
public <!REPEATED_MODIFIER!>public<!> get() = 3 public <!REPEATED_MODIFIER!>public<!> get() = 3
val z: Int val z: Int
<!INCOMPATIBLE_MODIFIERS!>open<!> <!INCOMPATIBLE_MODIFIERS!>final<!> get() = 4 <!WRONG_MODIFIER_TARGET!>open<!> <!INCOMPATIBLE_MODIFIERS!>final<!> get() = 4
public <!REPEATED_MODIFIER!>public<!> class B(public <!REPEATED_MODIFIER!>public<!> val z: Int = 1) { public <!REPEATED_MODIFIER!>public<!> class B(public <!REPEATED_MODIFIER!>public<!> val z: Int = 1) {
public <!REPEATED_MODIFIER!>public<!> val y: Int = 2 public <!REPEATED_MODIFIER!>public<!> val y: Int = 2
@@ -31,7 +31,7 @@ public <!REPEATED_MODIFIER!>public<!> val bar: Int = 1
public <!REPEATED_MODIFIER!>public<!> fun foo(): Int = 1 public <!REPEATED_MODIFIER!>public<!> fun foo(): Int = 1
fun test() { fun test() {
public <!REPEATED_MODIFIER!>public<!> class B(public <!REPEATED_MODIFIER!>public<!> val z: Int = 1) { <!WRONG_MODIFIER_TARGET!>public<!> <!REPEATED_MODIFIER!>public<!> class B(public <!REPEATED_MODIFIER!>public<!> val z: Int = 1) {
public <!REPEATED_MODIFIER!>public<!> val y: Int = 2 public <!REPEATED_MODIFIER!>public<!> val y: Int = 2
public val x: Int public val x: Int
@@ -2,29 +2,29 @@
// MODULE: m1-common // MODULE: m1-common
// FILE: common.kt // FILE: common.kt
header class My <!DEPRECATED_MODIFIER!>header<!> class My
header fun foo(): Int <!DEPRECATED_MODIFIER!>header<!> fun foo(): Int
header val x: String <!DEPRECATED_MODIFIER!>header<!> val x: String
header object O <!DEPRECATED_MODIFIER!>header<!> object O
header enum class E { <!DEPRECATED_MODIFIER!>header<!> enum class E {
FIRST FIRST
} }
// MODULE: m2-jvm()()(m1-common) // MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt // FILE: jvm.kt
impl class My <!DEPRECATED_MODIFIER!>impl<!> class My
impl fun foo() = 42 <!DEPRECATED_MODIFIER!>impl<!> fun foo() = 42
impl val x get() = "Hello" <!DEPRECATED_MODIFIER!>impl<!> val x get() = "Hello"
impl object O <!DEPRECATED_MODIFIER!>impl<!> object O
impl enum class E { <!DEPRECATED_MODIFIER!>impl<!> enum class E {
FIRST FIRST
} }
@@ -3,7 +3,7 @@
// FILE: common.kt // FILE: common.kt
expect class H { expect class H {
expect fun foo() <!WRONG_MODIFIER_TARGET!>expect<!> fun foo()
} }
// MODULE: m1-jvm()()(m1-common) // MODULE: m1-jvm()()(m1-common)
@@ -5,14 +5,14 @@
expect class B { expect class B {
class N { class N {
<!EXPECTED_DECLARATION_WITH_BODY!>fun body()<!> {} <!EXPECTED_DECLARATION_WITH_BODY!>fun body()<!> {}
expect fun extraHeader() <!WRONG_MODIFIER_TARGET!>expect<!> fun extraHeader()
} }
} }
expect class C { expect class C {
expect class N <!WRONG_MODIFIER_TARGET!>expect<!> class N
expect enum class E <!WRONG_MODIFIER_TARGET!>expect<!> enum class E
expect inner class I <!WRONG_MODIFIER_TARGET!>expect<!> inner class I
} }
expect class D { expect class D {
@@ -3,7 +3,7 @@
// FILE: common.kt // FILE: common.kt
class Foo { class Foo {
<!NON_ABSTRACT_FUNCTION_WITH_NO_BODY!>expect fun bar(): String<!> <!NON_ABSTRACT_FUNCTION_WITH_NO_BODY!><!WRONG_MODIFIER_TARGET!>expect<!> fun bar(): String<!>
} }
// MODULE: m1-jvm()()(m1-common) // MODULE: m1-jvm()()(m1-common)
@@ -1,13 +1,13 @@
// !LANGUAGE: +MultiPlatformProjects // !LANGUAGE: +MultiPlatformProjects
<!INCOMPATIBLE_MODIFIERS!>header<!> <!INCOMPATIBLE_MODIFIERS!>impl<!> class First <!DEPRECATED_MODIFIER, INCOMPATIBLE_MODIFIERS!>header<!> <!INCOMPATIBLE_MODIFIERS!>impl<!> class First
<!INCOMPATIBLE_MODIFIERS!>header<!> <!INCOMPATIBLE_MODIFIERS!>expect<!> class Second <!DEPRECATED_MODIFIER, INCOMPATIBLE_MODIFIERS!>header<!> <!INCOMPATIBLE_MODIFIERS!>expect<!> class Second
<!INCOMPATIBLE_MODIFIERS!>header<!> <!INCOMPATIBLE_MODIFIERS!>actual<!> class Third <!DEPRECATED_MODIFIER, INCOMPATIBLE_MODIFIERS!>header<!> <!INCOMPATIBLE_MODIFIERS!>actual<!> class Third
<!INCOMPATIBLE_MODIFIERS!>impl<!> <!INCOMPATIBLE_MODIFIERS!>expect<!> class Fourth <!DEPRECATED_MODIFIER, INCOMPATIBLE_MODIFIERS!>impl<!> <!INCOMPATIBLE_MODIFIERS!>expect<!> class Fourth
<!INCOMPATIBLE_MODIFIERS!>impl<!> <!INCOMPATIBLE_MODIFIERS!>actual<!> class Fifth <!DEPRECATED_MODIFIER, INCOMPATIBLE_MODIFIERS!>impl<!> <!INCOMPATIBLE_MODIFIERS!>actual<!> class Fifth
<!INCOMPATIBLE_MODIFIERS!>expect<!> <!INCOMPATIBLE_MODIFIERS!>actual<!> class Sixth <!INCOMPATIBLE_MODIFIERS!>expect<!> <!INCOMPATIBLE_MODIFIERS!>actual<!> class Sixth
@@ -2,21 +2,21 @@
// MODULE: m1-common // MODULE: m1-common
// FILE: common.kt // FILE: common.kt
expect typealias Foo = String <!WRONG_MODIFIER_TARGET!>expect<!> typealias Foo = String
class Outer expect constructor() { class Outer <!WRONG_MODIFIER_TARGET!>expect<!> constructor() {
expect class Nested <!WRONG_MODIFIER_TARGET!>expect<!> class Nested
expect init {} <!WRONG_MODIFIER_TARGET!>expect<!> init {}
<!NON_ABSTRACT_FUNCTION_WITH_NO_BODY!>expect fun foo()<!> <!NON_ABSTRACT_FUNCTION_WITH_NO_BODY!><!WRONG_MODIFIER_TARGET!>expect<!> fun foo()<!>
expect val bar: Int <!WRONG_MODIFIER_TARGET!>expect<!> val bar: Int
} }
fun foo() { fun foo() {
expect fun localFun() <!WRONG_MODIFIER_TARGET!>expect<!> fun localFun()
expect var x = 42 <!WRONG_MODIFIER_TARGET!>expect<!> var x = 42
expect class Bar <!WRONG_MODIFIER_TARGET!>expect<!> class Bar
} }
// MODULE: m2-jvm // MODULE: m2-jvm
@@ -25,11 +25,11 @@ fun foo() {
class Outer <!ACTUAL_WITHOUT_EXPECT!>actual constructor()<!> { class Outer <!ACTUAL_WITHOUT_EXPECT!>actual constructor()<!> {
actual class Nested actual class Nested
actual init {} <!WRONG_MODIFIER_TARGET!>actual<!> init {}
} }
fun foo() { fun foo() {
actual fun localFun() {} <!WRONG_MODIFIER_TARGET!>actual<!> fun localFun() {}
actual var x = 42 <!WRONG_MODIFIER_TARGET!>actual<!> var x = 42
actual class Bar <!WRONG_MODIFIER_TARGET!>actual<!> class Bar
} }
@@ -14,8 +14,8 @@ expect var varWithGetSet: String
get set get set
expect var varWithPlatformGetSet: String expect var varWithPlatformGetSet: String
expect get <!WRONG_MODIFIER_TARGET!>expect<!> get
expect set <!WRONG_MODIFIER_TARGET!>expect<!> set
expect val backingFieldVal: String = <!EXPECTED_PROPERTY_INITIALIZER!>"no"<!> expect val backingFieldVal: String = <!EXPECTED_PROPERTY_INITIALIZER!>"no"<!>
expect var backingFieldVar: String = <!EXPECTED_PROPERTY_INITIALIZER!>"no"<!> expect var backingFieldVar: String = <!EXPECTED_PROPERTY_INITIALIZER!>"no"<!>
@@ -34,7 +34,7 @@ expect val delegated: String by <!EXPECTED_DELEGATED_PROPERTY!>Delegate<!>
object Delegate { operator fun getValue(x: Any?, y: Any?): String = "" } object Delegate { operator fun getValue(x: Any?, y: Any?): String = "" }
fun test(): String { fun test(): String {
expect val localVariable: String <!WRONG_MODIFIER_TARGET!>expect<!> val localVariable: String
localVariable = "no" localVariable = "no"
return localVariable return localVariable
} }
@@ -1,2 +0,0 @@
class A(<!ABSTRACT_PROPERTY_IN_PRIMARY_CONSTRUCTOR_PARAMETERS!>abstract<!> val i: Int)
class B(abstract i: Int)
@@ -1,2 +1,3 @@
// FIR_IDENTICAL
class A(<!ABSTRACT_PROPERTY_IN_PRIMARY_CONSTRUCTOR_PARAMETERS!>abstract<!> val i: Int) class A(<!ABSTRACT_PROPERTY_IN_PRIMARY_CONSTRUCTOR_PARAMETERS!>abstract<!> val i: Int)
class B(<!WRONG_MODIFIER_TARGET!>abstract<!> i: Int) class B(<!WRONG_MODIFIER_TARGET!>abstract<!> i: Int)
@@ -2,7 +2,7 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER // !DIAGNOSTICS: -UNUSED_PARAMETER
fun main(args: Array<String>) { fun main(args: Array<String>) {
fun f() = run { fun f() = run {
private class C { <!WRONG_MODIFIER_TARGET!>private<!> class C {
private fun foo() { private fun foo() {
f().<!UNRESOLVED_REFERENCE!>foo<!>(); f().<!UNRESOLVED_REFERENCE!>foo<!>();
@@ -6,8 +6,8 @@ package test_visibility
protected class ProtectedClass protected class ProtectedClass
protected interface ProtectedTrait protected interface ProtectedTrait
protected val protected_val : Int = 4 <!WRONG_MODIFIER_TARGET!>protected<!> val protected_val : Int = 4
protected fun protected_fun() {} <!WRONG_MODIFIER_TARGET!>protected<!> fun protected_fun() {}
private val private_val : Int = 4 private val private_val : Int = 4
private fun private_fun() {} private fun private_fun() {}
@@ -1,3 +0,0 @@
fun foo() {
sealed class My
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
fun foo() { fun foo() {
<!WRONG_MODIFIER_TARGET!>sealed<!> class My <!WRONG_MODIFIER_TARGET!>sealed<!> class My
} }
@@ -1,6 +0,0 @@
sealed enum class SealedEnum {
FIRST,
SECOND;
class Derived: SealedEnum()
}

Some files were not shown because too many files have changed in this diff Show More