diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java index d612be5663c..966ef0b6de1 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java @@ -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.diagnostics.Errors; 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.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; @@ -396,7 +396,7 @@ public class DeclarationResolver { } } - public void checkRedeclarationsInPackages(@NotNull ResolveSession resolveSession, @NotNull Multimap topLevelFqNames) { + public void checkRedeclarationsInPackages(@NotNull KotlinCodeAnalyzer resolveSession, @NotNull Multimap topLevelFqNames) { for (Map.Entry> entry : topLevelFqNames.asMap().entrySet()) { FqName fqName = entry.getKey(); Collection declarationsOrPackageDirectives = entry.getValue(); @@ -417,7 +417,7 @@ public class DeclarationResolver { } @NotNull - private static Set getTopLevelDescriptorsByFqName(@NotNull ResolveSession resolveSession, @NotNull FqName fqName) { + private static Set getTopLevelDescriptorsByFqName(@NotNull KotlinCodeAnalyzer resolveSession, @NotNull FqName fqName) { FqName parentFqName = fqName.parent(); Set descriptors = new HashSet(); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/LazyTopDownAnalyzer.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/LazyTopDownAnalyzer.java index 6b506d86917..3f2833ae3dc 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/LazyTopDownAnalyzer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/LazyTopDownAnalyzer.java @@ -23,8 +23,8 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; 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.ResolveSession; import org.jetbrains.jet.lang.resolve.lazy.descriptors.LazyClassDescriptor; import org.jetbrains.jet.lang.resolve.name.FqName; @@ -82,7 +82,7 @@ public class LazyTopDownAnalyzer { @NotNull public TopDownAnalysisContext analyzeDeclarations( - final ResolveSession resolveSession, + final KotlinCodeAnalyzer resolveSession, @NotNull TopDownAnalysisParameters topDownAnalysisParameters, @NotNull Collection declarations ) { @@ -230,7 +230,7 @@ public class LazyTopDownAnalyzer { return c; } - private static void resolveImportsInAllFiles(TopDownAnalysisContext c, ResolveSession resolveSession) { + private static void resolveImportsInAllFiles(TopDownAnalysisContext c, KotlinCodeAnalyzer resolveSession) { for (JetFile file : c.getFiles()) { resolveAndCheckImports(file, resolveSession); } @@ -248,7 +248,7 @@ public class LazyTopDownAnalyzer { private static void createPropertyDescriptors( TopDownAnalysisContext c, - ResolveSession resolveSession, + KotlinCodeAnalyzer resolveSession, Multimap topLevelFqNames, List properties ) { @@ -266,7 +266,7 @@ public class LazyTopDownAnalyzer { private static void createFunctionDescriptors( TopDownAnalysisContext c, - ResolveSession resolveSession, + KotlinCodeAnalyzer resolveSession, List 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); fileScope.forceResolveAllContents(); } private static void registerScope( @NotNull TopDownAnalysisContext c, - @NotNull ResolveSession resolveSession, + @NotNull KotlinCodeAnalyzer resolveSession, @Nullable JetDeclaration declaration ) { if (declaration == null) return; diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/KotlinCodeAnalyzer.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/KotlinCodeAnalyzer.java index 67d1616c29d..7049c86544e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/KotlinCodeAnalyzer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/KotlinCodeAnalyzer.java @@ -17,26 +17,47 @@ package org.jetbrains.jet.lang.resolve.lazy; 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.DeclarationDescriptor; 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.JetDeclaration; +import org.jetbrains.jet.lang.psi.JetScript; 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 { + @Nullable + LazyPackageDescriptor getPackageFragment(@NotNull FqName fqName); + @NotNull ModuleDescriptor getModuleDescriptor(); + @NotNull + @ReadOnly + Collection getTopLevelClassDescriptors(@NotNull FqName fqName); + @NotNull ClassDescriptor getClassDescriptor(@NotNull JetClassOrObject classOrObject); + @NotNull + ScriptDescriptor getScriptDescriptor(@NotNull JetScript script); + @NotNull BindingContext getBindingContext(); @NotNull DeclarationDescriptor resolveToDescriptor(JetDeclaration declaration); + @NotNull + ScopeProvider getScopeProvider(); + /** * Forces all descriptors to be resolved. * diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java index b9c5682f04e..55880133b6f 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java @@ -192,6 +192,7 @@ public class ResolveSession implements KotlinCodeAnalyzer { return packageFragmentProvider; } + @Override @Nullable public LazyPackageDescriptor getPackageFragment(@NotNull FqName fqName) { return packages.invoke(fqName); @@ -227,6 +228,7 @@ public class ResolveSession implements KotlinCodeAnalyzer { return exceptionTracker; } + @Override @NotNull @ReadOnly public Collection getTopLevelClassDescriptors(@NotNull FqName fqName) { @@ -288,6 +290,7 @@ public class ResolveSession implements KotlinCodeAnalyzer { return (ClassDescriptor) classifier; } + @Override @NotNull public ScriptDescriptor getScriptDescriptor(@NotNull JetScript script) { return scriptDescriptors.invoke(script); @@ -472,6 +475,7 @@ public class ResolveSession implements KotlinCodeAnalyzer { } } + @Override @NotNull public ScopeProvider getScopeProvider() { return scopeProvider; diff --git a/idea/src/org/jetbrains/jet/plugin/project/ResolveSessionForBodies.java b/idea/src/org/jetbrains/jet/plugin/project/ResolveSessionForBodies.java index a5560566aa9..d957faa4e14 100644 --- a/idea/src/org/jetbrains/jet/plugin/project/ResolveSessionForBodies.java +++ b/idea/src/org/jetbrains/jet/plugin/project/ResolveSessionForBodies.java @@ -19,17 +19,24 @@ package org.jetbrains.jet.plugin.project; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.ModificationTracker; 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.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; -import org.jetbrains.jet.lang.psi.JetClassOrObject; -import org.jetbrains.jet.lang.psi.JetDeclaration; -import org.jetbrains.jet.lang.psi.JetElement; -import org.jetbrains.jet.lang.psi.JetFile; +import org.jetbrains.jet.lang.descriptors.ScriptDescriptor; +import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.lazy.KotlinCodeAnalyzer; 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.storage.ExceptionTracker; +import org.jetbrains.jet.storage.StorageManager; + +import java.util.Collection; public class ResolveSessionForBodies implements KotlinCodeAnalyzer, ModificationTracker { private final Object createdForObject; @@ -100,4 +107,39 @@ public class ResolveSessionForBodies implements KotlinCodeAnalyzer, Modification public KotlinResolveCache getResolveCache() { return resolveCache; } + + @Override + @Nullable + public LazyPackageDescriptor getPackageFragment(@NotNull FqName fqName) { + return resolveSession.getPackageFragment(fqName); + } + + @Override + @NotNull + @ReadOnly + public Collection 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(); + } }