From fb87da58680ee8654027d100b43dccda4ed83ba4 Mon Sep 17 00:00:00 2001 From: memory-agape Date: Wed, 24 Apr 2019 19:40:05 +0900 Subject: [PATCH 1/8] Add bi --- bin/PHPJava.php | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 bin/PHPJava.php diff --git a/bin/PHPJava.php b/bin/PHPJava.php new file mode 100644 index 00000000..0bd6fb1b --- /dev/null +++ b/bin/PHPJava.php @@ -0,0 +1,17 @@ +execute( + [] +); From 2645f28cedfe02f365c69c28b5e0ae892b2b05bb Mon Sep 17 00:00:00 2001 From: memory-agape Date: Wed, 24 Apr 2019 19:54:28 +0900 Subject: [PATCH 2/8] Update --- bin/PHPJava.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/bin/PHPJava.php b/bin/PHPJava.php index 0bd6fb1b..9d154ea0 100644 --- a/bin/PHPJava.php +++ b/bin/PHPJava.php @@ -12,6 +12,12 @@ $jar = new JavaArchive($argv[1]); $arguments = array_slice($argv, 2); +if (empty($arguments)) { + $arguments = [ + [], + ]; +} + $jar->execute( - [] + ...$arguments ); From ca990edf804da0ee76c7dbc8649217d06196fa61 Mon Sep 17 00:00:00 2001 From: memory-agape Date: Wed, 24 Apr 2019 20:32:40 +0900 Subject: [PATCH 3/8] Update --- bin/PHPJava.php | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/bin/PHPJava.php b/bin/PHPJava.php index 9d154ea0..52df4517 100644 --- a/bin/PHPJava.php +++ b/bin/PHPJava.php @@ -11,13 +11,6 @@ } $jar = new JavaArchive($argv[1]); -$arguments = array_slice($argv, 2); -if (empty($arguments)) { - $arguments = [ - [], - ]; -} - $jar->execute( - ...$arguments + ...(empty($arguments) ? [[]] : array_slice($argv, 2)) ); From 25b4526ce178ae45273756090b5d1110a2911c0e Mon Sep 17 00:00:00 2001 From: memory-agape Date: Wed, 24 Apr 2019 20:37:32 +0900 Subject: [PATCH 4/8] Fix --- bin/PHPJava.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/bin/PHPJava.php b/bin/PHPJava.php index 52df4517..d4f16727 100644 --- a/bin/PHPJava.php +++ b/bin/PHPJava.php @@ -11,6 +11,5 @@ } $jar = new JavaArchive($argv[1]); -$jar->execute( - ...(empty($arguments) ? [[]] : array_slice($argv, 2)) -); +$arguments = array_slice($argv, 2); +$jar->execute(...(array_slice($argv, 2) ?: [[]])); From 1820af68885bff62c4d0dff517c0ae9e3e0e78ce Mon Sep 17 00:00:00 2001 From: memory-agape Date: Sun, 28 Apr 2019 19:07:11 +0900 Subject: [PATCH 5/8] WIP: Add to run command --- bin/Commands/JVM/RunCommand.php | 47 +++++++++++++++++++++++++++++++++ bin/PHPJava.php | 16 +++++------ composer.json | 8 +++--- src/Core/PHPJava.php | 2 +- 4 files changed, 61 insertions(+), 12 deletions(-) create mode 100644 bin/Commands/JVM/RunCommand.php diff --git a/bin/Commands/JVM/RunCommand.php b/bin/Commands/JVM/RunCommand.php new file mode 100644 index 00000000..b9ebd9e2 --- /dev/null +++ b/bin/Commands/JVM/RunCommand.php @@ -0,0 +1,47 @@ +setDescription('Run JVM') + ->addOption( + 'options', + 'o', + InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY, + 'Set options' + ) + ->addOption( + 'mode', + 'm', + InputOption::VALUE_OPTIONAL, + 'Set run mode [jar|class]. Default is class.' + ) + ->addOption( + 'entrypoint', + 'e', + InputOption::VALUE_OPTIONAL, + 'Overwrite entrypoint' + ) + ->addArgument( + 'parameters', + InputArgument::OPTIONAL | InputArgument::IS_ARRAY, + 'Define parameters to pass for entrypoint.' + ); + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $options = $input->getOptions(); + } +} diff --git a/bin/PHPJava.php b/bin/PHPJava.php index d4f16727..bf0b37d5 100644 --- a/bin/PHPJava.php +++ b/bin/PHPJava.php @@ -1,15 +1,15 @@ execute(...(array_slice($argv, 2) ?: [[]])); +$application = new Application(); +$runCommand = new RunCommand(); +$application->add($runCommand); +$application->setDefaultCommand($runCommand->getName()); +$application->run(); diff --git a/composer.json b/composer.json index 48248e36..510c5dce 100644 --- a/composer.json +++ b/composer.json @@ -3,7 +3,7 @@ "description": "JVM emulator by PHP", "type": "library", "license": "MIT", - "version": "0.0.6.5-dev", + "version": "0.0.6.6-dev", "authors": [ { "name": "memory" @@ -18,11 +18,13 @@ "php-java/java-io-package": "*", "php-java/java-net-package": "*", "php-java/java-nio-package": "*", - "gabrielelana/byte-units": "dev-master" + "gabrielelana/byte-units": "dev-master", + "symfony/console": "^4.3@dev" }, "autoload": { "psr-4": { - "PHPJava\\": "src/" + "PHPJava\\": "src/", + "PHPJava\\Console\\": "bin/" } }, "autoload-dev": { diff --git a/src/Core/PHPJava.php b/src/Core/PHPJava.php index aad57825..cc140d54 100644 --- a/src/Core/PHPJava.php +++ b/src/Core/PHPJava.php @@ -12,5 +12,5 @@ final class PHPJava /** * As same as composer version. */ - const VERSION = 0x000065; + const VERSION = 0x000066; } From adc2e9c9a20f935d8b6583414527d6396a900636 Mon Sep 17 00:00:00 2001 From: memory-agape Date: Sun, 28 Apr 2019 19:44:24 +0900 Subject: [PATCH 6/8] WIP: Update --- bin/Commands/JVM/RunCommand.php | 32 ++++++++++++++++++++++---------- bin/PHPJava.php | 5 ++++- composer.json | 2 +- 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/bin/Commands/JVM/RunCommand.php b/bin/Commands/JVM/RunCommand.php index b9ebd9e2..8a6a52cb 100644 --- a/bin/Commands/JVM/RunCommand.php +++ b/bin/Commands/JVM/RunCommand.php @@ -3,6 +3,7 @@ use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputDefinition; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; @@ -14,12 +15,21 @@ class RunCommand extends Command protected function configure() { $this - ->setDescription('Run JVM') + ->addArgument( + 'file', + InputArgument::REQUIRED, + 'Specify to run [jar|class] file.' + ) + ->addArgument( + 'parameters', + InputArgument::OPTIONAL | InputArgument::IS_ARRAY, + 'Specify parameters to pass for entrypoint.' + ) ->addOption( - 'options', - 'o', + 'settings', + 's', InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY, - 'Set options' + 'Set option settings.' ) ->addOption( 'mode', @@ -32,16 +42,18 @@ protected function configure() 'e', InputOption::VALUE_OPTIONAL, 'Overwrite entrypoint' - ) - ->addArgument( - 'parameters', - InputArgument::OPTIONAL | InputArgument::IS_ARRAY, - 'Define parameters to pass for entrypoint.' ); } protected function execute(InputInterface $input, OutputInterface $output) { - $options = $input->getOptions(); + $settings = $input->getOption('settings') ?? []; + $mode = $input->getOption('mode') ?? 'class'; + $entrypoint = $input->getOption('entrypoint') ?? null; + $file = $input->getArgument('file'); + $parameters = $input->getArgument('parameters'); + + + var_dump($file); } } diff --git a/bin/PHPJava.php b/bin/PHPJava.php index bf0b37d5..1ec2f9aa 100644 --- a/bin/PHPJava.php +++ b/bin/PHPJava.php @@ -11,5 +11,8 @@ $application = new Application(); $runCommand = new RunCommand(); $application->add($runCommand); -$application->setDefaultCommand($runCommand->getName()); +$application->setDefaultCommand( + $runCommand->getName(), + true +); $application->run(); diff --git a/composer.json b/composer.json index 510c5dce..751feea8 100644 --- a/composer.json +++ b/composer.json @@ -19,7 +19,7 @@ "php-java/java-net-package": "*", "php-java/java-nio-package": "*", "gabrielelana/byte-units": "dev-master", - "symfony/console": "^4.3@dev" + "symfony/console": "4.2" }, "autoload": { "psr-4": { From 6aa200aff93ee501533710230d992fd3014c4009 Mon Sep 17 00:00:00 2001 From: memory-agape Date: Sun, 28 Apr 2019 20:02:57 +0900 Subject: [PATCH 7/8] Add bin --- bin/Commands/JVM/RunCommand.php | 48 ++++++++++++++++++++++++++------- bin/{PHPJava.php => PHPJava} | 1 + composer.json | 3 +++ 3 files changed, 43 insertions(+), 9 deletions(-) rename bin/{PHPJava.php => PHPJava} (96%) mode change 100644 => 100755 diff --git a/bin/Commands/JVM/RunCommand.php b/bin/Commands/JVM/RunCommand.php index 8a6a52cb..290944c9 100644 --- a/bin/Commands/JVM/RunCommand.php +++ b/bin/Commands/JVM/RunCommand.php @@ -1,6 +1,10 @@ addOption( - 'entrypoint', - 'e', - InputOption::VALUE_OPTIONAL, - 'Overwrite entrypoint' ); } protected function execute(InputInterface $input, OutputInterface $output) { $settings = $input->getOption('settings') ?? []; - $mode = $input->getOption('mode') ?? 'class'; - $entrypoint = $input->getOption('entrypoint') ?? null; + $mode = strtolower($input->getOption('mode') ?? 'class'); $file = $input->getArgument('file'); $parameters = $input->getArgument('parameters'); + // Set global options + GlobalOptions::set($settings); + + if ($mode === 'jar') { + return $this->runJar($file, $parameters); + } elseif ($mode === 'class') { + return $this->runClass($file, $parameters); + } + + $output->writeln( + 'Unable to run `' . $mode . '` mode.' + ); + } - var_dump($file); + private function runJar(string $file, array $parameters) + { + $jar = new JavaArchive($file); + $jar->execute( + $parameters + ); + } + + private function runClass(string $file, array $parameters) + { + $class = new JavaClass( + new FileReader($file) + ); + $class + ->getInvoker() + ->getStatic() + ->getMethods() + ->call( + 'main', + $parameters + ); } } diff --git a/bin/PHPJava.php b/bin/PHPJava old mode 100644 new mode 100755 similarity index 96% rename from bin/PHPJava.php rename to bin/PHPJava index 1ec2f9aa..c0261d81 --- a/bin/PHPJava.php +++ b/bin/PHPJava @@ -1,3 +1,4 @@ +#!/usr/bin/php =7.2", "ext-zip": "*", From ce9e2cbda0fdbed089fdcd32f14b75f39128c289 Mon Sep 17 00:00:00 2001 From: memory-agape Date: Sun, 28 Apr 2019 20:12:20 +0900 Subject: [PATCH 8/8] Add bin --- PHPJava | 11 ++++++++++ bin/PHPJava | 19 ----------------- composer.json | 4 ++-- console/Command.php | 22 ++++++++++++++++++++ {bin => console}/Commands/JVM/RunCommand.php | 0 5 files changed, 35 insertions(+), 21 deletions(-) create mode 100755 PHPJava delete mode 100755 bin/PHPJava create mode 100755 console/Command.php rename {bin => console}/Commands/JVM/RunCommand.php (100%) diff --git a/PHPJava b/PHPJava new file mode 100755 index 00000000..36e35079 --- /dev/null +++ b/PHPJava @@ -0,0 +1,11 @@ +#!/usr/bin/php +add($runCommand); -$application->setDefaultCommand( - $runCommand->getName(), - true -); -$application->run(); diff --git a/composer.json b/composer.json index 30595932..703d2963 100644 --- a/composer.json +++ b/composer.json @@ -10,7 +10,7 @@ } ], "bin": [ - "bin/PHPJava" + "PHPJava" ], "require": { "php": ">=7.2", @@ -27,7 +27,7 @@ "autoload": { "psr-4": { "PHPJava\\": "src/", - "PHPJava\\Console\\": "bin/" + "PHPJava\\Console\\": "console/" } }, "autoload-dev": { diff --git a/console/Command.php b/console/Command.php new file mode 100755 index 00000000..cfc01285 --- /dev/null +++ b/console/Command.php @@ -0,0 +1,22 @@ +add($runCommand); + $application->setDefaultCommand( + $runCommand->getName(), + true + ); + $application->run(); + } +} diff --git a/bin/Commands/JVM/RunCommand.php b/console/Commands/JVM/RunCommand.php similarity index 100% rename from bin/Commands/JVM/RunCommand.php rename to console/Commands/JVM/RunCommand.php