/**
* <copyright>
* </copyright>
*
*
*/
package robot.resource.robot.mopp;
/**
* The RobotTaskItemBuilder is used to find task items in text documents. The
* current implementation uses the generated lexer and the TaskItemDetector to
* detect task items. This class is called by the BuilderAdapter, which runs both
* this builder and the default builder that is intended to be customized.
*/
public class RobotTaskItemBuilder {
public void build(org.eclipse.core.resources.IFile resource, org.eclipse.emf.ecore.resource.ResourceSet resourceSet, org.eclipse.core.runtime.IProgressMonitor monitor) {
monitor.setTaskName("Searching for task items");
new robot.resource.robot.mopp.RobotMarkerHelper().removeAllMarkers(resource, org.eclipse.core.resources.IMarker.TASK);
if (isInBinFolder(resource)) {
return;
}
java.util.List<robot.resource.robot.mopp.RobotTaskItem> taskItems = new java.util.ArrayList<robot.resource.robot.mopp.RobotTaskItem>();
robot.resource.robot.mopp.RobotTaskItemDetector taskItemDetector = new robot.resource.robot.mopp.RobotTaskItemDetector();
try {
java.io.InputStream inputStream = resource.getContents();
String content = robot.resource.robot.util.RobotStreamUtil.getContent(inputStream);
robot.resource.robot.IRobotTextScanner lexer = new robot.resource.robot.mopp.RobotMetaInformation().createLexer();
lexer.setText(content);
robot.resource.robot.IRobotTextToken nextToken = lexer.getNextToken();
while (nextToken != null) {
String text = nextToken.getText();
taskItems.addAll(taskItemDetector.findTaskItems(text, nextToken.getLine(), nextToken.getOffset()));
nextToken = lexer.getNextToken();
}
} catch (java.io.IOException e) {
robot.resource.robot.mopp.RobotPlugin.logError("Exception while searching for task items", e);
} catch (org.eclipse.core.runtime.CoreException e) {
robot.resource.robot.mopp.RobotPlugin.logError("Exception while searching for task items", e);
}
for (robot.resource.robot.mopp.RobotTaskItem taskItem : taskItems) {
java.util.Map<String, Object> markerAttributes = new java.util.LinkedHashMap<String, Object>();
markerAttributes.put(org.eclipse.core.resources.IMarker.USER_EDITABLE, false);
markerAttributes.put(org.eclipse.core.resources.IMarker.DONE, false);
markerAttributes.put(org.eclipse.core.resources.IMarker.LINE_NUMBER, taskItem.getLine());
markerAttributes.put(org.eclipse.core.resources.IMarker.CHAR_START, taskItem.getCharStart());
markerAttributes.put(org.eclipse.core.resources.IMarker.CHAR_END, taskItem.getCharEnd());
markerAttributes.put(org.eclipse.core.resources.IMarker.MESSAGE, taskItem.getMessage());
new robot.resource.robot.mopp.RobotMarkerHelper().createMarker(resource, org.eclipse.core.resources.IMarker.TASK, markerAttributes);
}
}
public String getBuilderMarkerId() {
return org.eclipse.core.resources.IMarker.TASK;
}
public boolean isInBinFolder(org.eclipse.core.resources.IFile resource) {
org.eclipse.core.resources.IContainer parent = resource.getParent();
while (parent != null) {
if ("bin".equals(parent.getName())) {
return true;
}
parent = parent.getParent();
}
return false;
}
}