From 1da1c9fef350cf6f3af8bbd86c86a4a2d89f73f7 Mon Sep 17 00:00:00 2001 From: sollyucko Date: Tue, 9 Nov 2021 22:10:54 -0500 Subject: [PATCH] Set Equate: show all matching names in each enum --- .../ghidra/app/util/bean/SetEquateDialog.java | 7 ++----- .../ghidra/program/database/data/EnumDB.java | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bean/SetEquateDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bean/SetEquateDialog.java index 02b1a0e326..8dc1d84ab5 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bean/SetEquateDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bean/SetEquateDialog.java @@ -210,11 +210,8 @@ public class SetEquateDialog extends DialogComponentProvider { .stream() .filter(dt -> dt instanceof Enum) .map(Enum.class::cast) - .filter(enoom -> enoom.getName(scalar.getValue()) != null) - .forEach(enoom -> { - String name = enoom.getName(scalar.getValue()); - entries.add(new EquateRowObject(name, enoom)); - }); + .flatMap(enoom -> Arrays.stream(enoom.getNames(scalar.getValue())).map(name -> new EquateRowObject(name, enoom))) + .forEach(entries::add); //@formatter:on return entries; diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/EnumDB.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/EnumDB.java index e8913e6632..b15b7d63af 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/EnumDB.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/EnumDB.java @@ -162,6 +162,23 @@ class EnumDB extends DataTypeDB implements Enum { } } + @Override + public String[] getNames(long value) { + lock.acquire(); + try { + checkIsValid(); + initializeIfNeeded(); + List list = valueMap.get(value); + if (list == null) { + return new String[0]; + } + return list.toArray(new String[0]); + } + finally { + lock.release(); + } + } + @Override public boolean hasLanguageDependantLength() { return false;