[Pydev-cvs] org.python.pydev/src/org/python/pydev/outline ParsedModel.java, 1.9, 1.10 ParsedItem.ja
Brought to you by:
fabioz
Update of /cvsroot/pydev/org.python.pydev/src/org/python/pydev/outline In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32061/src/org/python/pydev/outline Modified Files: ParsedModel.java ParsedItem.java ParsedLabelProvider.java PyOutlinePage.java IOutlineModel.java RawPartitionModel.java Log Message: outline changes Index: ParsedModel.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/outline/ParsedModel.java,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** ParsedModel.java 20 Mar 2006 19:37:56 -0000 1.9 --- ParsedModel.java 10 Jun 2006 18:43:08 -0000 1.10 *************** *** 1,7 **** - /* - * Author: atotic - * Created: Jul 25, 2003 - * License: Common Public License v1.0 - */ package org.python.pydev.outline; --- 1,2 ---- *************** *** 11,17 **** import org.eclipse.swt.widgets.Display; import org.python.pydev.editor.PyEdit; - import org.python.pydev.editor.model.AbstractNode; import org.python.pydev.editor.model.IModelListener; import org.python.pydev.parser.jython.SimpleNode; /** --- 6,16 ---- import org.eclipse.swt.widgets.Display; import org.python.pydev.editor.PyEdit; import org.python.pydev.editor.model.IModelListener; import org.python.pydev.parser.jython.SimpleNode; + import org.python.pydev.parser.jython.ast.Attribute; + import org.python.pydev.parser.jython.ast.ClassDef; + import org.python.pydev.parser.jython.ast.FunctionDef; + import org.python.pydev.parser.visitors.scope.ASTEntryWithChildren; + import org.python.pydev.parser.visitors.scope.OutlineCreatorVisitor; /** *************** *** 21,136 **** public class ParsedModel implements IOutlineModel { ! PyEdit editor; ! PyOutlinePage outline; ! IModelListener modelListener; ! ! ParsedItem root = null; // A list of top nodes in this document. Used as a tree root ! ! /** ! * @param outline - If not null, view to notify when parser changes ! */ ! public ParsedModel(PyOutlinePage outline, PyEdit editor) { ! this.editor = editor; ! this.outline = outline; ! // The notifications are only propagated to the outline page ! // ! // Tell parser that we want to know about all the changes ! // make sure that the changes are propagated on the main thread ! modelListener = new IModelListener() { ! public void modelChanged(AbstractNode root, SimpleNode ast) { ! final AbstractNode myRoot = root; ! Display.getDefault().asyncExec( new Runnable() { ! public void run() { ! if (myRoot != null) ! setRoot(new ParsedItem(null, myRoot)); ! } ! }); ! } ! }; ! root = new ParsedItem(null, editor.getPythonModel()); ! editor.addModelListener(modelListener); ! } ! public void dispose() { ! editor.removeModelListener(modelListener); ! } ! ! public Object getRoot() { ! return root; ! } ! // patchRootHelper makes oldItem just like the newItem ! // the differnce between the two is ! private void patchRootHelper(ParsedItem oldItem, ParsedItem newItem, ! ArrayList itemsToRefresh, ArrayList itemsToUpdate, boolean okToRefresh) { ! Object[] newChildren = newItem.getChildren(); ! Object[] oldChildren = oldItem.getChildren(); ! ! // stuctural change, different number of children, can stop recursion ! if (newChildren.length != oldChildren.length) { ! oldItem.token = newItem.token; ! oldItem.children = null; // forces reinitialization ! if (okToRefresh) ! itemsToRefresh.add(oldItem); ! } ! else { ! // Number of children is the same, fix up all the children ! for (int i=0; i<oldChildren.length; i++) { ! patchRootHelper((ParsedItem)oldChildren[i], (ParsedItem)newChildren[i], ! itemsToRefresh, itemsToUpdate, okToRefresh); ! } ! // see if the node needs redisplay ! String oldTitle = oldItem.toString(); ! String newTitle = newItem.toString(); ! if (okToRefresh && !oldTitle.equals(newTitle)) ! itemsToUpdate.add(oldItem); ! oldItem.token = newItem.token; ! } ! } ! /* ! * Replaces current root ! */ ! public void setRoot(ParsedItem newRoot) { ! // System.out.println(newRoot.token.toString()); ! // We'll try to do the 'least flicker replace' ! // compare the two root structures, and tell outline what to refresh ! if (root != null) { ! ArrayList itemsToRefresh = new ArrayList(); ! ArrayList itemsToUpdate = new ArrayList(); ! patchRootHelper(root, newRoot, itemsToRefresh, itemsToUpdate, true); ! if (outline != null) { ! if(outline.isDisposed()){ ! return; ! } ! outline.updateItems(itemsToUpdate.toArray()); ! outline.refreshItems(itemsToRefresh.toArray()); ! } ! } ! else ! { ! System.out.println("No old model root?"); ! } ! } ! ! public void setError(Throwable error) { ! // put some error note on the items? ! } ! ! /* ! */ ! public AbstractNode getSelectionPosition(StructuredSelection sel) { ! if(sel.size() == 1) { // only sync the editing view if it is a single-selection ! ParsedItem p = (ParsedItem)sel.getFirstElement(); ! return p.getToken(); ! } ! return null; ! } ! /* (non-Javadoc) ! * ! */ ! public int compare(Object e1, Object e2) { ! return ((ParsedItem)e1).compareTo((ParsedItem)e2); ! } ! } --- 20,143 ---- public class ParsedModel implements IOutlineModel { ! PyEdit editor; ! PyOutlinePage outline; ! IModelListener modelListener; ! ! ParsedItem root = null; // A list of top nodes in this document. Used as a tree root ! /** ! * @param outline - If not null, view to notify when parser changes ! */ ! public ParsedModel(PyOutlinePage outline, PyEdit editor) { ! this.editor = editor; ! this.outline = outline; ! // The notifications are only propagated to the outline page ! // ! // Tell parser that we want to know about all the changes ! // make sure that the changes are propagated on the main thread ! modelListener = new IModelListener() { ! public void modelChanged(final SimpleNode ast) { ! Display.getDefault().asyncExec( new Runnable() { ! public void run() { ! OutlineCreatorVisitor visitor = OutlineCreatorVisitor.create(ast); ! setRoot(new ParsedItem(visitor.getAll().toArray(new ASTEntryWithChildren[0]))); ! } ! }); ! } ! }; ! OutlineCreatorVisitor visitor = OutlineCreatorVisitor.create(editor.getAST()); ! root = new ParsedItem(visitor.getAll().toArray(new ASTEntryWithChildren[0])); ! editor.addModelListener(modelListener); ! } ! public void dispose() { ! editor.removeModelListener(modelListener); ! } ! ! public Object getRoot() { ! return root; ! } ! // patchRootHelper makes oldItem just like the newItem ! // the differnce between the two is ! private void patchRootHelper(ParsedItem oldItem, ParsedItem newItem, ! ArrayList<ParsedItem> itemsToRefresh, ArrayList<ParsedItem> itemsToUpdate) { ! ! ParsedItem[] newChildren = newItem.getChildren(); ! ParsedItem[] oldChildren = oldItem.getChildren(); ! ! // stuctural change, different number of children, can stop recursion ! if (newChildren.length != oldChildren.length) { ! oldItem.astChildrenEntries = newItem.astChildrenEntries; ! oldItem.astThis = newItem.astThis; ! oldItem.name = null; ! oldItem.children = null; // forces reinitialization ! itemsToRefresh.add(oldItem); ! ! }else { ! ! // Number of children is the same, fix up all the children ! for (int i=0; i<oldChildren.length; i++) { ! patchRootHelper(oldChildren[i],newChildren[i],itemsToRefresh, itemsToUpdate); ! } ! ! // see if the node needs redisplay ! String oldTitle = oldItem.toString(); ! String newTitle = newItem.toString(); ! if (!oldTitle.equals(newTitle)){ ! System.out.println("Updating from:"+oldTitle+" to:"+newTitle); ! itemsToUpdate.add(oldItem); ! } ! ! oldItem.astThis = newItem.astThis; ! oldItem.name = null; ! } ! } ! /* ! * Replaces current root ! */ ! public void setRoot(ParsedItem newRoot) { ! // We'll try to do the 'least flicker replace' ! // compare the two root structures, and tell outline what to refresh ! if (root != null) { ! ArrayList<ParsedItem> itemsToRefresh = new ArrayList<ParsedItem>(); ! ArrayList<ParsedItem> itemsToUpdate = new ArrayList<ParsedItem>(); ! patchRootHelper(root, newRoot, itemsToRefresh, itemsToUpdate); ! if (outline != null) { ! if(outline.isDisposed()){ ! return; ! } ! outline.updateItems(itemsToUpdate.toArray()); ! outline.refreshItems(itemsToRefresh.toArray()); ! } ! ! }else { ! System.out.println("No old model root?"); ! } ! } ! ! /* ! */ ! public SimpleNode getSelectionPosition(StructuredSelection sel) { ! if(sel.size() == 1) { // only sync the editing view if it is a single-selection ! Object firstElement = sel.getFirstElement(); ! ASTEntryWithChildren p = ((ParsedItem)firstElement).astThis; ! SimpleNode node = p.node; ! if(node instanceof ClassDef){ ! ClassDef def = (ClassDef) node; ! node = def.name; ! ! }else if(node instanceof Attribute){ ! Attribute attribute = (Attribute) node; ! node = attribute.attr; ! ! }else if(node instanceof FunctionDef){ ! FunctionDef def = (FunctionDef) node; ! node = def.name; ! } ! return node; ! } ! return null; ! } ! } \ No newline at end of file Index: IOutlineModel.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/outline/IOutlineModel.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** IOutlineModel.java 10 Apr 2004 01:48:12 -0000 1.5 --- IOutlineModel.java 10 Jun 2006 18:43:08 -0000 1.6 *************** *** 7,11 **** import org.eclipse.jface.viewers.StructuredSelection; ! import org.python.pydev.editor.model.AbstractNode; /** --- 7,11 ---- import org.eclipse.jface.viewers.StructuredSelection; ! import org.python.pydev.parser.jython.SimpleNode; /** *************** *** 23,36 **** /** - * standard comparasance of two items - * @return -1 if e1 < e2, 0 if ==, 1 if e2 > e1 - */ - int compare(Object e1, Object e2); - - /** * this will be called in response to selection event * @param sel new selection * @return Point that contains line/column, or item to be selected */ ! AbstractNode getSelectionPosition(StructuredSelection sel); } --- 23,30 ---- /** * this will be called in response to selection event * @param sel new selection * @return Point that contains line/column, or item to be selected */ ! SimpleNode getSelectionPosition(StructuredSelection sel); } Index: PyOutlinePage.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/outline/PyOutlinePage.java,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** PyOutlinePage.java 15 Mar 2006 00:18:36 -0000 1.14 --- PyOutlinePage.java 10 Jun 2006 18:43:08 -0000 1.15 *************** *** 27,31 **** import org.python.pydev.core.bundle.ImageCache; import org.python.pydev.editor.PyEdit; ! import org.python.pydev.editor.model.AbstractNode; import org.python.pydev.plugin.PydevPlugin; import org.python.pydev.ui.UIConstants; --- 27,31 ---- import org.python.pydev.core.bundle.ImageCache; import org.python.pydev.editor.PyEdit; ! import org.python.pydev.parser.jython.SimpleNode; import org.python.pydev.plugin.PydevPlugin; import org.python.pydev.ui.UIConstants; *************** *** 175,179 **** TreeViewer tree = getTreeViewer(); if (tree != null){ ! getTreeViewer().update(items, null); } } --- 175,179 ---- TreeViewer tree = getTreeViewer(); if (tree != null){ ! tree.update(items, null); } } *************** *** 185,190 **** if (sortByNameSorter == null) { sortByNameSorter = new ViewerSorter() { ! public int compare(Viewer viewer, Object e1, Object e2) { ! return model.compare(e1, e2); } }; --- 185,191 ---- if (sortByNameSorter == null) { sortByNameSorter = new ViewerSorter() { ! @SuppressWarnings("unchecked") ! public int compare(Viewer viewer, Object e1, Object e2) { ! return ((Comparable)e1).compareTo(e2); } }; *************** *** 227,231 **** public void createControl(Composite parent) { super.createControl(parent); // this creates a tree viewer - // createRawPartitionOutline(); createParsedOutline(); // selecting an item in the outline scrolls the document --- 228,231 ---- *************** *** 234,238 **** public void selectionChanged(SelectionChangedEvent event) { StructuredSelection sel = (StructuredSelection)tree.getSelection(); ! AbstractNode node = model.getSelectionPosition(sel); editorView.revealModelNode(node); } --- 234,238 ---- public void selectionChanged(SelectionChangedEvent event) { StructuredSelection sel = (StructuredSelection)tree.getSelection(); ! SimpleNode node = model.getSelectionPosition(sel); editorView.revealModelNode(node); } Index: RawPartitionModel.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/outline/RawPartitionModel.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** RawPartitionModel.java 15 Jul 2005 23:07:21 -0000 1.6 --- RawPartitionModel.java 10 Jun 2006 18:43:08 -0000 1.7 *************** *** 14,18 **** import org.eclipse.jface.text.Position; import org.eclipse.jface.viewers.StructuredSelection; ! import org.python.pydev.editor.model.AbstractNode; --- 14,18 ---- import org.eclipse.jface.text.Position; import org.eclipse.jface.viewers.StructuredSelection; ! import org.python.pydev.parser.jython.SimpleNode; *************** *** 112,116 **** // IOutlineModel API ! public AbstractNode getSelectionPosition(StructuredSelection sel) { // we do not have it, broken in Outline rewrite System.err.println("RawOutlineModel can't navigate right now"); --- 112,116 ---- // IOutlineModel API ! public SimpleNode getSelectionPosition(StructuredSelection sel) { // we do not have it, broken in Outline rewrite System.err.println("RawOutlineModel can't navigate right now"); Index: ParsedItem.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/outline/ParsedItem.java,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** ParsedItem.java 2 May 2006 12:24:25 -0000 1.12 --- ParsedItem.java 10 Jun 2006 18:43:08 -0000 1.13 *************** *** 1,98 **** /* ! * Author: atotic ! * Created: Jul 25, 2003 ! * License: Common Public License v1.0 */ ! package org.python.pydev.outline; import java.util.ArrayList; - import java.util.Iterator; ! import org.python.pydev.editor.model.AbstractNode; ! import org.python.pydev.editor.model.ClassNode; ! import org.python.pydev.editor.model.FunctionNode; ! import org.python.pydev.editor.model.ImportFromNode; ! import org.python.pydev.editor.model.ImportNode; ! import org.python.pydev.editor.model.NameEqualsMainNode; import org.python.pydev.parser.jython.ast.ImportFrom; import org.python.pydev.parser.jython.ast.NameTok; import org.python.pydev.parser.jython.ast.aliasType; import org.python.pydev.parser.visitors.NodeUtils; ! /** ! * ParsedModel is composed of ParsedItems. ! * ! * <p>The model traverses Python model to get a tree of items for display. ! * We have to deal with token ! */ ! public class ParsedItem { ! ParsedItem parent; ! ParsedItem[] children = null; // array of modTypes ! AbstractNode token; // parser token that this node represents. Can be null! ! public ParsedItem(ParsedItem parent, AbstractNode token) { ! this.parent = parent; ! this.token = token; ! } ! public AbstractNode getToken() { ! return token; ! } ! ! public ParsedItem getParent() { ! return parent; ! } ! /** ! * Traverses AST model, and puts its children into our tree ! */ ! private void adoptChildrenOfNode(AbstractNode node, ArrayList children) { ! if (node == null) ! return; ! Iterator i = node.getChildren().iterator(); ! while (i.hasNext()) { ! AbstractNode child = (AbstractNode)i.next(); ! // these are the nodes we display ! if (child instanceof ClassNode || ! child instanceof FunctionNode || ! child instanceof ImportNode || ! child instanceof ImportFromNode || ! child instanceof NameEqualsMainNode) ! children.add(new ParsedItem(this, child)); ! if (! (child instanceof ClassNode) && !(child instanceof FunctionNode)) ! // functions & class will have their own children, do not traverse now ! adoptChildrenOfNode(child, children); ! } ! } ! ! public ParsedItem[] getChildren() { ! if (children == null) { ! ArrayList allMyChildren = new ArrayList(); ! adoptChildrenOfNode(token, allMyChildren); ! children = new ParsedItem[allMyChildren.size()]; ! for (int i=0; i<allMyChildren.size();i++) ! children[i] = (ParsedItem)allMyChildren.get(i); ! } ! return children; ! } ! ! ! public String toString() { ! return toString(token); ! } ! ! public static String toString(AbstractNode token) { ! if (token == null) ! return "null"; ! if (token instanceof ClassNode) { ! return NodeUtils.getNameFromNameTok((NameTok) ((ClassNode)token).astNode.name); ! } ! else if (token instanceof FunctionNode) { ! return NodeUtils.getNameFromNameTok((NameTok) ((FunctionNode)token).astNode.name); ! } ! else if (token instanceof ImportNode) { ! aliasType[] imports = ((ImportNode)token).astNode.names; ! StringBuffer retVal = new StringBuffer(); ! for (int i=0; i<imports.length; i++) { ! aliasType aliasType = imports[i]; //as ... --- 1,69 ---- /* ! * Created on Jun 10, 2006 ! * @author Fabio */ ! package org.python.pydev.outline; import java.util.ArrayList; ! import org.python.pydev.core.FullRepIterable; ! import org.python.pydev.parser.jython.ast.Import; import org.python.pydev.parser.jython.ast.ImportFrom; import org.python.pydev.parser.jython.ast.NameTok; import org.python.pydev.parser.jython.ast.aliasType; + import org.python.pydev.parser.jython.ast.commentType; import org.python.pydev.parser.visitors.NodeUtils; + import org.python.pydev.parser.visitors.scope.ASTEntryWithChildren; ! public class ParsedItem implements Comparable{ ! private ParsedItem parent; ! public ParsedItem[] children; ! public ASTEntryWithChildren astThis; //may be null if root ! public ASTEntryWithChildren[] astChildrenEntries; ! public String name; ! public ParsedItem(ParsedItem parent, ASTEntryWithChildren root, ASTEntryWithChildren[] astChildren) { ! this(astChildren); ! this.parent = parent; ! this.astThis = root; ! ! } ! public ParsedItem(ASTEntryWithChildren[] astChildren) { ! this.astChildrenEntries = astChildren; ! } ! ! public ParsedItem[] getChildren() { ! if(children != null ){ ! return children; ! } ! if(astChildrenEntries == null){ ! return new ParsedItem[0]; ! } ! ! ArrayList<ParsedItem> items = new ArrayList<ParsedItem>(); ! for(ASTEntryWithChildren c : astChildrenEntries){ ! items.add(new ParsedItem(this, c, c.getChildren())); ! } ! children = items.toArray(new ParsedItem[items.size()]); ! return children; ! } ! ! public ParsedItem getParent() { ! return parent; ! } ! ! public String toString() { ! if(name != null){ ! return name; ! } ! if (astThis == null){ ! name = "null"; ! ! } else if (astThis.node instanceof Import) { ! aliasType[] imports = ((Import)astThis.node).names; ! StringBuffer retVal = new StringBuffer(); ! for (int i=0; i<imports.length; i++) { ! aliasType aliasType = imports[i]; //as ... *************** *** 104,117 **** retVal.append(((NameTok)aliasType.name).id); retVal.append(", "); ! } ! retVal.delete(retVal.length() - 2, retVal.length()); ! return retVal.toString(); ! } ! else if (token instanceof ImportFromNode) { ! // from wxPython.wx import * ! ImportFrom importToken = ((ImportFromNode)token).astNode; ! StringBuffer modules = new StringBuffer(); ! for (int i=0; i<importToken.names.length;i++) { ! aliasType aliasType = importToken.names[i]; //as ... --- 75,88 ---- retVal.append(((NameTok)aliasType.name).id); retVal.append(", "); ! } ! retVal.delete(retVal.length() - 2, retVal.length()); ! name = retVal.toString(); ! ! }else if (astThis.node instanceof ImportFrom) { ! // from wxPython.wx import * ! ImportFrom importToken = (ImportFrom)astThis.node; ! StringBuffer modules = new StringBuffer(); ! for (int i=0; i<importToken.names.length;i++) { ! aliasType aliasType = importToken.names[i]; //as ... *************** *** 122,175 **** modules.append(((NameTok)aliasType.name).id); ! modules.append(","); ! } ! if (modules.length() == 0) { ! modules.append("*,"); //the comma will be deleted ! } ! modules.deleteCharAt(modules.length()-1); ! return modules.toString() + " (" + ((NameTok)importToken.module).id + ")"; ! } ! else if (token instanceof NameEqualsMainNode) { ! return "__main__"; ! } ! else { ! return "ERROR"; ! } ! } ! ! /** ! * @return rank for sorting ParserItems. When comparing ! * two items, first we compare class ranking, then titles ! */ ! public int getClassRanking() { ! int rank = 0; ! if (token instanceof ImportFromNode) { ! rank = 0; ! } else if (token instanceof ImportNode) { ! rank = 1; ! } else if (token instanceof ClassNode) { ! rank = 2; ! } else if (token instanceof FunctionNode) { ! rank = 3; ! } else if (token instanceof NameEqualsMainNode) { ! rank = 10; ! } ! return rank; ! } - /** - * @param item - * @return compares ParsedItems by their rank - */ - public int compareTo(ParsedItem item) { - int myRank = getClassRanking(); - int rank = item.getClassRanking(); - if (myRank == rank) { - return toString().compareTo(item.toString()); - } - else { - return (myRank < rank ? -1 : 1); - } - } } - --- 93,165 ---- modules.append(((NameTok)aliasType.name).id); ! modules.append(","); ! } ! if (modules.length() == 0) { ! modules.append("*,"); //the comma will be deleted ! } ! modules.deleteCharAt(modules.length()-1); ! name = modules.toString() + " (" + ((NameTok)importToken.module).id + ")"; ! ! }else if (astThis.node instanceof commentType) { ! commentType type = (commentType) astThis.node; ! String rep = type.id.trim(); ! rep = FullRepIterable.split(rep, '\n')[0]; ! rep = FullRepIterable.split(rep, '\r')[0]; ! ! for (int i = 1; i < rep.length(); i++) { ! char c = rep.charAt(i); ! if(c != '-'){ ! name = rep.substring(i, rep.length()); ! break; ! } ! } ! if(name == null){ ! name = "---"; ! } ! ! }else { ! name = NodeUtils.getFullRepresentationString(astThis.node); ! } ! ! return name; ! } ! ! /** ! * @return rank for sorting ParserItems. When comparing ! * two items, first we compare class ranking, then titles ! */ ! public int getClassRanking() { ! int rank = 0; ! if (astThis.node instanceof ImportFrom) { ! rank = 0; ! } else if (astThis.node instanceof Import) { ! rank = 1; ! } else if (astThis.node instanceof commentType) { ! rank = -1; ! } else{ ! rank = 10; ! } ! return rank; ! } ! ! public int compareTo(Object o) { ! if(!(o instanceof ParsedItem)){ ! return 0; ! } ! ParsedItem item = (ParsedItem) o; ! int myRank = getClassRanking(); ! int rank = item.getClassRanking(); ! ! if(myRank == -1 || rank == -1){ ! return 0; ! } ! ! if (myRank == rank) { ! return toString().compareTo(item.toString()); ! ! }else { ! return (myRank < rank ? -1 : 1); ! } ! } } Index: ParsedLabelProvider.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/outline/ParsedLabelProvider.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** ParsedLabelProvider.java 20 Mar 2006 19:37:56 -0000 1.6 --- ParsedLabelProvider.java 10 Jun 2006 18:43:08 -0000 1.7 *************** *** 9,19 **** import org.eclipse.swt.graphics.Image; import org.python.pydev.core.bundle.ImageCache; ! import org.python.pydev.editor.model.AbstractNode; ! import org.python.pydev.editor.model.ClassNode; ! import org.python.pydev.editor.model.FunctionNode; ! import org.python.pydev.editor.model.ImportFromNode; ! import org.python.pydev.editor.model.ImportNode; ! import org.python.pydev.editor.model.NameEqualsMainNode; import org.python.pydev.parser.jython.ast.NameTok; import org.python.pydev.parser.visitors.NodeUtils; import org.python.pydev.ui.UIConstants; --- 9,21 ---- import org.eclipse.swt.graphics.Image; import org.python.pydev.core.bundle.ImageCache; ! import org.python.pydev.parser.jython.SimpleNode; ! import org.python.pydev.parser.jython.ast.Attribute; ! import org.python.pydev.parser.jython.ast.ClassDef; ! import org.python.pydev.parser.jython.ast.FunctionDef; ! import org.python.pydev.parser.jython.ast.Import; ! import org.python.pydev.parser.jython.ast.ImportFrom; ! import org.python.pydev.parser.jython.ast.Name; import org.python.pydev.parser.jython.ast.NameTok; + import org.python.pydev.parser.jython.ast.commentType; import org.python.pydev.parser.visitors.NodeUtils; import org.python.pydev.ui.UIConstants; *************** *** 32,46 **** public String getText(Object element) { ! return ((ParsedItem)element).toString(); } // returns images based upon element type public Image getImage(Object element) { ! AbstractNode token = ((ParsedItem)element).getToken(); ! if (token instanceof ClassNode) { return imageCache.get(UIConstants.CLASS_ICON); } ! else if (token instanceof FunctionNode) { ! if (NodeUtils.getNameFromNameTok((NameTok) ((FunctionNode)token).astNode.name).startsWith("_")) { return imageCache.get(UIConstants.PRIVATE_METHOD_ICON); } --- 34,48 ---- public String getText(Object element) { ! return element.toString(); } // returns images based upon element type public Image getImage(Object element) { ! SimpleNode token = ((ParsedItem)element).astThis.node; ! if (token instanceof ClassDef) { return imageCache.get(UIConstants.CLASS_ICON); } ! else if (token instanceof FunctionDef) { ! if (NodeUtils.getNameFromNameTok((NameTok) ((FunctionDef)token).name).startsWith("_")) { return imageCache.get(UIConstants.PRIVATE_METHOD_ICON); } *************** *** 48,59 **** return imageCache.get(UIConstants.PUBLIC_METHOD_ICON); } ! else if (token instanceof ImportNode) { return imageCache.get(UIConstants.IMPORT_ICON); } ! else if (token instanceof ImportFromNode) { return imageCache.get(UIConstants.IMPORT_ICON); } ! else if (token instanceof NameEqualsMainNode) { ! return imageCache.get(UIConstants.MAIN_FUNCTION_ICON); } else { --- 50,64 ---- return imageCache.get(UIConstants.PUBLIC_METHOD_ICON); } ! else if (token instanceof Import) { return imageCache.get(UIConstants.IMPORT_ICON); } ! else if (token instanceof ImportFrom) { return imageCache.get(UIConstants.IMPORT_ICON); } ! else if (token instanceof commentType) { ! return imageCache.get(UIConstants.COMMENT); ! } ! else if (token instanceof Attribute || token instanceof Name || token instanceof NameTok) { ! return imageCache.get(UIConstants.PUBLIC_ATTR_ICON); } else { |