Index: FilterNode.java =================================================================== RCS file: /cvs/openide/src/org/openide/nodes/FilterNode.java,v retrieving revision 1.76 retrieving revision 1.78 diff -r1.76 -r1.78 1261,1262c1261,1262 < private Object replaceNodes (Object orig) { < if (orig == node.getOriginal()) { --- > private Object replaceNodes (Object orig, Class clazz ) { > if (isNodeQuery( clazz ) && orig == node.getOriginal() && clazz.isInstance( node )) { 1314c1314 < return replaceNodes (checkNode ().lookup (clazz)); --- > return replaceNodes (checkNode ().lookup (clazz), clazz ); 1316a1317,1324 > /** Finds out whether a query for a class can be influenced > * by a state of the "nodes" lookup and whether we should > * initialize listening > */ > private static boolean isNodeQuery (Class c) { > return Node.class.isAssignableFrom (c) || c.isAssignableFrom (Node.class); > } > 1318c1326,1327 < return new FilterItem (checkNode ().lookupItem (template)); --- > Item i = checkNode ().lookupItem (template); > return isNodeQuery (template.getType ()) ? new FilterItem (i, template.getType()) : i; 1388,1391c1397,1405 < ArrayList ll = new ArrayList (c.size ()); < Iterator it = c.iterator(); < while (it.hasNext()) { < ll.add (replaceNodes (it.next ())); --- > if (isNodeQuery (template.getType ())) { > ArrayList ll = new ArrayList (c.size ()); > Iterator it = c.iterator(); > while (it.hasNext()) { > ll.add (replaceNodes (it.next (), template.getType())); > } > return ll; > } else { > return c; 1393,1394d1406 < < return ll; 1426a1439 > private Class clazz; 1428c1441 < FilterItem (Item d) { --- > FilterItem (Item d, Class clazz) { 1429a1443 > this.clazz = clazz; 1441c1455 < return replaceNodes (delegate.getInstance ()); --- > return replaceNodes (delegate.getInstance (), clazz);