package bluej.stride.framedjava.slots;
import java.util.List;
import java.util.Optional;
import bluej.editor.stride.FrameCatalogue;
import bluej.stride.framedjava.ast.ExpressionSlotFragment;
import bluej.stride.framedjava.ast.JavaFragment;
import bluej.stride.framedjava.ast.SuperThis;
import bluej.stride.framedjava.ast.links.PossibleLink;
import bluej.stride.framedjava.frames.CodeFrame;
import bluej.stride.generic.Frame;
import bluej.stride.generic.FrameContentRow;
import bluej.stride.generic.InteractionManager;
import bluej.stride.slots.ChoiceSlot;
import bluej.utility.javafx.FXConsumer;
import bluej.utility.javafx.FXPlatformConsumer;
import threadchecker.OnThread;
import threadchecker.Tag;
| Created by neil on 22/05/2016.
|
public abstract class ExpressionSlot<SLOT_FRAGMENT extends ExpressionSlotFragment> extends StructuredSlot<SLOT_FRAGMENT, InfixExpression, ExpressionCompletionCalculator>{
private ChoiceSlot<SuperThis> paramsToConstructor;
public ExpressionSlot(InteractionManager editor, Frame parentFrame, CodeFrame<?> parentCodeFrame, FrameContentRow row, String stylePrefix, List<FrameCatalogue.Hint> hints)
{
super(editor, parentFrame, parentCodeFrame, row, stylePrefix, new ExpressionCompletionCalculator(editor), hints);
}
@Override
public ExpressionSlot asExpressionSlot()
{
return this;
}
public void setText(ExpressionSlotFragment rhs)
{
rhs.registerSlot(this);
setText(rhs.getContent());
}
@Override
protected InfixExpression newInfix(InteractionManager editor, ModificationToken token)
{
return new InfixExpression(editor, this, token);
}
@Override
@OnThread(Tag.FXPlatform)
public void saved()
{
if (getParentFrame().isFrameEnabled())
{
if (paramsToConstructor != null)
{
topLevel.treatAsConstructorParams_updatePrompts();
}
}
}
public void setParamsToConstructor(ChoiceSlot<SuperThis> paramsToConstructor)
{
this.paramsToConstructor = paramsToConstructor;
}
boolean isConstructorParams()
{
return paramsToConstructor != null;
}
@OnThread(Tag.FXPlatform)
void withParamNamesForConstructor(FXPlatformConsumer<List<List<String>>> handler)
{
editor.afterRegenerateAndReparse(() -> {
completionCalculator.withConstructorParamNames(paramsToConstructor.getValue(SuperThis.EMPTY), handler);
});
}
@OnThread(Tag.FXPlatform)
p.public void withParamNamesForPos(CaretPos pos, String methodName, FXPlatformConsumer<List<List<String>>> handler)
{
editor.afterRegenerateAndReparse(() -> {
JavaFragment.PosInSourceDoc posJava = getSlotElement().getPosInSourceDoc(topLevel.caretPosToStringPos(pos, true));
completionCalculator.withParamNames(posJava, this.asExpressionSlot(), methodName, parentCodeFrame.getCode(), handler);
});
}
@OnThread(Tag.FXPlatform)
p.public void withParamHintsForPos(CaretPos pos, String methodName, FXPlatformConsumer<List<List<String>>> handler)
{
editor.afterRegenerateAndReparse(() -> {
JavaFragment.PosInSourceDoc posJava = getSlotElement().getPosInSourceDoc(topLevel.caretPosToStringPos(pos, true));
completionCalculator.withParamHints(posJava, this.asExpressionSlot(), methodName, parentCodeFrame.getCode(), handler);
});
}
@OnThread(Tag.FXPlatform)
p.public void withParamHintsForConstructor(int totalParams, FXPlatformConsumer<List<List<String>>> handler)
{
editor.afterRegenerateAndReparse(() -> {
completionCalculator.withConstructorParamHints(paramsToConstructor.getValue(SuperThis.EMPTY), totalParams, handler);
});
}
@OnThread(Tag.FXPlatform)
p.public void withMethodHint(CaretPos pos, String methodName, FXPlatformConsumer<List<String>> handler)
{
editor.afterRegenerateAndReparse(() -> {
JavaFragment.PosInSourceDoc posJava = getSlotElement().getPosInSourceDoc(topLevel.caretPosToStringPos(pos, true));
completionCalculator.withMethodHints(posJava, this.asExpressionSlot(), methodName, parentCodeFrame.getCode(), handler);
});
}
@Override
public boolean canCollapse()
{
return isConstructorParams();
}
public List extends PossibleLink> findLinks()
{
return topLevel.findLinks(Optional.empty(), getSlotElement().getVars(), offset -> getSlotElement().getPosInSourceDoc(offset), 0);
}
}
. ExpressionSlot
. asExpressionSlot
. setText
. newInfix
. saved
. setParamsToConstructor
. withParamNamesForConstructor
. withParamNamesForPos
. withParamHintsForPos
. withParamHintsForConstructor
. withMethodHint
. canCollapse
. findLinks
149 neLoCode
+ 1 LoComm