Completion: more correct detection of keyword items on sorting
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user