From 0e81b55a56fd506869bca5a41ccabef050b2491b Mon Sep 17 00:00:00 2001 From: Ryan Date: Mon, 16 Jan 2017 19:53:46 -0500 Subject: [PATCH] #103 --- src/main/java/com/cflint/CFLint.java | 37 ++++++++++--------- .../cflint/config/CFLintChainedConfig.java | 13 +++++-- 2 files changed, 29 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/cflint/CFLint.java b/src/main/java/com/cflint/CFLint.java index fc5d7818d..3b5d62e3e 100644 --- a/src/main/java/com/cflint/CFLint.java +++ b/src/main/java/com/cflint/CFLint.java @@ -26,6 +26,7 @@ import org.antlr.v4.runtime.dfa.DFA; import com.cflint.BugInfo.BugInfoBuilder; +import com.cflint.config.CFLintChainedConfig; import com.cflint.config.CFLintConfig; import com.cflint.config.CFLintConfiguration; import com.cflint.config.CFLintPluginInfo; @@ -163,23 +164,25 @@ public void scan(final File folderOrFile) { return; } if (folderOrFile.isDirectory()) { - boolean newConfigFlag = false; - for (final File file : folderOrFile.listFiles()) { - if(file.getName().equalsIgnoreCase(".cflintrc.xml")){ - try { - CFLintConfiguration newConfig = com.cflint.config.ConfigUtils.unmarshal(new FileInputStream(file), CFLintConfig.class); - System.out.println("read config " + file); - newConfigFlag =true; - } catch (Exception e) { - System.err.println("Could not read config file " + file); - } + final CFLintConfiguration saveConfig = configuration; + try{ + for (final File file : folderOrFile.listFiles()) { + if(file.getName().equalsIgnoreCase(".cflintrc.xml")){ + try { + CFLintConfiguration newConfig = com.cflint.config.ConfigUtils.unmarshal(new FileInputStream(file), CFLintConfig.class); + System.out.println("read config " + file); + configuration = new CFLintChainedConfig(newConfig, configuration); + } catch (Exception e) { + System.err.println("Could not read config file " + file); + } + } + } + for (final File file : folderOrFile.listFiles()) { + scan(file); } } - for (final File file : folderOrFile.listFiles()) { - scan(file); - } - if(newConfigFlag){ - //TODO unwrap + finally{ + configuration = saveConfig; } } else if (!folderOrFile.isHidden() && FileUtil.checkExtension(folderOrFile, allowedExtensions)) { final String src = FileUtil.loadFile(folderOrFile); @@ -819,8 +822,8 @@ protected void reportRule(final Element elem, final Object expression, final Con bldr.setSeverity(msgInfo.getSeverity()); bldr.setMessage(msgInfo.getMessageText()); } else { - String errMessage = "Message code: " + msgcode + " is not configured correctly."; - fireCFLintException(new NullPointerException(errMessage), PLUGIN_ERROR, "", null, null, null, null); + String errMessage = "Message code: " + msgcode + " is not configured correctly."; + fireCFLintException(new NullPointerException(errMessage), PLUGIN_ERROR, "", null, null, null, null); bldr.setSeverity("WARNING"); bldr.setMessage(msgcode); } diff --git a/src/main/java/com/cflint/config/CFLintChainedConfig.java b/src/main/java/com/cflint/config/CFLintChainedConfig.java index 3e8cb906d..8d4324a0a 100644 --- a/src/main/java/com/cflint/config/CFLintChainedConfig.java +++ b/src/main/java/com/cflint/config/CFLintChainedConfig.java @@ -10,14 +10,14 @@ public class CFLintChainedConfig implements CFLintConfiguration{ final CFLintConfig config; - final CFLintChainedConfig parent; + final CFLintConfiguration parent; public CFLintChainedConfig(CFLintConfiguration config) { super(); this.config = (CFLintConfig)config; parent = null; } - public CFLintChainedConfig(CFLintConfiguration config,CFLintChainedConfig parent) { + public CFLintChainedConfig(CFLintConfiguration config,CFLintConfiguration parent) { super(); this.config = (CFLintConfig)config; this.parent = parent; @@ -41,7 +41,7 @@ public boolean excludes(PluginMessage pluginMessage) { (config.isInheritParent() && parent!=null && parent.excludes(pluginMessage)); } - public CFLintChainedConfig getParent() { + public CFLintConfiguration getParent() { return parent; } @@ -88,7 +88,12 @@ public Collection getAllRules() { if(parent==null || !config.isInheritPlugins()){ return config.getRules(); } - final HashSet retval = new HashSet(parent.getAllRules()); + final HashSet retval = new HashSet(); + if(parent instanceof CFLintChainedConfig){ + retval.addAll(((CFLintChainedConfig) parent).getAllRules()); + }else{ + retval.addAll(parent.getRules()); + } //Override any rules from the parent configuration retval.addAll(config.getRules()); return retval;