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) {
StringBuilder bodyBuilder = new StringBuilder("override ");
StringBuilder bodyBuilder = new StringBuilder();
bodyBuilder.append(displayableVisibility(descriptor)).append("override ");
if (descriptor.isVar()) {
bodyBuilder.append("var ");
}
@@ -142,9 +143,9 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
}
private static JetElement overrideFunction(Project project, JetFile file, SimpleFunctionDescriptor descriptor) {
StringBuilder bodyBuilder = new StringBuilder("override fun ");
bodyBuilder.append(descriptor.getName());
bodyBuilder.append("(");
StringBuilder bodyBuilder = new StringBuilder();
bodyBuilder.append(displayableVisibility(descriptor));
bodyBuilder.append("override fun ").append(descriptor.getName()).append("(");
boolean isAbstractFun = descriptor.getModality() == Modality.ABSTRACT;
StringBuilder delegationBuilder = new StringBuilder();
if (isAbstractFun) {
@@ -207,6 +208,11 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
return null;
}
private static String displayableVisibility(MemberDescriptor descriptor) {
Visibility visibility = descriptor.getVisibility();
return visibility != Visibilities.INTERNAL ? visibility.toString() + " ": "";
}
private MemberChooser<DescriptorClassMember> showOverrideImplementChooser(Project project,
DescriptorClassMember[] members) {
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 {
override fun getFooBar() : String? {
public override fun getFooBar() : String? {
throw UnsupportedOperationException()
}
}
@@ -2,7 +2,7 @@ import foo.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()
}
}
@@ -2,7 +2,7 @@ import foo.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)
}
}
@@ -12,4 +12,4 @@ class SomeTest : Test {
fun some() {
}
}
}
@@ -5,10 +5,10 @@ trait Test {
class SomeTest : Test {
val hello = 12
override fun test() {
public override fun test() {
throw UnsupportedOperationException()
}
override val testProp : Int = 0
protected override val testProp : Int = 0
/**
* test
@@ -16,4 +16,4 @@ class SomeTest : Test {
fun some() {
}
}
}
@@ -122,6 +122,10 @@ public class OverrideImplementTest extends LightCodeInsightFixtureTestCase {
doOverrideDirectoryTest();
}
public void testInheritVisibilities() {
doMultiOverrideFileTest();
}
private void doImplementFileTest() {
doFileTest(new ImplementMethodsHandler());
}