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() {
|
||||
return "public/*package*/";
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Visibility normalize() {
|
||||
return Visibilities.INTERNAL;
|
||||
}
|
||||
};
|
||||
|
||||
public static final Visibility PROTECTED_STATIC_VISIBILITY = new Visibility("protected_static", false) {
|
||||
@@ -89,6 +95,12 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
||||
public String toString() {
|
||||
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) {
|
||||
@@ -122,6 +134,12 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
||||
public String toString() {
|
||||
return "protected/*protected and package*/";
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Visibility normalize() {
|
||||
return Visibilities.PROTECTED;
|
||||
}
|
||||
};
|
||||
|
||||
private JavaPropertyResolver propertiesResolver;
|
||||
|
||||
@@ -43,5 +43,10 @@ public abstract class Visibility {
|
||||
return name;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Visibility normalize() {
|
||||
return this;
|
||||
}
|
||||
|
||||
protected abstract boolean isVisible(@NotNull DeclarationDescriptorWithVisibility what, @NotNull DeclarationDescriptor from);
|
||||
}
|
||||
|
||||
@@ -881,17 +881,17 @@ public class OverrideResolver {
|
||||
}
|
||||
|
||||
if (memberDescriptor instanceof PropertyDescriptorImpl) {
|
||||
((PropertyDescriptorImpl)memberDescriptor).setVisibility(visibility);
|
||||
((PropertyDescriptorImpl)memberDescriptor).setVisibility(visibility.normalize());
|
||||
for (PropertyAccessorDescriptor accessor : ((PropertyDescriptor) memberDescriptor).getAccessors()) {
|
||||
resolveUnknownVisibilityForMember(null, accessor, trace);
|
||||
}
|
||||
}
|
||||
else if (memberDescriptor instanceof FunctionDescriptorImpl) {
|
||||
((FunctionDescriptorImpl)memberDescriptor).setVisibility(visibility);
|
||||
((FunctionDescriptorImpl)memberDescriptor).setVisibility(visibility.normalize());
|
||||
}
|
||||
else {
|
||||
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 {
|
||||
String dir = PATH + "/packageLocalVisibility";
|
||||
String dir = PATH + "/packageLocalVisibility/simple/";
|
||||
String javaDir = dir + "/java";
|
||||
doTest(dir + "/expected.txt",
|
||||
javaDir + "/test/JFrame.java",
|
||||
@@ -163,15 +163,23 @@ public final class LoadJavaCustomTest extends KotlinTestWithEnvironment {
|
||||
|
||||
public static class SubclassingKotlinInJavaTest extends KotlinTestWithEnvironmentManagement {
|
||||
public void testSubclassingKotlinInJava() throws Exception {
|
||||
doTest();
|
||||
doTest(PATH + "/" + getTestName(true));
|
||||
}
|
||||
|
||||
public void testDeepSubclassingKotlinInJava() throws Exception {
|
||||
doTest();
|
||||
doTest(PATH + "/" + getTestName(true));
|
||||
}
|
||||
|
||||
public void doTest() throws Exception {
|
||||
File dir = new File(PATH + "/" + getTestName(true));
|
||||
public void testPackageInheritance() throws Exception {
|
||||
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(
|
||||
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) {
|
||||
Visibility visibility = descriptor.getVisibility();
|
||||
if (visibility == Visibilities.INTERNAL) {
|
||||
return "";
|
||||
}
|
||||
if (visibility == JavaDescriptorResolver.PACKAGE_VISIBILITY) {
|
||||
return "internal ";
|
||||
}
|
||||
if (visibility == JavaDescriptorResolver.PROTECTED_AND_PACKAGE) {
|
||||
return "protected ";
|
||||
}
|
||||
return visibility.toString() + " ";
|
||||
Visibility visibility = descriptor.getVisibility().normalize();
|
||||
return visibility != Visibilities.INTERNAL ? visibility.toString() + " " : "";
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
Reference in New Issue
Block a user