Smart completion should not suggest variants for private signatures
#KT-4899 Fixed
This commit is contained in:
@@ -49,6 +49,8 @@ import org.jetbrains.jet.plugin.completion.smart.isSubtypeOf
|
|||||||
import org.jetbrains.jet.lang.resolve.calls.util.DelegatingCall
|
import org.jetbrains.jet.lang.resolve.calls.util.DelegatingCall
|
||||||
import org.jetbrains.jet.lang.resolve.calls.util.noErrorsInValueArguments
|
import org.jetbrains.jet.lang.resolve.calls.util.noErrorsInValueArguments
|
||||||
import org.jetbrains.jet.lang.resolve.calls.util.hasUnmappedParameters
|
import org.jetbrains.jet.lang.resolve.calls.util.hasUnmappedParameters
|
||||||
|
import org.jetbrains.jet.lang.descriptors.Visibilities
|
||||||
|
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptorWithVisibility
|
||||||
|
|
||||||
enum class Tail {
|
enum class Tail {
|
||||||
COMMA
|
COMMA
|
||||||
@@ -131,7 +133,10 @@ class ExpectedInfos(val bindingContext: BindingContext, val moduleDescriptor: Mo
|
|||||||
for (candidate: ResolvedCall<FunctionDescriptor> in results.getAllCandidates()!!) {
|
for (candidate: ResolvedCall<FunctionDescriptor> in results.getAllCandidates()!!) {
|
||||||
// consider only candidates with more arguments than in the truncated call and with all arguments before the current one matched
|
// consider only candidates with more arguments than in the truncated call and with all arguments before the current one matched
|
||||||
if (candidate.noErrorsInValueArguments() && (isFunctionLiteralArgument || candidate.hasUnmappedParameters())) {
|
if (candidate.noErrorsInValueArguments() && (isFunctionLiteralArgument || candidate.hasUnmappedParameters())) {
|
||||||
val parameters = candidate.getResultingDescriptor().getValueParameters()
|
val descriptor = candidate.getResultingDescriptor()
|
||||||
|
if (!Visibilities.isVisible(descriptor, resolutionScope.getContainingDeclaration())) continue
|
||||||
|
|
||||||
|
val parameters = descriptor.getValueParameters()
|
||||||
if (isFunctionLiteralArgument) {
|
if (isFunctionLiteralArgument) {
|
||||||
if (argumentIndex != parameters.size - 1) continue
|
if (argumentIndex != parameters.size - 1) continue
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
fun f(p1: Any, p2: String, p3: Int) {
|
||||||
|
C().foo(<caret>)
|
||||||
|
}
|
||||||
|
|
||||||
|
class C {
|
||||||
|
public fun foo(p1: String, p2: Any) {
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun foo(p1: Int) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ABSENT: p1
|
||||||
|
// EXIST: p2
|
||||||
|
// ABSENT: p3
|
||||||
@@ -301,6 +301,11 @@ public class JvmSmartCompletionTestGenerated extends AbstractJvmSmartCompletionT
|
|||||||
doTest("idea/testData/completion/smart/NoNothing.kt");
|
doTest("idea/testData/completion/smart/NoNothing.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("NoPrivateOverload.kt")
|
||||||
|
public void testNoPrivateOverload() throws Exception {
|
||||||
|
doTest("idea/testData/completion/smart/NoPrivateOverload.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("NoSillyAssignment.kt")
|
@TestMetadata("NoSillyAssignment.kt")
|
||||||
public void testNoSillyAssignment() throws Exception {
|
public void testNoSillyAssignment() throws Exception {
|
||||||
doTest("idea/testData/completion/smart/NoSillyAssignment.kt");
|
doTest("idea/testData/completion/smart/NoSillyAssignment.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user