From 352fe6fd8c4d69d40d7f0e2e40de940063d0b685 Mon Sep 17 00:00:00 2001 From: ghidra1 Date: Mon, 25 Apr 2022 10:11:40 -0400 Subject: [PATCH] GP-1956 update metadata on set language --- .../ghidra_scripts/ReloadSleighLangauge.java | 7 +++--- .../ghidra/program/database/ProgramDB.java | 23 ++++++++++++------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/Ghidra/Features/Base/ghidra_scripts/ReloadSleighLangauge.java b/Ghidra/Features/Base/ghidra_scripts/ReloadSleighLangauge.java index a05b10e5b7..32f951ca08 100644 --- a/Ghidra/Features/Base/ghidra_scripts/ReloadSleighLangauge.java +++ b/Ghidra/Features/Base/ghidra_scripts/ReloadSleighLangauge.java @@ -15,12 +15,12 @@ */ // Reloads the language specification associated with a program at runtime. // @category sleigh +import java.io.IOException; + import ghidra.app.script.GhidraScript; import ghidra.program.model.lang.Language; import ghidra.util.Msg; -import java.io.IOException; - public class ReloadSleighLangauge extends GhidraScript { @Override @@ -37,7 +37,6 @@ public class ReloadSleighLangauge extends GhidraScript { e.getMessage()); return; } - currentProgram.setLanguage(language, currentProgram.getCompilerSpec().getCompilerSpecID(), - true, monitor); + currentProgram.setLanguage(language, null, true, monitor); } } diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramDB.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramDB.java index cca3589953..a8f1e5b2cf 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramDB.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramDB.java @@ -1903,15 +1903,22 @@ public class ProgramDB extends DomainObjectAdapterDB implements Program, ChangeM throws IllegalStateException, IncompatibleLanguageException, LockException { if (newLanguage == language) { setLanguage((LanguageTranslator) null, newCompilerSpecID, forceRedisassembly, monitor); - return; } - LanguageTranslator languageTranslator = - LanguageTranslatorFactory.getLanguageTranslatorFactory() - .getLanguageTranslator(language, newLanguage); - if (languageTranslator == null) { - throw new IncompatibleLanguageException("Language translation not supported"); + else { + LanguageTranslator languageTranslator = + LanguageTranslatorFactory.getLanguageTranslatorFactory() + .getLanguageTranslator(language, newLanguage); + if (languageTranslator == null) { + throw new IncompatibleLanguageException("Language translation not supported"); + } + setLanguage(languageTranslator, newCompilerSpecID, forceRedisassembly, monitor); + } + try { + updateMetadata(); + } + catch (IOException e) { + dbError(e); } - setLanguage(languageTranslator, newCompilerSpecID, forceRedisassembly, monitor); } /** @@ -1922,7 +1929,7 @@ public class ProgramDB extends DomainObjectAdapterDB implements Program, ChangeM * @param monitor task monitor * @throws LockException if exclusive access is missing */ - public void setLanguage(LanguageTranslator translator, CompilerSpecID newCompilerSpecID, + private void setLanguage(LanguageTranslator translator, CompilerSpecID newCompilerSpecID, boolean forceRedisassembly, TaskMonitor monitor) throws LockException { checkExclusiveAccess();