FIR: fix API mode checker for local functions
This commit is contained in:
committed by
Mikhail Glukhikh
parent
31b7248769
commit
a969e5af50
+6
@@ -30261,6 +30261,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag
|
|||||||
runTest("compiler/testData/diagnostics/tests/testsWithExplicitApi/interfaces.kt");
|
runTest("compiler/testData/diagnostics/tests/testsWithExplicitApi/interfaces.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("localFunctions.kt")
|
||||||
|
public void testLocalFunctions() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/testsWithExplicitApi/localFunctions.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("mustBeEffectivelyPublic.kt")
|
@TestMetadata("mustBeEffectivelyPublic.kt")
|
||||||
public void testMustBeEffectivelyPublic() throws Exception {
|
public void testMustBeEffectivelyPublic() throws Exception {
|
||||||
|
|||||||
+6
@@ -30261,6 +30261,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti
|
|||||||
runTest("compiler/testData/diagnostics/tests/testsWithExplicitApi/interfaces.kt");
|
runTest("compiler/testData/diagnostics/tests/testsWithExplicitApi/interfaces.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("localFunctions.kt")
|
||||||
|
public void testLocalFunctions() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/testsWithExplicitApi/localFunctions.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("mustBeEffectivelyPublic.kt")
|
@TestMetadata("mustBeEffectivelyPublic.kt")
|
||||||
public void testMustBeEffectivelyPublic() throws Exception {
|
public void testMustBeEffectivelyPublic() throws Exception {
|
||||||
|
|||||||
+6
@@ -30261,6 +30261,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac
|
|||||||
runTest("compiler/testData/diagnostics/tests/testsWithExplicitApi/interfaces.kt");
|
runTest("compiler/testData/diagnostics/tests/testsWithExplicitApi/interfaces.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("localFunctions.kt")
|
||||||
|
public void testLocalFunctions() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/testsWithExplicitApi/localFunctions.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("mustBeEffectivelyPublic.kt")
|
@TestMetadata("mustBeEffectivelyPublic.kt")
|
||||||
public void testMustBeEffectivelyPublic() throws Exception {
|
public void testMustBeEffectivelyPublic() throws Exception {
|
||||||
|
|||||||
+1
-1
@@ -386,7 +386,7 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
|
|||||||
parameter<String>("message")
|
parameter<String>("message")
|
||||||
}
|
}
|
||||||
|
|
||||||
val NO_EXPLICIT_VISIBILITY_IN_API_MODE by warning<KtDeclaration>(PositioningStrategy.DECLARATION_START_TO_NAME)
|
val NO_EXPLICIT_VISIBILITY_IN_API_MODE by error<KtDeclaration>(PositioningStrategy.DECLARATION_START_TO_NAME)
|
||||||
val NO_EXPLICIT_VISIBILITY_IN_API_MODE_WARNING by warning<KtDeclaration>(PositioningStrategy.DECLARATION_START_TO_NAME)
|
val NO_EXPLICIT_VISIBILITY_IN_API_MODE_WARNING by warning<KtDeclaration>(PositioningStrategy.DECLARATION_START_TO_NAME)
|
||||||
|
|
||||||
val NO_EXPLICIT_RETURN_TYPE_IN_API_MODE by error<KtDeclaration>(PositioningStrategy.DECLARATION_NAME)
|
val NO_EXPLICIT_RETURN_TYPE_IN_API_MODE by error<KtDeclaration>(PositioningStrategy.DECLARATION_NAME)
|
||||||
|
|||||||
+1
-1
@@ -288,7 +288,7 @@ object FirErrors {
|
|||||||
val WRONG_MODIFIER_CONTAINING_DECLARATION by error2<PsiElement, KtModifierKeywordToken, String>()
|
val WRONG_MODIFIER_CONTAINING_DECLARATION by error2<PsiElement, KtModifierKeywordToken, String>()
|
||||||
val DEPRECATED_MODIFIER_CONTAINING_DECLARATION by warning2<PsiElement, KtModifierKeywordToken, String>()
|
val DEPRECATED_MODIFIER_CONTAINING_DECLARATION by warning2<PsiElement, KtModifierKeywordToken, String>()
|
||||||
val INAPPLICABLE_OPERATOR_MODIFIER by error1<PsiElement, String>(SourceElementPositioningStrategies.OPERATOR_MODIFIER)
|
val INAPPLICABLE_OPERATOR_MODIFIER by error1<PsiElement, String>(SourceElementPositioningStrategies.OPERATOR_MODIFIER)
|
||||||
val NO_EXPLICIT_VISIBILITY_IN_API_MODE by warning0<KtDeclaration>(SourceElementPositioningStrategies.DECLARATION_START_TO_NAME)
|
val NO_EXPLICIT_VISIBILITY_IN_API_MODE by error0<KtDeclaration>(SourceElementPositioningStrategies.DECLARATION_START_TO_NAME)
|
||||||
val NO_EXPLICIT_VISIBILITY_IN_API_MODE_WARNING by warning0<KtDeclaration>(SourceElementPositioningStrategies.DECLARATION_START_TO_NAME)
|
val NO_EXPLICIT_VISIBILITY_IN_API_MODE_WARNING by warning0<KtDeclaration>(SourceElementPositioningStrategies.DECLARATION_START_TO_NAME)
|
||||||
val NO_EXPLICIT_RETURN_TYPE_IN_API_MODE by error0<KtDeclaration>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
val NO_EXPLICIT_RETURN_TYPE_IN_API_MODE by error0<KtDeclaration>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
||||||
val NO_EXPLICIT_RETURN_TYPE_IN_API_MODE_WARNING by warning0<KtDeclaration>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
val NO_EXPLICIT_RETURN_TYPE_IN_API_MODE_WARNING by warning0<KtDeclaration>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
||||||
|
|||||||
+7
-3
@@ -76,6 +76,8 @@ object FirExplicitApiDeclarationChecker : FirDeclarationSyntaxChecker<FirDeclara
|
|||||||
* 4. Getters and setters (because getters can't change visibility and setter-only explicit visibility looks ugly)
|
* 4. Getters and setters (because getters can't change visibility and setter-only explicit visibility looks ugly)
|
||||||
* 5. Properties of annotations in public API
|
* 5. Properties of annotations in public API
|
||||||
* 6. Value parameter declaration
|
* 6. Value parameter declaration
|
||||||
|
* 7. An anonymous function
|
||||||
|
* 8. A local named function
|
||||||
*
|
*
|
||||||
* TODO: Do we need something like @PublicApiFile to disable (or invert) this inspection per-file?
|
* TODO: Do we need something like @PublicApiFile to disable (or invert) this inspection per-file?
|
||||||
*/
|
*/
|
||||||
@@ -86,7 +88,9 @@ object FirExplicitApiDeclarationChecker : FirDeclarationSyntaxChecker<FirDeclara
|
|||||||
// 4
|
// 4
|
||||||
is FirPropertyAccessor,
|
is FirPropertyAccessor,
|
||||||
// 6
|
// 6
|
||||||
is FirValueParameter -> true
|
is FirValueParameter,
|
||||||
|
// 7
|
||||||
|
is FirAnonymousFunction -> true
|
||||||
is FirCallableDeclaration -> {
|
is FirCallableDeclaration -> {
|
||||||
val containingClass = context.containingDeclarations.lastOrNull() as? FirRegularClass
|
val containingClass = context.containingDeclarations.lastOrNull() as? FirRegularClass
|
||||||
// 2, 5
|
// 2, 5
|
||||||
@@ -97,8 +101,8 @@ object FirExplicitApiDeclarationChecker : FirDeclarationSyntaxChecker<FirDeclara
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3
|
// 3, 8
|
||||||
declaration.isOverride
|
declaration.isOverride || declaration.isLocalMember
|
||||||
}
|
}
|
||||||
else -> false
|
else -> false
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
// FIR_IDENTICAL
|
||||||
|
<!NO_EXPLICIT_VISIBILITY_IN_API_MODE!>fun run<!>(b: () -> Unit) {}
|
||||||
|
|
||||||
|
<!NO_EXPLICIT_VISIBILITY_IN_API_MODE!>fun test<!>() {
|
||||||
|
run {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fun localFun() {}
|
||||||
|
localFun()
|
||||||
|
run(::localFun)
|
||||||
|
|
||||||
|
val localFun2 = fun() {}
|
||||||
|
run(localFun2)
|
||||||
|
|
||||||
|
val lambda = {}
|
||||||
|
run(lambda)
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
public fun run(/*0*/ b: () -> kotlin.Unit): kotlin.Unit
|
||||||
|
public fun test(): kotlin.Unit
|
||||||
Generated
+6
@@ -30357,6 +30357,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
|
|||||||
runTest("compiler/testData/diagnostics/tests/testsWithExplicitApi/interfaces.kt");
|
runTest("compiler/testData/diagnostics/tests/testsWithExplicitApi/interfaces.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("localFunctions.kt")
|
||||||
|
public void testLocalFunctions() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/testsWithExplicitApi/localFunctions.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("mustBeEffectivelyPublic.kt")
|
@TestMetadata("mustBeEffectivelyPublic.kt")
|
||||||
public void testMustBeEffectivelyPublic() throws Exception {
|
public void testMustBeEffectivelyPublic() throws Exception {
|
||||||
|
|||||||
Reference in New Issue
Block a user