if ((startLine == currentTokenEndLine) || (currentTokenStartLine != currentTokenEndLine))
if (endOnCurrentTokenStart(startLine, currentTokenStartLine, currentTokenEndLine))
	private int computeEnd() throws CoreException{		int end= fSourceReference.getSourceRange().getOffset() + fSourceReference.getSourceRange().getLength();		try{				IScanner scanner= ToolFactory.createScanner(true, true, false, true);			String source= fCu.getSource();			scanner.setSource(source.toCharArray());			scanner.resetTo(end, Integer.MAX_VALUE);			TextBuffer buff= TextBuffer.create(source);			int startLine= buff.getLineOfOffset(scanner.getCurrentTokenEndPosition() + 1);						int token= scanner.getNextToken();			while (token != ITerminalSymbols.TokenNameEOF) {				switch (token) {					case ITerminalSymbols.TokenNameWHITESPACE:						break;					case ITerminalSymbols.TokenNameSEMICOLON:						break;						case ITerminalSymbols.TokenNameCOMMENT_LINE :						break;											default:{						int currentTokenStartLine= buff.getLineOfOffset(scanner.getCurrentTokenStartPosition() + 1);						int currentTokenEndLine= buff.getLineOfOffset(scanner.getCurrentTokenEndPosition() + 1);						if ((startLine == currentTokenEndLine) || (currentTokenStartLine != currentTokenEndLine))							return scanner.getCurrentTokenEndPosition() - scanner.getCurrentTokenSource().length + 1;						TextRegion nextLine= buff.getLineInformation(startLine + 1);						if (nextLine != null)							return nextLine.getOffset();						else							return end; //fallback						}					}				token= scanner.getNextToken();			}			return end;		} catch (InvalidInputException e){			return end;//fallback		}	}