diff --git a/compiler/testData/loadJava/compiledJava/PrivateMembers.java b/compiler/testData/loadJava/compiledJava/PrivateMembers.java new file mode 100644 index 00000000000..0f24de0de5b --- /dev/null +++ b/compiler/testData/loadJava/compiledJava/PrivateMembers.java @@ -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() { + } + } +} \ No newline at end of file diff --git a/compiler/testData/loadJava/compiledJava/PrivateMembers.txt b/compiler/testData/loadJava/compiledJava/PrivateMembers.txt new file mode 100644 index 00000000000..8810248145b --- /dev/null +++ b/compiler/testData/loadJava/compiledJava/PrivateMembers.txt @@ -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 + } +} \ No newline at end of file diff --git a/compiler/testData/loadJava/compiledJava/PrivateMembersInHierarchy.java b/compiler/testData/loadJava/compiledJava/PrivateMembersInHierarchy.java new file mode 100644 index 00000000000..c4530580042 --- /dev/null +++ b/compiler/testData/loadJava/compiledJava/PrivateMembersInHierarchy.java @@ -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() { + } + } +} + diff --git a/compiler/testData/loadJava/compiledJava/PrivateMembersInHierarchy.txt b/compiler/testData/loadJava/compiledJava/PrivateMembersInHierarchy.txt new file mode 100644 index 00000000000..a25c9814777 --- /dev/null +++ b/compiler/testData/loadJava/compiledJava/PrivateMembersInHierarchy.txt @@ -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 + } +} \ No newline at end of file diff --git a/compiler/testData/loadJava/compiledJavaCompareWithKotlin/ClassDoesNotOverrideMethod.txt b/compiler/testData/loadJava/compiledJavaCompareWithKotlin/ClassDoesNotOverrideMethod.txt index 691a30890d3..8aa68a937e6 100644 --- a/compiler/testData/loadJava/compiledJavaCompareWithKotlin/ClassDoesNotOverrideMethod.txt +++ b/compiler/testData/loadJava/compiledJavaCompareWithKotlin/ClassDoesNotOverrideMethod.txt @@ -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 } diff --git a/compiler/testData/loadJava/compiledJavaCompareWithKotlin/modality/ModalityOfFakeOverrides.txt b/compiler/testData/loadJava/compiledJavaCompareWithKotlin/modality/ModalityOfFakeOverrides.txt index 9463b8db02f..bfa2d292f29 100644 --- a/compiler/testData/loadJava/compiledJavaCompareWithKotlin/modality/ModalityOfFakeOverrides.txt +++ b/compiler/testData/loadJava/compiledJavaCompareWithKotlin/modality/ModalityOfFakeOverrides.txt @@ -17,6 +17,8 @@ public open class ModalityOfFakeOverrides : java.util.AbstractList public open override /*1*/ /*fake_override*/ fun listIterator(/*0*/ index: kotlin.Int): kotlin.MutableListIterator + 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.Boolean diff --git a/compiler/testData/loadJava/kotlinAgainstCompiledJavaWithKotlin/InheritJavaField.txt b/compiler/testData/loadJava/kotlinAgainstCompiledJavaWithKotlin/InheritJavaField.txt index a588e84fa27..25d9f3762b8 100644 --- a/compiler/testData/loadJava/kotlinAgainstCompiledJavaWithKotlin/InheritJavaField.txt +++ b/compiler/testData/loadJava/kotlinAgainstCompiledJavaWithKotlin/InheritJavaField.txt @@ -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 } diff --git a/compiler/testData/mockJDK/jre/lib/rt.jar b/compiler/testData/mockJDK/jre/lib/rt.jar index 612d76c1482..bc09a129fae 100644 Binary files a/compiler/testData/mockJDK/jre/lib/rt.jar and b/compiler/testData/mockJDK/jre/lib/rt.jar differ diff --git a/compiler/testData/mockJDK/src.zip b/compiler/testData/mockJDK/src.zip index 7acc804630b..0a1d6b2634d 100644 Binary files a/compiler/testData/mockJDK/src.zip and b/compiler/testData/mockJDK/src.zip differ diff --git a/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadJavaTestGenerated.java b/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadJavaTestGenerated.java index 3af6d9df723..4f20fb8b50a 100644 --- a/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadJavaTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadJavaTestGenerated.java @@ -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"); diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/MemberIndex.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/MemberIndex.kt index c76ce7ab31a..5bcae7e64b2 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/MemberIndex.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/MemberIndex.kt @@ -41,13 +41,7 @@ object EMPTY_MEMBER_INDEX : MemberIndex { override fun getAllFieldNames() = listOf() } -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) && diff --git a/core/descriptors/src/org/jetbrains/jet/lang/resolve/OverridingUtil.java b/core/descriptors/src/org/jetbrains/jet/lang/resolve/OverridingUtil.java index 455c7ff4afc..7c29790768c 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/resolve/OverridingUtil.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/resolve/OverridingUtil.java @@ -346,9 +346,10 @@ public class OverridingUtil { @NotNull DescriptorSink sink ) { Collection visibleOverridables = filterVisibleFakeOverrides(current, overridables); - Modality modality = getMinimalModality(visibleOverridables); boolean allInvisible = visibleOverridables.isEmpty(); Collection effectiveOverridden = allInvisible ? overridables : visibleOverridables; + + Modality modality = getMinimalModality(effectiveOverridden); Visibility visibility = allInvisible ? Visibilities.INVISIBLE_FAKE : Visibilities.INHERITED; CallableMemberDescriptor mostSpecific = selectMostSpecificMemberFromSuper(effectiveOverridden); CallableMemberDescriptor fakeOverride = diff --git a/generators/src/org/jetbrains/jet/generators/mockJDK/GenerateMockJdk.java b/generators/src/org/jetbrains/jet/generators/mockJDK/GenerateMockJdk.java index 33b5be36cc4..3785c324462 100644 --- a/generators/src/org/jetbrains/jet/generators/mockJDK/GenerateMockJdk.java +++ b/generators/src/org/jetbrains/jet/generators/mockJDK/GenerateMockJdk.java @@ -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", };