From 7b144fdb0ac38f5907b369d42c86c44758b05ebd Mon Sep 17 00:00:00 2001 From: Paul Campbell Date: Thu, 13 Jul 2017 11:57:44 +0100 Subject: [PATCH] AvoidDefaultSerializableInInnerClasses: enable rule --- README.md | 8 ++-- builder/src/main/resources/application.yml | 5 +-- .../AvoidDefaultSerializableInInnerClasses.md | 2 + ...voidDefaultSerializableInInnerClasses.java | 41 +++++++++++++++++++ .../net/kemitix/checkstyle-4-tweaks.xml | 1 + .../net/kemitix/checkstyle-5-complexity.xml | 1 + 6 files changed, 51 insertions(+), 7 deletions(-) create mode 100644 builder/src/main/resources/rules/AvoidDefaultSerializableInInnerClasses.md create mode 100644 regressions/src/main/java/net/kemitix/checkstyle/regressions/AvoidDefaultSerializableInInnerClasses.java diff --git a/README.md b/README.md index b9b3c75..1475469 100644 --- a/README.md +++ b/README.md @@ -83,7 +83,7 @@ Rule|Level|Source|Enabled|Suppressible [AtclauseOrder](#atclauseorder)|javadoc|checkstyle|Yes| [AvoidConditionInversion](#avoidconditioninversion)|complexity|sevntu|| [AvoidConstantAsFirstOperandInCondition](#avoidconstantasfirstoperandincondition)|tweaks|sevntu|Yes| -[AvoidDefaultSerializableInInnerClasses](#avoiddefaultserializableininnerclasses)|complexity|sevntu|| +[AvoidDefaultSerializableInInnerClasses](#avoiddefaultserializableininnerclasses)|tweaks|sevntu|Yes| [AvoidEscapedUnicodeCharacters](#avoidescapedunicodecharacters)|tweaks|checkstyle|Yes| [AvoidHidingCauseException](#avoidhidingcauseexception)|tweaks|sevntu|Yes| [AvoidInlineConditionals](#avoidinlineconditionals)|complexity|checkstyle|Yes| @@ -2182,6 +2182,9 @@ Invalid: ```` if (12 == a) {} ```` +#### [AvoidDefaultSerializableInInnerClasses](http://sevntu-checkstyle.github.io/sevntu.checkstyle/apidocs/com/github/sevntu/checkstyle/checks/coding/AvoidDefaultSerializableInInnerClassesCheck.html) + +Prevent the use of default serialization methods on inner classes. If an inner class needs to implement the Serializable interface, then it *must* implement both `writeObject()` and `readObject()` methods. #### [AvoidHidingCauseException](http://sevntu-checkstyle.github.io/sevntu.checkstyle/apidocs/com/github/sevntu/checkstyle/checks/coding/AvoidHidingCauseExceptionCheck.html) Ensures that an exception is re-thrown properly and is not swallowed by a `catch` block. @@ -2758,9 +2761,6 @@ As the sevntu check are considered experimental not all those that are not enabl #### [AvoidConditionInversion](http://sevntu-checkstyle.github.io/sevntu.checkstyle/apidocs/com/github/sevntu/checkstyle/checks/design/AvoidConditionInversionCheck.html) Should already be covered by [SimplifyBooleanExpression](simplifybooleanexpression). -#### [AvoidDefaultSerializableInInnerClasses](http://sevntu-checkstyle.github.io/sevntu.checkstyle/apidocs/com/github/sevntu/checkstyle/checks/coding/AvoidDefaultSerializableInInnerClassesCheck.html) - -TODO: enable #### [AvoidModifiersForTypes](http://sevntu-checkstyle.github.io/sevntu.checkstyle/apidocs/com/github/sevntu/checkstyle/checks/coding/AvoidModifiersForTypesCheck.html) Generic rule; doesn't embody a 'quality' check. diff --git a/builder/src/main/resources/application.yml b/builder/src/main/resources/application.yml index c77c447..b6f3195 100644 --- a/builder/src/main/resources/application.yml +++ b/builder/src/main/resources/application.yml @@ -1392,11 +1392,10 @@ rules: - name: AvoidDefaultSerializableInInnerClasses parent: TREEWALKER - level: COMPLEXITY - enabled: false + level: TWEAKS + enabled: true source: SEVNTU uri: http://sevntu-checkstyle.github.io/sevntu.checkstyle/apidocs/com/github/sevntu/checkstyle/checks/coding/AvoidDefaultSerializableInInnerClassesCheck.html - reason: "TODO: enable" - name: AvoidModifiersForTypes parent: TREEWALKER diff --git a/builder/src/main/resources/rules/AvoidDefaultSerializableInInnerClasses.md b/builder/src/main/resources/rules/AvoidDefaultSerializableInInnerClasses.md new file mode 100644 index 0000000..db09462 --- /dev/null +++ b/builder/src/main/resources/rules/AvoidDefaultSerializableInInnerClasses.md @@ -0,0 +1,2 @@ + +Prevent the use of default serialization methods on inner classes. If an inner class needs to implement the Serializable interface, then it *must* implement both `writeObject()` and `readObject()` methods. diff --git a/regressions/src/main/java/net/kemitix/checkstyle/regressions/AvoidDefaultSerializableInInnerClasses.java b/regressions/src/main/java/net/kemitix/checkstyle/regressions/AvoidDefaultSerializableInInnerClasses.java new file mode 100644 index 0000000..1ac2c72 --- /dev/null +++ b/regressions/src/main/java/net/kemitix/checkstyle/regressions/AvoidDefaultSerializableInInnerClasses.java @@ -0,0 +1,41 @@ +/** + * The MIT License (MIT) + * + * Copyright (c) 2017 Paul Campbell + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software + * and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies + * or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE + * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +package net.kemitix.checkstyle.regressions; + +import java.io.Serializable; + +/** + * Regression test for {@code AvoidDefaultSerializableInInnerClasses}. + * + * @author Paul Campbell (pcampbell@kemitix.net) + */ +public class AvoidDefaultSerializableInInnerClasses { + + /** + * Inner class should not use default implementations of {@code readObject()} and {@code writeObject()}. + */ + @SuppressWarnings("avoiddefaultserializableininnerclasses") + public class InnerClass implements Serializable { + + } + +} diff --git a/ruleset/src/main/resources/net/kemitix/checkstyle-4-tweaks.xml b/ruleset/src/main/resources/net/kemitix/checkstyle-4-tweaks.xml index 33bebda..0358887 100644 --- a/ruleset/src/main/resources/net/kemitix/checkstyle-4-tweaks.xml +++ b/ruleset/src/main/resources/net/kemitix/checkstyle-4-tweaks.xml @@ -177,6 +177,7 @@ + diff --git a/ruleset/src/main/resources/net/kemitix/checkstyle-5-complexity.xml b/ruleset/src/main/resources/net/kemitix/checkstyle-5-complexity.xml index dcbdc0a..e3a5f44 100644 --- a/ruleset/src/main/resources/net/kemitix/checkstyle-5-complexity.xml +++ b/ruleset/src/main/resources/net/kemitix/checkstyle-5-complexity.xml @@ -230,6 +230,7 @@ +