/**
  * Check to see if the given Clazz is a duplicate
  *
  * @return null
  */
 public static function analyzeParentConstructorCalled(CodeBase $code_base, Clazz $clazz)
 {
     // Only look at classes configured to require a call
     // to its parent constructor
     if (!in_array($clazz->getName(), Config::get()->parent_constructor_required)) {
         return;
     }
     // Don't worry about internal classes
     if ($clazz->isInternal()) {
         return;
     }
     // Don't worry if there's no parent class
     if (!$clazz->hasParentClassFQSEN()) {
         return;
     }
     if (!$code_base->hasClassWithFQSEN($clazz->getParentClassFQSEN())) {
         // This is an error, but its caught elsewhere. We'll
         // just roll through looking for other errors
         return;
     }
     $parent_clazz = $code_base->getClassByFQSEN($clazz->getParentClassFQSEN());
     if (!$parent_clazz->isAbstract() && !$clazz->getIsParentConstructorCalled()) {
         Issue::emit(Issue::TypeParentConstructorCalled, $clazz->getContext()->getFile(), $clazz->getContext()->getLineNumberStart(), (string) $clazz->getFQSEN(), (string) $parent_clazz->getFQSEN());
     }
 }
 /**
  * Check to see if the given Clazz is a duplicate
  *
  * @return null
  */
 public static function analyzeParentClassExists(CodeBase $code_base, Clazz $clazz)
 {
     // Don't worry about internal classes
     if ($clazz->isInternal()) {
         return;
     }
     if ($clazz->hasParentType()) {
         self::fqsenExistsForClass($clazz->getParentClassFQSEN(), $code_base, $clazz, Issue::UndeclaredExtendedClass);
     }
     foreach ($clazz->getInterfaceFQSENList() as $fqsen) {
         self::fqsenExistsForClass($fqsen, $code_base, $clazz, Issue::UndeclaredInterface);
     }
     foreach ($clazz->getTraitFQSENList() as $fqsen) {
         self::fqsenExistsForClass($fqsen, $code_base, $clazz, Issue::UndeclaredTrait);
     }
 }
Beispiel #3
0
 /**
  * Check to see if the given Clazz is a duplicate
  *
  * @return null
  */
 public static function analyzeParentClassExists(CodeBase $code_base, Clazz $clazz)
 {
     // Don't worry about internal classes
     if ($clazz->isInternal()) {
         return;
     }
     if ($clazz->hasParentClassFQSEN()) {
         self::fqsenExistsForClass($clazz->getParentClassFQSEN(), $code_base, $clazz, "Trying to inherit from unknown class %s");
     }
     foreach ($clazz->getInterfaceFQSENList() as $fqsen) {
         self::fqsenExistsForClass($fqsen, $code_base, $clazz, "Trying to implement unknown interface %s");
     }
     foreach ($clazz->getTraitFQSENList() as $fqsen) {
         self::fqsenExistsForClass($fqsen, $code_base, $clazz, "Trying to use unknown trait %s");
     }
 }
Beispiel #4
0
 /**
  * Add a class to the code base
  *
  * @return null
  */
 public function addClass(Clazz $class)
 {
     $this->class_map[$class->getFQSEN()] = $class;
     // For classes that aren't internal PHP classes
     if (!$class->isInternal()) {
         // Associate the class with the file it was found in
         $this->getFileByPath($class->getFileRef()->getFile())->addClassFQSEN($class->getFQSEN());
     }
 }