From a17a61341be6e51b5e54f4cd209afb247cfdf2c5 Mon Sep 17 00:00:00 2001 From: Andrey Zinovyev Date: Thu, 12 Aug 2021 15:20:43 +0300 Subject: [PATCH] [FIR] Fix false positive NON_INTERNAL_PUBLISHED_API on constructor val #KT-48234 Fixed --- .../declaration/FirPublishedApiChecker.kt | 2 ++ .../testData/diagnostics/tests/publishedApi.kt | 8 ++++++++ .../testData/diagnostics/tests/publishedApi.txt | 17 +++++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirPublishedApiChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirPublishedApiChecker.kt index 17779dbb94b..15231ad1bb7 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirPublishedApiChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirPublishedApiChecker.kt @@ -13,12 +13,14 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors import org.jetbrains.kotlin.fir.analysis.diagnostics.reportOn import org.jetbrains.kotlin.fir.declarations.FirAnnotatedDeclaration import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration +import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.declarations.getAnnotationByFqName import org.jetbrains.kotlin.fir.declarations.utils.visibility object FirPublishedApiChecker : FirAnnotatedDeclarationChecker() { override fun check(declaration: FirAnnotatedDeclaration, context: CheckerContext, reporter: DiagnosticReporter) { if (declaration !is FirMemberDeclaration) return + if (declaration is FirValueParameter) return if (declaration.visibility == Visibilities.Internal) return val annotation = declaration.getAnnotationByFqName(StandardNames.FqNames.publishedApi) ?: return reporter.reportOn(annotation.source, FirErrors.NON_INTERNAL_PUBLISHED_API, context) diff --git a/compiler/testData/diagnostics/tests/publishedApi.kt b/compiler/testData/diagnostics/tests/publishedApi.kt index ecbde6372ac..585cb3a6474 100644 --- a/compiler/testData/diagnostics/tests/publishedApi.kt +++ b/compiler/testData/diagnostics/tests/publishedApi.kt @@ -70,3 +70,11 @@ class D @kotlin.PublishedApi constructor() { @kotlin.PublishedApi internal constructor(a: String, b: String, c: String): this() } + +class InConstructor( + @PublishedApi val extensionPoint: Any +) + +class FalsePositiveInConstructor( + @PublishedApi internal val extensionPoint: Any +) diff --git a/compiler/testData/diagnostics/tests/publishedApi.txt b/compiler/testData/diagnostics/tests/publishedApi.txt index 8bbf6e203f1..8c49fba12e1 100644 --- a/compiler/testData/diagnostics/tests/publishedApi.txt +++ b/compiler/testData/diagnostics/tests/publishedApi.txt @@ -52,3 +52,20 @@ public final class E { public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } + +public final class FalsePositiveInConstructor { + public constructor FalsePositiveInConstructor(/*0*/ extensionPoint: kotlin.Any) + @kotlin.PublishedApi internal final val extensionPoint: kotlin.Any + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class InConstructor { + public constructor InConstructor(/*0*/ extensionPoint: kotlin.Any) + @kotlin.PublishedApi public final val extensionPoint: kotlin.Any + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} +