| Index: third_party/pylint/pyreverse/diagrams.py
 | 
| diff --git a/third_party/pylint/pyreverse/diagrams.py b/third_party/pylint/pyreverse/diagrams.py
 | 
| index 28cc500108dcb053175bfd4cf20b91b29b1d0932..23d23eff8bdaf32a6c7b2e38f6ff74051da95674 100644
 | 
| --- a/third_party/pylint/pyreverse/diagrams.py
 | 
| +++ b/third_party/pylint/pyreverse/diagrams.py
 | 
| @@ -1,4 +1,4 @@
 | 
| -# Copyright (c) 2004-2013 LOGILAB S.A. (Paris, FRANCE).
 | 
| +# Copyright (c) 2004-2010 LOGILAB S.A. (Paris, FRANCE).
 | 
|  # http://www.logilab.fr/ -- mailto:contact@logilab.fr
 | 
|  #
 | 
|  # This program is free software; you can redistribute it and/or modify it under
 | 
| @@ -12,16 +12,24 @@
 | 
|  #
 | 
|  # You should have received a copy of the GNU General Public License along with
 | 
|  # this program; if not, write to the Free Software Foundation, Inc.,
 | 
| -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 | 
| +# 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 | 
|  """diagram objects
 | 
|  """
 | 
|  
 | 
| -import astroid
 | 
| +from logilab import astng
 | 
|  from pylint.pyreverse.utils import is_interface, FilterMixIn
 | 
|  
 | 
| -class Figure(object):
 | 
| +def set_counter(value):
 | 
| +    """Figure counter (re)set"""
 | 
| +    Figure._UID_COUNT = value
 | 
| +    
 | 
| +class Figure:
 | 
|      """base class for counter handling"""
 | 
| -
 | 
| +    _UID_COUNT = 0
 | 
| +    def __init__(self):
 | 
| +        Figure._UID_COUNT += 1
 | 
| +        self.fig_id = Figure._UID_COUNT
 | 
| +        
 | 
|  class Relationship(Figure):
 | 
|      """a relation ship from an object in the diagram to another
 | 
|      """
 | 
| @@ -31,10 +39,10 @@ class Relationship(Figure):
 | 
|          self.to_object = to_object
 | 
|          self.type = relation_type
 | 
|          self.name = name
 | 
| -
 | 
| -
 | 
| +        
 | 
| +    
 | 
|  class DiagramEntity(Figure):
 | 
| -    """a diagram object, i.e. a label associated to an astroid node
 | 
| +    """a diagram object, i.e. a label associated to an astng node
 | 
|      """
 | 
|      def __init__(self, title='No name', node=None):
 | 
|          Figure.__init__(self)
 | 
| @@ -54,12 +62,7 @@ class ClassDiagram(Figure, FilterMixIn):
 | 
|          self._nodes = {}
 | 
|          self.depends = []
 | 
|  
 | 
| -    def get_relationships(self, role):
 | 
| -        # sorted to get predictable (hence testable) results
 | 
| -        return sorted(self.relationships.get(role, ()),
 | 
| -                      key=lambda x: (x.from_object.fig_id, x.to_object.fig_id))
 | 
| -
 | 
| -    def add_relationship(self, from_object, to_object,
 | 
| +    def add_relationship(self, from_object, to_object, 
 | 
|                           relation_type, name=None):
 | 
|          """create a relation ship
 | 
|          """
 | 
| @@ -85,15 +88,12 @@ class ClassDiagram(Figure, FilterMixIn):
 | 
|              if names:
 | 
|                  node_name = "%s : %s" % (node_name, ", ".join(names))
 | 
|              attrs.append(node_name)
 | 
| -        return sorted(attrs)
 | 
| +        return attrs
 | 
|  
 | 
|      def get_methods(self, node):
 | 
|          """return visible methods"""
 | 
| -        methods = [
 | 
| -            m for m in node.values()
 | 
| -            if isinstance(m, astroid.Function) and self.show_attr(m.name)
 | 
| -        ]
 | 
| -        return sorted(methods, key=lambda n: n.name)
 | 
| +        return [m for m in node.values()
 | 
| +                if isinstance(m, astng.Function) and self.show_attr(m.name)]
 | 
|  
 | 
|      def add_object(self, title, node):
 | 
|          """create a diagram object
 | 
| @@ -107,9 +107,9 @@ class ClassDiagram(Figure, FilterMixIn):
 | 
|          """return class names if needed in diagram"""
 | 
|          names = []
 | 
|          for ass_node in nodes:
 | 
| -            if isinstance(ass_node, astroid.Instance):
 | 
| +            if isinstance(ass_node, astng.Instance):
 | 
|                  ass_node = ass_node._proxied
 | 
| -            if isinstance(ass_node, astroid.Class) \
 | 
| +            if isinstance(ass_node, astng.Class) \
 | 
|                  and hasattr(ass_node, "name") and not self.has_node(ass_node):
 | 
|                  if ass_node.name not in names:
 | 
|                      ass_name = ass_node.name
 | 
| @@ -125,15 +125,15 @@ class ClassDiagram(Figure, FilterMixIn):
 | 
|          """return true if the given node is included in the diagram
 | 
|          """
 | 
|          return node in self._nodes
 | 
| -
 | 
| +        
 | 
|      def object_from_node(self, node):
 | 
|          """return the diagram object mapped to node
 | 
|          """
 | 
|          return self._nodes[node]
 | 
| -
 | 
| +            
 | 
|      def classes(self):
 | 
|          """return all class nodes in the diagram"""
 | 
| -        return [o for o in self.objects if isinstance(o.node, astroid.Class)]
 | 
| +        return [o for o in self.objects if isinstance(o.node, astng.Class)]
 | 
|  
 | 
|      def classe(self, name):
 | 
|          """return a class by its name, raise KeyError if not found
 | 
| @@ -142,7 +142,7 @@ class ClassDiagram(Figure, FilterMixIn):
 | 
|              if klass.node.name == name:
 | 
|                  return klass
 | 
|          raise KeyError(name)
 | 
| -
 | 
| +    
 | 
|      def extract_relationships(self):
 | 
|          """extract relation ships between nodes in the diagram
 | 
|          """
 | 
| @@ -173,9 +173,9 @@ class ClassDiagram(Figure, FilterMixIn):
 | 
|              for name, values in node.instance_attrs_type.items() + \
 | 
|                                  node.locals_type.items():
 | 
|                  for value in values:
 | 
| -                    if value is astroid.YES:
 | 
| +                    if value is astng.YES:
 | 
|                          continue
 | 
| -                    if isinstance(value, astroid.Instance):
 | 
| +                    if isinstance( value, astng.Instance):
 | 
|                          value = value._proxied
 | 
|                      try:
 | 
|                          ass_obj = self.object_from_node(value)
 | 
| @@ -188,10 +188,10 @@ class PackageDiagram(ClassDiagram):
 | 
|      """package diagram handling
 | 
|      """
 | 
|      TYPE = 'package'
 | 
| -
 | 
| +    
 | 
|      def modules(self):
 | 
|          """return all module nodes in the diagram"""
 | 
| -        return [o for o in self.objects if isinstance(o.node, astroid.Module)]
 | 
| +        return [o for o in self.objects if isinstance(o.node, astng.Module)]
 | 
|  
 | 
|      def module(self, name):
 | 
|          """return a module by its name, raise KeyError if not found
 | 
| @@ -216,12 +216,12 @@ class PackageDiagram(ClassDiagram):
 | 
|              if mod_name == "%s.%s" % (package.rsplit('.', 1)[0], name):
 | 
|                  return mod
 | 
|          raise KeyError(name)
 | 
| -
 | 
| +        
 | 
|      def add_from_depend(self, node, from_module):
 | 
|          """add dependencies created by from-imports
 | 
|          """
 | 
|          mod_name = node.root().name
 | 
| -        obj = self.module(mod_name)
 | 
| +        obj = self.module( mod_name )
 | 
|          if from_module not in obj.node.depends:
 | 
|              obj.node.depends.append(from_module)
 | 
|  
 | 
| 
 |