@Override protected void validateVariables(TemplateVariable[] variables) throws TemplateException { // check for multiple cursor variables for (int i= 0; i < variables.length; i++) { TemplateVariable var= variables[i]; if (var.getType().equals(GlobalTemplateVariables.Cursor.NAME)) { if (var.getOffsets().length > 1) { throw new TemplateException(JavaTemplateMessages.ContextType_error_multiple_cursor_variables); } } } }
private static List variablesToPositions(TemplateVariable[] variables) { List positions = new ArrayList(5); for (int i = 0; i != variables.length; i++) { int[] offsets = variables[i].getOffsets(); // trim positions off whitespace String value = variables[i].getDefaultValue(); int wsStart = 0; while (wsStart < value.length() && Character.isWhitespace(value.charAt(wsStart))) { wsStart++; } variables[i].getValues()[0] = value.substring(wsStart); for (int j = 0; j != offsets.length; j++) { offsets[j] += wsStart; positions.add(new RangeMarker(offsets[j], 0)); } } return positions; }
@Override public void resolve(TemplateVariable variable, TemplateContext context) { variable.setUnambiguous(true); variable.setValue(""); //$NON-NLS-1$ if (context instanceof JavaContext) { JavaContext jc= (JavaContext) context; List<String> params= variable.getVariableType().getParams(); if (params.size() > 0) { for (Iterator<String> iterator= params.iterator(); iterator.hasNext();) { String typeName= iterator.next(); jc.addImport(typeName); } } } else { super.resolve(variable, context); } }
private void resolveWithParams(TemplateVariable variable, TemplateContext context, List<String> params) { String selection= context.getVariable(SELECTION); if (selection != null && !selection.isEmpty()) { variable.setValue(selection); } else { String defaultValue= params.get(0); variable.setValue(defaultValue); } variable.setUnambiguous(true); variable.setResolved(true); } }
private static void positionsToVariables(Position[] positions, TemplateVariable[] variables, int start) { for (int i = 0; i != variables.length; i++) { TemplateVariable variable = variables[i]; int[] offsets = new int[variable.getOffsets().length]; for (int j = 0; j != offsets.length; j++) { offsets[j] = positions[j].getOffset() - start; } variable.setOffsets(offsets); } }
/** * Creates a template variable with multiple possible values. * * @param type the type of the variable * @param name the name of the variable * @param values the values available at this variable, non-empty * @param offsets the array of offsets of the variable * @since 3.3 */ TemplateVariable(TemplateVariableType type, String name, String[] values, int[] offsets) { Assert.isNotNull(type); Assert.isNotNull(name); fType= type; fName= name; setValues(values); setOffsets(offsets); setUnambiguous(false); setResolved(false); fInitialLength= values[0].length(); }
TemplateVariable variable= variables[i]; if (variable.isUnambiguous()) continue; int[] offsets= variable.getOffsets(); int length= variable.getLength(); String[] values= variable.getValues(); ICompletionProposal[] proposals= new ICompletionProposal[values.length]; for (int j= 0; j < values.length; j++) {
private static String fixEmptyVariables(TemplateBuffer buffer, String[] variables) throws MalformedTreeException, BadLocationException { IDocument doc= new Document(buffer.getString()); int nLines= doc.getNumberOfLines(); MultiTextEdit edit= new MultiTextEdit(); HashSet removedLines= new HashSet(); for (int i= 0; i < variables.length; i++) { TemplateVariable position= findVariable(buffer, variables[i]); // look if Javadoc tags have to be added if (position == null || position.getLength() > 0) { continue; } int[] offsets= position.getOffsets(); for (int k= 0; k < offsets.length; k++) { int line= doc.getLineOfOffset(offsets[k]); IRegion lineInfo= doc.getLineInformation(line); int offset= lineInfo.getOffset(); String str= doc.get(offset, lineInfo.getLength()); if (Strings.containsOnlyWhitespaces(str) && nLines > line + 1 && removedLines.add(new Integer(line))) { int nextStart= doc.getLineOffset(line + 1); edit.addChild(new DeleteEdit(offset, nextStart - offset)); } } } edit.apply(doc, 0); return doc.get(); }
TemplateVariable variable= variables[i]; if (!variable.isResolved()) resolve(variable, context); String value= variable.getDefaultValue(); int[] offsets= variable.getOffsets(); edits.add(new ReplaceEdit(offsets[k], variable.getInitialLength(), value));
for (int i= 0; i != variables.length; i++) { final TemplateVariable variable= variables[i]; int[] offsets= variable.getOffsets(); String value= variable.getDefaultValue(); if (isWhitespaceVariable(value)) {
@Override public void resolve(TemplateVariable variable, TemplateContext context) { List<String> params= variable.getVariableType().getParams(); if (params.size() >= 1 && params.get(0) != null) { resolveWithParams(variable, context, params); } else { // No parameter, use default: super.resolve(variable, context); } }
@Override public void resolve(TemplateVariable variable, TemplateContext context) { variable.setUnambiguous(false); if (variable instanceof JavaVariable) { JavaContext jc= (JavaContext) context; JavaVariable jv= (JavaVariable) variable; List<String> params= variable.getVariableType().getParams(); if (params.size() > 0) { fProposals= new String[params.size()]; int i= 0; for (Iterator<String> iterator= params.iterator(); iterator.hasNext();) { String param= iterator.next(); fProposals[i]= param; i++; } jv.setChoices(fProposals); jv.setCurrentChoice(fProposals[0]); jc.markAsUsed(jv.getDefaultValue()); } else { fProposals= new String[] { variable.getDefaultValue() }; super.resolve(variable, context); return; } } else super.resolve(variable, context); }
private static TemplateVariable findVariable(TemplateBuffer buffer, String variable) { TemplateVariable[] positions= buffer.getVariables(); for (int i= 0; i < positions.length; i++) { TemplateVariable curr= positions[i]; if (variable.equals(curr.getType())) { return curr; } } return null; }
@Override public void resolve(TemplateVariable variable, TemplateContext templateContext) { XtextTemplateContext castedContext = (XtextTemplateContext) templateContext; List<String> names = resolveValues(variable, castedContext); String[] bindings = names.toArray(new String[names.size()]); if (bindings.length != 0) variable.setValues(bindings); if (bindings.length > 1) variable.setUnambiguous(false); else variable.setUnambiguous(isUnambiguous(castedContext)); variable.setResolved(true); }
public void resolve(TemplateVariable variable, TemplateContext context) { List params= variable.getVariableType().getParams(); if (params.size() == 0) fType= fDefaultType; else fType= (String) params.get(0); if (variable instanceof JavaVariable) { JavaContext jc= (JavaContext) context; JavaVariable jv= (JavaVariable) variable; jv.setParamType(fType); Variable[] fields= jc.getFields(fType); if (fields.length > 0) { jv.setChoices(fields); jc.markAsUsed(jv.getDefaultValue()); } else { super.resolve(variable, context); return; } if (fields.length > 1) variable.setUnambiguous(false); else variable.setUnambiguous(isUnambiguous(context)); } else super.resolve(variable, context); }
@Override public void resolve(TemplateVariable variable, TemplateContext context) { List params = variable.getVariableType().getParams(); String[] bindings = new String[params.size()]; for (int i = 0; i < params.size(); i++) { bindings[i] = params.get(i).toString(); } if (bindings.length != 0) variable.setValues(bindings); variable.setResolved(true); }
private static List<RangeMarker> variablesToPositions(TemplateVariable[] variables) { List<RangeMarker> positions= new ArrayList<>(5); for (int i= 0; i != variables.length; i++) { int[] offsets= variables[i].getOffsets(); for (int j= 0; j != offsets.length; j++) positions.add(new RangeMarker(offsets[j], 0)); } return positions; }
@Override public void resolve(TemplateVariable variable, TemplateContext context) { if (variable instanceof MultiVariable) { JavaContext jc= (JavaContext) context; JavaVariable jv= (JavaVariable) variable; Variable[] iterables= getVariables(jc); if (iterables.length > 0) { jv.setChoices(iterables); jc.markAsUsed(iterables[0].getName()); if (iterables.length > 1) variable.setUnambiguous(false); else variable.setUnambiguous(isUnambiguous(context)); return; } } super.resolve(variable, context); } }
/** * Returns the default value of the variable. Typically, this is the first of * the possible values (see {@link #getValues()}. * * @return the default value of the variable */ public String getDefaultValue() { return getValues()[0]; }
TemplateVariable getTemplateVariable(String name) { TemplateVariable variable= (TemplateVariable) fVariables.get(name); if (variable != null && !variable.isResolved()) getContextType().resolve(variable, this); return variable; }