Merge remote-tracking branch 'origin/patch'

Conflicts:
	Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/listing/DebuggerListingProvider.java
This commit is contained in:
ghidra1 2021-10-01 11:38:11 -04:00
commit ace4d29996
19 changed files with 366 additions and 66 deletions

View file

@ -2015,29 +2015,40 @@ public class SymbolManager implements SymbolTable, ManagerDB {
private class ClassNamespaceIterator implements Iterator<GhidraClass> {
private Iterator<Symbol> symbols;
private QueryRecordIterator iter;
ClassNamespaceIterator() {
ArrayList<Symbol> list = new ArrayList<>();
SymbolIterator iter = getSymbols(namespaceMgr.getGlobalNamespace());
while (iter.hasNext()) {
Symbol s = iter.next();
if (s.getSymbolType() == SymbolType.CLASS) {
list.add(s);
}
try {
byte classTypeId = SymbolType.CLASS.getID();
iter = new QueryRecordIterator(adapter.getSymbols(),
rec -> classTypeId == rec.getByteValue(SymbolDatabaseAdapter.SYMBOL_TYPE_COL));
}
catch (IOException e) {
dbError(e);
}
symbols = list.iterator();
}
@Override
public boolean hasNext() {
return symbols.hasNext();
try {
return iter.hasNext();
}
catch (IOException e) {
dbError(e);
}
return false;
}
@Override
public GhidraClass next() {
if (symbols.hasNext()) {
return (GhidraClass) symbols.next().getObject();
try {
if (iter.hasNext()) {
Symbol s = getSymbol(iter.next());
return (GhidraClass) s.getObject();
}
}
catch (IOException e) {
dbError(e);
}
return null;
}

View file

@ -560,7 +560,8 @@ public interface SymbolTable {
public Namespace getNamespace(Address addr);
/**
* Returns all Class Namespaces defined within the program.
* Returns all Class Namespaces defined within the program in an
* arbitrary ordering.
* @return iterator of {@link GhidraClass}
*/
public Iterator<GhidraClass> getClassNamespaces();