KT-4183 BuiltInsReferenceResolver$1 startup activity is slow
#KT-4183 in progress
This commit is contained in:
@@ -17,8 +17,8 @@
|
|||||||
package org.jetbrains.jet.plugin.references;
|
package org.jetbrains.jet.plugin.references;
|
||||||
|
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
|
import com.intellij.openapi.application.ApplicationManager;
|
||||||
import com.intellij.openapi.components.AbstractProjectComponent;
|
import com.intellij.openapi.components.AbstractProjectComponent;
|
||||||
import com.intellij.openapi.project.DumbService;
|
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import com.intellij.openapi.startup.StartupManager;
|
import com.intellij.openapi.startup.StartupManager;
|
||||||
import com.intellij.openapi.vfs.VfsUtil;
|
import com.intellij.openapi.vfs.VfsUtil;
|
||||||
@@ -56,8 +56,8 @@ import java.util.List;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public class BuiltInsReferenceResolver extends AbstractProjectComponent {
|
public class BuiltInsReferenceResolver extends AbstractProjectComponent {
|
||||||
private BindingContext bindingContext = null;
|
private volatile BindingContext bindingContext = null;
|
||||||
private Set<? extends PsiFile> builtInsSources = Sets.newHashSet();
|
private volatile Set<? extends PsiFile> builtInsSources = Sets.newHashSet();
|
||||||
|
|
||||||
public BuiltInsReferenceResolver(Project project) {
|
public BuiltInsReferenceResolver(Project project) {
|
||||||
super(project);
|
super(project);
|
||||||
@@ -76,20 +76,39 @@ public class BuiltInsReferenceResolver extends AbstractProjectComponent {
|
|||||||
private void initialize() {
|
private void initialize() {
|
||||||
assert bindingContext == null : "Attempt to initialize twice";
|
assert bindingContext == null : "Attempt to initialize twice";
|
||||||
|
|
||||||
BindingTraceContext context = new BindingTraceContext();
|
final List<JetFile> jetBuiltInsFiles = getJetBuiltInsFiles();
|
||||||
FakeJetNamespaceDescriptor jetNamespace = new FakeJetNamespaceDescriptor();
|
|
||||||
context.record(BindingContext.FQNAME_TO_NAMESPACE_DESCRIPTOR, KotlinBuiltIns.getInstance().getBuiltInsPackageFqName(), jetNamespace);
|
|
||||||
|
|
||||||
WritableScopeImpl scope = new WritableScopeImpl(JetScope.EMPTY, jetNamespace, RedeclarationHandler.THROW_EXCEPTION,
|
final Runnable initializeRunnable = new Runnable() {
|
||||||
"Builtin classes scope");
|
@Override
|
||||||
scope.changeLockLevel(WritableScope.LockLevel.BOTH);
|
public void run() {
|
||||||
jetNamespace.setMemberScope(scope);
|
BindingTraceContext context = new BindingTraceContext();
|
||||||
|
FakeJetNamespaceDescriptor jetNamespace = new FakeJetNamespaceDescriptor();
|
||||||
|
context.record(BindingContext.FQNAME_TO_NAMESPACE_DESCRIPTOR,
|
||||||
|
KotlinBuiltIns.getInstance().getBuiltInsPackageFqName(), jetNamespace);
|
||||||
|
|
||||||
List<JetFile> jetBuiltInsFiles = getJetBuiltInsFiles();
|
WritableScopeImpl scope = new WritableScopeImpl(JetScope.EMPTY, jetNamespace, RedeclarationHandler.THROW_EXCEPTION,
|
||||||
TopDownAnalyzer.processStandardLibraryNamespace(myProject, context, scope, jetNamespace, jetBuiltInsFiles);
|
"Builtin classes scope");
|
||||||
|
scope.changeLockLevel(WritableScope.LockLevel.BOTH);
|
||||||
|
jetNamespace.setMemberScope(scope);
|
||||||
|
|
||||||
builtInsSources = Sets.newHashSet(jetBuiltInsFiles);
|
TopDownAnalyzer.processStandardLibraryNamespace(myProject, context, scope, jetNamespace, jetBuiltInsFiles);
|
||||||
bindingContext = context.getBindingContext();
|
|
||||||
|
builtInsSources = Sets.newHashSet(jetBuiltInsFiles);
|
||||||
|
bindingContext = context.getBindingContext();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if (ApplicationManager.getApplication().isUnitTestMode()) {
|
||||||
|
initializeRunnable.run();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ApplicationManager.getApplication().executeOnPooledThread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
ApplicationManager.getApplication().runReadAction(initializeRunnable);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<JetFile> getJetBuiltInsFiles() {
|
private List<JetFile> getJetBuiltInsFiles() {
|
||||||
@@ -172,7 +191,6 @@ public class BuiltInsReferenceResolver extends AbstractProjectComponent {
|
|||||||
@Nullable JetReferenceExpression referenceExpression
|
@Nullable JetReferenceExpression referenceExpression
|
||||||
) {
|
) {
|
||||||
if (bindingContext == null) {
|
if (bindingContext == null) {
|
||||||
assert DumbService.getInstance(myProject).isDumb() : "Builtins component wasn't initialized properly";
|
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -184,7 +202,6 @@ public class BuiltInsReferenceResolver extends AbstractProjectComponent {
|
|||||||
@NotNull
|
@NotNull
|
||||||
public Collection<PsiElement> resolveBuiltInSymbol(@NotNull DeclarationDescriptor declarationDescriptor) {
|
public Collection<PsiElement> resolveBuiltInSymbol(@NotNull DeclarationDescriptor declarationDescriptor) {
|
||||||
if (bindingContext == null) {
|
if (bindingContext == null) {
|
||||||
assert DumbService.getInstance(myProject).isDumb() : "Builtins component wasn't initialized properly";
|
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user