package com.dragome.compiler.units;
import java.io.IOException;
import java.io.Writer;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedHashSet;
import com.dragome.compiler.type.Signature;
import com.dragome.compiler.utils.Log;
public abstract class ProcedureUnit extends MemberUnit
{
private String nameAndSignature;
public String getNameAndSignature()
{
return nameAndSignature;
}
private Collection<Signature> targetSignatures= new LinkedHashSet<Signature>();
public ProcedureUnit(Signature theSignature, ClassUnit theDeclaringClazz, String nameAndSignature)
{
super(theSignature, theDeclaringClazz);
this.nameAndSignature = nameAndSignature;
}
public void addTarget(Signature targetSignature)
{
if (!targetSignature.toString().contains("#"))
{
throw new IllegalArgumentException("Signature must be field or method: " + targetSignature);
}
targetSignatures.add(targetSignature);
}
public void removeTargets()
{
Iterator iter= targetSignatures.iterator();
while (iter.hasNext())
{
iter.next();
iter.remove();
}
}
public void write(int depth, Writer writer) throws IOException
{
if (getData() == null)
return;
Log.getLogger().debug(getIndent(depth) + getSignature());
writer.write(getData());
}
public String getData()
{
if (!declaringClass.isResolved())
throw new RuntimeException("Class must be resolved");
return super.getData();
}
public Collection<Signature> getTargetSignatures()
{
return targetSignatures;
}
}