Skip to content

Commit f90cbf3

Browse files
elevenetcSpace Team
authored andcommitted
[ObjCExport] Fix visibility of private companion
^KT-79767 Fixed
1 parent e454a4f commit f90cbf3

File tree

5 files changed

+45
-2
lines changed

5 files changed

+45
-2
lines changed

native/objcexport-header-generator/impl/analysis-api/src/org/jetbrains/kotlin/objcexport/needsCompanionProperty.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,18 @@
66
package org.jetbrains.kotlin.objcexport
77

88
import org.jetbrains.kotlin.analysis.api.KaSession
9+
import org.jetbrains.kotlin.analysis.api.export.utilities.isCompanion
910
import org.jetbrains.kotlin.analysis.api.symbols.KaClassSymbol
1011
import org.jetbrains.kotlin.analysis.api.symbols.KaClassifierSymbol
11-
import org.jetbrains.kotlin.analysis.api.export.utilities.isCompanion
12+
import org.jetbrains.kotlin.objcexport.analysisApiUtils.isVisibleInObjC
1213

1314
/**
1415
* [org.jetbrains.kotlin.backend.konan.objcexport.ObjCExportTranslator.needCompanionObjectProperty]
1516
*/
1617
internal fun KaSession.hasCompanionObject(symbol: KaClassSymbol): Boolean = getCompanion(symbol) != null
1718

19+
internal fun KaSession.hasVisibleCompanionObject(symbol: KaClassSymbol): Boolean =
20+
getCompanion(symbol) != null && isVisibleInObjC(getCompanion(symbol))
21+
1822
internal fun KaSession.getCompanion(symbol: KaClassSymbol): KaClassifierSymbol? =
1923
symbol.staticMemberScope.classifiers.toList().firstOrNull { (it as? KaClassSymbol)?.isCompanion == true }

native/objcexport-header-generator/impl/analysis-api/src/org/jetbrains/kotlin/objcexport/translateToObjCClass.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ fun ObjCExportContext.translateToObjCClass(symbol: KaClassSymbol): ObjCClass? =
4242
/* The order of members tries to replicate the K1 implementation explicitly */
4343
this += translateToObjCConstructors(symbol)
4444

45-
if (symbol.isCompanion || analysisSession.hasCompanionObject(symbol)) {
45+
if (symbol.isCompanion || analysisSession.hasVisibleCompanionObject(symbol)) {
4646
this += buildCompanionProperty(symbol)
4747
}
4848

native/objcexport-header-generator/test/org/jetbrains/kotlin/backend/konan/tests/ObjCExportHeaderGeneratorTest.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -670,6 +670,11 @@ class ObjCExportHeaderGeneratorTest(private val generator: HeaderGenerator) {
670670
doTest(headersTestDataDir.resolve("propertyGetter"))
671671
}
672672

673+
@Test
674+
fun `test - private companion`() {
675+
doTest(headersTestDataDir.resolve("privateCompanion"))
676+
}
677+
673678
@Test
674679
fun `test - extensions mangling`() {
675680
doTest(headersTestDataDir.resolve("extensionsMangling"))
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#import <Foundation/NSArray.h>
2+
#import <Foundation/NSDictionary.h>
3+
#import <Foundation/NSError.h>
4+
#import <Foundation/NSObject.h>
5+
#import <Foundation/NSSet.h>
6+
#import <Foundation/NSString.h>
7+
#import <Foundation/NSValue.h>
8+
9+
NS_ASSUME_NONNULL_BEGIN
10+
#pragma clang diagnostic push
11+
#pragma clang diagnostic ignored "-Wunknown-warning-option"
12+
#pragma clang diagnostic ignored "-Wincompatible-property-type"
13+
#pragma clang diagnostic ignored "-Wnullability"
14+
15+
#pragma push_macro("_Nullable_result")
16+
#if !__has_feature(nullability_nullable_result)
17+
#undef _Nullable_result
18+
#define _Nullable_result _Nullable
19+
#endif
20+
21+
__attribute__((objc_subclassing_restricted))
22+
@interface Foo : Base
23+
- (instancetype)init __attribute__((swift_name("init()"))) __attribute__((objc_designated_initializer));
24+
+ (instancetype)new __attribute__((availability(swift, unavailable, message="use object initializers instead")));
25+
@end
26+
27+
#pragma pop_macro("_Nullable_result")
28+
#pragma clang diagnostic pop
29+
NS_ASSUME_NONNULL_END
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class Foo {
2+
private companion object {
3+
const val bar = 42
4+
}
5+
}

0 commit comments

Comments
 (0)