package com.aptana.ide.core.builder;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IProgressMonitor;
import com.aptana.ide.lexer.Lexeme;
import com.aptana.ide.parsing.nodes.IParseNode;
public abstract class BuildParticipant
{
public abstract boolean isActive(IProject project);
/**
* Pre-build callback. DO NOT DO THE ACTUAL WORK ON THE CONTEXTS INVOLVING PARSING HERE, OR WE WILL RUN OUT OF
* MEMORY STORING ALL THEIR ASTS!!!
*
* @param contexts
* @param isBatch
* @param monitor
*/
public abstract void buildStarting(List<BuildContext> contexts, boolean isBatch, IProgressMonitor monitor);
public abstract void cleanStarting(IProject project);
// public abstract void reconcile(ReconcileContext context);
protected int getLineNumber(BuildContext context, IParseNode node)
{
return getLineNumber(context, node.getStartingLexeme());
}
protected int getLineNumber(BuildContext context, Lexeme lex)
{
if (context == null || lex == null)
return -1;
String contents = context.getContents();
if (contents == null)
return -1;
try
{
int line = contents.substring(0, lex.getStartingOffset()).split("\r\n|\r|\n").length;
return line;
}
catch (Exception e)
{
// ignore
}
return -1;
}
public abstract void buildFinishing(IProgressMonitor monitor);
/**
* Do the grunt work here. This is where it's ok to parse and get ASTs or Lexemes.
*
* @param context
* @param monitor
*/
public abstract void build(BuildContext context, IProgressMonitor monitor);
}