From fc77d0d26bde511cf8d7ae9b8351042a5f7da950 Mon Sep 17 00:00:00 2001 From: Ivan Kochurkin Date: Wed, 30 Mar 2022 18:50:05 +0300 Subject: [PATCH] [FIR] Fix false positive errors for members with explicit API mode, ^KT-51758 Fixed --- ...CompilerTestFE10TestdataTestGenerated.java | 6 +++++ ...irOldFrontendDiagnosticsTestGenerated.java | 6 +++++ ...DiagnosticsWithLightTreeTestGenerated.java | 6 +++++ .../FirExplicitApiDeclarationChecker.kt | 17 +++++++------- ...orsForMemebersInsideInternalDeclaration.kt | 23 +++++++++++++++++++ .../test/runners/DiagnosticTestGenerated.java | 6 +++++ 6 files changed, 56 insertions(+), 8 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/testsWithExplicitApi/noErrorsForMemebersInsideInternalDeclaration.kt diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java index 7d0d4cc6ccf..1650328ae9e 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java @@ -30994,6 +30994,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag runTest("compiler/testData/diagnostics/tests/testsWithExplicitApi/mustBeEffectivelyPublic.kt"); } + @Test + @TestMetadata("noErrorsForMemebersInsideInternalDeclaration.kt") + public void testNoErrorsForMemebersInsideInternalDeclaration() throws Exception { + runTest("compiler/testData/diagnostics/tests/testsWithExplicitApi/noErrorsForMemebersInsideInternalDeclaration.kt"); + } + @Test @TestMetadata("properties.kt") public void testProperties() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java index 72889f3eedb..2fcf835a871 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java @@ -30994,6 +30994,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti runTest("compiler/testData/diagnostics/tests/testsWithExplicitApi/mustBeEffectivelyPublic.kt"); } + @Test + @TestMetadata("noErrorsForMemebersInsideInternalDeclaration.kt") + public void testNoErrorsForMemebersInsideInternalDeclaration() throws Exception { + runTest("compiler/testData/diagnostics/tests/testsWithExplicitApi/noErrorsForMemebersInsideInternalDeclaration.kt"); + } + @Test @TestMetadata("properties.kt") public void testProperties() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java index 0e7b4ca645c..5051d8e3592 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java @@ -30994,6 +30994,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac runTest("compiler/testData/diagnostics/tests/testsWithExplicitApi/mustBeEffectivelyPublic.kt"); } + @Test + @TestMetadata("noErrorsForMemebersInsideInternalDeclaration.kt") + public void testNoErrorsForMemebersInsideInternalDeclaration() throws Exception { + runTest("compiler/testData/diagnostics/tests/testsWithExplicitApi/noErrorsForMemebersInsideInternalDeclaration.kt"); + } + @Test @TestMetadata("properties.kt") public void testProperties() throws Exception { diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/syntax/FirExplicitApiDeclarationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/syntax/FirExplicitApiDeclarationChecker.kt index d48812a9b77..6927a86faaa 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/syntax/FirExplicitApiDeclarationChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/syntax/FirExplicitApiDeclarationChecker.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirPrimaryConstructor import org.jetbrains.kotlin.fir.declarations.utils.effectiveVisibility import org.jetbrains.kotlin.fir.declarations.utils.isData import org.jetbrains.kotlin.fir.declarations.utils.isOverride +import org.jetbrains.kotlin.fir.declarations.utils.visibility import org.jetbrains.kotlin.fir.resolve.transformers.publishedApiEffectiveVisibility import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.KtDeclaration @@ -47,6 +48,10 @@ object FirExplicitApiDeclarationChecker : FirDeclarationSyntaxChecker true + is FirPrimaryConstructor, // 1, + is FirPropertyAccessor, // 4 + is FirValueParameter, // 6 + is FirAnonymousFunction -> true // 7 is FirCallableDeclaration -> { val containingClass = context.containingDeclarations.lastOrNull() as? FirRegularClass // 2, 5 diff --git a/compiler/testData/diagnostics/tests/testsWithExplicitApi/noErrorsForMemebersInsideInternalDeclaration.kt b/compiler/testData/diagnostics/tests/testsWithExplicitApi/noErrorsForMemebersInsideInternalDeclaration.kt new file mode 100644 index 00000000000..02e4fceddf1 --- /dev/null +++ b/compiler/testData/diagnostics/tests/testsWithExplicitApi/noErrorsForMemebersInsideInternalDeclaration.kt @@ -0,0 +1,23 @@ +// FIR_IDENTICAL +// SKIP_TXT +// ISSUE: KT-51758 + +@PublishedApi +internal class SomeClass { + private val somethingPrivate = "123" + + public val somethingPublic = "456" + + fun foo() = "789" +} + +@PublishedApi +internal class Outer { + class Inner { + private val somethingPrivate = "123" + + public val somethingPublic = "456" + + fun foo() = "789" + } +} \ No newline at end of file diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index 4be2442c3fc..fecdb9a9a23 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -31084,6 +31084,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/testsWithExplicitApi/mustBeEffectivelyPublic.kt"); } + @Test + @TestMetadata("noErrorsForMemebersInsideInternalDeclaration.kt") + public void testNoErrorsForMemebersInsideInternalDeclaration() throws Exception { + runTest("compiler/testData/diagnostics/tests/testsWithExplicitApi/noErrorsForMemebersInsideInternalDeclaration.kt"); + } + @Test @TestMetadata("properties.kt") public void testProperties() throws Exception {