KT-6923 Completion shouldn't show private symbols from compiled code

#KT-6923 Fixed
This commit is contained in:
Valentin Kipyatkov
2015-04-01 12:25:36 +03:00
parent 3b110f8ef8
commit 36fb14a3fc
4 changed files with 31 additions and 3 deletions
@@ -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
@@ -0,0 +1,13 @@
import java.io.File
class MyFile : File("file") {
private val privateField = 0
}
fun foo(f: MyFile) {
f.<caret>
}
// INVOCATION_COUNT: 2
// EXIST: privateField
// ABSENT: prefixLength
@@ -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");
@@ -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");