diff --git a/idea/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt b/idea/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt index 32e7f5561ea..e3977adfce5 100644 --- a/idea/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt +++ b/idea/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt @@ -23,6 +23,7 @@ import com.intellij.patterns.CharPattern import com.intellij.patterns.ElementPattern import com.intellij.patterns.PatternCondition import com.intellij.patterns.StandardPatterns +import com.intellij.psi.PsiCompiledElement import com.intellij.psi.PsiElement import com.intellij.psi.search.DelegatingGlobalSearchScope import com.intellij.psi.search.GlobalSearchScope @@ -32,6 +33,7 @@ import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.idea.caches.KotlinIndicesHelper import org.jetbrains.kotlin.idea.caches.resolve.ResolutionFacade import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade +import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde import org.jetbrains.kotlin.idea.codeInsight.ReferenceVariantsHelper import org.jetbrains.kotlin.idea.completion.smart.SmartCompletion import org.jetbrains.kotlin.idea.refactoring.comparePossiblyOverridingDescriptors @@ -166,10 +168,11 @@ abstract class CompletionSessionBase(protected val configuration: CompletionSess get() = KotlinIndicesHelper(project, resolutionFacade, bindingContext!!, searchScope, moduleDescriptor) { isVisibleDescriptor(it) } protected fun isVisibleDescriptor(descriptor: DeclarationDescriptor): Boolean { - if (configuration.completeNonAccessibleDeclarations) return true - if (descriptor is DeclarationDescriptorWithVisibility && inDescriptor != null) { - return descriptor.isVisible(inDescriptor, bindingContext, reference?.expression) + val visible = descriptor.isVisible(inDescriptor, bindingContext, reference?.expression) + if (visible) return true + if (!configuration.completeNonAccessibleDeclarations) return false + return DescriptorToSourceUtilsIde.getAnyDeclaration(project, descriptor) !is PsiCompiledElement } return true diff --git a/idea/testData/completion/basic/common/PrivatesInSecondPressCompletion.kt b/idea/testData/completion/basic/common/PrivatesInSecondPressCompletion.kt new file mode 100644 index 00000000000..44e85b08a0f --- /dev/null +++ b/idea/testData/completion/basic/common/PrivatesInSecondPressCompletion.kt @@ -0,0 +1,13 @@ +import java.io.File + +class MyFile : File("file") { + private val privateField = 0 +} + +fun foo(f: MyFile) { + f. +} + +// INVOCATION_COUNT: 2 +// EXIST: privateField +// ABSENT: prefixLength \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/completion/JSBasicCompletionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/completion/JSBasicCompletionTestGenerated.java index cdf285e12e3..cd2c54e9d1c 100644 --- a/idea/tests/org/jetbrains/kotlin/completion/JSBasicCompletionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/completion/JSBasicCompletionTestGenerated.java @@ -889,6 +889,12 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes doTest(fileName); } + @TestMetadata("PrivatesInSecondPressCompletion.kt") + public void testPrivatesInSecondPressCompletion() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/PrivatesInSecondPressCompletion.kt"); + doTest(fileName); + } + @TestMetadata("RecieverMembersFromExtAccessor.kt") public void testRecieverMembersFromExtAccessor() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/RecieverMembersFromExtAccessor.kt"); diff --git a/idea/tests/org/jetbrains/kotlin/completion/JvmBasicCompletionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/completion/JvmBasicCompletionTestGenerated.java index 5a133c9f0eb..4c2de62892c 100644 --- a/idea/tests/org/jetbrains/kotlin/completion/JvmBasicCompletionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/completion/JvmBasicCompletionTestGenerated.java @@ -889,6 +889,12 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT doTest(fileName); } + @TestMetadata("PrivatesInSecondPressCompletion.kt") + public void testPrivatesInSecondPressCompletion() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/PrivatesInSecondPressCompletion.kt"); + doTest(fileName); + } + @TestMetadata("RecieverMembersFromExtAccessor.kt") public void testRecieverMembersFromExtAccessor() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/RecieverMembersFromExtAccessor.kt");