/** * * @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); } } } }