/*******************************************************************************
* Copyright (c) 2005, 2008 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
* QNX Software System
* Anton Leherbauer (Wind River Systems)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.editor;
import java.util.Iterator;
import org.eclipse.core.resources.IMarker;
import org.eclipse.ui.texteditor.MarkerAnnotation;
import org.eclipse.ui.texteditor.MarkerUtilities;
import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.ICModelMarker;
import org.eclipse.cdt.core.model.ITranslationUnit;
public class CMarkerAnnotation extends MarkerAnnotation implements IProblemAnnotation, ICAnnotation {
public static final String C_MARKER_TYPE_PREFIX= "org.eclipse.cdt"; //$NON-NLS-1$
public static final String ERROR_ANNOTATION_TYPE= "org.eclipse.cdt.ui.error"; //$NON-NLS-1$
public static final String WARNING_ANNOTATION_TYPE= "org.eclipse.cdt.ui.warning"; //$NON-NLS-1$
public static final String INFO_ANNOTATION_TYPE= "org.eclipse.cdt.ui.info"; //$NON-NLS-1$
public static final String TASK_ANNOTATION_TYPE= "org.eclipse.ui.workbench.texteditor.task"; //$NON-NLS-1$
private boolean fIsProblemMarker;
private ICAnnotation fOverlay;
public CMarkerAnnotation(IMarker marker) {
super(marker);
fIsProblemMarker = MarkerUtilities.isMarkerType(getMarker(), IMarker.PROBLEM);
}
/**
* @see IProblemAnnotation#getMessage()
*/
public String getMessage() {
if (fIsProblemMarker)
return getMarker().getAttribute(IMarker.MESSAGE, ""); //$NON-NLS-1$
return ""; //$NON-NLS-1$
}
/**
* @see IProblemAnnotation#isError()
*/
public boolean isError() {
if (fIsProblemMarker) {
int markerSeverity= getMarker().getAttribute(IMarker.SEVERITY, -1);
return (markerSeverity == IMarker.SEVERITY_ERROR);
}
return false;
}
/**
* @see IProblemAnnotation#isWarning()
*/
public boolean isWarning() {
if (fIsProblemMarker) {
int markerSeverity= getMarker().getAttribute(IMarker.SEVERITY, -1);
return (markerSeverity == IMarker.SEVERITY_WARNING);
}
return false;
}
/**
* @see IProblemAnnotation#isTemporaryProblem()
*/
public boolean isTemporaryProblem() {
return false;
}
/**
* @see IProblemAnnotation#getArguments()
*/
public String[] getArguments() {
String [] s = {"problem", "here"}; //$NON-NLS-1$ //$NON-NLS-2$
//if (fIsProblemMarker)
// return Util.getProblemArgumentsFromMarker(getMarker().getAttribute(CCorePlugin.C_PROBLEMMARKER));
return s;
//returnm null;
}
/**
* @see IProblemAnnotation#getId()
*/
public int getId() {
if (fIsProblemMarker)
return getMarker().getAttribute(ICModelMarker.C_MODEL_PROBLEM_MARKER, -1);
return 0;
}
/*
* @see org.eclipse.cdt.internal.ui.editor.IProblemAnnotation#isProblem()
*/
public boolean isProblem() {
return fIsProblemMarker;
}
/**
* Overlays this annotation with the given cAnnotation.
*
* @param cAnnotation annotation that is overlaid by this annotation
*/
public void setOverlay(ICAnnotation cAnnotation) {
if (fOverlay != null)
fOverlay.removeOverlaid(this);
fOverlay= cAnnotation;
if (!isMarkedDeleted())
markDeleted(fOverlay != null);
if (fOverlay != null)
fOverlay.addOverlaid(this);
}
/*
* @see ICAnnotation#hasOverlay()
*/
public boolean hasOverlay() {
return fOverlay != null;
}
/*
* @see org.eclipse.cdt.internal.ui.editor.ICAnnotation#getOverlay()
*/
public ICAnnotation getOverlay() {
return fOverlay;
}
/*
* @see ICAnnotation#addOverlaid(ICAnnotation)
*/
public void addOverlaid(ICAnnotation annotation) {
// not supported
}
/*
* @see ICAnnotation#removeOverlaid(ICAnnotation)
*/
public void removeOverlaid(ICAnnotation annotation) {
// not supported
}
/*
* @see ICAnnotation#getOverlaidIterator()
*/
public Iterator<ICAnnotation> getOverlaidIterator() {
// not supported
return null;
}
/* (non-Javadoc)
* @see org.eclipse.jdt.internal.ui.javaeditor.IJavaAnnotation#getCompilationUnit()
*/
public ITranslationUnit getTranslationUnit() {
ICElement element= CoreModel.getDefault().create(getMarker().getResource());
if (element instanceof ITranslationUnit) {
return (ITranslationUnit)element;
}
return null;
}
public String getMarkerType() {
IMarker marker= getMarker();
if (marker == null || !marker.exists())
return null;
return MarkerUtilities.getMarkerType(getMarker());
}
}