@Override protected void addExprVariable(@NotNull PsiElement expr, Template template) { final FindViewByIdMacro toStringIfNeedMacro = new FindViewByIdMacro(); MacroCallNode macroCallNode = new MacroCallNode(toStringIfNeedMacro); macroCallNode.addParameter(new ConstantNode(expr.getText())); template.addVariable("expr", macroCallNode, false); }
private static Template generateTemplate( Project project, String exprText, final PsiType[] suggestedTypes) { final TemplateManager templateManager = TemplateManager.getInstance(project); final Template template = templateManager.createTemplate("", ""); template.setToReformat(true); Set<LookupElement> itemSet = new LinkedHashSet<>(); for (PsiType type : suggestedTypes) { itemSet.add(PsiTypeLookupItem.createLookupItem(type, null)); } final LookupElement[] lookupItems = itemSet.toArray(new LookupElement[itemSet.size()]); final Result result = suggestedTypes.length > 0 ? new PsiTypeResult(suggestedTypes[0], project) : null; Expression expr = new Expression() { @Override public LookupElement[] calculateLookupItems(ExpressionContext context) { return lookupItems.length > 1 ? lookupItems : null; } @Override public Result calculateResult(ExpressionContext context) { return result; } @Override public Result calculateQuickResult(ExpressionContext context) { return null; } }; template.addTextSegment("(("); template.addVariable(TYPE_TEMPLATE_VARIABLE, expr, expr, true); template.addTextSegment(")" + exprText + ")"); template.addEndVariable(); return template; }
@Override protected void setVariables(@NotNull Template template, @NotNull PsiElement element) { MacroCallNode node = new MacroCallNode(new VariableOfTypeMacro()); node.addParameter(new ConstantNode(CONTEXT.toString())); template.addVariable("context", node, new ConstantNode(""), false); }