Method from java overridden in kotlin should have kotlin visibility
This commit is contained in:
+18
@@ -55,6 +55,12 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
public String toString() {
|
public String toString() {
|
||||||
return "public/*package*/";
|
return "public/*package*/";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public Visibility normalize() {
|
||||||
|
return Visibilities.INTERNAL;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public static final Visibility PROTECTED_STATIC_VISIBILITY = new Visibility("protected_static", false) {
|
public static final Visibility PROTECTED_STATIC_VISIBILITY = new Visibility("protected_static", false) {
|
||||||
@@ -89,6 +95,12 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
public String toString() {
|
public String toString() {
|
||||||
return "protected/*protected static*/";
|
return "protected/*protected static*/";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public Visibility normalize() {
|
||||||
|
return Visibilities.PROTECTED;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public static final Visibility PROTECTED_AND_PACKAGE = new Visibility("protected_and_package", false) {
|
public static final Visibility PROTECTED_AND_PACKAGE = new Visibility("protected_and_package", false) {
|
||||||
@@ -122,6 +134,12 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
|||||||
public String toString() {
|
public String toString() {
|
||||||
return "protected/*protected and package*/";
|
return "protected/*protected and package*/";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public Visibility normalize() {
|
||||||
|
return Visibilities.PROTECTED;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
private JavaPropertyResolver propertiesResolver;
|
private JavaPropertyResolver propertiesResolver;
|
||||||
|
|||||||
@@ -43,5 +43,10 @@ public abstract class Visibility {
|
|||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public Visibility normalize() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
protected abstract boolean isVisible(@NotNull DeclarationDescriptorWithVisibility what, @NotNull DeclarationDescriptor from);
|
protected abstract boolean isVisible(@NotNull DeclarationDescriptorWithVisibility what, @NotNull DeclarationDescriptor from);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -881,17 +881,17 @@ public class OverrideResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (memberDescriptor instanceof PropertyDescriptorImpl) {
|
if (memberDescriptor instanceof PropertyDescriptorImpl) {
|
||||||
((PropertyDescriptorImpl)memberDescriptor).setVisibility(visibility);
|
((PropertyDescriptorImpl)memberDescriptor).setVisibility(visibility.normalize());
|
||||||
for (PropertyAccessorDescriptor accessor : ((PropertyDescriptor) memberDescriptor).getAccessors()) {
|
for (PropertyAccessorDescriptor accessor : ((PropertyDescriptor) memberDescriptor).getAccessors()) {
|
||||||
resolveUnknownVisibilityForMember(null, accessor, trace);
|
resolveUnknownVisibilityForMember(null, accessor, trace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (memberDescriptor instanceof FunctionDescriptorImpl) {
|
else if (memberDescriptor instanceof FunctionDescriptorImpl) {
|
||||||
((FunctionDescriptorImpl)memberDescriptor).setVisibility(visibility);
|
((FunctionDescriptorImpl)memberDescriptor).setVisibility(visibility.normalize());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
assert memberDescriptor instanceof PropertyAccessorDescriptorImpl;
|
assert memberDescriptor instanceof PropertyAccessorDescriptorImpl;
|
||||||
((PropertyAccessorDescriptorImpl) memberDescriptor).setVisibility(visibility);
|
((PropertyAccessorDescriptorImpl) memberDescriptor).setVisibility(visibility.normalize());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package test
|
||||||
|
|
||||||
|
public open class Base : java.lang.Object {
|
||||||
|
public constructor Base()
|
||||||
|
public/*package*/ open fun foo() : Unit
|
||||||
|
}
|
||||||
|
|
||||||
|
internal final class Derived : test.Base {
|
||||||
|
public constructor Derived()
|
||||||
|
internal open override /*1*/ fun foo() : Unit
|
||||||
|
}
|
||||||
+6
@@ -0,0 +1,6 @@
|
|||||||
|
package test;
|
||||||
|
|
||||||
|
public class Base {
|
||||||
|
void foo() {}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
package test
|
||||||
|
|
||||||
|
class Derived(): Base() {
|
||||||
|
override fun foo() {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package test
|
||||||
|
|
||||||
|
public open class Base : java.lang.Object {
|
||||||
|
public constructor Base()
|
||||||
|
protected/*protected and package*/ open fun foo() : Unit
|
||||||
|
}
|
||||||
|
|
||||||
|
internal final class Derived : test.Base {
|
||||||
|
public constructor Derived()
|
||||||
|
protected open override /*1*/ fun foo() : Unit
|
||||||
|
}
|
||||||
+6
@@ -0,0 +1,6 @@
|
|||||||
|
package test;
|
||||||
|
|
||||||
|
public class Base {
|
||||||
|
protected void foo() {}
|
||||||
|
}
|
||||||
|
|
||||||
+5
@@ -0,0 +1,5 @@
|
|||||||
|
package test
|
||||||
|
|
||||||
|
class Derived(): Base() {
|
||||||
|
override fun foo() {}
|
||||||
|
}
|
||||||
@@ -83,7 +83,7 @@ public final class LoadJavaCustomTest extends KotlinTestWithEnvironment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void testPackageLocalVisibility() throws Exception {
|
public void testPackageLocalVisibility() throws Exception {
|
||||||
String dir = PATH + "/packageLocalVisibility";
|
String dir = PATH + "/packageLocalVisibility/simple/";
|
||||||
String javaDir = dir + "/java";
|
String javaDir = dir + "/java";
|
||||||
doTest(dir + "/expected.txt",
|
doTest(dir + "/expected.txt",
|
||||||
javaDir + "/test/JFrame.java",
|
javaDir + "/test/JFrame.java",
|
||||||
@@ -163,15 +163,23 @@ public final class LoadJavaCustomTest extends KotlinTestWithEnvironment {
|
|||||||
|
|
||||||
public static class SubclassingKotlinInJavaTest extends KotlinTestWithEnvironmentManagement {
|
public static class SubclassingKotlinInJavaTest extends KotlinTestWithEnvironmentManagement {
|
||||||
public void testSubclassingKotlinInJava() throws Exception {
|
public void testSubclassingKotlinInJava() throws Exception {
|
||||||
doTest();
|
doTest(PATH + "/" + getTestName(true));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testDeepSubclassingKotlinInJava() throws Exception {
|
public void testDeepSubclassingKotlinInJava() throws Exception {
|
||||||
doTest();
|
doTest(PATH + "/" + getTestName(true));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void doTest() throws Exception {
|
public void testPackageInheritance() throws Exception {
|
||||||
File dir = new File(PATH + "/" + getTestName(true));
|
doTest(PATH + "/packageLocalVisibility/inheritance");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testProtectedPackageInheritance() throws Exception {
|
||||||
|
doTest(PATH + "/protectedPackageVisibility/inheritance");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void doTest(String path) throws Exception {
|
||||||
|
File dir = new File(path);
|
||||||
|
|
||||||
CompilerConfiguration configuration = JetTestUtils.compilerConfigurationForTests(
|
CompilerConfiguration configuration = JetTestUtils.compilerConfigurationForTests(
|
||||||
ConfigurationKind.JDK_ONLY, TestJdkKind.MOCK_JDK, new File(dir, "java"));
|
ConfigurationKind.JDK_ONLY, TestJdkKind.MOCK_JDK, new File(dir, "java"));
|
||||||
|
|||||||
@@ -264,17 +264,8 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static String displayableVisibility(MemberDescriptor descriptor) {
|
private static String displayableVisibility(MemberDescriptor descriptor) {
|
||||||
Visibility visibility = descriptor.getVisibility();
|
Visibility visibility = descriptor.getVisibility().normalize();
|
||||||
if (visibility == Visibilities.INTERNAL) {
|
return visibility != Visibilities.INTERNAL ? visibility.toString() + " " : "";
|
||||||
return "";
|
|
||||||
}
|
|
||||||
if (visibility == JavaDescriptorResolver.PACKAGE_VISIBILITY) {
|
|
||||||
return "internal ";
|
|
||||||
}
|
|
||||||
if (visibility == JavaDescriptorResolver.PROTECTED_AND_PACKAGE) {
|
|
||||||
return "protected ";
|
|
||||||
}
|
|
||||||
return visibility.toString() + " ";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
|
|||||||
Reference in New Issue
Block a user