Skip to content

Commit 1f68c94

Browse files
committed
Fix several bugs in serialization of inner generic classes
- Interner was working incorrectly with parents - nested classes were serialized in codegen out of any context #KT-5660 Fixed
1 parent 36c65e4 commit 1f68c94

File tree

14 files changed

+205
-25
lines changed

14 files changed

+205
-25
lines changed

compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,8 @@ protected void generateKotlinAnnotation() {
232232

233233
if (state.getClassBuilderMode() != ClassBuilderMode.FULL) return;
234234

235-
DescriptorSerializer serializer = new DescriptorSerializer(new JavaSerializerExtension(v.getSerializationBindings()));
235+
DescriptorSerializer serializer =
236+
DescriptorSerializer.create(descriptor, new JavaSerializerExtension(v.getSerializationBindings()));
236237

237238
ProtoBuf.Class classProto = serializer.classProto(descriptor).build();
238239

compiler/backend/src/org/jetbrains/jet/codegen/PackageCodegen.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ private void writeKotlinPackageAnnotationIfNeeded(@NotNull JvmSerializationBindi
272272
if (file.isScript()) return;
273273
}
274274

275-
DescriptorSerializer serializer = new DescriptorSerializer(new JavaSerializerExtension(bindings));
275+
DescriptorSerializer serializer = DescriptorSerializer.createTopLevel(new JavaSerializerExtension(bindings));
276276
Collection<PackageFragmentDescriptor> packageFragments = Lists.newArrayList();
277277
ContainerUtil.addIfNotNull(packageFragments, packageFragment);
278278
ContainerUtil.addIfNotNull(packageFragments, compiledPackageFragment);

compiler/builtins-serializer/src/BuiltInsSerializer.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ public class BuiltInsSerializer(val out: PrintStream?) {
110110
// TODO: perform some kind of validation? At the moment not possible because DescriptorValidator is in compiler-tests
111111
// DescriptorValidator.validate(packageView)
112112

113-
val serializer = DescriptorSerializer(SerializerExtension.DEFAULT)
113+
val serializer = DescriptorSerializer.createTopLevel(SerializerExtension.DEFAULT)
114114

115115
val classNames = ArrayList<Name>()
116116
val classifierDescriptors = DescriptorSerializer.sort(packageView.getMemberScope().getDescriptors(DescriptorKindFilter.CLASSIFIERS))
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package test
2+
3+
class A<TA> {
4+
inner class B<TB> {
5+
inner class C<TC> {
6+
inner class D<TD> {
7+
fun <P1, P2, P3, P4> foo(p1: P1, p2: P2, p3: P3, p4: P4): Nothing = null!!
8+
9+
fun bar(ta: TA, tb: TB, tc: TC, td: TD): A<TA>.B<TB>.C<TC>.D<TD> = foo<TA, TB, TC, TD>(ta, tb, tc, td)
10+
}
11+
}
12+
}
13+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package test
2+
3+
internal final class A</*0*/ TA> {
4+
/*primary*/ public constructor A</*0*/ TA>()
5+
6+
internal final inner class B</*0*/ TB> {
7+
/*primary*/ public constructor B</*0*/ TB>()
8+
9+
internal final inner class C</*0*/ TC> {
10+
/*primary*/ public constructor C</*0*/ TC>()
11+
12+
internal final inner class D</*0*/ TD> {
13+
/*primary*/ public constructor D</*0*/ TD>()
14+
internal final fun bar(/*0*/ ta: TA, /*1*/ tb: TB, /*2*/ tc: TC, /*3*/ td: TD): test.A.B.C.D<TD>
15+
internal final fun </*0*/ P1, /*1*/ P2, /*2*/ P3, /*3*/ P4> foo(/*0*/ p1: P1, /*1*/ p2: P2, /*2*/ p3: P3, /*3*/ p4: P4): kotlin.Nothing
16+
}
17+
}
18+
}
19+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package test
2+
3+
class InnerClassReferencesOuterTP<P> {
4+
inner class Inner<Q : P>
5+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package test
2+
3+
internal final class InnerClassReferencesOuterTP</*0*/ P> {
4+
/*primary*/ public constructor InnerClassReferencesOuterTP</*0*/ P>()
5+
6+
internal final inner class Inner</*0*/ Q : P> {
7+
/*primary*/ public constructor Inner</*0*/ Q : P>()
8+
}
9+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package test
2+
3+
class MembersReferenceOuterTP<P> {
4+
inner class Inner {
5+
fun f<Q : P>() {}
6+
fun g(p: P): P = null!!
7+
8+
val v: P = null!!
9+
val <Q : P> w: Q = null!!
10+
}
11+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package test
2+
3+
internal final class MembersReferenceOuterTP</*0*/ P> {
4+
/*primary*/ public constructor MembersReferenceOuterTP</*0*/ P>()
5+
6+
internal final inner class Inner {
7+
/*primary*/ public constructor Inner()
8+
internal final val v: P
9+
internal final fun <get-v>(): P
10+
internal final val </*0*/ Q : P> w: Q
11+
internal final fun <get-w>(): Q
12+
internal final fun </*0*/ Q : P> f(): kotlin.Unit
13+
internal final fun g(/*0*/ p: P): P
14+
}
15+
}

compiler/tests/org/jetbrains/jet/jvm/compiler/LoadJavaTestGenerated.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1801,7 +1801,7 @@ public void testInterfaceWithObjectMethods() throws Exception {
18011801

18021802
@TestMetadata("compiler/testData/loadJava/compiledKotlin")
18031803
@TestDataPath("$PROJECT_ROOT")
1804-
@InnerTestClasses({CompiledKotlin.Annotations.class, CompiledKotlin.Class.class, CompiledKotlin.ClassFun.class, CompiledKotlin.ClassObject.class, CompiledKotlin.Constructor.class, CompiledKotlin.DataClass.class, CompiledKotlin.Enum.class, CompiledKotlin.FromLoadJava.class, CompiledKotlin.Fun.class, CompiledKotlin.Inline.class, CompiledKotlin.MemberOrder.class, CompiledKotlin.PlatformTypes.class, CompiledKotlin.Prop.class, CompiledKotlin.Type.class, CompiledKotlin.Visibility.class})
1804+
@InnerTestClasses({CompiledKotlin.Annotations.class, CompiledKotlin.Class.class, CompiledKotlin.ClassFun.class, CompiledKotlin.ClassObject.class, CompiledKotlin.Constructor.class, CompiledKotlin.DataClass.class, CompiledKotlin.Enum.class, CompiledKotlin.FromLoadJava.class, CompiledKotlin.Fun.class, CompiledKotlin.Inline.class, CompiledKotlin.MemberOrder.class, CompiledKotlin.Nested.class, CompiledKotlin.PlatformTypes.class, CompiledKotlin.Prop.class, CompiledKotlin.Type.class, CompiledKotlin.Visibility.class})
18051805
@RunWith(JUnit3RunnerWithInners.class)
18061806
public static class CompiledKotlin extends AbstractLoadJavaTest {
18071807
public void testAllFilesPresentInCompiledKotlin() throws Exception {
@@ -4176,6 +4176,33 @@ public void testTopLevelCallables() throws Exception {
41764176
}
41774177
}
41784178

4179+
@TestMetadata("compiler/testData/loadJava/compiledKotlin/nested")
4180+
@TestDataPath("$PROJECT_ROOT")
4181+
@RunWith(JUnit3RunnerWithInners.class)
4182+
public static class Nested extends AbstractLoadJavaTest {
4183+
public void testAllFilesPresentInNested() throws Exception {
4184+
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/loadJava/compiledKotlin/nested"), Pattern.compile("^(.+)\\.kt$"), true);
4185+
}
4186+
4187+
@TestMetadata("deepInnerGeneric.kt")
4188+
public void testDeepInnerGeneric() throws Exception {
4189+
String fileName = JetTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/nested/deepInnerGeneric.kt");
4190+
doTestCompiledKotlin(fileName);
4191+
}
4192+
4193+
@TestMetadata("innerClassReferencesOuterTP.kt")
4194+
public void testInnerClassReferencesOuterTP() throws Exception {
4195+
String fileName = JetTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/nested/innerClassReferencesOuterTP.kt");
4196+
doTestCompiledKotlin(fileName);
4197+
}
4198+
4199+
@TestMetadata("membersReferenceOuterTP.kt")
4200+
public void testMembersReferenceOuterTP() throws Exception {
4201+
String fileName = JetTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/nested/membersReferenceOuterTP.kt");
4202+
doTestCompiledKotlin(fileName);
4203+
}
4204+
}
4205+
41794206
@TestMetadata("compiler/testData/loadJava/compiledKotlin/platformTypes")
41804207
@TestDataPath("$PROJECT_ROOT")
41814208
@RunWith(JUnit3RunnerWithInners.class)

compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveRecursiveComparingTestGenerated.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
public class LazyResolveRecursiveComparingTestGenerated extends AbstractLazyResolveRecursiveComparingTest {
3434
@TestMetadata("compiler/testData/loadJava/compiledKotlin")
3535
@TestDataPath("$PROJECT_ROOT")
36-
@InnerTestClasses({CompiledKotlin.Annotations.class, CompiledKotlin.Class.class, CompiledKotlin.ClassFun.class, CompiledKotlin.ClassObject.class, CompiledKotlin.Constructor.class, CompiledKotlin.DataClass.class, CompiledKotlin.Enum.class, CompiledKotlin.FromLoadJava.class, CompiledKotlin.Fun.class, CompiledKotlin.Inline.class, CompiledKotlin.MemberOrder.class, CompiledKotlin.PlatformTypes.class, CompiledKotlin.Prop.class, CompiledKotlin.Type.class, CompiledKotlin.Visibility.class})
36+
@InnerTestClasses({CompiledKotlin.Annotations.class, CompiledKotlin.Class.class, CompiledKotlin.ClassFun.class, CompiledKotlin.ClassObject.class, CompiledKotlin.Constructor.class, CompiledKotlin.DataClass.class, CompiledKotlin.Enum.class, CompiledKotlin.FromLoadJava.class, CompiledKotlin.Fun.class, CompiledKotlin.Inline.class, CompiledKotlin.MemberOrder.class, CompiledKotlin.Nested.class, CompiledKotlin.PlatformTypes.class, CompiledKotlin.Prop.class, CompiledKotlin.Type.class, CompiledKotlin.Visibility.class})
3737
@RunWith(JUnit3RunnerWithInners.class)
3838
public static class CompiledKotlin extends AbstractLazyResolveRecursiveComparingTest {
3939
public void testAllFilesPresentInCompiledKotlin() throws Exception {
@@ -2408,6 +2408,33 @@ public void testTopLevelCallables() throws Exception {
24082408
}
24092409
}
24102410

2411+
@TestMetadata("compiler/testData/loadJava/compiledKotlin/nested")
2412+
@TestDataPath("$PROJECT_ROOT")
2413+
@RunWith(JUnit3RunnerWithInners.class)
2414+
public static class Nested extends AbstractLazyResolveRecursiveComparingTest {
2415+
public void testAllFilesPresentInNested() throws Exception {
2416+
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/loadJava/compiledKotlin/nested"), Pattern.compile("^(.+)\\.kt$"), true);
2417+
}
2418+
2419+
@TestMetadata("deepInnerGeneric.kt")
2420+
public void testDeepInnerGeneric() throws Exception {
2421+
String fileName = JetTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/nested/deepInnerGeneric.kt");
2422+
doTest(fileName);
2423+
}
2424+
2425+
@TestMetadata("innerClassReferencesOuterTP.kt")
2426+
public void testInnerClassReferencesOuterTP() throws Exception {
2427+
String fileName = JetTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/nested/innerClassReferencesOuterTP.kt");
2428+
doTest(fileName);
2429+
}
2430+
2431+
@TestMetadata("membersReferenceOuterTP.kt")
2432+
public void testMembersReferenceOuterTP() throws Exception {
2433+
String fileName = JetTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/nested/membersReferenceOuterTP.kt");
2434+
doTest(fileName);
2435+
}
2436+
}
2437+
24112438
@TestMetadata("compiler/testData/loadJava/compiledKotlin/platformTypes")
24122439
@TestDataPath("$PROJECT_ROOT")
24132440
@RunWith(JUnit3RunnerWithInners.class)

core/serialization/src/org/jetbrains/jet/descriptors/serialization/DescriptorSerializer.java

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,35 @@ public class DescriptorSerializer {
3737
private final Interner<TypeParameterDescriptor> typeParameters;
3838
private final SerializerExtension extension;
3939

40-
public DescriptorSerializer(@NotNull SerializerExtension extension) {
41-
this(new NameTable(), new Interner<TypeParameterDescriptor>(), extension);
42-
}
43-
4440
private DescriptorSerializer(NameTable nameTable, Interner<TypeParameterDescriptor> typeParameters, SerializerExtension extension) {
4541
this.nameTable = nameTable;
4642
this.typeParameters = typeParameters;
4743
this.extension = extension;
4844
}
4945

46+
@NotNull
47+
public static DescriptorSerializer createTopLevel(@NotNull SerializerExtension extension) {
48+
return new DescriptorSerializer(new NameTable(), new Interner<TypeParameterDescriptor>(), extension);
49+
}
50+
51+
@NotNull
52+
public static DescriptorSerializer create(@NotNull ClassDescriptor descriptor, @NotNull SerializerExtension extension) {
53+
DeclarationDescriptor container = descriptor.getContainingDeclaration();
54+
DescriptorSerializer parentSerializer =
55+
container instanceof ClassDescriptor
56+
? create((ClassDescriptor) container, extension)
57+
: createTopLevel(extension);
58+
59+
// Calculate type parameter ids for the outer class beforehand, as it would've had happened if we were always
60+
// serializing outer classes before nested classes.
61+
// Otherwise our interner can get wrong ids because we may serialize classes in any order.
62+
DescriptorSerializer serializer = parentSerializer.createChildSerializer();
63+
for (TypeParameterDescriptor typeParameter : descriptor.getTypeConstructor().getParameters()) {
64+
serializer.typeParameters.intern(typeParameter);
65+
}
66+
return serializer;
67+
}
68+
5069
private DescriptorSerializer createChildSerializer() {
5170
return new DescriptorSerializer(nameTable, new Interner<TypeParameterDescriptor>(typeParameters), extension);
5271
}
@@ -68,16 +87,14 @@ public ProtoBuf.Class.Builder classProto(@NotNull ClassDescriptor classDescripto
6887

6988
builder.setFqName(getClassId(classDescriptor));
7089

71-
DescriptorSerializer local = createChildSerializer();
72-
7390
for (TypeParameterDescriptor typeParameterDescriptor : classDescriptor.getTypeConstructor().getParameters()) {
74-
builder.addTypeParameter(local.typeParameter(typeParameterDescriptor));
91+
builder.addTypeParameter(typeParameter(typeParameterDescriptor));
7592
}
7693

7794
if (!KotlinBuiltIns.getInstance().isSpecialClassWithNoSupertypes(classDescriptor)) {
7895
// Special classes (Any, Nothing) have no supertypes
7996
for (JetType supertype : classDescriptor.getTypeConstructor().getSupertypes()) {
80-
builder.addSupertype(local.type(supertype));
97+
builder.addSupertype(type(supertype));
8198
}
8299
}
83100

@@ -88,7 +105,7 @@ public ProtoBuf.Class.Builder classProto(@NotNull ClassDescriptor classDescripto
88105
}
89106
else {
90107
ProtoBuf.Class.PrimaryConstructor.Builder constructorBuilder = ProtoBuf.Class.PrimaryConstructor.newBuilder();
91-
constructorBuilder.setData(local.callableProto(primaryConstructor));
108+
constructorBuilder.setData(callableProto(primaryConstructor));
92109
builder.setPrimaryConstructor(constructorBuilder);
93110
}
94111
}
@@ -99,7 +116,7 @@ public ProtoBuf.Class.Builder classProto(@NotNull ClassDescriptor classDescripto
99116
if (descriptor instanceof CallableMemberDescriptor) {
100117
CallableMemberDescriptor member = (CallableMemberDescriptor) descriptor;
101118
if (member.getKind() == CallableMemberDescriptor.Kind.FAKE_OVERRIDE) continue;
102-
builder.addMember(local.callableProto(member));
119+
builder.addMember(callableProto(member));
103120
}
104121
}
105122

core/serialization/src/org/jetbrains/jet/descriptors/serialization/Interner.java

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,38 +32,47 @@ public final class Interner<T> {
3232

3333
public Interner(Interner<T> parent, @NotNull TObjectHashingStrategy<T> hashing) {
3434
this.parent = parent;
35-
this.firstIndex = parent == null ? 0 : parent.all.size();
35+
this.firstIndex = parent != null ? parent.all.size() + parent.firstIndex : 0;
3636
this.interned = new TObjectIntHashMap<T>(hashing);
3737
}
3838

3939
public Interner(@NotNull TObjectHashingStrategy<T> hashing) {
4040
this(null, hashing);
4141
}
4242

43+
@SuppressWarnings("unchecked")
4344
public Interner(@Nullable Interner<T> parent) {
44-
//noinspection unchecked
4545
this(parent, TObjectHashingStrategy.CANONICAL);
4646
}
4747

4848
public Interner() {
49-
//noinspection unchecked
50-
this((Interner) null);
49+
this((Interner<T>) null);
5150
}
5251

53-
public int intern(@NotNull T obj) {
54-
assert parent == null || parent.all.size() == firstIndex : "Parent changed in parallel with child: indexes will be wrong";
55-
if (parent != null && parent.interned.contains(obj)) {
56-
return parent.intern(obj);
52+
private int find(@NotNull T obj) {
53+
assert parent == null || parent.all.size() + parent.firstIndex == firstIndex :
54+
"Parent changed in parallel with child: indexes will be wrong";
55+
if (parent != null) {
56+
int index = parent.find(obj);
57+
if (index >= 0) return index;
5758
}
5859
if (interned.contains(obj)) {
5960
return interned.get(obj);
6061
}
61-
int index = firstIndex + interned.size();
62+
return -1;
63+
}
64+
65+
public int intern(@NotNull T obj) {
66+
int index = find(obj);
67+
if (index >= 0) return index;
68+
69+
index = firstIndex + interned.size();
6270
interned.put(obj, index);
6371
all.add(obj);
6472
return index;
6573
}
6674

75+
@NotNull
6776
public List<T> getAllInternedObjects() {
6877
return all;
6978
}

idea/tests/org/jetbrains/jet/plugin/stubs/LazyResolveByStubTestGenerated.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
@SuppressWarnings("all")
3131
@TestMetadata("compiler/testData/loadJava/compiledKotlin")
3232
@TestDataPath("$PROJECT_ROOT")
33-
@InnerTestClasses({LazyResolveByStubTestGenerated.Annotations.class, LazyResolveByStubTestGenerated.Class.class, LazyResolveByStubTestGenerated.ClassFun.class, LazyResolveByStubTestGenerated.ClassObject.class, LazyResolveByStubTestGenerated.Constructor.class, LazyResolveByStubTestGenerated.DataClass.class, LazyResolveByStubTestGenerated.Enum.class, LazyResolveByStubTestGenerated.FromLoadJava.class, LazyResolveByStubTestGenerated.Fun.class, LazyResolveByStubTestGenerated.Inline.class, LazyResolveByStubTestGenerated.MemberOrder.class, LazyResolveByStubTestGenerated.PlatformTypes.class, LazyResolveByStubTestGenerated.Prop.class, LazyResolveByStubTestGenerated.Type.class, LazyResolveByStubTestGenerated.Visibility.class})
33+
@InnerTestClasses({LazyResolveByStubTestGenerated.Annotations.class, LazyResolveByStubTestGenerated.Class.class, LazyResolveByStubTestGenerated.ClassFun.class, LazyResolveByStubTestGenerated.ClassObject.class, LazyResolveByStubTestGenerated.Constructor.class, LazyResolveByStubTestGenerated.DataClass.class, LazyResolveByStubTestGenerated.Enum.class, LazyResolveByStubTestGenerated.FromLoadJava.class, LazyResolveByStubTestGenerated.Fun.class, LazyResolveByStubTestGenerated.Inline.class, LazyResolveByStubTestGenerated.MemberOrder.class, LazyResolveByStubTestGenerated.Nested.class, LazyResolveByStubTestGenerated.PlatformTypes.class, LazyResolveByStubTestGenerated.Prop.class, LazyResolveByStubTestGenerated.Type.class, LazyResolveByStubTestGenerated.Visibility.class})
3434
@RunWith(JUnit3RunnerWithInners.class)
3535
public class LazyResolveByStubTestGenerated extends AbstractLazyResolveByStubTest {
3636
public void testAllFilesPresentInCompiledKotlin() throws Exception {
@@ -2405,6 +2405,33 @@ public void testTopLevelCallables() throws Exception {
24052405
}
24062406
}
24072407

2408+
@TestMetadata("compiler/testData/loadJava/compiledKotlin/nested")
2409+
@TestDataPath("$PROJECT_ROOT")
2410+
@RunWith(JUnit3RunnerWithInners.class)
2411+
public static class Nested extends AbstractLazyResolveByStubTest {
2412+
public void testAllFilesPresentInNested() throws Exception {
2413+
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/loadJava/compiledKotlin/nested"), Pattern.compile("^(.+)\\.kt$"), true);
2414+
}
2415+
2416+
@TestMetadata("deepInnerGeneric.kt")
2417+
public void testDeepInnerGeneric() throws Exception {
2418+
String fileName = JetTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/nested/deepInnerGeneric.kt");
2419+
doTest(fileName);
2420+
}
2421+
2422+
@TestMetadata("innerClassReferencesOuterTP.kt")
2423+
public void testInnerClassReferencesOuterTP() throws Exception {
2424+
String fileName = JetTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/nested/innerClassReferencesOuterTP.kt");
2425+
doTest(fileName);
2426+
}
2427+
2428+
@TestMetadata("membersReferenceOuterTP.kt")
2429+
public void testMembersReferenceOuterTP() throws Exception {
2430+
String fileName = JetTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/nested/membersReferenceOuterTP.kt");
2431+
doTest(fileName);
2432+
}
2433+
}
2434+
24082435
@TestMetadata("compiler/testData/loadJava/compiledKotlin/platformTypes")
24092436
@TestDataPath("$PROJECT_ROOT")
24102437
@RunWith(JUnit3RunnerWithInners.class)

0 commit comments

Comments
 (0)