IDEA-143572 Android: IAE at com.android.tools.idea.gradle.parser.GradleGroovyFile.checkInitialized

This commit is contained in:
Dmitry Avdeev
2015-11-06 12:59:28 +03:00
parent 1e3d48c178
commit caab8e5807
@@ -33,6 +33,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectManager;
import com.intellij.openapi.roots.ui.configuration.ModulesConfigurator;
import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
import com.intellij.openapi.startup.StartupManager;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
@@ -124,7 +125,7 @@ public abstract class AbstractExternalProjectImportBuilder<C extends AbstractImp
beforeCommit(externalProjectNode, project);
}
boolean isFromUI = model != null;
final boolean isFromUI = model != null;
final List<Module> modules = ContainerUtil.newSmartList();
final IdeModifiableModelsProvider modelsProvider = isFromUI ? new IdeUIModifiableModelsProvider(
@@ -163,46 +164,59 @@ public abstract class AbstractExternalProjectImportBuilder<C extends AbstractImp
}
}
myProjectDataManager.importData(externalProjectNode, project, modelsProvider, true);
myExternalProjectNode = null;
// resolve dependencies
final Runnable resolveDependenciesTask = new Runnable() {
StartupManager.getInstance(project).runWhenProjectIsInitialized(new Runnable() {
@Override
public void run() {
ExternalSystemUtil.refreshProject(
project, myExternalSystemId, projectSettings.getExternalProjectPath(), false,
ProgressExecutionMode.IN_BACKGROUND_ASYNC);
finishImport(project, externalProjectNode, isFromUI, modules, modelsProvider, projectSettings);
}
};
if (!isFromUI) {
resolveDependenciesTask.run();
}
else {
// execute when current dialog is closed
ExternalSystemUtil.invokeLater(project, ModalityState.NON_MODAL, new Runnable() {
@Override
public void run() {
final Module[] committedModules = ModuleManager.getInstance(project).getModules();
if (ContainerUtil.list(committedModules).containsAll(modules)) {
resolveDependenciesTask.run();
}
else {
ExternalSystemApiUtil.getLocalSettings(project, myExternalSystemId).forgetExternalProjects(
Collections.singleton(projectSettings.getExternalProjectPath()));
ExternalSystemApiUtil.getSettings(project, myExternalSystemId).unlinkExternalProject(
projectSettings.getExternalProjectPath());
ExternalProjectsManager.getInstance(project).forgetExternalProjectData(
myExternalSystemId, projectSettings.getExternalProjectPath());
}
}
});
}
});
}
return modules;
}
protected void finishImport(final Project project,
DataNode<ProjectData> externalProjectNode,
boolean isFromUI,
final List<Module> modules,
IdeModifiableModelsProvider modelsProvider, final ExternalProjectSettings projectSettings) {
myProjectDataManager.importData(externalProjectNode, project, modelsProvider, true);
myExternalProjectNode = null;
// resolve dependencies
final Runnable resolveDependenciesTask = new Runnable() {
@Override
public void run() {
ExternalSystemUtil.refreshProject(
project, myExternalSystemId, projectSettings.getExternalProjectPath(), false,
ProgressExecutionMode.IN_BACKGROUND_ASYNC);
}
};
if (!isFromUI) {
resolveDependenciesTask.run();
}
else {
// execute when current dialog is closed
ExternalSystemUtil.invokeLater(project, ModalityState.NON_MODAL, new Runnable() {
@Override
public void run() {
final Module[] committedModules = ModuleManager.getInstance(project).getModules();
if (ContainerUtil.list(committedModules).containsAll(modules)) {
resolveDependenciesTask.run();
}
else {
ExternalSystemApiUtil.getLocalSettings(project, myExternalSystemId).forgetExternalProjects(
Collections.singleton(projectSettings.getExternalProjectPath()));
ExternalSystemApiUtil.getSettings(project, myExternalSystemId).unlinkExternalProject(
projectSettings.getExternalProjectPath());
ExternalProjectsManager.getInstance(project).forgetExternalProjectData(
myExternalSystemId, projectSettings.getExternalProjectPath());
}
}
});
}
}
@NotNull
private ExternalProjectSettings getCurrentExternalProjectSettings() {
ExternalProjectSettings result = myControl.getProjectSettings().clone();