You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by sk...@apache.org on 2022/04/28 16:02:42 UTC
[netbeans] branch delivery updated: Strip HTML tags in project problems.
This is an automated email from the ASF dual-hosted git repository.
skygo pushed a commit to branch delivery
in repository https://gitbox.apache.org/repos/asf/netbeans.git
The following commit(s) were added to refs/heads/delivery by this push:
new 26447d1c22 Strip HTML tags in project problems.
new 0266567dfa Merge pull request #4042 from sdedic/lsp/problems-strip-html
26447d1c22 is described below
commit 26447d1c225df8341d642b878f6bcad912a7e194
Author: Svata Dedic <sv...@oracle.com>
AuthorDate: Thu Apr 28 08:05:28 2022 +0200
Strip HTML tags in project problems.
---
.../netbeans/modules/java/lsp/server/Utils.java | 42 ++++++++++++++++++++++
.../lsp/server/project/ProjectAlertPresenter.java | 14 ++++----
2 files changed, 50 insertions(+), 6 deletions(-)
diff --git a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/Utils.java b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/Utils.java
index a3561e6564..0b1afccd52 100644
--- a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/Utils.java
+++ b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/Utils.java
@@ -32,6 +32,7 @@ import java.net.URI;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
+import java.util.Locale;
import java.util.Set;
import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
@@ -337,4 +338,45 @@ public class Utils {
return encoded.substring(2, encoded.length() - 2);
}
+ /**
+ * Simple conversion from HTML to plaintext. Removes all html tags incl. attributes,
+ * replaces BR, P and HR tags with newlines.
+ * @param s html text
+ * @return plaintext
+ */
+ public static String html2plain(String s) {
+ boolean inTag = false;
+ int tagStart = -1;
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < s.length(); i++) {
+ char ch = s.charAt(i);
+ if (inTag) {
+ boolean alpha = Character.isAlphabetic(ch);
+ if (tagStart > 0 && !alpha) {
+ String t = s.substring(tagStart, i).toLowerCase(Locale.ENGLISH);
+ switch (t) {
+ case "br": case "p": case "hr": // NOI1N
+ sb.append("\n");
+ break;
+ }
+ // prevent entering tagstart state again
+ tagStart = -2;
+ }
+ if (ch == '>') { // NOI18N
+ inTag = false;
+ } else if (tagStart == -1 && alpha) {
+ tagStart = i;
+ }
+ } else {
+ if (ch == '<') { // NOI18N
+ tagStart = -1;
+ inTag = true;
+ continue;
+ }
+ sb.append(ch);
+ }
+ }
+ return sb.toString();
+ }
+
}
diff --git a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/project/ProjectAlertPresenter.java b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/project/ProjectAlertPresenter.java
index 0482e7cd23..035d796b33 100644
--- a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/project/ProjectAlertPresenter.java
+++ b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/project/ProjectAlertPresenter.java
@@ -39,6 +39,7 @@ import javax.swing.event.ListDataListener;
import org.netbeans.api.project.Project;
import org.netbeans.api.project.ProjectInformation;
import org.netbeans.api.project.ProjectUtils;
+import org.netbeans.modules.java.lsp.server.Utils;
import org.netbeans.spi.project.ui.ProjectProblemsProvider;
import org.openide.DialogDisplayer;
import org.openide.NotifyDescriptor;
@@ -489,7 +490,7 @@ class ProjectAlertPresenter {
// hack: the LSP protocol does not support title. Until fixed, or implemented through a custom message,
// embed the title into description:
String title = Bundle.ProjectProblem_Title(projectName, p.getDisplayName());
- NotifyDescriptor msg = new NotifyDescriptor(title + ": " + p.getDescription(), title, NotifyDescriptor.DEFAULT_OPTION, type, new Object[]{NotifyDescriptor.OK_OPTION}, null);
+ NotifyDescriptor msg = new NotifyDescriptor(title + ": " + Utils.html2plain(p.getDescription()), title, NotifyDescriptor.DEFAULT_OPTION, type, new Object[]{NotifyDescriptor.OK_OPTION}, null);
// Note: the number of 'fatal' dialogs displayed at the same time is limited by the RP throughput. Dialog API does not support CompletableFuture<> interface
// so threads may dangle.
@@ -647,7 +648,7 @@ class ProjectAlertPresenter {
}
String title = Bundle.ProjectProblems_Fixable_Title(projectName, ref.problem.getDisplayName());
- String msg = ref.problem.getDescription();
+ String msg = Utils.html2plain(ref.problem.getDescription());
if (probs.size() > 1) {
msg = Bundle.ProjectProblems_Additional(probs.size() - 1, msg);
}
@@ -739,7 +740,7 @@ class ProjectAlertPresenter {
}, RESOLVE_RP).thenApply(r -> {
if (r.isResolved()) {
if (r.getMessage() != null) {
- StatusDisplayer.getDefault().setStatusText(r.getMessage());
+ StatusDisplayer.getDefault().setStatusText(Utils.html2plain(r.getMessage()));
}
return ctx.autoResolve ? r : null;
}
@@ -764,18 +765,19 @@ class ProjectAlertPresenter {
});
return f;
}
-
+
private NotifyDescriptor createNotifyDescriptor(ProjectProblemsProvider.ProjectProblem pp, ProjectProblemsProvider.Result r, int probs) {
String title;
String msg;
int type;
+ String plainMessage = Utils.html2plain(r.getMessage());
if (r.getStatus() == ProjectProblemsProvider.Status.UNRESOLVED) {
title = Bundle.ProjectProblems_Resolved_Error(projectName);
- msg = Bundle.ProjectProblems_Resolved_ErrorMessage1(pp.getDisplayName(), r.getMessage());
+ msg = Bundle.ProjectProblems_Resolved_ErrorMessage1(pp.getDisplayName(), plainMessage);
type = NotifyDescriptor.ERROR_MESSAGE;
} else {
title = Bundle.ProjectProblems_Resolved_Warning(projectName);
- msg = Bundle.ProjectProblems_Resolved_WarningMessage1(pp.getDisplayName(), r.getMessage());
+ msg = Bundle.ProjectProblems_Resolved_WarningMessage1(pp.getDisplayName(), plainMessage);
type = NotifyDescriptor.WARNING_MESSAGE;
}
if (probs > 0) {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists