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 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