Merge pull request #37 from Frostman/override-inherit-visibility

Override/Implement actions are now inherits visibility.
 #KT-1724 fixed
This commit is contained in:
Nikolay Krasko
2012-04-04 08:42:56 -07:00
9 changed files with 63 additions and 11 deletions
@@ -121,7 +121,8 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
} }
private static JetElement overrideProperty(Project project, JetFile file, PropertyDescriptor descriptor) { private static JetElement overrideProperty(Project project, JetFile file, PropertyDescriptor descriptor) {
StringBuilder bodyBuilder = new StringBuilder("override "); StringBuilder bodyBuilder = new StringBuilder();
bodyBuilder.append(displayableVisibility(descriptor)).append("override ");
if (descriptor.isVar()) { if (descriptor.isVar()) {
bodyBuilder.append("var "); bodyBuilder.append("var ");
} }
@@ -142,9 +143,9 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
} }
private static JetElement overrideFunction(Project project, JetFile file, SimpleFunctionDescriptor descriptor) { private static JetElement overrideFunction(Project project, JetFile file, SimpleFunctionDescriptor descriptor) {
StringBuilder bodyBuilder = new StringBuilder("override fun "); StringBuilder bodyBuilder = new StringBuilder();
bodyBuilder.append(descriptor.getName()); bodyBuilder.append(displayableVisibility(descriptor));
bodyBuilder.append("("); bodyBuilder.append("override fun ").append(descriptor.getName()).append("(");
boolean isAbstractFun = descriptor.getModality() == Modality.ABSTRACT; boolean isAbstractFun = descriptor.getModality() == Modality.ABSTRACT;
StringBuilder delegationBuilder = new StringBuilder(); StringBuilder delegationBuilder = new StringBuilder();
if (isAbstractFun) { if (isAbstractFun) {
@@ -207,6 +208,11 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
return null; return null;
} }
private static String displayableVisibility(MemberDescriptor descriptor) {
Visibility visibility = descriptor.getVisibility();
return visibility != Visibilities.INTERNAL ? visibility.toString() + " ": "";
}
private MemberChooser<DescriptorClassMember> showOverrideImplementChooser(Project project, private MemberChooser<DescriptorClassMember> showOverrideImplementChooser(Project project,
DescriptorClassMember[] members) { DescriptorClassMember[] members) {
final MemberChooser<DescriptorClassMember> chooser = new MemberChooser<DescriptorClassMember>(members, true, true, project); final MemberChooser<DescriptorClassMember> chooser = new MemberChooser<DescriptorClassMember>(members, true, true, project);
@@ -0,0 +1,15 @@
open class A() {
protected open fun protectedFun() { }
internal open fun internalFun() {}
public open fun publicFun() {}
}
trait B {
protected open val protectedProperty : Int
internal open val internalProperty : Int
public open val publicProperty : Int
}
class C : A(), B {
<caret>
}
@@ -0,0 +1,27 @@
open class A() {
protected open fun protectedFun() { }
internal open fun internalFun() {}
public open fun publicFun() {}
}
trait B {
protected open val protectedProperty : Int
internal open val internalProperty : Int
public open val publicProperty : Int
}
class C : A(), B {
override fun internalFun() {
super<A>.internalFun()
}
override val internalProperty : Int = 0
protected override fun protectedFun() {
super<A>.protectedFun()
}
protected override val protectedProperty : Int = 0
public override fun publicFun() {
super<A>.publicFun()
}
public override val publicProperty : Int = 0
}
@@ -2,7 +2,7 @@ import foo.Intf
class Impl(): Intf { class Impl(): Intf {
override fun getFooBar() : String? { public override fun getFooBar() : String? {
throw UnsupportedOperationException() throw UnsupportedOperationException()
} }
} }
@@ -2,7 +2,7 @@ import foo.Intf
class Impl(): Intf { class Impl(): Intf {
override fun fooBar(i : Int, s : Array<String?>?, foo : Any?) { public override fun fooBar(i : Int, s : Array<String?>?, foo : Any?) {
throw UnsupportedOperationException() throw UnsupportedOperationException()
} }
} }
@@ -2,7 +2,7 @@ import foo.A
class C : A() { class C : A() {
override fun getAnswer(array : Array<String?>?, number : Int, value : Any?) : Int { public override fun getAnswer(array : Array<String?>?, number : Int, value : Any?) : Int {
return super<A>.getAnswer(array, number, value) return super<A>.getAnswer(array, number, value)
} }
} }
@@ -12,4 +12,4 @@ class SomeTest : Test {
fun some() { fun some() {
} }
} }
@@ -5,10 +5,10 @@ trait Test {
class SomeTest : Test { class SomeTest : Test {
val hello = 12 val hello = 12
override fun test() { public override fun test() {
throw UnsupportedOperationException() throw UnsupportedOperationException()
} }
override val testProp : Int = 0 protected override val testProp : Int = 0
/** /**
* test * test
@@ -16,4 +16,4 @@ class SomeTest : Test {
fun some() { fun some() {
} }
} }
@@ -122,6 +122,10 @@ public class OverrideImplementTest extends LightCodeInsightFixtureTestCase {
doOverrideDirectoryTest(); doOverrideDirectoryTest();
} }
public void testInheritVisibilities() {
doMultiOverrideFileTest();
}
private void doImplementFileTest() { private void doImplementFileTest() {
doFileTest(new ImplementMethodsHandler()); doFileTest(new ImplementMethodsHandler());
} }