[565543] Add standalone JavaScript task tag detection
Due to dependencies being broken up, contained in the
Eclipse Web JavaScript Developer Tools feature
diff --git a/web/bundles/org.eclipse.wst.jsdt.web.ui/plugin.xml b/web/bundles/org.eclipse.wst.jsdt.web.ui/plugin.xml
index 50cf68e..1a6528a 100644
--- a/web/bundles/org.eclipse.wst.jsdt.web.ui/plugin.xml
+++ b/web/bundles/org.eclipse.wst.jsdt.web.ui/plugin.xml
@@ -810,5 +810,12 @@
</contentTypeIdentifier>
</validator>
</extension>
+
+ <extension point="org.eclipse.wst.sse.core.taskscanner">
+ <scanner
+ id="org.eclipse.wst.sse.core.internal.tasks.JSFileTaskScanner"
+ class="org.eclipse.wst.jsdt.web.ui.internal.tasks.JSFileTaskScanner"
+ contentTypeIds="org.eclipse.wst.jsdt.core.jsSource" />
+ </extension>
</plugin>
diff --git a/web/bundles/org.eclipse.wst.jsdt.web.ui/src/org/eclipse/wst/jsdt/web/ui/internal/tasks/JSFileTaskScanner.java b/web/bundles/org.eclipse.wst.jsdt.web.ui/src/org/eclipse/wst/jsdt/web/ui/internal/tasks/JSFileTaskScanner.java
new file mode 100644
index 0000000..68e3598
--- /dev/null
+++ b/web/bundles/org.eclipse.wst.jsdt.web.ui/src/org/eclipse/wst/jsdt/web/ui/internal/tasks/JSFileTaskScanner.java
@@ -0,0 +1,177 @@
+/*******************************************************************************
+ * Licensed Materials - Property of IBM
+ * © Copyright IBM Corporation 2020. All Rights Reserved.
+ * U.S. Government Users Restricted Rights - Use, duplication or disclosure
+ * restricted by GSA ADP Schedule Contract with IBM Corp.
+ *******************************************************************************/
+
+package org.eclipse.wst.jsdt.web.ui.internal.tasks;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.filebuffers.FileBuffers;
+import org.eclipse.core.filebuffers.ITextFileBufferManager;
+import org.eclipse.core.filebuffers.LocationKind;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.FindReplaceDocumentAdapter;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IDocumentPartitioner;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITypedRegion;
+import org.eclipse.wst.jsdt.internal.ui.JavaScriptPlugin;
+import org.eclipse.wst.jsdt.ui.text.IJavaScriptPartitions;
+import org.eclipse.wst.jsdt.web.ui.internal.Logger;
+import org.eclipse.wst.sse.core.internal.provisional.tasks.IFileTaskScanner;
+import org.eclipse.wst.sse.core.internal.provisional.tasks.TaskTag;
+
+public class JSFileTaskScanner implements IFileTaskScanner {
+ /**
+ * Provides task tag support for standalone *.js files
+ */
+ private static final String MARKER_TYPE_TASK = "org.eclipse.wst.jsdt.core.task"; //$NON-NLS-1$
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.wst.sse.core.internal.provisional.tasks.IFileTaskScanner#
+ * getMarkerType()
+ */
+ public String getMarkerType() {
+ return MARKER_TYPE_TASK;
+ }
+
+ protected Map<String, Object> createInitialMarkerAttributes(String text, int documentLine, int startOffset, int length, int priority) {
+ Map<String, Object> attributes = new HashMap<>(6);
+ // marker line numbers are 1-based
+ attributes.put(IMarker.LINE_NUMBER, Integer.valueOf(documentLine + 1));
+ attributes.put(IMarker.TASK, getMarkerType());
+ attributes.put(IMarker.CHAR_START, Integer.valueOf(startOffset));
+ attributes.put(IMarker.CHAR_END, Integer.valueOf(startOffset + length));
+ attributes.put(IMarker.MESSAGE, text);
+ attributes.put(IMarker.USER_EDITABLE, Boolean.FALSE);
+
+ switch (priority) {
+ case IMarker.PRIORITY_HIGH : {
+ attributes.put(IMarker.PRIORITY, new Integer(IMarker.PRIORITY_HIGH));
+ }
+ break;
+ case IMarker.PRIORITY_LOW : {
+ attributes.put(IMarker.PRIORITY, new Integer(IMarker.PRIORITY_LOW));
+ }
+ break;
+ default : {
+ attributes.put(IMarker.PRIORITY, new Integer(IMarker.PRIORITY_NORMAL));
+ }
+ }
+
+ return attributes;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.wst.sse.core.internal.provisional.tasks.IFileTaskScanner#
+ * scan(org.eclipse.core.resources.IFile,
+ * org.eclipse.wst.sse.core.internal.provisional.tasks.TaskTag[],
+ * org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public Map<String, Object>[] scan(IFile file, TaskTag[] taskTags, IProgressMonitor monitor) {
+ List<Map<String, Object>> newMarkers = new ArrayList<>();
+ ITextFileBufferManager textFileBufferManager = FileBuffers.getTextFileBufferManager();
+ try {
+ textFileBufferManager.connect(file.getFullPath(), LocationKind.IFILE, monitor);
+ IDocument document = textFileBufferManager.getTextFileBuffer(file.getFullPath()).getDocument();
+ IDocumentPartitioner partitioner = JavaScriptPlugin.getDefault().getJavaTextTools().createDocumentPartitioner();
+ FindReplaceDocumentAdapter finder = new FindReplaceDocumentAdapter(document);
+ partitioner.connect(document);
+ ITypedRegion[] partitions = partitioner.computePartitioning(0, document.getLength());
+ for (int i = 0; i < partitions.length; i++) {
+ for (int j = 0; j < taskTags.length; j++) {
+ switch (partitions[i].getType()) {
+ case IJavaScriptPartitions.JAVA_SINGLE_LINE_COMMENT : {
+ IRegion lineMatch = finder.find(partitions[i].getOffset(), taskTags[j].getTag(), true, false, true, false);
+ if (lineMatch != null) {
+ IRegion lineInfo = document.getLineInformationOfOffset(lineMatch.getOffset());
+ int start = lineMatch.getOffset();
+ int lengthToEndOfLine = lineInfo.getLength() - (lineMatch.getOffset() - lineInfo.getOffset());
+ String text = document.get(start, lengthToEndOfLine).trim();
+ Map<String, Object> attributesForNewTaskMarker = createInitialMarkerAttributes(text, document.getLineOfOffset(lineMatch.getOffset()), start, text.length(), IMarker.PRIORITY_NORMAL);
+ newMarkers.add(attributesForNewTaskMarker);
+ }
+ break;
+ }
+ case IJavaScriptPartitions.JAVA_DOC :
+ case IJavaScriptPartitions.JAVA_MULTI_LINE_COMMENT : {
+ IRegion tagMatch = finder.find(partitions[i].getOffset(), taskTags[j].getTag(), true, false, true, false);
+ while (tagMatch != null && tagMatch.getOffset() + tagMatch.getLength() < partitions[i].getOffset() + partitions[i].getLength()) {
+ int start = tagMatch.getOffset();
+ IRegion lineInfo = document.getLineInformationOfOffset(tagMatch.getOffset());
+ int lengthToEndOfLine = lineInfo.getLength() - (tagMatch.getOffset() - lineInfo.getOffset());
+ String text = document.get(start, lengthToEndOfLine).trim();
+ int lineNumber = document.getLineOfOffset(tagMatch.getOffset());
+ Map<String, Object> attributesForNewTaskMarker = createInitialMarkerAttributes(text, lineNumber, start, text.length(), taskTags[j].getPriority());
+ newMarkers.add(attributesForNewTaskMarker);
+
+ tagMatch = finder.find(lineInfo.getOffset() + lineInfo.getLength(), taskTags[j].getTag(), true, false, true, false);
+ }
+ break;
+ }
+ default :
+ }
+ }
+ }
+ partitioner.disconnect();
+
+ file.deleteMarkers(MARKER_TYPE_TASK, true, IResource.DEPTH_ONE);
+ }
+ catch (CoreException e) {
+ Logger.logException(e);
+ }
+ catch (BadLocationException e) {
+ Logger.logException(e);
+ }
+ finally {
+ try {
+ textFileBufferManager.disconnect(file.getFullPath(), LocationKind.IFILE, monitor);
+ }
+ catch (CoreException e) {
+ Logger.logException("Exception while disconnecting file buffer", e); //$NON-NLS-1$
+ }
+ }
+ return newMarkers.toArray(new Map[newMarkers.size()]);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.wst.sse.core.internal.provisional.tasks.IFileTaskScanner#
+ * shutdown(org.eclipse.core.resources.IProject)
+ */
+ public void shutdown(IProject project) {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.wst.sse.core.internal.provisional.tasks.IFileTaskScanner#
+ * startup(org.eclipse.core.resources.IProject)
+ */
+ public void startup(IProject project) {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/web/features/org.eclipse.wst.web_js_support.feature/feature.properties b/web/features/org.eclipse.wst.web_js_support.feature/feature.properties
index 8cb7745..640c3e3 100644
--- a/web/features/org.eclipse.wst.web_js_support.feature/feature.properties
+++ b/web/features/org.eclipse.wst.web_js_support.feature/feature.properties
@@ -23,7 +23,7 @@
providerName=Eclipse Web Tools Platform
# "description" property - description of the feature
-description=Editors and tools for working with JavaScript in combination with HTML, XHTML.
+description=Tools for working with JavaScript in combination with HTML, XHTML.
# "copyright" property - text of the "Feature Update Copyright"
copyright=\
diff --git a/web/features/org.eclipse.wst.web_js_support.feature/feature.xml b/web/features/org.eclipse.wst.web_js_support.feature/feature.xml
index de8b33c..c1ef063 100644
--- a/web/features/org.eclipse.wst.web_js_support.feature/feature.xml
+++ b/web/features/org.eclipse.wst.web_js_support.feature/feature.xml
@@ -14,7 +14,7 @@
<feature
id="org.eclipse.wst.web_js_support.feature"
label="%featureName"
- version="3.18.0.qualifier"
+ version="3.19.0.qualifier"
provider-name="%providerName"
license-feature="org.eclipse.license"
license-feature-version="0.0.0">
diff --git a/web/features/org.eclipse.wst.web_js_support.feature/pom.xml b/web/features/org.eclipse.wst.web_js_support.feature/pom.xml
index 39c297a..f470296 100644
--- a/web/features/org.eclipse.wst.web_js_support.feature/pom.xml
+++ b/web/features/org.eclipse.wst.web_js_support.feature/pom.xml
@@ -21,7 +21,7 @@
<groupId>org.eclipse.webtools.sourceediting</groupId>
<artifactId>org.eclipse.wst.web_js_support.feature</artifactId>
- <version>3.18.0-SNAPSHOT</version>
+ <version>3.19.0-SNAPSHOT</version>
<packaging>eclipse-feature</packaging>
<build>
diff --git a/web/features/org.eclipse.wst.web_js_support_sdk.feature/feature.xml b/web/features/org.eclipse.wst.web_js_support_sdk.feature/feature.xml
index 964ee07..4e031f4 100644
--- a/web/features/org.eclipse.wst.web_js_support_sdk.feature/feature.xml
+++ b/web/features/org.eclipse.wst.web_js_support_sdk.feature/feature.xml
@@ -14,7 +14,7 @@
<feature
id="org.eclipse.wst.web_js_support_sdk.feature"
label="%featureName"
- version="3.18.0.qualifier"
+ version="3.19.0.qualifier"
provider-name="%providerName"
license-feature="org.eclipse.license"
license-feature-version="0.0.0">
diff --git a/web/features/org.eclipse.wst.web_js_support_sdk.feature/pom.xml b/web/features/org.eclipse.wst.web_js_support_sdk.feature/pom.xml
index 596a4f9..2f849ec 100644
--- a/web/features/org.eclipse.wst.web_js_support_sdk.feature/pom.xml
+++ b/web/features/org.eclipse.wst.web_js_support_sdk.feature/pom.xml
@@ -21,6 +21,6 @@
<groupId>org.eclipse.webtools.sourceediting</groupId>
<artifactId>org.eclipse.wst.web_js_support_sdk.feature</artifactId>
- <version>3.18.0-SNAPSHOT</version>
+ <version>3.19.0-SNAPSHOT</version>
<packaging>eclipse-feature</packaging>
</project>
diff --git a/web/features/org.eclipse.wst.web_js_support_tests.feature/feature.xml b/web/features/org.eclipse.wst.web_js_support_tests.feature/feature.xml
index b2b0498..859b139 100644
--- a/web/features/org.eclipse.wst.web_js_support_tests.feature/feature.xml
+++ b/web/features/org.eclipse.wst.web_js_support_tests.feature/feature.xml
@@ -14,7 +14,7 @@
<feature
id="org.eclipse.wst.web_js_support_tests.feature"
label="%featureName"
- version="3.18.0.qualifier"
+ version="3.19.0.qualifier"
provider-name="%providerName"
license-feature="org.eclipse.license"
license-feature-version="0.0.0">
diff --git a/web/features/org.eclipse.wst.web_js_support_tests.feature/pom.xml b/web/features/org.eclipse.wst.web_js_support_tests.feature/pom.xml
index 6c55f4f..bd46a40 100644
--- a/web/features/org.eclipse.wst.web_js_support_tests.feature/pom.xml
+++ b/web/features/org.eclipse.wst.web_js_support_tests.feature/pom.xml
@@ -21,6 +21,6 @@
<groupId>org.eclipse.webtools.sourceediting</groupId>
<artifactId>org.eclipse.wst.web_js_support_tests.feature</artifactId>
- <version>3.18.0-SNAPSHOT</version>
+ <version>3.19.0-SNAPSHOT</version>
<packaging>eclipse-feature</packaging>
</project>