/* * 12/11/2010 * ParameterizedCompletion.java - A completion option. * This library is distributed under a modified BSD license. See the included * AutoComplete.License.txt file for details. */ package org.fife.ui.autocomplete; import javax.swing.text.JTextComponent; /** * A completion option that takes parameters, such as a function or method. * * @author Robert Futrell * @version 1.0 */ public interface ParameterizedCompletion extends Completion { /** * Returns the "definition string" for this completion. For example, for the C * "printf" function, this would return * "int printf(const char *, ...)". * * @return The definition string. */ public String getDefinitionString(); /** * Returns the specified {@link Parameter}. * * @param index The index of the parameter to retrieve. * @return The parameter. * @see #getParamCount() */ public Parameter getParam(int index); /** * Returns the number of parameters this completion takes. * * @return The number of parameters this completion takes. * @see #getParam(int) */ public int getParamCount(); public ParameterizedCompletionInsertionInfo getInsertionInfo(JTextComponent tc, boolean replaceTabsWithSpaces); /** * Returns whether a tool tip displaying assistance for each parameter while it * is being edited is appropriate for this completion. * * @return Whether the tool tip is appropriate to display. */ public boolean getShowParameterToolTip(); /** * A parameter passed to a parameterized {@link Completion}. */ public static class Parameter { private String name; private Object type; private String desc; private boolean isEndParam; /** * Constructor. * * @param type The type of this parameter. This may be null for * languages without specific types, dynamic typing, etc. Usually * you'll pass a String for this value, but you may pass any object * representing a type in your language, as long as its * toString() method returns a string representation of * the type. * @param name The name of the parameter. */ public Parameter(Object type, String name) { this(type, name, false); } /** * Constructor. * * @param type The type of this parameter. This may be null for * languages without specific types, dynamic typing, etc. * Usually you'll pass a String for this value, but you may pass * any object representing a type in your language, as long as * its toString() method returns a string * representation of the type. * @param name The name of the parameter. * @param endParam Whether this parameter is an "ending parameter;" that is, * whether this parameter is at a logical "ending point" in the * completion text. If the user types in a parameter that is an * ending point, parameter completion mode terminates. Set this * to true for a trailing parameter after a * function call's closing ')', for example. */ public Parameter(Object type, String name, boolean endParam) { this.name = name; this.type = type; this.isEndParam = endParam; } public String getDescription() { return desc; } public String getName() { return name; } /** * Returns the type of this parameter, as a string. * * @return The type of the parameter, or null for none. */ public String getType() { return type == null ? null : type.toString(); } /** * Returns the object used to describe the type of this parameter. * * @return The type object, or null for none. */ public Object getTypeObject() { return type; } /** * @return Whether this parameter is an "ending parameter;" that is, whether * this parameter is at a logical "ending point" in the completion text. * If the user types in a parameter that is an ending point, parameter * completion mode terminates. */ public boolean isEndParam() { return isEndParam; } public void setDescription(String desc) { this.desc = desc; } @Override public String toString() { StringBuilder sb = new StringBuilder(); if (getType() != null) { sb.append(getType()); } if (getName() != null) { if (getType() != null) { sb.append(' '); } sb.append(getName()); } return sb.toString(); } } }