package annotator.find; import java.util.List; import java.util.LinkedHashSet; import java.util.Set; import type.Type; public class ConstructorInsertion extends TypedInsertion { private ReceiverInsertion receiverInsertion = null; private Set<Insertion> declarationInsertions = new LinkedHashSet<Insertion>(); /** * Construct a ConstructorInsertion. * <p> * To insert the annotation and the constructor (for example, * {@code @Anno Type this}) the name should be set to the type to insert. * This can either be done before calling this constructor, or by modifying * the return value of {@link #getType()}. * * @param type the type to use when inserting the constructor * @param criteria where to insert the text * @param innerTypeInsertions the inner types to go on this constructor */ public ConstructorInsertion(Type type, Criteria criteria, List<Insertion> innerTypeInsertions) { super(type, criteria, true, innerTypeInsertions); } /** {@inheritDoc} */ @Override protected String getText(boolean comments, boolean abbreviate) { StringBuilder b = new StringBuilder(); if (annotationsOnly) { // List<String> annotations = type.getAnnotations(); // if (annotations.isEmpty()) { return ""; } // for (String a : annotations) { // b.append(a); // b.append(' '); // } // return new AnnotationInsertion(b.toString(), getCriteria(), // getSeparateLine()).getText(comments, abbreviate); return ""; } else { boolean commentAnnotation = comments && getBaseType().getName().isEmpty(); String typeString = typeToString(type, commentAnnotation, true); int ix = typeString.lastIndexOf('$'); // FIXME: exclude '$' in source typeString = typeString.substring(ix+1); for (Insertion i : declarationInsertions) { b.append(i.getText(commentAnnotation, abbreviate)).append("\n"); if (abbreviate) { packageNames.addAll(i.getPackageNames()); } } b.append("public ").append(typeString).append("("); if (receiverInsertion != null && !receiverInsertion.getInserted()) { b.append(receiverInsertion.getText(comments, abbreviate)); } b.append(") { super(); }"); return b.toString(); } } protected ReceiverInsertion getReceiverInsertion() { return receiverInsertion; } public void addReceiverInsertion(ReceiverInsertion recv) { if (receiverInsertion == null) { receiverInsertion = recv; } else { receiverInsertion.getInnerTypeInsertions() .addAll(recv.getInnerTypeInsertions()); } } public void addDeclarationInsertion(Insertion ins) { declarationInsertions.add(ins); ins.setInserted(true); } /** {@inheritDoc} */ @Override protected boolean addLeadingSpace(boolean gotSeparateLine, int pos, char precedingChar) { return false; } /** {@inheritDoc} */ @Override protected boolean addTrailingSpace(boolean gotSeparateLine) { return false; } /** {@inheritDoc} */ @Override public Kind getKind() { return Kind.CONSTRUCTOR; } }