diff --git a/compiler/frontend/src/org/jetbrains/kotlin/cfg/ControlFlowInformationProvider.kt b/compiler/frontend/src/org/jetbrains/kotlin/cfg/ControlFlowInformationProvider.kt index dce6163a8aa..b0662bd435f 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/cfg/ControlFlowInformationProvider.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/cfg/ControlFlowInformationProvider.kt @@ -671,7 +671,7 @@ class ControlFlowInformationProvider private constructor( val mainFunctionDetector = MainFunctionDetector(trace.bindingContext, languageVersionSettings) val isMain = owner is KtNamedFunction && mainFunctionDetector.isMain(owner) val functionName = functionDescriptor.name - if (isMain && !languageVersionSettings.supportsFeature(LanguageFeature.ExtendedMainConvention) + if (isMain && !languageVersionSettings.supportsFeature(LanguageFeature.WarningOnMainUnusedParameter) || functionDescriptor.isOverridableOrOverrides || owner.hasModifier(KtTokens.OVERRIDE_KEYWORD) || OperatorNameConventions.GET_VALUE == functionName diff --git a/compiler/testData/diagnostics/tests/controlFlowAnalysis/mainWith12.kt b/compiler/testData/diagnostics/tests/controlFlowAnalysis/mainWith12.kt deleted file mode 100644 index 802dad22d26..00000000000 --- a/compiler/testData/diagnostics/tests/controlFlowAnalysis/mainWith12.kt +++ /dev/null @@ -1,5 +0,0 @@ -// !LANGUAGE: -ExtendedMainConvention - -fun main(args: Array) { - -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/controlFlowAnalysis/mainWith13.kt b/compiler/testData/diagnostics/tests/controlFlowAnalysis/mainWithWarningOnUnusedParam.kt similarity index 55% rename from compiler/testData/diagnostics/tests/controlFlowAnalysis/mainWith13.kt rename to compiler/testData/diagnostics/tests/controlFlowAnalysis/mainWithWarningOnUnusedParam.kt index b4e489385c5..c1712fe6746 100644 --- a/compiler/testData/diagnostics/tests/controlFlowAnalysis/mainWith13.kt +++ b/compiler/testData/diagnostics/tests/controlFlowAnalysis/mainWithWarningOnUnusedParam.kt @@ -1,3 +1,5 @@ +// !LANGUAGE: +WarningOnMainUnusedParameter + fun main(args: Array) { } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/controlFlowAnalysis/mainWith12.txt b/compiler/testData/diagnostics/tests/controlFlowAnalysis/mainWithWarningOnUnusedParam.txt similarity index 100% rename from compiler/testData/diagnostics/tests/controlFlowAnalysis/mainWith12.txt rename to compiler/testData/diagnostics/tests/controlFlowAnalysis/mainWithWarningOnUnusedParam.txt diff --git a/compiler/testData/diagnostics/tests/controlFlowAnalysis/mainWithoutWarningOnUnusedParam.kt b/compiler/testData/diagnostics/tests/controlFlowAnalysis/mainWithoutWarningOnUnusedParam.kt new file mode 100644 index 00000000000..9ed477daa2e --- /dev/null +++ b/compiler/testData/diagnostics/tests/controlFlowAnalysis/mainWithoutWarningOnUnusedParam.kt @@ -0,0 +1,5 @@ +// !LANGUAGE: -WarningOnMainUnusedParameter + +fun main(args: Array) { + +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/controlFlowAnalysis/mainWith13.txt b/compiler/testData/diagnostics/tests/controlFlowAnalysis/mainWithoutWarningOnUnusedParam.txt similarity index 100% rename from compiler/testData/diagnostics/tests/controlFlowAnalysis/mainWith13.txt rename to compiler/testData/diagnostics/tests/controlFlowAnalysis/mainWithoutWarningOnUnusedParam.txt diff --git a/compiler/testData/diagnostics/tests/redeclarations/RedeclarationMainInFile.kt b/compiler/testData/diagnostics/tests/redeclarations/RedeclarationMainInFile.kt index 018f44808a6..8e526c11a0c 100644 --- a/compiler/testData/diagnostics/tests/redeclarations/RedeclarationMainInFile.kt +++ b/compiler/testData/diagnostics/tests/redeclarations/RedeclarationMainInFile.kt @@ -1,4 +1,4 @@ // KT-9733 No error shown for 2 "main" functions in the same file -fun main(args: Array) {} -fun main(args: Array) {} \ No newline at end of file +fun main(args: Array) {} +fun main(args: Array) {} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/redeclarations/RedeclarationParameterlessMainInvalid.kt b/compiler/testData/diagnostics/tests/redeclarations/RedeclarationParameterlessMainInvalid.kt index 3a65ef92bd7..e94e65a7955 100644 --- a/compiler/testData/diagnostics/tests/redeclarations/RedeclarationParameterlessMainInvalid.kt +++ b/compiler/testData/diagnostics/tests/redeclarations/RedeclarationParameterlessMainInvalid.kt @@ -1,7 +1,7 @@ // FILE: a.kt fun main() {} -suspend fun main(args: Array) {} +suspend fun main(args: Array) {} // FILE: b.kt fun main() {} diff --git a/compiler/testData/diagnostics/testsWithStdLib/CallToMainRedeclaredInMultiFile.kt b/compiler/testData/diagnostics/testsWithStdLib/CallToMainRedeclaredInMultiFile.kt index 697f33d54bc..35289768bc3 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/CallToMainRedeclaredInMultiFile.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/CallToMainRedeclaredInMultiFile.kt @@ -1,8 +1,8 @@ // FILE: a.kt -fun main(args: Array) {} +fun main(args: Array) {} // FILE: b.kt -fun main(args: Array) {} +fun main(args: Array) {} // FILE: c.kt fun foo() { main(arrayOf("a", "b")) } \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index b223bcb8d4c..48fe3bd4f51 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -3608,14 +3608,14 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { runTest("compiler/testData/diagnostics/tests/controlFlowAnalysis/localObjectInConstructor.kt"); } - @TestMetadata("mainWith12.kt") - public void testMainWith12() throws Exception { - runTest("compiler/testData/diagnostics/tests/controlFlowAnalysis/mainWith12.kt"); + @TestMetadata("mainWithWarningOnUnusedParam.kt") + public void testMainWithWarningOnUnusedParam() throws Exception { + runTest("compiler/testData/diagnostics/tests/controlFlowAnalysis/mainWithWarningOnUnusedParam.kt"); } - @TestMetadata("mainWith13.kt") - public void testMainWith13() throws Exception { - runTest("compiler/testData/diagnostics/tests/controlFlowAnalysis/mainWith13.kt"); + @TestMetadata("mainWithoutWarningOnUnusedParam.kt") + public void testMainWithoutWarningOnUnusedParam() throws Exception { + runTest("compiler/testData/diagnostics/tests/controlFlowAnalysis/mainWithoutWarningOnUnusedParam.kt"); } @TestMetadata("nestedTryFinally.kt") diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java index 51718b58b54..4101eb647d2 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java @@ -3608,14 +3608,14 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing runTest("compiler/testData/diagnostics/tests/controlFlowAnalysis/localObjectInConstructor.kt"); } - @TestMetadata("mainWith12.kt") - public void testMainWith12() throws Exception { - runTest("compiler/testData/diagnostics/tests/controlFlowAnalysis/mainWith12.kt"); + @TestMetadata("mainWithWarningOnUnusedParam.kt") + public void testMainWithWarningOnUnusedParam() throws Exception { + runTest("compiler/testData/diagnostics/tests/controlFlowAnalysis/mainWithWarningOnUnusedParam.kt"); } - @TestMetadata("mainWith13.kt") - public void testMainWith13() throws Exception { - runTest("compiler/testData/diagnostics/tests/controlFlowAnalysis/mainWith13.kt"); + @TestMetadata("mainWithoutWarningOnUnusedParam.kt") + public void testMainWithoutWarningOnUnusedParam() throws Exception { + runTest("compiler/testData/diagnostics/tests/controlFlowAnalysis/mainWithoutWarningOnUnusedParam.kt"); } @TestMetadata("nestedTryFinally.kt") diff --git a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt index 401f28fbe7c..2e60148cf91 100644 --- a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt +++ b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt @@ -91,6 +91,7 @@ enum class LanguageFeature( DslMarkerOnFunctionTypeReceiver(KOTLIN_1_4, kind = BUG_FIX), RestrictReturnStatementTarget(KOTLIN_1_4, kind = BUG_FIX), NoConstantValueAttributeForNonConstVals(KOTLIN_1_4, kind = BUG_FIX), + WarningOnMainUnusedParameter(KOTLIN_1_4), ProperVisibilityForCompanionObjectInstanceField(sinceVersion = null, kind = BUG_FIX), // Temporarily disabled, see KT-27084/KT-22379 diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/facet/KotlinVersionInfoProvider.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/facet/KotlinVersionInfoProvider.kt index 15e11f6aa67..a227f51bb55 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/facet/KotlinVersionInfoProvider.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/facet/KotlinVersionInfoProvider.kt @@ -77,6 +77,7 @@ fun getDefaultLanguageLevel( fun String?.toLanguageVersion(): LanguageVersion = when { this == null -> VersionView.RELEASED_VERSION + startsWith("1.4") -> LanguageVersion.KOTLIN_1_4 startsWith("1.3") -> LanguageVersion.KOTLIN_1_3 startsWith("1.2") -> LanguageVersion.KOTLIN_1_2 startsWith("1.1") -> LanguageVersion.KOTLIN_1_1 diff --git a/idea/testData/checker/ExtensionFunctions.kt b/idea/testData/checker/ExtensionFunctions.kt index 7747f4aebc5..ad332cce69c 100644 --- a/idea/testData/checker/ExtensionFunctions.kt +++ b/idea/testData/checker/ExtensionFunctions.kt @@ -50,7 +50,7 @@ fun Int.foo() = this fun Any?.equals1(other : Any?) : Boolean = true fun Any.equals2(other : Any?) : Boolean = true - fun main(args: Array) { + fun main(args: Array) { System.out.print(1) diff --git a/idea/testData/checker/UnusedParameterInEntry13.kt b/idea/testData/checker/MainWithWarningOnUnusedParam.kt similarity index 81% rename from idea/testData/checker/UnusedParameterInEntry13.kt rename to idea/testData/checker/MainWithWarningOnUnusedParam.kt index c6c1faeb8dc..f503a2e9140 100644 --- a/idea/testData/checker/UnusedParameterInEntry13.kt +++ b/idea/testData/checker/MainWithWarningOnUnusedParam.kt @@ -1,3 +1,5 @@ +// LANGUAGE_VERSION: 1.4 + fun main(args: Array) { } \ No newline at end of file diff --git a/idea/testData/checker/UnusedParameterInEntry12.kt b/idea/testData/checker/MainWithoutWarningOnUnusedParam.kt similarity index 58% rename from idea/testData/checker/UnusedParameterInEntry12.kt rename to idea/testData/checker/MainWithoutWarningOnUnusedParam.kt index 15eaac5c185..d2da7cd6cda 100644 --- a/idea/testData/checker/UnusedParameterInEntry12.kt +++ b/idea/testData/checker/MainWithoutWarningOnUnusedParam.kt @@ -1,4 +1,4 @@ -// LANGUAGE_VERSION: 1.2 +// LANGUAGE_VERSION: 1.3 fun main(args: Array) { diff --git a/idea/testData/checker/infos/SmartCastToEnum.kt b/idea/testData/checker/infos/SmartCastToEnum.kt index 9f862e127d4..3542cca816d 100644 --- a/idea/testData/checker/infos/SmartCastToEnum.kt +++ b/idea/testData/checker/infos/SmartCastToEnum.kt @@ -2,7 +2,7 @@ package test2 enum class En { A, B, ะก } -fun main(args: Array) { +fun main(args: Array) { val en2: Any? = En.A if (en2 is En) { when (en2) { diff --git a/idea/testData/checker/regression/BadParseForClass.kt b/idea/testData/checker/regression/BadParseForClass.kt index 4a5e73b7553..5ea57af0892 100644 --- a/idea/testData/checker/regression/BadParseForClass.kt +++ b/idea/testData/checker/regression/BadParseForClass.kt @@ -1,4 +1,4 @@ -fun main(args: Array) { +fun main(args: Array) { String.class } diff --git a/idea/testData/checker/regression/DoubleDefine.kt b/idea/testData/checker/regression/DoubleDefine.kt index 485ccf56394..a4716e628e9 100644 --- a/idea/testData/checker/regression/DoubleDefine.kt +++ b/idea/testData/checker/regression/DoubleDefine.kt @@ -38,7 +38,7 @@ fun evaluate(expr: StringBuilder, numbers: ArrayList): Int { return lhs } -fun main(args: Array) { +fun main(args: Array) { System.out.println("24 game") val numbers = ArrayList(4) val rnd = Random(); diff --git a/idea/testData/checker/regression/Jet69.kt b/idea/testData/checker/regression/Jet69.kt index 87fbc11ef1a..a83894fbebe 100644 --- a/idea/testData/checker/regression/Jet69.kt +++ b/idea/testData/checker/regression/Jet69.kt @@ -4,7 +4,7 @@ fun parse(cmd: String): Command? { return null } fun Any.equals(other : Any?) : Boolean = this === other -fun main(args: Array) { +fun main(args: Array) { val command = parse("") if (command == null) 1 // error on this line, but must be OK } diff --git a/idea/testData/checker/regression/SpecififcityByReceiver.kt b/idea/testData/checker/regression/SpecififcityByReceiver.kt index 5b476daebe6..5e1c2d4e331 100644 --- a/idea/testData/checker/regression/SpecififcityByReceiver.kt +++ b/idea/testData/checker/regression/SpecififcityByReceiver.kt @@ -1,6 +1,6 @@ fun Any.equals(other : Any?) : Boolean = true -fun main(args: Array) { +fun main(args: Array) { val command : Any = 1 diff --git a/idea/tests/org/jetbrains/kotlin/checkers/PsiCheckerTestGenerated.java b/idea/tests/org/jetbrains/kotlin/checkers/PsiCheckerTestGenerated.java index 7dd1f593515..2bc5687aa17 100644 --- a/idea/tests/org/jetbrains/kotlin/checkers/PsiCheckerTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/checkers/PsiCheckerTestGenerated.java @@ -156,6 +156,16 @@ public class PsiCheckerTestGenerated extends AbstractPsiCheckerTest { runTest("idea/testData/checker/LocalObjects.kt"); } + @TestMetadata("MainWithWarningOnUnusedParam.kt") + public void testMainWithWarningOnUnusedParam() throws Exception { + runTest("idea/testData/checker/MainWithWarningOnUnusedParam.kt"); + } + + @TestMetadata("MainWithoutWarningOnUnusedParam.kt") + public void testMainWithoutWarningOnUnusedParam() throws Exception { + runTest("idea/testData/checker/MainWithoutWarningOnUnusedParam.kt"); + } + @TestMetadata("MultipleBounds.kt") public void testMultipleBounds() throws Exception { runTest("idea/testData/checker/MultipleBounds.kt"); @@ -321,16 +331,6 @@ public class PsiCheckerTestGenerated extends AbstractPsiCheckerTest { runTest("idea/testData/checker/Unused.kt"); } - @TestMetadata("UnusedParameterInEntry12.kt") - public void testUnusedParameterInEntry12() throws Exception { - runTest("idea/testData/checker/UnusedParameterInEntry12.kt"); - } - - @TestMetadata("UnusedParameterInEntry13.kt") - public void testUnusedParameterInEntry13() throws Exception { - runTest("idea/testData/checker/UnusedParameterInEntry13.kt"); - } - @TestMetadata("Variance.kt") public void testVariance() throws Exception { runTest("idea/testData/checker/Variance.kt");