Revert analyzer default enablement change

This commit is contained in:
ghidra1
2020-09-26 08:53:30 -04:00
parent edd85aac97
commit 0cdc722921
8 changed files with 16 additions and 86 deletions

View File

@@ -15,18 +15,13 @@
*/ */
package ghidra.app.plugin.core.analysis; package ghidra.app.plugin.core.analysis;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import ghidra.app.services.Analyzer; import ghidra.app.services.Analyzer;
import ghidra.app.util.importer.MessageLog; import ghidra.app.util.importer.MessageLog;
import ghidra.framework.options.Options; import ghidra.framework.options.Options;
import ghidra.framework.preferences.Preferences;
import ghidra.program.model.address.*; import ghidra.program.model.address.*;
import ghidra.program.model.lang.Language; import ghidra.program.model.lang.Language;
import ghidra.program.model.listing.Program; import ghidra.program.model.listing.Program;
import ghidra.util.Msg; import ghidra.util.Msg;
import ghidra.util.SystemUtilities;
import ghidra.util.exception.CancelledException; import ghidra.util.exception.CancelledException;
import ghidra.util.task.TaskMonitor; import ghidra.util.task.TaskMonitor;
@@ -36,6 +31,7 @@ public class AnalysisScheduler {
private AddressSet removeSet; private AddressSet removeSet;
private AddressSet addSet; private AddressSet addSet;
private boolean defaultEnablement;
private boolean enabled; private boolean enabled;
private boolean scheduled; private boolean scheduled;
@@ -47,42 +43,23 @@ public class AnalysisScheduler {
throw new IllegalArgumentException("Analyzer name may not contain a period: " + throw new IllegalArgumentException("Analyzer name may not contain a period: " +
analyzer.getName()); analyzer.getName());
} }
boolean defaultEnable = analyzer.getDefaultEnablement(analysisMgr.getProgram()); defaultEnablement = getDefaultEnablement();
enabled = getEnableOverride(defaultEnable); enabled = defaultEnablement;
if (rememberEnablementChangeAsUserPreference()) {
String val =
Preferences.getProperty(getAnalyzerPreferenceName(), Boolean.toString(enabled));
enabled = Boolean.valueOf(val);
}
else if (defaultEnable != enabled) {
Msg.warn(this,
"Analyzer \'" + analyzer.getName() + "\' for " +
analysisMgr.getProgram().getName() + " " + (enabled ? "enabled" : "disabled") +
" by PSPEC file override");
}
removeSet = new AddressSet(); removeSet = new AddressSet();
addSet = new AddressSet(); addSet = new AddressSet();
} }
private boolean rememberEnablementChangeAsUserPreference() { private boolean getDefaultEnablement() {
if (!analyzer.rememberEnablementChangeAsUserPreference()) { Program program = analysisMgr.getProgram();
return false; boolean defaultEnable = analyzer.getDefaultEnablement(program);
boolean override = getEnableOverride(defaultEnable);
if (defaultEnable != override) {
Msg.warn(AnalysisScheduler.class,
"Analyzer \'" + analyzer.getName() + "\' for " + program.getName() + " " +
(override ? "enabled" : "disabled") + " by PSPEC file override");
defaultEnable = override;
} }
if (SystemUtilities.isInTestingMode() || SystemUtilities.isInHeadlessMode()) { return defaultEnable;
return false;
}
return true;
}
private String getAnalyzerPreferenceName() {
String str = analyzer.getName();
try {
str = URLEncoder.encode(str, "UTF8");
}
catch (UnsupportedEncodingException e) {
// ignore
}
return "Analyzers." + str;
} }
synchronized void schedule() { synchronized void schedule() {
@@ -151,24 +128,14 @@ public class AnalysisScheduler {
} }
public void optionsChanged(Options options) { public void optionsChanged(Options options) {
enabled = options.getBoolean(analyzer.getName(), defaultEnablement);
boolean defaultEnable = analyzer.getDefaultEnablement(analysisMgr.getProgram());
defaultEnable = getEnableOverride(defaultEnable);
boolean state = options.getBoolean(analyzer.getName(), defaultEnable);
if (state != enabled && rememberEnablementChangeAsUserPreference()) {
Preferences.setProperty(getAnalyzerPreferenceName(), Boolean.toString(state));
}
enabled = state;
analyzer.optionsChanged(options.getOptions(analyzer.getName()), analysisMgr.getProgram()); analyzer.optionsChanged(options.getOptions(analyzer.getName()), analysisMgr.getProgram());
} }
public void registerOptions(Options options) { public void registerOptions(Options options) {
Options analyzerOptions = options.getOptions(analyzer.getName()); Options analyzerOptions = options.getOptions(analyzer.getName());
options.registerOption(analyzer.getName(), options.registerOption(analyzer.getName(), defaultEnablement, null,
enabled, null, analyzer.getDescription()); analyzer.getDescription());
analyzer.registerOptions(analyzerOptions, analysisMgr.getProgram()); analyzer.registerOptions(analyzerOptions, analysisMgr.getProgram());
} }

View File

@@ -41,11 +41,6 @@ public class StackVariableAnalyzer extends AbstractAnalyzer {
setSupportsOneTimeAnalysis(); setSupportsOneTimeAnalysis();
} }
@Override
public boolean rememberEnablementChangeAsUserPreference() {
return true;
}
@Override @Override
public boolean added(Program program, AddressSetView set, TaskMonitor monitor, MessageLog log) { public boolean added(Program program, AddressSetView set, TaskMonitor monitor, MessageLog log) {
BackgroundCommand cmd; BackgroundCommand cmd;

View File

@@ -72,11 +72,6 @@ public abstract class AbstractAnalyzer implements Analyzer {
return defaultEnablement; return defaultEnablement;
} }
@Override
public boolean rememberEnablementChangeAsUserPreference() {
return false;
}
@Override @Override
public final boolean supportsOneTimeAnalysis() { public final boolean supportsOneTimeAnalysis() {
return supportsOneTimeAnalysis; return supportsOneTimeAnalysis;

View File

@@ -131,13 +131,4 @@ public interface Analyzer extends ExtensionPoint {
*/ */
public boolean isPrototype(); public boolean isPrototype();
/**
* Returns true if a change to the analyzer enablement should be saved as a user preference
* so that it may be establish the default enablement for analysis in other programs.
* NOTE: This feature is ignored while operating in test mode or headless mode where
* it is expected that explicit enablement/disablement will be utilized.
* @return true if an enablement change should be remembered as the new default
*/
public boolean rememberEnablementChangeAsUserPreference();
} }

View File

@@ -229,8 +229,4 @@ public abstract class FileFormatAnalyzer implements Analyzer {
return program.getMemory().findBytes(start, values, null, true, monitor); return program.getMemory().findBytes(start, values, null, true, monitor);
} }
@Override
public boolean rememberEnablementChangeAsUserPreference() {
return false;
}
} }

View File

@@ -63,11 +63,6 @@ public class PdbAnalyzer extends AbstractAnalyzer {
setSupportsOneTimeAnalysis(); setSupportsOneTimeAnalysis();
} }
@Override
public boolean rememberEnablementChangeAsUserPreference() {
return true;
}
@Override @Override
public boolean added(Program program, AddressSetView set, TaskMonitor monitor, MessageLog log) { public boolean added(Program program, AddressSetView set, TaskMonitor monitor, MessageLog log) {

View File

@@ -233,11 +233,6 @@ public class PdbUniversalAnalyzer extends AbstractAnalyzer {
pdbApplicatorOptions = new PdbApplicatorOptions(); pdbApplicatorOptions = new PdbApplicatorOptions();
} }
@Override
public boolean rememberEnablementChangeAsUserPreference() {
return true;
}
@Override @Override
public boolean added(Program program, AddressSetView set, TaskMonitor monitor, MessageLog log) public boolean added(Program program, AddressSetView set, TaskMonitor monitor, MessageLog log)
throws CancelledException { throws CancelledException {

View File

@@ -222,8 +222,4 @@ public abstract class AbstractJavaAnalyzer implements Analyzer {
return program.getMemory().findBytes(start, values, null, true, monitor); return program.getMemory().findBytes(start, values, null, true, monitor);
} }
@Override
public boolean rememberEnablementChangeAsUserPreference() {
return false;
}
} }