eric6/Utilities/ClassBrowsers/ClbrBaseClasses.py

changeset 6942
2602857055c5
parent 6645
ad476851d7e0
child 7229
53054eb5b15a
diff -r f99d60d6b59b -r 2602857055c5 eric6/Utilities/ClassBrowsers/ClbrBaseClasses.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/Utilities/ClassBrowsers/ClbrBaseClasses.py	Sun Apr 14 15:09:21 2019 +0200
@@ -0,0 +1,360 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2005 - 2019 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing base classes used by the various class browsers.
+"""
+
+
+from __future__ import unicode_literals
+
+
+class _ClbrBase(object):
+    """
+    Class implementing the base of all class browser objects.
+    """
+    def __init__(self, module, name, file, lineno):
+        """
+        Constructor
+        
+        @param module name of the module containing this object
+        @type str
+        @param name name of this object
+        @type str
+        @param file filename containing this object
+        @type str
+        @param lineno linenumber of the object definition
+        @type int
+        """
+        self.module = module
+        self.name = name
+        self.file = file
+        self.lineno = lineno
+        self.endlineno = -1     # marker for "not set"
+        
+    def setEndLine(self, endLineNo):
+        """
+        Public method to set the ending line number.
+        
+        @param endLineNo number of the last line
+        @type int
+        """
+        self.endlineno = endLineNo
+
+
+class ClbrBase(_ClbrBase):
+    """
+    Class implementing the base of all complex class browser objects.
+    """
+    def __init__(self, module, name, file, lineno):
+        """
+        Constructor
+        
+        @param module name of the module containing this object
+        @type str
+        @param name name of this object
+        @type str
+        @param file filename containing this object
+        @type str
+        @param lineno linenumber of the object definition
+        @type int
+        """
+        _ClbrBase.__init__(self, module, name, file, lineno)
+        self.methods = {}
+        self.attributes = {}
+        self.classes = {}
+        self.globals = {}
+        
+    def _addmethod(self, name, function):
+        """
+        Protected method to add information about a method.
+        
+        @param name name of method to be added
+        @type str
+        @param function Function object to be added
+        @type Function
+        """
+        self.methods[name] = function
+        
+    def _getmethod(self, name):
+        """
+        Protected method to retrieve a method by name.
+        
+        @param name name of the method (string)
+        @type str
+        @return the named method
+        @rtype Function or None
+        """
+        try:
+            return self.methods[name]
+        except KeyError:
+            return None
+        
+    def _addglobal(self, attr):
+        """
+        Protected method to add information about global variables.
+        
+        @param attr Attribute object to be added
+        @type Attribute
+        """
+        if attr.name not in self.globals:
+            self.globals[attr.name] = attr
+        else:
+            self.globals[attr.name].addAssignment(attr.lineno)
+        
+    def _getglobal(self, name):
+        """
+        Protected method to retrieve a global variable by name.
+        
+        @param name name of the global variable
+        @type str
+        @return the named global variable
+        @rtype Attribute or None
+        """
+        try:
+            return self.globals[name]
+        except KeyError:
+            return None
+        
+    def _addattribute(self, attr):
+        """
+        Protected method to add information about attributes.
+        
+        @param attr Attribute object to be added
+        @type Attribute
+        """
+        if attr.name not in self.attributes:
+            self.attributes[attr.name] = attr
+        else:
+            self.attributes[attr.name].addAssignment(attr.lineno)
+        
+    def _getattribute(self, name):
+        """
+        Protected method to retrieve an attribute by name.
+        
+        @param name name of the attribute
+        @type str
+        @return the named attribute
+        @rtype Attribute or None
+        """
+        try:
+            return self.attributes[name]
+        except KeyError:
+            return None
+        
+    def _addclass(self, name, _class):
+        """
+        Protected method method to add a nested class to this class.
+        
+        @param name name of the class
+        @type str
+        @param _class Class object to be added
+        @type Class
+        """
+        self.classes[name] = _class
+
+
+class ClbrVisibilityMixinBase(object):
+    """
+    Class implementing the base class of all visibility mixins.
+    """
+    def isPrivate(self):
+        """
+        Public method to check, if the visibility is Private.
+        
+        @return flag indicating Private visibility
+        @rtype bool
+        """
+        return self.visibility == 0
+        
+    def isProtected(self):
+        """
+        Public method to check, if the visibility is Protected.
+        
+        @return flag indicating Protected visibility
+        @rtype bool
+        """
+        return self.visibility == 1
+        
+    def isPublic(self):
+        """
+        Public method to check, if the visibility is Public.
+        
+        @return flag indicating Public visibility
+        @rtype bool
+        """
+        return self.visibility == 2
+        
+    def setPrivate(self):
+        """
+        Public method to set the visibility to Private.
+        """
+        self.visibility = 0
+        
+    def setProtected(self):
+        """
+        Public method to set the visibility to Protected.
+        """
+        self.visibility = 1
+        
+    def setPublic(self):
+        """
+        Public method to set the visibility to Public.
+        """
+        self.visibility = 2
+
+
+class Attribute(_ClbrBase):
+    """
+    Class to represent an attribute.
+    """
+    def __init__(self, module, name, file, lineno):
+        """
+        Constructor
+        
+        @param module name of the module containing this attribute
+        @type str
+        @param name name of this attribute
+        @type str
+        @param file filename containing this attribute
+        @type str
+        @param lineno line number of the attribute definition
+        @type int
+        """
+        _ClbrBase.__init__(self, module, name, file, lineno)
+        
+        self.linenos = [lineno]
+    
+    def addAssignment(self, lineno):
+        """
+        Public method to add another assignment line number.
+        
+        @param lineno line number of the additional attribute assignment
+        @type int
+        """
+        if lineno not in self.linenos:
+            self.linenos.append(lineno)
+
+
+class Class(ClbrBase):
+    """
+    Class to represent a class.
+    """
+    def __init__(self, module, name, superClasses, file, lineno):
+        """
+        Constructor
+        
+        @param module name of the module containing this class
+        @type str
+        @param name name of this class
+        @type str
+        @param superClasses list of class names this class is inherited from
+        @type list of str
+        @param file filename containing this class
+        @type str
+        @param lineno line number of the class definition
+        @type int
+        """
+        ClbrBase.__init__(self, module, name, file, lineno)
+        if superClasses is None:
+            superClasses = []
+        self.super = superClasses
+
+
+class Module(ClbrBase):
+    """
+    Class to represent a module.
+    """
+    def __init__(self, module, name, file, lineno):
+        """
+        Constructor
+        
+        @param module name of the module containing this module
+        @type str
+        @param name name of this module
+        @type str
+        @param file filename containing this module
+        @type str
+        @param lineno line number of the module definition
+        @type int
+        """
+        ClbrBase.__init__(self, module, name, file, lineno)
+
+
+class Function(ClbrBase):
+    """
+    Class to represent a function or method.
+    """
+    General = 0
+    Static = 1
+    Class = 2
+    
+    def __init__(self, module, name, file, lineno, signature='', separator=',',
+                 modifierType=General, annotation=""):
+        """
+        Constructor
+        
+        @param module name of the module containing this function
+        @type str
+        @param name name of this function
+        @type str
+        @param file filename containing this function
+        @type str
+        @param lineno line number of the function definition
+        @type int
+        @param signature parameter list of the function
+        @type str
+        @param separator string separating the parameters of the function
+        @type str
+        @param modifierType type of the function
+        @type int
+        @param annotation function return annotation
+        @type str
+        """
+        ClbrBase.__init__(self, module, name, file, lineno)
+        self.parameters = [e.strip() for e in signature.split(separator)]
+        self.modifier = modifierType
+        self.annotation = annotation
+
+
+class Coding(ClbrBase):
+    """
+    Class to represent a source coding.
+    """
+    def __init__(self, module, file, lineno, coding):
+        """
+        Constructor
+        
+        @param module name of the module containing this coding statement
+        @type str
+        @param file filename containing this coding statement
+        @type str
+        @param lineno line number of the coding definition
+        @type int
+        @param coding character coding of the source file
+        @type str
+        """
+        ClbrBase.__init__(self, module, "Coding", file, lineno)
+        self.coding = coding
+
+
+class Enum(ClbrBase):
+    """
+    Class to represent an enum definition.
+    """
+    def __init__(self, module, name, file, lineno):
+        """
+        Constructor
+        
+        @param module name of the module containing this enum
+        @type str
+        @param name name of this enum
+        @type str
+        @param file filename containing this enum
+        @type str
+        @param lineno line number of the enum definition
+        @type int
+        """
+        ClbrBase.__init__(self, module, name, file, lineno)

eric ide

mercurial