[FIR] Relax MULTIPLE_DEFAULTS_* to account for the K1 behavior
^KT-56442 ^KT-36188
This commit is contained in:
committed by
Space Team
parent
3f1bf6112f
commit
13a7bb95b3
+28
@@ -2602,6 +2602,34 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION.errorFactory) { firDiagnostic ->
|
||||
MultipleDefaultsInheritedFromSupertypesDeprecationErrorImpl(
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a),
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION.warningFactory) { firDiagnostic ->
|
||||
MultipleDefaultsInheritedFromSupertypesDeprecationWarningImpl(
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a),
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE_DEPRECATION.errorFactory) { firDiagnostic ->
|
||||
MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationErrorImpl(
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a),
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE_DEPRECATION.warningFactory) { firDiagnostic ->
|
||||
MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationWarningImpl(
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a),
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.TYPEALIAS_EXPANDS_TO_ARRAY_OF_NOTHINGS) { firDiagnostic ->
|
||||
TypealiasExpandsToArrayOfNothingsImpl(
|
||||
firSymbolBuilder.typeBuilder.buildKtType(firDiagnostic.a),
|
||||
|
||||
+20
@@ -1849,6 +1849,26 @@ sealed interface KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
|
||||
val valueParameter: KtSymbol
|
||||
}
|
||||
|
||||
interface MultipleDefaultsInheritedFromSupertypesDeprecationError : KtFirDiagnostic<KtElement> {
|
||||
override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypesDeprecationError::class
|
||||
val valueParameter: KtSymbol
|
||||
}
|
||||
|
||||
interface MultipleDefaultsInheritedFromSupertypesDeprecationWarning : KtFirDiagnostic<KtElement> {
|
||||
override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypesDeprecationWarning::class
|
||||
val valueParameter: KtSymbol
|
||||
}
|
||||
|
||||
interface MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationError : KtFirDiagnostic<KtElement> {
|
||||
override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationError::class
|
||||
val valueParameter: KtSymbol
|
||||
}
|
||||
|
||||
interface MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationWarning : KtFirDiagnostic<KtElement> {
|
||||
override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationWarning::class
|
||||
val valueParameter: KtSymbol
|
||||
}
|
||||
|
||||
interface TypealiasExpandsToArrayOfNothings : KtFirDiagnostic<KtElement> {
|
||||
override val diagnosticClass get() = TypealiasExpandsToArrayOfNothings::class
|
||||
val type: KtType
|
||||
|
||||
+24
@@ -2221,6 +2221,30 @@ internal class MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideImpl
|
||||
token: KtLifetimeToken,
|
||||
) : KtAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverride
|
||||
|
||||
internal class MultipleDefaultsInheritedFromSupertypesDeprecationErrorImpl(
|
||||
override val valueParameter: KtSymbol,
|
||||
firDiagnostic: KtPsiDiagnostic,
|
||||
token: KtLifetimeToken,
|
||||
) : KtAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypesDeprecationError
|
||||
|
||||
internal class MultipleDefaultsInheritedFromSupertypesDeprecationWarningImpl(
|
||||
override val valueParameter: KtSymbol,
|
||||
firDiagnostic: KtPsiDiagnostic,
|
||||
token: KtLifetimeToken,
|
||||
) : KtAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypesDeprecationWarning
|
||||
|
||||
internal class MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationErrorImpl(
|
||||
override val valueParameter: KtSymbol,
|
||||
firDiagnostic: KtPsiDiagnostic,
|
||||
token: KtLifetimeToken,
|
||||
) : KtAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationError
|
||||
|
||||
internal class MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationWarningImpl(
|
||||
override val valueParameter: KtSymbol,
|
||||
firDiagnostic: KtPsiDiagnostic,
|
||||
token: KtLifetimeToken,
|
||||
) : KtAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationWarning
|
||||
|
||||
internal class TypealiasExpandsToArrayOfNothingsImpl(
|
||||
override val type: KtType,
|
||||
firDiagnostic: KtPsiDiagnostic,
|
||||
|
||||
+36
@@ -357,6 +357,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia
|
||||
runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("falseNegativeDuplicateDefaultValues1_error.kt")
|
||||
public void testFalseNegativeDuplicateDefaultValues1_error() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1_error.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("falseNegativeDuplicateDefaultValues2.kt")
|
||||
public void testFalseNegativeDuplicateDefaultValues2() throws Exception {
|
||||
@@ -753,12 +759,30 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia
|
||||
runTest("compiler/testData/diagnostics/tests/missingIteratorMissing.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("missingMultipleDefaultsOnTransitiveInheritance1.kt")
|
||||
public void testMissingMultipleDefaultsOnTransitiveInheritance1() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/missingMultipleDefaultsOnTransitiveInheritance1.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("missingMultipleDefaultsOnTransitiveInheritance2.kt")
|
||||
public void testMissingMultipleDefaultsOnTransitiveInheritance2() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/missingMultipleDefaultsOnTransitiveInheritance2.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("missingWrongAnnotationTarget.kt")
|
||||
public void testMissingWrongAnnotationTarget() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/missingWrongAnnotationTarget.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("moreThanOneOverriddenMissingK2.kt")
|
||||
public void testMoreThanOneOverriddenMissingK2() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/moreThanOneOverriddenMissingK2.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("MultilineStringTemplates.kt")
|
||||
public void testMultilineStringTemplates() throws Exception {
|
||||
@@ -771,6 +795,18 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia
|
||||
runTest("compiler/testData/diagnostics/tests/MultipleBounds.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("multipleDefaultsIncorrectlyAllowed1.kt")
|
||||
public void testMultipleDefaultsIncorrectlyAllowed1() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/multipleDefaultsIncorrectlyAllowed1.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("multipleDefaultsIncorrectlyAllowed2.kt")
|
||||
public void testMultipleDefaultsIncorrectlyAllowed2() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/multipleDefaultsIncorrectlyAllowed2.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("multipleDefaultsNoSource.kt")
|
||||
public void testMultipleDefaultsNoSource() throws Exception {
|
||||
|
||||
+36
@@ -357,6 +357,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
|
||||
runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("falseNegativeDuplicateDefaultValues1_error.kt")
|
||||
public void testFalseNegativeDuplicateDefaultValues1_error() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1_error.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("falseNegativeDuplicateDefaultValues2.kt")
|
||||
public void testFalseNegativeDuplicateDefaultValues2() throws Exception {
|
||||
@@ -753,12 +759,30 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
|
||||
runTest("compiler/testData/diagnostics/tests/missingIteratorMissing.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("missingMultipleDefaultsOnTransitiveInheritance1.kt")
|
||||
public void testMissingMultipleDefaultsOnTransitiveInheritance1() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/missingMultipleDefaultsOnTransitiveInheritance1.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("missingMultipleDefaultsOnTransitiveInheritance2.kt")
|
||||
public void testMissingMultipleDefaultsOnTransitiveInheritance2() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/missingMultipleDefaultsOnTransitiveInheritance2.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("missingWrongAnnotationTarget.kt")
|
||||
public void testMissingWrongAnnotationTarget() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/missingWrongAnnotationTarget.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("moreThanOneOverriddenMissingK2.kt")
|
||||
public void testMoreThanOneOverriddenMissingK2() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/moreThanOneOverriddenMissingK2.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("MultilineStringTemplates.kt")
|
||||
public void testMultilineStringTemplates() throws Exception {
|
||||
@@ -771,6 +795,18 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
|
||||
runTest("compiler/testData/diagnostics/tests/MultipleBounds.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("multipleDefaultsIncorrectlyAllowed1.kt")
|
||||
public void testMultipleDefaultsIncorrectlyAllowed1() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/multipleDefaultsIncorrectlyAllowed1.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("multipleDefaultsIncorrectlyAllowed2.kt")
|
||||
public void testMultipleDefaultsIncorrectlyAllowed2() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/multipleDefaultsIncorrectlyAllowed2.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("multipleDefaultsNoSource.kt")
|
||||
public void testMultipleDefaultsNoSource() throws Exception {
|
||||
|
||||
+36
@@ -357,6 +357,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir
|
||||
runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("falseNegativeDuplicateDefaultValues1_error.kt")
|
||||
public void testFalseNegativeDuplicateDefaultValues1_error() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1_error.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("falseNegativeDuplicateDefaultValues2.kt")
|
||||
public void testFalseNegativeDuplicateDefaultValues2() throws Exception {
|
||||
@@ -753,12 +759,30 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir
|
||||
runTest("compiler/testData/diagnostics/tests/missingIteratorMissing.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("missingMultipleDefaultsOnTransitiveInheritance1.kt")
|
||||
public void testMissingMultipleDefaultsOnTransitiveInheritance1() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/missingMultipleDefaultsOnTransitiveInheritance1.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("missingMultipleDefaultsOnTransitiveInheritance2.kt")
|
||||
public void testMissingMultipleDefaultsOnTransitiveInheritance2() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/missingMultipleDefaultsOnTransitiveInheritance2.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("missingWrongAnnotationTarget.kt")
|
||||
public void testMissingWrongAnnotationTarget() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/missingWrongAnnotationTarget.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("moreThanOneOverriddenMissingK2.kt")
|
||||
public void testMoreThanOneOverriddenMissingK2() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/moreThanOneOverriddenMissingK2.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("MultilineStringTemplates.kt")
|
||||
public void testMultilineStringTemplates() throws Exception {
|
||||
@@ -771,6 +795,18 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir
|
||||
runTest("compiler/testData/diagnostics/tests/MultipleBounds.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("multipleDefaultsIncorrectlyAllowed1.kt")
|
||||
public void testMultipleDefaultsIncorrectlyAllowed1() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/multipleDefaultsIncorrectlyAllowed1.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("multipleDefaultsIncorrectlyAllowed2.kt")
|
||||
public void testMultipleDefaultsIncorrectlyAllowed2() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/multipleDefaultsIncorrectlyAllowed2.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("multipleDefaultsNoSource.kt")
|
||||
public void testMultipleDefaultsNoSource() throws Exception {
|
||||
|
||||
+36
@@ -357,6 +357,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia
|
||||
runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("falseNegativeDuplicateDefaultValues1_error.kt")
|
||||
public void testFalseNegativeDuplicateDefaultValues1_error() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1_error.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("falseNegativeDuplicateDefaultValues2.kt")
|
||||
public void testFalseNegativeDuplicateDefaultValues2() throws Exception {
|
||||
@@ -753,12 +759,30 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia
|
||||
runTest("compiler/testData/diagnostics/tests/missingIteratorMissing.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("missingMultipleDefaultsOnTransitiveInheritance1.kt")
|
||||
public void testMissingMultipleDefaultsOnTransitiveInheritance1() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/missingMultipleDefaultsOnTransitiveInheritance1.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("missingMultipleDefaultsOnTransitiveInheritance2.kt")
|
||||
public void testMissingMultipleDefaultsOnTransitiveInheritance2() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/missingMultipleDefaultsOnTransitiveInheritance2.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("missingWrongAnnotationTarget.kt")
|
||||
public void testMissingWrongAnnotationTarget() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/missingWrongAnnotationTarget.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("moreThanOneOverriddenMissingK2.kt")
|
||||
public void testMoreThanOneOverriddenMissingK2() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/moreThanOneOverriddenMissingK2.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("MultilineStringTemplates.kt")
|
||||
public void testMultilineStringTemplates() throws Exception {
|
||||
@@ -771,6 +795,18 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia
|
||||
runTest("compiler/testData/diagnostics/tests/MultipleBounds.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("multipleDefaultsIncorrectlyAllowed1.kt")
|
||||
public void testMultipleDefaultsIncorrectlyAllowed1() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/multipleDefaultsIncorrectlyAllowed1.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("multipleDefaultsIncorrectlyAllowed2.kt")
|
||||
public void testMultipleDefaultsIncorrectlyAllowed2() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/multipleDefaultsIncorrectlyAllowed2.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("multipleDefaultsNoSource.kt")
|
||||
public void testMultipleDefaultsNoSource() throws Exception {
|
||||
|
||||
+12
@@ -888,6 +888,18 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
|
||||
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE by error<KtElement>(PositioningStrategy.DECLARATION_NAME) {
|
||||
parameter<FirValueParameterSymbol>("valueParameter")
|
||||
}
|
||||
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION by deprecationError<KtElement>(
|
||||
LanguageFeature.ProhibitAllMultipleDefaultsInheritedFromSupertypes,
|
||||
PositioningStrategy.DECLARATION_SIGNATURE_OR_DEFAULT
|
||||
) {
|
||||
parameter<FirValueParameterSymbol>("valueParameter")
|
||||
}
|
||||
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE_DEPRECATION by deprecationError<KtElement>(
|
||||
LanguageFeature.ProhibitAllMultipleDefaultsInheritedFromSupertypes,
|
||||
PositioningStrategy.DECLARATION_NAME
|
||||
) {
|
||||
parameter<FirValueParameterSymbol>("valueParameter")
|
||||
}
|
||||
|
||||
val TYPEALIAS_EXPANDS_TO_ARRAY_OF_NOTHINGS by error<KtElement> {
|
||||
parameter<ConeKotlinType>("type")
|
||||
|
||||
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.config.LanguageFeature.ForbidExposingTypesInPrimaryC
|
||||
import org.jetbrains.kotlin.config.LanguageFeature.ForbidInferringTypeVariablesIntoEmptyIntersection
|
||||
import org.jetbrains.kotlin.config.LanguageFeature.ForbidUsingExtensionPropertyTypeParameterInDelegate
|
||||
import org.jetbrains.kotlin.config.LanguageFeature.ModifierNonBuiltinSuspendFunError
|
||||
import org.jetbrains.kotlin.config.LanguageFeature.ProhibitAllMultipleDefaultsInheritedFromSupertypes
|
||||
import org.jetbrains.kotlin.config.LanguageFeature.ProhibitAssigningSingleElementsToVarargsInNamedForm
|
||||
import org.jetbrains.kotlin.config.LanguageFeature.ProhibitConfusingSyntaxInWhenBranches
|
||||
import org.jetbrains.kotlin.config.LanguageFeature.ProhibitCyclesInAnnotations
|
||||
@@ -491,6 +492,8 @@ object FirErrors {
|
||||
val CANNOT_CHANGE_ACCESS_PRIVILEGE by error3<KtModifierListOwner, Visibility, FirCallableSymbol<*>, Name>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
|
||||
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES by error1<KtElement, FirValueParameterSymbol>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT)
|
||||
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE by error1<KtElement, FirValueParameterSymbol>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
||||
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION by deprecationError1<KtElement, FirValueParameterSymbol>(ProhibitAllMultipleDefaultsInheritedFromSupertypes, SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT)
|
||||
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE_DEPRECATION by deprecationError1<KtElement, FirValueParameterSymbol>(ProhibitAllMultipleDefaultsInheritedFromSupertypes, SourceElementPositioningStrategies.DECLARATION_NAME)
|
||||
val TYPEALIAS_EXPANDS_TO_ARRAY_OF_NOTHINGS by error1<KtElement, ConeKotlinType>()
|
||||
val OVERRIDING_FINAL_MEMBER by error2<KtNamedDeclaration, FirCallableSymbol<*>, Name>(SourceElementPositioningStrategies.OVERRIDE_MODIFIER)
|
||||
val RETURN_TYPE_MISMATCH_ON_INHERITANCE by error2<KtClassOrObject, FirCallableSymbol<*>, FirCallableSymbol<*>>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
||||
|
||||
+46
-11
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.analysis.checkers.declaration
|
||||
|
||||
import org.jetbrains.kotlin.KtSourceElement
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.collectOverriddenFunctionsWhere
|
||||
@@ -18,6 +19,7 @@ import org.jetbrains.kotlin.fir.declarations.utils.superConeTypes
|
||||
import org.jetbrains.kotlin.fir.isSubstitutionOverride
|
||||
import org.jetbrains.kotlin.fir.scopes.processAllFunctions
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
|
||||
|
||||
object FirMultipleDefaultsInheritedFromSupertypesChecker : FirRegularClassChecker() {
|
||||
override fun check(declaration: FirRegularClass, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
@@ -42,26 +44,59 @@ object FirMultipleDefaultsInheritedFromSupertypesChecker : FirRegularClassChecke
|
||||
}
|
||||
val isExplicitOverride = function.origin == FirDeclarationOrigin.Source
|
||||
|
||||
val immediateSupertypes = declaration.superConeTypes.mapTo(mutableSetOf()) { it.lookupTag }
|
||||
val overriddenFunctionsK1WouldConsider = overriddenFunctions.filter { it.containingClassLookupTag() in immediateSupertypes }
|
||||
|
||||
for ((index, parameter) in function.valueParameterSymbols.withIndex()) {
|
||||
val basesWithDefaultValues = overriddenFunctions.count { it.valueParameterSymbols[index].hasDefaultValue }
|
||||
|
||||
if (basesWithDefaultValues <= 1) {
|
||||
continue
|
||||
}
|
||||
|
||||
val k1WouldMiss = overriddenFunctionsK1WouldConsider.count { it.valueParameterSymbols[index].hasDefaultValue } <= 1
|
||||
|
||||
when {
|
||||
basesWithDefaultValues <= 1 -> {
|
||||
continue
|
||||
}
|
||||
!isExplicitOverride -> {
|
||||
reporter.reportOn(
|
||||
declaration.source, FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE,
|
||||
parameter, context,
|
||||
)
|
||||
reportDiagnosticForImplicitOverride(k1WouldMiss, declaration.source, parameter, context, reporter)
|
||||
// Avoid duplicates
|
||||
break
|
||||
}
|
||||
else -> reporter.reportOn(
|
||||
parameter.source, FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES,
|
||||
parameter, context,
|
||||
)
|
||||
else -> reportDiagnosticForExplicitOverride(k1WouldMiss, parameter, context, reporter)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun reportDiagnosticForImplicitOverride(
|
||||
k1WouldMiss: Boolean,
|
||||
source: KtSourceElement?,
|
||||
parameter: FirValueParameterSymbol,
|
||||
context: CheckerContext,
|
||||
reporter: DiagnosticReporter,
|
||||
): Unit = when {
|
||||
k1WouldMiss -> reporter.reportOn(
|
||||
source, FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE_DEPRECATION,
|
||||
parameter, context,
|
||||
)
|
||||
else -> reporter.reportOn(
|
||||
source, FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE,
|
||||
parameter, context,
|
||||
)
|
||||
}
|
||||
|
||||
private fun reportDiagnosticForExplicitOverride(
|
||||
k1WouldMiss: Boolean,
|
||||
parameter: FirValueParameterSymbol,
|
||||
context: CheckerContext,
|
||||
reporter: DiagnosticReporter,
|
||||
): Unit = when {
|
||||
k1WouldMiss -> reporter.reportOn(
|
||||
parameter.source, FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION,
|
||||
parameter, context,
|
||||
)
|
||||
else -> reporter.reportOn(
|
||||
parameter.source, FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES,
|
||||
parameter, context,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+25
-3
@@ -369,6 +369,8 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MODIFIER_FORM_FOR
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MULTIPLE_ARGUMENTS_APPLICABLE_FOR_CONTEXT_RECEIVER
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE_DEPRECATION
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MULTIPLE_VARARG_PARAMETERS
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MULTI_FIELD_VALUE_CLASS_PRIMARY_CONSTRUCTOR_DEFAULT_PARAMETER
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MUST_BE_INITIALIZED
|
||||
@@ -1494,9 +1496,29 @@ object FirErrorsDefaultMessages : BaseDiagnosticRendererFactory() {
|
||||
FQ_NAMES_IN_TYPES
|
||||
)
|
||||
|
||||
val multipleDefaultsMessage = "More than one overridden descriptor declares a default value for ''{0}''. As the compiler can not make sure these values agree, this is not allowed."
|
||||
map.put(MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES, multipleDefaultsMessage, SYMBOL)
|
||||
map.put(MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE, multipleDefaultsMessage, SYMBOL)
|
||||
val multipleDefaultsMessage = "More than one overridden function declares a default value for ''{0}''."
|
||||
val multipleDefaultsNotAllowed = " As the compiler can not make sure these values agree, this is not allowed."
|
||||
map.put(
|
||||
MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES,
|
||||
multipleDefaultsMessage + multipleDefaultsNotAllowed,
|
||||
SYMBOL
|
||||
)
|
||||
map.put(
|
||||
MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE,
|
||||
multipleDefaultsMessage + multipleDefaultsNotAllowed,
|
||||
SYMBOL
|
||||
)
|
||||
val multipleDefaultsDiscouraged = " As the compiler can not make sure these values agree, this will be prohibited in the Future."
|
||||
map.put(
|
||||
MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION,
|
||||
multipleDefaultsMessage + multipleDefaultsDiscouraged,
|
||||
SYMBOL
|
||||
)
|
||||
map.put(
|
||||
MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE_DEPRECATION,
|
||||
multipleDefaultsMessage + multipleDefaultsNotAllowed,
|
||||
SYMBOL
|
||||
)
|
||||
|
||||
map.put(TYPEALIAS_EXPANDS_TO_ARRAY_OF_NOTHINGS, "Type alias expanded to malformed type ''{0}''", RENDER_TYPE)
|
||||
|
||||
|
||||
+1
-3
@@ -1,6 +1,4 @@
|
||||
// IGNORE_BACKEND_K1: JS, JS_IR, JS_IR_ES6
|
||||
// IGNORE_BACKEND_K2: ANY
|
||||
// STATUS: This must be red code anyway, KT-36188
|
||||
// IGNORE_BACKEND: JS, JS_IR, JS_IR_ES6
|
||||
|
||||
// The code in this test should be prohibited in the frontend, see KT-36188.
|
||||
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
// IGNORE_BACKEND_K1: JS, JS_IR, JS_IR_ES6
|
||||
// IGNORE_BACKEND_K2: ANY
|
||||
// STATUS: This must be red code anyway, KT-36188
|
||||
// IGNORE_BACKEND: JS, JS_IR, JS_IR_ES6
|
||||
// !JVM_DEFAULT_MODE: all
|
||||
// JVM_TARGET: 1.8
|
||||
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
// IGNORE_BACKEND: JS
|
||||
// IGNORE_BACKEND_K2: ANY
|
||||
// STATUS: This must be red code anyway, KT-36188
|
||||
|
||||
// Test for KT-36188 bug compatibility between non-IR and IR backends
|
||||
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
// IGNORE_BACKEND: JS
|
||||
// IGNORE_BACKEND_K2: ANY
|
||||
// STATUS: This must be red code anyway, KT-36188
|
||||
|
||||
// Test for KT-36188 bug compatibility between non-IR and IR backends
|
||||
|
||||
|
||||
+1
-1
@@ -11,5 +11,5 @@ open class Keker<P> {
|
||||
}
|
||||
|
||||
class Implementation<P>() : Keker<P>(), SomeRandomOverride<P> {
|
||||
override fun child(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES!>props: Int<!>) {}
|
||||
override fun child(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION_WARNING!>props: Int<!>) {}
|
||||
}
|
||||
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
// LANGUAGE: +ProhibitAllMultipleDefaultsInheritedFromSupertypes
|
||||
// ISSUE: KT-36188
|
||||
|
||||
interface SomeRandomBase<K> {
|
||||
fun child(props: Int = 20)
|
||||
}
|
||||
|
||||
interface SomeRandomOverride<J> : SomeRandomBase<J>
|
||||
|
||||
open class Keker<P> {
|
||||
open fun child(props: Int = 10) {}
|
||||
}
|
||||
|
||||
class Implementation<P>() : Keker<P>(), SomeRandomOverride<P> {
|
||||
override fun child(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION_ERROR!>props: Int<!>) {}
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
// LANGUAGE: +ProhibitAllMultipleDefaultsInheritedFromSupertypes
|
||||
// ISSUE: KT-36188
|
||||
|
||||
interface SomeRandomBase<K> {
|
||||
fun child(props: Int = 20)
|
||||
}
|
||||
|
||||
interface SomeRandomOverride<J> : SomeRandomBase<J>
|
||||
|
||||
open class Keker<P> {
|
||||
open fun child(props: Int = 10) {}
|
||||
}
|
||||
|
||||
class Implementation<P>() : Keker<P>(), SomeRandomOverride<P> {
|
||||
override fun child(props: Int) {}
|
||||
}
|
||||
+1
-1
@@ -13,5 +13,5 @@ open class Keker<P> {
|
||||
}
|
||||
|
||||
class Implementation<P>() : Keker<P>(), SomeRandomOverride<P> {
|
||||
override fun child(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES!>props: Int<!>) {}
|
||||
override fun child(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION_WARNING!>props: Int<!>) {}
|
||||
}
|
||||
|
||||
+1
-1
@@ -13,5 +13,5 @@ open class Keker<P> {
|
||||
}
|
||||
|
||||
class Implementation<P>() : Keker<P>(), SomeRandomOverride<P> {
|
||||
override fun child(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES!>props: Int<!>) {}
|
||||
override fun child(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION_WARNING!>props: Int<!>) {}
|
||||
}
|
||||
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
// ISSUE: KT-60269
|
||||
// WITH_STDLIB
|
||||
|
||||
interface Foo {
|
||||
fun foo(param: Int = 1)
|
||||
}
|
||||
|
||||
interface Bar {
|
||||
fun foo(param: Int = 2)
|
||||
}
|
||||
|
||||
interface Baz1 : Bar
|
||||
|
||||
class Baz : Baz1, Foo {
|
||||
override fun foo(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION_WARNING!>param: Int<!>) {
|
||||
println(param)
|
||||
}
|
||||
}
|
||||
|
||||
fun main() {
|
||||
Baz().foo()
|
||||
(Baz() as Foo).foo()
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
// ISSUE: KT-60269
|
||||
// WITH_STDLIB
|
||||
|
||||
interface Foo {
|
||||
fun foo(param: Int = 1)
|
||||
}
|
||||
|
||||
interface Bar {
|
||||
fun foo(param: Int = 2)
|
||||
}
|
||||
|
||||
interface Baz1 : Bar
|
||||
|
||||
class Baz : Baz1, Foo {
|
||||
override fun foo(param: Int) {
|
||||
println(param)
|
||||
}
|
||||
}
|
||||
|
||||
fun main() {
|
||||
Baz().foo()
|
||||
(Baz() as Foo).foo()
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
// FIR_IDENTICAL
|
||||
// ISSUE: KT-60269
|
||||
// WITH_STDLIB
|
||||
|
||||
interface Foo {
|
||||
fun foo(param: Int = 1)
|
||||
}
|
||||
|
||||
interface Bar {
|
||||
fun foo(param: Int = 2)
|
||||
}
|
||||
|
||||
class Baz : Bar, Foo {
|
||||
override fun foo(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES!>param: Int<!>) {
|
||||
println(param)
|
||||
}
|
||||
}
|
||||
|
||||
fun main() {
|
||||
Baz().foo()
|
||||
(Baz() as Foo).foo()
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
// FIR_IDENTICAL
|
||||
// ISSUE: KT-57076
|
||||
// WITH_STDLIB
|
||||
|
||||
interface I01 {
|
||||
fun some(x: Int = 1, y: Int)
|
||||
}
|
||||
|
||||
open class C01 {
|
||||
open fun some(x: Int = -1, y: Int = 2) {
|
||||
println("x = $x y = $y")
|
||||
}
|
||||
}
|
||||
|
||||
<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE!>class C02<!>: C01(), I01
|
||||
|
||||
fun main(){
|
||||
C02().some() // K2: x = -1 y = 2
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
// FIR_IDENTICAL
|
||||
// ISSUE: KT-36188
|
||||
|
||||
interface A {
|
||||
fun foo(a: String = "Fail"): String
|
||||
}
|
||||
interface B {
|
||||
fun foo(a: String = "OK"): String
|
||||
}
|
||||
class Impl : A, B {
|
||||
override fun foo(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES!>a: String<!>) = a
|
||||
}
|
||||
|
||||
fun box(): String = Impl().foo()
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
// ISSUE: KT-36188
|
||||
|
||||
interface A {
|
||||
fun foo(a: String = "Fail"): String
|
||||
}
|
||||
interface A2 : A
|
||||
interface B {
|
||||
fun foo(a: String = "OK"): String
|
||||
}
|
||||
class Impl : A2, B {
|
||||
override fun foo(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION_WARNING!>a: String<!>) = a
|
||||
}
|
||||
|
||||
fun box(): String = Impl().foo()
|
||||
@@ -0,0 +1,14 @@
|
||||
// ISSUE: KT-36188
|
||||
|
||||
interface A {
|
||||
fun foo(a: String = "Fail"): String
|
||||
}
|
||||
interface A2 : A
|
||||
interface B {
|
||||
fun foo(a: String = "OK"): String
|
||||
}
|
||||
class Impl : A2, B {
|
||||
override fun foo(a: String) = a
|
||||
}
|
||||
|
||||
fun box(): String = Impl().foo()
|
||||
Generated
+36
@@ -357,6 +357,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
|
||||
runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("falseNegativeDuplicateDefaultValues1_error.kt")
|
||||
public void testFalseNegativeDuplicateDefaultValues1_error() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/falseNegativeDuplicateDefaultValues1_error.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("falseNegativeDuplicateDefaultValues2.kt")
|
||||
public void testFalseNegativeDuplicateDefaultValues2() throws Exception {
|
||||
@@ -753,12 +759,30 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
|
||||
runTest("compiler/testData/diagnostics/tests/missingIteratorMissing.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("missingMultipleDefaultsOnTransitiveInheritance1.kt")
|
||||
public void testMissingMultipleDefaultsOnTransitiveInheritance1() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/missingMultipleDefaultsOnTransitiveInheritance1.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("missingMultipleDefaultsOnTransitiveInheritance2.kt")
|
||||
public void testMissingMultipleDefaultsOnTransitiveInheritance2() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/missingMultipleDefaultsOnTransitiveInheritance2.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("missingWrongAnnotationTarget.kt")
|
||||
public void testMissingWrongAnnotationTarget() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/missingWrongAnnotationTarget.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("moreThanOneOverriddenMissingK2.kt")
|
||||
public void testMoreThanOneOverriddenMissingK2() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/moreThanOneOverriddenMissingK2.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("MultilineStringTemplates.kt")
|
||||
public void testMultilineStringTemplates() throws Exception {
|
||||
@@ -771,6 +795,18 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
|
||||
runTest("compiler/testData/diagnostics/tests/MultipleBounds.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("multipleDefaultsIncorrectlyAllowed1.kt")
|
||||
public void testMultipleDefaultsIncorrectlyAllowed1() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/multipleDefaultsIncorrectlyAllowed1.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("multipleDefaultsIncorrectlyAllowed2.kt")
|
||||
public void testMultipleDefaultsIncorrectlyAllowed2() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/multipleDefaultsIncorrectlyAllowed2.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("multipleDefaultsNoSource.kt")
|
||||
public void testMultipleDefaultsNoSource() throws Exception {
|
||||
|
||||
@@ -349,6 +349,7 @@ enum class LanguageFeature(
|
||||
AllowResultInReturnType(null),
|
||||
MultiPlatformProjects(sinceVersion = null),
|
||||
ProhibitComparisonOfIncompatibleClasses(sinceVersion = null, kind = BUG_FIX),
|
||||
ProhibitAllMultipleDefaultsInheritedFromSupertypes(sinceVersion = null, kind = BUG_FIX),
|
||||
ExplicitBackingFields(sinceVersion = null, kind = UNSTABLE_FEATURE),
|
||||
FunctionalTypeWithExtensionAsSupertype(sinceVersion = null),
|
||||
JsAllowInvalidCharsIdentifiersEscaping(sinceVersion = null, kind = UNSTABLE_FEATURE),
|
||||
|
||||
Reference in New Issue
Block a user