diff --git a/compiler/fir/analysis-tests/testData/resolve/constVal/constValNotTopLevelOrObject.kt b/compiler/fir/analysis-tests/testData/resolve/constVal/constValNotTopLevelOrObject.kt index 6a95133f9a6..d8dc2ae58c7 100644 --- a/compiler/fir/analysis-tests/testData/resolve/constVal/constValNotTopLevelOrObject.kt +++ b/compiler/fir/analysis-tests/testData/resolve/constVal/constValNotTopLevelOrObject.kt @@ -38,5 +38,5 @@ object F { } fun foo() { - const val a = "2" + const val a = "2" } diff --git a/compiler/fir/analysis-tests/testData/resolve/diagnostics/infixFunctions.kt b/compiler/fir/analysis-tests/testData/resolve/diagnostics/infixFunctions.kt index 7c01b92b317..8a9f51dffe1 100644 --- a/compiler/fir/analysis-tests/testData/resolve/diagnostics/infixFunctions.kt +++ b/compiler/fir/analysis-tests/testData/resolve/diagnostics/infixFunctions.kt @@ -6,11 +6,11 @@ infix fun Int.good(x: Int) {} infix fun baz(x: Int, y: Int) {} -infix class A +infix class A -infix typealias B = A +infix typealias B = A -infix val x = 1 +infix val x = 1 class C { infix fun good(x: Int) {} diff --git a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantModalityModifierChecker.kt b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantModalityModifierChecker.kt index 2bbc6c3a321..483dc715a00 100644 --- a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantModalityModifierChecker.kt +++ b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantModalityModifierChecker.kt @@ -82,4 +82,4 @@ abstract interface AbstractInterface // Redundant final object final object FinalObject // Open interface -open interface OpenInterface +open interface OpenInterface diff --git a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantVisibilityModifierChecker.kt b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantVisibilityModifierChecker.kt index d5de656cbb4..e385a637065 100644 --- a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantVisibilityModifierChecker.kt +++ b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantVisibilityModifierChecker.kt @@ -1,5 +1,5 @@ fun f() { - public var baz = 0 + public var baz = 0 class LocalClass { internal var foo = 0 } diff --git a/compiler/fir/analysis-tests/testData/resolve/inlineClasses/inlineClassDeclaration.kt b/compiler/fir/analysis-tests/testData/resolve/inlineClasses/inlineClassDeclaration.kt index 5a91276654f..2e404e13523 100644 --- a/compiler/fir/analysis-tests/testData/resolve/inlineClasses/inlineClassDeclaration.kt +++ b/compiler/fir/analysis-tests/testData/resolve/inlineClasses/inlineClassDeclaration.kt @@ -1,7 +1,7 @@ class A { inline inner class B(val x: Int) fun foo() { - inline class C(val x: Int) + inline class C(val x: Int) } inner value class D(val x: Int) } diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt index 5a4d2446ce6..389447fd655 100644 --- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt +++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt @@ -307,10 +307,22 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") { parameter("redundantModifier") parameter("conflictingModifier") } + val DEPRECATED_MODIFIER by warning { + parameter("deprecatedModifier") + parameter("actualModifier") + } val DEPRECATED_MODIFIER_PAIR by error { parameter("deprecatedModifier") parameter("conflictingModifier") } + val DEPRECATED_MODIFIER_FOR_TARGET by warning { + parameter("deprecatedModifier") + parameter("target") + } + val REDUNDANT_MODIFIER_FOR_TARGET by warning { + parameter("redundantModifier") + parameter("target") + } val INCOMPATIBLE_MODIFIERS by error { parameter("modifier1") parameter("modifier2") diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt index 0fd6c85a6a7..a76a67cf0e8 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt @@ -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.types.ConeKotlinType import org.jetbrains.kotlin.lexer.KtKeywordToken -import org.jetbrains.kotlin.lexer.KtModifierKeywordToken import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.KtAnnotationEntry @@ -256,7 +255,10 @@ object FirErrors { val INAPPLICABLE_INFIX_MODIFIER by error0() val REPEATED_MODIFIER by error1() val REDUNDANT_MODIFIER by error2() + val DEPRECATED_MODIFIER by warning2() val DEPRECATED_MODIFIER_PAIR by error2() + val DEPRECATED_MODIFIER_FOR_TARGET by warning2() + val REDUNDANT_MODIFIER_FOR_TARGET by warning2() val INCOMPATIBLE_MODIFIERS by error2() val REDUNDANT_OPEN_IN_INTERFACE by warning0(SourceElementPositioningStrategies.OPEN_MODIFIER) val WRONG_MODIFIER_TARGET by error2() diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt index e25b1925657..870490fae0f 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext 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.lexer.KtModifierKeywordToken import org.jetbrains.kotlin.lexer.KtTokens -import org.jetbrains.kotlin.name.ClassId -import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.name.StandardClassIds +import org.jetbrains.kotlin.name.* import org.jetbrains.kotlin.psi.KtModifierList import org.jetbrains.kotlin.psi.KtParameter.VAL_VAR_TOKEN_SET 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.Variance import org.jetbrains.kotlin.types.model.KotlinTypeMarker @@ -671,3 +671,80 @@ fun FirFunctionSymbol<*>.isFunctionForExpectTypeFromCastFeature(): Boolean { 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 \ No newline at end of file diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationChecker.kt index cc862613288..705e8711792 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationChecker.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget import org.jetbrains.kotlin.fir.FirFakeSourceElementKind 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.getActualTargetList import org.jetbrains.kotlin.fir.analysis.checkers.getAllowedAnnotationTargets import org.jetbrains.kotlin.fir.analysis.diagnostics.* 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 diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirModifierChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirModifierChecker.kt index 65aec7c1968..14bca5dbd79 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirModifierChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirModifierChecker.kt @@ -5,61 +5,65 @@ 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.analysis.checkers.FirModifier -import org.jetbrains.kotlin.fir.analysis.checkers.FirModifierList +import org.jetbrains.kotlin.fir.analysis.checkers.* 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.FirDiagnosticFactory2 import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors import org.jetbrains.kotlin.fir.analysis.diagnostics.reportOn import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor -import org.jetbrains.kotlin.resolve.Compatibility -import org.jetbrains.kotlin.resolve.KeywordType -import org.jetbrains.kotlin.resolve.compatibility +import org.jetbrains.kotlin.fir.declarations.impl.FirPrimaryConstructor +import org.jetbrains.kotlin.fir.declarations.utils.hasBody +import org.jetbrains.kotlin.fir.declarations.utils.isCompanion +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() { override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) { if (declaration is FirFile) return val source = declaration.source ?: return - if (!isDeclarationMappedToSourceCorrectly(declaration, source)) return - if (context.containingDeclarations.last() is FirDefaultPropertyAccessor) return + if (source.kind is FirFakeSourceElementKind) return - val modifierList = source.getModifierList() - modifierList?.let { checkModifiers(it, declaration, reporter, context) } - } + if (declaration is FirProperty) { + fun checkPropertyAccessor(propertyAccessor: FirPropertyAccessor?) { + if (propertyAccessor != null && !propertyAccessor.hasBody) { + check(propertyAccessor, context, reporter) + } + } - private fun isDeclarationMappedToSourceCorrectly(declaration: FirDeclaration, source: FirSourceElement): Boolean = - when (source.elementType) { - 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 + checkPropertyAccessor(declaration.getter) + checkPropertyAccessor(declaration.setter) } + source.getModifierList()?.let { checkModifiers(it, declaration, context, reporter) } + } + private fun checkModifiers( list: FirModifierList, owner: FirDeclaration, - reporter: DiagnosticReporter, - context: CheckerContext + context: CheckerContext, + reporter: DiagnosticReporter ) { // 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 val reportedNodes = hashSetOf>() + val actualTargets = getActualTargetList(owner).defaultTargets val modifiers = list.modifiers - for (secondModifier in modifiers) { - for (firstModifier in modifiers) { - if (firstModifier == secondModifier) { - break + for ((secondIndex, secondModifier) in modifiers.withIndex()) { + for (firstIndex in 0 until secondIndex) { + checkCompatibilityType(modifiers[firstIndex], secondModifier, reporter, reportedNodes, owner, context) + } + 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 { - return this.toString().lowercase() + private fun checkTarget( + modifier: FirModifier<*>, + actualTargets: List, + parent: FirDeclaration?, + context: CheckerContext, + reporter: DiagnosticReporter + ): Boolean { + val modifierType = getKeywordType(modifier) + + fun checkModifier(factory: FirDiagnosticFactory2): 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.firstOrThis(): String { + return firstOrNull()?.description ?: "this" } } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDefaultErrorMessages.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDefaultErrorMessages.kt index 5479e22d859..1427580d03c 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDefaultErrorMessages.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDefaultErrorMessages.kt @@ -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.commaSeparated 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.FIR 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.MODULE_DATA 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.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_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.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_SINCE_KOTLIN_OUTSIDE_KOTLIN_SUBPACKAGE 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_MODALITY_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_PROJECTION 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_SETTER_PARAMETER_TYPE import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.WRONG_SETTER_RETURN_TYPE -import org.jetbrains.kotlin.name.StandardClassIds @Suppress("unused") class FirDefaultErrorMessages { @@ -727,7 +729,10 @@ class FirDefaultErrorMessages { map.put(INAPPLICABLE_INFIX_MODIFIER, "''infix'' modifier is inapplicable on this function") map.put(REPEATED_MODIFIER, "Repeated ''{0}''", 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_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(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) diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt index 437de427c28..ae85e5d4087 100644 --- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt +++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt @@ -1379,7 +1379,7 @@ class DeclarationsConverter( } return buildValueParameter { - source = setterParameter.toFirSourceElement() + source = firValueParameter.source moduleData = baseModuleData origin = FirDeclarationOrigin.Source returnTypeRef = if (firValueParameter.returnTypeRef == implicitType) propertyTypeRef else firValueParameter.returnTypeRef diff --git a/compiler/testData/diagnostics/tests/Abstract.fir.kt b/compiler/testData/diagnostics/tests/Abstract.fir.kt index 1a94ca4e70a..921afe77a9b 100644 --- a/compiler/testData/diagnostics/tests/Abstract.fir.kt +++ b/compiler/testData/diagnostics/tests/Abstract.fir.kt @@ -3,44 +3,44 @@ package MyPackage //properties val a: Int val a1: Int = 1 - abstract val a2: Int - abstract val a3: Int = 1 + abstract val a2: Int + abstract val a3: Int = 1 var b: Int private set var b1: Int = 0; private set - abstract var b2: Int private set - abstract var b3: Int = 0; private set + abstract var b2: Int private set + abstract var b3: Int = 0; private set var c: Int set(v: Int) { field = v } var c1: Int = 0; set(v: Int) { field = v } - abstract var c2: Int set(v: Int) { field = v } - abstract var c3: Int = 0; set(v: Int) { field = v } + abstract var c2: Int set(v: Int) { field = v } + abstract var c3: Int = 0; set(v: Int) { field = v } val e: Int get() = a val e1: Int = 0; get() = a - abstract val e2: Int get() = a - abstract val e3: Int = 0; get() = a + abstract val e2: Int get() = a + abstract val e3: Int = 0; get() = a //methods fun f() fun g() {} - abstract fun h() - abstract fun j() {} + abstract fun h() + abstract fun j() {} //property accessors - var i: Int abstract get abstract set - var i1: Int = 0; abstract get abstract set + var i: Int abstract get abstract set + var i1: Int = 0; abstract get abstract set - var j: Int get() = i; abstract set - var j1: Int = 0; get() = i; abstract set + var j: Int get() = i; abstract set + var j1: Int = 0; get() = i; abstract set - var k: Int abstract set - var k1: Int = 0; abstract set + var k: Int abstract set + var k1: Int = 0; abstract set - var l: Int abstract get abstract set - var l1: Int = 0; abstract get abstract set + var l: Int abstract get abstract set + var l1: Int = 0; abstract get abstract set - var n: Int abstract get abstract set(v: Int) {} + var n: Int abstract get abstract set(v: Int) {} // FILE: c.kt //creating an instance diff --git a/compiler/testData/diagnostics/tests/AbstractInAbstractClass.fir.kt b/compiler/testData/diagnostics/tests/AbstractInAbstractClass.fir.kt deleted file mode 100644 index f8859609213..00000000000 --- a/compiler/testData/diagnostics/tests/AbstractInAbstractClass.fir.kt +++ /dev/null @@ -1,45 +0,0 @@ -package abstract - -abstract class MyAbstractClass() { - //properties - val a: Int - val a1: Int = 1 - abstract val a2: Int - abstract val a3: Int = 1 - - var b: Int private set - var b1: Int = 0; private set - abstract var b2: Int private set - abstract var b3: Int = 0; private set - - var c: Int set(v: Int) { field = v } - var c1: Int = 0; set(v: Int) { field = v } - abstract var c2: Int set(v: Int) { field = v } - abstract var c3: Int = 0; set(v: Int) { field = v } - - val e: Int get() = a - val e1: Int = 0; get() = a - abstract val e2: Int get() = a - abstract val e3: Int = 0; get() = a - - //methods - fun f() - fun g() {} - abstract fun h() - abstract fun j() {} - - //property accessors - var i: Int abstract get abstract set - var i1: Int = 0; abstract get abstract set - - var j: Int get() = i; abstract set - var j1: Int get() = i; abstract set - - var k: Int abstract set - var k1: Int = 0; abstract set - - var l: Int abstract get abstract set - var l1: Int = 0; abstract get abstract set - - var n: Int abstract get abstract set(v: Int) {} -} diff --git a/compiler/testData/diagnostics/tests/AbstractInAbstractClass.kt b/compiler/testData/diagnostics/tests/AbstractInAbstractClass.kt index 9479f3e9eaa..3340e55fde6 100644 --- a/compiler/testData/diagnostics/tests/AbstractInAbstractClass.kt +++ b/compiler/testData/diagnostics/tests/AbstractInAbstractClass.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL package abstract abstract class MyAbstractClass() { diff --git a/compiler/testData/diagnostics/tests/AbstractInClass.fir.kt b/compiler/testData/diagnostics/tests/AbstractInClass.fir.kt deleted file mode 100644 index 55ef524ba2f..00000000000 --- a/compiler/testData/diagnostics/tests/AbstractInClass.fir.kt +++ /dev/null @@ -1,45 +0,0 @@ -package abstract - -class MyClass() { - //properties - val a: Int - val a1: Int = 1 - abstract val a2: Int - abstract val a3: Int = 1 - - var b: Int private set - var b1: Int = 0; private set - abstract var b2: Int private set - abstract var b3: Int = 0; private set - - var c: Int set(v: Int) { field = v } - var c1: Int = 0; set(v: Int) { field = v } - abstract var c2: Int set(v: Int) { field = v } - abstract var c3: Int = 0; set(v: Int) { field = v } - - val e: Int get() = a - val e1: Int = 0; get() = a - abstract val e2: Int get() = a - abstract val e3: Int = 0; get() = a - - //methods - fun f() - fun g() {} - abstract fun h() - abstract fun j() {} - - //property accessors - var i: Int abstract get abstract set - var i1: Int = 0; abstract get abstract set - - var j: Int get() = i; abstract set - var j1: Int = 0; get() = i; abstract set - - var k: Int abstract set - var k1: Int = 0; abstract set - - var l: Int abstract get abstract set - var l1: Int = 0; abstract get abstract set - - var n: Int abstract get abstract set(v: Int) {} -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/AbstractInClass.kt b/compiler/testData/diagnostics/tests/AbstractInClass.kt index f15ebca5d74..a1f139ad32f 100644 --- a/compiler/testData/diagnostics/tests/AbstractInClass.kt +++ b/compiler/testData/diagnostics/tests/AbstractInClass.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL package abstract class MyClass() { diff --git a/compiler/testData/diagnostics/tests/AbstractInTrait.fir.kt b/compiler/testData/diagnostics/tests/AbstractInTrait.fir.kt deleted file mode 100644 index 7c6b7289096..00000000000 --- a/compiler/testData/diagnostics/tests/AbstractInTrait.fir.kt +++ /dev/null @@ -1,45 +0,0 @@ -package abstract - -interface MyTrait { - //properties - val a: Int - val a1: Int = 1 - abstract val a2: Int - abstract val a3: Int = 1 - - var b: Int private set - var b1: Int = 0; private set - abstract var b2: Int private set - abstract var b3: Int = 0; private set - - var c: Int set(v: Int) { field = v } - var c1: Int = 0; set(v: Int) { field = v } - abstract var c2: Int set(v: Int) { field = v } - abstract var c3: Int = 0; set(v: Int) { field = v } - - val e: Int get() = a - val e1: Int = 0; get() = a - abstract val e2: Int get() = a - abstract val e3: Int = 0; get() = a - - //methods - fun f() - fun g() {} - abstract fun h() - abstract fun j() {} - - //property accessors - var i: Int abstract get abstract set - var i1: Int = 0; abstract get abstract set - - var j: Int get() = i; abstract set - var j1: Int = 0; get() = i; abstract set - - var k: Int abstract set - var k1: Int = 0; abstract set - - var l: Int abstract get abstract set - var l1: Int = 0; abstract get abstract set - - var n: Int abstract get abstract set(v: Int) {} -} diff --git a/compiler/testData/diagnostics/tests/AbstractInTrait.kt b/compiler/testData/diagnostics/tests/AbstractInTrait.kt index 574bd41ba71..7492de02b01 100644 --- a/compiler/testData/diagnostics/tests/AbstractInTrait.kt +++ b/compiler/testData/diagnostics/tests/AbstractInTrait.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL package abstract interface MyTrait { diff --git a/compiler/testData/diagnostics/tests/annotations/annotationModifier.fir.kt b/compiler/testData/diagnostics/tests/annotations/annotationModifier.fir.kt deleted file mode 100644 index a62a21476bb..00000000000 --- a/compiler/testData/diagnostics/tests/annotations/annotationModifier.fir.kt +++ /dev/null @@ -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 \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/annotations/annotationModifier.kt b/compiler/testData/diagnostics/tests/annotations/annotationModifier.kt index 6f577a35ef1..e7d41f8c877 100644 --- a/compiler/testData/diagnostics/tests/annotations/annotationModifier.kt +++ b/compiler/testData/diagnostics/tests/annotations/annotationModifier.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL annotation class B class A { diff --git a/compiler/testData/diagnostics/tests/annotations/options/forParam.fir.kt b/compiler/testData/diagnostics/tests/annotations/options/forParam.fir.kt index f4416823d77..54dd273c0e0 100644 --- a/compiler/testData/diagnostics/tests/annotations/options/forParam.fir.kt +++ b/compiler/testData/diagnostics/tests/annotations/options/forParam.fir.kt @@ -4,7 +4,7 @@ annotation class Ann fun foo() { - for (@Ann private x in 1..100) { + for (@Ann private x in 1..100) { if (x == 1) return } -} \ No newline at end of file +} diff --git a/compiler/testData/diagnostics/tests/annotations/options/multiDeclaration.fir.kt b/compiler/testData/diagnostics/tests/annotations/options/multiDeclaration.fir.kt deleted file mode 100644 index 0f641a3b285..00000000000 --- a/compiler/testData/diagnostics/tests/annotations/options/multiDeclaration.fir.kt +++ /dev/null @@ -1,7 +0,0 @@ -@Target(AnnotationTarget.CLASS) -annotation class My -data class Pair(val a: Int, val b: Int) -fun foo(): Int { - val (@My private a, @My public b) = Pair(12, 34) - return a + b -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/annotations/options/multiDeclaration.kt b/compiler/testData/diagnostics/tests/annotations/options/multiDeclaration.kt index 8d0b5eb7be6..73b002ab476 100644 --- a/compiler/testData/diagnostics/tests/annotations/options/multiDeclaration.kt +++ b/compiler/testData/diagnostics/tests/annotations/options/multiDeclaration.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL @Target(AnnotationTarget.CLASS) annotation class My data class Pair(val a: Int, val b: Int) diff --git a/compiler/testData/diagnostics/tests/annotations/options/setterParam.fir.kt b/compiler/testData/diagnostics/tests/annotations/options/setterParam.fir.kt deleted file mode 100644 index 67db8a303ef..00000000000 --- a/compiler/testData/diagnostics/tests/annotations/options/setterParam.fir.kt +++ /dev/null @@ -1,8 +0,0 @@ -// KT-9145 - -@Target(AnnotationTarget.CLASS) -annotation class Ann - -var x: Int - get() = 1 - set(@Ann private x) { } diff --git a/compiler/testData/diagnostics/tests/annotations/options/setterParam.kt b/compiler/testData/diagnostics/tests/annotations/options/setterParam.kt index f077438ec73..a578b502ef8 100644 --- a/compiler/testData/diagnostics/tests/annotations/options/setterParam.kt +++ b/compiler/testData/diagnostics/tests/annotations/options/setterParam.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // KT-9145 @Target(AnnotationTarget.CLASS) diff --git a/compiler/testData/diagnostics/tests/dataClasses/dataClassNoName.fir.kt b/compiler/testData/diagnostics/tests/dataClasses/dataClassNoName.fir.kt deleted file mode 100644 index fc2c257e805..00000000000 --- a/compiler/testData/diagnostics/tests/dataClasses/dataClassNoName.fir.kt +++ /dev/null @@ -1,9 +0,0 @@ -// See EA-73584 -data class { - -} - -// See KT-9296 -data interface { - -} diff --git a/compiler/testData/diagnostics/tests/dataClasses/dataClassNoName.kt b/compiler/testData/diagnostics/tests/dataClasses/dataClassNoName.kt index 463e44ee0c2..2707798f13f 100644 --- a/compiler/testData/diagnostics/tests/dataClasses/dataClassNoName.kt +++ b/compiler/testData/diagnostics/tests/dataClasses/dataClassNoName.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // See EA-73584 data class { diff --git a/compiler/testData/diagnostics/tests/dataClasses/dataObject.fir.kt b/compiler/testData/diagnostics/tests/dataClasses/dataObject.fir.kt deleted file mode 100644 index f645b143f27..00000000000 --- a/compiler/testData/diagnostics/tests/dataClasses/dataObject.fir.kt +++ /dev/null @@ -1 +0,0 @@ -data object Object(val x: Int, val y: Int) diff --git a/compiler/testData/diagnostics/tests/dataClasses/dataObject.kt b/compiler/testData/diagnostics/tests/dataClasses/dataObject.kt index c9a3046365c..2c99760e047 100644 --- a/compiler/testData/diagnostics/tests/dataClasses/dataObject.kt +++ b/compiler/testData/diagnostics/tests/dataClasses/dataObject.kt @@ -1 +1,2 @@ +// FIR_IDENTICAL data object Object(val x: Int, val y: Int) diff --git a/compiler/testData/diagnostics/tests/dataClasses/strange.fir.kt b/compiler/testData/diagnostics/tests/dataClasses/strange.fir.kt index 51a73b39b19..d6157a34a9c 100644 --- a/compiler/testData/diagnostics/tests/dataClasses/strange.fir.kt +++ b/compiler/testData/diagnostics/tests/dataClasses/strange.fir.kt @@ -1,10 +1,10 @@ -data enum class First(val x: Int) { +data enum class First(val x: Int) { A(1), B(2) } -data object Second +data object Second -data interface Third +data interface Third -data annotation class Fourth(val x: Int) \ No newline at end of file +data annotation class Fourth(val x: Int) diff --git a/compiler/testData/diagnostics/tests/declarationChecks/ambiguousObjectExpressionType.fir.kt b/compiler/testData/diagnostics/tests/declarationChecks/ambiguousObjectExpressionType.fir.kt index 28f01fe3d3c..8fafa1214af 100644 --- a/compiler/testData/diagnostics/tests/declarationChecks/ambiguousObjectExpressionType.fir.kt +++ b/compiler/testData/diagnostics/tests/declarationChecks/ambiguousObjectExpressionType.fir.kt @@ -93,7 +93,7 @@ class Foo { private val packagePrivateProperty = object : MyClass(), MyTrait {} -protected val packageProtectedProperty = object : MyClass(), MyTrait {} +protected val packageProtectedProperty = object : MyClass(), MyTrait {} val packageInternalProperty = object : MyClass(), MyTrait {} @@ -101,7 +101,7 @@ internal val packageInternal2Property = object : MyClass(), MyTrait {} public val packagePublicProperty = object : MyClass(), MyTrait {} -protected fun packageProtectedFunction() = object : MyClass(), MyTrait {} +protected fun packageProtectedFunction() = object : MyClass(), MyTrait {} fun packageInternalFunction() = object : MyClass(), MyTrait {} diff --git a/compiler/testData/diagnostics/tests/declarationChecks/illegalModifiersOnClass.fir.kt b/compiler/testData/diagnostics/tests/declarationChecks/illegalModifiersOnClass.fir.kt deleted file mode 100644 index 3edf127831d..00000000000 --- a/compiler/testData/diagnostics/tests/declarationChecks/illegalModifiersOnClass.fir.kt +++ /dev/null @@ -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 diff --git a/compiler/testData/diagnostics/tests/declarationChecks/illegalModifiersOnClass.kt b/compiler/testData/diagnostics/tests/declarationChecks/illegalModifiersOnClass.kt index 1dbaf72091f..1016f82fde5 100644 --- a/compiler/testData/diagnostics/tests/declarationChecks/illegalModifiersOnClass.kt +++ b/compiler/testData/diagnostics/tests/declarationChecks/illegalModifiersOnClass.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !DIAGNOSTICS: -MANY_COMPANION_OBJECTS -REDECLARATION -DUPLICATE_CLASS_NAMES // KT-3464 Front-end shouldn't allow override modifier in class declaration diff --git a/compiler/testData/diagnostics/tests/declarationChecks/localDeclarationModifiers.fir.kt b/compiler/testData/diagnostics/tests/declarationChecks/localDeclarationModifiers.fir.kt index aaeada4539b..bb837c6eefa 100644 --- a/compiler/testData/diagnostics/tests/declarationChecks/localDeclarationModifiers.fir.kt +++ b/compiler/testData/diagnostics/tests/declarationChecks/localDeclarationModifiers.fir.kt @@ -5,8 +5,8 @@ class T { } fun foo() { - public val i = 11 - abstract val j - override fun T.baz() = 2 - private fun bar() = 2 + public val i = 11 + abstract val j + override fun T.baz() = 2 + private fun bar() = 2 } diff --git a/compiler/testData/diagnostics/tests/declarationChecks/localFunctionNoInheritVisibility.fir.kt b/compiler/testData/diagnostics/tests/declarationChecks/localFunctionNoInheritVisibility.fir.kt index 9cb85c36042..44a5b20249e 100644 --- a/compiler/testData/diagnostics/tests/declarationChecks/localFunctionNoInheritVisibility.fir.kt +++ b/compiler/testData/diagnostics/tests/declarationChecks/localFunctionNoInheritVisibility.fir.kt @@ -4,10 +4,10 @@ class T { fun baz() = 1 } -override fun zzz() {} +override fun zzz() {} fun foo(t: T) { - override fun T.baz() = 2 + override fun T.baz() = 2 // was "Visibility is unknown yet exception" t.baz() diff --git a/compiler/testData/diagnostics/tests/declarationChecks/localVariablesWithTypeParameters_1_3.fir.kt b/compiler/testData/diagnostics/tests/declarationChecks/localVariablesWithTypeParameters_1_3.fir.kt index 16e0e87f6f6..c47e5ecf49b 100644 --- a/compiler/testData/diagnostics/tests/declarationChecks/localVariablesWithTypeParameters_1_3.fir.kt +++ b/compiler/testData/diagnostics/tests/declarationChecks/localVariablesWithTypeParameters_1_3.fir.kt @@ -7,7 +7,7 @@ fun test() { val a0 = 0 val a1 = "" val a2 = 0 - const val a3 = 0 + const val a3 = 0 lateinit val a4 = 0 val a5 by Delegate() val a6 by Delegate<T>() diff --git a/compiler/testData/diagnostics/tests/declarationChecks/localVariablesWithTypeParameters_1_4.fir.kt b/compiler/testData/diagnostics/tests/declarationChecks/localVariablesWithTypeParameters_1_4.fir.kt index 088b15d736c..61623cf5039 100644 --- a/compiler/testData/diagnostics/tests/declarationChecks/localVariablesWithTypeParameters_1_4.fir.kt +++ b/compiler/testData/diagnostics/tests/declarationChecks/localVariablesWithTypeParameters_1_4.fir.kt @@ -7,7 +7,7 @@ fun test() { val a0 = 0 val a1 = "" val a2 = 0 - const val a3 = 0 + const val a3 = 0 lateinit val a4 = 0 val a5 by Delegate() val a6 by Delegate<T>() diff --git a/compiler/testData/diagnostics/tests/declarationChecks/packageDeclarationModifiers.fir.kt b/compiler/testData/diagnostics/tests/declarationChecks/packageDeclarationModifiers.fir.kt deleted file mode 100644 index a7bf8455a1a..00000000000 --- a/compiler/testData/diagnostics/tests/declarationChecks/packageDeclarationModifiers.fir.kt +++ /dev/null @@ -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 \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/declarationChecks/packageDeclarationModifiers.kt b/compiler/testData/diagnostics/tests/declarationChecks/packageDeclarationModifiers.kt index 6641ec56792..6e6a9ab82ec 100644 --- a/compiler/testData/diagnostics/tests/declarationChecks/packageDeclarationModifiers.kt +++ b/compiler/testData/diagnostics/tests/declarationChecks/packageDeclarationModifiers.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL package d abstract val a : Int = 1 diff --git a/compiler/testData/diagnostics/tests/declarationChecks/propertyInPackageHasNoInheritVisibility.fir.kt b/compiler/testData/diagnostics/tests/declarationChecks/propertyInPackageHasNoInheritVisibility.fir.kt index e0a5a606190..470d27bd13a 100644 --- a/compiler/testData/diagnostics/tests/declarationChecks/propertyInPackageHasNoInheritVisibility.fir.kt +++ b/compiler/testData/diagnostics/tests/declarationChecks/propertyInPackageHasNoInheritVisibility.fir.kt @@ -1,10 +1,10 @@ package d -override val f : ()-> Int = { 12 } +override val f : ()-> Int = { 12 } fun test() { f() } var g: Int = 1 - protected set(i: Int) {} \ No newline at end of file + protected set(i: Int) {} diff --git a/compiler/testData/diagnostics/tests/declarationChecks/sealedOnMembers.fir.kt b/compiler/testData/diagnostics/tests/declarationChecks/sealedOnMembers.fir.kt deleted file mode 100644 index fd7e97ebe76..00000000000 --- a/compiler/testData/diagnostics/tests/declarationChecks/sealedOnMembers.fir.kt +++ /dev/null @@ -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) diff --git a/compiler/testData/diagnostics/tests/declarationChecks/sealedOnMembers.kt b/compiler/testData/diagnostics/tests/declarationChecks/sealedOnMembers.kt index 0066841bbb6..5bdb27ab733 100644 --- a/compiler/testData/diagnostics/tests/declarationChecks/sealedOnMembers.kt +++ b/compiler/testData/diagnostics/tests/declarationChecks/sealedOnMembers.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface A { sealed fun foo() sealed var bar: Unit diff --git a/compiler/testData/diagnostics/tests/declarationChecks/unambiguousObjectExpressionType.fir.kt b/compiler/testData/diagnostics/tests/declarationChecks/unambiguousObjectExpressionType.fir.kt deleted file mode 100644 index 0b2b2de5377..00000000000 --- a/compiler/testData/diagnostics/tests/declarationChecks/unambiguousObjectExpressionType.fir.kt +++ /dev/null @@ -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.invisible() - public2Property.invisible() - internalProperty.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().invisible() - public2Function().invisible() - protected2Function().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.invisible() - public2Property.invisible() - internalProperty.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().invisible() - public2Function().invisible() - protected2Function().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.invisible() - packagePublic2Property.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().invisible() - public2Function().invisible() -} - -fun fooPackage() { - val packageLocalVar = object : MyClass() {fun visible() {}} - packageLocalVar.f1() - packageLocalVar.visible() - - fun fooPackageLocal() = object : MyClass() {fun visible() {}} - fooPackageLocal().f1() - fooPackageLocal().visible() -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/declarationChecks/unambiguousObjectExpressionType.kt b/compiler/testData/diagnostics/tests/declarationChecks/unambiguousObjectExpressionType.kt index ee7e136d89e..97c4b44feef 100644 --- a/compiler/testData/diagnostics/tests/declarationChecks/unambiguousObjectExpressionType.kt +++ b/compiler/testData/diagnostics/tests/declarationChecks/unambiguousObjectExpressionType.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL open class MyClass { fun f1() {} } diff --git a/compiler/testData/diagnostics/tests/delegation/DelegationNotTotrait.fir.kt b/compiler/testData/diagnostics/tests/delegation/DelegationNotTotrait.fir.kt index 40baa8cc8f3..b822472fe7a 100644 --- a/compiler/testData/diagnostics/tests/delegation/DelegationNotTotrait.fir.kt +++ b/compiler/testData/diagnostics/tests/delegation/DelegationNotTotrait.fir.kt @@ -8,7 +8,7 @@ interface T {} class Br(t : T) : T by t {} -open enum class EN() { +open enum class EN() { A } diff --git a/compiler/testData/diagnostics/tests/enum/AbstractEnum.fir.kt b/compiler/testData/diagnostics/tests/enum/AbstractEnum.fir.kt deleted file mode 100644 index a1961b8a648..00000000000 --- a/compiler/testData/diagnostics/tests/enum/AbstractEnum.fir.kt +++ /dev/null @@ -1,3 +0,0 @@ -package abstract - -abstract enum class MyAbstractEnum() {} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/enum/AbstractEnum.kt b/compiler/testData/diagnostics/tests/enum/AbstractEnum.kt index 8bca5a6beb5..0368e5857ad 100644 --- a/compiler/testData/diagnostics/tests/enum/AbstractEnum.kt +++ b/compiler/testData/diagnostics/tests/enum/AbstractEnum.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL package abstract abstract enum class MyAbstractEnum() {} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/enum/AbstractInEnum.fir.kt b/compiler/testData/diagnostics/tests/enum/AbstractInEnum.fir.kt index fc5796e8d56..732b4eec884 100644 --- a/compiler/testData/diagnostics/tests/enum/AbstractInEnum.fir.kt +++ b/compiler/testData/diagnostics/tests/enum/AbstractInEnum.fir.kt @@ -31,17 +31,17 @@ enum class MyEnum() { abstract fun j() {} //property accessors - var i: Int abstract get abstract set - var i1: Int = 0; abstract get abstract set + var i: Int abstract get abstract set + var i1: Int = 0; abstract get abstract set - var j: Int get() = i; abstract set - var j1: Int = 0; get() = i; abstract set + var j: Int get() = i; abstract set + var j1: Int = 0; get() = i; abstract set - var k: Int abstract set - var k1: Int = 0; abstract set + var k: Int abstract set + var k1: Int = 0; abstract set - var l: Int abstract get abstract set - var l1: Int = 0; abstract get abstract set + var l: Int abstract get abstract set + var l1: Int = 0; abstract get abstract set - var n: Int abstract get abstract set(v: Int) {} + var n: Int abstract get abstract set(v: Int) {} } diff --git a/compiler/testData/diagnostics/tests/enum/enumModifier.fir.kt b/compiler/testData/diagnostics/tests/enum/enumModifier.fir.kt deleted file mode 100644 index 9dfe7b9878c..00000000000 --- a/compiler/testData/diagnostics/tests/enum/enumModifier.fir.kt +++ /dev/null @@ -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 \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/enum/enumModifier.kt b/compiler/testData/diagnostics/tests/enum/enumModifier.kt index 9e216bb9f81..67ceba6b4d1 100644 --- a/compiler/testData/diagnostics/tests/enum/enumModifier.kt +++ b/compiler/testData/diagnostics/tests/enum/enumModifier.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL enum class B {} class A { diff --git a/compiler/testData/diagnostics/tests/enum/enumWithAnnotationKeyword.fir.kt b/compiler/testData/diagnostics/tests/enum/enumWithAnnotationKeyword.fir.kt deleted file mode 100644 index 2ecf57a0886..00000000000 --- a/compiler/testData/diagnostics/tests/enum/enumWithAnnotationKeyword.fir.kt +++ /dev/null @@ -1,3 +0,0 @@ -annotation enum class E { - D -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/enum/enumWithAnnotationKeyword.kt b/compiler/testData/diagnostics/tests/enum/enumWithAnnotationKeyword.kt index e22f4be0964..28a85e13593 100644 --- a/compiler/testData/diagnostics/tests/enum/enumWithAnnotationKeyword.kt +++ b/compiler/testData/diagnostics/tests/enum/enumWithAnnotationKeyword.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL annotation enum class E { D } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/enum/inheritanceFromEnum.fir.kt b/compiler/testData/diagnostics/tests/enum/inheritanceFromEnum.fir.kt index 3b560fcf630..3f3824c8d59 100644 --- a/compiler/testData/diagnostics/tests/enum/inheritanceFromEnum.fir.kt +++ b/compiler/testData/diagnostics/tests/enum/inheritanceFromEnum.fir.kt @@ -2,7 +2,7 @@ public enum MyJavaEnum {} // FILE: test.kt -open enum class MyEnum() { +open enum class MyEnum() { A() } diff --git a/compiler/testData/diagnostics/tests/enum/inner/insideEnumEntry_after.fir.kt b/compiler/testData/diagnostics/tests/enum/inner/insideEnumEntry_after.fir.kt index df48fc37e3b..773d0f1a326 100644 --- a/compiler/testData/diagnostics/tests/enum/inner/insideEnumEntry_after.fir.kt +++ b/compiler/testData/diagnostics/tests/enum/inner/insideEnumEntry_after.fir.kt @@ -2,7 +2,7 @@ enum class E { ABC { - enum class F { + enum class F { DEF } } diff --git a/compiler/testData/diagnostics/tests/enum/inner/insideEnumEntry_before.fir.kt b/compiler/testData/diagnostics/tests/enum/inner/insideEnumEntry_before.fir.kt index e1ac99322ab..e16121222ec 100644 --- a/compiler/testData/diagnostics/tests/enum/inner/insideEnumEntry_before.fir.kt +++ b/compiler/testData/diagnostics/tests/enum/inner/insideEnumEntry_before.fir.kt @@ -2,7 +2,7 @@ enum class E { ABC { - enum class F { + enum class F { DEF } } diff --git a/compiler/testData/diagnostics/tests/enum/interfaceWithEnumKeyword.fir.kt b/compiler/testData/diagnostics/tests/enum/interfaceWithEnumKeyword.fir.kt index 8db080692bf..f6efda001de 100644 --- a/compiler/testData/diagnostics/tests/enum/interfaceWithEnumKeyword.fir.kt +++ b/compiler/testData/diagnostics/tests/enum/interfaceWithEnumKeyword.fir.kt @@ -1,8 +1,8 @@ -enum interface Some { +enum interface Some { // Enum part D; // Interface like part fun test() val foo: Int -} \ No newline at end of file +} diff --git a/compiler/testData/diagnostics/tests/enum/localEnums.fir.kt b/compiler/testData/diagnostics/tests/enum/localEnums.fir.kt index d689d7e2a54..e786e0a83ef 100644 --- a/compiler/testData/diagnostics/tests/enum/localEnums.fir.kt +++ b/compiler/testData/diagnostics/tests/enum/localEnums.fir.kt @@ -1,20 +1,20 @@ // !DIAGNOSTICS: -UNUSED_VARIABLE fun foo() { - enum class A { + enum class A { FOO, BAR } val foo = A.FOO val b = object { - enum class B {} + enum class B {} } class C { - enum class D {} + enum class D {} } val f = { - enum class E {} + enum class E {} } - enum class {} + enum class {} } diff --git a/compiler/testData/diagnostics/tests/enum/modifiersOnEnumEntry.fir.kt b/compiler/testData/diagnostics/tests/enum/modifiersOnEnumEntry.fir.kt deleted file mode 100644 index d5d8bc23a3f..00000000000 --- a/compiler/testData/diagnostics/tests/enum/modifiersOnEnumEntry.fir.kt +++ /dev/null @@ -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 -} diff --git a/compiler/testData/diagnostics/tests/enum/modifiersOnEnumEntry.kt b/compiler/testData/diagnostics/tests/enum/modifiersOnEnumEntry.kt index 9df96f3cbf9..6fb7632c953 100644 --- a/compiler/testData/diagnostics/tests/enum/modifiersOnEnumEntry.kt +++ b/compiler/testData/diagnostics/tests/enum/modifiersOnEnumEntry.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL enum class E { public final SUBCLASS { fun foo() {} diff --git a/compiler/testData/diagnostics/tests/functionLiterals/destructuringInLambdas/modifiers.fir.kt b/compiler/testData/diagnostics/tests/functionLiterals/destructuringInLambdas/modifiers.fir.kt deleted file mode 100644 index 18df305c7a7..00000000000 --- a/compiler/testData/diagnostics/tests/functionLiterals/destructuringInLambdas/modifiers.fir.kt +++ /dev/null @@ -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, @Ann b) -> - a checkType { _() } - b checkType { _() } - } -} diff --git a/compiler/testData/diagnostics/tests/functionLiterals/destructuringInLambdas/modifiers.kt b/compiler/testData/diagnostics/tests/functionLiterals/destructuringInLambdas/modifiers.kt index 01a8f59148a..ea6df696519 100644 --- a/compiler/testData/diagnostics/tests/functionLiterals/destructuringInLambdas/modifiers.kt +++ b/compiler/testData/diagnostics/tests/functionLiterals/destructuringInLambdas/modifiers.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !CHECK_TYPE // !DIAGNOSTICS: -UNUSED_PARAMETER data class A(val x: Int, val y: String) diff --git a/compiler/testData/diagnostics/tests/infos/PropertiesWithBackingFields.fir.kt b/compiler/testData/diagnostics/tests/infos/PropertiesWithBackingFields.fir.kt deleted file mode 100644 index 564a9198f01..00000000000 --- a/compiler/testData/diagnostics/tests/infos/PropertiesWithBackingFields.fir.kt +++ /dev/null @@ -1,59 +0,0 @@ -abstract class Test() { - abstract val x : Int - abstract val x1 : Int get - abstract val x2 : Int get() = 1 - - val a : Int - 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 - 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 get() = 1 - abstract var y5 : Int set(x) {} get() = 1 - abstract var y6 : Int set(x) {} - - var v : Int - var v1 : Int get - var v2 : Int get set - var v3 : Int get() = 1; set - var v4 : Int get() = 1; set(x){} - - var v5 : Int get() = 1; set(x){field = x} - var v6 : Int get() = field + 1; set(x){} - - abstract val v7 : Int get - abstract var v8 : Int get set - var v9 : Int set - 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() = x - -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/infos/PropertiesWithBackingFields.kt b/compiler/testData/diagnostics/tests/infos/PropertiesWithBackingFields.kt index e8e49d23c15..44fe3532bf5 100644 --- a/compiler/testData/diagnostics/tests/infos/PropertiesWithBackingFields.kt +++ b/compiler/testData/diagnostics/tests/infos/PropertiesWithBackingFields.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL abstract class Test() { abstract val x : Int abstract val x1 : Int get diff --git a/compiler/testData/diagnostics/tests/inlineClasses/basicInlineClassDeclaration.fir.kt b/compiler/testData/diagnostics/tests/inlineClasses/basicInlineClassDeclaration.fir.kt deleted file mode 100644 index 7fa04e7be74..00000000000 --- a/compiler/testData/diagnostics/tests/inlineClasses/basicInlineClassDeclaration.fir.kt +++ /dev/null @@ -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 diff --git a/compiler/testData/diagnostics/tests/inlineClasses/basicInlineClassDeclaration.kt b/compiler/testData/diagnostics/tests/inlineClasses/basicInlineClassDeclaration.kt index 7bf4750329c..a7b5c29ed51 100644 --- a/compiler/testData/diagnostics/tests/inlineClasses/basicInlineClassDeclaration.kt +++ b/compiler/testData/diagnostics/tests/inlineClasses/basicInlineClassDeclaration.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !LANGUAGE: +InlineClasses, -JvmInlineValueClasses inline class Foo(val x: Int) diff --git a/compiler/testData/diagnostics/tests/inlineClasses/basicInlineClassDeclarationDisabled.fir.kt b/compiler/testData/diagnostics/tests/inlineClasses/basicInlineClassDeclarationDisabled.fir.kt index d8476bd6691..7f4c16190d7 100644 --- a/compiler/testData/diagnostics/tests/inlineClasses/basicInlineClassDeclarationDisabled.fir.kt +++ b/compiler/testData/diagnostics/tests/inlineClasses/basicInlineClassDeclarationDisabled.fir.kt @@ -3,8 +3,8 @@ inline class Foo(val x: Int) -inline annotation class InlineAnn -inline object InlineObject -inline enum class InlineEnum +inline annotation class InlineAnn +inline object InlineObject +inline enum class InlineEnum inline class NotVal(x: Int) diff --git a/compiler/testData/diagnostics/tests/inlineClasses/inlineClassDeclarationCheck.fir.kt b/compiler/testData/diagnostics/tests/inlineClasses/inlineClassDeclarationCheck.fir.kt index c8f57d8f443..b8e4a77d9da 100644 --- a/compiler/testData/diagnostics/tests/inlineClasses/inlineClassDeclarationCheck.fir.kt +++ b/compiler/testData/diagnostics/tests/inlineClasses/inlineClassDeclarationCheck.fir.kt @@ -29,7 +29,7 @@ object B2 { } fun foo() { - inline class C4(val x: Int) + inline class C4(val x: Int) } final inline class D0(val x: Int) diff --git a/compiler/testData/diagnostics/tests/inlineClasses/innerClassInsideInlineClass.fir.kt b/compiler/testData/diagnostics/tests/inlineClasses/innerClassInsideInlineClass.fir.kt index 55136d17975..8febc04f811 100644 --- a/compiler/testData/diagnostics/tests/inlineClasses/innerClassInsideInlineClass.fir.kt +++ b/compiler/testData/diagnostics/tests/inlineClasses/innerClassInsideInlineClass.fir.kt @@ -3,6 +3,6 @@ inline class Foo(val x: Int) { inner class InnerC - inner object InnerO - inner interface InnerI + inner object InnerO + inner interface InnerI } diff --git a/compiler/testData/diagnostics/tests/inner/illegalModifier.fir.kt b/compiler/testData/diagnostics/tests/inner/illegalModifier.fir.kt index 28c8691442c..e69de29bb2d 100644 --- a/compiler/testData/diagnostics/tests/inner/illegalModifier.fir.kt +++ b/compiler/testData/diagnostics/tests/inner/illegalModifier.fir.kt @@ -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 -} diff --git a/compiler/testData/diagnostics/tests/inner/illegalModifier.kt b/compiler/testData/diagnostics/tests/inner/illegalModifier.kt index 22306d92879..4d5923a9625 100644 --- a/compiler/testData/diagnostics/tests/inner/illegalModifier.kt +++ b/compiler/testData/diagnostics/tests/inner/illegalModifier.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !LANGUAGE: -InnerClassInEnumEntryClass inner fun foo() {} inner val prop = 42 diff --git a/compiler/testData/diagnostics/tests/inner/illegalModifier_lv12.fir.kt b/compiler/testData/diagnostics/tests/inner/illegalModifier_lv12.fir.kt index ddc9f30edbd..e69de29bb2d 100644 --- a/compiler/testData/diagnostics/tests/inner/illegalModifier_lv12.fir.kt +++ b/compiler/testData/diagnostics/tests/inner/illegalModifier_lv12.fir.kt @@ -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 -} diff --git a/compiler/testData/diagnostics/tests/inner/illegalModifier_lv12.kt b/compiler/testData/diagnostics/tests/inner/illegalModifier_lv12.kt index 06128c2870d..da2729fac99 100644 --- a/compiler/testData/diagnostics/tests/inner/illegalModifier_lv12.kt +++ b/compiler/testData/diagnostics/tests/inner/illegalModifier_lv12.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !LANGUAGE: +InnerClassInEnumEntryClass inner fun foo() {} inner val prop = 42 diff --git a/compiler/testData/diagnostics/tests/inner/innerClassInEnumEntryClass_lv11.fir.kt b/compiler/testData/diagnostics/tests/inner/innerClassInEnumEntryClass_lv11.fir.kt index 9979fa52624..56810f3209f 100644 --- a/compiler/testData/diagnostics/tests/inner/innerClassInEnumEntryClass_lv11.fir.kt +++ b/compiler/testData/diagnostics/tests/inner/innerClassInEnumEntryClass_lv11.fir.kt @@ -10,7 +10,7 @@ enum class Enum { object TestObject - enum class TestEnumClass { + enum class TestEnumClass { OTHER_ENTRY } diff --git a/compiler/testData/diagnostics/tests/inner/innerClassInEnumEntryClass_lv12.fir.kt b/compiler/testData/diagnostics/tests/inner/innerClassInEnumEntryClass_lv12.fir.kt index cee93a50865..05805836b63 100644 --- a/compiler/testData/diagnostics/tests/inner/innerClassInEnumEntryClass_lv12.fir.kt +++ b/compiler/testData/diagnostics/tests/inner/innerClassInEnumEntryClass_lv12.fir.kt @@ -10,7 +10,7 @@ enum class Enum { object TestObject - enum class TestEnumClass { + enum class TestEnumClass { OTHER_ENTRY } diff --git a/compiler/testData/diagnostics/tests/inner/innerClassInEnumEntryClass_lv13.fir.kt b/compiler/testData/diagnostics/tests/inner/innerClassInEnumEntryClass_lv13.fir.kt index 259712372e6..96a4be9033e 100644 --- a/compiler/testData/diagnostics/tests/inner/innerClassInEnumEntryClass_lv13.fir.kt +++ b/compiler/testData/diagnostics/tests/inner/innerClassInEnumEntryClass_lv13.fir.kt @@ -10,7 +10,7 @@ enum class Enum { object TestObject - enum class TestEnumClass { + enum class TestEnumClass { OTHER_ENTRY } diff --git a/compiler/testData/diagnostics/tests/modifiers/IllegalModifiers.fir.kt b/compiler/testData/diagnostics/tests/modifiers/IllegalModifiers.fir.kt index 1a11592382c..d04f1568309 100644 --- a/compiler/testData/diagnostics/tests/modifiers/IllegalModifiers.fir.kt +++ b/compiler/testData/diagnostics/tests/modifiers/IllegalModifiers.fir.kt @@ -8,17 +8,17 @@ abstract class A() { open var r: String get - abstract protected set + abstract protected set } -final interface T {} +final interface T {} class FinalClass() { open fun foo() {} val i: Int = 1 - open get(): Int = field + open get(): Int = field var j: Int = 1 - open set(v: Int) {} + open set(v: Int) {} } private 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 class IllegalModifiers1( - in + in out - reified - enum - private - const + reified + enum + private + const a: Int) //Check multiple illegal modifiers in constructor -class IllegalModifiers2(private abstract a: Int) +class IllegalModifiers2(private abstract a: Int) //Check annotations with illegal modifiers in constructor -class IllegalModifiers3(@annotated public abstract b: String) +class IllegalModifiers3(@annotated public abstract b: String) //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") protected vararg v: Int) //Check illegal modifiers for functions and catch block abstract class IllegalModifiers5() { //Check illegal modifier in function parameter - abstract fun foo(public a: Int, vararg v: String) + abstract fun foo(public a: Int, vararg v: String) //Check multiple illegal modifiers in function parameter - abstract fun bar(public abstract a: Int, vararg v: String) + abstract fun bar(public abstract a: Int, vararg v: String) //Check annotations with illegal modifiers - abstract fun baz(@annotated("a text") public abstract a: Int) + abstract fun baz(@annotated("a text") public abstract a: Int) private fun qux() { //Check illegal modifier in catch block - try {} catch (in out reified enum public e: Exception) {} + try {} catch (in out reified enum public e: Exception) {} //Check multiple illegal modifiers in catch block - try {} catch (in out reified enum abstract public e: Exception) {} + try {} catch (in out reified enum abstract public e: Exception) {} //Check annotations with illegal modifiers - try {} catch (@annotated("a text") abstract public e: Exception) {} + try {} catch (@annotated("a text") abstract public e: Exception) {} } } //Check illegal modifiers on anonymous initializers abstract class IllegalModifiers6() { - public init {} - private init {} - protected init {} - vararg init {} - abstract init {} - open init {} - final init {} + public init {} + private init {} + protected init {} + vararg init {} + abstract init {} + open init {} + final init {} - public @annotated init {} + public @annotated init {} - private @IllegalModifiers6() init {} + private @IllegalModifiers6() init {} } // strange inappropriate modifiers usages -override -out +override +out in -vararg -reified +vararg +reified class IllegalModifiers7() { - enum - inner - annotation - out + enum + inner + annotation + out in - vararg - reified + vararg + reified val x = 1 - enum - inner - annotation - out + enum + inner + annotation + out in - vararg - reified - const + vararg + reified + const fun foo() {} } // Secondary constructors class IllegalModifiers8 { - abstract + abstract enum - open - inner - annotation - override - out + open + inner + annotation + override + out in final - vararg - reified + vararg + reified const constructor() {} - constructor(private enum abstract x: Int) {} + constructor(private enum abstract x: Int) {} } class IllegalModifiers9 { @@ -143,17 +143,17 @@ class IllegalModifiers9 { // Illegal modifiers on primary constructor class IllegalModifiers10 -abstract -enum -open -inner -annotation -override -out +abstract +enum +open +inner +annotation +override +out in final -vararg -reified +vararg +reified const constructor() class IllegalModifiers11 private protected constructor() diff --git a/compiler/testData/diagnostics/tests/modifiers/NoLocalVisibility.fir.kt b/compiler/testData/diagnostics/tests/modifiers/NoLocalVisibility.fir.kt deleted file mode 100644 index 4f23c38669b..00000000000 --- a/compiler/testData/diagnostics/tests/modifiers/NoLocalVisibility.fir.kt +++ /dev/null @@ -1,6 +0,0 @@ -fun foo() { - public class A - private class B - protected class C - internal class D -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/modifiers/NoLocalVisibility.kt b/compiler/testData/diagnostics/tests/modifiers/NoLocalVisibility.kt index 1e4ebc54578..273e2cb965b 100644 --- a/compiler/testData/diagnostics/tests/modifiers/NoLocalVisibility.kt +++ b/compiler/testData/diagnostics/tests/modifiers/NoLocalVisibility.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL fun foo() { public class A private class B diff --git a/compiler/testData/diagnostics/tests/modifiers/const/applicability.fir.kt b/compiler/testData/diagnostics/tests/modifiers/const/applicability.fir.kt index 3d2ee44a173..3b2591144c2 100644 --- a/compiler/testData/diagnostics/tests/modifiers/const/applicability.fir.kt +++ b/compiler/testData/diagnostics/tests/modifiers/const/applicability.fir.kt @@ -48,7 +48,7 @@ const val withExplicitDefaultGetter: Int = 1 get fun foo(): Int { - const val local: Int = 14 + const val local: Int = 14 return 15 } diff --git a/compiler/testData/diagnostics/tests/modifiers/defaultModifier.fir.kt b/compiler/testData/diagnostics/tests/modifiers/defaultModifier.fir.kt index 49b79c540d8..e69de29bb2d 100644 --- a/compiler/testData/diagnostics/tests/modifiers/defaultModifier.fir.kt +++ b/compiler/testData/diagnostics/tests/modifiers/defaultModifier.fir.kt @@ -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) \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/modifiers/defaultModifier.kt b/compiler/testData/diagnostics/tests/modifiers/defaultModifier.kt index e928bcc2f25..a03320062ee 100644 --- a/compiler/testData/diagnostics/tests/modifiers/defaultModifier.kt +++ b/compiler/testData/diagnostics/tests/modifiers/defaultModifier.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL companion class A { companion object { diff --git a/compiler/testData/diagnostics/tests/modifiers/modifierOnParameterInFunctionType.fir.kt b/compiler/testData/diagnostics/tests/modifiers/modifierOnParameterInFunctionType.fir.kt index 158233f2142..eef65241792 100644 --- a/compiler/testData/diagnostics/tests/modifiers/modifierOnParameterInFunctionType.fir.kt +++ b/compiler/testData/diagnostics/tests/modifiers/modifierOnParameterInFunctionType.fir.kt @@ -19,34 +19,34 @@ class A : (vararg Int)->Unit { get(): (vararg x: Int)->Unit = {} } -val allProhibited: (abstract - annotation - companion +val allProhibited: (abstract + annotation + companion const crossinline data - enum - external + enum + external final - in + in inline inner - internal - lateinit + internal + lateinit noinline open - operator + operator out override private protected public - reified + reified sealed - tailrec + tailrec vararg x: Int)->Unit = {} val valProhibited: (val x: Int)->Unit = {} -val varProhibited: (var x: Int)->Unit = {} \ No newline at end of file +val varProhibited: (var x: Int)->Unit = {} diff --git a/compiler/testData/diagnostics/tests/modifiers/redundantTargets.fir.kt b/compiler/testData/diagnostics/tests/modifiers/redundantTargets.fir.kt deleted file mode 100644 index c2cc1149db6..00000000000 --- a/compiler/testData/diagnostics/tests/modifiers/redundantTargets.fir.kt +++ /dev/null @@ -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 \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/modifiers/redundantTargets.kt b/compiler/testData/diagnostics/tests/modifiers/redundantTargets.kt index 267c8825d3c..56e95e1adce 100644 --- a/compiler/testData/diagnostics/tests/modifiers/redundantTargets.kt +++ b/compiler/testData/diagnostics/tests/modifiers/redundantTargets.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL open interface First // Now inspection abstract interface Second diff --git a/compiler/testData/diagnostics/tests/modifiers/repeatedModifiers.fir.kt b/compiler/testData/diagnostics/tests/modifiers/repeatedModifiers.fir.kt index 07fafacb782..bfd6027246d 100644 --- a/compiler/testData/diagnostics/tests/modifiers/repeatedModifiers.fir.kt +++ b/compiler/testData/diagnostics/tests/modifiers/repeatedModifiers.fir.kt @@ -11,7 +11,7 @@ class Bzz(public public val q: Int = 1) { public public get() = 3 val z: Int - open final get() = 4 + open final get() = 4 public public class B(public public val z: Int = 1) { public public val y: Int = 2 @@ -31,7 +31,7 @@ public public val bar: Int = 1 public public fun foo(): Int = 1 fun test() { - public public class B(public public val z: Int = 1) { + public public class B(public public val z: Int = 1) { public public val y: Int = 2 public val x: Int diff --git a/compiler/testData/diagnostics/tests/multiplatform/deprecated/header.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/deprecated/header.fir.kt index 2b79d2ae72d..5f9fcd55240 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/deprecated/header.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/deprecated/header.fir.kt @@ -2,29 +2,29 @@ // MODULE: m1-common // FILE: common.kt -header class My +header class My -header fun foo(): Int +header fun foo(): Int -header val x: String +header val x: String -header object O +header object O -header enum class E { +header enum class E { FIRST } // MODULE: m2-jvm()()(m1-common) // FILE: jvm.kt -impl class My +impl class My -impl fun foo() = 42 +impl fun foo() = 42 -impl val x get() = "Hello" +impl val x get() = "Hello" -impl object O +impl object O -impl enum class E { +impl enum class E { FIRST } diff --git a/compiler/testData/diagnostics/tests/multiplatform/headerClass/extraHeaderOnMembers.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/headerClass/extraHeaderOnMembers.fir.kt index 070add747cb..15862d94e8b 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/headerClass/extraHeaderOnMembers.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/headerClass/extraHeaderOnMembers.fir.kt @@ -3,7 +3,7 @@ // FILE: common.kt expect class H { - expect fun foo() + expect fun foo() } // MODULE: m1-jvm()()(m1-common) diff --git a/compiler/testData/diagnostics/tests/multiplatform/headerClass/nestedClassesWithErrors.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/headerClass/nestedClassesWithErrors.fir.kt index 094c389f403..1bd2c642f96 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/headerClass/nestedClassesWithErrors.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/headerClass/nestedClassesWithErrors.fir.kt @@ -5,14 +5,14 @@ expect class B { class N { fun body() {} - expect fun extraHeader() + expect fun extraHeader() } } expect class C { - expect class N - expect enum class E - expect inner class I + expect class N + expect enum class E + expect inner class I } expect class D { diff --git a/compiler/testData/diagnostics/tests/multiplatform/headerFunInNonHeaderClass.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/headerFunInNonHeaderClass.fir.kt index 9384de29443..f542ed05f17 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/headerFunInNonHeaderClass.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/headerFunInNonHeaderClass.fir.kt @@ -3,7 +3,7 @@ // FILE: common.kt class Foo { - expect fun bar(): String + expect fun bar(): String } // MODULE: m1-jvm()()(m1-common) diff --git a/compiler/testData/diagnostics/tests/multiplatform/incompatibles.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/incompatibles.fir.kt index 07688479da5..563ff397118 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/incompatibles.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/incompatibles.fir.kt @@ -1,13 +1,13 @@ // !LANGUAGE: +MultiPlatformProjects -header impl class First +header impl class First -header expect class Second +header expect class Second -header actual class Third +header actual class Third -impl expect class Fourth +impl expect class Fourth -impl actual class Fifth +impl actual class Fifth -expect actual class Sixth \ No newline at end of file +expect actual class Sixth diff --git a/compiler/testData/diagnostics/tests/multiplatform/modifierApplicability.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/modifierApplicability.fir.kt index e39ba9469a4..e5a164e43d7 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/modifierApplicability.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/modifierApplicability.fir.kt @@ -2,21 +2,21 @@ // MODULE: m1-common // FILE: common.kt -expect typealias Foo = String +expect typealias Foo = String -class Outer expect constructor() { - expect class Nested +class Outer expect constructor() { + expect class Nested - expect init {} + expect init {} - expect fun foo() - expect val bar: Int + expect fun foo() + expect val bar: Int } fun foo() { - expect fun localFun() - expect var x = 42 - expect class Bar + expect fun localFun() + expect var x = 42 + expect class Bar } // MODULE: m2-jvm @@ -25,11 +25,11 @@ fun foo() { class Outer actual constructor() { actual class Nested - actual init {} + actual init {} } fun foo() { - actual fun localFun() {} - actual var x = 42 - actual class Bar + actual fun localFun() {} + actual var x = 42 + actual class Bar } diff --git a/compiler/testData/diagnostics/tests/multiplatform/topLevelProperty/differentKindsOfProperties.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/topLevelProperty/differentKindsOfProperties.fir.kt index 10a21f89a09..edc3f838c42 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/topLevelProperty/differentKindsOfProperties.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/topLevelProperty/differentKindsOfProperties.fir.kt @@ -14,8 +14,8 @@ expect var varWithGetSet: String get set expect var varWithPlatformGetSet: String - expect get - expect set + expect get + expect set expect val backingFieldVal: String = "no" expect var backingFieldVar: String = "no" @@ -34,7 +34,7 @@ expect val delegated: String by Delegate object Delegate { operator fun getValue(x: Any?, y: Any?): String = "" } fun test(): String { - expect val localVariable: String + expect val localVariable: String localVariable = "no" return localVariable } diff --git a/compiler/testData/diagnostics/tests/properties/abstarctPropertyInPrimaryConstructor.fir.kt b/compiler/testData/diagnostics/tests/properties/abstarctPropertyInPrimaryConstructor.fir.kt deleted file mode 100644 index 86304e01fd7..00000000000 --- a/compiler/testData/diagnostics/tests/properties/abstarctPropertyInPrimaryConstructor.fir.kt +++ /dev/null @@ -1,2 +0,0 @@ -class A(abstract val i: Int) -class B(abstract i: Int) diff --git a/compiler/testData/diagnostics/tests/properties/abstarctPropertyInPrimaryConstructor.kt b/compiler/testData/diagnostics/tests/properties/abstarctPropertyInPrimaryConstructor.kt index 1021bfcd0fd..8ffbaeffeb0 100644 --- a/compiler/testData/diagnostics/tests/properties/abstarctPropertyInPrimaryConstructor.kt +++ b/compiler/testData/diagnostics/tests/properties/abstarctPropertyInPrimaryConstructor.kt @@ -1,2 +1,3 @@ +// FIR_IDENTICAL class A(abstract val i: Int) class B(abstract i: Int) diff --git a/compiler/testData/diagnostics/tests/regressions/kt9384.fir.kt b/compiler/testData/diagnostics/tests/regressions/kt9384.fir.kt index b309d2118fd..bb10628dd87 100644 --- a/compiler/testData/diagnostics/tests/regressions/kt9384.fir.kt +++ b/compiler/testData/diagnostics/tests/regressions/kt9384.fir.kt @@ -2,7 +2,7 @@ // !DIAGNOSTICS: -UNUSED_PARAMETER fun main(args: Array) { fun f() = run { - private class C { + private class C { private fun foo() { f().foo(); diff --git a/compiler/testData/diagnostics/tests/scopes/visibility.fir.kt b/compiler/testData/diagnostics/tests/scopes/visibility.fir.kt index 6db9b2fd4eb..734a85b1bed 100644 --- a/compiler/testData/diagnostics/tests/scopes/visibility.fir.kt +++ b/compiler/testData/diagnostics/tests/scopes/visibility.fir.kt @@ -6,8 +6,8 @@ package test_visibility protected class ProtectedClass protected interface ProtectedTrait -protected val protected_val : Int = 4 -protected fun protected_fun() {} +protected val protected_val : Int = 4 +protected fun protected_fun() {} private val private_val : Int = 4 private fun private_fun() {} diff --git a/compiler/testData/diagnostics/tests/sealed/LocalSealed.fir.kt b/compiler/testData/diagnostics/tests/sealed/LocalSealed.fir.kt deleted file mode 100644 index add2fe130d5..00000000000 --- a/compiler/testData/diagnostics/tests/sealed/LocalSealed.fir.kt +++ /dev/null @@ -1,3 +0,0 @@ -fun foo() { - sealed class My -} diff --git a/compiler/testData/diagnostics/tests/sealed/LocalSealed.kt b/compiler/testData/diagnostics/tests/sealed/LocalSealed.kt index 8326d6712d4..d24699e354c 100644 --- a/compiler/testData/diagnostics/tests/sealed/LocalSealed.kt +++ b/compiler/testData/diagnostics/tests/sealed/LocalSealed.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL fun foo() { sealed class My } diff --git a/compiler/testData/diagnostics/tests/sealed/NeverEnum.fir.kt b/compiler/testData/diagnostics/tests/sealed/NeverEnum.fir.kt deleted file mode 100644 index 8317d7a4c34..00000000000 --- a/compiler/testData/diagnostics/tests/sealed/NeverEnum.fir.kt +++ /dev/null @@ -1,6 +0,0 @@ -sealed enum class SealedEnum { - FIRST, - SECOND; - - class Derived: SealedEnum() -} diff --git a/compiler/testData/diagnostics/tests/sealed/NeverEnum.kt b/compiler/testData/diagnostics/tests/sealed/NeverEnum.kt index 6143254681d..bab02fe93db 100644 --- a/compiler/testData/diagnostics/tests/sealed/NeverEnum.kt +++ b/compiler/testData/diagnostics/tests/sealed/NeverEnum.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL sealed enum class SealedEnum { FIRST, SECOND; diff --git a/compiler/testData/diagnostics/tests/sealed/NeverObject.fir.kt b/compiler/testData/diagnostics/tests/sealed/NeverObject.fir.kt deleted file mode 100644 index 7fb9dd4ce14..00000000000 --- a/compiler/testData/diagnostics/tests/sealed/NeverObject.fir.kt +++ /dev/null @@ -1,3 +0,0 @@ -sealed object Sealed { - -} diff --git a/compiler/testData/diagnostics/tests/sealed/NeverObject.kt b/compiler/testData/diagnostics/tests/sealed/NeverObject.kt index fb3c58456a8..58e208dba2d 100644 --- a/compiler/testData/diagnostics/tests/sealed/NeverObject.kt +++ b/compiler/testData/diagnostics/tests/sealed/NeverObject.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL sealed object Sealed { } diff --git a/compiler/testData/diagnostics/tests/secondaryConstructors/valOrValAndModifiersInCtr.fir.kt b/compiler/testData/diagnostics/tests/secondaryConstructors/valOrValAndModifiersInCtr.fir.kt deleted file mode 100644 index 843f8f7dc3e..00000000000 --- a/compiler/testData/diagnostics/tests/secondaryConstructors/valOrValAndModifiersInCtr.fir.kt +++ /dev/null @@ -1,7 +0,0 @@ -// !DIAGNOSTICS: -UNUSED_PARAMETER -class A { - constructor( - val x: Int, y: Int, - var z: Int, - public a: Int) -} diff --git a/compiler/testData/diagnostics/tests/secondaryConstructors/valOrValAndModifiersInCtr.kt b/compiler/testData/diagnostics/tests/secondaryConstructors/valOrValAndModifiersInCtr.kt index d9a388c61bd..fc56a6a0c1f 100644 --- a/compiler/testData/diagnostics/tests/secondaryConstructors/valOrValAndModifiersInCtr.kt +++ b/compiler/testData/diagnostics/tests/secondaryConstructors/valOrValAndModifiersInCtr.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !DIAGNOSTICS: -UNUSED_PARAMETER class A { constructor( diff --git a/compiler/testData/diagnostics/tests/typealias/localTypeAliasModifiers.fir.kt b/compiler/testData/diagnostics/tests/typealias/localTypeAliasModifiers.fir.kt deleted file mode 100644 index c6bc19100cb..00000000000 --- a/compiler/testData/diagnostics/tests/typealias/localTypeAliasModifiers.fir.kt +++ /dev/null @@ -1,5 +0,0 @@ -// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -TOPLEVEL_TYPEALIASES_ONLY - -fun outer() { - companion typealias TestLocal = Any -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/typealias/localTypeAliasModifiers.kt b/compiler/testData/diagnostics/tests/typealias/localTypeAliasModifiers.kt index d3d24d7c4ac..1e84038fdf8 100644 --- a/compiler/testData/diagnostics/tests/typealias/localTypeAliasModifiers.kt +++ b/compiler/testData/diagnostics/tests/typealias/localTypeAliasModifiers.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -TOPLEVEL_TYPEALIASES_ONLY fun outer() { diff --git a/compiler/testData/diagnostics/tests/valueClasses/basicValueClassDeclaration.fir.kt b/compiler/testData/diagnostics/tests/valueClasses/basicValueClassDeclaration.fir.kt index fcfa6043252..9ff94d33573 100644 --- a/compiler/testData/diagnostics/tests/valueClasses/basicValueClassDeclaration.fir.kt +++ b/compiler/testData/diagnostics/tests/valueClasses/basicValueClassDeclaration.fir.kt @@ -8,7 +8,7 @@ annotation class JvmInline @JvmInline value class Foo(val x: Int) -value interface InlineInterface -value annotation class InlineAnn -value object InlineObject -value enum class InlineEnum +value interface InlineInterface +value annotation class InlineAnn +value object InlineObject +value enum class InlineEnum diff --git a/compiler/testData/diagnostics/tests/valueClasses/basicValueClassDeclarationDisabled.fir.kt b/compiler/testData/diagnostics/tests/valueClasses/basicValueClassDeclarationDisabled.fir.kt index 017e6d96fc0..fe996e295ec 100644 --- a/compiler/testData/diagnostics/tests/valueClasses/basicValueClassDeclarationDisabled.fir.kt +++ b/compiler/testData/diagnostics/tests/valueClasses/basicValueClassDeclarationDisabled.fir.kt @@ -9,9 +9,9 @@ annotation class JvmInline value class Foo(val x: Int) -value annotation class InlineAnn -value object InlineObject -value enum class InlineEnum +value annotation class InlineAnn +value object InlineObject +value enum class InlineEnum @JvmInline value class NotVal(x: Int) diff --git a/compiler/testData/diagnostics/testsWithStdLib/native/constructor.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/native/constructor.fir.kt deleted file mode 100644 index 3c11f664fd8..00000000000 --- a/compiler/testData/diagnostics/testsWithStdLib/native/constructor.fir.kt +++ /dev/null @@ -1,10 +0,0 @@ -class A { - external constructor() {} - inner class B { - external constructor() {} - } - - external constructor(x: Int) -} - -class C external constructor() \ No newline at end of file diff --git a/compiler/testData/diagnostics/testsWithStdLib/native/constructor.kt b/compiler/testData/diagnostics/testsWithStdLib/native/constructor.kt index f8b78708ae0..e592cdc53d6 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/native/constructor.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/native/constructor.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL class A { external constructor() {} inner class B { diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt index 53694359aa5..4ec567ed5bd 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt @@ -1014,6 +1014,14 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert token, ) } + add(FirErrors.DEPRECATED_MODIFIER) { firDiagnostic -> + DeprecatedModifierImpl( + firDiagnostic.a, + firDiagnostic.b, + firDiagnostic as FirPsiDiagnostic, + token, + ) + } add(FirErrors.DEPRECATED_MODIFIER_PAIR) { firDiagnostic -> DeprecatedModifierPairImpl( firDiagnostic.a, @@ -1022,6 +1030,22 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert token, ) } + add(FirErrors.DEPRECATED_MODIFIER_FOR_TARGET) { firDiagnostic -> + DeprecatedModifierForTargetImpl( + firDiagnostic.a, + firDiagnostic.b, + firDiagnostic as FirPsiDiagnostic, + token, + ) + } + add(FirErrors.REDUNDANT_MODIFIER_FOR_TARGET) { firDiagnostic -> + RedundantModifierForTargetImpl( + firDiagnostic.a, + firDiagnostic.b, + firDiagnostic as FirPsiDiagnostic, + token, + ) + } add(FirErrors.INCOMPATIBLE_MODIFIERS) { firDiagnostic -> IncompatibleModifiersImpl( firDiagnostic.a, diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnostics.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnostics.kt index 11d0beb8502..9b1c2939e99 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnostics.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnostics.kt @@ -25,7 +25,6 @@ import org.jetbrains.kotlin.idea.frontend.api.symbols.KtVariableLikeSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtVariableSymbol import org.jetbrains.kotlin.idea.frontend.api.types.KtType import org.jetbrains.kotlin.lexer.KtKeywordToken -import org.jetbrains.kotlin.lexer.KtModifierKeywordToken import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.KtAnnotationEntry @@ -733,16 +732,34 @@ sealed class KtFirDiagnostic : KtDiagnosticWithPsi { abstract val conflictingModifier: String } + abstract class DeprecatedModifier : KtFirDiagnostic() { + override val diagnosticClass get() = DeprecatedModifier::class + abstract val deprecatedModifier: String + abstract val actualModifier: String + } + abstract class DeprecatedModifierPair : KtFirDiagnostic() { override val diagnosticClass get() = DeprecatedModifierPair::class abstract val deprecatedModifier: String abstract val conflictingModifier: String } + abstract class DeprecatedModifierForTarget : KtFirDiagnostic() { + override val diagnosticClass get() = DeprecatedModifierForTarget::class + abstract val deprecatedModifier: String + abstract val target: String + } + + abstract class RedundantModifierForTarget : KtFirDiagnostic() { + override val diagnosticClass get() = RedundantModifierForTarget::class + abstract val redundantModifier: String + abstract val target: String + } + abstract class IncompatibleModifiers : KtFirDiagnostic() { override val diagnosticClass get() = IncompatibleModifiers::class - abstract val modifier1: KtModifierKeywordToken - abstract val modifier2: KtModifierKeywordToken + abstract val modifier1: String + abstract val modifier2: String } abstract class RedundantOpenInInterface : KtFirDiagnostic() { @@ -751,7 +768,7 @@ sealed class KtFirDiagnostic : KtDiagnosticWithPsi { abstract class WrongModifierTarget : KtFirDiagnostic() { override val diagnosticClass get() = WrongModifierTarget::class - abstract val modifier: KtModifierKeywordToken + abstract val modifier: String abstract val target: String } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnosticsImpl.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnosticsImpl.kt index 73b6a0986a1..d170e3fd74c 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnosticsImpl.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnosticsImpl.kt @@ -27,7 +27,6 @@ import org.jetbrains.kotlin.idea.frontend.api.symbols.KtVariableSymbol import org.jetbrains.kotlin.idea.frontend.api.tokens.ValidityToken import org.jetbrains.kotlin.idea.frontend.api.types.KtType import org.jetbrains.kotlin.lexer.KtKeywordToken -import org.jetbrains.kotlin.lexer.KtModifierKeywordToken import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.KtAnnotationEntry @@ -1166,6 +1165,15 @@ internal class RedundantModifierImpl( override val firDiagnostic: FirPsiDiagnostic by weakRef(firDiagnostic) } +internal class DeprecatedModifierImpl( + override val deprecatedModifier: String, + override val actualModifier: String, + firDiagnostic: FirPsiDiagnostic, + override val token: ValidityToken, +) : KtFirDiagnostic.DeprecatedModifier(), KtAbstractFirDiagnostic { + override val firDiagnostic: FirPsiDiagnostic by weakRef(firDiagnostic) +} + internal class DeprecatedModifierPairImpl( override val deprecatedModifier: String, override val conflictingModifier: String, @@ -1175,6 +1183,24 @@ internal class DeprecatedModifierPairImpl( override val firDiagnostic: FirPsiDiagnostic by weakRef(firDiagnostic) } +internal class DeprecatedModifierForTargetImpl( + override val deprecatedModifier: String, + override val target: String, + firDiagnostic: FirPsiDiagnostic, + override val token: ValidityToken, +) : KtFirDiagnostic.DeprecatedModifierForTarget(), KtAbstractFirDiagnostic { + override val firDiagnostic: FirPsiDiagnostic by weakRef(firDiagnostic) +} + +internal class RedundantModifierForTargetImpl( + override val redundantModifier: String, + override val target: String, + firDiagnostic: FirPsiDiagnostic, + override val token: ValidityToken, +) : KtFirDiagnostic.RedundantModifierForTarget(), KtAbstractFirDiagnostic { + override val firDiagnostic: FirPsiDiagnostic by weakRef(firDiagnostic) +} + internal class IncompatibleModifiersImpl( override val modifier1: String, override val modifier2: String, @@ -1192,7 +1218,7 @@ internal class RedundantOpenInInterfaceImpl( } internal class WrongModifierTargetImpl( - override val modifier: KtModifierKeywordToken, + override val modifier: String, override val target: String, firDiagnostic: FirPsiDiagnostic, override val token: ValidityToken,