KT-8822 Override Members: do not show private members from java classes

#KT-8822 Fixed
This commit is contained in:
Valentin Kipyatkov
2015-08-18 22:47:13 +03:00
parent f42a589ddc
commit 9b4e3b15c4
6 changed files with 54 additions and 5 deletions
@@ -17,10 +17,7 @@
package org.jetbrains.kotlin.idea.core.overrideImplement
import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.*
import java.util.ArrayList
import java.util.LinkedHashMap
@@ -31,7 +28,7 @@ public class OverrideMethodsHandler : OverrideImplementMethodsHandler() {
if (member is CallableMemberDescriptor
&& (member.kind == CallableMemberDescriptor.Kind.FAKE_OVERRIDE || member.kind == CallableMemberDescriptor.Kind.DELEGATION)) {
val overridden = member.overriddenDescriptors
if (overridden.any { it.modality == Modality.FINAL }) continue
if (overridden.any { it.modality == Modality.FINAL || it.visibility.normalize() == Visibilities.PRIVATE }) continue
val realSuperToImmediates = LinkedHashMap<CallableMemberDescriptor, MutableCollection<CallableMemberDescriptor>>()
for (immediateSuper in overridden) {
@@ -0,0 +1,5 @@
public class A {
public void x(){}
private void y(){}
private void z(){}
}
@@ -0,0 +1,7 @@
interface I {
fun z()
}
class C : A(), I {
<caret>
}
@@ -0,0 +1,25 @@
interface I {
fun z()
}
class C : A(), I {
override fun equals(other: Any?): Boolean {
<selection><caret>return super<A>.equals(other)</selection>
}
override fun hashCode(): Int {
return super<A>.hashCode()
}
override fun toString(): String {
return super<A>.toString()
}
override fun x() {
super<A>.x()
}
override fun z() {
throw UnsupportedOperationException()
}
}
@@ -70,6 +70,10 @@ public abstract class AbstractOverrideImplementTest : JetLightCodeInsightFixture
doDirectoryTest(OverrideMethodsHandler(), memberToImplement)
}
protected fun doMultiOverrideDirectoryTest() {
doMultiDirectoryTest(OverrideMethodsHandler())
}
protected fun doImplementJavaDirectoryTest(className: String, methodName: String) {
myFixture.copyDirectoryToProject(getTestName(true), "")
myFixture.configureFromTempProjectFile("foo/JavaClass.java")
@@ -110,6 +114,13 @@ public abstract class AbstractOverrideImplementTest : JetLightCodeInsightFixture
checkResultByFile(getTestName(true) + "/foo/Impl.kt.after")
}
private fun doMultiDirectoryTest(handler: OverrideImplementMethodsHandler) {
myFixture.copyDirectoryToProject(getTestName(true), "")
myFixture.configureFromTempProjectFile("foo/Impl.kt")
doMultiOverrideImplement(handler)
checkResultByFile(getTestName(true) + "/foo/Impl.kt.after")
}
private fun doOverrideImplement(handler: OverrideImplementMethodsHandler, memberToOverride: String?) {
val elementAtCaret = myFixture.file.findElementAt(myFixture.editor.caretModel.offset)
val classOrObject = PsiTreeUtil.getParentOfType(elementAtCaret, javaClass<JetClassOrObject>())
@@ -151,6 +151,10 @@ public final class OverrideImplementTest extends AbstractOverrideImplementTest {
doOverrideDirectoryTest("getFooBar");
}
public void testPrivateJavaMethod() {
doMultiOverrideDirectoryTest();
}
public void testInheritVisibilities() {
doMultiOverrideFileTest();
}