Only named parameters in completion when nothing else can be
This commit is contained in:
@@ -87,26 +87,28 @@ class BasicCompletionSession(configuration: CompletionSessionConfiguration,
|
||||
}
|
||||
|
||||
private fun collectElements() {
|
||||
if (jetReference != null && !isOnlyKeywordCompletion()) {
|
||||
if (shouldRunOnlyTypeCompletion()) {
|
||||
if (configuration.completeNonImportedDeclarations) {
|
||||
TypesCompletion(parameters, resolveSession, prefixMatcher).addAllTypes(collector)
|
||||
if (!NamedParametersCompletion.isOnlyNamedParameterExpected(position)) {
|
||||
if (jetReference != null && !isOnlyKeywordCompletion()) {
|
||||
if (shouldRunOnlyTypeCompletion()) {
|
||||
if (configuration.completeNonImportedDeclarations) {
|
||||
TypesCompletion(parameters, resolveSession, prefixMatcher).addAllTypes(collector)
|
||||
}
|
||||
else {
|
||||
addReferenceVariants { isPartOfTypeDeclaration(it) }
|
||||
JavaCompletionContributor.advertiseSecondCompletion(position.getProject(), resultSet)
|
||||
}
|
||||
}
|
||||
else {
|
||||
addReferenceVariants { isPartOfTypeDeclaration(it) }
|
||||
JavaCompletionContributor.advertiseSecondCompletion(position.getProject(), resultSet)
|
||||
addReferenceVariants { true }
|
||||
|
||||
addNonImported()
|
||||
}
|
||||
}
|
||||
else {
|
||||
addReferenceVariants { true }
|
||||
|
||||
addNonImported()
|
||||
}
|
||||
KeywordCompletion().complete(parameters, collector)
|
||||
}
|
||||
|
||||
KeywordCompletion().complete(parameters, collector)
|
||||
|
||||
NamedParametersCompletion.complete(parameters, collector)
|
||||
NamedParametersCompletion.complete(position, collector)
|
||||
}
|
||||
|
||||
private fun addNonImported() {
|
||||
|
||||
@@ -37,6 +37,7 @@ import com.intellij.psi.filters.OrFilter
|
||||
import com.intellij.psi.filters.ClassFilter
|
||||
import org.jetbrains.jet.plugin.util.FirstChildInParentFilter
|
||||
import org.jetbrains.jet.lang.psi.psiUtil.getCallNameExpression
|
||||
import com.intellij.psi.PsiElement
|
||||
|
||||
object NamedParametersCompletion {
|
||||
private val positionFilter = AndFilter(
|
||||
@@ -50,8 +51,22 @@ object NamedParametersCompletion {
|
||||
)
|
||||
)
|
||||
|
||||
public fun complete(parameters: CompletionParameters, collector: LookupElementsCollector) {
|
||||
val position = parameters.getPosition()
|
||||
public fun isOnlyNamedParameterExpected(position: PsiElement): Boolean {
|
||||
if (!positionFilter.isAcceptable(position, position)) return false
|
||||
|
||||
val thisArgument = PsiTreeUtil.getParentOfType(position, javaClass<JetValueArgument>())!!
|
||||
|
||||
val callElement = PsiTreeUtil.getParentOfType(thisArgument, javaClass<JetCallElement>()) ?: return false
|
||||
|
||||
for (argument in callElement.getValueArguments()) {
|
||||
if (argument.isNamed()) return true
|
||||
if (argument == thisArgument) break
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
public fun complete(position: PsiElement, collector: LookupElementsCollector) {
|
||||
if (!positionFilter.isAcceptable(position, position)) return
|
||||
|
||||
val valueArgument = PsiTreeUtil.getParentOfType(position, javaClass<JetValueArgument>())!!
|
||||
|
||||
Reference in New Issue
Block a user