else if (c.offset > start && contentStart < lineEnd && d.getChar(contentStart) == '}') { int firstCharPos= scanner.findNonWhitespaceBackward(c.offset - 1, start); if (firstCharPos != JavaHeuristicScanner.NOT_FOUND && d.getChar(firstCharPos) == '{') { c.caretOffset= c.offset + buf.length(); c.shiftsCaret= false;  StringBuffer reference= null; int nonWS= findEndOfWhiteSpace(d, start, lineEnd); if (nonWS < c.offset && d.getChar(nonWS) == '{') reference= new StringBuffer(d.get(start, nonWS - start)); else reference= indenter.getReferenceIndentation(c.offset);  buf.append(getLineDelimiter(d));  if (reference != null) buf.append(reference); } }
	private void smartIndentAfterNewLine(IDocument d, DocumentCommand c) {		JavaHeuristicScanner scanner= new JavaHeuristicScanner(d);		JavaIndenter indenter= new JavaIndenter(d, scanner);		StringBuffer indent= indenter.computeIndentation(c.offset);		if (indent == null)			indent= new StringBuffer(); //$NON-NLS-1$		int docLength= d.getLength();		if (c.offset == -1 || docLength == 0)			return;		try {			int p= (c.offset == docLength ? c.offset - 1 : c.offset);			int line= d.getLineOfOffset(p);			StringBuffer buf= new StringBuffer(c.text + indent);			IRegion reg= d.getLineInformation(line);			int lineEnd= reg.getOffset() + reg.getLength();			int contentStart= findEndOfWhiteSpace(d, c.offset, lineEnd);			c.length=  Math.max(contentStart - c.offset, 0);					int start= reg.getOffset();			ITypedRegion region= TextUtilities.getPartition(d, fPartitioning, start, true);			if (IJavaPartitions.JAVA_DOC.equals(region.getType()))				start= d.getLineInformationOfOffset(region.getOffset()).getOffset();							if (getBracketCount(d, start, c.offset, true) > 0 && closeBrace() && !isClosed(d, c.offset, c.length)) {				c.caretOffset= c.offset + buf.length();				c.shiftsCaret= false;								// copy old content of line behind insertion point to new line				// unless we think we are inserting an anonymous type definition				if (c.offset == 0 || !(computeAnonymousPosition(d, c.offset - 1, fPartitioning, lineEnd) != -1)) {					if (lineEnd - contentStart > 0) {						c.length=  lineEnd - c.offset;						buf.append(d.get(contentStart, lineEnd - contentStart).toCharArray());					}				}							buf.append(getLineDelimiter(d));				StringBuffer reference= null;				int nonWS= findEndOfWhiteSpace(d, start, lineEnd);				if (nonWS < c.offset && d.getChar(nonWS) == '{')					reference= new StringBuffer(d.get(start, nonWS - start));				else					reference= indenter.getReferenceIndentation(c.offset);				if (reference != null)					buf.append(reference);				buf.append('}');			}			c.text= buf.toString();		} catch (BadLocationException e) {			JavaPlugin.log(e);		}	}