KT-5087 Private members of Java classes should be marked as invisible, not unresolved

#KT-5087 fixed
This commit is contained in:
Evgeny Gerashchenko
2014-06-16 21:34:13 +04:00
parent cf5fe672de
commit 7fdd4a339e
13 changed files with 125 additions and 8 deletions
@@ -0,0 +1,30 @@
package test;
public class PrivateMembers {
private PrivateMembers() {
}
private int field = 1;
private static int staticField = 2;
private void method() {
}
private void samAdapter(SamInterface r) {
}
private static void staticMethod() {
}
private class Inner {
}
private interface SamInterface {
void foo();
}
private static class Nested {
private static void staticMethodInNested() {
}
}
}
@@ -0,0 +1,31 @@
package test
public open class PrivateMembers : java.lang.Object {
private constructor PrivateMembers()
private final var field: kotlin.Int
private open fun method(): kotlin.Unit
private final /*synthesized*/ fun samAdapter(/*0*/ p0: (() -> kotlin.Unit)?): kotlin.Unit
private open fun samAdapter(/*0*/ p0: test.PrivateMembers.SamInterface?): kotlin.Unit
private open inner class Inner : java.lang.Object {
private constructor Inner()
}
private open class Nested : java.lang.Object {
private constructor Nested()
}
private trait SamInterface : java.lang.Object {
public abstract fun foo(): kotlin.Unit
}
}
package test.PrivateMembers {
private var staticField: kotlin.Int
private /*synthesized*/ fun SamInterface(/*0*/ function: () -> kotlin.Unit): test.PrivateMembers.SamInterface
private open fun staticMethod(): kotlin.Unit
package test.PrivateMembers.Nested {
private open fun staticMethodInNested(): kotlin.Unit
}
}
@@ -0,0 +1,19 @@
package test;
public class PrivateMembersInHierarchy {
public static class Super {
private int field = 1;
private int field2 = 1;
private void method() {
}
}
public static class Sub extends Super {
private int field = 1;
private void method() {
}
}
}
@@ -0,0 +1,19 @@
package test
public open class PrivateMembersInHierarchy : java.lang.Object {
public constructor PrivateMembersInHierarchy()
public open class Sub : test.PrivateMembersInHierarchy.Super {
public constructor Sub()
private final var field: kotlin.Int
invisible_fake final override /*1*/ /*fake_override*/ var field2: kotlin.Int
private open fun method(): kotlin.Unit
}
public open class Super : java.lang.Object {
public constructor Super()
private final var field: kotlin.Int
private final var field2: kotlin.Int
private open fun method(): kotlin.Unit
}
}
@@ -2,9 +2,12 @@ package test
public abstract class ClassDoesNotOverrideMethod : java.util.Date {
public constructor ClassDoesNotOverrideMethod()
invisible_fake final override /*1*/ /*fake_override*/ var cdate: sun.util.calendar.BaseCalendar.Date?
invisible_fake final override /*1*/ /*fake_override*/ var fastTime: kotlin.Long
public open override /*1*/ /*fake_override*/ fun after(/*0*/ p0: java.util.Date): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun before(/*0*/ p0: java.util.Date): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: java.util.Date): kotlin.Int
invisible_fake final override /*1*/ /*fake_override*/ fun getCalendarDate(): sun.util.calendar.BaseCalendar.Date?
kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun getDate(): kotlin.Int
kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun getDay(): kotlin.Int
kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun getHours(): kotlin.Int
@@ -12,8 +15,12 @@ public abstract class ClassDoesNotOverrideMethod : java.util.Date {
kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun getMonth(): kotlin.Int
kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun getSeconds(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun getTime(): kotlin.Long
invisible_fake final override /*1*/ /*fake_override*/ fun getTimeImpl(): kotlin.Long
kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun getTimezoneOffset(): kotlin.Int
kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun getYear(): kotlin.Int
invisible_fake final override /*1*/ /*fake_override*/ fun normalize(): sun.util.calendar.BaseCalendar.Date?
invisible_fake final override /*1*/ /*fake_override*/ fun normalize(/*0*/ p0: sun.util.calendar.BaseCalendar.Date?): sun.util.calendar.BaseCalendar.Date?
invisible_fake open override /*1*/ /*fake_override*/ fun readObject(/*0*/ p0: java.io.ObjectInputStream?): kotlin.Unit
kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun setDate(/*0*/ p0: kotlin.Int): kotlin.Unit
kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun setHours(/*0*/ p0: kotlin.Int): kotlin.Unit
kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun setMinutes(/*0*/ p0: kotlin.Int): kotlin.Unit
@@ -23,4 +30,5 @@ public abstract class ClassDoesNotOverrideMethod : java.util.Date {
kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun setYear(/*0*/ p0: kotlin.Int): kotlin.Unit
kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun toGMTString(): kotlin.String
kotlin.deprecated(value = "Deprecated in Java": kotlin.String) public open override /*1*/ /*fake_override*/ fun toLocaleString(): kotlin.String
invisible_fake open override /*1*/ /*fake_override*/ fun writeObject(/*0*/ p0: java.io.ObjectOutputStream?): kotlin.Unit
}
@@ -17,6 +17,8 @@ public open class ModalityOfFakeOverrides : java.util.AbstractList<kotlin.String
public open override /*1*/ /*fake_override*/ fun lastIndexOf(/*0*/ o: kotlin.Any?): kotlin.Int
public open override /*1*/ /*fake_override*/ fun listIterator(): kotlin.MutableListIterator<kotlin.String>
public open override /*1*/ /*fake_override*/ fun listIterator(/*0*/ index: kotlin.Int): kotlin.MutableListIterator<kotlin.String>
invisible_fake open override /*1*/ /*fake_override*/ fun outOfBoundsMsg(/*0*/ p0: kotlin.Int): kotlin.String?
invisible_fake open override /*1*/ /*fake_override*/ fun rangeCheckForAdd(/*0*/ p0: kotlin.Int): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun remove(/*0*/ o: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun remove(/*0*/ index: kotlin.Int): kotlin.String
public open override /*1*/ /*fake_override*/ fun removeAll(/*0*/ c: kotlin.Collection<kotlin.Any?>): kotlin.Boolean
@@ -3,11 +3,13 @@ package test
public final class InheritJavaField : test.Super {
public constructor InheritJavaField()
public final override /*1*/ /*fake_override*/ var field: kotlin.Int
invisible_fake final override /*1*/ /*fake_override*/ var privateField: kotlin.Int
public open override /*1*/ /*fake_override*/ fun method(): kotlin.Int
}
public open class Super : java.lang.Object {
public constructor Super()
public final var field: kotlin.Int
private final var privateField: kotlin.Int
public open fun method(): kotlin.Int
}
Binary file not shown.
Binary file not shown.
@@ -64,6 +64,16 @@ public class LoadJavaTestGenerated extends AbstractLoadJavaTest {
doTestCompiledJava("compiler/testData/loadJava/compiledJava/PackageLocalVisibility.java");
}
@TestMetadata("PrivateMembers.java")
public void testPrivateMembers() throws Exception {
doTestCompiledJava("compiler/testData/loadJava/compiledJava/PrivateMembers.java");
}
@TestMetadata("PrivateMembersInHierarchy.java")
public void testPrivateMembersInHierarchy() throws Exception {
doTestCompiledJava("compiler/testData/loadJava/compiledJava/PrivateMembersInHierarchy.java");
}
@TestMetadata("RawTypeWithUpperBound.java")
public void testRawTypeWithUpperBound() throws Exception {
doTestCompiledJava("compiler/testData/loadJava/compiledJava/RawTypeWithUpperBound.java");
@@ -41,13 +41,7 @@ object EMPTY_MEMBER_INDEX : MemberIndex {
override fun getAllFieldNames() = listOf<Name>()
}
open class ClassMemberIndex(val jClass: JavaClass, filter: (JavaMember) -> Boolean) : MemberIndex {
private val memberFilter = {
(m: JavaMember) ->
filter(m) &&
m.getVisibility() != Visibilities.PRIVATE
}
open class ClassMemberIndex(val jClass: JavaClass, val memberFilter: (JavaMember) -> Boolean) : MemberIndex {
private val methodFilter = {
(m: JavaMethod) ->
memberFilter(m) &&
@@ -346,9 +346,10 @@ public class OverridingUtil {
@NotNull DescriptorSink sink
) {
Collection<CallableMemberDescriptor> visibleOverridables = filterVisibleFakeOverrides(current, overridables);
Modality modality = getMinimalModality(visibleOverridables);
boolean allInvisible = visibleOverridables.isEmpty();
Collection<CallableMemberDescriptor> effectiveOverridden = allInvisible ? overridables : visibleOverridables;
Modality modality = getMinimalModality(effectiveOverridden);
Visibility visibility = allInvisible ? Visibilities.INVISIBLE_FAKE : Visibilities.INHERITED;
CallableMemberDescriptor mostSpecific = selectMostSpecificMemberFromSuper(effectiveOverridden);
CallableMemberDescriptor fakeOverride =
@@ -270,6 +270,7 @@ public class GenerateMockJdk {
"javax/swing/SwingConstants.class",
"javax/swing/SwingUtilities.class",
"javax/swing/table/TableModel.class",
"sun/util/calendar/BaseCalendar.class",
"META-INF/",
"META-INF/MANIFEST.MF",
};