ResolveSession caches script descriptors
This commit is contained in:
@@ -38,7 +38,6 @@ import org.jetbrains.jet.lang.resolve.lazy.ForceResolveUtil;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.LazyImportScope;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.declarations.FileBasedDeclarationProviderFactory;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.descriptors.LazyScriptDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||
@@ -77,10 +76,6 @@ public class TopDownAnalyzer {
|
||||
@NotNull
|
||||
private BodyResolver bodyResolver;
|
||||
@NotNull
|
||||
private ScriptParameterResolver scriptParameterResolver;
|
||||
@NotNull
|
||||
private ScriptBodyResolver scriptBodyResolver;
|
||||
@NotNull
|
||||
private Project project;
|
||||
|
||||
@Inject
|
||||
@@ -123,16 +118,6 @@ public class TopDownAnalyzer {
|
||||
this.bodyResolver = bodyResolver;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void setScriptParameterResolver(@NotNull ScriptParameterResolver scriptParameterResolver) {
|
||||
this.scriptParameterResolver = scriptParameterResolver;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void setScriptBodyResolver(@NotNull ScriptBodyResolver scriptBodyResolver) {
|
||||
this.scriptBodyResolver = scriptBodyResolver;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void setProject(@NotNull Project project) {
|
||||
this.project = project;
|
||||
@@ -196,17 +181,7 @@ public class TopDownAnalyzer {
|
||||
JetScript script = file.getScript();
|
||||
assert script != null;
|
||||
|
||||
c.getScripts().put(
|
||||
script,
|
||||
new LazyScriptDescriptor(
|
||||
resolveSession,
|
||||
scriptParameterResolver,
|
||||
c.getTopDownAnalysisParameters(),
|
||||
scriptBodyResolver,
|
||||
script,
|
||||
ScriptHeaderResolver.getScriptPriority(script)
|
||||
)
|
||||
);
|
||||
c.getScripts().put(script, resolveSession.getScriptDescriptor(script));
|
||||
}
|
||||
else {
|
||||
JetPackageDirective packageDirective = file.getPackageDirective();
|
||||
|
||||
@@ -23,6 +23,7 @@ import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.util.Function;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import kotlin.Function0;
|
||||
import kotlin.Function1;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.annotations.ReadOnly;
|
||||
@@ -36,15 +37,13 @@ import org.jetbrains.jet.lang.resolve.lazy.declarations.DeclarationProviderFacto
|
||||
import org.jetbrains.jet.lang.resolve.lazy.declarations.PackageMemberDeclarationProvider;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.descriptors.LazyClassDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.descriptors.LazyPackageDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.descriptors.LazyScriptDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.lang.resolve.name.SpecialNames;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||
import org.jetbrains.jet.renderer.DescriptorRenderer;
|
||||
import org.jetbrains.jet.storage.ExceptionTracker;
|
||||
import org.jetbrains.jet.storage.LazyResolveStorageManager;
|
||||
import org.jetbrains.jet.storage.LockBasedLazyResolveStorageManager;
|
||||
import org.jetbrains.jet.storage.MemoizedFunctionToNullable;
|
||||
import org.jetbrains.jet.storage.*;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.util.Collection;
|
||||
@@ -74,6 +73,8 @@ public class ResolveSession implements KotlinCodeAnalyzer {
|
||||
private final MemoizedFunctionToNullable<FqName, LazyPackageDescriptor> packages;
|
||||
private final PackageFragmentProvider packageFragmentProvider;
|
||||
|
||||
private final MemoizedFunctionToNotNull<JetScript, LazyScriptDescriptor> scriptDescriptors;
|
||||
|
||||
private ScopeProvider scopeProvider;
|
||||
|
||||
private JetImportsFactory jetImportFactory;
|
||||
@@ -81,6 +82,8 @@ public class ResolveSession implements KotlinCodeAnalyzer {
|
||||
private DescriptorResolver descriptorResolver;
|
||||
private TypeResolver typeResolver;
|
||||
private QualifiedExpressionResolver qualifiedExpressionResolver;
|
||||
private ScriptParameterResolver scriptParameterResolver;
|
||||
private ScriptBodyResolver scriptBodyResolver;
|
||||
|
||||
@Inject
|
||||
public void setJetImportFactory(JetImportsFactory jetImportFactory) {
|
||||
@@ -112,6 +115,16 @@ public class ResolveSession implements KotlinCodeAnalyzer {
|
||||
this.scopeProvider = scopeProvider;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void setScriptParameterResolver(ScriptParameterResolver scriptParameterResolver) {
|
||||
this.scriptParameterResolver = scriptParameterResolver;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void setScriptBodyResolver(ScriptBodyResolver scriptBodyResolver) {
|
||||
this.scriptBodyResolver = scriptBodyResolver;
|
||||
}
|
||||
|
||||
// Only calls from injectors expected
|
||||
@Deprecated
|
||||
public ResolveSession(
|
||||
@@ -159,6 +172,21 @@ public class ResolveSession implements KotlinCodeAnalyzer {
|
||||
|
||||
// TODO: parameter modification
|
||||
rootDescriptor.addFragmentProvider(DependencyKind.SOURCES, packageFragmentProvider);
|
||||
|
||||
this.scriptDescriptors = storageManager.createMemoizedFunction(
|
||||
new Function1<JetScript, LazyScriptDescriptor>() {
|
||||
@Override
|
||||
public LazyScriptDescriptor invoke(JetScript script) {
|
||||
return new LazyScriptDescriptor(
|
||||
ResolveSession.this,
|
||||
scriptParameterResolver,
|
||||
scriptBodyResolver,
|
||||
script,
|
||||
ScriptHeaderResolver.getScriptPriority(script)
|
||||
);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -262,6 +290,11 @@ public class ResolveSession implements KotlinCodeAnalyzer {
|
||||
return (ClassDescriptor) classifier;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public ScriptDescriptor getScriptDescriptor(@NotNull JetScript script) {
|
||||
return scriptDescriptors.invoke(script);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
/*package*/ LazyClassDescriptor getClassObjectDescriptor(@NotNull JetClassObject classObject) {
|
||||
JetClass aClass = PsiTreeUtil.getParentOfType(classObject, JetClass.class);
|
||||
|
||||
Reference in New Issue
Block a user