Skip to content

Commit 817c8e7

Browse files
committed
Revert "[Xamarin.Android.Tools.Bytecode] hide Kotlin internal nested types (#827)"
This reverts commit 4ef5081.
1 parent 95c9b79 commit 817c8e7

File tree

6 files changed

+6
-48
lines changed

6 files changed

+6
-48
lines changed

src/Xamarin.Android.Tools.Bytecode/Kotlin/KotlinFixups.cs

Lines changed: 6 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public static void Fixup (IList<ClassFile> classes)
3030
var class_metadata = (metadata as KotlinClass);
3131

3232
if (class_metadata != null) {
33-
FixupClassVisibility (c, class_metadata, classes);
33+
FixupClassVisibility (c, class_metadata);
3434

3535
if (!c.AccessFlags.IsPubliclyVisible ())
3636
continue;
@@ -62,7 +62,7 @@ public static void Fixup (IList<ClassFile> classes)
6262
}
6363
}
6464

65-
static void FixupClassVisibility (ClassFile klass, KotlinClass metadata, IList<ClassFile> classes)
65+
static void FixupClassVisibility (ClassFile klass, KotlinClass metadata)
6666
{
6767
// Hide class if it isn't Public/Protected
6868
if (klass.AccessFlags.IsPubliclyVisible () && !metadata.Visibility.IsPubliclyVisible ()) {
@@ -83,33 +83,15 @@ static void FixupClassVisibility (ClassFile klass, KotlinClass metadata, IList<C
8383
Log.Debug ($"Kotlin: Hiding internal class {klass.ThisClass.Name.Value}");
8484
klass.AccessFlags = SetVisibility (klass.AccessFlags, ClassAccessFlags.Private);
8585

86-
foreach (var ic in klass.InnerClasses)
87-
HideInternalInnerClass (ic, classes);
86+
foreach (var ic in klass.InnerClasses) {
87+
Log.Debug ($"Kotlin: Hiding nested internal type {ic.InnerClass.Name.Value}");
88+
ic.InnerClassAccessFlags = SetVisibility (ic.InnerClassAccessFlags, ClassAccessFlags.Private);
89+
}
8890

8991
return;
9092
}
9193
}
9294

93-
static void HideInternalInnerClass (InnerClassInfo klass, IList<ClassFile> classes)
94-
{
95-
var existing = klass.InnerClassAccessFlags;
96-
97-
klass.InnerClassAccessFlags = SetVisibility (existing, ClassAccessFlags.Private);
98-
Log.Debug ($"Kotlin: Hiding nested internal type {klass.InnerClass.Name.Value}");
99-
100-
// Setting the inner class access flags above doesn't technically do anything, because we output
101-
// from the inner class's ClassFile, so we need to find that and set it there.
102-
var kf = classes.FirstOrDefault (c => c.ThisClass.Name.Value == klass.InnerClass.Name.Value);
103-
104-
if (kf != null) {
105-
kf.AccessFlags = SetVisibility (kf.AccessFlags, ClassAccessFlags.Private);
106-
kf.InnerClass.InnerClassAccessFlags = SetVisibility (kf.InnerClass.InnerClassAccessFlags, ClassAccessFlags.Private);
107-
108-
foreach (var inner_class in kf.InnerClasses.Where (c => c.OuterClass.Name.Value == kf.ThisClass.Name.Value))
109-
HideInternalInnerClass (inner_class, classes);
110-
}
111-
}
112-
11395
// Passing null for 'newVisibility' parameter means 'package-private'
11496
static ClassAccessFlags SetVisibility (ClassAccessFlags existing, ClassAccessFlags? newVisibility)
11597
{

tests/Xamarin.Android.Tools.Bytecode-Tests/KotlinFixupsTests.cs

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -310,24 +310,5 @@ public void HandleKotlinNameShadowing ()
310310
Assert.True (klass.Methods.Single (m => m.Name == "hitCount").AccessFlags.HasFlag (MethodAccessFlags.Public));
311311
Assert.True (klass.Methods.Single (m => m.Name == "setType").AccessFlags.HasFlag (MethodAccessFlags.Public));
312312
}
313-
314-
[Test]
315-
public void HidePublicInterfaceInInternalClass ()
316-
{
317-
var klass = LoadClassFile ("InternalClassWithNestedInterface.class");
318-
var inner_interface = LoadClassFile ("InternalClassWithNestedInterface$NestedInterface.class");
319-
var inner_inner_interface = LoadClassFile ("InternalClassWithNestedInterface$NestedInterface$DoubleNestedInterface.class");
320-
321-
KotlinFixups.Fixup (new [] { klass, inner_interface, inner_inner_interface });
322-
323-
var output = new XmlClassDeclarationBuilder (klass).ToXElement ().ToString ();
324-
Assert.True (output.Contains ("visibility=\"public\""));
325-
326-
var output2 = new XmlClassDeclarationBuilder (inner_interface).ToXElement ().ToString ();
327-
Assert.True (output2.Contains ("visibility=\"private\""));
328-
329-
var output3 = new XmlClassDeclarationBuilder (inner_inner_interface).ToXElement ().ToString ();
330-
Assert.True (output3.Contains ("visibility=\"private\""));
331-
}
332313
}
333314
}

tests/Xamarin.Android.Tools.Bytecode-Tests/kotlin/InternalClassWithNestedInterface.kt

Lines changed: 0 additions & 5 deletions
This file was deleted.

0 commit comments

Comments
 (0)