package org.bndtools.builder.handlers.activator;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.bndtools.build.api.AbstractBuildErrorDetailsHandler;
import org.bndtools.build.api.MarkerData;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProject;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.ui.IMarkerResolution;
import aQute.bnd.build.Project;
import aQute.bnd.osgi.Verifier.BundleActivatorError;
import aQute.service.reporter.Report.Location;
public class BundleActivatorErrorHandler extends AbstractBuildErrorDetailsHandler {
@Override
public List<MarkerData> generateMarkerData(IProject project, Project model, Location location) throws Exception {
List<MarkerData> result = new ArrayList<MarkerData>();
BundleActivatorError baError = (BundleActivatorError) location.details;
IJavaProject javaProject = JavaCore.create(project);
Map<String,Object> attribs = createMessageMarkerAttributes(baError, location.message);
//Eclipse line numbers are 1 indexed
attribs.put(IMarker.LINE_NUMBER, location.line + 1);
// Add a marker to the bnd file on the BundleActivator line
result.add(new MarkerData(getDefaultResource(project), attribs, false));
MarkerData md;
switch (baError.errorType) {
case NO_SUITABLE_CONSTRUCTOR :
md = createMethodMarkerData(javaProject, baError.activatorClassName, "<init>", "()V", createMessageMarkerAttributes(baError, location.message), false);
if (md != null) {
result.add(md);
break;
}
//$FALL-THROUGH$
case IS_INTERFACE :
case IS_ABSTRACT :
case NOT_PUBLIC :
case NOT_AN_ACTIVATOR :
case DEFAULT_PACKAGE :
case IS_IMPORTED :
md = createTypeMarkerData(javaProject, baError.activatorClassName, createMessageMarkerAttributes(baError, location.message), false);
if (md != null)
result.add(md);
break;
case NOT_ACCESSIBLE :
default :
//No file to mark
break;
}
return result;
}
private Map<String,Object> createMessageMarkerAttributes(BundleActivatorError baError, String message) {
Map<String,Object> attribs = new HashMap<String,Object>();
attribs.put("BundleActivatorError.activatorClassName", baError.activatorClassName);
attribs.put("BundleActivatorError.errorType", baError.errorType.toString());
attribs.put(IMarker.MESSAGE, message.trim());
return attribs;
}
@Override
public List<IMarkerResolution> getResolutions(IMarker marker) {
// TODO Auto-generated method stub
return null;
}
@Override
public List<ICompletionProposal> getProposals(IMarker marker) {
// TODO Auto-generated method stub
return null;
}
}