diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-06-13 11:38:20 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-06-13 17:49:15 +0900 |
| commit | 69c372ba0eca61b05260d6d208445d9e69d14e34 (patch) | |
| tree | ab837346f5729a5a4a67ccd83462033511b41c89 /crates/shirabe-external-packages/src/symfony/console/command | |
| parent | efe5bdb1987411a473d4af15451a376d20928245 (diff) | |
| download | php-shirabe-69c372ba0eca61b05260d6d208445d9e69d14e34.tar.gz php-shirabe-69c372ba0eca61b05260d6d208445d9e69d14e34.tar.zst php-shirabe-69c372ba0eca61b05260d6d208445d9e69d14e34.zip | |
fix(console): flatten Application inheritance to restore overrides
Composer\Console\Application embedded Symfony's Application as an
`inner` field and delegated to it, so polymorphic calls inside the
Symfony base (e.g. doRun -> $this->getLongVersion()) resolved to
Symfony's own methods and never reached Composer's overrides. As a
result `--version` bypassed Composer's getLongVersion()/doRun()
entirely.
Flatten the PHP inheritance chain into the single shirabe Application
struct: take in the Symfony base methods (parent-calling overrides kept
under a `base_` prefix) and drop the `inner` delegation. Replace the
Symfony Application struct in shirabe-external-packages with an
`Application` trait that the merged struct implements, so commands and
descriptors can reference it without a reverse crate dependency.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe-external-packages/src/symfony/console/command')
6 files changed, 16 insertions, 16 deletions
diff --git a/crates/shirabe-external-packages/src/symfony/console/command/command.rs b/crates/shirabe-external-packages/src/symfony/console/command/command.rs index 1af9c59..1640689 100644 --- a/crates/shirabe-external-packages/src/symfony/console/command/command.rs +++ b/crates/shirabe-external-packages/src/symfony/console/command/command.rs @@ -20,7 +20,7 @@ use std::rc::Rc; /// (defined below) and this concrete `BaseCommand` struct holding the base-class /// state and behavior. Subclasses embed a `BaseCommand` and implement `Command`. pub struct BaseCommand { - application: Option<Rc<RefCell<Application>>>, + application: Option<Rc<RefCell<dyn Application>>>, name: Option<String>, process_title: Option<String>, aliases: Vec<String>, @@ -130,7 +130,7 @@ impl BaseCommand { self.ignore_validation_errors = true; } - pub fn set_application(&mut self, application: Option<Rc<RefCell<Application>>>) { + pub fn set_application(&mut self, application: Option<Rc<RefCell<dyn Application>>>) { self.application = application.clone(); if let Some(application) = application { self.set_helper_set(application.borrow_mut().get_helper_set()); @@ -151,7 +151,7 @@ impl BaseCommand { } /// Gets the application instance for this command. - pub fn get_application(&self) -> Option<Rc<RefCell<Application>>> { + pub fn get_application(&self) -> Option<Rc<RefCell<dyn Application>>> { self.application.clone() } @@ -709,11 +709,11 @@ pub trait Command: std::fmt::Debug + shirabe_php_shim::AsAny { todo!() } - fn set_application(&mut self, _application: Option<Rc<RefCell<Application>>>) { + fn set_application(&mut self, _application: Option<Rc<RefCell<dyn Application>>>) { todo!() } - fn get_application(&self) -> Option<Rc<RefCell<Application>>> { + fn get_application(&self) -> Option<Rc<RefCell<dyn Application>>> { todo!() } diff --git a/crates/shirabe-external-packages/src/symfony/console/command/complete_command.rs b/crates/shirabe-external-packages/src/symfony/console/command/complete_command.rs index 7a986ec..e8a319e 100644 --- a/crates/shirabe-external-packages/src/symfony/console/command/complete_command.rs +++ b/crates/shirabe-external-packages/src/symfony/console/command/complete_command.rs @@ -396,14 +396,14 @@ impl Command for CompleteCommand { fn set_application( &mut self, - application: Option<Rc<RefCell<crate::symfony::console::application::Application>>>, + application: Option<Rc<RefCell<dyn crate::symfony::console::application::Application>>>, ) { self.inner.set_application(application); } fn get_application( &self, - ) -> Option<Rc<RefCell<crate::symfony::console::application::Application>>> { + ) -> Option<Rc<RefCell<dyn crate::symfony::console::application::Application>>> { self.inner.get_application() } diff --git a/crates/shirabe-external-packages/src/symfony/console/command/dump_completion_command.rs b/crates/shirabe-external-packages/src/symfony/console/command/dump_completion_command.rs index 51287c7..1929c64 100644 --- a/crates/shirabe-external-packages/src/symfony/console/command/dump_completion_command.rs +++ b/crates/shirabe-external-packages/src/symfony/console/command/dump_completion_command.rs @@ -230,14 +230,14 @@ impl Command for DumpCompletionCommand { fn set_application( &mut self, - application: Option<Rc<RefCell<crate::symfony::console::application::Application>>>, + application: Option<Rc<RefCell<dyn crate::symfony::console::application::Application>>>, ) { self.inner.set_application(application); } fn get_application( &self, - ) -> Option<Rc<RefCell<crate::symfony::console::application::Application>>> { + ) -> Option<Rc<RefCell<dyn crate::symfony::console::application::Application>>> { self.inner.get_application() } diff --git a/crates/shirabe-external-packages/src/symfony/console/command/help_command.rs b/crates/shirabe-external-packages/src/symfony/console/command/help_command.rs index 0a26931..ec2de93 100644 --- a/crates/shirabe-external-packages/src/symfony/console/command/help_command.rs +++ b/crates/shirabe-external-packages/src/symfony/console/command/help_command.rs @@ -162,14 +162,14 @@ impl Command for HelpCommand { fn set_application( &mut self, - application: Option<Rc<RefCell<crate::symfony::console::application::Application>>>, + application: Option<Rc<RefCell<dyn crate::symfony::console::application::Application>>>, ) { self.inner.set_application(application); } fn get_application( &self, - ) -> Option<Rc<RefCell<crate::symfony::console::application::Application>>> { + ) -> Option<Rc<RefCell<dyn crate::symfony::console::application::Application>>> { self.inner.get_application() } diff --git a/crates/shirabe-external-packages/src/symfony/console/command/lazy_command.rs b/crates/shirabe-external-packages/src/symfony/console/command/lazy_command.rs index 47f73bf..924d4bd 100644 --- a/crates/shirabe-external-packages/src/symfony/console/command/lazy_command.rs +++ b/crates/shirabe-external-packages/src/symfony/console/command/lazy_command.rs @@ -78,7 +78,7 @@ impl LazyCommand { self.get_command().ignore_validation_errors(); } - pub fn set_application(&mut self, application: Option<Rc<RefCell<Application>>>) { + pub fn set_application(&mut self, application: Option<Rc<RefCell<dyn Application>>>) { // if ($this->command instanceof parent) if let LazyCommandInner::Command(command) = &mut self.command { command.set_application(application.clone()); @@ -288,11 +288,11 @@ impl Command for LazyCommand { todo!() } - fn set_application(&mut self, application: Option<Rc<RefCell<Application>>>) { + fn set_application(&mut self, application: Option<Rc<RefCell<dyn Application>>>) { LazyCommand::set_application(self, application); } - fn get_application(&self) -> Option<Rc<RefCell<Application>>> { + fn get_application(&self) -> Option<Rc<RefCell<dyn Application>>> { self.inner.get_application() } diff --git a/crates/shirabe-external-packages/src/symfony/console/command/list_command.rs b/crates/shirabe-external-packages/src/symfony/console/command/list_command.rs index 7581c90..5203be1 100644 --- a/crates/shirabe-external-packages/src/symfony/console/command/list_command.rs +++ b/crates/shirabe-external-packages/src/symfony/console/command/list_command.rs @@ -162,14 +162,14 @@ impl Command for ListCommand { fn set_application( &mut self, - application: Option<Rc<RefCell<crate::symfony::console::application::Application>>>, + application: Option<Rc<RefCell<dyn crate::symfony::console::application::Application>>>, ) { self.inner.set_application(application); } fn get_application( &self, - ) -> Option<Rc<RefCell<crate::symfony::console::application::Application>>> { + ) -> Option<Rc<RefCell<dyn crate::symfony::console::application::Application>>> { self.inner.get_application() } |
