mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-09-10 12:03:16 +02:00
2004-11-24 Alain Magloire
Remove unused class, reduce confusion in code maintainance. * src/org/eclipse/cdt/internal/ui/util/ProblemItemMapper.java
This commit is contained in:
parent
c4a7c7ac9d
commit
58c90760ea
2 changed files with 4 additions and 201 deletions
|
@ -1,3 +1,7 @@
|
||||||
|
2004-11-24 Alain Magloire
|
||||||
|
Remove unused class, reduce confusion in code maintainance.
|
||||||
|
* src/org/eclipse/cdt/internal/ui/util/ProblemItemMapper.java
|
||||||
|
|
||||||
2004-11-19 Alain Magloire
|
2004-11-19 Alain Magloire
|
||||||
Fix for PR 39204
|
Fix for PR 39204
|
||||||
* src/org/eclipse/cdt/internal/ui/editor/CEditor.java
|
* src/org/eclipse/cdt/internal/ui/editor/CEditor.java
|
||||||
|
|
|
@ -1,201 +0,0 @@
|
||||||
/*******************************************************************************
|
|
||||||
* Copyright (c) 2000, 2004 QNX Software Systems and others.
|
|
||||||
* All rights reserved. This program and the accompanying materials
|
|
||||||
* are made available under the terms of the Common Public License v1.0
|
|
||||||
* which accompanies this distribution, and is available at
|
|
||||||
* http://www.eclipse.org/legal/cpl-v10.html
|
|
||||||
*
|
|
||||||
* Contributors:
|
|
||||||
* QNX Software Systems - Initial API and implementation
|
|
||||||
*******************************************************************************/
|
|
||||||
package org.eclipse.cdt.internal.ui.util;
|
|
||||||
|
|
||||||
|
|
||||||
import org.eclipse.cdt.core.model.ICElement;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Stack;
|
|
||||||
|
|
||||||
import org.eclipse.core.resources.IResource;
|
|
||||||
import org.eclipse.core.runtime.IPath;
|
|
||||||
|
|
||||||
import org.eclipse.swt.graphics.Image;
|
|
||||||
import org.eclipse.swt.widgets.Item;
|
|
||||||
|
|
||||||
import org.eclipse.jface.viewers.ILabelProvider;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Helper class for updating error markers.
|
|
||||||
* Items are mapped to paths of their underlying resources.
|
|
||||||
* Method <code>problemsChanged</code> updates all items that are affected from the changed
|
|
||||||
* elements.
|
|
||||||
*/
|
|
||||||
public class ProblemItemMapper {
|
|
||||||
|
|
||||||
private static final int NUMBER_LIST_REUSE= 10;
|
|
||||||
|
|
||||||
// map from path to item
|
|
||||||
private HashMap fPathToItem;
|
|
||||||
private Stack fReuseLists;
|
|
||||||
|
|
||||||
public ProblemItemMapper() {
|
|
||||||
fPathToItem= new HashMap();
|
|
||||||
fReuseLists= new Stack();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Updates the icons of all mapped elements containing to the changed elements.
|
|
||||||
* Must be called from the UI thread.
|
|
||||||
*/
|
|
||||||
public void problemsChanged(Collection changedPaths, ILabelProvider lprovider) {
|
|
||||||
// iterate over the smaller set/map
|
|
||||||
if (changedPaths.size() <= fPathToItem.size()) {
|
|
||||||
iterateChanges(changedPaths, lprovider);
|
|
||||||
} else {
|
|
||||||
iterateItems(changedPaths, lprovider);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void iterateChanges(Collection changedPaths, ILabelProvider lprovider) {
|
|
||||||
Iterator elements= changedPaths.iterator();
|
|
||||||
while (elements.hasNext()) {
|
|
||||||
IPath curr= (IPath) elements.next();
|
|
||||||
Object obj= fPathToItem.get(curr);
|
|
||||||
if (obj == null) {
|
|
||||||
// not mapped
|
|
||||||
} else if (obj instanceof Item) {
|
|
||||||
refreshIcon(lprovider, (Item)obj);
|
|
||||||
} else { // List of Items
|
|
||||||
List list= (List) obj;
|
|
||||||
for (int i= 0; i < list.size(); i++) {
|
|
||||||
refreshIcon(lprovider, (Item) list.get(i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void iterateItems(Collection changedPaths, ILabelProvider lprovider) {
|
|
||||||
Iterator keys= fPathToItem.keySet().iterator();
|
|
||||||
while (keys.hasNext()) {
|
|
||||||
IPath curr= (IPath) keys.next();
|
|
||||||
if (changedPaths.contains(curr)) {
|
|
||||||
Object obj= fPathToItem.get(curr);
|
|
||||||
if (obj instanceof Item) {
|
|
||||||
refreshIcon(lprovider, (Item)obj);
|
|
||||||
} else { // List of Items
|
|
||||||
List list= (List) obj;
|
|
||||||
for (int i= 0; i < list.size(); i++) {
|
|
||||||
refreshIcon(lprovider, (Item) list.get(i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void refreshIcon(ILabelProvider lprovider, Item item) {
|
|
||||||
if (!item.isDisposed()) { // defensive code
|
|
||||||
Object data= item.getData();
|
|
||||||
if (data instanceof ICElement && !((ICElement)data).exists()) {
|
|
||||||
// @@@ not yet return;
|
|
||||||
}
|
|
||||||
Image old= item.getImage();
|
|
||||||
Image image= lprovider.getImage(data);
|
|
||||||
if (image != null && image != old) {
|
|
||||||
item.setImage(image);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds a new item to the map.
|
|
||||||
* @param element Element to map
|
|
||||||
* @param item The item used for the element
|
|
||||||
*/
|
|
||||||
public void addToMap(Object element, Item item) {
|
|
||||||
IPath path= getCorrespondingPath(element);
|
|
||||||
if (path != null) {
|
|
||||||
Object existingMapping= fPathToItem.get(path);
|
|
||||||
if (existingMapping == null) {
|
|
||||||
fPathToItem.put(path, item);
|
|
||||||
} else if (existingMapping instanceof Item) {
|
|
||||||
if (existingMapping != item) {
|
|
||||||
List list= newList();
|
|
||||||
list.add(existingMapping);
|
|
||||||
list.add(item);
|
|
||||||
fPathToItem.put(path, list);
|
|
||||||
}
|
|
||||||
} else { // List
|
|
||||||
List list= (List)existingMapping;
|
|
||||||
if (!list.contains(item)) {
|
|
||||||
list.add(item);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Removes an element from the map.
|
|
||||||
*/
|
|
||||||
public void removeFromMap(Object element, Item item) {
|
|
||||||
IPath path= getCorrespondingPath(element);
|
|
||||||
if (path != null) {
|
|
||||||
Object existingMapping= fPathToItem.get(path);
|
|
||||||
if (existingMapping == null) {
|
|
||||||
return;
|
|
||||||
} else if (existingMapping instanceof Item) {
|
|
||||||
fPathToItem.remove(path);
|
|
||||||
} else { // List
|
|
||||||
List list= (List) existingMapping;
|
|
||||||
list.remove(item);
|
|
||||||
if (list.isEmpty()) {
|
|
||||||
fPathToItem.remove(list);
|
|
||||||
releaseList(list);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private List newList() {
|
|
||||||
if (!fReuseLists.isEmpty()) {
|
|
||||||
return (List) fReuseLists.pop();
|
|
||||||
}
|
|
||||||
return new ArrayList(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void releaseList(List list) {
|
|
||||||
if (fReuseLists.size() < NUMBER_LIST_REUSE) {
|
|
||||||
fReuseLists.push(list);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clears the map.
|
|
||||||
*/
|
|
||||||
public void clearMap() {
|
|
||||||
fPathToItem.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method that decides which elements can have error markers
|
|
||||||
* Returns null if an element can not have error markers.
|
|
||||||
*/
|
|
||||||
private static IPath getCorrespondingPath(Object element) {
|
|
||||||
if (element instanceof ICElement) {
|
|
||||||
ICElement elem= (ICElement) element;
|
|
||||||
//if (!elem.isReadOnly()) { // only modifieable elements can get error ticks
|
|
||||||
return elem.getPath();
|
|
||||||
//}
|
|
||||||
//return null;
|
|
||||||
} else if (element instanceof IResource) {
|
|
||||||
return ((IResource)element).getFullPath();
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue