KT-6923 Completion shouldn't show private symbols from compiled code
#KT-6923 Fixed
This commit is contained in:
@@ -23,6 +23,7 @@ import com.intellij.patterns.CharPattern
|
|||||||
import com.intellij.patterns.ElementPattern
|
import com.intellij.patterns.ElementPattern
|
||||||
import com.intellij.patterns.PatternCondition
|
import com.intellij.patterns.PatternCondition
|
||||||
import com.intellij.patterns.StandardPatterns
|
import com.intellij.patterns.StandardPatterns
|
||||||
|
import com.intellij.psi.PsiCompiledElement
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.search.DelegatingGlobalSearchScope
|
import com.intellij.psi.search.DelegatingGlobalSearchScope
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
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.KotlinIndicesHelper
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.ResolutionFacade
|
import org.jetbrains.kotlin.idea.caches.resolve.ResolutionFacade
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
|
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.codeInsight.ReferenceVariantsHelper
|
||||||
import org.jetbrains.kotlin.idea.completion.smart.SmartCompletion
|
import org.jetbrains.kotlin.idea.completion.smart.SmartCompletion
|
||||||
import org.jetbrains.kotlin.idea.refactoring.comparePossiblyOverridingDescriptors
|
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) }
|
get() = KotlinIndicesHelper(project, resolutionFacade, bindingContext!!, searchScope, moduleDescriptor) { isVisibleDescriptor(it) }
|
||||||
|
|
||||||
protected fun isVisibleDescriptor(descriptor: DeclarationDescriptor): Boolean {
|
protected fun isVisibleDescriptor(descriptor: DeclarationDescriptor): Boolean {
|
||||||
if (configuration.completeNonAccessibleDeclarations) return true
|
|
||||||
|
|
||||||
if (descriptor is DeclarationDescriptorWithVisibility && inDescriptor != null) {
|
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
|
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);
|
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")
|
@TestMetadata("RecieverMembersFromExtAccessor.kt")
|
||||||
public void testRecieverMembersFromExtAccessor() throws Exception {
|
public void testRecieverMembersFromExtAccessor() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/RecieverMembersFromExtAccessor.kt");
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/RecieverMembersFromExtAccessor.kt");
|
||||||
|
|||||||
@@ -889,6 +889,12 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT
|
|||||||
doTest(fileName);
|
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")
|
@TestMetadata("RecieverMembersFromExtAccessor.kt")
|
||||||
public void testRecieverMembersFromExtAccessor() throws Exception {
|
public void testRecieverMembersFromExtAccessor() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/RecieverMembersFromExtAccessor.kt");
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/RecieverMembersFromExtAccessor.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user