Refactored filtering by descriptor kind so that no knowledge about SAM-constructors required in core

This commit is contained in:
Valentin Kipyatkov
2014-11-11 23:21:49 +03:00
parent 6711567d9a
commit 95b3885aa5
43 changed files with 215 additions and 200 deletions
@@ -18,9 +18,7 @@ package org.jetbrains.jet.codegen;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.progress.ProcessCanceledException;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiElement;
import com.intellij.psi.tree.IElementType;
import com.intellij.util.ArrayUtil;
@@ -58,6 +56,7 @@ import org.jetbrains.jet.lang.resolve.java.AsmTypeConstants;
import org.jetbrains.jet.lang.resolve.java.JvmAbi;
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
import org.jetbrains.jet.lang.resolve.java.descriptor.JavaClassDescriptor;
import org.jetbrains.jet.lang.resolve.java.descriptor.SamConstructorDescriptor;
import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmMethodSignature;
import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.resolve.scopes.receivers.*;
@@ -151,7 +151,7 @@ public class PackageCodegen {
return Collections.emptyList();
}
List<DeserializedCallableMemberDescriptor> callables = Lists.newArrayList();
for (DeclarationDescriptor member : packageFragment.getMemberScope().getDescriptors(JetScope.CALLABLES_MASK, JetScope.ALL_NAME_FILTER)) {
for (DeclarationDescriptor member : packageFragment.getMemberScope().getDescriptors(JetScope.KindFilter.CALLABLES, JetScope.ALL_NAME_FILTER)) {
if (member instanceof DeserializedCallableMemberDescriptor) {
callables.add((DeserializedCallableMemberDescriptor) member);
}
@@ -117,7 +117,7 @@ public class BuiltInsSerializer(val out: PrintStream?) {
})
val classNames = ArrayList<Name>()
val classifierDescriptors = DescriptorSerializer.sort(packageView.getMemberScope().getDescriptors(JetScope.CLASSIFIERS_MASK))
val classifierDescriptors = DescriptorSerializer.sort(packageView.getMemberScope().getDescriptors(JetScope.KindFilter.CLASSIFIERS))
ClassSerializationUtil.serializeClasses(classifierDescriptors, serializer, object : ClassSerializationUtil.Sink {
override fun writeClass(classDescriptor: ClassDescriptor, classProto: ProtoBuf.Class) {
@@ -216,7 +216,7 @@ public class CliLightClassGenerationSupport extends LightClassGenerationSupport
PackageViewDescriptor packageView = getModule().getPackage(fqn);
if (packageView == null) return Collections.emptyList();
Collection<DeclarationDescriptor> members = packageView.getMemberScope().getDescriptors(JetScope.PACKAGE, JetScope.ALL_NAME_FILTER);
Collection<DeclarationDescriptor> members = packageView.getMemberScope().getDescriptors(JetScope.KindFilter.PACKAGES, JetScope.ALL_NAME_FILTER);
return ContainerUtil.mapNotNull(members, new Function<DeclarationDescriptor, FqName>() {
@Override
public FqName fun(DeclarationDescriptor member) {
@@ -147,7 +147,7 @@ public class SingleAbstractMethodUtils {
) {
assert isSamInterface(samInterface) : samInterface;
SamConstructorDescriptorImpl result = new SamConstructorDescriptorImpl(owner, samInterface);
SamConstructorDescriptor result = new SamConstructorDescriptor(owner, samInterface);
TypeParameters typeParameters = recreateAndInitializeTypeParameters(samInterface.getTypeConstructor().getParameters(), result);
@@ -158,7 +158,7 @@ public class LazyImportScope(private val resolveSession: ResolveSession,
override fun getDeclarationsByLabel(labelName: Name): Collection<DeclarationDescriptor> = listOf()
override fun getDescriptors(kindFilterMask: Int, nameFilter: (Name) -> Boolean): Collection<DeclarationDescriptor> {
override fun getDescriptors(kindFilter: JetScope.KindFilter, nameFilter: (Name) -> Boolean): Collection<DeclarationDescriptor> {
return resolveSession.getStorageManager().compute {
val descriptors = LinkedHashSet<DeclarationDescriptor>()
for (directive in importsProvider.getAllImports()) {
@@ -170,7 +170,7 @@ public class LazyImportScope(private val resolveSession: ResolveSession,
val importPath = directive.getImportPath() ?: continue
val importedName = importPath.getImportedName()
if (importedName == null || nameFilter(importedName)) {
descriptors.addAll(getImportScope(directive, LookupMode.EVERYTHING).getDescriptors(kindFilterMask, nameFilter))
descriptors.addAll(getImportScope(directive, LookupMode.EVERYTHING).getDescriptors(kindFilter, nameFilter))
}
}
@@ -73,7 +73,7 @@ public abstract class AbstractPsiBasedDeclarationProvider(storageManager: Storag
protected abstract fun doCreateIndex(index: Index)
override fun getDeclarations(kindFilterMask: Int, nameFilter: (Name) -> Boolean): List<JetDeclaration>
override fun getDeclarations(kindFilter: JetScope.KindFilter, nameFilter: (Name) -> Boolean): List<JetDeclaration>
= index().allDeclarations
override fun getFunctionDeclarations(name: Name): List<JetNamedFunction>
@@ -24,7 +24,7 @@ import org.jetbrains.jet.lang.resolve.name.Name
import org.jetbrains.jet.lang.resolve.scopes.JetScope
public trait DeclarationProvider {
public fun getDeclarations(kindFilterMask: Int, nameFilter: (Name) -> Boolean): List<JetDeclaration>
public fun getDeclarations(kindFilter: JetScope.KindFilter, nameFilter: (Name) -> Boolean): List<JetDeclaration>
public fun getFunctionDeclarations(name: Name): Collection<JetNamedFunction>
@@ -118,9 +118,9 @@ public abstract class AbstractLazyMemberScope<D : DeclarationDescriptor, DP : De
override fun getDeclarationsByLabel(labelName: Name) = setOf<DeclarationDescriptor>()
protected fun computeDescriptorsFromDeclaredElements(kindFilterMask: Int,
protected fun computeDescriptorsFromDeclaredElements(kindFilter: JetScope.KindFilter,
nameFilter: (Name) -> Boolean): List<DeclarationDescriptor> {
val declarations = declarationProvider.getDeclarations(kindFilterMask, nameFilter)
val declarations = declarationProvider.getDeclarations(kindFilter, nameFilter)
val result = ArrayList<DeclarationDescriptor>(declarations.size())
for (declaration in declarations) {
if (declaration is JetClassOrObject) {
@@ -46,13 +46,13 @@ public open class LazyClassMemberScope(resolveSession: ResolveSession,
: AbstractLazyMemberScope<LazyClassDescriptor, ClassMemberDeclarationProvider>(resolveSession, declarationProvider, thisClass, trace) {
private val descriptorsFromDeclaredElements = storageManager.createLazyValue {
computeDescriptorsFromDeclaredElements(JetScope.ALL_KINDS_MASK, JetScope.ALL_NAME_FILTER)
computeDescriptorsFromDeclaredElements(JetScope.KindFilter.ALL, JetScope.ALL_NAME_FILTER)
}
private val extraDescriptors: NotNullLazyValue<Collection<DeclarationDescriptor>> = storageManager.createLazyValue {
computeExtraDescriptors()
}
override fun getDescriptors(kindFilterMask: Int,
override fun getDescriptors(kindFilter: JetScope.KindFilter,
nameFilter: (Name) -> Boolean): Collection<DeclarationDescriptor> {
val result = LinkedHashSet(descriptorsFromDeclaredElements())
result.addAll(extraDescriptors())
@@ -29,8 +29,8 @@ public class LazyPackageMemberScope(
thisPackage: PackageFragmentDescriptor)
: AbstractLazyMemberScope<PackageFragmentDescriptor, PackageMemberDeclarationProvider>(resolveSession, declarationProvider, thisPackage, resolveSession.getTrace()) {
override fun getDescriptors(kindFilterMask: Int, nameFilter: (Name) -> Boolean): Collection<DeclarationDescriptor> {
return computeDescriptorsFromDeclaredElements(kindFilterMask, nameFilter)
override fun getDescriptors(kindFilter: JetScope.KindFilter, nameFilter: (Name) -> Boolean): Collection<DeclarationDescriptor> {
return computeDescriptorsFromDeclaredElements(kindFilter, nameFilter)
}
override fun getPackage(name: Name): PackageViewDescriptor? = null
@@ -95,15 +95,15 @@ public class WritableScopeImpl(scope: JetScope,
super.clearImports()
}
override fun getDescriptors(kindFilterMask: Int,
override fun getDescriptors(kindFilter: JetScope.KindFilter,
nameFilter: (Name) -> Boolean): Collection<DeclarationDescriptor> {
checkMayRead()
changeLockLevel(WritableScope.LockLevel.READING)
val result = ArrayList<DeclarationDescriptor>()
result.addAll(explicitlyAddedDescriptors)
result.addAll(workerScope.getDescriptors(kindFilterMask, nameFilter))
getImports().flatMapTo(result) { it.getDescriptors(kindFilterMask, nameFilter) }
result.addAll(workerScope.getDescriptors(kindFilter, nameFilter))
getImports().flatMapTo(result) { it.getDescriptors(kindFilter, nameFilter) }
return result
}
@@ -164,7 +164,7 @@ public class WriteThroughScope(outerScope: JetScope, private val writableWorker:
writableWorker.setImplicitReceiver(implicitReceiver)
}
override fun getDescriptors(kindFilterMask: Int,
override fun getDescriptors(kindFilter: JetScope.KindFilter,
nameFilter: (Name) -> Boolean): Collection<DeclarationDescriptor> {
checkMayRead()