public function getClientOracle()
 {
     $permutationStrongName = $this->getPermutationStrongName();
     if ($permutationStrongName == null) {
         throw new SecurityException('Blocked request without GWT permutation header (XSRF attack ?)');
     }
     $basePath = $this->getRequestModuleBasePath();
     if ($basePath == null) {
         throw new SecurityException('Blocked request without GWT base path header (XSRF attack ?)');
     }
     $toReturn = null;
     if (isset($this->clientOracleCache[$permutationStrongName])) {
         $toReturn = $this->clientOracleCache[$permutationStrongName];
         if ($toReturn != null) {
             return $toReturn;
         }
     }
     if ($permutationStrongName == 'HostedMode') {
         if (!$this->allowHostedModeConnections()) {
             throw new SecurityException('Blocked Development Mode request');
         }
         $toReturn = new HostedModeClientOracle();
     } else {
         $in = $this->findClientOracleData($basePath, $permutationStrongName);
         $toReturn = WebModeClientOracle::load($in);
     }
     $this->clientOracleCache[$permutationStrongName] = $toReturn;
     return $toReturn;
 }
 private function getJavahSignatureName(Clazz $clazz)
 {
     if ($clazz->isArray()) {
         $leafType = $clazz;
         $dims = 0;
         do {
             $dims++;
             $leafType = $leafType->getComponentType();
         } while (!is_null($leafType->getComponentType()));
         assert($dims > 0);
         $s = $this->getJavahSignatureName($leafType);
         for ($i = 0; $i < $dims; ++$i) {
             $s = '_3' . $s;
         }
         return $s;
     } else {
         if ($clazz->isPrimitive()) {
             return WebModeClientOracle::jsniName($clazz);
         } else {
             $name = $clazz->getFullName();
             $name = str_replace('_', '_1', $name);
             $name = str_replace('.', '_', $name);
             return 'L' . $name . '_2';
         }
     }
 }