package annotator.find; import type.Type; /** * Specifies an insertion of a cast into a source file. Stores the type of cast * to insert in addition to the annotation and location. *

* In order to restrict the cast to only the specified expression, a cast * insertion is of the form: * *

 * ((cast type) (original expression))
 * 
* * This insertion inserts the cast type and parentheses that go before the * original expression. A {@link CloseParenthesisInsertion} must be used * after the expression to close the parentheses left open by this insertion. */ public class CastInsertion extends Insertion { /** * The type to cast to. */ private Type type; /** * Whether insertion is to take place on a bare array literal. */ public boolean onArrayLiteral = false; /** * Creates a new CastInsertion. * * @param criteria where to insert the text * @param type the un-annotated type to cast to */ public CastInsertion(Criteria criteria, Type type) { super(criteria, false); this.type = type; } /** * Gets the type for this insertion. It is assumed that the returned value will be modified * to update the type to be inserted. * @return the type */ public Type getType() { return type; } protected void setType(Type t) { type = t; } /** {@inheritDoc} */ @Override protected String getText(boolean comments, boolean abbreviate) { String result = onArrayLiteral ? "((new " + typeToString(type, comments, abbreviate) + " " : "((" + typeToString(type, comments, abbreviate) + ") ("; return result; } /** {@inheritDoc} */ @Override protected boolean addLeadingSpace(boolean gotSeparateLine, int pos, char precedingChar) { // Don't add a leading space if this cast is on the index of an array access. return super.addLeadingSpace(gotSeparateLine, pos, precedingChar) && precedingChar != '['; } /** {@inheritDoc} */ @Override protected boolean addTrailingSpace(boolean gotSeparateLine) { // Never add a trailing space after the first part of a cast insertion. return false; } public boolean isOnArrayLiteral() { return onArrayLiteral; } public void setOnArrayLiteral(boolean onArrayLiteral) { this.onArrayLiteral = onArrayLiteral; } /** {@inheritDoc} */ @Override public Kind getKind() { return Kind.CAST; } }