From e15e87fdedce82c908a1a187cae3fa558b769caf Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 20 Aug 2020 09:59:28 +0300 Subject: [PATCH] [FIR] Expand aliased type before checking for exposure --- .../testData/resolve/visibility/exposedTypeAlias.kt | 6 +++++- .../testData/resolve/visibility/exposedTypeAlias.txt | 4 ++++ .../declaration/FirExposedVisibilityDeclarationChecker.kt | 3 ++- .../tests/typealias/exposedExpandedType.fir.kt | 8 ++++---- 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/compiler/fir/analysis-tests/testData/resolve/visibility/exposedTypeAlias.kt b/compiler/fir/analysis-tests/testData/resolve/visibility/exposedTypeAlias.kt index 947d5256c05..4296207e024 100644 --- a/compiler/fir/analysis-tests/testData/resolve/visibility/exposedTypeAlias.kt +++ b/compiler/fir/analysis-tests/testData/resolve/visibility/exposedTypeAlias.kt @@ -11,4 +11,8 @@ class C { } typealias AInner0 = A.Inner -typealias BInner0 = B.Inner \ No newline at end of file +typealias BInner0 = B.Inner + +private typealias MyString = String + +fun foo(): MyString = "" \ No newline at end of file diff --git a/compiler/fir/analysis-tests/testData/resolve/visibility/exposedTypeAlias.txt b/compiler/fir/analysis-tests/testData/resolve/visibility/exposedTypeAlias.txt index cface716785..f59921d478f 100644 --- a/compiler/fir/analysis-tests/testData/resolve/visibility/exposedTypeAlias.txt +++ b/compiler/fir/analysis-tests/testData/resolve/visibility/exposedTypeAlias.txt @@ -37,3 +37,7 @@ FILE: exposedTypeAlias.kt } public final typealias AInner0 = R|A.Inner| public final typealias BInner0 = R|B.Inner| + private final typealias MyString = R|kotlin/String| + public final fun foo(): R|MyString| { + ^foo String() + } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExposedVisibilityDeclarationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExposedVisibilityDeclarationChecker.kt index 073299f960c..8655e30c36f 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExposedVisibilityDeclarationChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExposedVisibilityDeclarationChecker.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticFactory3 import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors import org.jetbrains.kotlin.fir.declarations.* +import org.jetbrains.kotlin.fir.resolve.fullyExpandedType import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.lexer.KtTokens @@ -184,7 +185,7 @@ object FirExposedVisibilityDeclarationChecker : FirMemberDeclarationChecker() { base: FirEffectiveVisibility ): FirMemberDeclaration? { val type = this as? ConeClassLikeType ?: return null - val fir = type.lookupTag.toSymbol(context.session)?.fir ?: return null + val fir = type.fullyExpandedType(context.session).lookupTag.toSymbol(context.session)?.fir ?: return null if (fir is FirMemberDeclaration) { when (fir.getEffectiveVisibility(context).relation(base)) { diff --git a/compiler/testData/diagnostics/tests/typealias/exposedExpandedType.fir.kt b/compiler/testData/diagnostics/tests/typealias/exposedExpandedType.fir.kt index ce21d1ece59..b84ce5d45c7 100644 --- a/compiler/testData/diagnostics/tests/typealias/exposedExpandedType.fir.kt +++ b/compiler/testData/diagnostics/tests/typealias/exposedExpandedType.fir.kt @@ -12,7 +12,7 @@ class Outer { internal typealias TestPrivate3 = Private private typealias TestPrivate4 = Private typealias TestPrivate5 = L - typealias TestPrivate6 = L + typealias TestPrivate6 = L typealias TestProtected1 = Protected protected typealias TestProtected2 = Protected @@ -26,7 +26,7 @@ class Outer { internal typealias TestInternal3 = Internal private typealias TestInternal4 = Internal typealias TestInternal5 = L - typealias TestInternal6 = L + typealias TestInternal6 = L } private class Private @@ -36,10 +36,10 @@ typealias TestPrivate1 = Private internal typealias TestPrivate2 = Private private typealias TestPrivate3 = Private typealias TestPrivate4 = L -typealias TestPrivate5 = L +typealias TestPrivate5 = L typealias TestInternal1 = Internal internal typealias TestInternal2 = Internal private typealias TestInternal3 = Internal typealias TestInternal4 = L -typealias TestInternal5 = L +typealias TestInternal5 = L