/******************************************************************************* * Copyright (c) 2008 xored software, Inc. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * xored software, Inc. - initial API and Implementation (Alex Panchenko) *******************************************************************************/ package org2.eclipse.dltk.compiler.problem; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org2.eclipse.dltk.compiler.task.ITaskReporter; public class ProblemCollector extends AbstractProblemReporter implements ITaskReporter { protected final List<IProblem> problems = new ArrayList<IProblem>(); public void reset() { problems.clear(); } public void reportProblem(IProblem problem) { problems.add(problem); } public void reportTask(String message, int lineNumber, int priority, int charStart, int charEnd) { reportProblem(new TaskInfo(message, lineNumber, priority, charStart, charEnd)); } /** * @return */ public boolean isEmpty() { return problems.isEmpty(); } public Object getAdapter(@SuppressWarnings("rawtypes") Class adapter) { if (ITaskReporter.class.equals(adapter) || IProblemReporter.class.equals(adapter)) { return this; } return super.getAdapter(adapter); } /** * @return */ public boolean hasErrors() { if (!problems.isEmpty()) { for (final IProblem problem : problems) { if (problem.isError()) { return true; } } } return false; } protected static class TaskInfo extends CategorizedProblem { private final String message; private final int charStart; private final int lineNumber; private final int charEnd; private final int priority; /** * @param message * @param lineNumber * @param charEnd * @param charStart */ public TaskInfo(String message, int lineNumber, int priority, int charStart, int charEnd) { this.message = message; this.lineNumber = lineNumber; this.priority = priority; this.charEnd = charEnd; this.charStart = charStart; } public int getCategoryID() { return 0; } public String getMarkerType() { return DefaultProblem.MARKER_TYPE_TASK; } public String[] getArguments() { return null; } public int getID() { return IProblem.Task; } public String getMessage() { return message; } public String getOriginatingFileName() { return null; } public int getSourceEnd() { return charEnd; } public int getSourceLineNumber() { return lineNumber; } public int getSourceStart() { return charStart; } public int getPriority() { return priority; } public boolean isError() { return false; } public boolean isWarning() { return false; } public void setSourceEnd(int sourceEnd) { // unsupported } public void setSourceLineNumber(int lineNumber) { // unsupported } public void setSourceStart(int sourceStart) { // unsupported } public String toString() { final StringBuffer sb = new StringBuffer(); sb.append("Task"); //$NON-NLS-1$ sb.append(' '); sb.append(lineNumber); sb.append('['); sb.append(charStart); sb.append(".."); //$NON-NLS-1$ sb.append(charEnd); sb.append(']'); sb.append(':'); if (this.message != null) { sb.append(this.message); } return sb.toString(); } } /** * @param destination */ public void copyTo(IProblemReporter destination) { for (final IProblem problem : problems) { destination.reportProblem(problem); } } public List<IProblem> getProblems() { return Collections.unmodifiableList(problems); } /** * @return */ public List<IProblem> getErrors() { final List<IProblem> result = new ArrayList<IProblem>(); for (final IProblem problem : problems) { if (problem.isError()) { result.add(problem); } } return result; } }