Do not consider protected members in final class as public API

This commit is contained in:
Ilya Gorbunov
2016-03-23 22:27:43 +03:00
parent 4e250e4dd1
commit f2cb5edf1a
6 changed files with 6 additions and 33 deletions
@@ -59,7 +59,11 @@ fun List<ClassBinarySignature>.filterOutNonPublic(): List<ClassBinarySignature>
val classByName = associateBy { it.name } val classByName = associateBy { it.name }
fun ClassBinarySignature.isPublicAndAccessible(): Boolean = fun ClassBinarySignature.isPublicAndAccessible(): Boolean =
isEffectivelyPublic && (outerName == null || classByName[outerName]?.isPublicAndAccessible() ?: true) isEffectivelyPublic &&
(outerName == null || classByName[outerName]?.let { outerClass ->
!(this.access.isProtected && outerClass.access.isFinal)
&& outerClass.isPublicAndAccessible()
} ?: true)
fun supertypes(superName: String) = generateSequence({ classByName[superName] }, { classByName[it.superName] }) fun supertypes(superName: String) = generateSequence({ classByName[superName] }, { classByName[it.superName] })
@@ -36,7 +36,7 @@ interface MemberBinarySignature {
val isInlineExposed: Boolean val isInlineExposed: Boolean
fun isEffectivelyPublic(classAccess: AccessFlags, classVisibility: ClassVisibility?) fun isEffectivelyPublic(classAccess: AccessFlags, classVisibility: ClassVisibility?)
= access.isPublic // && !(access.isProtected && classAccess.isFinal) = access.isPublic && !(access.isProtected && classAccess.isFinal)
&& (classVisibility?.members?.get(MemberSignature(name, desc))?.isPublic(isInlineExposed) ?: true) && (classVisibility?.members?.get(MemberSignature(name, desc))?.isPublic(isInlineExposed) ?: true)
val signature: String val signature: String
@@ -41,9 +41,6 @@ public static final field Companion Lcases/companions/PublicClasses$ProtectedCom
public fun <init> ()V public fun <init> ()V
------------------ ------------------
protected final class cases/companions/PublicClasses$ProtectedCompanion$Companion
------------------
public final class cases/companions/PublicClasses$PublicCompanion public final class cases/companions/PublicClasses$PublicCompanion
public static final field Companion Lcases/companions/PublicClasses$PublicCompanion$Companion; public static final field Companion Lcases/companions/PublicClasses$PublicCompanion$Companion;
public fun <init> ()V public fun <init> ()V
@@ -21,21 +21,10 @@ public final class cases/nestedClasses/PublicClass
public fun <init> ()V public fun <init> ()V
------------------ ------------------
protected final class cases/nestedClasses/PublicClass$InnerProtected
public fun <init> (Lcases/nestedClasses/PublicClass;)V
------------------
public final class cases/nestedClasses/PublicClass$InnerPublic public final class cases/nestedClasses/PublicClass$InnerPublic
public fun <init> (Lcases/nestedClasses/PublicClass;)V public fun <init> (Lcases/nestedClasses/PublicClass;)V
------------------ ------------------
protected final class cases/nestedClasses/PublicClass$NestedProtected
public fun <init> ()V
------------------
protected abstract interface class cases/nestedClasses/PublicClass$NestedProtectedInterface
------------------
public final class cases/nestedClasses/PublicClass$NestedPublic public final class cases/nestedClasses/PublicClass$NestedPublic
public fun <init> ()V public fun <init> ()V
------------------ ------------------
@@ -43,10 +32,6 @@ public fun <init> ()V
public abstract interface class cases/nestedClasses/PublicClass$NestedPublicInterface public abstract interface class cases/nestedClasses/PublicClass$NestedPublicInterface
------------------ ------------------
protected final class cases/nestedClasses/PublicClass$ObjProtected
public static final field INSTANCE Lcases/nestedClasses/PublicClass$ObjProtected;
------------------
public final class cases/nestedClasses/PublicClass$ObjPublic public final class cases/nestedClasses/PublicClass$ObjPublic
public static final field INSTANCE Lcases/nestedClasses/PublicClass$ObjPublic; public static final field INSTANCE Lcases/nestedClasses/PublicClass$ObjPublic;
------------------ ------------------
@@ -7,11 +7,6 @@ protected abstract fun setProtectedVar (Ljava/lang/Object;)V
------------------ ------------------
public final class cases/protected/PublicFinalClass public final class cases/protected/PublicFinalClass
protected fun <init> ()V
protected final fun getProtectedVal ()I
protected final fun getProtectedVar ()I
protected final fun protectedFun ()I
protected final fun setProtectedVar (I)V
------------------ ------------------
public class cases/protected/PublicOpenClass public class cases/protected/PublicOpenClass
@@ -349,7 +349,6 @@ public final class kotlin/jvm/internal/BooleanSpreadBuilder: kotlin/jvm/internal
public fun <init> (I)V public fun <init> (I)V
public final fun add (Z)V public final fun add (Z)V
public synthetic fun getSize (Ljava/lang/Object;)I public synthetic fun getSize (Ljava/lang/Object;)I
protected fun getSize ([Z)I
public final fun toArray ()[Z public final fun toArray ()[Z
------------------ ------------------
@@ -357,7 +356,6 @@ public final class kotlin/jvm/internal/ByteSpreadBuilder: kotlin/jvm/internal/Pr
public fun <init> (I)V public fun <init> (I)V
public final fun add (B)V public final fun add (B)V
public synthetic fun getSize (Ljava/lang/Object;)I public synthetic fun getSize (Ljava/lang/Object;)I
protected fun getSize ([B)I
public final fun toArray ()[B public final fun toArray ()[B
------------------ ------------------
@@ -381,7 +379,6 @@ public final class kotlin/jvm/internal/CharSpreadBuilder: kotlin/jvm/internal/Pr
public fun <init> (I)V public fun <init> (I)V
public final fun add (C)V public final fun add (C)V
public synthetic fun getSize (Ljava/lang/Object;)I public synthetic fun getSize (Ljava/lang/Object;)I
protected fun getSize ([C)I
public final fun toArray ()[C public final fun toArray ()[C
------------------ ------------------
@@ -413,7 +410,6 @@ public final class kotlin/jvm/internal/DoubleSpreadBuilder: kotlin/jvm/internal/
public fun <init> (I)V public fun <init> (I)V
public final fun add (D)V public final fun add (D)V
public synthetic fun getSize (Ljava/lang/Object;)I public synthetic fun getSize (Ljava/lang/Object;)I
protected fun getSize ([D)I
public final fun toArray ()[D public final fun toArray ()[D
------------------ ------------------
@@ -421,7 +417,6 @@ public final class kotlin/jvm/internal/FloatSpreadBuilder: kotlin/jvm/internal/P
public fun <init> (I)V public fun <init> (I)V
public final fun add (F)V public final fun add (F)V
public synthetic fun getSize (Ljava/lang/Object;)I public synthetic fun getSize (Ljava/lang/Object;)I
protected fun getSize ([F)I
public final fun toArray ()[F public final fun toArray ()[F
------------------ ------------------
@@ -492,7 +487,6 @@ public final class kotlin/jvm/internal/IntSpreadBuilder: kotlin/jvm/internal/Pri
public fun <init> (I)V public fun <init> (I)V
public final fun add (I)V public final fun add (I)V
public synthetic fun getSize (Ljava/lang/Object;)I public synthetic fun getSize (Ljava/lang/Object;)I
protected fun getSize ([I)I
public final fun toArray ()[I public final fun toArray ()[I
------------------ ------------------
@@ -541,7 +535,6 @@ public final class kotlin/jvm/internal/LongSpreadBuilder: kotlin/jvm/internal/Pr
public fun <init> (I)V public fun <init> (I)V
public final fun add (J)V public final fun add (J)V
public synthetic fun getSize (Ljava/lang/Object;)I public synthetic fun getSize (Ljava/lang/Object;)I
protected fun getSize ([J)I
public final fun toArray ()[J public final fun toArray ()[J
------------------ ------------------
@@ -833,7 +826,6 @@ public final class kotlin/jvm/internal/ShortSpreadBuilder: kotlin/jvm/internal/P
public fun <init> (I)V public fun <init> (I)V
public final fun add (S)V public final fun add (S)V
public synthetic fun getSize (Ljava/lang/Object;)I public synthetic fun getSize (Ljava/lang/Object;)I
protected fun getSize ([S)I
public final fun toArray ()[S public final fun toArray ()[S
------------------ ------------------