From 9f39a76cd595caf08597b89c9122e2cbb5ff8684 Mon Sep 17 00:00:00 2001 From: Oleg Sukhodolsky Date: Sun, 12 Jun 2005 19:43:06 +0000 Subject: [PATCH] Fix for 1084512 (Parameters of abstract methods hide fields) Added ignoreAbstractMethods property to allow configure HiddenField check to ignore params of abstract methods. Now test inputs (almost all) will be compiled as part of run.test.suite and run.tests targets (this compilation requires jdk1.5 or higher) --- build.xml | 24 +++++++--- .../checks/coding/HiddenFieldCheck.java | 40 +++++++++++++++- .../tools/checkstyle/InputHiddenField.java | 10 ++-- .../tools/checkstyle/InputJavadoc.java | 4 +- .../checkstyle/InputJavadocStyleCheck.java | 2 +- .../tools/checkstyle/InputTypeParamsTags.java | 4 +- .../grammars/InputEmbeddedNullChar.java | Bin 352 -> 351 bytes .../checkstyle/grammars/InputHexFloat.java | 16 +++---- .../checkstyle/grammars/InputVararg.java | 2 +- .../checks/coding/HiddenFieldCheckTest.java | 44 ++++++++++++++++++ src/xdocs/config_coding.xml | 9 ++++ src/xdocs/releasenotes.xml | 11 +++++ 12 files changed, 140 insertions(+), 26 deletions(-) diff --git a/build.xml b/build.xml index d95303166..fa6f0458e 100644 --- a/build.xml +++ b/build.xml @@ -30,6 +30,7 @@ + @@ -179,13 +180,24 @@ - + source="${checkstyle.testinputs.minimum.javaversion}" + target="${checkstyle.testinputs.minimum.javaversion}" + includeAntRuntime="false"> + + + + + + + + + + + + @@ -413,7 +425,7 @@ For users of JDK 1.5 at least version 1.6.2 of Ant is required. diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/coding/HiddenFieldCheck.java b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/coding/HiddenFieldCheck.java index 07a4f1d58..2792ce073 100644 --- a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/coding/HiddenFieldCheck.java +++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/coding/HiddenFieldCheck.java @@ -88,6 +88,9 @@ public class HiddenFieldCheck /** controls whether to check the parameter of a constructor */ private boolean mIgnoreConstructorParameter; + /** controls whether to check the parameter of abstract methods. */ + private boolean mIgnoreAbstractMethods; + /** @see com.puppycrawl.tools.checkstyle.api.Check */ public int[] getDefaultTokens() { @@ -207,7 +210,8 @@ public class HiddenFieldCheck || (!inStatic(aAST) && mCurrentFrame.containsInstanceField(name))) && ((mRegexp == null) || (!getRegexp().matcher(name).find())) && !isIgnoredSetterParam(aAST, name) - && !isIgnoredConstructorParam(aAST)) + && !isIgnoredConstructorParam(aAST) + && !isIgnoredParamOfAbstractMethod(aAST)) { log(nameAST, "hidden.field", name); } @@ -296,6 +300,29 @@ public class HiddenFieldCheck return (constructorAST.getType() == TokenTypes.CTOR_DEF); } + /** + * Decides whether to ignore an AST node that is the parameter of an + * abstract method. + * @param aAST the AST to check. + * @return true if aAST should be ignored because check property + * ignoreAbstactMethods is true and aAST is a parameter of abstract + * methods. + */ + private boolean isIgnoredParamOfAbstractMethod(DetailAST aAST) + { + if (aAST.getType() != TokenTypes.PARAMETER_DEF + || !mIgnoreAbstractMethods) + { + return false; + } + final DetailAST method = aAST.getParent().getParent(); + if (method.getType() != TokenTypes.METHOD_DEF) { + return false; + } + final DetailAST mods = method.findFirstToken(TokenTypes.MODIFIERS); + return (mods != null && mods.branchContains(TokenTypes.ABSTRACT)); + } + /** * Set the ignore format to the specified regular expression. * @param aFormat a String value @@ -333,6 +360,17 @@ public class HiddenFieldCheck mIgnoreConstructorParameter = aIgnoreConstructorParameter; } + /** + * Set whether to ignore parameters of abstract methods. + * @param aIgnoreAbstractMethods decide whether to ignore + * parameters of abstract methods. + */ + public void setIgnoreAbstractMethods( + boolean aIgnoreAbstractMethods) + { + mIgnoreAbstractMethods = aIgnoreAbstractMethods; + } + /** @return the regexp to match against */ public Pattern getRegexp() { diff --git a/src/testinputs/com/puppycrawl/tools/checkstyle/InputHiddenField.java b/src/testinputs/com/puppycrawl/tools/checkstyle/InputHiddenField.java index 76bbd9b74..77610bec7 100644 --- a/src/testinputs/com/puppycrawl/tools/checkstyle/InputHiddenField.java +++ b/src/testinputs/com/puppycrawl/tools/checkstyle/InputHiddenField.java @@ -224,8 +224,8 @@ enum HiddenEnum } } -// perhaps we should ignore this -// abstract class InputHiddenFieldBug1084512 { -// String x; -// public abstract void methodA(String x); -// } +// we should ignore this if user wants (ignoreAbstractMethods is true) +abstract class InputHiddenFieldBug1084512 { + String x; + public abstract void methodA(String x); +} diff --git a/src/testinputs/com/puppycrawl/tools/checkstyle/InputJavadoc.java b/src/testinputs/com/puppycrawl/tools/checkstyle/InputJavadoc.java index 5dddb3886..af42ac65b 100644 --- a/src/testinputs/com/puppycrawl/tools/checkstyle/InputJavadoc.java +++ b/src/testinputs/com/puppycrawl/tools/checkstyle/InputJavadoc.java @@ -109,6 +109,6 @@ enum InputJavadocEnum2 * @author ABC * @version 1.1 */ -@interface InputJavadocInterfaceType +@interface InputJavadocInterfaceType1 { -} \ No newline at end of file +} diff --git a/src/testinputs/com/puppycrawl/tools/checkstyle/InputJavadocStyleCheck.java b/src/testinputs/com/puppycrawl/tools/checkstyle/InputJavadocStyleCheck.java index ad1e1f889..eafae9641 100755 --- a/src/testinputs/com/puppycrawl/tools/checkstyle/InputJavadocStyleCheck.java +++ b/src/testinputs/com/puppycrawl/tools/checkstyle/InputJavadocStyleCheck.java @@ -251,7 +251,7 @@ public class InputJavadocStyleCheck * @param this is NOT an unclosed T tag * @author Foo Bar */ - public class Test + public class TestClass { /** * Retrieves X. diff --git a/src/testinputs/com/puppycrawl/tools/checkstyle/InputTypeParamsTags.java b/src/testinputs/com/puppycrawl/tools/checkstyle/InputTypeParamsTags.java index a9cee91b7..c057ba0b9 100644 --- a/src/testinputs/com/puppycrawl/tools/checkstyle/InputTypeParamsTags.java +++ b/src/testinputs/com/puppycrawl/tools/checkstyle/InputTypeParamsTags.java @@ -8,7 +8,7 @@ package com.puppycrawl.tools.checkstyle; * @author Nobody * @version 1.0 */ -public class InputTypeArgTags +public class InputTypeParamsTags { /** * Some explanation. @@ -37,4 +37,4 @@ public class InputTypeArgTags public void doSomethingElse2(L aAnEl) { } -} \ No newline at end of file +} diff --git a/src/testinputs/com/puppycrawl/tools/checkstyle/grammars/InputEmbeddedNullChar.java b/src/testinputs/com/puppycrawl/tools/checkstyle/grammars/InputEmbeddedNullChar.java index 687b92c15e9b085211b62884ca563890779ddb31..6c318ebc25307455a21298a0a64bb4a6bed01081 100644 GIT binary patch delta 10 RcmaFBbf0O0_eLKPMgSO!1F--A delta 10 Rcmcc5^nhuC_eL*KMgSOu1F!%9 diff --git a/src/testinputs/com/puppycrawl/tools/checkstyle/grammars/InputHexFloat.java b/src/testinputs/com/puppycrawl/tools/checkstyle/grammars/InputHexFloat.java index 4ec38c341..e02ec583c 100644 --- a/src/testinputs/com/puppycrawl/tools/checkstyle/grammars/InputHexFloat.java +++ b/src/testinputs/com/puppycrawl/tools/checkstyle/grammars/InputHexFloat.java @@ -5,12 +5,12 @@ package com.puppycrawl.tools.checkstyle.grammars; */ public class InputHexFloat { - float f1 = 0x.0P10; - float f2 = 0x1.P-1; - float f3 = 0Xab1P0; - float f4 = 0Xab1ap+20; - float f5 = 0Xab1ap+20D; - float f6 = 0Xab1ap+20d; - float f5 = 0Xab1ap+20f; - float f6 = 0Xab1ap+20F; + double f1 = 0x.0P10; + double f2 = 0x1.P-1; + double f3 = 0Xab1P0; + double f4 = 0Xab1ap+20; + double f5 = 0Xab1ap+20D; + double f6 = 0Xab1ap+20d; + double f7 = 0Xab1ap+20f; + double f8 = 0Xab1ap+20F; } diff --git a/src/testinputs/com/puppycrawl/tools/checkstyle/grammars/InputVararg.java b/src/testinputs/com/puppycrawl/tools/checkstyle/grammars/InputVararg.java index e7f1cbf32..6469f07db 100644 --- a/src/testinputs/com/puppycrawl/tools/checkstyle/grammars/InputVararg.java +++ b/src/testinputs/com/puppycrawl/tools/checkstyle/grammars/InputVararg.java @@ -3,7 +3,7 @@ package com.puppycrawl.tools.checkstyle.grammars; /** * Input for vararg test. */ -public class InputGrammar +public class InputVararg { public static void main(String... args) { diff --git a/src/tests/com/puppycrawl/tools/checkstyle/checks/coding/HiddenFieldCheckTest.java b/src/tests/com/puppycrawl/tools/checkstyle/checks/coding/HiddenFieldCheckTest.java index 4e72a927f..969d22736 100644 --- a/src/tests/com/puppycrawl/tools/checkstyle/checks/coding/HiddenFieldCheckTest.java +++ b/src/tests/com/puppycrawl/tools/checkstyle/checks/coding/HiddenFieldCheckTest.java @@ -70,6 +70,7 @@ public class HiddenFieldCheckTest "210:20: 'hidden' hides a field.", "217:13: 'hidden' hides a field.", "223:13: 'hiddenStatic' hides a field.", + "230:41: 'x' hides a field.", }; verify(checkConfig, getPath("InputHiddenField.java"), expected); } @@ -105,6 +106,7 @@ public class HiddenFieldCheckTest "210:20: 'hidden' hides a field.", "217:13: 'hidden' hides a field.", "223:13: 'hiddenStatic' hides a field.", + "230:41: 'x' hides a field.", }; verify(checkConfig, getPath("InputHiddenField.java"), expected); } @@ -145,6 +147,7 @@ public class HiddenFieldCheckTest "210:20: 'hidden' hides a field.", "217:13: 'hidden' hides a field.", "223:13: 'hiddenStatic' hides a field.", + "230:41: 'x' hides a field.", }; verify(checkConfig, getPath("InputHiddenField.java"), expected); } @@ -183,6 +186,7 @@ public class HiddenFieldCheckTest "200:17: 'hidden' hides a field.", "217:13: 'hidden' hides a field.", "223:13: 'hiddenStatic' hides a field.", + "230:41: 'x' hides a field.", }; verify(checkConfig, getPath("InputHiddenField.java"), expected); } @@ -217,4 +221,44 @@ public class HiddenFieldCheckTest }; verify(checkConfig, getPath("InputHiddenFieldReorder.java"), expected); } + + public void testIgnoreAbstractMethods() throws Exception + { + final DefaultConfiguration checkConfig = + createCheckConfig(HiddenFieldCheck.class); + checkConfig.addAttribute("ignoreAbstractMethods", "true"); + + final String[] expected = { + "18:13: 'hidden' hides a field.", + "21:33: 'hidden' hides a field.", + "27:13: 'hidden' hides a field.", + "32:18: 'hidden' hides a field.", + "36:33: 'hidden' hides a field.", + "46:17: 'innerHidden' hides a field.", + "49:26: 'innerHidden' hides a field.", + "55:17: 'innerHidden' hides a field.", + "56:17: 'hidden' hides a field.", + "61:22: 'innerHidden' hides a field.", + "64:22: 'hidden' hides a field.", + "69:17: 'innerHidden' hides a field.", + "70:17: 'hidden' hides a field.", + "76:17: 'innerHidden' hides a field.", + "77:17: 'hidden' hides a field.", + "82:13: 'hidden' hides a field.", + "100:29: 'prop' hides a field.", + "106:29: 'prop' hides a field.", + "112:29: 'prop' hides a field.", + "124:28: 'prop' hides a field.", + "138:13: 'hidden' hides a field.", + "143:13: 'hidden' hides a field.", + "148:13: 'hidden' hides a field.", + "152:13: 'hidden' hides a field.", + "179:23: 'y' hides a field.", + "200:17: 'hidden' hides a field.", + "210:20: 'hidden' hides a field.", + "217:13: 'hidden' hides a field.", + "223:13: 'hiddenStatic' hides a field.", + }; + verify(checkConfig, getPath("InputHiddenField.java"), expected); + } } diff --git a/src/xdocs/config_coding.xml b/src/xdocs/config_coding.xml index 81597b61b..d02c55077 100755 --- a/src/xdocs/config_coding.xml +++ b/src/xdocs/config_coding.xml @@ -389,6 +389,7 @@ public class MySingleton Boolean false + ignoreSetter @@ -400,6 +401,14 @@ public class MySingleton Boolean false + + + ignoreAbstractMethods + Controls whether to ignore parameters of abstract methods. + Boolean + false + + diff --git a/src/xdocs/releasenotes.xml b/src/xdocs/releasenotes.xml index 9c6d432c7..75a474c92 100755 --- a/src/xdocs/releasenotes.xml +++ b/src/xdocs/releasenotes.xml @@ -10,6 +10,17 @@ +
+

Fixed Bugs:

+ +
    +
  • HiddenField can be configured to ignore parameters of + abstract methods (property ignoreAbstractMethods, bug + 1084512)
  • + +
+
+

Fixed Bugs: