Disabled parameter name completion where it makes no sense
This commit is contained in:
@@ -44,10 +44,7 @@ import org.jetbrains.kotlin.idea.util.makeNotNullable
|
|||||||
import org.jetbrains.kotlin.lexer.JetTokens
|
import org.jetbrains.kotlin.lexer.JetTokens
|
||||||
import org.jetbrains.kotlin.load.java.descriptors.SamConstructorDescriptorKindExclude
|
import org.jetbrains.kotlin.load.java.descriptors.SamConstructorDescriptorKindExclude
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
import org.jetbrains.kotlin.psi.psiUtil.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.isAncestor
|
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf
|
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.prevLeaf
|
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.resolve.bindingContextUtil.getDataFlowInfo
|
import org.jetbrains.kotlin.resolve.bindingContextUtil.getDataFlowInfo
|
||||||
import org.jetbrains.kotlin.resolve.calls.callUtil.getCall
|
import org.jetbrains.kotlin.resolve.calls.callUtil.getCall
|
||||||
@@ -289,7 +286,7 @@ class BasicCompletionSession(configuration: CompletionSessionConfiguration,
|
|||||||
null
|
null
|
||||||
}
|
}
|
||||||
|
|
||||||
private val parameterNameAndTypeCompletion = if (completionKind == CompletionKind.PARAMETER_NAME || completionKind == CompletionKind.ANNOTATION_TYPES_OR_PARAMETER_NAME)
|
private val parameterNameAndTypeCompletion = if (shouldCompleteParameterNameAndType())
|
||||||
ParameterNameAndTypeCompletion(collector, lookupElementFactory, prefixMatcher, resolutionFacade)
|
ParameterNameAndTypeCompletion(collector, lookupElementFactory, prefixMatcher, resolutionFacade)
|
||||||
else
|
else
|
||||||
null
|
null
|
||||||
@@ -332,6 +329,25 @@ class BasicCompletionSession(configuration: CompletionSessionConfiguration,
|
|||||||
return CompletionKind.ALL
|
return CompletionKind.ALL
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun shouldCompleteParameterNameAndType(): Boolean {
|
||||||
|
when (completionKind) {
|
||||||
|
CompletionKind.PARAMETER_NAME, CompletionKind.ANNOTATION_TYPES_OR_PARAMETER_NAME -> {
|
||||||
|
val parameter = position.getNonStrictParentOfType<JetParameter>()!!
|
||||||
|
val owner = parameter.getParent().getParent()
|
||||||
|
return parameter != (owner as? JetCatchClause)?.getCatchParameter() && parameter != (owner as? JetPropertyAccessor)?.getParameter()
|
||||||
|
}
|
||||||
|
|
||||||
|
else -> return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public fun disableAutoPopup(): Boolean {
|
||||||
|
return when (completionKind) {
|
||||||
|
CompletionKind.PARAMETER_NAME, CompletionKind.ANNOTATION_TYPES_OR_PARAMETER_NAME -> !shouldCompleteParameterNameAndType()
|
||||||
|
else -> false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun doComplete() {
|
override fun doComplete() {
|
||||||
assert(parameters.getCompletionType() == CompletionType.BASIC)
|
assert(parameters.getCompletionType() == CompletionType.BASIC)
|
||||||
|
|
||||||
|
|||||||
+5
@@ -225,6 +225,11 @@ public class KotlinCompletionContributor : CompletionContributor() {
|
|||||||
if (parameters.getCompletionType() == CompletionType.BASIC) {
|
if (parameters.getCompletionType() == CompletionType.BASIC) {
|
||||||
val session = BasicCompletionSession(configuration, parameters, result)
|
val session = BasicCompletionSession(configuration, parameters, result)
|
||||||
|
|
||||||
|
if (parameters.isAutoPopup() && session.disableAutoPopup()) {
|
||||||
|
result.stopHere()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
val somethingAdded = session.complete()
|
val somethingAdded = session.complete()
|
||||||
if (!somethingAdded && parameters.getInvocationCount() < 2) {
|
if (!somethingAdded && parameters.getInvocationCount() < 2) {
|
||||||
// Rerun completion if nothing was found
|
// Rerun completion if nothing was found
|
||||||
|
|||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
fun f() {
|
||||||
|
try {
|
||||||
|
|
||||||
|
}
|
||||||
|
catch(e<caret>) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// INVOCATION_COUNT: 0
|
||||||
|
// NUMBER: 0
|
||||||
+6
@@ -0,0 +1,6 @@
|
|||||||
|
var v: Int
|
||||||
|
get(){}
|
||||||
|
set(v<caret>)
|
||||||
|
|
||||||
|
// INVOCATION_COUNT: 0
|
||||||
|
// NUMBER: 0
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
fun f() {
|
||||||
|
try {
|
||||||
|
|
||||||
|
}
|
||||||
|
catch(e<caret>) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ABSENT: "exception"
|
||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
package pack
|
||||||
|
|
||||||
|
class Boo
|
||||||
|
|
||||||
|
fun f() {
|
||||||
|
val handler = { b<caret> }
|
||||||
|
}
|
||||||
|
|
||||||
|
// ABSENT: boo
|
||||||
+7
@@ -0,0 +1,7 @@
|
|||||||
|
class Voo
|
||||||
|
|
||||||
|
var v: Int
|
||||||
|
get(){}
|
||||||
|
set(v<caret>)
|
||||||
|
|
||||||
|
// ABSENT: voo
|
||||||
+30
@@ -1053,6 +1053,18 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("NoCatchParameterAutopopup.kt")
|
||||||
|
public void testNoCatchParameterAutopopup() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/annotations/NoCatchParameterAutopopup.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("NoSetterParameterAutopopup.kt")
|
||||||
|
public void testNoSetterParameterAutopopup() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/annotations/NoSetterParameterAutopopup.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("ParameterAnnotation1.kt")
|
@TestMetadata("ParameterAnnotation1.kt")
|
||||||
public void testParameterAnnotation1() throws Exception {
|
public void testParameterAnnotation1() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/annotations/ParameterAnnotation1.kt");
|
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/annotations/ParameterAnnotation1.kt");
|
||||||
@@ -1410,6 +1422,24 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("NotForCatchParameter.kt")
|
||||||
|
public void testNotForCatchParameter() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/parameterNameAndType/NotForCatchParameter.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("NotForLambdaParameter.kt")
|
||||||
|
public void testNotForLambdaParameter() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/parameterNameAndType/NotForLambdaParameter.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("NotForSetterParameter.kt")
|
||||||
|
public void testNotForSetterParameter() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/parameterNameAndType/NotForSetterParameter.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("NotImported.kt")
|
@TestMetadata("NotImported.kt")
|
||||||
public void testNotImported() throws Exception {
|
public void testNotImported() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/parameterNameAndType/NotImported.kt");
|
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/parameterNameAndType/NotImported.kt");
|
||||||
|
|||||||
+30
@@ -1053,6 +1053,18 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("NoCatchParameterAutopopup.kt")
|
||||||
|
public void testNoCatchParameterAutopopup() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/annotations/NoCatchParameterAutopopup.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("NoSetterParameterAutopopup.kt")
|
||||||
|
public void testNoSetterParameterAutopopup() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/annotations/NoSetterParameterAutopopup.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("ParameterAnnotation1.kt")
|
@TestMetadata("ParameterAnnotation1.kt")
|
||||||
public void testParameterAnnotation1() throws Exception {
|
public void testParameterAnnotation1() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/annotations/ParameterAnnotation1.kt");
|
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/annotations/ParameterAnnotation1.kt");
|
||||||
@@ -1410,6 +1422,24 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("NotForCatchParameter.kt")
|
||||||
|
public void testNotForCatchParameter() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/parameterNameAndType/NotForCatchParameter.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("NotForLambdaParameter.kt")
|
||||||
|
public void testNotForLambdaParameter() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/parameterNameAndType/NotForLambdaParameter.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("NotForSetterParameter.kt")
|
||||||
|
public void testNotForSetterParameter() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/parameterNameAndType/NotForSetterParameter.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("NotImported.kt")
|
@TestMetadata("NotImported.kt")
|
||||||
public void testNotImported() throws Exception {
|
public void testNotImported() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/parameterNameAndType/NotImported.kt");
|
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/parameterNameAndType/NotImported.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user