getProvider() added to PackageFragmentDescriptor

This commit is contained in:
Andrey Breslav
2013-12-23 21:00:21 +04:00
parent 3eadd1403d
commit fc2d9cdde6
8 changed files with 38 additions and 11 deletions
@@ -1,7 +1,6 @@
package org.jetbrains.jet.lang.resolve;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.MultiMap;
import org.jetbrains.annotations.NotNull;
@@ -12,7 +11,6 @@ import org.jetbrains.jet.lang.descriptors.impl.MutablePackageFragmentDescriptor;
import org.jetbrains.jet.lang.resolve.name.FqName;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -24,7 +22,7 @@ public class MutablePackageFragmentProvider implements PackageFragmentProvider {
public MutablePackageFragmentProvider(@NotNull ModuleDescriptor module) {
this.module = module;
fqNameToPackage.put(FqName.ROOT, new MutablePackageFragmentDescriptor(module, FqName.ROOT));
fqNameToPackage.put(FqName.ROOT, new MutablePackageFragmentDescriptor(this, module, FqName.ROOT));
}
@NotNull
@@ -45,7 +43,7 @@ public class MutablePackageFragmentProvider implements PackageFragmentProvider {
FqName parent = fqName.parent();
getOrCreateFragment(parent); // assure that parent exists
fqNameToPackage.put(fqName, new MutablePackageFragmentDescriptor(module, fqName));
fqNameToPackage.put(fqName, new MutablePackageFragmentDescriptor(this, module, fqName));
subPackages.putValue(parent, fqName);
}
@@ -151,6 +151,11 @@ public class ResolveSession implements KotlinCodeAnalyzer {
rootDescriptor.addFragmentProvider(packageFragmentProvider);
}
@NotNull
public PackageFragmentProvider getPackageFragmentProvider() {
return packageFragmentProvider;
}
@Nullable
public LazyPackageDescriptor getPackageFragment(@NotNull FqName fqName) {
return packages.invoke(fqName);
@@ -32,6 +32,7 @@ import org.jetbrains.jet.lang.types.TypeSubstitutor;
import java.util.Collections;
public class LazyPackageDescriptor extends DeclarationDescriptorImpl implements LazyDescriptor, PackageFragmentDescriptor {
private final ResolveSession resolveSession;
private final ModuleDescriptor module;
private final JetScope memberScope;
private final FqName fqName;
@@ -44,6 +45,7 @@ public class LazyPackageDescriptor extends DeclarationDescriptorImpl implements
@NotNull PackageMemberDeclarationProvider declarationProvider
) {
super(Collections.<AnnotationDescriptor>emptyList(), fqName.shortNameOrSpecial());
this.resolveSession = resolveSession;
this.module = module;
this.fqName = fqName;
this.declarationProvider = declarationProvider;
@@ -57,6 +59,12 @@ public class LazyPackageDescriptor extends DeclarationDescriptorImpl implements
return memberScope;
}
@NotNull
@Override
public PackageFragmentProvider getProvider() {
return resolveSession.getPackageFragmentProvider();
}
@NotNull
@Override
public ModuleDescriptor getContainingDeclaration() {
@@ -95,6 +95,7 @@ public class JavaPackageFragmentDescriptorImpl extends DeclarationDescriptorImpl
return fqName;
}
@Override
@NotNull
public JavaPackageFragmentProvider getProvider() {
return provider;
@@ -21,6 +21,9 @@ import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
public interface PackageFragmentDescriptor extends ClassOrNamespaceDescriptor {
@NotNull
PackageFragmentProvider getProvider();
@NotNull
@Override
ModuleDescriptor getContainingDeclaration();
@@ -18,10 +18,7 @@ package org.jetbrains.jet.lang.descriptors.impl;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptorVisitor;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
@@ -34,16 +31,19 @@ import java.util.Collections;
public class MutablePackageFragmentDescriptor extends DeclarationDescriptorImpl implements PackageFragmentDescriptor {
private final PackageFragmentProvider provider;
private final ModuleDescriptor module;
private final FqName fqName;
private final WritableScope scope;
private final NamespaceLikeBuilder builder;
public MutablePackageFragmentDescriptor(
@NotNull PackageFragmentProvider provider,
@NotNull ModuleDescriptor module,
@NotNull FqName fqName
) {
super(Collections.<AnnotationDescriptor>emptyList(), fqName.shortNameOrSpecial());
this.provider = provider;
this.module = module;
this.fqName = fqName;
@@ -52,6 +52,12 @@ public class MutablePackageFragmentDescriptor extends DeclarationDescriptorImpl
builder = new ScopeBasedNamespaceLikeBuilder(this, scope);
}
@NotNull
@Override
public PackageFragmentProvider getProvider() {
return provider;
}
@NotNull
@Override
public ModuleDescriptor getContainingDeclaration() {
@@ -30,7 +30,7 @@ class BuiltinsPackageFragment extends DeclarationDescriptorImpl implements Packa
private final DeserializedPackageMemberScope members;
private final NameResolver nameResolver;
private final ModuleDescriptor module;
final PackageFragmentProvider packageFragmentProvider;
private final PackageFragmentProvider packageFragmentProvider;
public BuiltinsPackageFragment(@NotNull StorageManager storageManager, @NotNull ModuleDescriptor module) {
super(Collections.<AnnotationDescriptor>emptyList(), KotlinBuiltIns.BUILT_INS_PACKAGE_NAME);
@@ -61,6 +61,12 @@ class BuiltinsPackageFragment extends DeclarationDescriptorImpl implements Packa
return members;
}
@NotNull
@Override
public PackageFragmentProvider getProvider() {
return packageFragmentProvider;
}
@NotNull
@Override
public ModuleDescriptor getContainingDeclaration() {
@@ -99,7 +105,7 @@ class BuiltinsPackageFragment extends DeclarationDescriptorImpl implements Packa
}
private class BuiltinsPackageFragmentProvider implements PackageFragmentProvider {
private final PackageFragmentDescriptor rootPackage = new MutablePackageFragmentDescriptor(module, FqName.ROOT);
private final PackageFragmentDescriptor rootPackage = new MutablePackageFragmentDescriptor(this, module, FqName.ROOT);
@NotNull
@Override
@@ -128,7 +128,7 @@ public class KotlinBuiltIns {
Collections.<ImportPath>emptyList(),
PlatformToKotlinClassMap.EMPTY);
builtinsPackageFragment = new BuiltinsPackageFragment(new LockBasedStorageManager(), builtInsModule);
builtInsModule.addFragmentProvider(builtinsPackageFragment.packageFragmentProvider);
builtInsModule.addFragmentProvider(builtinsPackageFragment.getProvider());
this.functionClassesSet = computeIndexedClasses("Function", FUNCTION_TRAIT_COUNT);
this.extensionFunctionClassesSet = computeIndexedClasses("ExtensionFunction", FUNCTION_TRAIT_COUNT);