@@ -339,43 +339,59 @@ public static IStatus updateLibraries(Set<IArduinoLibraryVersion> toUnInstallLib
339339		return  status ;
340340	}
341341
342+ 	/** 
343+ 	 * A convenience (and downward compatibility method of 
344+ 	 * getLibrariesAll(BoardDescription boardDescriptor, true) { 
345+ 	 * 
346+ 	 * @param confDesc can be null 
347+ 	 * @return A map of FQN IArduinoLibraryVersion 
348+ 	 */ 
349+ 	public  static  TreeMap <String , IArduinoLibraryVersion > getLibrariesAll (BoardDescription  boardDescriptor ) {
350+ 		return  getLibrariesAll ( boardDescriptor , true );
351+ 	}
352+ 
342353	/** 
343354	 * Given a sloeber configuration provide all the libraries that can be used by 
344355	 * this sketch This boils down to all libraries maintained by the Library 
345356	 * manager plus all the libraries provided by the core plus all the libraries 
346357	 * provided by the personal libraries 
347358	 * 
348359	 * @param confDesc can be null 
349- 	 * @return 
360+ 	 * @return if keyIsFQN is true: A map of FQN IArduinoLibraryVersion 
361+ 	 * if keyIsFQN is false: A map of location IArduinoLibraryVersion 
350362	 */ 
351- 	public  static  TreeMap <String , IArduinoLibraryVersion > getLibrariesAll (BoardDescription  boardDescriptor ) {
363+ 	public  static  TreeMap <String , IArduinoLibraryVersion > getLibrariesAll (BoardDescription  boardDescriptor ,  boolean   keyIsFQN ) {
352364		TreeMap <String , IArduinoLibraryVersion > libraries  = new  TreeMap <>();
353- 		libraries .putAll (getLibrariesdManaged ());
354- 		libraries .putAll (getLibrariesPrivate ());
365+ 		libraries .putAll (getLibrariesdManaged (keyIsFQN ));
366+ 		libraries .putAll (getLibrariesPrivate (keyIsFQN ));
355367		if  (boardDescriptor  != null ) {
356- 			libraries .putAll (getLibrariesHarware (boardDescriptor ));
368+ 			libraries .putAll (getLibrariesHarware (boardDescriptor , keyIsFQN ));
357369		}
358370		return  libraries ;
359371	}
360372
361- 	private  static  Map <String , IArduinoLibraryVersion > getLibrariesdManaged () {
373+ 	private  static  Map <String , IArduinoLibraryVersion > getLibrariesdManaged (boolean   keyIsFQN ) {
362374		Map <String , IArduinoLibraryVersion > ret  = new  HashMap <>();
363375		for  (IArduinoLibraryIndex  libindex  : libraryIndices ) {
364376			for  (IArduinoLibrary  curLib  : libindex .getLibraries ()) {
365377				IArduinoLibraryVersion  instVersion  = curLib .getInstalledVersion ();
366378				if  (instVersion  != null ) {
367- 					ret .put (instVersion .getFQN ().toPortableString (), instVersion );
379+ 					if  (keyIsFQN ) {
380+ 						ret .put (instVersion .getFQN ().toPortableString (), instVersion );
381+ 					} else  {
382+ 						ret .put (instVersion .getInstallPath ().toPortableString (), instVersion );
383+ 					}
368384				}
369385			}
370386		}
371387		return  ret ;
372388	}
373389
374- 	private  static  Map <String , IArduinoLibraryVersion > getLibrariesPrivate () {
390+ 	private  static  Map <String , IArduinoLibraryVersion > getLibrariesPrivate (boolean   keyIsFQN ) {
375391		Map <String , IArduinoLibraryVersion > ret  = new  HashMap <>();
376392		String  privateLibPaths [] = InstancePreferences .getPrivateLibraryPaths ();
377393		for  (String  curLibPath  : privateLibPaths ) {
378- 			ret .putAll (getLibrariesFromFolder (new  Path (curLibPath ), 2 , false ,true ));
394+ 			ret .putAll (getLibrariesFromFolder (new  Path (curLibPath ), 2 , false ,true , keyIsFQN ));
379395		}
380396		return  ret ;
381397
@@ -385,12 +401,13 @@ private static Map<String, IArduinoLibraryVersion> getLibrariesPrivate() {
385401	 * for a given folder return all subfolders 
386402	 * 
387403	 * @param ipath the folder you want the subfolders off 
404+ 	 * @param keyIsFQN 
388405	 * @return The subfolders of the ipath folder. May contain empty values. This 
389406	 *         method returns a key value pair of key equals foldername and value 
390407	 *         equals full path. 
391408	 */ 
392409	private  static  Map <String , IArduinoLibraryVersion > getLibrariesFromFolder (IPath  ipath , int  depth ,
393- 			boolean  isHardwareLib ,boolean  isPrivate ) {
410+ 			boolean  isHardwareLib ,boolean  isPrivate ,  boolean   keyIsFQN ) {
394411		if  (ConfigurationPreferences .getInstallationPathLibraries ().isPrefixOf (ipath )) {
395412			System .err .println ("The method findAllPrivateLibs should not be called on Library manager installed libs" ); //$NON-NLS-1$ 
396413		}
@@ -409,13 +426,9 @@ private static Map<String, IArduinoLibraryVersion> getLibrariesFromFolder(IPath
409426			}
410427			String  fileExt  = (new  Path (curChild )).getFileExtension ();
411428			if  (LIBRARY_INDICATION_FILES .contains (curChild ) || CODE_EXTENSIONS .contains (fileExt )) {
412- 				if  (isHardwareLib ) {
413- 					IArduinoLibraryVersion  retVersion  = new  ArduinoHardwareLibrary (ipath );
414- 					ret .put (retVersion .getFQN ().toPortableString (), retVersion );
415- 				} else  {
416- 					IArduinoLibraryVersion  retVersion  = new  ArduinoPrivateHardwareLibraryVersion (ipath );
417- 					ret .put (retVersion .getFQN ().toPortableString (), retVersion );
418- 				}
429+ 				IArduinoLibraryVersion  retVersion  = isHardwareLib ?new  ArduinoHardwareLibrary (ipath ):new  ArduinoPrivateHardwareLibraryVersion (ipath );
430+ 				String  key =keyIsFQN ?retVersion .getFQN ().toPortableString ():retVersion .getInstallPath ().toPortableString ();
431+ 				ret .put (key , retVersion );
419432
420433				return  ret ;
421434			}
@@ -429,7 +442,7 @@ private static Map<String, IArduinoLibraryVersion> getLibrariesFromFolder(IPath
429442			IPath  LibPath  = ipath .append (curFolder );
430443			File  LibPathFile  = LibPath .toFile ();
431444			if  (LibPathFile .isDirectory () && !LibPathFile .isHidden ()) {
432- 				ret .putAll (getLibrariesFromFolder (LibPath , depth  - 1 , isHardwareLib ,isPrivate ));
445+ 				ret .putAll (getLibrariesFromFolder (LibPath , depth  - 1 , isHardwareLib ,isPrivate , keyIsFQN ));
433446			}
434447		}
435448		return  ret ;
@@ -439,21 +452,22 @@ private static Map<String, IArduinoLibraryVersion> getLibrariesFromFolder(IPath
439452	 * Searches all the hardware dependent libraries of a project. If this is a 
440453	 * board referencing a core then the libraries of the referenced core are added 
441454	 * as well 
455+ 	 * @param keyIsFQN 
442456	 * 
443457	 * @param project the project to find all hardware libraries for 
444458	 * @return all the library folder names. May contain empty values. 
445459	 */ 
446- 	public  static  Map <String , IArduinoLibraryVersion > getLibrariesHarware (BoardDescription  boardDescriptor ) {
460+ 	public  static  Map <String , IArduinoLibraryVersion > getLibrariesHarware (BoardDescription  boardDescriptor ,  boolean   keyIsFQN ) {
447461		Map <String , IArduinoLibraryVersion > ret  = new  HashMap <>();
448462		// first add the referenced 
449463		IPath  libPath  = boardDescriptor .getReferencedCoreLibraryPath ();
450464		if  (libPath  != null ) {
451- 			ret .putAll (getLibrariesFromFolder (libPath , 1 , true ,boardDescriptor .isPrivate ()));
465+ 			ret .putAll (getLibrariesFromFolder (libPath , 1 , true ,boardDescriptor .isPrivate (), keyIsFQN ));
452466		}
453467		// then add the referencing 
454468		libPath  = boardDescriptor .getReferencingLibraryPath ();
455469		if  (libPath  != null ) {
456- 			ret .putAll (getLibrariesFromFolder (libPath , 1 , true ,boardDescriptor .isPrivate ()));
470+ 			ret .putAll (getLibrariesFromFolder (libPath , 1 , true ,boardDescriptor .isPrivate (), keyIsFQN ));
457471		}
458472		return  ret ;
459473	}
@@ -462,17 +476,15 @@ public static IArduinoLibraryVersion getLibraryVersionFromLocation(IFolder libFo
462476		if  (boardDescriptor  != null ) {
463477			IPath  libPath =boardDescriptor .getReferencedCoreLibraryPath ();
464478			if (libPath !=null  && libPath .isPrefixOf (libFolder .getLocation ())) {
465- 				String  FQNLibName =ArduinoHardwareLibrary .calculateFQN (libFolder .getName ()).toString ();
466- 				return  getLibrariesHarware (boardDescriptor ).get (FQNLibName );
479+ 				return  getLibrariesHarware (boardDescriptor ,false ).get (libFolder .getLocation ().toPortableString ());
467480			}
468481		}
469482
470483		if (ConfigurationPreferences .getInstallationPathLibraries ().isPrefixOf (libFolder .getLocation ())) {
471- 			String  FQNLibName = ArduinoLibraryVersion .calculateFQN (libFolder .getName ()).toString ();
472- 			return  getLibrariesdManaged ().get (FQNLibName );
484+ 			return  getLibrariesdManaged (false ).get (libFolder .getLocation ().toPortableString ());
473485		}
474486
475- 		return  getLibrariesPrivate ().get (libFolder .getName ());
487+ 		return  getLibrariesPrivate (false ).get (libFolder .getLocation (). toPortableString ());
476488	}
477489
478490	public  static  IArduinoLibraryVersion  getLibraryVersionFromFQN (String  FQNLibName , BoardDescription  boardDescriptor ) {
@@ -489,12 +501,12 @@ public static IArduinoLibraryVersion getLibraryVersionFromFQN(String FQNLibName,
489501				if  (boardDescriptor  == null ) {
490502					return  null ;
491503				}
492- 				return  getLibrariesHarware (boardDescriptor ).get (FQNLibName );
504+ 				return  getLibrariesHarware (boardDescriptor , true ).get (FQNLibName );
493505			}
494- 			return  getLibrariesdManaged ().get (FQNLibName );
506+ 			return  getLibrariesdManaged (true ).get (FQNLibName );
495507		}
496508		if  (PRIVATE .equals (fqnParts [1 ])) {
497- 			return  getLibrariesPrivate ().get (FQNLibName );
509+ 			return  getLibrariesPrivate (true ).get (FQNLibName );
498510		}
499511		return  null ;
500512	}
0 commit comments