Skip to content

Commit 459fc78

Browse files
committed
Succeeded to run invokeinterface
1 parent 4489153 commit 459fc78

4 files changed

Lines changed: 33 additions & 10 deletions

File tree

src/Kernel/Internal/Lambda.php

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,38 @@
33
namespace PHPJava\Kernel\Internal;
44

55
use PHPJava\Core\JavaClass;
6+
use PHPJava\Utilities\ClassResolver;
67

78
class Lambda
89
{
910
private $javaClass;
1011
private $name;
1112
private $descriptor;
1213
private $class;
14+
private $resourceType;
15+
private $classObject;
1316

1417
public function __construct(JavaClass $javaClass, string $name, string $descriptor, string $class)
1518
{
1619
$this->javaClass = $javaClass;
1720
$this->name = $name;
1821
$this->descriptor = $descriptor;
1922
$this->class = $class;
23+
24+
[$this->resourceType, $this->classObject] = $javaClass
25+
->getOptions('class_resolver')
26+
->resolve($this->class);
2027
}
2128

2229
public function __invoke(...$arguments)
2330
{
24-
var_dump($arguments);
25-
exit();
31+
return $this->javaClass
32+
->getInvoker()
33+
->getStatic()
34+
->getMethods()
35+
->call(
36+
$this->name,
37+
...$arguments
38+
);
2639
}
2740
}

src/Kernel/Mnemonics/_invokeinterface.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,12 @@ public function execute(): void
3131
}
3232

3333
$objectref = $collection[0];
34-
$arguments = array_slice($collection, 1);
34+
$arguments = array_values(array_slice($collection, 1));
3535

36+
$result = $objectref(...$arguments);
3637

37-
var_dump($objectref(...$arguments));exit();
38-
var_dump($name, $descriptor);
39-
exit();
40-
throw new NotImplementedException(__CLASS__);
38+
if ($signature[0] !== 'void') {
39+
$this->pushToOperandStack($result);
40+
}
4141
}
4242
}

src/Kernel/Structures/_String.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public function execute(): void
1515
{
1616
$this->stringIndex = $this->readUnsignedShort();
1717
}
18+
1819
public function getStringIndex()
1920
{
2021
return $this->stringIndex;

src/Packages/java/lang/invoke/StringConcatFactory.php

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
<?php
22
namespace PHPJava\Packages\java\lang\invoke;
33

4+
use PHPJava\Core\JVM\ConstantPool;
45
use PHPJava\Exceptions\NotImplementedException;
56
use PHPJava\Packages\java\lang\_Object;
67
use PHPJava\Packages\java\lang\_String;
78
use PHPJava\Packages\java\lang\invoke\MethodHandles\Lookup;
9+
use PHPJava\Utilities\Formatter;
810

911
/**
1012
* The `StringConcatFactory` class was auto generated.
@@ -32,6 +34,7 @@ public static function makeConcat($a = null, $b = null, $c = null)
3234
/**
3335
* Facilitates the creation of optimized String concatenation methods, that can be used to efficiently concatenate a known number of arguments of known types, possibly after type adaptation and partial evaluation of arguments.
3436
*
37+
* @native ConstantPool
3538
* @param mixed $a
3639
* @param mixed $b
3740
* @param mixed $c
@@ -41,7 +44,7 @@ public static function makeConcat($a = null, $b = null, $c = null)
4144
* @throws StringConcatException
4245
* @see https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/invoke/package-summary.html#makeConcatWithConstants
4346
*/
44-
public static function makeConcatWithConstants($a, $b, $c, $d, ...$e)
47+
public static function makeConcatWithConstants(ConstantPool $cp, $a, $b, $c, $d, ...$e)
4548
{
4649
/**
4750
* @var Lookup $lookup
@@ -53,7 +56,10 @@ public static function makeConcatWithConstants($a, $b, $c, $d, ...$e)
5356
$lookup = $a;
5457
$name = $b;
5558
$concatType = $c;
56-
$recipe = (string) $d;
59+
$recipe = $d;
60+
if ($recipe instanceof \PHPJava\Kernel\Structures\_String) {
61+
$recipe = $cp[$recipe->getStringIndex()]->getString();
62+
}
5763
$constants = $e;
5864

5965
$newString = '';
@@ -77,7 +83,10 @@ public static function makeConcatWithConstants($a, $b, $c, $d, ...$e)
7783
$newString .= $char;
7884
}
7985

80-
$returnType = $concatType->returnType();
86+
[, $returnType] = Formatter::convertJavaNamespaceToPHP(
87+
$concatType->returnType()
88+
);
89+
8190
return new $returnType($newString);
8291
}
8392
}

0 commit comments

Comments
 (0)