Locking scopes of MutablePackageFragmentDescriptors.
This commit is contained in:
+5
@@ -56,4 +56,9 @@ public class MutablePackageFragmentProvider implements PackageFragmentProvider {
|
||||
public ModuleDescriptor getModule() {
|
||||
return module;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Collection<MutablePackageFragmentDescriptor> getAllFragments() {
|
||||
return fqNameToPackage.values();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -81,15 +81,6 @@ public class NamespaceFactoryImpl implements NamespaceFactory {
|
||||
@Override
|
||||
@NotNull
|
||||
public PackageFragmentDescriptor createNamespaceDescriptorPathIfNeeded(@NotNull FqName fqName) {
|
||||
for (FqName pathElement : fqName.path()) {
|
||||
if (pathElement.isRoot()) {
|
||||
getOrCreatePackageFragment(FqName.ROOT, null, RedeclarationHandler.DO_NOTHING);
|
||||
}
|
||||
else {
|
||||
getOrCreatePackageFragment(pathElement, null, RedeclarationHandler.DO_NOTHING);
|
||||
}
|
||||
|
||||
}
|
||||
return packageFragmentProvider.getOrCreateFragment(fqName);
|
||||
}
|
||||
|
||||
|
||||
@@ -17,17 +17,16 @@
|
||||
package org.jetbrains.jet.lang.resolve;
|
||||
|
||||
import com.google.common.base.Predicates;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.di.InjectorForTopDownAnalyzerBasic;
|
||||
import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.MutableClassDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.MutableClassDescriptorLite;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.NamespaceLikeBuilder;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.NamespaceLikeBuilderDummy;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.*;
|
||||
import org.jetbrains.jet.lang.psi.JetClassOrObject;
|
||||
import org.jetbrains.jet.lang.psi.JetFile;
|
||||
import org.jetbrains.jet.lang.psi.JetPsiUtil;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||
@@ -39,7 +38,7 @@ import javax.inject.Inject;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
public class TopDownAnalyzer {
|
||||
|
||||
@@ -143,10 +142,17 @@ public class TopDownAnalyzer {
|
||||
for (MutableClassDescriptor mutableClassDescriptor : context.getClasses().values()) {
|
||||
mutableClassDescriptor.lockScopes();
|
||||
}
|
||||
for (Map.Entry<JetFile, WritableScope> namespaceScope : context.getNamespaceScopes().entrySet()) {
|
||||
Set<FqName> scriptFqNames = Sets.newHashSet();
|
||||
for (JetFile file : context.getNamespaceScopes().keySet()) {
|
||||
if (file.isScript()) {
|
||||
scriptFqNames.add(JetPsiUtil.getFQName(file));
|
||||
}
|
||||
}
|
||||
for (MutablePackageFragmentDescriptor fragment : packageFragmentProvider.getAllFragments()) {
|
||||
// todo: this is hack in favor of REPL
|
||||
if(!namespaceScope.getKey().isScript())
|
||||
namespaceScope.getValue().changeLockLevel(WritableScope.LockLevel.READING);
|
||||
if (!scriptFqNames.contains(fragment.getFqName())) {
|
||||
fragment.getMemberScope().changeLockLevel(WritableScope.LockLevel.READING);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-4
@@ -47,10 +47,7 @@ public class MutablePackageFragmentDescriptor extends DeclarationDescriptorImpl
|
||||
this.module = module;
|
||||
this.fqName = fqName;
|
||||
|
||||
scope = new WritableScopeImpl(JetScope.EMPTY, this, RedeclarationHandler.DO_NOTHING,
|
||||
"Members of " + fqName + " in " + module);
|
||||
|
||||
// TODO 1 make read-only after
|
||||
scope = new WritableScopeImpl(JetScope.EMPTY, this, RedeclarationHandler.DO_NOTHING, "Members of " + fqName + " in " + module);
|
||||
scope.changeLockLevel(WritableScope.LockLevel.BOTH);
|
||||
builder = new ScopeBasedNamespaceLikeBuilder(this, scope);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user