From d96ee828566d605f8039e29e1d7d6ad1f7ea4dbd Mon Sep 17 00:00:00 2001 From: dragonmacher <48328597+dragonmacher@users.noreply.github.com> Date: Wed, 15 Jan 2020 14:07:44 -0500 Subject: [PATCH] GT-3434 - Refactored Namespace.NAMESPACE_DELIMITER to be shorter; deprecated the old name --- .../app/cmd/label/CreateNamespacesCmd.java | 2 +- .../app/plugin/core/gotoquery/GoToHelper.java | 2 +- .../bin/format/dwarf4/next/NamespacePath.java | 6 ++--- .../app/util/demangler/DemangledObject.java | 2 +- .../app/util/demangler/DemangledType.java | 2 +- .../program/database/ProgramBuilder.java | 2 +- .../program/model/listing/CodeUnitFormat.java | 4 ++-- .../plugin/core/label/AddEditDialoglTest.java | 10 ++++---- .../symboltree/SymbolTreePlugin1Test.java | 4 ++-- .../cmd/label/CreateNamespacesCmdTest.java | 2 +- .../data/rtti/CreateRtti1BackgroundCmd.java | 2 +- .../data/rtti/CreateRtti2BackgroundCmd.java | 2 +- .../data/rtti/CreateRtti3BackgroundCmd.java | 2 +- .../data/rtti/CreateRtti4BackgroundCmd.java | 2 +- .../data/rtti/CreateVfTableBackgroundCmd.java | 6 ++--- .../app/util/bin/format/pdb/ApplySymbols.java | 2 +- .../app/util/bin/format/pdb/PdbParser.java | 8 +++---- .../java/ghidra/app/util/NamespaceUtils.java | 8 +++---- .../main/java/ghidra/app/util/SymbolPath.java | 2 +- .../ghidra/app/util/SymbolPathParser.java | 2 +- .../database/data/DataTypeUtilities.java | 2 +- .../database/external/ExternalLocationDB.java | 2 +- .../program/database/symbol/SymbolDB.java | 2 +- .../program/model/data/PointerDataType.java | 2 +- .../program/model/symbol/Namespace.java | 23 +++++++++++++++---- 25 files changed, 58 insertions(+), 45 deletions(-) diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/cmd/label/CreateNamespacesCmd.java b/Ghidra/Features/Base/src/main/java/ghidra/app/cmd/label/CreateNamespacesCmd.java index 73e973f703..8aa1a8a83e 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/cmd/label/CreateNamespacesCmd.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/cmd/label/CreateNamespacesCmd.java @@ -31,7 +31,7 @@ import ghidra.util.exception.InvalidInputException; * * Example strings: * *

diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/gotoquery/GoToHelper.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/gotoquery/GoToHelper.java index 7a0d13ab4d..eafa0d4e37 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/gotoquery/GoToHelper.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/gotoquery/GoToHelper.java @@ -394,7 +394,7 @@ public class GoToHelper { StringBuilder buf = new StringBuilder(); while (!nameStack.isEmpty()) { buf.append(nameStack.pop()); - buf.append(Namespace.NAMESPACE_DELIMITER); + buf.append(Namespace.DELIMITER); } buf.append(externalLoc.getLabel()); return buf.toString(); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/dwarf4/next/NamespacePath.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/dwarf4/next/NamespacePath.java index 624c42856c..614b790db3 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/dwarf4/next/NamespacePath.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/dwarf4/next/NamespacePath.java @@ -192,7 +192,7 @@ public class NamespacePath implements Comparable { public String asNamespaceString() { StringBuilder sb = new StringBuilder(); doInOrderTraversal( - nsp -> sb.append(sb.length() != 0 ? Namespace.NAMESPACE_DELIMITER : "").append( + nsp -> sb.append(sb.length() != 0 ? Namespace.DELIMITER : "").append( nsp.isRoot() ? "ROOT" : nsp.name)); return sb.toString(); } @@ -207,7 +207,7 @@ public class NamespacePath implements Comparable { doInOrderTraversal(nsp -> { if (!nsp.isRoot()) { - sb.append(sb.length() != 0 ? Namespace.NAMESPACE_DELIMITER : "").append(nsp.name); + sb.append(sb.length() != 0 ? Namespace.DELIMITER : "").append(nsp.name); } }); @@ -219,7 +219,7 @@ public class NamespacePath implements Comparable { public String toString() { StringBuilder sb = new StringBuilder(); doInOrderTraversal( - nsp -> sb.append(sb.length() != 0 ? Namespace.NAMESPACE_DELIMITER : "").append( + nsp -> sb.append(sb.length() != 0 ? Namespace.DELIMITER : "").append( nsp.isRoot() ? "ROOT" : nsp.name).append( "(" + (nsp.getType() != null ? nsp.getType() : "unknown type") + ")")); return sb.toString(); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/demangler/DemangledObject.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/demangler/DemangledObject.java index aae834ea12..c0a2e8ca89 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/demangler/DemangledObject.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/demangler/DemangledObject.java @@ -39,7 +39,7 @@ public abstract class DemangledObject { protected static final String SPACE = " "; protected static final Pattern SPACE_PATTERN = Pattern.compile(SPACE); - protected static final String NAMESPACE_SEPARATOR = Namespace.NAMESPACE_DELIMITER; + protected static final String NAMESPACE_SEPARATOR = Namespace.DELIMITER; protected static final String EMPTY_STRING = ""; protected String originalMangled; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/demangler/DemangledType.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/demangler/DemangledType.java index 389eb05262..4f627fbd4d 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/demangler/DemangledType.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/demangler/DemangledType.java @@ -193,7 +193,7 @@ public class DemangledType { return ""; } - buffer.append(Namespace.NAMESPACE_DELIMITER); + buffer.append(Namespace.DELIMITER); return buffer.toString(); } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/program/database/ProgramBuilder.java b/Ghidra/Features/Base/src/main/java/ghidra/program/database/ProgramBuilder.java index fb10422fd0..9fb3be47bd 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/program/database/ProgramBuilder.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/program/database/ProgramBuilder.java @@ -1057,7 +1057,7 @@ public class ProgramBuilder { ExternalManager extMgr = program.getExternalManager(); Namespace namespace = extMgr.addExternalLibraryName(libraryName, sourceType); - if (externalLabel != null && externalLabel.indexOf(Namespace.NAMESPACE_DELIMITER) > 0) { + if (externalLabel != null && externalLabel.indexOf(Namespace.DELIMITER) > 0) { // External manager API does not yet support creation of namespaces within // library so we handle that here SymbolPath symPath = new SymbolPath(externalLabel); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/program/model/listing/CodeUnitFormat.java b/Ghidra/Features/Base/src/main/java/ghidra/program/model/listing/CodeUnitFormat.java index a091bb3d66..1d23a6e51d 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/program/model/listing/CodeUnitFormat.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/program/model/listing/CodeUnitFormat.java @@ -1293,8 +1293,8 @@ public class CodeUnitFormat { namespaceName = parentNamespace.getName(true); } } - if (namespaceName.length() != 0 && !namespaceName.endsWith(Namespace.NAMESPACE_DELIMITER)) { - namespaceName += Namespace.NAMESPACE_DELIMITER; + if (namespaceName.length() != 0 && !namespaceName.endsWith(Namespace.DELIMITER)) { + namespaceName += Namespace.DELIMITER; } return namespaceName + name; } diff --git a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/label/AddEditDialoglTest.java b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/label/AddEditDialoglTest.java index 315788e6f8..5a097d98db 100644 --- a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/label/AddEditDialoglTest.java +++ b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/label/AddEditDialoglTest.java @@ -615,7 +615,7 @@ public class AddEditDialoglTest extends AbstractGhidraHeadedIntegrationTest { Address inBodyAddress = entry.getAddress().add(1); addLabel(inBodyAddress); String newName = "label_1"; - setText("entry" + Namespace.NAMESPACE_DELIMITER + newName); + setText("entry" + Namespace.DELIMITER + newName); pressOk(); assertFalse("Encountered a problem adding a label to the Global namespace", dialog.isVisible()); @@ -639,7 +639,7 @@ public class AddEditDialoglTest extends AbstractGhidraHeadedIntegrationTest { Address inBodyAddress = entry.getAddress().add(1); addLabel(inBodyAddress); String newName = "label_1"; - setText(namespaceName + Namespace.NAMESPACE_DELIMITER + newName); + setText(namespaceName + Namespace.DELIMITER + newName); pressOk(); assertFalse("Encountered a problem adding a label to the Global namespace", dialog.isVisible()); @@ -659,7 +659,7 @@ public class AddEditDialoglTest extends AbstractGhidraHeadedIntegrationTest { Address inBodyAddress = entry.getAddress().add(1); addLabel(inBodyAddress); String newName = "label_1"; - setText(namespaceName + Namespace.NAMESPACE_DELIMITER + newName); + setText(namespaceName + Namespace.DELIMITER + newName); pressOk(); assertFalse("Encountered a problem adding a label to the Global namespace", dialog.isVisible()); @@ -680,7 +680,7 @@ public class AddEditDialoglTest extends AbstractGhidraHeadedIntegrationTest { Address inBodyAddress = otherEntryAddress.add(1); addLabel(inBodyAddress); String newName = "label_1"; - setText("entry" + Namespace.NAMESPACE_DELIMITER + newName); + setText("entry" + Namespace.DELIMITER + newName); pressOk(); assertFalse("Encountered a problem adding a label to the Global namespace", dialog.isVisible()); @@ -707,7 +707,7 @@ public class AddEditDialoglTest extends AbstractGhidraHeadedIntegrationTest { editLabel(function); String nsName = functionName; - setText(nsName + Namespace.NAMESPACE_DELIMITER + functionName); + setText(nsName + Namespace.DELIMITER + functionName); pressOk(); assertFalse("Rename unsuccesful", dialog.isShowing()); diff --git a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/symboltree/SymbolTreePlugin1Test.java b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/symboltree/SymbolTreePlugin1Test.java index c267d9e113..5f7f26d3bc 100644 --- a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/symboltree/SymbolTreePlugin1Test.java +++ b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/symboltree/SymbolTreePlugin1Test.java @@ -651,7 +651,7 @@ public class SymbolTreePlugin1Test extends AbstractGhidraHeadedIntegrationTest { String newNamespace = "bob"; String prefix = "MY"; String newNameWithoutNamespace = prefix + s.getName(); - String newName = newNamespace + Namespace.NAMESPACE_DELIMITER + newNameWithoutNamespace; + String newName = newNamespace + Namespace.DELIMITER + newNameWithoutNamespace; util.rename(advapi32Node, newName); util.waitForTree(); assertEquals(newNameWithoutNamespace, s.getName()); @@ -681,7 +681,7 @@ public class SymbolTreePlugin1Test extends AbstractGhidraHeadedIntegrationTest { GTreeNode nsNode = newNsNode; String newNamespace = "OuterNamespace"; String newName = "MyNamespace"; - String newFullName = newNamespace + Namespace.NAMESPACE_DELIMITER + newName; + String newFullName = newNamespace + Namespace.DELIMITER + newName; setEditorText(path, nsNode, newFullName); namespacesNode = rootNode.getChild("Namespaces"); diff --git a/Ghidra/Features/Base/src/test/java/ghidra/app/cmd/label/CreateNamespacesCmdTest.java b/Ghidra/Features/Base/src/test/java/ghidra/app/cmd/label/CreateNamespacesCmdTest.java index 8791f88077..c6d1485b0e 100644 --- a/Ghidra/Features/Base/src/test/java/ghidra/app/cmd/label/CreateNamespacesCmdTest.java +++ b/Ghidra/Features/Base/src/test/java/ghidra/app/cmd/label/CreateNamespacesCmdTest.java @@ -308,7 +308,7 @@ public class CreateNamespacesCmdTest extends AbstractGenericTest { for (int i = 0; i < namespaceNames.length; i++) { buffer.append(namespaceNames[i]); if (i + 1 < namespaceNames.length) { - buffer.append(Namespace.NAMESPACE_DELIMITER); + buffer.append(Namespace.DELIMITER); } } diff --git a/Ghidra/Features/MicrosoftCodeAnalyzer/src/main/java/ghidra/app/cmd/data/rtti/CreateRtti1BackgroundCmd.java b/Ghidra/Features/MicrosoftCodeAnalyzer/src/main/java/ghidra/app/cmd/data/rtti/CreateRtti1BackgroundCmd.java index 06acd97d3e..2a993b5f4b 100644 --- a/Ghidra/Features/MicrosoftCodeAnalyzer/src/main/java/ghidra/app/cmd/data/rtti/CreateRtti1BackgroundCmd.java +++ b/Ghidra/Features/MicrosoftCodeAnalyzer/src/main/java/ghidra/app/cmd/data/rtti/CreateRtti1BackgroundCmd.java @@ -107,7 +107,7 @@ public class CreateRtti1BackgroundCmd extends AbstractCreateDataBackgroundCmd 1) { String[] categoryNames = new String[names.length - 1]; diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/NamespaceUtils.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/NamespaceUtils.java index c0695d2671..a03b6323d4 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/NamespaceUtils.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/NamespaceUtils.java @@ -29,7 +29,7 @@ import ghidra.util.exception.*; * * Example string format: *

* @@ -69,7 +69,7 @@ public class NamespaceUtils { String str = new String(); while (namespace != null && !(namespace instanceof GlobalNamespace) && !(namespace instanceof Library)) { - str = namespace.getName() + Namespace.NAMESPACE_DELIMITER + str; + str = namespace.getName() + Namespace.DELIMITER + str; namespace = namespace.getParentNamespace(); } return str; @@ -90,7 +90,7 @@ public class NamespaceUtils { str = getNamespacePathWithoutLibrary(namespace); } else if (namespace != null && !(namespace instanceof GlobalNamespace)) { - str = namespace.getName(true) + Namespace.NAMESPACE_DELIMITER; + str = namespace.getName(true) + Namespace.DELIMITER; } str += symbolName; return str; @@ -107,7 +107,7 @@ public class NamespaceUtils { */ @Deprecated public static List splitNamespacePath(String path) { - return Arrays.asList(path.trim().split(Namespace.NAMESPACE_DELIMITER)); + return Arrays.asList(path.trim().split(Namespace.DELIMITER)); } /** diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/SymbolPath.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/SymbolPath.java index ca71cf0738..4cb840c043 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/SymbolPath.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/SymbolPath.java @@ -172,7 +172,7 @@ public class SymbolPath implements Comparable { */ public String getPath() { if (parentPath != null) { - return parentPath.getPath() + Namespace.NAMESPACE_DELIMITER + symbolName; + return parentPath.getPath() + Namespace.DELIMITER + symbolName; } return symbolName; } diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/SymbolPathParser.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/SymbolPathParser.java index 9e5a310af5..21241a53a7 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/SymbolPathParser.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/SymbolPathParser.java @@ -45,7 +45,7 @@ public class SymbolPathParser { throw new IllegalArgumentException( "Symbol list must contain at least one symbol name!"); } - if (name.indexOf(Namespace.NAMESPACE_DELIMITER) == -1) { + if (name.indexOf(Namespace.DELIMITER) == -1) { List list = new ArrayList<>(); list.add(name); return list; diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeUtilities.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeUtilities.java index 3cb8015117..9a23ac0c3a 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeUtilities.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeUtilities.java @@ -383,7 +383,7 @@ public class DataTypeUtilities { public static DataType findNamespaceQualifiedDataType(DataTypeManager dataTypeManager, String dtNameWithNamespace, Class classConstraint) { - String[] splitName = dtNameWithNamespace.split(Namespace.NAMESPACE_DELIMITER); + String[] splitName = dtNameWithNamespace.split(Namespace.DELIMITER); String dtName = splitName[splitName.length - 1]; return findDataType(dataTypeManager, dtName, classConstraint, diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/external/ExternalLocationDB.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/external/ExternalLocationDB.java index 4fc62a1b8a..64d5574bed 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/external/ExternalLocationDB.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/external/ExternalLocationDB.java @@ -193,7 +193,7 @@ public class ExternalLocationDB implements ExternalLocation { if (label == null) { setName(getLibrary(), null, SourceType.DEFAULT); } - else if (label.indexOf(Namespace.NAMESPACE_DELIMITER) < 0) { + else if (label.indexOf(Namespace.DELIMITER) < 0) { // if label does not include namespace keep current namespace setName(symbol.getParentNamespace(), label, source); } diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDB.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDB.java index 73bfbb8689..02241d6e26 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDB.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDB.java @@ -213,7 +213,7 @@ public abstract class SymbolDB extends DatabaseObject implements Symbol { Namespace ns = getParentNamespace(); if (!(ns instanceof GlobalNamespace)) { String nsPath = ns.getName(true); - symName = nsPath + Namespace.NAMESPACE_DELIMITER + symName; + symName = nsPath + Namespace.DELIMITER + symName; } } return symName; diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/PointerDataType.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/PointerDataType.java index 1350d46a04..680be36ce3 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/PointerDataType.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/PointerDataType.java @@ -193,7 +193,7 @@ public class PointerDataType extends BuiltIn implements Pointer { String symName = symbol.getName(); symName = SymbolUtilities.getCleanSymbolName(symName, ref.getToAddress()); - symName = symName.replace(Namespace.NAMESPACE_DELIMITER, "_"); + symName = symName.replace(Namespace.DELIMITER, "_"); return POINTER_LABEL_PREFIX + "_" + symName; } diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/symbol/Namespace.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/symbol/Namespace.java index 6dc7d53277..b59b4c3d74 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/symbol/Namespace.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/symbol/Namespace.java @@ -21,39 +21,51 @@ import ghidra.util.exception.DuplicateNameException; import ghidra.util.exception.InvalidInputException; /** - * The Namespace interface. + * The Namespace interface */ - public interface Namespace { static final long GLOBAL_NAMESPACE_ID = 0; /** * The delimiter that is used to separate namespace nodes in a namespace * string. For example, "Global::child1::symbolName" */ + public static final String DELIMITER = "::"; + + /** + * Replaced by {@link #DELIMITER} + * @deprecated use {@link #DELIMITER} + */ + @Deprecated public static final String NAMESPACE_DELIMITER = "::"; /** * Get the symbol for this namespace; Note: The global namespace will return null + * @return the symbol for this namespace; Note: The global namespace will return null */ public Symbol getSymbol(); /** + * Returns true if this namespace is external (i.e., associated with a Library) * @return true if this namespace is external (i.e., associated with a Library) */ public boolean isExternal(); /** - * Get the name of the symbol for this scope. + * Get the name of the symbol for this scope + * @return the name of the symbol for this scope */ public String getName(); /** - * Returns the fully qualified name. + * Returns the fully qualified name + * @param includeNamespacePath true to include the namespace in the returned name + * @return the fully qualified name */ public String getName(boolean includeNamespacePath); /** - * Return the namespace id; + * Return the namespace id + * @return the namespace id */ public long getID(); @@ -66,6 +78,7 @@ public interface Namespace { /** * Get the address set for this namespace. Note: The body of a namespace (currently * only used by the function namespace) is restricted it Integer.MAX_VALUE. + * @return the address set for this namespace */ public AddressSetView getBody();