Completion: more correct detection of keyword items on sorting

This commit is contained in:
Valentin Kipyatkov
2014-07-29 22:46:32 +04:00
parent 448c3008f5
commit 7f0075abbd
3 changed files with 20 additions and 24 deletions
@@ -39,7 +39,6 @@ import org.jetbrains.jet.plugin.caches.JetShortNamesCache;
import org.jetbrains.jet.plugin.caches.resolve.ResolvePackage;
import org.jetbrains.jet.plugin.codeInsight.TipsManager;
import org.jetbrains.jet.plugin.completion.smart.SmartCompletion;
import org.jetbrains.jet.plugin.completion.weigher.WeigherPackage;
import org.jetbrains.jet.plugin.project.ResolveSessionForBodies;
import org.jetbrains.jet.plugin.references.JetSimpleNameReference;
@@ -78,7 +77,7 @@ class CompletionSession {
// which sometimes works incorrectly for Kotlin
result = result.withPrefixMatcher(CompletionUtil.findJavaIdentifierPrefix(parameters));
result = WeigherPackage.addJetSorting(result, parameters);
result = CompletionPackage.addKotlinSorting(result, parameters);
this.jetResult = new JetCompletionResultSet(result, resolveSession, expressionBindingContext, descriptorFilter);
}
@@ -60,8 +60,8 @@ private object KindWeigher : LookupElementWeigher("kotlin.kind") {
localOrParameter
property
probableKeyword
normal
keyword
default
packages
}
@@ -72,12 +72,12 @@ private object KindWeigher : LookupElementWeigher("kotlin.kind") {
is LocalVariableDescriptor, is ValueParameterDescriptor -> Weight.localOrParameter
is PropertyDescriptor -> Weight.property
is PackageViewDescriptor -> Weight.packages
else -> Weight.normal
else -> Weight.default
}
is String -> Weight.probableKeyword
is KeywordLookupObject -> Weight.keyword
else -> Weight.normal
else -> Weight.default
}
}
}
@@ -23,8 +23,6 @@ import com.intellij.psi.filters.position.LeftNeighbour
import org.jetbrains.jet.lang.psi.*
import org.jetbrains.jet.lexer.JetToken
import org.jetbrains.jet.lexer.JetTokens
import com.intellij.codeInsight.completion.CompletionContributor
import com.intellij.codeInsight.completion.CompletionType
import com.intellij.codeInsight.lookup.LookupElement
import com.intellij.psi.filters.position.SuperParentFilter
import com.intellij.psi.util.PsiTreeUtil
@@ -42,6 +40,8 @@ import com.intellij.psi.filters.position.FilterPattern
import com.intellij.patterns.PlatformPatterns
import com.intellij.psi.filters.position.PatternFilter
class KeywordLookupObject(val keyword: String)
public open class JetKeywordCompletionContributor() : CompletionContributor() {
{
val inTopLevel = notIdentifier(InTopFilter())
@@ -116,7 +116,7 @@ public open class JetKeywordCompletionContributor() : CompletionContributor() {
}
private fun registerScopeKeywordsCompletion(placeFilter : ElementFilter, keywords : Collection<JetToken>) {
extend(CompletionType.BASIC, getPlacePattern(placeFilter), KeywordsCompletionProvider(keywords.map { it.toString()!! }))
extend(CompletionType.BASIC, getPlacePattern(placeFilter), KeywordsCompletionProvider(keywords.map { it.toString() }))
}
private inner class BunchKeywordRegister() {
@@ -128,11 +128,11 @@ public open class JetKeywordCompletionContributor() : CompletionContributor() {
}
fun registerAll() {
for (entry in orFiltersToKeywords.entrySet()!!) {
for ((filters, token) in orFiltersToKeywords.entrySet()) {
val orFilter = OrFilter()
entry.key.forEach { filter -> orFilter.addFilter(filter) }
filters.forEach { filter -> orFilter.addFilter(filter) }
registerScopeKeywordsCompletion(orFilter, entry.value)
registerScopeKeywordsCompletion(orFilter, token)
}
}
}
@@ -232,8 +232,7 @@ public open class JetKeywordCompletionContributor() : CompletionContributor() {
private open class InPropertyBodyFilter() : PositionElementFilter() {
override fun isAcceptable(element: Any?, context: PsiElement?): Boolean {
if (!(element is PsiElement))
return false
if (element !is PsiElement) return false
val property = PsiTreeUtil.getParentOfType(context, javaClass<JetProperty>(), false)
return property != null && isAfterName(property, (element as PsiElement))
@@ -269,17 +268,15 @@ public open class JetKeywordCompletionContributor() : CompletionContributor() {
private val debugName : String
{
debugName = keywords.sort().makeString(separator = ", ")
debugName = keywords.sort().joinToString(separator = ", ")
elements = keywords.map { keyword ->
val lookupElementBuilder = LookupElementBuilder.create(keyword).bold()
if (!JetKeywordCompletionContributor.FUNCTION_KEYWORDS.contains(keyword)) {
lookupElementBuilder.withInsertHandler(JetKeywordCompletionContributor.KEYWORDS_INSERT_HANDLER)
}
else {
lookupElementBuilder.withInsertHandler(JetFunctionInsertHandler.NO_PARAMETERS_HANDLER)
}
LookupElementBuilder.create(KeywordLookupObject(keyword), keyword)
.bold()
.withInsertHandler(if (keyword !in FUNCTION_KEYWORDS)
KEYWORDS_INSERT_HANDLER
else
JetFunctionInsertHandler.NO_PARAMETERS_HANDLER)
}
}