@@ -68,7 +68,7 @@ const JAVA_DEBUG_PLUGIN_FORK_URL: &str = "https://github.com/zed-industries/java
6868const MAVEN_METADATA_URL : & str = "https://repo1.maven.org/maven2/com/microsoft/java/com.microsoft.java.debug.plugin/maven-metadata.xml" ;
6969
7070fn find_latest_local_debugger ( ) -> Option < PathBuf > {
71- let prefix = PathBuf :: from ( DEBUGGER_INSTALL_PATH ) ;
71+ let prefix = get_curr_dir ( ) . ok ( ) ? . join ( DEBUGGER_INSTALL_PATH ) ;
7272 fs:: read_dir ( & prefix)
7373 . map ( |entries| {
7474 entries
@@ -101,11 +101,13 @@ impl Debugger {
101101 & mut self ,
102102 _language_server_id : & LanguageServerId ,
103103 ) -> zed:: Result < PathBuf > {
104- let prefix = "debugger" ;
104+ let prefix = get_curr_dir ( )
105+ . map_err ( |err| format ! ( "Failed to get extension directory for debugger: {err}" ) ) ?
106+ . join ( DEBUGGER_INSTALL_PATH ) ;
105107 let artifact = "com.microsoft.java.debug.plugin" ;
106108 let latest_version = "0.53.2" ;
107109 let jar_name = format ! ( "{artifact}-{latest_version}.jar" ) ;
108- let jar_path = PathBuf :: from ( prefix) . join ( & jar_name) ;
110+ let jar_path = prefix. join ( & jar_name) ;
109111
110112 if let Some ( path) = & self . plugin_path
111113 && fs:: metadata ( path) . is_ok_and ( |stat| stat. is_file ( ) )
@@ -119,8 +121,8 @@ impl Debugger {
119121 return Ok ( jar_path) ;
120122 }
121123
122- create_path_if_not_exists ( prefix)
123- . map_err ( |err| format ! ( "Failed to create debugger directory '{prefix}': {err}" ) ) ?;
124+ create_path_if_not_exists ( & prefix)
125+ . map_err ( |err| format ! ( "Failed to create debugger directory '{prefix:? }': {err}" ) ) ?;
124126
125127 download_file (
126128 JAVA_DEBUG_PLUGIN_FORK_URL ,
@@ -146,7 +148,9 @@ impl Debugger {
146148 & mut self ,
147149 language_server_id : & LanguageServerId ,
148150 ) -> zed:: Result < PathBuf > {
149- let prefix = "debugger" ;
151+ let prefix = get_curr_dir ( )
152+ . map_err ( |err| format ! ( "Failed to get extension directory for debugger: {err}" ) ) ?
153+ . join ( DEBUGGER_INSTALL_PATH ) ;
150154
151155 if let Some ( path) = & self . plugin_path
152156 && fs:: metadata ( path) . is_ok_and ( |stat| stat. is_file ( ) )
@@ -168,13 +172,13 @@ impl Debugger {
168172
169173 // Maven loves to be down, trying to resolve it gracefully
170174 if let Err ( err) = & res {
171- if !fs:: metadata ( prefix) . is_ok_and ( |stat| stat. is_dir ( ) ) {
175+ if !fs:: metadata ( & prefix) . is_ok_and ( |stat| stat. is_dir ( ) ) {
172176 return Err ( err. to_owned ( ) ) ;
173177 }
174178
175179 println ! ( "Could not fetch debugger: {err}\n Falling back to local version." ) ;
176180
177- let exists = fs:: read_dir ( prefix)
181+ let exists = fs:: read_dir ( & prefix)
178182 . ok ( )
179183 . and_then ( |dir| dir. last ( ) . map ( |v| v. ok ( ) ) )
180184 . flatten ( ) ;
@@ -192,7 +196,7 @@ impl Debugger {
192196 return Err ( err. to_owned ( ) ) ;
193197 }
194198
195- let jar_path = PathBuf :: from ( prefix) . join ( file. file_name ( ) ) ;
199+ let jar_path = prefix. join ( file. file_name ( ) ) ;
196200 self . plugin_path = Some ( jar_path. clone ( ) ) ;
197201
198202 return Ok ( jar_path) ;
@@ -217,18 +221,18 @@ impl Debugger {
217221 let artifact = "com.microsoft.java.debug.plugin" ;
218222
219223 let jar_name = format ! ( "{artifact}-{latest_version}.jar" ) ;
220- let jar_path = PathBuf :: from ( prefix) . join ( & jar_name) ;
224+ let jar_path = prefix. join ( & jar_name) ;
221225
222226 if !fs:: metadata ( & jar_path) . is_ok_and ( |stat| stat. is_file ( ) ) {
223- if let Err ( err) = fs:: remove_dir_all ( prefix) {
227+ if let Err ( err) = fs:: remove_dir_all ( & prefix) {
224228 println ! ( "failed to remove directory entry: {err}" ) ;
225229 }
226230
227231 set_language_server_installation_status (
228232 language_server_id,
229233 & LanguageServerInstallationStatus :: Downloading ,
230234 ) ;
231- create_path_if_not_exists ( prefix) ?;
235+ create_path_if_not_exists ( & prefix) ?;
232236
233237 let url = format ! (
234238 "https://repo1.maven.org/maven2/com/microsoft/java/{artifact}/{latest_version}/{jar_name}"
@@ -376,16 +380,10 @@ impl Debugger {
376380 & self ,
377381 initialization_options : Option < Value > ,
378382 ) -> zed:: Result < Value > {
379- let current_dir = get_curr_dir ( )
380- . map_err ( |err| format ! ( "Failed to get current directory for debugger plugin: {err}" ) ) ?;
381-
382383 let canonical_path = Value :: String (
383- current_dir
384- . join (
385- self . plugin_path
386- . as_ref ( )
387- . ok_or ( "Debugger plugin path not set" ) ?,
388- )
384+ self . plugin_path
385+ . as_ref ( )
386+ . ok_or ( "Debugger plugin path not set" ) ?
389387 . to_string_lossy ( )
390388 . to_string ( ) ,
391389 ) ;
@@ -449,7 +447,7 @@ impl Downloadable for Debugger {
449447 worktree : & Worktree ,
450448 ) -> zed:: Result < PathBuf > {
451449 if let Some ( jar_path) = self . user_configured_path ( configuration, worktree) {
452- let path = PathBuf :: from ( & jar_path) ;
450+ let path = PathBuf :: from ( jar_path) ;
453451 self . plugin_path = Some ( path. clone ( ) ) ;
454452 return Ok ( path) ;
455453 }
@@ -477,3 +475,44 @@ impl Downloadable for Debugger {
477475 get_java_debug_jar ( configuration, worktree)
478476 }
479477}
478+
479+ #[ cfg( test) ]
480+ mod tests {
481+ use super :: * ;
482+
483+ fn injected_bundle ( plugin_path : PathBuf ) -> String {
484+ let debugger = Debugger {
485+ plugin_path : Some ( plugin_path) ,
486+ } ;
487+ debugger
488+ . inject_plugin_into_options ( None )
489+ . unwrap ( )
490+ . pointer ( "/bundles/0" )
491+ . and_then ( Value :: as_str)
492+ . unwrap ( )
493+ . to_string ( )
494+ }
495+
496+ #[ test]
497+ fn managed_debugger_bundle_is_resolved_against_extension_directory ( ) {
498+ let plugin_path = get_curr_dir ( ) . unwrap ( ) . join ( "debugger/java-debug.jar" ) ;
499+
500+ assert_eq ! (
501+ injected_bundle( plugin_path) ,
502+ get_curr_dir( )
503+ . unwrap( )
504+ . join( "debugger/java-debug.jar" )
505+ . to_string_lossy( )
506+ ) ;
507+ }
508+
509+ #[ test]
510+ fn external_debugger_bundle_is_preserved ( ) {
511+ let plugin_path = PathBuf :: from ( r"C:\tools\java-debug.jar" ) ;
512+
513+ assert_eq ! (
514+ injected_bundle( plugin_path) ,
515+ r"C:\tools\java-debug.jar" . to_string( )
516+ ) ;
517+ }
518+ }
0 commit comments