Skip to content

Commit 066f212

Browse files
committed
WIP commit
1 parent e4a12f3 commit 066f212

8 files changed

Lines changed: 85 additions & 26 deletions

File tree

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<?php
2+
namespace PHPJava\Imitation\java\lang;
3+
4+
class _Object
5+
{
6+
public function clone(): _Object
7+
{
8+
return clone $this;
9+
}
10+
11+
12+
public function equals($object): bool
13+
{
14+
return $this === $object;
15+
}
16+
17+
public function getClass(): self
18+
{
19+
return $this;
20+
}
21+
22+
public function hashCode(): int
23+
{
24+
if (version_compare(PHP_VERSION, '7.3', '<')) {
25+
return crc32(spl_object_hash($this));
26+
}
27+
return spl_object_id($this);
28+
}
29+
30+
public function notify(): void
31+
{
32+
// not implemented.
33+
}
34+
35+
public function notifyAll(): void
36+
{
37+
// not implemented.
38+
}
39+
40+
public function toString(): string
41+
{
42+
return 'java.lang.Object@PHPJava' . spl_object_hash($this);
43+
}
44+
45+
public function __toString(): string
46+
{
47+
return $this->toString();
48+
}
49+
50+
public function wait(int $timeout = null, int $nanos = null): void
51+
{
52+
// not implemented.
53+
}
54+
}

β€Žsrc/imitation/java/lang/_String.phpβ€Ž

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

44
use PHPJava\Kernel\Structures\_Utf8;
55

6-
class _String
6+
class _String extends _Object
77
{
88
private $object = null;
99

@@ -12,27 +12,23 @@ public function __construct($object = null)
1212
$this->object = $object;
1313
}
1414

15-
public function equals($object)
15+
public function equals($object): bool
1616
{
17-
1817
if (!($this->object instanceof _Utf8)) {
1918
return false;
2019
}
21-
2220
if ($object instanceof _String) {
2321
return $this->toString() === $object->toString();
2422
}
25-
2623
return $this->toString() === $object;
2724
}
2825

29-
public function toString()
26+
public function toString(): string
3027
{
3128
return $this->__toString();
32-
3329
}
3430

35-
public function __toString()
31+
public function __toString(): string
3632
{
3733
if (!($this->object instanceof _Utf8)) {
3834
return (string) $this->object;

β€Žsrc/kernel/mnemonics/_getstatic.phpβ€Ž

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

44
use PHPJava\Exceptions\NotImplementedException;
55
use PHPJava\Utilities\BinaryTool;
6+
use PHPJava\Utilities\ClassResolver;
67
use PHPJava\Utilities\Formatter;
78

89
final class _getstatic implements OperationInterface
@@ -21,13 +22,7 @@ public function execute(): void
2122
$signature = Formatter::parseSignature($cpInfo[$cpInfo[$cp->getNameAndTypeIndex()]->getDescriptorIndex()]->getString());
2223

2324
if (isset($signature[0]['class_name'])) {
24-
$javaObjectName = str_replace('/', '\\', $signature[0]['class_name']);
25-
26-
if ($javaObjectName === 'java\\lang\\String') {
27-
// For PHP
28-
$javaObjectName = 'java\\lang\\_String';
29-
}
30-
$className = '\\PHPJava\\Imitation\\' . $javaObjectName;
25+
$className = ClassResolver::resolve($signature[0]['class_name']);
3126
$this->pushStack(new $className());
3227
return;
3328
}

β€Žsrc/kernel/mnemonics/_invokevirtual.phpβ€Ž

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

44
use PHPJava\Exceptions\NotImplementedException;
55
use PHPJava\Utilities\BinaryTool;
6+
use PHPJava\Utilities\ClassResolver;
67
use PHPJava\Utilities\Formatter;
78

89
final class _invokevirtual implements OperationInterface
@@ -25,15 +26,7 @@ public function execute(): void
2526
$arguments[] = $this->getStack();
2627
}
2728
$invokerClass = $this->getStack();
28-
29-
$javaObjectName = str_replace('/', '\\', $class);
30-
31-
if ($javaObjectName === 'java\\lang\\String') {
32-
// For PHP
33-
$javaObjectName = 'java\\lang\\_String';
34-
}
35-
36-
$invokerClassName = '\\PHPJava\\Imitation\\' . $javaObjectName;
29+
$invokerClassName = ClassResolver::resolve($class);
3730
$result = call_user_func_array(
3831
[
3932
$invokerClass,

β€Žsrc/kernel/mnemonics/_new.phpβ€Ž

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

44
use PHPJava\Exceptions\NotImplementedException;
55
use PHPJava\Utilities\BinaryTool;
6+
use PHPJava\Utilities\ClassResolver;
67

78
final class _new implements OperationInterface
89
{
@@ -20,7 +21,7 @@ public function execute(): void
2021
return;
2122
}
2223

23-
$invokeClassName = '\\PHPJava\\Imitation\\' . str_replace('/', '\\', $className);
24+
$invokeClassName = ClassResolver::resolve($className);
2425
$this->pushStack(new $invokeClassName());
2526
}
2627
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
namespace PHPJava\Utilities;
3+
4+
class ClassResolver
5+
{
6+
const MAPS = [
7+
'String' => '_String',
8+
'Object' => '_Object',
9+
];
10+
11+
public static function resolve($javaPath): string
12+
{
13+
$namespaces = explode('.', str_replace('/', '.', $javaPath));
14+
$buildClassPath = [];
15+
foreach ($namespaces as $namespace) {
16+
$buildClassPath[] = static::MAPS[$namespace] ?? $namespace;
17+
}
18+
return '\\PHPJava\\Imitation\\' . implode('\\', $buildClassPath);
19+
}
20+
}

β€Žtools/Test.classβ€Ž

25 Bytes
Binary file not shown.

β€Žtools/test.javaβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ public String testString (String value) {
106106
* @param args
107107
*/
108108
public static void main (String[] args) {
109-
109+
System.out.println((new java.lang.Object()).toString());
110110
System.out.println("かるびぃ" + args[2]);
111111
String x = "String";
112112

0 commit comments

Comments
Β (0)