mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
diff: extract method
This commit is contained in:
+77
-76
@@ -55,6 +55,7 @@ import com.intellij.util.BeforeAfter;
|
||||
import com.intellij.util.PlatformIcons;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
@@ -152,88 +153,88 @@ public class ChangesFragmentedDiffPanel implements Disposable {
|
||||
|
||||
private void createNavigateAction() {
|
||||
myNavigateAction = new DumbAwareAction("Edit Source", "Edit Source", AllIcons.Actions.EditSource) {
|
||||
@Nullable
|
||||
private OpenFileDescriptor createDescriptor() {
|
||||
if (myFragmentedContent == null || myFragmentedContent.getFile() == null) return null;
|
||||
|
||||
final DiffPanel panel = myCurrentHorizontal ? myHorizontal : myVertical;
|
||||
final DiffSideView side = ((DiffPanelImpl)panel).getCurrentSide();
|
||||
if (side == null || side.getEditor() == null) return null;
|
||||
|
||||
final boolean isAfter = FragmentSide.SIDE2.equals(side.getSide());
|
||||
if (isAfter) {
|
||||
final LogicalPosition position = side.getEditor().getCaretModel().getLogicalPosition();
|
||||
final int line = position.line;
|
||||
final int converted = myFragmentedContent.getNewConvertor().execute(line);
|
||||
return new OpenFileDescriptor(myProject, myFragmentedContent.getFile(), converted, position.column);
|
||||
}
|
||||
|
||||
if (((DiffPanelImpl)panel).getEditor1().getDocument().getTextLength() == 0) {
|
||||
return new OpenFileDescriptor(myProject, myFragmentedContent.getFile(), 0);
|
||||
}
|
||||
|
||||
final CaretModel model = side.getEditor().getCaretModel();
|
||||
final FragmentList fragments = ((DiffPanelImpl)panel).getFragments();
|
||||
final int line = model.getLogicalPosition().line;
|
||||
//final int offset = side.getEditor().getDocument().getLineStartOffset(line);
|
||||
final int offset = model.getOffset();
|
||||
|
||||
BeforeAfter<Integer> current = null;
|
||||
final List<BeforeAfter<Integer>> ranges = myFragmentedContent.getLineRanges();
|
||||
for (BeforeAfter<Integer> range : ranges) {
|
||||
if (range.getBefore() > line) break;
|
||||
current = range;
|
||||
}
|
||||
if (current == null) return null;
|
||||
final Fragment at = fragments.getFragmentAt(offset, FragmentSide.SIDE1, Condition.TRUE);
|
||||
if (at == null) return null;
|
||||
final TextRange opposite = at.getRange(FragmentSide.SIDE2);
|
||||
|
||||
final int lineInNew = ((DiffPanelImpl)panel).getEditor2().getDocument().getLineNumber(opposite.getStartOffset());
|
||||
|
||||
int correctLine;
|
||||
int column;
|
||||
if (at.getType() == null || TextDiffTypeEnum.NONE.equals(at.getType())) {
|
||||
column = model.getLogicalPosition().column;
|
||||
final int startIn1 =
|
||||
((DiffPanelImpl)panel).getEditor1().getDocument().getLineNumber(at.getRange(FragmentSide.SIDE1).getStartOffset());
|
||||
correctLine = lineInNew + line - startIn1;
|
||||
}
|
||||
else {
|
||||
column = 0;
|
||||
correctLine = Math.max(lineInNew, current.getAfter());
|
||||
}
|
||||
|
||||
int converted = myFragmentedContent.getNewConvertor().execute(correctLine);
|
||||
return new OpenFileDescriptor(myProject, myFragmentedContent.getFile(), converted, column);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(AnActionEvent e) {
|
||||
final boolean enabled = getEnabled();
|
||||
if (enabled) {
|
||||
OpenFileDescriptor descriptor = null;
|
||||
if (myFragmentedContent != null && myFragmentedContent.getFile() != null) {
|
||||
final DiffPanel panel = myCurrentHorizontal ? myHorizontal : myVertical;
|
||||
if (!getEnabled()) return;
|
||||
OpenFileDescriptor descriptor = createDescriptor();
|
||||
if (descriptor == null) return;
|
||||
final OpenFileDescriptor finalDescriptor = descriptor;
|
||||
final Runnable runnable = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
FileEditorManager.getInstance(myProject).openTextEditor(finalDescriptor, true);
|
||||
}
|
||||
};
|
||||
|
||||
final DiffSideView side = ((DiffPanelImpl)panel).getCurrentSide();
|
||||
if (side == null || side.getEditor() == null) return;
|
||||
|
||||
final boolean isAfter = FragmentSide.SIDE2.equals(side.getSide());
|
||||
if (isAfter) {
|
||||
final LogicalPosition position = side.getEditor().getCaretModel().getLogicalPosition();
|
||||
final int line = position.line;
|
||||
final int converted = myFragmentedContent.getNewConvertor().execute(line);
|
||||
descriptor = new OpenFileDescriptor(myProject, myFragmentedContent.getFile(), converted, position.column);
|
||||
} else {
|
||||
if (((DiffPanelImpl) panel).getEditor1().getDocument().getTextLength() == 0) {
|
||||
FileEditorManager.getInstance(myProject).openTextEditor(new OpenFileDescriptor(myProject, myFragmentedContent.getFile(), 0),
|
||||
true);
|
||||
return;
|
||||
}
|
||||
|
||||
final CaretModel model = side.getEditor().getCaretModel();
|
||||
final FragmentList fragments = ((DiffPanelImpl)panel).getFragments();
|
||||
final int line = model.getLogicalPosition().line;
|
||||
//final int offset = side.getEditor().getDocument().getLineStartOffset(line);
|
||||
final int offset = model.getOffset();
|
||||
|
||||
BeforeAfter<Integer> current = null;
|
||||
final List<BeforeAfter<Integer>> ranges = myFragmentedContent.getLineRanges();
|
||||
for (BeforeAfter<Integer> range : ranges) {
|
||||
if (range.getBefore() > line) break;
|
||||
current = range;
|
||||
}
|
||||
if (current == null) return;
|
||||
final Fragment at = fragments.getFragmentAt(offset, FragmentSide.SIDE1, Condition.TRUE);
|
||||
if (at == null) return;
|
||||
final TextRange opposite = at.getRange(FragmentSide.SIDE2);
|
||||
|
||||
final int lineInNew = ((DiffPanelImpl)panel).getEditor2().getDocument().getLineNumber(opposite.getStartOffset());
|
||||
|
||||
int correctLine;
|
||||
int column;
|
||||
if (at.getType() == null || TextDiffTypeEnum.NONE.equals(at.getType())) {
|
||||
column = model.getLogicalPosition().column;
|
||||
final int startIn1 =
|
||||
((DiffPanelImpl)panel).getEditor1().getDocument().getLineNumber(at.getRange(FragmentSide.SIDE1).getStartOffset());
|
||||
correctLine = lineInNew + line - startIn1;
|
||||
}
|
||||
else {
|
||||
column = 0;
|
||||
correctLine = Math.max(lineInNew, current.getAfter());
|
||||
}
|
||||
|
||||
int converted = myFragmentedContent.getNewConvertor().execute(correctLine);
|
||||
descriptor = new OpenFileDescriptor(myProject, myFragmentedContent.getFile(), converted, column);
|
||||
if (! ModalityState.NON_MODAL.equals(ModalityState.current())) {
|
||||
final Window window = KeyboardFocusManager.getCurrentKeyboardFocusManager().getActiveWindow();
|
||||
if (window instanceof DialogWrapperDialog) {
|
||||
final DialogWrapper wrapper = ((DialogWrapperDialog)window).getDialogWrapper();
|
||||
if (wrapper != null) {
|
||||
Disposer.dispose(wrapper.getDisposable());
|
||||
wrapper.close(DialogWrapper.CANCEL_EXIT_CODE);
|
||||
ApplicationManager.getApplication().invokeLater(runnable, ModalityState.NON_MODAL, myProject.getDisposed());
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (descriptor == null) return;
|
||||
final OpenFileDescriptor finalDescriptor = descriptor;
|
||||
final Runnable runnable = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
FileEditorManager.getInstance(myProject).openTextEditor(finalDescriptor, true);
|
||||
}
|
||||
};
|
||||
if (! ModalityState.NON_MODAL.equals(ModalityState.current())) {
|
||||
final Window window = KeyboardFocusManager.getCurrentKeyboardFocusManager().getActiveWindow();
|
||||
if (window instanceof DialogWrapperDialog) {
|
||||
final DialogWrapper wrapper = ((DialogWrapperDialog)window).getDialogWrapper();
|
||||
if (wrapper != null) {
|
||||
Disposer.dispose(wrapper.getDisposable());
|
||||
wrapper.close(DialogWrapper.CANCEL_EXIT_CODE);
|
||||
ApplicationManager.getApplication().invokeLater(runnable, ModalityState.NON_MODAL, myProject.getDisposed());
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
runnable.run();
|
||||
}
|
||||
runnable.run();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user