Method from java overridden in kotlin should have kotlin visibility

This commit is contained in:
Natalia.Ukhorskaya
2013-02-06 18:58:20 +04:00
parent 55d4599b3b
commit 1749e3298c
14 changed files with 85 additions and 19 deletions
@@ -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
}
@@ -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
}
@@ -0,0 +1,6 @@
package test;
public class Base {
protected void foo() {}
}
@@ -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