package de.ovgu.cide.mining.autoeval; import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.Map.Entry; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import cide.gast.ASTVisitor; import cide.gast.IASTNode; import cide.gparser.ParseException; import de.ovgu.cide.features.IFeature; import de.ovgu.cide.features.source.ColoredSourceFile; import de.ovgu.cide.features.source.ColoredSourceFileIteratorJob; import de.ovgu.cide.features.source.SourceFileColorManager; class LoadSeedsJob extends ColoredSourceFileIteratorJob { private Map<IFeature, Set<String>> seeds; public LoadSeedsJob(IProject p, Set<SeedInfo> seedInfos) { super(new IProject[] { p }, "Loading seeds", "loadseed"); this.seeds = new HashMap<IFeature, Set<String>>(); for (SeedInfo seedInfo : seedInfos) { Set<String> elements = AutoEval.readElements(p .getFile(seedInfo.filename)); if (!elements.isEmpty()) if (seeds.get(seedInfo.feature) != null) seeds.get(seedInfo.feature).addAll(elements); else seeds.put(seedInfo.feature, elements); } } @Override protected void processSource(final ColoredSourceFile source) throws CoreException { try { final SourceFileColorManager colorManager = source .getColorManager(); colorManager.beginBatch(); try { // clear all colors source.getAST().accept(new ASTVisitor() { @Override public boolean visit(IASTNode node) { colorManager.clearColor(node); return super.visit(node); } }); // then load seeds for (final Entry<IFeature, Set<String>> entry : seeds .entrySet()) { source.getAST().accept(new ASTVisitor() { @Override public boolean visit(IASTNode node) { if (entry.getValue().contains(node.getId())) source.getColorManager().addColor(node, entry.getKey()); return super.visit(node); } }); } } finally { colorManager.endBatch(); } } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }