Methods pulled up into the interface

This commit is contained in:
Andrey Breslav
2014-04-21 21:09:39 +04:00
parent 143b78d031
commit 4d425aff11
5 changed files with 81 additions and 14 deletions
@@ -32,7 +32,7 @@ import org.jetbrains.jet.lang.descriptors.impl.MutablePackageFragmentDescriptor;
import org.jetbrains.jet.lang.descriptors.impl.PackageLikeBuilder; import org.jetbrains.jet.lang.descriptors.impl.PackageLikeBuilder;
import org.jetbrains.jet.lang.diagnostics.Errors; import org.jetbrains.jet.lang.diagnostics.Errors;
import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession; import org.jetbrains.jet.lang.resolve.lazy.KotlinCodeAnalyzer;
import org.jetbrains.jet.lang.resolve.lazy.descriptors.LazyPackageDescriptor; import org.jetbrains.jet.lang.resolve.lazy.descriptors.LazyPackageDescriptor;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.name.Name;
@@ -396,7 +396,7 @@ public class DeclarationResolver {
} }
} }
public void checkRedeclarationsInPackages(@NotNull ResolveSession resolveSession, @NotNull Multimap<FqName, JetElement> topLevelFqNames) { public void checkRedeclarationsInPackages(@NotNull KotlinCodeAnalyzer resolveSession, @NotNull Multimap<FqName, JetElement> topLevelFqNames) {
for (Map.Entry<FqName, Collection<JetElement>> entry : topLevelFqNames.asMap().entrySet()) { for (Map.Entry<FqName, Collection<JetElement>> entry : topLevelFqNames.asMap().entrySet()) {
FqName fqName = entry.getKey(); FqName fqName = entry.getKey();
Collection<JetElement> declarationsOrPackageDirectives = entry.getValue(); Collection<JetElement> declarationsOrPackageDirectives = entry.getValue();
@@ -417,7 +417,7 @@ public class DeclarationResolver {
} }
@NotNull @NotNull
private static Set<DeclarationDescriptor> getTopLevelDescriptorsByFqName(@NotNull ResolveSession resolveSession, @NotNull FqName fqName) { private static Set<DeclarationDescriptor> getTopLevelDescriptorsByFqName(@NotNull KotlinCodeAnalyzer resolveSession, @NotNull FqName fqName) {
FqName parentFqName = fqName.parent(); FqName parentFqName = fqName.parent();
Set<DeclarationDescriptor> descriptors = new HashSet<DeclarationDescriptor>(); Set<DeclarationDescriptor> descriptors = new HashSet<DeclarationDescriptor>();
@@ -23,8 +23,8 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.lazy.KotlinCodeAnalyzer;
import org.jetbrains.jet.lang.resolve.lazy.LazyImportScope; import org.jetbrains.jet.lang.resolve.lazy.LazyImportScope;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
import org.jetbrains.jet.lang.resolve.lazy.descriptors.LazyClassDescriptor; import org.jetbrains.jet.lang.resolve.lazy.descriptors.LazyClassDescriptor;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
@@ -82,7 +82,7 @@ public class LazyTopDownAnalyzer {
@NotNull @NotNull
public TopDownAnalysisContext analyzeDeclarations( public TopDownAnalysisContext analyzeDeclarations(
final ResolveSession resolveSession, final KotlinCodeAnalyzer resolveSession,
@NotNull TopDownAnalysisParameters topDownAnalysisParameters, @NotNull TopDownAnalysisParameters topDownAnalysisParameters,
@NotNull Collection<? extends PsiElement> declarations @NotNull Collection<? extends PsiElement> declarations
) { ) {
@@ -230,7 +230,7 @@ public class LazyTopDownAnalyzer {
return c; return c;
} }
private static void resolveImportsInAllFiles(TopDownAnalysisContext c, ResolveSession resolveSession) { private static void resolveImportsInAllFiles(TopDownAnalysisContext c, KotlinCodeAnalyzer resolveSession) {
for (JetFile file : c.getFiles()) { for (JetFile file : c.getFiles()) {
resolveAndCheckImports(file, resolveSession); resolveAndCheckImports(file, resolveSession);
} }
@@ -248,7 +248,7 @@ public class LazyTopDownAnalyzer {
private static void createPropertyDescriptors( private static void createPropertyDescriptors(
TopDownAnalysisContext c, TopDownAnalysisContext c,
ResolveSession resolveSession, KotlinCodeAnalyzer resolveSession,
Multimap<FqName, JetElement> topLevelFqNames, Multimap<FqName, JetElement> topLevelFqNames,
List<JetProperty> properties List<JetProperty> properties
) { ) {
@@ -266,7 +266,7 @@ public class LazyTopDownAnalyzer {
private static void createFunctionDescriptors( private static void createFunctionDescriptors(
TopDownAnalysisContext c, TopDownAnalysisContext c,
ResolveSession resolveSession, KotlinCodeAnalyzer resolveSession,
List<JetNamedFunction> functions List<JetNamedFunction> functions
) { ) {
for (JetNamedFunction function : functions) { for (JetNamedFunction function : functions) {
@@ -278,14 +278,14 @@ public class LazyTopDownAnalyzer {
} }
} }
private static void resolveAndCheckImports(@NotNull JetFile file, @NotNull ResolveSession resolveSession) { private static void resolveAndCheckImports(@NotNull JetFile file, @NotNull KotlinCodeAnalyzer resolveSession) {
LazyImportScope fileScope = resolveSession.getScopeProvider().getExplicitImportsScopeForFile(file); LazyImportScope fileScope = resolveSession.getScopeProvider().getExplicitImportsScopeForFile(file);
fileScope.forceResolveAllContents(); fileScope.forceResolveAllContents();
} }
private static void registerScope( private static void registerScope(
@NotNull TopDownAnalysisContext c, @NotNull TopDownAnalysisContext c,
@NotNull ResolveSession resolveSession, @NotNull KotlinCodeAnalyzer resolveSession,
@Nullable JetDeclaration declaration @Nullable JetDeclaration declaration
) { ) {
if (declaration == null) return; if (declaration == null) return;
@@ -17,26 +17,47 @@
package org.jetbrains.jet.lang.resolve.lazy; package org.jetbrains.jet.lang.resolve.lazy;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.ReadOnly;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.descriptors.ScriptDescriptor;
import org.jetbrains.jet.lang.psi.JetClassOrObject; import org.jetbrains.jet.lang.psi.JetClassOrObject;
import org.jetbrains.jet.lang.psi.JetDeclaration; import org.jetbrains.jet.lang.psi.JetDeclaration;
import org.jetbrains.jet.lang.psi.JetScript;
import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.lazy.descriptors.LazyPackageDescriptor;
import org.jetbrains.jet.lang.resolve.name.FqName;
import java.util.Collection;
public interface KotlinCodeAnalyzer { public interface KotlinCodeAnalyzer {
@Nullable
LazyPackageDescriptor getPackageFragment(@NotNull FqName fqName);
@NotNull @NotNull
ModuleDescriptor getModuleDescriptor(); ModuleDescriptor getModuleDescriptor();
@NotNull
@ReadOnly
Collection<ClassDescriptor> getTopLevelClassDescriptors(@NotNull FqName fqName);
@NotNull @NotNull
ClassDescriptor getClassDescriptor(@NotNull JetClassOrObject classOrObject); ClassDescriptor getClassDescriptor(@NotNull JetClassOrObject classOrObject);
@NotNull
ScriptDescriptor getScriptDescriptor(@NotNull JetScript script);
@NotNull @NotNull
BindingContext getBindingContext(); BindingContext getBindingContext();
@NotNull @NotNull
DeclarationDescriptor resolveToDescriptor(JetDeclaration declaration); DeclarationDescriptor resolveToDescriptor(JetDeclaration declaration);
@NotNull
ScopeProvider getScopeProvider();
/** /**
* Forces all descriptors to be resolved. * Forces all descriptors to be resolved.
* *
@@ -192,6 +192,7 @@ public class ResolveSession implements KotlinCodeAnalyzer {
return packageFragmentProvider; return packageFragmentProvider;
} }
@Override
@Nullable @Nullable
public LazyPackageDescriptor getPackageFragment(@NotNull FqName fqName) { public LazyPackageDescriptor getPackageFragment(@NotNull FqName fqName) {
return packages.invoke(fqName); return packages.invoke(fqName);
@@ -227,6 +228,7 @@ public class ResolveSession implements KotlinCodeAnalyzer {
return exceptionTracker; return exceptionTracker;
} }
@Override
@NotNull @NotNull
@ReadOnly @ReadOnly
public Collection<ClassDescriptor> getTopLevelClassDescriptors(@NotNull FqName fqName) { public Collection<ClassDescriptor> getTopLevelClassDescriptors(@NotNull FqName fqName) {
@@ -288,6 +290,7 @@ public class ResolveSession implements KotlinCodeAnalyzer {
return (ClassDescriptor) classifier; return (ClassDescriptor) classifier;
} }
@Override
@NotNull @NotNull
public ScriptDescriptor getScriptDescriptor(@NotNull JetScript script) { public ScriptDescriptor getScriptDescriptor(@NotNull JetScript script) {
return scriptDescriptors.invoke(script); return scriptDescriptors.invoke(script);
@@ -472,6 +475,7 @@ public class ResolveSession implements KotlinCodeAnalyzer {
} }
} }
@Override
@NotNull @NotNull
public ScopeProvider getScopeProvider() { public ScopeProvider getScopeProvider() {
return scopeProvider; return scopeProvider;
@@ -19,17 +19,24 @@ package org.jetbrains.jet.plugin.project;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.ModificationTracker; import com.intellij.openapi.util.ModificationTracker;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.ReadOnly;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.psi.JetClassOrObject; import org.jetbrains.jet.lang.descriptors.ScriptDescriptor;
import org.jetbrains.jet.lang.psi.JetDeclaration; import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.psi.JetElement;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.lazy.KotlinCodeAnalyzer; import org.jetbrains.jet.lang.resolve.lazy.KotlinCodeAnalyzer;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession; import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
import org.jetbrains.jet.lang.resolve.lazy.ScopeProvider;
import org.jetbrains.jet.lang.resolve.lazy.descriptors.LazyPackageDescriptor;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.plugin.caches.resolve.KotlinResolveCache; import org.jetbrains.jet.plugin.caches.resolve.KotlinResolveCache;
import org.jetbrains.jet.storage.ExceptionTracker;
import org.jetbrains.jet.storage.StorageManager;
import java.util.Collection;
public class ResolveSessionForBodies implements KotlinCodeAnalyzer, ModificationTracker { public class ResolveSessionForBodies implements KotlinCodeAnalyzer, ModificationTracker {
private final Object createdForObject; private final Object createdForObject;
@@ -100,4 +107,39 @@ public class ResolveSessionForBodies implements KotlinCodeAnalyzer, Modification
public KotlinResolveCache getResolveCache() { public KotlinResolveCache getResolveCache() {
return resolveCache; return resolveCache;
} }
@Override
@Nullable
public LazyPackageDescriptor getPackageFragment(@NotNull FqName fqName) {
return resolveSession.getPackageFragment(fqName);
}
@Override
@NotNull
@ReadOnly
public Collection<ClassDescriptor> getTopLevelClassDescriptors(@NotNull FqName fqName) {
return resolveSession.getTopLevelClassDescriptors(fqName);
}
@Override
@NotNull
public ScriptDescriptor getScriptDescriptor(@NotNull JetScript script) {
return resolveSession.getScriptDescriptor(script);
}
@Override
@NotNull
public ScopeProvider getScopeProvider() {
return resolveSession.getScopeProvider();
}
@NotNull
public StorageManager getStorageManager() {
return resolveSession.getStorageManager();
}
@NotNull
public ExceptionTracker getExceptionTracker() {
return resolveSession.getExceptionTracker();
}
} }