Bug 99325 [syntax highlighting] semantic highlighting broken when using "convert to new for loop"
I20050610-0010 (no regression, though - just exposed by the quick fix) - In the code below, execute the "convert to new for loop" quick fix - undo -> note that the 'for' keyword is wrongly colored. -> subsequent reconciles do not correct the failure -> only doing a major change (cutting and pasting entire method, closing editor..) corrects the problem class Test{ void m() { LinkedList<Number> list = null; for (Iterator it = list.iterator(); it.hasNext();) { Number num = (Number) it.next(); System.out.println(num.intValue()); } } } Code inspection revealed that SemanticHighlightingPresenter.contain() relies on positions being disjoint, which is not true in this case: the quick fix modifies the document in a way that produces many positions at the same offset/length. A fix would change indexOf() to check all positions at a certain offset instead of the index returned. Need to talk to Christof about whether the position updater might be doing the wrong thing...
org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingPresenter.java
}
		/*
		 * @see org.eclipse.jface.text.IPositionUpdater#update(org.eclipse.jface.text.DocumentEvent)
		 */
		public void update(DocumentEvent event) {
			int eventOffset= event.getOffset();
			int eventOldLength= event.getLength();
			int eventEnd= eventOffset + eventOldLength;
			try {
				Position[] positions= event.getDocument().getPositions(fCategory);
				for (int i= 0; i != positions.length; i++) {
					HighlightedPosition position= (HighlightedPosition) positions[i];
					
					int offset= position.getOffset();
					int length= position.getLength();
					int end= offset + length;
					if (offset > eventEnd)
						updateWithPrecedingEvent(position, event);
					else if (end < eventOffset)
						updateWithSucceedingEvent(position, event);
					else if (offset <= eventOffset && end >= eventEnd)
						updateWithIncludedEvent(position, event);
					else if (offset <= eventOffset)
						updateWithOverEndEvent(position, event);
					else if (end >= eventEnd)
						updateWithOverStartEvent(position, event);
					else
						updateWithIncludingEvent(position, event);
				}
			} catch (BadPositionCategoryException e) {