removed mods directory from the ATutor codebase
[atutor.git] / mods / phpdoc / PHPDoc / analyser / PhpdocClassAnalyser.php
diff --git a/mods/phpdoc/PHPDoc/analyser/PhpdocClassAnalyser.php b/mods/phpdoc/PHPDoc/analyser/PhpdocClassAnalyser.php
deleted file mode 100644 (file)
index 4ed8151..0000000
+++ /dev/null
@@ -1,553 +0,0 @@
-<?php\r
-/**\r
-* Analyses a class.\r
-* \r
-* @version     $Id: PhpdocClassAnalyser.php,v 1.4 2000/12/03 22:37:36 uw Exp $\r
-*/\r
-class PhpdocClassAnalyser extends PhpdocAnalyser {\r
-\r
-       /**\r
-       * Class data.\r
-       *\r
-       * @var  array\r
-       */\r
-       var $classes = array();\r
-       \r
-       /**\r
-       * Name of the baseclass of the given classes.\r
-       *\r
-       * @var  string  \r
-       */\r
-       var $baseclass = "";\r
-       \r
-       /**\r
-       * Ordered list of all classes.\r
-       *\r
-       * @var  array\r
-       */ \r
-       var $classlist = array();\r
-       \r
-       /**\r
-       * List of not inherited elements.\r
-       *\r
-       * @var  array\r
-       */\r
-       var $notinherited = array(\r
-                                                                                                                       "class" => array(\r
-                                                                                                                                                                                               "name"                  => true,\r
-                                                                                                                                                                                               "extends"               => true,\r
-                                                                                                                                                                                               "undoc"                 => true,\r
-                                                                                                                                                                                               "variables"     => true,\r
-                                                                                                                                                                                               "functions"     => true,\r
-                                                                                                                                                                                               "consts"                => true,\r
-                                                                                                                                                                                               "uses"                  => true,\r
-                                                                                                                                                                                               "filename"      => true,\r
-                                                                                                                                                                                               "subclasses"=> true,\r
-                                                                                                                                                                                               "path"                  => true,\r
-                                                                                                                                                                                               "baseclass"     => true,\r
-                                                                                                                                                                                               "abstract"      => true\r
-                                                                                                                                                                                       ),\r
-                                                                                                                                                                                       \r
-                                                                                                                       "functions"     => array(\r
-                                                                                                                                                                                                               "name"                  => true,\r
-                                                                                                                                                                                                               "undoc"                 => true,\r
-                                                                                                                                                                                                               "inherited"     => true,\r
-                                                                                                                                                                                                               "overrides"     => true,\r
-                                                                                                                                                                                                               "abstract"      => true\r
-                                                                                                                                                                                                       ),\r
-                                                                                                                                                                                                       \r
-                                                                                                                       "variables"     => array(\r
-                                                                                                                                                                                                               "name"                  => true,\r
-                                                                                                                                                                                                               "undoc"                 => true,\r
-                                                                                                                                                                                                               "inherited"     => true,\r
-                                                                                                                                                                                                               "overrides"     => true,\r
-                                                                                                                                                                                                               "abstract"      => true\r
-                                                                                                                                                                                                       ),      \r
-                                                                                                                                                                                                       \r
-                                                                                                                       "uses"                  => array(\r
-                                                                                                                                                                                                               "name"                  => true,\r
-                                                                                                                                                                                                               "undoc"                 => true,\r
-                                                                                                                                                                                                               "inherited"     => true,\r
-                                                                                                                                                                                                               "overrides"     => true\r
-                                                                                                                                                                                                       ),                                                                                                                                                                                                                                                                                                                                                                                                                                                              \r
-                                                                                                                       \r
-                                                                                                                       "consts"        => array(\r
-                                                                                                                                                                                                               "name"                  => true,\r
-                                                                                                                                                                                                               "undoc"                 => true,\r
-                                                                                                                                                                                                               "inherited"     => true,\r
-                                                                                                                                                                                                               "overrides"     => true\r
-                                                                                                                                                                                                       )                                                                                                                                                                                                                                               \r
-                                                                                                       );\r
-                                                                                                       \r
-\r
-       /**\r
-       * Puuuh - findUndocumented() needs this.\r
-       *\r
-       * @var  array\r
-       * @see  findUndocumented()\r
-       */                                                                                                              \r
-       var $undocumentedFields = array(\r
-                                                                                                                       "functions"     => "function",\r
-                                                                                                                       "variables"     => "variable",\r
-                                                                                                                       "uses"                  => "included file",\r
-                                                                                                                       "consts"                => "constant"\r
-                                                                                                       );\r
-\r
-       /**\r
-       * Sets the class data and the name of the baseclass.\r
-       *\r
-       * @param        array           Raw class data from the parser\r
-       * @param        string  Name of the baseclass of the given classes\r
-       * @access public\r
-       */                                                                                                              \r
-       function setClasses($classes, $baseclass) {\r
-               \r
-               $this->classes = $classes;\r
-               $this->baseclass = $baseclass;\r
-               \r
-       } // end func setClasses\r
-                                                                                                       \r
-       function analyse() {\r
-               \r
-               $this->flag_get = false;\r
-\r
-               $this->updateAccessReturn();\r
-               $this->updateBrothersSisters();\r
-               $this->checkSee();\r
-               \r
-               $this->classlist = array();\r
-               \r
-               $this->buildBottomUpClasslist($this->baseclass);\r
-               \r
-       } // end func analyse\r
-\r
-       /**\r
-       * Returns an analysed class or false if there're no classes any more.\r
-       *\r
-       * @return       mixed   False if there no classes anymore, otherwise an array with \r
-       *                                                               the data of the class.\r
-       *       @access public\r
-       */      \r
-       function getClass() {\r
-       \r
-               if (!$this->flag_get) {\r
-                       reset($this->classlist);\r
-                       $this->flag_get = true;\r
-               }\r
-               if (list($k, $classname)=each($this->classlist)) {\r
-\r
-                       if (isset($this->classes[$classname]["path"]))\r
-                               $this->inheritClassElements($classname);        \r
-                       \r
-                       $this->checkFunctionArgs($classname);\r
-                       $this->findUndocumented($classname);\r
-                       \r
-                       $class = $this->classes[$classname];\r
-                       unset($this->classes[$classname]);\r
-                       return $class;\r
-                       \r
-               } else {\r
-               \r
-                       return false;\r
-                       \r
-               }\r
-       } // end func getClass\r
-\r
-       /**\r
-       * Looks for undocumented elements in a certain class\r
-       * \r
-       * @param        string  Classname\r
-       */\r
-       function findUndocumented($classname) {\r
-               \r
-               $file = $this->classes["filename"];\r
-               if ($this->classes["undoc"])\r
-                       $this->warn->addDocWarning($file, "class", $name, "The class is not documented.", "missing");\r
-                       \r
-               reset($this->undocumentedFields);\r
-               while (list($index, $eltype)=each($this->undocumentedFields)) {\r
-                       if (!isset($this->classes[$index]))\r
-                               continue;\r
-                               \r
-                       reset($this->classes[$index]);\r
-                       while (list($elname, $data)=each($this->classes[$index]))\r
-                               if (isset($data["undoc"]) && $data["undoc"])\r
-                                       $this->warn->addDocWarning($file, $eltype, $elname, "Undocumented element.", "missing");\r
-                                       \r
-               }\r
-               \r
-       } // end func findUndocumented\r
-       \r
-       /**\r
-       * Checks the function documentation of a certain class.\r
-       *\r
-       * @param        string  Classname\r
-       */\r
-       function checkFunctionArgs($classname) {\r
-\r
-               if (!isset($this->classes[$classname]["functions"]))\r
-                       return;\r
-                               \r
-               $file = $this->classes[$classname]["filename"];\r
-                       \r
-               reset($this->classes[$classname]["functions"]);\r
-               while (list($fname, $function)=each($this->classes[$classname]["functions"])) {\r
-\r
-                       $inherited = isset($function["paraminherited"]);                        \r
-                       $this->classes[$classname]["functions"][$fname]["params"] = $this->checkArgDocs($function["args"], $function["params"], $fname, $file, $inherited);\r
-                       unset($this->classes[$classname]["functions"][$fname]["args"]);\r
-\r
-                       if ($inherited)\r
-                               unset($this->classes[$classname]["functions"][$fname]["paraminherited"]);\r
-                               \r
-               }\r
-       } // end func checkFunctionArgs\r
-       \r
-       /**\r
-       * Builds an internal list of all classes.\r
-       * \r
-       * The analyser needs an ordered list of all classes\r
-       * to inherit information effective.\r
-       * \r
-       * @param        string  Name of the class that starts the recursive build process. \r
-       * @see  $classlist\r
-       */\r
-       function buildBottomUpClasslist($classname) {\r
-               \r
-               if (isset($this->classes[$classname]["subclasses"])) {\r
-                       \r
-                       reset($this->classes[$classname]["subclasses"]);\r
-                       while (list($subclass, $v)=each($this->classes[$classname]["subclasses"]))\r
-                               $this->buildBottomUpClasslist($subclass);\r
-                       \r
-                       $this->classlist[] = $classname;\r
-                       \r
-               } else {\r
-                \r
-                       $this->classlist[] = $classname;\r
-               \r
-               }\r
-       } // end func buildBottomUpClasslist\r
-\r
-       /**\r
-       * Adds inherited elements to a class.\r
-       * \r
-       * @param        string  Classname\r
-       * @return       boolean $ok\r
-       * @see  $classes, $notinherited, addInheritedElements()\r
-       */      \r
-       function inheritClassElements($classname) {\r
-               \r
-               if (!isset($this->classes[$classname]["path"]))\r
-                       return false;\r
-\r
-               $undoc = $this->classes[$classname]["undoc"];\r
-                               \r
-               $path = $this->classes[$classname]["path"];\r
-               reset($path);\r
-               while (list($k, $parentclass)=each($path)) {\r
-\r
-                       $this->addInheritedElements($classname, $parentclass, "functions");\r
-                       $this->addInheritedElements($classname, $parentclass, "variables");\r
-                       $this->addInheritedElements($classname, $parentclass, "consts");\r
-                       $this->addInheritedElements($classname, $parentclass, "uses");\r
-                       \r
-                       reset($this->classes[$parentclass]);\r
-                       while (list($field, $value)=each($this->classes[$parentclass])) \r
-                               if (!isset($this->notinherited["class"][$field]) && !isset($this->classes[$classname][$field]))\r
-                                       $this->classes[$classname][$field] = $value;\r
-                       \r
-                       if ($undoc && !$this->classes[$parentclass]["undoc"]) {\r
-                               $this->classes[$classname]["docinherited"] = true;\r
-                               $this->classes[$classname]["undoc"] = false;\r
-                               $undoc = false;\r
-                       }\r
-                       \r
-               }       \r
-               \r
-               return true;\r
-       } // end func inheritClassElements\r
-       \r
-       /**\r
-       * Adds inherited functions, variables, constants or included files to a class.\r
-       *  \r
-       * @param        string  Name of the class that inherits the informations.\r
-       * @param        string  Name of the parentclass\r
-       * @param        string  Type of elements inherited: "functions", "variables", "uses", "consts"\r
-       * @return boolean       $ok\r
-       * @see  $classes, $notinherited, isUndocumented()\r
-       */\r
-       function addInheritedElements($classname, $parentclass, $type) {\r
-       \r
-               if (!isset($this->classes[$parentclass][$type]))\r
-                       return false;\r
-                       \r
-               reset($this->classes[$parentclass][$type]);\r
-               while (list($elementname, $data)=each($this->classes[$parentclass][$type])) {\r
-                       \r
-                       if (!isset($this->classes[$classname][$type][$elementname])) {\r
-\r
-                               $this->classes[$classname]["inherited"][$type][$parentclass][$elementname] = true;                      \r
-\r
-                       } else {\r
-               \r
-                               $this->classes[$classname][$type][$elementname]["overrides"] = $parentclass;\r
-                               $this->classes[$classname][$type][$elementname]["undoc"] = $this->isUndocumented($parentclass, $type, $elementname);\r
-                               $this->classes[$classname]["overrides"][$type][$parentclass][$elementname] = true;\r
-                               \r
-                               reset($data);\r
-                               while (list($field, $value)=each($data)) {\r
-                               \r
-                                       if (!isset($this->classes[$classname][$type][$elementname][$field]) && !isset($this->notinherited[$type][$field])) {\r
-                                               $this->classes[$classname][$type][$elementname][$field] = $value;\r
-                                               if ("params"==$field && "functions"==$type) $this->classes[$classname][$type][$elementname]["paraminherited"] = true;\r
-                                       }\r
-                                               \r
-                               }\r
-                       }\r
-                       \r
-               }\r
-               \r
-               return true;\r
-       } // end func addInheritedElements\r
-\r
-       /**\r
-       * Returns true if the requested element is undocumented and false if it's documented.\r
-       *\r
-       * The function checks if the element might inherit documentation\r
-       * from any parentclass. \r
-       *\r
-       * @param        string  Name of the class of the element\r
-       * @param        string  Element type: functions, variables, uses, consts.\r
-       * @param        string  Element name\r
-       * @return       boolean $ok\r
-       */      \r
-       function isUndocumented($classname, $type, $elementname) {\r
-\r
-               if ( !isset($this->classes[$classname][$type][$elementname]) || $this->classes[$classname][$type][$elementname]["undoc"] ||     !isset($this->classes[$classname]["path"]) ) \r
-                       return true;\r
-               \r
-               $path = $this->classes[$classname]["path"];\r
-               while (list($k, $parentclass)=each($path))\r
-                       if ($this->isUndocumented($parentclass, $type, $elementname))\r
-                               return true;\r
-               \r
-               return false;\r
-       } // end func isUndocumented\r
-       \r
-       function updateBrothersSisters() {\r
-               \r
-               reset($this->classes);\r
-               while (list($classname, $data)=each($this->classes)) {\r
-                       $this->updateBrotherSisterElements($classname, "functions");\r
-                       $this->updateBrotherSisterElements($classname, "variables");\r
-               }       \r
-               \r
-       } // end func updateBrothersSisters\r
-       \r
-       /**\r
-       * @param        string  Name of the class to update\r
-       * @param        string  Elementtype: functions, variables, ...\r
-       * @return       boolean\r
-       */\r
-       function updateBrotherSisterElements($classname, $type) {\r
-               \r
-               if (!isset($this->classes[$classname][$type])) \r
-                       return false;\r
-                       \r
-               reset($this->classes[$classname][$type]);\r
-               while (list($elementname, $data) = each($this->classes[$classname][$type])) {\r
-                       \r
-                       if (isset($data["brother"])) {\r
-\r
-                               $name = ( "functions" == $type ) ? substr($data["brother"], 0, -2) : substr($data["brother"], 1);\r
-                               $name = strtolower($name);\r
-\r
-                               if (!isset($this->classes[$classname][$type][$name])) {\r
-                               \r
-                                       $this->warn->addDocWarning($this->classes[$classname]["filename"], $type, $elementname, "Brother '$name' is unknown. Tags gets ignored.", "mismatch");\r
-                                       unset($this->classes[$classname][$type][$elementname]["brother"]);\r
-                                       \r
-                               } else {\r
-                               \r
-                                       $this->classes[$classname][$type][$elementname]["brother"] = $name;\r
-                                       $this->classes[$classname][$type][$elementname] = $this->copyBrotherSisterFields($this->classes[$classname][$type][$elementname], $this->classes[$classname][$type][$name]);\r
-\r
-                               }\r
-\r
-                       }\r
-                       \r
-               }\r
-               \r
-       } // end func updateBrotherSisterElements\r
-       \r
-       function updateAccessReturn() {\r
-               \r
-               reset($this->classes);\r
-               while (list($classname, $data)=each($this->classes)) {\r
-                       \r
-                       if (!isset($data["access"]))\r
-                               $this->classes[$classname]["access"] = "private";\r
-                               \r
-                       $this->updateAccessReturnElements($classname, "functions");\r
-                       $this->updateAccessElements($classname, "variables");\r
-                       $this->updateAccessElements($classname, "consts");\r
-                       \r
-               }\r
-                               \r
-       } // end func updateAccessReturn\r
-       \r
-       /**\r
-       * Updates access and return for certain elements.\r
-       * \r
-       * This function should only be used to update functions.\r
-       * Functions that have the same name as the class (constructors)\r
-       * get return void and access public. Functions without \r
-       * access get access public and functions without return get\r
-       * return void.\r
-       * \r
-       * @param        string  Classname\r
-       * @param        string  Element type: functions (, variables, consts, uses)\r
-       * @return       boolean $ok\r
-       * @see  updateAccessReturn()\r
-       */\r
-       function updateAccessReturnElements($classname, $type) {\r
-               \r
-               if (!isset($this->classes[$classname][$type]))\r
-                       return false;\r
-\r
-               reset($this->classes[$classname][$type]);\r
-               while (list($elementname, $data)=each($this->classes[$classname][$type])) {\r
-               \r
-                       if (!isset($data["access"])) \r
-                               $this->classes[$classname][$type][$elementname]["access"] = ("functions" == $type && strtolower($elementname) == strtolower($classname)) ? "public" : "private";\r
-                               \r
-                       if (!isset($data["return"]))\r
-                               $this->classes[$classname][$type][$elementname]["return"] = "void";\r
-                       else \r
-                               if ("functions" == $type && $elementname == $classname) {\r
-                                       $this->warn->addDocWarning($this->classes[$classname]["filename"], "functions", $elementname, "The constructor can't have a return value. @return gets ignored.", "mismatch");\r
-                                       $this->classes[$classname]["functions"][$elementname]["return"] = "void";\r
-                               }\r
-                               \r
-               }\r
-                               \r
-       } // end func updateAccessReturnElements\r
-       \r
-       /**\r
-       * Updates access tags.\r
-       *\r
-       * @param        string  Classname\r
-       * @param        string  Element type: functions, variables, consts (, uses)\r
-       * @see  updateAccessReturnElements()\r
-       */\r
-       function updateAccessElements($classname, $type) {\r
-               \r
-               if (!isset($this->classes[$classname][$type]))\r
-                       return false;\r
-                       \r
-               reset($this->classes[$classname][$type]);\r
-               while (list($elementname, $data)=each($this->classes[$classname][$type])) {\r
-                       \r
-                       if (!isset($data["access"])) \r
-                               $this->classes[$classname][$type][$elementname]["access"] = ("functions" == $type && $elementname == $classname) ? "public" : "private";\r
-               \r
-               }\r
-               \r
-       } // end func updateAccessElements\r
-       \r
-       function checkSee() {\r
-               \r
-               reset($this->classes);\r
-               while (list($classname, $class) = each($this->classes)) {\r
-               \r
-                       $this->buildElementlist($classname);\r
-                       \r
-                       if (isset($class["functions"])) \r
-                               $this->checkSeeElements($class["functions"], $classname, "functions");\r
-                               \r
-                       if (isset($class["variables"]))\r
-                               $this->checkSeeElements($class["variables"], $classname, "variables");\r
-                       \r
-                       if (isset($class["consts"])) \r
-                               $this->checkSeeElements($class["consts"], $classname, "consts");\r
-                               \r
-                       if (isset($class["uses"]))\r
-                               $this->checkSeeElements($class["uses"], $classname, "uses");\r
-                       \r
-               }\r
-               \r
-       } // end func checkSee\r
-\r
-       /**\r
-       * Checks see references in the given element array (functions, variables...)\r
-       *\r
-       * References to variables and functions within the same class get checked.\r
-       * It the references element does not exist, the reference gets deleted and \r
-       * a doc warning gets generated.\r
-       * \r
-       * @param        array           List of functions, variables,...\r
-       * @param        string  Name of the class that contains the given elements.\r
-       * @param        string  Elementtype: functions, variables, consts, uses.\r
-       */      \r
-       function checkSeeElements($elements, $classname, $eltype) {\r
-               \r
-               reset($elements);\r
-               while (list($elname, $element) = each($elements)) {\r
-               \r
-                       if (isset($element["see"])) {\r
-                               \r
-                               if (isset($element["see"]["var"])) {\r
-                                       \r
-                                       reset($element["see"]["var"]);\r
-                                       while (list($k, $variable) = each($element["see"]["var"])) \r
-                                               if (!isset($this->elementlist["variables"][strtolower($variable["name"])])) {\r
-                                                       $this->warn->addDocWarning($this->classes[$classname]["filename"], "variables", $elname, "@see referrs to the variable '" . $variable["name"] . "' which is not defined in the class. Entry gets ignored.", "mismatch");\r
-                                                       unset($this->classes[$classname][$eltype][$elname]["see"]["var"][$k]);\r
-                                               }\r
-\r
-                               }\r
-                               \r
-                               if (isset($element["see"]["function"])) {\r
-                                       \r
-                                       reset($element["see"]["function"]);\r
-                                       while (list($k, $function) = each($element["see"]["function"]))\r
-                                               if (!isset($this->elementlist["functions"][strtolower(substr($function["name"], 0, -2))])) {\r
-                                                       $this->warn->addDocWarning($this->classes[$classname]["filename"], "functions", $elname, "@see referrs to the function '" . $function["name"] . "' which is not defined in the class. Entry gets ignored.", "mismatch");\r
-                                                       unset($this->classes[$classname][$eltype][$elname]["see"]["function"][$k]);\r
-                                               }\r
-\r
-                               }\r
-                               \r
-                       }\r
-                       \r
-               }       \r
-               \r
-       } // end func checkSeeElement\r
-       \r
-       /**\r
-       * Builds an array with all elements of a class and saves it to $this->elementlist.\r
-       * \r
-       * @param        string  Name of the class to scan.\r
-       */\r
-       function buildElementlist($classname) {\r
-               \r
-               $elements = array();\r
-               $fields = array("functions", "variables", "consts", "uses");\r
-               \r
-               reset($fields);\r
-               while (list($k, $field) = each($fields)) \r
-                       if (isset($this->classes[$classname][$field])) {\r
-                               \r
-                               reset($this->classes[$classname][$field]);\r
-                               while (list($element, ) = each($this->classes[$classname][$field])) \r
-                                       $elements[$field][$element] = true;\r
-                                       \r
-                       }\r
-               \r
-               $this->elementlist = $elements;\r
-               \r
-       } // end func buildElementlist\r
-\r
-} // end class PhpdocClassAnalyser\r
-?>
\ No newline at end of file