mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
external system api: do not postpone modules import till all project startup activities passed (see project.isInitialized() method for details)
This commit is contained in:
-52
@@ -38,7 +38,6 @@ import com.intellij.openapi.vfs.VfsUtilCore;
|
||||
import com.intellij.ui.CheckBoxList;
|
||||
import com.intellij.ui.IdeBorderFactory;
|
||||
import com.intellij.ui.components.JBScrollPane;
|
||||
import com.intellij.util.Alarm;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.util.Function;
|
||||
import com.intellij.util.SmartList;
|
||||
@@ -54,7 +53,6 @@ import java.io.File;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* Encapsulates functionality of importing external system module to the intellij project.
|
||||
@@ -69,14 +67,6 @@ public class ModuleDataService extends AbstractProjectDataService<ModuleData, Mo
|
||||
|
||||
private static final Logger LOG = Logger.getInstance("#" + ModuleDataService.class.getName());
|
||||
|
||||
/**
|
||||
* We can't modify project modules (add/remove) until it's initialised, so, we delay that activity. Current constant
|
||||
* holds number of milliseconds to wait between 'after project initialisation' processing attempts.
|
||||
*/
|
||||
private static final int PROJECT_INITIALISATION_DELAY_MS = (int)TimeUnit.SECONDS.toMillis(1);
|
||||
|
||||
private final Alarm myAlarm = new Alarm(Alarm.ThreadToUse.SHARED_THREAD);
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Key<ModuleData> getTargetDataKey() {
|
||||
@@ -92,12 +82,6 @@ public class ModuleDataService extends AbstractProjectDataService<ModuleData, Mo
|
||||
if (toImport.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
if (!project.isInitialized()) {
|
||||
myAlarm.addRequest(
|
||||
new ImportModulesTask(project, toImport, projectData, platformFacade, synchronous), PROJECT_INITIALISATION_DELAY_MS
|
||||
);
|
||||
return;
|
||||
}
|
||||
ExternalSystemApiUtil.executeProjectChangeAction(synchronous, new DisposeAwareProjectChange(project) {
|
||||
@Override
|
||||
public void execute() {
|
||||
@@ -386,42 +370,6 @@ public class ModuleDataService extends AbstractProjectDataService<ModuleData, Mo
|
||||
module.clearOption(ExternalSystemConstants.EXTERNAL_SYSTEM_MODULE_VERSION_KEY);
|
||||
}
|
||||
|
||||
private class ImportModulesTask implements Runnable {
|
||||
|
||||
private final Project myProject;
|
||||
private final Collection<DataNode<ModuleData>> myModules;
|
||||
@Nullable
|
||||
private final ProjectData myProjectData;
|
||||
private final PlatformFacade myPlatformFacade;
|
||||
private final boolean mySynchronous;
|
||||
|
||||
ImportModulesTask(@NotNull Project project,
|
||||
@NotNull Collection<DataNode<ModuleData>> modules,
|
||||
@Nullable ProjectData projectData,
|
||||
@NotNull PlatformFacade platformFacade,
|
||||
boolean synchronous) {
|
||||
myProject = project;
|
||||
myModules = modules;
|
||||
myProjectData = projectData;
|
||||
myPlatformFacade = platformFacade;
|
||||
mySynchronous = synchronous;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
myAlarm.cancelAllRequests();
|
||||
if (!myProject.isInitialized()) {
|
||||
myAlarm.addRequest(
|
||||
new ImportModulesTask(myProject, myModules, myProjectData, myPlatformFacade, mySynchronous),
|
||||
PROJECT_INITIALISATION_DELAY_MS
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
importData(myModules, myProjectData, myProject, myPlatformFacade, mySynchronous);
|
||||
}
|
||||
}
|
||||
|
||||
private static void setModuleOptions(Module module, DataNode<ModuleData> moduleDataNode) {
|
||||
ModuleData moduleData = moduleDataNode.getData();
|
||||
module.putUserData(MODULE_DATA_KEY, moduleData);
|
||||
|
||||
+4
@@ -24,6 +24,7 @@ import com.intellij.openapi.externalSystem.service.project.PlatformFacade;
|
||||
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil;
|
||||
import com.intellij.openapi.externalSystem.util.ExternalSystemUtil;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.project.impl.ProjectImpl;
|
||||
import com.intellij.openapi.util.Computable;
|
||||
import com.intellij.openapi.util.NotNullLazyValue;
|
||||
import com.intellij.util.Consumer;
|
||||
@@ -170,6 +171,9 @@ public class ProjectDataManager {
|
||||
@NotNull PlatformFacade platformFacade,
|
||||
boolean synchronous) {
|
||||
if (project.isDisposed()) return;
|
||||
if(project instanceof ProjectImpl) {
|
||||
assert ((ProjectImpl)project).isComponentsCreated();
|
||||
}
|
||||
|
||||
final List<DataNode<T>> toImport = ContainerUtil.newSmartList();
|
||||
final List<DataNode<T>> toIgnore = ContainerUtil.newSmartList();
|
||||
|
||||
Reference in New Issue
Block a user