Name filters filter by Name instead of String

This commit is contained in:
Valentin Kipyatkov
2014-10-31 16:16:54 +03:00
parent 8b2f6007c2
commit c7527e4a4d
26 changed files with 48 additions and 45 deletions
@@ -23,13 +23,14 @@ import org.jetbrains.jet.lang.resolve.name.FqName
import org.jetbrains.jet.lang.resolve.java.structure.impl.JavaElementCollectionFromPsiArrayUtil.classes import org.jetbrains.jet.lang.resolve.java.structure.impl.JavaElementCollectionFromPsiArrayUtil.classes
import org.jetbrains.jet.lang.resolve.java.structure.impl.JavaElementCollectionFromPsiArrayUtil.packages import org.jetbrains.jet.lang.resolve.java.structure.impl.JavaElementCollectionFromPsiArrayUtil.packages
import org.jetbrains.jet.lang.resolve.java.structure.JavaClass import org.jetbrains.jet.lang.resolve.java.structure.JavaClass
import org.jetbrains.jet.lang.resolve.name.Name
public class JavaPackageImpl(psiPackage: PsiPackage) : JavaElementImpl<PsiPackage>(psiPackage), JavaPackage { public class JavaPackageImpl(psiPackage: PsiPackage) : JavaElementImpl<PsiPackage>(psiPackage), JavaPackage {
override fun getClasses(nameFilter: (String) -> Boolean): MutableCollection<JavaClass> { override fun getClasses(nameFilter: (Name) -> Boolean): MutableCollection<JavaClass> {
val psiClasses = getPsi().getClasses().filter { val psiClasses = getPsi().getClasses().filter {
val name = it.getName() val name = it.getName()
name != null && nameFilter(name) name != null && nameFilter(Name.identifier(name))
} }
return classes(psiClasses) return classes(psiClasses)
} }
@@ -174,7 +174,7 @@ public class LazyImportScope(private val resolveSession: ResolveSession,
override fun getDeclarationsByLabel(labelName: Name): Collection<DeclarationDescriptor> = listOf() override fun getDeclarationsByLabel(labelName: Name): Collection<DeclarationDescriptor> = listOf()
override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean, override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean,
nameFilter: (String) -> Boolean) = collectFromImports(LookupMode.EVERYTHING, JetScopeSelectorUtil.ALL_DESCRIPTORS_SCOPE_SELECTOR) nameFilter: (Name) -> Boolean) = collectFromImports(LookupMode.EVERYTHING, JetScopeSelectorUtil.ALL_DESCRIPTORS_SCOPE_SELECTOR)
override fun getImplicitReceiversHierarchy() = listOf<ReceiverParameterDescriptor>() override fun getImplicitReceiversHierarchy() = listOf<ReceiverParameterDescriptor>()
@@ -121,7 +121,7 @@ public abstract class AbstractLazyMemberScope<D : DeclarationDescriptor, DP : De
override fun getDeclarationsByLabel(labelName: Name) = setOf<DeclarationDescriptor>() override fun getDeclarationsByLabel(labelName: Name) = setOf<DeclarationDescriptor>()
override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean, override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean,
nameFilter: (String) -> Boolean): Collection<DeclarationDescriptor> { nameFilter: (Name) -> Boolean): Collection<DeclarationDescriptor> {
val result = LinkedHashSet(descriptorsFromDeclaredElements()) val result = LinkedHashSet(descriptorsFromDeclaredElements())
result.addAll(extraDescriptors()) result.addAll(extraDescriptors())
return result return result
@@ -95,7 +95,7 @@ public class WritableScopeImpl(scope: JetScope,
} }
override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean, override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean,
nameFilter: (String) -> Boolean): Collection<DeclarationDescriptor> { nameFilter: (Name) -> Boolean): Collection<DeclarationDescriptor> {
checkMayRead() checkMayRead()
changeLockLevel(WritableScope.LockLevel.READING) changeLockLevel(WritableScope.LockLevel.READING)
@@ -165,7 +165,7 @@ public class WriteThroughScope(outerScope: JetScope, private val writableWorker:
} }
override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean, override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean,
nameFilter: (String) -> Boolean): Collection<DeclarationDescriptor> { nameFilter: (Name) -> Boolean): Collection<DeclarationDescriptor> {
checkMayRead() checkMayRead()
if (_allDescriptors == null) { if (_allDescriptors == null) {
@@ -230,7 +230,7 @@ public class LazyJavaClassMemberScope(
DescriptorUtils.getDispatchReceiverParameterIfNeeded(getContainingDeclaration()) DescriptorUtils.getDispatchReceiverParameterIfNeeded(getContainingDeclaration())
override fun getClassifier(name: Name): ClassifierDescriptor? = nestedClasses(name) override fun getClassifier(name: Name): ClassifierDescriptor? = nestedClasses(name)
override fun getClassNames(nameFilter: (String) -> Boolean): Collection<Name> = nestedClassIndex().keySet() + enumEntryIndex().keySet() override fun getClassNames(nameFilter: (Name) -> Boolean): Collection<Name> = nestedClassIndex().keySet() + enumEntryIndex().keySet()
// TODO // TODO
override fun getImplicitReceiversHierarchy(): List<ReceiverParameterDescriptor> = listOf() override fun getImplicitReceiversHierarchy(): List<ReceiverParameterDescriptor> = listOf()
@@ -288,16 +288,16 @@ public abstract class LazyJavaMemberScope(
override fun getOwnDeclaredDescriptors() = getDescriptors() override fun getOwnDeclaredDescriptors() = getDescriptors()
override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean, override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean,
nameFilter: (String) -> Boolean) = allDescriptors() nameFilter: (Name) -> Boolean) = allDescriptors()
//TODO: use nameFilter //TODO: use nameFilter
protected fun computeDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean, protected fun computeDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean,
nameFilter: (String) -> Boolean): List<DeclarationDescriptor> { nameFilter: (Name) -> Boolean): List<DeclarationDescriptor> {
val result = LinkedHashSet<DeclarationDescriptor>() val result = LinkedHashSet<DeclarationDescriptor>()
if (kindFilter(JetScope.DescriptorKind.CLASSIFIER)) { if (kindFilter(JetScope.DescriptorKind.CLASSIFIER)) {
for (name in getClassNames(nameFilter)) { for (name in getClassNames(nameFilter)) {
if (nameFilter(name.asString())) { if (nameFilter(name)) {
// Null signifies that a class found in Java is not present in Kotlin (e.g. package class) // Null signifies that a class found in Java is not present in Kotlin (e.g. package class)
result.addIfNotNull(getClassifier(name)) result.addIfNotNull(getClassifier(name))
} }
@@ -323,11 +323,11 @@ public abstract class LazyJavaMemberScope(
protected open fun addExtraDescriptors(result: MutableSet<DeclarationDescriptor>, protected open fun addExtraDescriptors(result: MutableSet<DeclarationDescriptor>,
kindFilter: (JetScope.DescriptorKind) -> Boolean, kindFilter: (JetScope.DescriptorKind) -> Boolean,
nameFilter: (String) -> Boolean) { nameFilter: (Name) -> Boolean) {
// Do nothing // Do nothing
} }
protected abstract fun getClassNames(nameFilter: (String) -> Boolean): Collection<Name> protected abstract fun getClassNames(nameFilter: (Name) -> Boolean): Collection<Name>
override fun toString() = "Lazy scope for ${getContainingDeclaration()}" override fun toString() = "Lazy scope for ${getContainingDeclaration()}"
@@ -102,7 +102,7 @@ public class LazyPackageFragmentScopeForJavaPackage(
override fun addExtraDescriptors(result: MutableSet<DeclarationDescriptor>, override fun addExtraDescriptors(result: MutableSet<DeclarationDescriptor>,
kindFilter: (JetScope.DescriptorKind) -> Boolean, kindFilter: (JetScope.DescriptorKind) -> Boolean,
nameFilter: (String) -> Boolean) { nameFilter: (Name) -> Boolean) {
result.addAll(deserializedPackageScope().getDescriptors(kindFilter, nameFilter)) result.addAll(deserializedPackageScope().getDescriptors(kindFilter, nameFilter))
} }
@@ -111,7 +111,7 @@ public class LazyPackageFragmentScopeForJavaPackage(
override fun getAllMethodNames(): Collection<Name> = getClassNames({ true }) override fun getAllMethodNames(): Collection<Name> = getClassNames({ true })
} }
override fun getClassNames(nameFilter: (String) -> Boolean): Collection<Name> { override fun getClassNames(nameFilter: (Name) -> Boolean): Collection<Name> {
return jPackage.getClasses(nameFilter).stream() return jPackage.getClasses(nameFilter).stream()
.filter { c -> c.getOriginKind() != JavaClass.OriginKind.KOTLIN_LIGHT_CLASS } .filter { c -> c.getOriginKind() != JavaClass.OriginKind.KOTLIN_LIGHT_CLASS }
.map { c -> c.getName() }.toList() .map { c -> c.getName() }.toList()
@@ -134,7 +134,7 @@ public class LazyPackageFragmentScopeForJavaPackage(
override fun getAllPropertyNames() = listOf<Name>() override fun getAllPropertyNames() = listOf<Name>()
// we don't use implementation from super which caches all descriptors and does not use filters // we don't use implementation from super which caches all descriptors and does not use filters
override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean, nameFilter: (String) -> Boolean): Collection<DeclarationDescriptor> { override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean, nameFilter: (Name) -> Boolean): Collection<DeclarationDescriptor> {
return computeDescriptors(kindFilter, nameFilter) return computeDescriptors(kindFilter, nameFilter)
} }
} }
@@ -164,7 +164,7 @@ public class LazyJavaStaticClassScope(
return super.getAllFunctionNames() return super.getAllFunctionNames()
} }
override fun getClassNames(nameFilter: (String) -> Boolean): Collection<Name> = listOf() override fun getClassNames(nameFilter: (Name) -> Boolean): Collection<Name> = listOf()
override fun getClassifier(name: Name): ClassifierDescriptor? = null override fun getClassifier(name: Name): ClassifierDescriptor? = null
override fun getSubPackages(): Collection<FqName> = listOf() override fun getSubPackages(): Collection<FqName> = listOf()
@@ -17,9 +17,10 @@
package org.jetbrains.jet.lang.resolve.java.structure package org.jetbrains.jet.lang.resolve.java.structure
import org.jetbrains.jet.lang.resolve.name.FqName import org.jetbrains.jet.lang.resolve.name.FqName
import org.jetbrains.jet.lang.resolve.name.Name
public trait JavaPackage : JavaElement { public trait JavaPackage : JavaElement {
public fun getClasses(nameFilter: (String) -> Boolean): Collection<JavaClass> public fun getClasses(nameFilter: (Name) -> Boolean): Collection<JavaClass>
public fun getSubPackages(): Collection<JavaPackage> public fun getSubPackages(): Collection<JavaPackage>
@@ -258,7 +258,7 @@ public class EnumEntrySyntheticClassDescriptor extends ClassDescriptorBase {
@Override @Override
public Collection<DeclarationDescriptor> getDescriptors( public Collection<DeclarationDescriptor> getDescriptors(
@NotNull Function1<? super DescriptorKind, ? extends Boolean> kindFilter, @NotNull Function1<? super DescriptorKind, ? extends Boolean> kindFilter,
@NotNull Function1<? super String, ? extends Boolean> nameFilter @NotNull Function1<? super Name, ? extends Boolean> nameFilter
) { ) {
return allDescriptors.invoke(); return allDescriptors.invoke();
} }
@@ -36,7 +36,7 @@ public class SubpackagesScope(private val containingDeclaration: PackageViewDesc
} }
override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean, override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean,
nameFilter: (String) -> Boolean): Collection<DeclarationDescriptor> { nameFilter: (Name) -> Boolean): Collection<DeclarationDescriptor> {
val subFqNames = containingDeclaration.getModule().getPackageFragmentProvider().getSubPackagesOf(containingDeclaration.getFqName()) val subFqNames = containingDeclaration.getModule().getPackageFragmentProvider().getSubPackagesOf(containingDeclaration.getFqName())
val result = ArrayList<DeclarationDescriptor>(subFqNames.size()) val result = ArrayList<DeclarationDescriptor>(subFqNames.size())
for (subFqName in subFqNames) { for (subFqName in subFqNames) {
@@ -59,7 +59,7 @@ public abstract class AbstractScopeAdapter : JetScope {
} }
override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean, override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean,
nameFilter: (String) -> Boolean): Collection<DeclarationDescriptor> { nameFilter: (Name) -> Boolean): Collection<DeclarationDescriptor> {
return workerScope.getDescriptors(kindFilter, nameFilter) return workerScope.getDescriptors(kindFilter, nameFilter)
} }
@@ -60,7 +60,7 @@ public class ChainedScope(private val containingDeclaration: DeclarationDescript
override fun getDeclarationsByLabel(labelName: Name) = scopeChain.flatMap { it.getDeclarationsByLabel(labelName) } override fun getDeclarationsByLabel(labelName: Name) = scopeChain.flatMap { it.getDeclarationsByLabel(labelName) }
override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean, override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean,
nameFilter: (String) -> Boolean): Collection<DeclarationDescriptor> { nameFilter: (Name) -> Boolean): Collection<DeclarationDescriptor> {
val result = HashSet<DeclarationDescriptor>() val result = HashSet<DeclarationDescriptor>()
scopeChain.flatMapTo(result) { it.getDescriptors(kindFilter, nameFilter) } scopeChain.flatMapTo(result) { it.getDescriptors(kindFilter, nameFilter) }
return result return result
@@ -38,7 +38,7 @@ public class FilteringScope(private val workerScope: JetScope, private val predi
override fun getLocalVariable(name: Name) = filterDescriptor(workerScope.getLocalVariable(name)) override fun getLocalVariable(name: Name) = filterDescriptor(workerScope.getLocalVariable(name))
override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean, override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean,
nameFilter: (String) -> Boolean) = workerScope.getDescriptors(kindFilter, nameFilter).filter(predicate) nameFilter: (Name) -> Boolean) = workerScope.getDescriptors(kindFilter, nameFilter).filter(predicate)
override fun getImplicitReceiversHierarchy() = workerScope.getImplicitReceiversHierarchy() override fun getImplicitReceiversHierarchy() = workerScope.getImplicitReceiversHierarchy()
@@ -27,7 +27,7 @@ public class InnerClassesScopeWrapper(override val workerScope: JetScope) : Abst
override fun getDeclarationsByLabel(labelName: Name) = workerScope.getDeclarationsByLabel(labelName).filterIsInstance(javaClass<ClassDescriptor>()) override fun getDeclarationsByLabel(labelName: Name) = workerScope.getDeclarationsByLabel(labelName).filterIsInstance(javaClass<ClassDescriptor>())
override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean, override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean,
nameFilter: (String) -> Boolean): List<ClassDescriptor> { nameFilter: (Name) -> Boolean): List<ClassDescriptor> {
if (!kindFilter(JetScope.DescriptorKind.CLASSIFIER)) return listOf() if (!kindFilter(JetScope.DescriptorKind.CLASSIFIER)) return listOf()
return workerScope.getDescriptors({ it == JetScope.DescriptorKind.CLASSIFIER }, nameFilter).filterIsInstance(javaClass<ClassDescriptor>()) return workerScope.getDescriptors({ it == JetScope.DescriptorKind.CLASSIFIER }, nameFilter).filterIsInstance(javaClass<ClassDescriptor>())
} }
@@ -51,7 +51,7 @@ public trait JetScope {
* (that means that the implementation is not obliged to use the filters but may do so when it gives any performance advantage). * (that means that the implementation is not obliged to use the filters but may do so when it gives any performance advantage).
*/ */
public fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean = DescriptorKind.ALL, public fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean = DescriptorKind.ALL,
nameFilter: (String) -> Boolean = { true }): Collection<DeclarationDescriptor> nameFilter: (Name) -> Boolean = { true }): Collection<DeclarationDescriptor>
/** /**
* Adds receivers to the list in order of locality, so that the closest (the most local) receiver goes first * Adds receivers to the list in order of locality, so that the closest (the most local) receiver goes first
@@ -100,7 +100,7 @@ public trait JetScope {
} }
class object { class object {
public val ALL_NAME_FILTER: (String) -> Boolean = { true } public val ALL_NAME_FILTER: (Name) -> Boolean = { true }
} }
} }
@@ -35,7 +35,7 @@ public abstract class JetScopeImpl : JetScope {
override fun getDeclarationsByLabel(labelName: Name): Collection<DeclarationDescriptor> = listOf() override fun getDeclarationsByLabel(labelName: Name): Collection<DeclarationDescriptor> = listOf()
override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean, override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean,
nameFilter: (String) -> Boolean): Collection<DeclarationDescriptor> = listOf() nameFilter: (Name) -> Boolean): Collection<DeclarationDescriptor> = listOf()
override fun getImplicitReceiversHierarchy(): List<ReceiverParameterDescriptor> = listOf() override fun getImplicitReceiversHierarchy(): List<ReceiverParameterDescriptor> = listOf()
@@ -38,7 +38,7 @@ public class StaticScopeForKotlinClass(
} }
override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean, override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean,
nameFilter: (String) -> Boolean) = functions nameFilter: (Name) -> Boolean) = functions
override fun getOwnDeclaredDescriptors() = functions override fun getOwnDeclaredDescriptors() = functions
@@ -85,7 +85,7 @@ public class SubstitutingScope(private val workerScope: JetScope, private val su
} }
override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean, override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean,
nameFilter: (String) -> Boolean) = _allDescriptors nameFilter: (Name) -> Boolean) = _allDescriptors
override fun getOwnDeclaredDescriptors() = substitute(workerScope.getOwnDeclaredDescriptors()) override fun getOwnDeclaredDescriptors() = substitute(workerScope.getOwnDeclaredDescriptors())
@@ -127,7 +127,7 @@ public class ErrorUtils {
@Override @Override
public Collection<DeclarationDescriptor> getDescriptors( public Collection<DeclarationDescriptor> getDescriptors(
@NotNull Function1<? super DescriptorKind, ? extends Boolean> kindFilter, @NotNull Function1<? super DescriptorKind, ? extends Boolean> kindFilter,
@NotNull Function1<? super String, ? extends Boolean> nameFilter @NotNull Function1<? super Name, ? extends Boolean> nameFilter
) { ) {
return Collections.emptyList(); return Collections.emptyList();
} }
@@ -208,7 +208,7 @@ public class ErrorUtils {
@Override @Override
public Collection<DeclarationDescriptor> getDescriptors( public Collection<DeclarationDescriptor> getDescriptors(
@NotNull Function1<? super DescriptorKind, ? extends Boolean> kindFilter, @NotNull Function1<? super DescriptorKind, ? extends Boolean> kindFilter,
@NotNull Function1<? super String, ? extends Boolean> nameFilter @NotNull Function1<? super Name, ? extends Boolean> nameFilter
) { ) {
throw new IllegalStateException(); throw new IllegalStateException();
} }
@@ -120,7 +120,7 @@ public abstract class DeserializedMemberScope protected(
protected abstract fun addNonDeclaredDescriptors(result: MutableCollection<DeclarationDescriptor>) protected abstract fun addNonDeclaredDescriptors(result: MutableCollection<DeclarationDescriptor>)
override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean, override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean,
nameFilter: (String) -> Boolean): Collection<DeclarationDescriptor> = allDescriptors.invoke() nameFilter: (Name) -> Boolean): Collection<DeclarationDescriptor> = allDescriptors.invoke()
override fun getImplicitReceiversHierarchy(): List<ReceiverParameterDescriptor> { override fun getImplicitReceiversHierarchy(): List<ReceiverParameterDescriptor> {
val receiver = getImplicitReceiver() val receiver = getImplicitReceiver()
@@ -30,19 +30,20 @@ import org.jetbrains.jet.lang.types.expressions.ExpressionTypingUtils
import java.util.* import java.util.*
import org.jetbrains.jet.lang.resolve.bindingContextUtil.getDataFlowInfo import org.jetbrains.jet.lang.resolve.bindingContextUtil.getDataFlowInfo
import org.jetbrains.jet.lang.resolve.descriptorUtil.isExtension import org.jetbrains.jet.lang.resolve.descriptorUtil.isExtension
import org.jetbrains.jet.lang.resolve.name.Name
public object TipsManager{ public object TipsManager{
public fun getReferenceVariants(expression: JetSimpleNameExpression, public fun getReferenceVariants(expression: JetSimpleNameExpression,
context: BindingContext, context: BindingContext,
nameFilter: (String) -> Boolean, nameFilter: (Name) -> Boolean,
visibilityFilter: (DeclarationDescriptor) -> Boolean): Collection<DeclarationDescriptor> { visibilityFilter: (DeclarationDescriptor) -> Boolean): Collection<DeclarationDescriptor> {
return getReferenceVariants(expression, context, nameFilter).filter(visibilityFilter) return getReferenceVariants(expression, context, nameFilter).filter(visibilityFilter)
} }
private fun getReferenceVariants(expression: JetSimpleNameExpression, private fun getReferenceVariants(expression: JetSimpleNameExpression,
context: BindingContext, context: BindingContext,
nameFilter: (String) -> Boolean): Collection<DeclarationDescriptor> { nameFilter: (Name) -> Boolean): Collection<DeclarationDescriptor> {
val receiverExpression = expression.getReceiverExpression() val receiverExpression = expression.getReceiverExpression()
val parent = expression.getParent() val parent = expression.getParent()
val resolutionScope = context[BindingContext.RESOLUTION_SCOPE, expression] ?: return listOf() val resolutionScope = context[BindingContext.RESOLUTION_SCOPE, expression] ?: return listOf()
@@ -105,7 +106,7 @@ public object TipsManager{
public fun getPackageReferenceVariants(expression: JetSimpleNameExpression, public fun getPackageReferenceVariants(expression: JetSimpleNameExpression,
context: BindingContext, context: BindingContext,
nameFilter: (String) -> Boolean): Collection<DeclarationDescriptor> { nameFilter: (Name) -> Boolean): Collection<DeclarationDescriptor> {
val resolutionScope = context[BindingContext.RESOLUTION_SCOPE, expression] ?: return listOf() val resolutionScope = context[BindingContext.RESOLUTION_SCOPE, expression] ?: return listOf()
return excludeNonPackageDescriptors(resolutionScope.getDescriptors({ it == JetScope.DescriptorKind.PACKAGE }, nameFilter)) return excludeNonPackageDescriptors(resolutionScope.getDescriptors({ it == JetScope.DescriptorKind.PACKAGE }, nameFilter))
} }
@@ -87,10 +87,7 @@ abstract class CompletionSessionBase(protected val configuration: CompletionSess
protected abstract fun doComplete() protected abstract fun doComplete()
protected fun getReferenceVariants(): Collection<DeclarationDescriptor> { protected fun getReferenceVariants(): Collection<DeclarationDescriptor> {
return TipsManager.getReferenceVariants(jetReference!!.expression, return TipsManager.getReferenceVariants(jetReference!!.expression, bindingContext!!, prefixMatcher.asNameFilter(), { isVisibleDescriptor(it) })
bindingContext!!,
{ prefixMatcher.prefixMatches(it) },
{ isVisibleDescriptor(it) })
} }
protected fun shouldRunTopLevelCompletion(): Boolean { protected fun shouldRunTopLevelCompletion(): Boolean {
@@ -28,6 +28,8 @@ import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor
import org.jetbrains.jet.lang.descriptors.ClassKind import org.jetbrains.jet.lang.descriptors.ClassKind
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor
import org.jetbrains.jet.plugin.util.IdeDescriptorRenderers import org.jetbrains.jet.plugin.util.IdeDescriptorRenderers
import com.intellij.codeInsight.completion.PrefixMatcher
import org.jetbrains.jet.lang.resolve.name.Name
enum class ItemPriority { enum class ItemPriority {
MULTIPLE_ARGUMENTS_ITEM MULTIPLE_ARGUMENTS_ITEM
@@ -76,3 +78,5 @@ private fun qualifierName(descriptor: DeclarationDescriptor): String? = when (de
is PackageFragmentDescriptor -> IdeDescriptorRenderers.SOURCE_CODE.renderFqName(descriptor.fqName) is PackageFragmentDescriptor -> IdeDescriptorRenderers.SOURCE_CODE.renderFqName(descriptor.fqName)
else -> null else -> null
} }
fun PrefixMatcher.asNameFilter() = { (name: Name) -> !name.isSpecial() && prefixMatches(name.getIdentifier()) }
@@ -53,7 +53,7 @@ object PackageDirectiveCompletion {
val resolveSession = ref.expression.getLazyResolveSession() val resolveSession = ref.expression.getLazyResolveSession()
val bindingContext = resolveSession.resolveToElement(ref.expression) val bindingContext = resolveSession.resolveToElement(ref.expression)
val variants = TipsManager.getPackageReferenceVariants(ref.expression, bindingContext, { prefixMatcher.prefixMatches(it) }) val variants = TipsManager.getPackageReferenceVariants(ref.expression, bindingContext, prefixMatcher.asNameFilter())
for (variant in variants) { for (variant in variants) {
val lookupElement = KotlinLookupElementFactory.createLookupElement(resolveSession, variant) val lookupElement = KotlinLookupElementFactory.createLookupElement(resolveSession, variant)
if (!lookupElement.getLookupString().contains(DUMMY_IDENTIFIER)) { if (!lookupElement.getLookupString().contains(DUMMY_IDENTIFIER)) {
@@ -399,13 +399,12 @@ public class JetFunctionParameterInfoHandler implements ParameterInfoHandlerWith
} }
}; };
Name refName = callNameExpression.getReferencedNameAsName(); final Name refName = callNameExpression.getReferencedNameAsName();
final String refNameString = refName.isSpecial() ? null : refName.asString(); Function1<Name, Boolean> nameFilter = new Function1<Name, Boolean>() {
Function1<String, Boolean> nameFilter = new Function1<String, Boolean>() {
@Override @Override
public Boolean invoke(String s) { public Boolean invoke(Name name) {
return refNameString == null || s.equals(refNameString); return name.equals(refName);
} }
}; };
Collection<DeclarationDescriptor> variants = TipsManager.INSTANCE$.getReferenceVariants(callNameExpression, bindingContext, nameFilter, visibilityFilter); Collection<DeclarationDescriptor> variants = TipsManager.INSTANCE$.getReferenceVariants(callNameExpression, bindingContext, nameFilter, visibilityFilter);