@@ -10,9 +10,11 @@ import org.jetbrains.kotlin.analysis.api.KaSession
10
10
import org.jetbrains.kotlin.analysis.api.components.DefaultTypeClassIds
11
11
import org.jetbrains.kotlin.analysis.api.export.utilities.isClone
12
12
import org.jetbrains.kotlin.analysis.api.symbols.*
13
+ import org.jetbrains.kotlin.analysis.api.symbols.markers.KaAnnotatedSymbol
13
14
import org.jetbrains.kotlin.analysis.api.types.KaType
14
15
import org.jetbrains.kotlin.analysis.api.types.symbol
15
16
import org.jetbrains.kotlin.builtins.StandardNames
17
+ import org.jetbrains.kotlin.name.ClassId
16
18
import org.jetbrains.kotlin.name.FqName
17
19
import org.jetbrains.kotlin.sir.SirVisibility
18
20
import org.jetbrains.kotlin.sir.providers.SirSession
@@ -57,6 +59,9 @@ public class SirVisibilityCheckerImpl(
57
59
if (ktSymbol is KaCallableSymbol && ktSymbol.contextParameters.isNotEmpty()) {
58
60
return SirVisibility .PRIVATE
59
61
}
62
+ if (containsHidesFromObjCAnnotation(ktSymbol)) {
63
+ return SirVisibility .PRIVATE
64
+ }
60
65
val isExported = when (ktSymbol) {
61
66
is KaNamedClassSymbol -> {
62
67
ktSymbol.isExported(ktAnalysisSession) && ! ktSymbol.hasHiddenAncestors(ktAnalysisSession)
@@ -168,4 +173,13 @@ public class SirVisibilityCheckerImpl(
168
173
}
169
174
}
170
175
171
- private val SUPPORTED_SYMBOL_ORIGINS = setOf (KaSymbolOrigin .SOURCE , KaSymbolOrigin .LIBRARY )
176
+ private fun KaSession.containsHidesFromObjCAnnotation (symbol : KaAnnotatedSymbol ): Boolean {
177
+ return symbol.annotations.any { annotation ->
178
+ val annotationClassId = annotation.classId ? : return @any false
179
+ val annotationClassSymbol = findClass(annotationClassId) ? : return @any false
180
+ ClassId .topLevel(FqName (" kotlin.native.HidesFromObjC" )) in annotationClassSymbol.annotations
181
+ }
182
+ }
183
+
184
+
185
+ private val SUPPORTED_SYMBOL_ORIGINS = setOf (KaSymbolOrigin .SOURCE , KaSymbolOrigin .LIBRARY )
0 commit comments