super.apply(document, trigger, offset);
super.apply(document, '\0', offset);
	public void apply(IDocument document, char trigger, int offset) {		if (shouldAppendArguments(document, offset)) {			try {				TypeArgumentProposal[] typeArgumentProposals= computeTypeArgumentProposals();				if (typeArgumentProposals.length > 0) {					int[] offsets= new int[typeArgumentProposals.length];					int[] lengths= new int[typeArgumentProposals.length];					StringBuffer buffer= createParameterList(typeArgumentProposals, offsets, lengths);					// set the generic type as replacement string					super.setReplacementString(buffer.toString());					// add import & remove package, update replacement offset					super.apply(document, trigger, offset);					if (getTextViewer() != null) {						if (hasAmbiguousProposals(typeArgumentProposals)) {							adaptOffsets(offsets, buffer);							installLinkedMode(document, offsets, lengths, typeArgumentProposals);						} else {							fSelectedRegion= new Region(getReplacementOffset() + getReplacementString().length(), 0);						}					}					return;				}			} catch (JavaModelException e) {				// log and continue				JavaPlugin.log(e);			}		}		// default is to use the super implementation		// reasons:		// - not a parameterized type,		// - already followed by <type arguments>		// - proposal type does not inherit from expected type		super.apply(document, trigger, offset);	}