diff --git a/src/Xamarin.Android.Tools.Bytecode/Kotlin/KotlinFixups.cs b/src/Xamarin.Android.Tools.Bytecode/Kotlin/KotlinFixups.cs index 60c4b8fa4..3ae27ebf2 100644 --- a/src/Xamarin.Android.Tools.Bytecode/Kotlin/KotlinFixups.cs +++ b/src/Xamarin.Android.Tools.Bytecode/Kotlin/KotlinFixups.cs @@ -30,7 +30,7 @@ public static void Fixup (IList classes) var class_metadata = (metadata as KotlinClass); if (class_metadata != null) { - FixupClassVisibility (c, class_metadata, classes); + FixupClassVisibility (c, class_metadata); if (!c.AccessFlags.IsPubliclyVisible ()) continue; @@ -62,7 +62,7 @@ public static void Fixup (IList classes) } } - static void FixupClassVisibility (ClassFile klass, KotlinClass metadata, IList classes) + static void FixupClassVisibility (ClassFile klass, KotlinClass metadata) { // Hide class if it isn't Public/Protected if (klass.AccessFlags.IsPubliclyVisible () && !metadata.Visibility.IsPubliclyVisible ()) { @@ -83,33 +83,15 @@ static void FixupClassVisibility (ClassFile klass, KotlinClass metadata, IList classes) - { - var existing = klass.InnerClassAccessFlags; - - klass.InnerClassAccessFlags = SetVisibility (existing, ClassAccessFlags.Private); - Log.Debug ($"Kotlin: Hiding nested internal type {klass.InnerClass.Name.Value}"); - - // Setting the inner class access flags above doesn't technically do anything, because we output - // from the inner class's ClassFile, so we need to find that and set it there. - var kf = classes.FirstOrDefault (c => c.ThisClass.Name.Value == klass.InnerClass.Name.Value); - - if (kf != null) { - kf.AccessFlags = SetVisibility (kf.AccessFlags, ClassAccessFlags.Private); - kf.InnerClass.InnerClassAccessFlags = SetVisibility (kf.InnerClass.InnerClassAccessFlags, ClassAccessFlags.Private); - - foreach (var inner_class in kf.InnerClasses.Where (c => c.OuterClass.Name.Value == kf.ThisClass.Name.Value)) - HideInternalInnerClass (inner_class, classes); - } - } - // Passing null for 'newVisibility' parameter means 'package-private' static ClassAccessFlags SetVisibility (ClassAccessFlags existing, ClassAccessFlags? newVisibility) { diff --git a/tests/Xamarin.Android.Tools.Bytecode-Tests/KotlinFixupsTests.cs b/tests/Xamarin.Android.Tools.Bytecode-Tests/KotlinFixupsTests.cs index d8d7396dd..39841abe2 100644 --- a/tests/Xamarin.Android.Tools.Bytecode-Tests/KotlinFixupsTests.cs +++ b/tests/Xamarin.Android.Tools.Bytecode-Tests/KotlinFixupsTests.cs @@ -310,24 +310,5 @@ public void HandleKotlinNameShadowing () Assert.True (klass.Methods.Single (m => m.Name == "hitCount").AccessFlags.HasFlag (MethodAccessFlags.Public)); Assert.True (klass.Methods.Single (m => m.Name == "setType").AccessFlags.HasFlag (MethodAccessFlags.Public)); } - - [Test] - public void HidePublicInterfaceInInternalClass () - { - var klass = LoadClassFile ("InternalClassWithNestedInterface.class"); - var inner_interface = LoadClassFile ("InternalClassWithNestedInterface$NestedInterface.class"); - var inner_inner_interface = LoadClassFile ("InternalClassWithNestedInterface$NestedInterface$DoubleNestedInterface.class"); - - KotlinFixups.Fixup (new [] { klass, inner_interface, inner_inner_interface }); - - var output = new XmlClassDeclarationBuilder (klass).ToXElement ().ToString (); - Assert.True (output.Contains ("visibility=\"public\"")); - - var output2 = new XmlClassDeclarationBuilder (inner_interface).ToXElement ().ToString (); - Assert.True (output2.Contains ("visibility=\"private\"")); - - var output3 = new XmlClassDeclarationBuilder (inner_inner_interface).ToXElement ().ToString (); - Assert.True (output3.Contains ("visibility=\"private\"")); - } } } diff --git a/tests/Xamarin.Android.Tools.Bytecode-Tests/kotlin/InternalClassWithNestedInterface$NestedInterface$DoubleNestedInterface.class b/tests/Xamarin.Android.Tools.Bytecode-Tests/kotlin/InternalClassWithNestedInterface$NestedInterface$DoubleNestedInterface.class deleted file mode 100644 index e27a40add..000000000 Binary files a/tests/Xamarin.Android.Tools.Bytecode-Tests/kotlin/InternalClassWithNestedInterface$NestedInterface$DoubleNestedInterface.class and /dev/null differ diff --git a/tests/Xamarin.Android.Tools.Bytecode-Tests/kotlin/InternalClassWithNestedInterface$NestedInterface.class b/tests/Xamarin.Android.Tools.Bytecode-Tests/kotlin/InternalClassWithNestedInterface$NestedInterface.class deleted file mode 100644 index ad2e8205b..000000000 Binary files a/tests/Xamarin.Android.Tools.Bytecode-Tests/kotlin/InternalClassWithNestedInterface$NestedInterface.class and /dev/null differ diff --git a/tests/Xamarin.Android.Tools.Bytecode-Tests/kotlin/InternalClassWithNestedInterface.class b/tests/Xamarin.Android.Tools.Bytecode-Tests/kotlin/InternalClassWithNestedInterface.class deleted file mode 100644 index acfd9bfce..000000000 Binary files a/tests/Xamarin.Android.Tools.Bytecode-Tests/kotlin/InternalClassWithNestedInterface.class and /dev/null differ diff --git a/tests/Xamarin.Android.Tools.Bytecode-Tests/kotlin/InternalClassWithNestedInterface.kt b/tests/Xamarin.Android.Tools.Bytecode-Tests/kotlin/InternalClassWithNestedInterface.kt deleted file mode 100644 index a2af30e09..000000000 --- a/tests/Xamarin.Android.Tools.Bytecode-Tests/kotlin/InternalClassWithNestedInterface.kt +++ /dev/null @@ -1,5 +0,0 @@ -internal class InternalClassWithNestedInterface { -public interface NestedInterface { -public interface DoubleNestedInterface -} -} \ No newline at end of file