blob: fb433b23ec567b531966fd1c39d07bc01862bcdd (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
package com.intellij.execution.testframework.autotest;
import com.intellij.execution.DelayedDocumentWatcher;
import com.intellij.execution.process.ProcessHandler;
import com.intellij.execution.ui.RunContentDescriptor;
import com.intellij.execution.ui.RunContentManagerImpl;
import com.intellij.ide.util.PropertiesComponent;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.ui.content.Content;
import com.intellij.util.Consumer;
import com.intellij.util.containers.WeakHashMap;
import java.util.Collections;
import java.util.Set;
/**
* @author yole
*/
public class AutoTestManager {
static final Key<Boolean> AUTOTESTABLE = Key.create("auto.test.manager.supported");
public static final String AUTO_TEST_MANAGER_DELAY = "auto.test.manager.delay";
private final Project myProject;
private int myDelay;
private DelayedDocumentWatcher myDocumentWatcher;
// accessed only from EDT
private final Set<Content> myEnabledDescriptors = Collections.newSetFromMap(new WeakHashMap<Content, Boolean>());
public static AutoTestManager getInstance(Project project) {
return ServiceManager.getService(project, AutoTestManager.class);
}
public AutoTestManager(Project project) {
myProject = project;
myDelay = PropertiesComponent.getInstance(myProject).getOrInitInt(AUTO_TEST_MANAGER_DELAY, 3000);
myDocumentWatcher = createWatcher();
}
private DelayedDocumentWatcher createWatcher() {
return new DelayedDocumentWatcher(myProject, myDelay, new Consumer<Set<VirtualFile>>() {
@Override
public void consume(Set<VirtualFile> files) {
for (Content content : myEnabledDescriptors) {
runAutoTest(content);
}
}
}, new Condition<VirtualFile>() {
@Override
public boolean value(VirtualFile file) {
// Vladimir.Krivosheev — I don't know, why AutoTestManager checks it, but old behavior is preserved
return FileEditorManager.getInstance(myProject).isFileOpen(file);
}
});
}
public void setAutoTestEnabled(RunContentDescriptor descriptor, boolean enabled) {
Content content = descriptor.getAttachedContent();
if (enabled) {
myEnabledDescriptors.add(content);
myDocumentWatcher.activate();
}
else {
myEnabledDescriptors.remove(content);
if (myEnabledDescriptors.isEmpty()) {
myDocumentWatcher.deactivate();
}
}
}
public boolean isAutoTestEnabled(RunContentDescriptor descriptor) {
return myEnabledDescriptors.contains(descriptor.getAttachedContent());
}
private static void runAutoTest(Content content) {
RunContentDescriptor descriptor = RunContentManagerImpl.getRunContentDescriptorByContent(content);
if (descriptor == null) {
return;
}
Runnable restarter = descriptor.getRestarter();
if (restarter == null) {
return;
}
final ProcessHandler processHandler = descriptor.getProcessHandler();
if (processHandler != null && !processHandler.isProcessTerminated()) {
return;
}
descriptor.setActivateToolWindowWhenAdded(false);
descriptor.setReuseToolWindowActivation(true);
restarter.run();
}
int getDelay() {
return myDelay;
}
void setDelay(int delay) {
myDelay = delay;
myDocumentWatcher.deactivate();
myDocumentWatcher = createWatcher();
if (!myEnabledDescriptors.isEmpty()) {
myDocumentWatcher.activate();
}
PropertiesComponent.getInstance(myProject).setValue(AUTO_TEST_MANAGER_DELAY, String.valueOf(myDelay));
}
}
|