Skip to content

Commit 7de369d

Browse files
committed
Add java.lang.String#hashCode(), java.lang.System.identityHashCode(), and java.util.Objects.hashCode()
1 parent 57e9dc6 commit 7de369d

3 files changed

Lines changed: 26 additions & 13 deletions

File tree

src/Packages/java/lang/System.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
use PHPJava\Exceptions\NotImplementedException;
55
use PHPJava\Packages\java\lang\_Object;
6+
use PHPJava\Packages\PHPJava\Kernel\Behavior\System as SystemBehavior;
67

78
// use PHPJava\Packages\java\lang\System\Logger;
89
// use PHPJava\Packages\java\util\Map;
@@ -194,12 +195,11 @@ public static function static_getSecurityManager($a = null)
194195
*
195196
* @param mixed $a
196197
* @return mixed
197-
* @throws NotImplementedException
198-
* @see https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/package-summary.html#identityHashCode
198+
* @see https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/System.html#identityHashCode(java.lang.Object)
199199
*/
200200
public static function static_identityHashCode($a = null)
201201
{
202-
throw new NotImplementedException(__METHOD__);
202+
return SystemBehavior::identityHashCode($a);
203203
}
204204

205205
/**

src/Packages/java/lang/_String.php

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
*/
2020
class _String extends _Object implements CharSequence
2121
{
22+
private $hash = 0;
2223
private $object = null;
2324

2425
/**
@@ -223,8 +224,7 @@ public function endsWith($a = null)
223224
*
224225
* @param mixed $a
225226
* @return mixed
226-
* @throws NotImplementedException
227-
* @see https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/package-summary.html#equals
227+
* @see https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html#equals(java.lang.Object)
228228
*/
229229
public function equals($a = null)
230230
{
@@ -304,14 +304,24 @@ public function getChars($a = null, $b = null, $c = null, $d = null)
304304
/**
305305
* Returns a hash code for this string.
306306
*
307-
* @param mixed $a
308307
* @return mixed
309-
* @throws NotImplementedException
310-
* @see https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/package-summary.html#hashCode
308+
* @see https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html#hashCode()
311309
*/
312-
public function hashCode($a = null)
310+
public function hashCode()
313311
{
314-
throw new NotImplementedException(__METHOD__);
312+
$count = $this->length();
313+
314+
$h = $this->hash;
315+
if ($h || !$count) {
316+
return $h;
317+
}
318+
319+
$str = $this->toString();
320+
for ($i = 0; $i < $count; ++$i) {
321+
$h = 31 * $h + ord($str[$i]);
322+
}
323+
324+
return $this->hash = $h;
315325
}
316326

317327
/**

src/Packages/java/util/Objects.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,12 +120,15 @@ public static function static_hash($a = null)
120120
*
121121
* @param mixed $a
122122
* @return mixed
123-
* @throws NotImplementedException
124-
* @see https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/package-summary.html#hashCode
123+
* @see https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Objects.html#hashCode(java.lang.Object)
125124
*/
126125
public static function static_hashCode($a = null)
127126
{
128-
throw new NotImplementedException(__METHOD__);
127+
if ($a === null) {
128+
return 0;
129+
}
130+
131+
return $a->hashCode();
129132
}
130133

131134
/**

0 commit comments

Comments
 (0)