/**
  * 
  * @param string $className - signature
  * @param boolean $cachable - to cache or not to cache (sometimes we do not cache generic classes)
  * @return MappedClass
  * @throws ClassNotFoundException
  * @throws ClassMapNotFoundException
  */
 public function loadMappedClass($className, $cachable = true)
 {
     $_class = $this->getCachedMappedClass($className);
     if ($cachable && $_class != null) {
         return $_class;
     }
     if (JavaSignatureUtil::isPrimitive($className) || JavaSignatureUtil::isArray($className) || JavaSignatureUtil::isVoid($className)) {
         $_class = $this->forSignature($className);
         $cachable && $this->addMappedClassToCache($className, $_class);
     } else {
         if (JavaSignatureUtil::isGeneric($className)) {
             $_type = JavaSignatureUtil::getSignatureForGenericType($className);
             $_pTypes = JavaSignatureUtil::getSignaturesForGenericTypeParameters($className);
             $_class = $this->loadMappedClass($_type, false);
             $_class->setGeneric(true);
             $_pClasses = array();
             foreach ($_pTypes as $_pType) {
                 $_pClasses[] = $this->loadMappedClass($_pType);
             }
             $_class->setTypeParameters($_pClasses);
             $cachable && $this->addMappedClassToCache($className, $_class);
         } else {
             if (($_class = $this->getNative($className)) !== null) {
                 //ok class found -> go on...
                 $cachable && $this->addMappedClassToCache($className, $_class);
             } else {
                 if (($_class = $this->findMappedClass($className, $cachable)) == null) {
                     class_exists('ClassMapNotFoundException') || (require GWTPHP_DIR . '/exceptions/ClassMapNotFoundException.class.php');
                     throw new ClassMapNotFoundException("Class map not found for class name: " . $className);
                 }
             }
         }
     }
     return $_class;
 }
 /**
  * 
  * @param string $className - signature
  * @param boolean $cachable - to cache or not to cache
  * @return MappedClass
  * @throws ClassNotFoundException
  * @throws ClassMapNotFoundException
  */
 public function loadMappedClass($className, $cachable = true)
 {
     $_class = $this->getCachedMappedClass($className);
     if ($cachable && $_class != null) {
         return $_class;
     }
     if (JavaSignatureUtil::isPrimitive($className) || JavaSignatureUtil::isArray($className) || JavaSignatureUtil::isVoid($className)) {
         $_class = $this->forSignature($className);
     } else {
         if (JavaSignatureUtil::isGeneric($className)) {
             $_type = JavaSignatureUtil::getSignatureForGenericType($className);
             $_pTypes = JavaSignatureUtil::getSignaturesForGenericTypeParameters($className);
             $_class = $this->loadMappedClass($_type, false);
             $_class->setGeneric(true);
             $_pClasses = array();
             foreach ($_pTypes as $_pType) {
                 $_pClasses[] = $this->loadMappedClass($_pType);
             }
             $_class->setTypeParameters($_pClasses);
         } else {
             if (($_class = $this->getNative($className)) !== null) {
                 //ok class found -> go on...
                 //return $_class;
             } else {
                 if (($_class = $this->findMappedClass($className)) == null) {
                     //$phpClass = $this->classLoader->loadClass($_class->getMappedBy());
                     //} else {
                     require_once GWTPHP_DIR . '/maps/java/lang/ClassMapNotFoundException.class.php';
                     throw new ClassMapNotFoundException($className);
                     //$phpClass = $this->classLoader->loadClass($className);
                     //$_class = new SimpleMappedClass();
                 }
                 //$_class->setSignature($className);
                 //$_class->setPHPClass($phpClass);
             }
         }
     }
     //$this->cachedClasses[$_class->getSignature()] = $_class;
     //$this->addMappedClassToCache($_class->getSignature(),$_class);
     $cachable && $this->addMappedClassToCache($className, $_class);
     //$this->addMappedClassToCache($className,$_class);
     //$this->cachedClasses[$className] = $_class;
     return $_class;
 }
 /**
  * 
  *
  * @param string $signature
  * @throws SignatureParseException
  * @return string
  */
 public static function getSignatureForGenericType($signature)
 {
     $lPos = strpos($signature, '<');
     $rPos = strrpos($signature, '>');
     if ($lPos === false || $rPos === false || !JavaSignatureUtil::isGeneric($signature)) {
         require_once GWTPHP_DIR . '/maps/java/lang/SignatureParseException.class.php';
         throw new SignatureParseException("Not an generic signature: " . $signature);
     }
     //$genericTypeSignature = substr ( $signature, 0, $lPos ).substr ( $signature, $rPos+1, strlen($signature) );
     return substr($signature, 0, $lPos) . substr($signature, $rPos + 1, strlen($signature));
     //$second = $signature[1] ;
     //if ($signature[1] == TypeSignatures::$OBJECT)	// [Ljava.lang.String;
     //	return substr($signature,-strlen($signature)+2,strlen($signature)-3);
     //else
     //	return substr($signature,-strlen($signature)+1);
 }
 /**
  * 
  *
  * @param string $signature
  * @return SimpleMappedClass
  * @throws SignatureParseException
  */
 private function forSignature($signature)
 {
     if (JavaSignatureUtil::isVoid($signature)) {
         $_class = new SimpleMappedClass();
         $_class->setPrimitive(false);
         $_class->setSignature($signature);
         return $_class;
     } else {
         if (JavaSignatureUtil::isPrimitive($signature)) {
             $_class = new SimpleMappedClass();
             $_class->setPrimitive(true);
             $_class->setSignature($signature);
             return $_class;
         } else {
             if (JavaSignatureUtil::isArray($signature)) {
                 $_class = new SimpleMappedClass();
                 $_class->setPrimitive(false);
                 $_class->setSignature(JavaSignatureUtil::isGeneric($signature) ? JavaSignatureUtil::getSignatureForGenericType($signature) : $signature);
                 $_class->setArray(true);
                 $_class->setComponentType($this->loadMappedClass(JavaSignatureUtil::getSignatureForComponentTypeOfArray($signature)));
                 return $_class;
             } else {
                 require_once GWTPHP_DIR . '/maps/java/lang/SignatureParseException.class.php';
                 throw new SignatureParseException("Signature for not primitive or array type: " . $signature);
             }
         }
     }
 }