diff --git a/sfge/src/main/java/com/salesforce/Main.java b/sfge/src/main/java/com/salesforce/Main.java index a4ea7e1f7..aabe40ea9 100644 --- a/sfge/src/main/java/com/salesforce/Main.java +++ b/sfge/src/main/java/com/salesforce/Main.java @@ -89,7 +89,7 @@ private int catalog() { LOGGER.info("Invoked CATALOG flow"); List rules; try { - rules = RuleUtil.getAllRules(); + rules = RuleUtil.getEnabledRules(); } catch (SfgeException | SfgeRuntimeException ex) { System.err.println(ex.getMessage()); return INTERNAL_ERROR; diff --git a/sfge/src/main/java/com/salesforce/cli/CliArgParser.java b/sfge/src/main/java/com/salesforce/cli/CliArgParser.java index e8e7eabd3..973bea8b3 100644 --- a/sfge/src/main/java/com/salesforce/cli/CliArgParser.java +++ b/sfge/src/main/java/com/salesforce/cli/CliArgParser.java @@ -126,9 +126,13 @@ private List readFile(String fileName) throws IOException { private void identifyRules(List rulesToRun) { try { - for (String ruleName : rulesToRun) { - AbstractRule rule = RuleUtil.getRule(ruleName); - selectedRules.add(rule); + if (rulesToRun.isEmpty()) { + selectedRules.addAll(RuleUtil.getEnabledRules()); + } else { + for (String ruleName : rulesToRun) { + AbstractRule rule = RuleUtil.getRule(ruleName); + selectedRules.add(rule); + } } } catch (RuleUtil.RuleNotFoundException ex) { throw new InvocationException(ex.getMessage(), ex); diff --git a/sfge/src/main/java/com/salesforce/rules/AbstractRule.java b/sfge/src/main/java/com/salesforce/rules/AbstractRule.java index 90dd7406d..d7a545914 100644 --- a/sfge/src/main/java/com/salesforce/rules/AbstractRule.java +++ b/sfge/src/main/java/com/salesforce/rules/AbstractRule.java @@ -48,6 +48,11 @@ public Descriptor getDescriptor() { // probably un-abstract this method. protected abstract String getCategory(); + protected boolean isEnabled() { + // By default, every rule is disabled, unless specifically enabled + return false; + } + /** * Unless the rule has a predetermined URL, we'll return a link to information about the engine. */ diff --git a/sfge/src/main/java/com/salesforce/rules/ApexFlsViolationRule.java b/sfge/src/main/java/com/salesforce/rules/ApexFlsViolationRule.java index 87f28b8fb..21ecc1553 100644 --- a/sfge/src/main/java/com/salesforce/rules/ApexFlsViolationRule.java +++ b/sfge/src/main/java/com/salesforce/rules/ApexFlsViolationRule.java @@ -48,6 +48,11 @@ protected String getUrl() { return URL; } + @Override + protected boolean isEnabled() { + return true; + } + @Override protected List _run(GraphTraversalSource g, ApexPath path, BaseSFVertex vertex) { final HashSet flsViolationInfos = new HashSet<>(); diff --git a/sfge/src/main/java/com/salesforce/rules/RuleUtil.java b/sfge/src/main/java/com/salesforce/rules/RuleUtil.java index 1aa76d56f..358b70f4e 100644 --- a/sfge/src/main/java/com/salesforce/rules/RuleUtil.java +++ b/sfge/src/main/java/com/salesforce/rules/RuleUtil.java @@ -83,7 +83,12 @@ public static List getPathEntryPoints( return new ArrayList<>(methods); } - public static List getAllRules() throws RuleNotFoundException { + public static List getEnabledRules() throws RuleNotFoundException { + final List allRules = getAllRules(); + return allRules.stream().filter(rule -> rule.isEnabled()).collect(Collectors.toList()); + } + + static List getAllRules() throws RuleNotFoundException { // Get a set of every class in the Rules package that extends AbstractRule. Reflections reflections = new Reflections(PackageConstants.RULES_PACKAGE); Set> ruleTypes = @@ -94,7 +99,8 @@ public static List getAllRules() throws RuleNotFoundException { for (Class ruleType : ruleTypes) { // Skip abstract classes. if (!Modifier.isAbstract(ruleType.getModifiers())) { - rules.add(getRuleInner(ruleType.getName())); + final AbstractRule rule = getRuleInner(ruleType.getName()); + rules.add(rule); } } return rules; diff --git a/sfge/src/test/java/com/salesforce/rules/RuleUtilTest.java b/sfge/src/test/java/com/salesforce/rules/RuleUtilTest.java index 16a638670..59033c7ce 100644 --- a/sfge/src/test/java/com/salesforce/rules/RuleUtilTest.java +++ b/sfge/src/test/java/com/salesforce/rules/RuleUtilTest.java @@ -321,7 +321,9 @@ public void getPathEntryPoints_includeMethodAndFileLevelTargets() { @Test public void getAllRules_noExceptionThrown() { try { - List allRules = RuleUtil.getAllRules(); + List allRules = RuleUtil.getEnabledRules(); + MatcherAssert.assertThat(allRules, hasSize(1)); + assertTrue(allRules.contains(ApexFlsViolationRule.getInstance())); } catch (Exception ex) { fail("Unexpected " + ex.getClass().getSimpleName() + ": " + ex.getMessage()); } diff --git a/src/lib/sfge/SfgeEngine.ts b/src/lib/sfge/SfgeEngine.ts index 09de49885..ba7e1b7a7 100644 --- a/src/lib/sfge/SfgeEngine.ts +++ b/src/lib/sfge/SfgeEngine.ts @@ -83,10 +83,6 @@ export class SfgeEngine extends AbstractRuleEngine { const categoryNames: Set = new Set(); partialRules.forEach(({name, description, category}) => { - // TODO: This should be accomplished by actually disabling the rules within SFGE, instead of this hacky fix. - if (name !== 'ApexFlsViolationRule') { - return; - } completeRules.push({ engine: ENGINE.SFGE, sourcepackage: "sfge",