package de.ovgu.cide.mining.autoeval; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.WorkspaceJob; import org.eclipse.core.runtime.CoreException; import cide.gast.ASTVisitor; import cide.gast.IASTNode; import cide.gparser.ParseException; import de.ovgu.cide.features.FeatureModelManager; import de.ovgu.cide.features.FeatureModelNotFoundException; import de.ovgu.cide.features.IFeature; import de.ovgu.cide.features.IFeatureModel; import de.ovgu.cide.features.source.ColoredSourceFile; import de.ovgu.cide.features.source.ColoredSourceFileIteratorAction; import de.ovgu.cide.features.source.ColoredSourceFileIteratorJob; public class SaveAnnotationAction extends ColoredSourceFileIteratorAction { @Override protected WorkspaceJob createJob(IProject[] p) { if (p.length == 1) try { return new SaveAnnotationJob(p[0]); } catch (FeatureModelNotFoundException e) { e.printStackTrace(); throw new RuntimeException(e); } else throw new RuntimeException("select one project only"); } } class SaveAnnotationJob extends ColoredSourceFileIteratorJob { final Map<IFeature, Set<String>> ids = new HashMap<IFeature, Set<String>>(); private IFeatureModel fm; public SaveAnnotationJob(IProject p) throws FeatureModelNotFoundException { super(p, "Loading seeds", "loadseed"); fm = FeatureModelManager.getInstance().getFeatureModel(p); for (IFeature feature : fm.getFeatures()) ids.put(feature, new HashSet<String>()); } @Override protected void processSource(final ColoredSourceFile source) throws CoreException { try { source.getAST().accept(new ASTVisitor() { @Override public boolean visit(IASTNode node) { for (IFeature feature : source.getColorManager().getColors( node)) ids.get(feature).add(node.getId()); return super.visit(node); } }); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override protected void finish() { // get instance and init the database for (IFeature feature : fm.getFeatures()) { if (!ids.get(feature).isEmpty()) AutoEval.writeElements("target_" + feature.getName() + ".log", ids.get(feature)); } super.finish(); } }