mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-04 02:09:44 +02:00
GP-3569 - Cleanup of Extension management
This commit is contained in:
parent
b0e0c7372a
commit
b7583dc0b9
61 changed files with 3058 additions and 2540 deletions
|
@ -109,7 +109,15 @@ public abstract class ApplicationLayout {
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns the directory where archived application Extensions are stored.
|
||||
* Returns the directory where archived application Extensions are stored. This directory may
|
||||
* contain both zip files and subdirectories. This directory is only used inside of an
|
||||
* installation; development mode does not use this directory. This directory is used to ship
|
||||
* pre-built Ghidra extensions as part of a distribution.
|
||||
* <P>
|
||||
* This should be at the following location:<br>
|
||||
* <ul>
|
||||
* <li><code>{install dir}/Extensions/Ghidra</code></li>
|
||||
* </ul>
|
||||
*
|
||||
* @return the application Extensions archive directory. Could be null if the
|
||||
* {@link ApplicationLayout} does not support application Extensions.
|
||||
|
@ -120,7 +128,13 @@ public abstract class ApplicationLayout {
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns an {@link List ordered list} of the application Extensions installation directories.
|
||||
* Returns a prioritized {@link List ordered list} of the application Extensions installation
|
||||
* directories. Typically, the values may be any of the following locations:<br>
|
||||
* <ul>
|
||||
* <li><code>[user settings dir]/Extensions</code></li>
|
||||
* <li><code>[application install dir]/Ghidra/Extensions</code> (Release Mode)</li>
|
||||
* <li><code>ghidra/Ghidra/Extensions</code> (Development Mode)</li>
|
||||
* </ul>
|
||||
*
|
||||
* @return an {@link List ordered list} of the application Extensions installation directories.
|
||||
* Could be empty if the {@link ApplicationLayout} does not support application Extensions.
|
||||
|
|
|
@ -92,12 +92,12 @@ public class ModuleUtilities {
|
|||
if (!rootDir.exists() || remainingDepth <= 0) {
|
||||
return moduleRootDirs;
|
||||
}
|
||||
|
||||
ResourceFile[] subDirs = rootDir.listFiles(ResourceFile::isDirectory);
|
||||
|
||||
ResourceFile[] subDirs = rootDir.listFiles(ResourceFile::isDirectory);
|
||||
if (subDirs == null) {
|
||||
throw new RuntimeException("Failed to read directory: " + rootDir);
|
||||
}
|
||||
|
||||
|
||||
for (ResourceFile subDir : subDirs) {
|
||||
if ("build".equals(subDir.getName())) {
|
||||
continue; // ignore all "build" directories
|
||||
|
@ -230,9 +230,9 @@ public class ModuleUtilities {
|
|||
* @param modules The modules to get the library directories of.
|
||||
* @return A collection of library directories from the given modules.
|
||||
*/
|
||||
public static Collection<ResourceFile> getModuleLibDirectories(Map<String, GModule> modules) {
|
||||
public static Collection<ResourceFile> getModuleLibDirectories(Collection<GModule> modules) {
|
||||
List<ResourceFile> libraryDirectories = new ArrayList<>();
|
||||
for (GModule module : modules.values()) {
|
||||
for (GModule module : modules) {
|
||||
module.collectExistingModuleDirs(libraryDirectories, "lib");
|
||||
module.collectExistingModuleDirs(libraryDirectories, "libs");
|
||||
}
|
||||
|
@ -245,10 +245,10 @@ public class ModuleUtilities {
|
|||
* @param modules The modules to get the compiled .class and resources directories of.
|
||||
* @return A collection of directories containing classes and resources from the given modules.
|
||||
*/
|
||||
public static Collection<ResourceFile> getModuleBinDirectories(Map<String, GModule> modules) {
|
||||
public static Collection<ResourceFile> getModuleBinDirectories(Collection<GModule> modules) {
|
||||
String[] binaryPathTokens = BINARY_PATH.split(":");
|
||||
List<ResourceFile> binDirectories = new ArrayList<>();
|
||||
for (GModule module : modules.values()) {
|
||||
for (GModule module : modules) {
|
||||
Arrays.stream(binaryPathTokens)
|
||||
.forEach(token -> module.collectExistingModuleDirs(binDirectories, token));
|
||||
}
|
||||
|
@ -404,4 +404,31 @@ public class ModuleUtilities {
|
|||
.map(dir -> dir.getParentFile().getFile(false))
|
||||
.anyMatch(dir -> FileUtilities.isPathContainedWithin(dir, moduleRootDir));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the given module has been uninstalled.
|
||||
* @param path the module path to check
|
||||
* @return true if uninstalled
|
||||
*/
|
||||
public static boolean isUninstalled(String path) {
|
||||
return isUninstalled(new File(path));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the given module has been uninstalled.
|
||||
* @param dir the module dir to check
|
||||
* @return true if uninstalled
|
||||
*/
|
||||
public static boolean isUninstalled(File dir) {
|
||||
return new File(dir, MANIFEST_FILE_NAME_UNINSTALLED).exists();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the given module has been uninstalled.
|
||||
* @param dir the module dir to check
|
||||
* @return true if uninstalled
|
||||
*/
|
||||
public static boolean isUninstalled(ResourceFile dir) {
|
||||
return new ResourceFile(dir, MANIFEST_FILE_NAME_UNINSTALLED).exists();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue