From 2f8a4728f5aa61423a6bc7e902c3ded6db909d0b Mon Sep 17 00:00:00 2001 From: Tymko Oleg <olegtymko@yandex.ru> Date: Tue, 16 Feb 2021 00:48:16 +0700 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20#123=20=D0=98=D0=B7=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B0=D0=BB=D0=B3=D0=BE=D1=80?= =?UTF-8?q?=D0=B8=D1=82=D0=BC=D0=B0=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B?= =?UTF-8?q?=20=D0=B2=D1=8B=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D1=82=D0=B5=D0=BA=D1=81=D1=82=D0=B0=20=D0=BF=D1=80=D0=B8=20?= =?UTF-8?q?=D0=B0=D0=BD=D0=B0=D0=BB=D0=B8=D0=B7=D0=B5.=20=D0=A2=D0=B5?= =?UTF-8?q?=D0=BF=D0=B5=D1=80=D1=8C=20=D0=B0=D0=BD=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=B8=D1=80=D1=83=D0=B5=D1=82=D1=81=D1=8F=20=D0=B2=D0=B5=D1=81?= =?UTF-8?q?=D1=8C=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8C.=20=D0=9F=D1=80?= =?UTF-8?q?=D0=B8=20=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=D0=B5=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D1=84=D0=BE=D1=80=D0=BC=D1=83=20issues=20-=20=D1=80=D0=B0?= =?UTF-8?q?=D0=B1=D0=BE=D1=82=D0=B0=D0=B5=D1=82=20=D1=84=D0=B8=D0=BB=D1=8C?= =?UTF-8?q?=D1=82=D1=80=20=D0=BF=D0=BE=20=D0=B2=D1=8B=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BD=D1=8B=D0=BC=20=D1=81=D1=82=D1=80=D0=BE=D0=BA?= =?UTF-8?q?=D0=B0=D0=BC.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../github/otymko/phoenixbsl/gui/MainGUI.java | 1 - .../phoenixbsl/gui/stage/IssuesStage.java | 47 +++++++++---------- .../otymko/phoenixbsl/logic/PhoenixAPI.java | 16 +++---- .../logic/designer/DesignerTextEditor.java | 18 +++---- .../phoenixbsl/logic/text/Constant.java | 9 ++++ .../phoenixbsl/logic/text/Location.java | 17 +++++++ .../phoenixbsl/logic/text/SourceText.java | 11 +++++ .../phoenixbsl/logic/utils/IssueHelper.java | 34 ++++++++++++++ .../phoenixbsl/logic/utils/TextUtil.java | 17 +++++++ 9 files changed, 128 insertions(+), 42 deletions(-) create mode 100644 src/main/java/com/github/otymko/phoenixbsl/logic/text/Constant.java create mode 100644 src/main/java/com/github/otymko/phoenixbsl/logic/text/Location.java create mode 100644 src/main/java/com/github/otymko/phoenixbsl/logic/text/SourceText.java create mode 100644 src/main/java/com/github/otymko/phoenixbsl/logic/utils/IssueHelper.java create mode 100644 src/main/java/com/github/otymko/phoenixbsl/logic/utils/TextUtil.java diff --git a/src/main/java/com/github/otymko/phoenixbsl/gui/MainGUI.java b/src/main/java/com/github/otymko/phoenixbsl/gui/MainGUI.java index 3cdae10..6ca0858 100644 --- a/src/main/java/com/github/otymko/phoenixbsl/gui/MainGUI.java +++ b/src/main/java/com/github/otymko/phoenixbsl/gui/MainGUI.java @@ -41,7 +41,6 @@ public void showIssuesStage() { @Override public void updateIssues(List<Diagnostic> diagnostics) { - issuesStage.lineOffset = PhoenixCore.getInstance().getTextEditor().getCurrentOffset(); showIssuesStageImpl(); Platform.runLater(() -> issuesStage.updateIssues(diagnostics)); } diff --git a/src/main/java/com/github/otymko/phoenixbsl/gui/stage/IssuesStage.java b/src/main/java/com/github/otymko/phoenixbsl/gui/stage/IssuesStage.java index cbdc60c..5aef095 100644 --- a/src/main/java/com/github/otymko/phoenixbsl/gui/stage/IssuesStage.java +++ b/src/main/java/com/github/otymko/phoenixbsl/gui/stage/IssuesStage.java @@ -3,6 +3,7 @@ import com.github.otymko.phoenixbsl.PhoenixCore; import com.github.otymko.phoenixbsl.gui.controller.IssueStageController; import com.github.otymko.phoenixbsl.logic.PhoenixAPI; +import com.github.otymko.phoenixbsl.logic.utils.IssueHelper; import com.github.otymko.phoenixbsl.model.Issue; import com.github.otymko.phoenixbsl.model.ProjectSetting; import com.jfoenix.assets.JFoenixResources; @@ -59,8 +60,6 @@ public class IssuesStage extends Stage { private final ComboBox<ProjectSetting> project; private final TextField search; - public int lineOffset = 0; - private int countError = 0; private int countWarning = 0; private int countInfo = 0; @@ -203,33 +202,21 @@ public IssuesStage(Stage ownerStage) { } public void updateIssues(List<Diagnostic> diagnostics) { + var textEditor = PhoenixCore.getInstance().getTextEditor(); + var selection = textEditor.getSelection(); + countError = 0; countWarning = 0; countInfo = 0; - issues.clear(); - diagnostics.forEach(diagnostic -> { - var range = diagnostic.getRange(); - var position = range.getStart(); - var startLine = position.getLine() + 1 + lineOffset; - - Issue issue = new Issue(); - - issue.setSource(PhoenixAPI.getValueSourceByString(diagnostic.getSource())); - issue.setDescription(diagnostic.getMessage()); - issue.setStartLine(startLine); - issue.setLocation(String.valueOf(startLine)); - issue.setSeverity(diagnostic.getSeverity()); - issues.add(issue); - - if (diagnostic.getSeverity() == DiagnosticSeverity.Error) { - countError++; - } else if (diagnostic.getSeverity() == DiagnosticSeverity.Warning) { - countWarning++; - } else { - countInfo++; - } - }); + + diagnostics.stream() + .filter(diagnostic -> IssueHelper.checkDiagnosticBySelection(diagnostic, selection)) + .forEach(diagnostic -> { + var issue = IssueHelper.createIssue(diagnostic); + issues.add(issue); + calcCounters(diagnostic); + }); FXCollections.sort(issues, Comparator.comparingInt(Issue::getStartLine)); updateIndicators(); @@ -255,6 +242,16 @@ private void updateIndicators() { labelInfo.setText("Инфо: " + countInfo); } + private void calcCounters(Diagnostic diagnostic) { + if (diagnostic.getSeverity() == DiagnosticSeverity.Error) { + countError++; + } else if (diagnostic.getSeverity() == DiagnosticSeverity.Warning) { + countWarning++; + } else { + countInfo++; + } + } + private static Map<DiagnosticSeverity, String> createSeverityToStringMap() { Map<DiagnosticSeverity, String> map = new EnumMap<>(DiagnosticSeverity.class); map.put(DiagnosticSeverity.Error, "Ошибка"); diff --git a/src/main/java/com/github/otymko/phoenixbsl/logic/PhoenixAPI.java b/src/main/java/com/github/otymko/phoenixbsl/logic/PhoenixAPI.java index d852b24..948097a 100644 --- a/src/main/java/com/github/otymko/phoenixbsl/logic/PhoenixAPI.java +++ b/src/main/java/com/github/otymko/phoenixbsl/logic/PhoenixAPI.java @@ -1,7 +1,9 @@ package com.github.otymko.phoenixbsl.logic; +import com.github.otymko.phoenixbsl.logic.text.SourceText; import com.github.otymko.phoenixbsl.logic.designer.DesignerTextEditor; import com.github.otymko.phoenixbsl.logic.service.SonarLintService; +import com.github.otymko.phoenixbsl.logic.text.Constant; import com.sun.jna.platform.win32.WinDef; import lombok.experimental.UtilityClass; import lombok.extern.slf4j.Slf4j; @@ -19,7 +21,6 @@ @Slf4j @UtilityClass public class PhoenixAPI { - private final String FUN_SYMBOL = "☻"; // 9787 private final CustomRobot robot = new CustomRobot(); private final CustomTextTransfer textTransfer = new CustomTextTransfer(); @@ -66,23 +67,22 @@ public void goToLineOnForm(int line) { robot.pressKey(KeyEvent.VK_ENTER); } - public int getCurrentLineNumber() { - + public SourceText getSourceText() { var line = 0; robot.Alt(KeyEvent.VK_NUMPAD2); var textAll = getTextAll(); robot.Ctrl(KeyEvent.VK_Z); - String[] arrStr = textAll.split("\n"); + String[] arrStr = textAll.split(Constant.SEPARATOR); var count = 0; for (var element : arrStr) { count++; - if (element.contains(FUN_SYMBOL)) { + if (element.contains(Constant.FUN_SYMBOL)) { line = count - 1; break; } } LOGGER.debug("Current line offset: " + line); - return line; + return new SourceText(textAll, line); } public String getTextAll() { @@ -122,14 +122,14 @@ public void showMessageDialog(String message) { } public String applyFixForText(String textForQF, List<Either<Command, CodeAction>> codeActions) { - var strings = textForQF.split(DesignerTextEditor.SEPARATOR); + var strings = textForQF.split(Constant.SEPARATOR); try { applyAllQuickFixes(codeActions, strings); } catch (ArrayIndexOutOfBoundsException e) { LOGGER.error("При применении fix all к тексту модуля возникли ошибки", e); return null; } - return String.join(DesignerTextEditor.SEPARATOR, strings); + return String.join(Constant.SEPARATOR, strings); } public void clearListBySource(List<Diagnostic> diagnostics, String source) { diff --git a/src/main/java/com/github/otymko/phoenixbsl/logic/designer/DesignerTextEditor.java b/src/main/java/com/github/otymko/phoenixbsl/logic/designer/DesignerTextEditor.java index 339014a..bee7548 100644 --- a/src/main/java/com/github/otymko/phoenixbsl/logic/designer/DesignerTextEditor.java +++ b/src/main/java/com/github/otymko/phoenixbsl/logic/designer/DesignerTextEditor.java @@ -5,6 +5,8 @@ import com.github.otymko.phoenixbsl.logic.PhoenixUser32; import com.github.otymko.phoenixbsl.logic.event.EventListener; import com.github.otymko.phoenixbsl.logic.event.EventManager; +import com.github.otymko.phoenixbsl.logic.text.Location; +import com.github.otymko.phoenixbsl.logic.utils.TextUtil; import com.sun.jna.platform.win32.WinDef; import lombok.Getter; import lombok.Setter; @@ -23,7 +25,6 @@ public class DesignerTextEditor implements EventListener { public static final List<String> DIAGNOSTIC_FOR_QF = createDiagnosticListForQuickFix(); public static final List<String> FILTER_ACTION_QUICKFIX = createListFilterActionQuickFix(); - public static final String SEPARATOR = "\n"; private final PhoenixCore core; @Getter @Setter @@ -37,7 +38,7 @@ public class DesignerTextEditor implements EventListener { private final List<Diagnostic> diagnostics = Collections.synchronizedList(new ArrayList<>()); @Getter @Setter - private int currentOffset = 0; + private Location selection = Location.empty(); public DesignerTextEditor(PhoenixCore core) { this.core = core; @@ -124,16 +125,17 @@ public void updateFocusForm() { } private String getTextFormDesigner() { - setCurrentOffset(0); - var textForCheck = ""; var textModuleSelected = PhoenixAPI.getTextSelected(); + var sourceText = PhoenixAPI.getSourceText(); + var textForCheck = sourceText.getContent(); + if (textModuleSelected.length() > 0) { - // получем номер строки - textForCheck = textModuleSelected; - setCurrentOffset(PhoenixAPI.getCurrentLineNumber()); + setSelection(new Location(sourceText.getOffset() + 1, + sourceText.getOffset() + TextUtil.numberOfLinesInText(textModuleSelected))); } else { - textForCheck = PhoenixAPI.getTextAll(); + setSelection(Location.empty()); } + textForCheck = TextUtil.pasteSelectionInText(textForCheck, textModuleSelected); return textForCheck; } diff --git a/src/main/java/com/github/otymko/phoenixbsl/logic/text/Constant.java b/src/main/java/com/github/otymko/phoenixbsl/logic/text/Constant.java new file mode 100644 index 0000000..54ca42b --- /dev/null +++ b/src/main/java/com/github/otymko/phoenixbsl/logic/text/Constant.java @@ -0,0 +1,9 @@ +package com.github.otymko.phoenixbsl.logic.text; + +import lombok.experimental.UtilityClass; + +@UtilityClass +public class Constant { + public final String SEPARATOR = "\n"; + public final String FUN_SYMBOL = "☻"; // 9787 +} diff --git a/src/main/java/com/github/otymko/phoenixbsl/logic/text/Location.java b/src/main/java/com/github/otymko/phoenixbsl/logic/text/Location.java new file mode 100644 index 0000000..e40ce39 --- /dev/null +++ b/src/main/java/com/github/otymko/phoenixbsl/logic/text/Location.java @@ -0,0 +1,17 @@ +package com.github.otymko.phoenixbsl.logic.text; + +import lombok.RequiredArgsConstructor; +import lombok.Value; + +@Value +@RequiredArgsConstructor +public class Location { + private static final Location EMPTY = new Location(0, 0); + + int startLine; + int endLine; + + public static Location empty() { + return EMPTY; + } +} diff --git a/src/main/java/com/github/otymko/phoenixbsl/logic/text/SourceText.java b/src/main/java/com/github/otymko/phoenixbsl/logic/text/SourceText.java new file mode 100644 index 0000000..594af77 --- /dev/null +++ b/src/main/java/com/github/otymko/phoenixbsl/logic/text/SourceText.java @@ -0,0 +1,11 @@ +package com.github.otymko.phoenixbsl.logic.text; + +import lombok.RequiredArgsConstructor; +import lombok.Value; + +@Value +@RequiredArgsConstructor +public class SourceText { + String content; + int offset; +} diff --git a/src/main/java/com/github/otymko/phoenixbsl/logic/utils/IssueHelper.java b/src/main/java/com/github/otymko/phoenixbsl/logic/utils/IssueHelper.java new file mode 100644 index 0000000..34cc062 --- /dev/null +++ b/src/main/java/com/github/otymko/phoenixbsl/logic/utils/IssueHelper.java @@ -0,0 +1,34 @@ +package com.github.otymko.phoenixbsl.logic.utils; + +import com.github.otymko.phoenixbsl.logic.PhoenixAPI; +import com.github.otymko.phoenixbsl.logic.text.Location; +import com.github.otymko.phoenixbsl.model.Issue; +import lombok.experimental.UtilityClass; +import org.eclipse.lsp4j.Diagnostic; + +@UtilityClass +public class IssueHelper { + + public boolean checkDiagnosticBySelection(Diagnostic diagnostic, Location selection) { + if (selection == Location.empty()) { + return true; + } + return diagnostic.getRange().getStart().getLine() >= selection.getStartLine() + && diagnostic.getRange().getEnd().getLine() <= selection.getEndLine(); + } + + public Issue createIssue(Diagnostic diagnostic) { + var range = diagnostic.getRange(); + var position = range.getStart(); + var startLine = position.getLine() + 1; + + var issue = new Issue(); + issue.setSource(PhoenixAPI.getValueSourceByString(diagnostic.getSource())); + issue.setDescription(diagnostic.getMessage()); + issue.setStartLine(startLine); + issue.setLocation(String.valueOf(startLine)); + issue.setSeverity(diagnostic.getSeverity()); + return issue; + } + +} diff --git a/src/main/java/com/github/otymko/phoenixbsl/logic/utils/TextUtil.java b/src/main/java/com/github/otymko/phoenixbsl/logic/utils/TextUtil.java new file mode 100644 index 0000000..b0d6169 --- /dev/null +++ b/src/main/java/com/github/otymko/phoenixbsl/logic/utils/TextUtil.java @@ -0,0 +1,17 @@ +package com.github.otymko.phoenixbsl.logic.utils; + +import com.github.otymko.phoenixbsl.logic.text.Constant; +import lombok.experimental.UtilityClass; + +@UtilityClass +public class TextUtil { + + public String pasteSelectionInText(String text, String selection) { + return text.replace(Constant.FUN_SYMBOL, selection); + } + + public int numberOfLinesInText(String text) { + return text.split(Constant.SEPARATOR).length; + } + +} From 7bce520b7565c2b313d767d9d0f461136d105c70 Mon Sep 17 00:00:00 2001 From: Tymko Oleg <olegtymko@yandex.ru> Date: Tue, 16 Feb 2021 00:56:59 +0700 Subject: [PATCH 2/2] =?UTF-8?q?refactor:=20#123=20=D0=A3=D0=B7=D0=BE=D1=80?= =?UTF-8?q?=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../logic/designer/DesignerTextEditor.java | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/github/otymko/phoenixbsl/logic/designer/DesignerTextEditor.java b/src/main/java/com/github/otymko/phoenixbsl/logic/designer/DesignerTextEditor.java index bee7548..dc2dd43 100644 --- a/src/main/java/com/github/otymko/phoenixbsl/logic/designer/DesignerTextEditor.java +++ b/src/main/java/com/github/otymko/phoenixbsl/logic/designer/DesignerTextEditor.java @@ -24,7 +24,7 @@ @Slf4j public class DesignerTextEditor implements EventListener { public static final List<String> DIAGNOSTIC_FOR_QF = createDiagnosticListForQuickFix(); - public static final List<String> FILTER_ACTION_QUICKFIX = createListFilterActionQuickFix(); + public static final List<String> FILTER_ACTION_QUICKFIX = List.of("quickfix"); private final PhoenixCore core; @Getter @Setter @@ -93,7 +93,7 @@ public void formatting() { @Override public void fixAll() { - LOGGER.debug("Событие: обработка квикфиксов"); + LOGGER.debug("Событие: применение quickfix"); if (!PhoenixAPI.isWindowsForm1S()) { return; } @@ -153,17 +153,11 @@ private FormattingText getFormattingText() { } private static List<String> createDiagnosticListForQuickFix() { - var list = new ArrayList<String>(); + List<String> list = new ArrayList<>(); list.add("CanonicalSpellingKeywords"); list.add("SpaceAtStartComment"); list.add("SemicolonPresence"); - return list; - } - - private static List<String> createListFilterActionQuickFix() { - List<String> onlyKind = new ArrayList<>(); - onlyKind.add("quickfix"); - return onlyKind; + return List.copyOf(list); } }