package bluej.stride.framedjava.ast;
import java.security.InvalidParameterException;
import java.util.stream.Stream;
import bluej.stride.framedjava.elements.CodeElement;
import bluej.stride.framedjava.errors.CodeError;
import bluej.stride.framedjava.errors.ErrorShower;
import bluej.stride.framedjava.errors.SyntaxCodeError;
import bluej.stride.framedjava.slots.ExpressionSlot;
import bluej.stride.generic.Frame;
import bluej.stride.slots.EditableSlot;
import threadchecker.OnThread;
import threadchecker.Tag;
public class FrameFragment
extends JavaFragment{
private Frame frame;
private final String content;
private final CodeElement element;
public FrameFragment(Frame frame, CodeElement src, String content)
{
this.frame = frame;
this.content = content;
this.element = src;
if (content == null)
{
throw new InvalidParameterException("FrameFragment content cannot be null");
}
else if (content.contains("\n"))
{
throw new IllegalStateException("FrameFragment content contains newline");
}
}
@Override
protected String getJavaCode(Destination dest, ExpressionSlot<?> completing, Parser.DummyNameGenerator dummyNameGenerator)
{
return content;
}
@Override
public Stream findEarlyErrors()
{
return Stream.empty();
}
@Override
public void addError(CodeError codeError)
{
frame.addError(codeError);
}
@Override
public ErrorRelation checkCompileError(int startLine, int startColumn, int endLine, int endColumn)
{
if (frame == null)
return ErrorRelation.CANNOT_SHOW;
else
{
ErrorRelation errorRelation = super.checkCompileError(startLine, startColumn, endLine, endColumn);
if (errorRelation == ErrorRelation.OVERLAPS_FRAGMENT)
{
return ErrorRelation.OVERLAPS_FRAGMENT_FALLBACK;
}
else
{
return errorRelation;
}
}
}
@Override
@OnThread(Tag.FX)
protected JavaFragment getCompileErrorRedirect()
{
EditableSlot slot = frame.getErrorShowRedirect();
if (slot != null)
return slot.getSlotElement();
else{ return this;
}
}
@Override
@OnThread(Tag.FX)
public ErrorShower getErrorShower()
{
EditableSlot slot = frame.getErrorShowRedirect();
if (slot != null)
return slot;
else{ return frame;
}
}
public void setFrame(Frame frame)
{
this.frame = frame;
}
public CodeElement getElement()
{
return element;
}
}
top,
use,
map,
class FrameFragment
. FrameFragment
. getJavaCode
. findEarlyErrors
. addError
. checkCompileError
. getCompileErrorRedirect
. getErrorShower
. setFrame
. getElement
135 neLoCode
+ 0 LoComm