KT-12793 Code completion doesn't suggest abstract protected extension methods

#KT-12793 Fixed
This commit is contained in:
Valentin Kipyatkov
2016-07-22 17:54:01 +03:00
parent 88ad00b0bc
commit 6ff91d1399
4 changed files with 24 additions and 1 deletions
@@ -0,0 +1,9 @@
abstract class ProtectedTest {
fun foo() {
"".<caret>
}
abstract protected fun String.bar()
}
// EXIST: bar
@@ -649,6 +649,12 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes
doTest(fileName);
}
@TestMetadata("ProtectedExtensionMethod.kt")
public void testProtectedExtensionMethod() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/ProtectedExtensionMethod.kt");
doTest(fileName);
}
@TestMetadata("QualifiedSuperMembers.kt")
public void testQualifiedSuperMembers() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/QualifiedSuperMembers.kt");
@@ -649,6 +649,12 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT
doTest(fileName);
}
@TestMetadata("ProtectedExtensionMethod.kt")
public void testProtectedExtensionMethod() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/ProtectedExtensionMethod.kt");
doTest(fileName);
}
@TestMetadata("QualifiedSuperMembers.kt")
public void testQualifiedSuperMembers() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/QualifiedSuperMembers.kt");
@@ -28,6 +28,7 @@ import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.psi.KtExpression
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.OverridingUtil
import org.jetbrains.kotlin.resolve.findOriginalTopMostOverriddenDescriptors
@@ -62,7 +63,8 @@ private fun DeclarationDescriptorWithVisibility.isVisible(
if (bindingContext == null || resolutionScope == null) return false
if (receiverExpression != null) {
// for extension it makes no sense to check explicit receiver because we need dispatch receiver which is implicit in this case
if (receiverExpression != null && !isExtension) {
val receiverType = bindingContext.getType(receiverExpression) ?: return false
val explicitReceiver = ExpressionReceiver.create(receiverExpression, receiverType, bindingContext)
return Visibilities.isVisible(explicitReceiver, this, from)