diff: do not require init() call on DiffRequestProcessor

* avoid potentially dangerous non-EDT calls
* we require explicit call for updateRequest() anyway
This commit is contained in:
Aleksey Pivovarov
2015-05-18 14:16:42 +03:00
parent a304b4a923
commit c70159964d
6 changed files with 42 additions and 16 deletions
@@ -49,4 +49,8 @@ public abstract class MessageDiffRequest extends DiffRequest {
public void setMessage(@NotNull String message) {
myMessage = message;
}
@Override
public final void onAssigned(boolean isAssigned) {
}
}
@@ -35,7 +35,6 @@ public class DiffRequestPanelImpl implements DiffRequestPanel {
public DiffRequestPanelImpl(@Nullable Project project, @Nullable Window window) {
myProcessor = new MyCacheDiffRequestChainProcessor(project, window);
myProcessor.init();
myPanel = new JPanel(new BorderLayout()) {
@Override
@@ -93,7 +93,7 @@ public abstract class DiffRequestProcessor implements Disposable {
@NotNull private DiffRequest myActiveRequest;
@NotNull private ViewerState myState;
@Nullable private ViewerState myState;
public DiffRequestProcessor(@Nullable Project project) {
this(project, new UserDataHolderBase());
@@ -106,14 +106,14 @@ public abstract class DiffRequestProcessor implements Disposable {
public DiffRequestProcessor(@Nullable Project project, @NotNull UserDataHolder context) {
myProject = project;
myAvailableTools = DiffManagerEx.getInstance().getDiffTools();
myToolOrder = new LinkedList<DiffTool>();
myContext = new MyDiffContext(context);
myActiveRequest = NoDiffRequest.INSTANCE;
mySettings = DiffSettingsHolder.getInstance().getSettings(myContext.getUserData(DiffUserDataKeysEx.PLACE));
myAvailableTools = DiffManagerEx.getInstance().getDiffTools();
myToolOrder = new LinkedList<DiffTool>(getToolOrderFromSettings(myAvailableTools));
// UI
myPanel = new JPanel(new BorderLayout());
@@ -139,6 +139,8 @@ public abstract class DiffRequestProcessor implements Disposable {
if (bottomPanel != null) myMainPanel.add(bottomPanel, BorderLayout.SOUTH);
if (bottomPanel instanceof Disposable) Disposer.register(this, (Disposable)bottomPanel);
myState = new EmptyState();
myContentPanel.setContent(DiffUtil.createMessagePanel(NoDiffRequest.INSTANCE.getMessage()));
myOpenInEditorAction = new OpenInEditorAction(new Runnable() {
@Override
@@ -148,14 +150,6 @@ public abstract class DiffRequestProcessor implements Disposable {
});
}
public void init() {
myToolOrder.addAll(getToolOrderFromSettings(myAvailableTools));
myActiveRequest.onAssigned(true);
myState = new ErrorState((MessageDiffRequest)myActiveRequest);
myState.init();
}
//
// Update
//
@@ -966,6 +960,7 @@ public abstract class DiffRequestProcessor implements Disposable {
//
private interface ViewerState {
@CalledInAwt
void init();
@CalledInAwt
@@ -981,6 +976,34 @@ public abstract class DiffRequestProcessor implements Disposable {
DiffTool getActiveTool();
}
private static class EmptyState implements ViewerState {
@Override
public void init() {
}
@Override
public void destroy() {
}
@Nullable
@Override
public JComponent getPreferredFocusedComponent() {
return null;
}
@Nullable
@Override
public Object getData(@NonNls String dataId) {
return null;
}
@NotNull
@Override
public DiffTool getActiveTool() {
return ErrorDiffTool.INSTANCE;
}
}
private class ErrorState implements ViewerState {
@Nullable private final DiffTool myDiffTool;
@NotNull private final MessageDiffRequest myRequest;
@@ -999,6 +1022,7 @@ public abstract class DiffRequestProcessor implements Disposable {
}
@Override
@CalledInAwt
public void init() {
myContentPanel.setContent(myViewer.getComponent());
@@ -1043,6 +1067,7 @@ public abstract class DiffRequestProcessor implements Disposable {
}
@Override
@CalledInAwt
public void init() {
myContentPanel.setContent(myViewer.getComponent());
setTitle(myActiveRequest.getTitle());
@@ -1100,6 +1125,7 @@ public abstract class DiffRequestProcessor implements Disposable {
}
@Override
@CalledInAwt
public void init() {
myContentPanel.setContent(myWrapperViewer.getComponent());
setTitle(myActiveRequest.getTitle());
@@ -64,7 +64,6 @@ public abstract class DiffWindowBase {
}
})
.build();
myProcessor.init();
myWrapper.setImage(ImageLoader.loadFromResource("/diff/Diff.png"));
Disposer.register(myWrapper, myProcessor);
@@ -121,7 +121,6 @@ public class ChangesViewManager implements ChangesViewI, JDOMExternalizable, Pro
Disposer.register(project, myView);
myRepaintAlarm = new Alarm(Alarm.ThreadToUse.SWING_THREAD, project);
myDiffDetails = new MyChangeProcessor(myProject);
myDiffDetails.init();
myTsl = new TreeSelectionListener() {
@Override
public void valueChanged(TreeSelectionEvent e) {
@@ -321,7 +321,6 @@ public class CommitChangeListDialog extends DialogWrapper implements CheckinProj
});
}
});
myDiffDetails.init();
myBrowserExtender.addToolbarActions(this);