From 2846202392930b0c9bb004395c00d2c6cacb861e Mon Sep 17 00:00:00 2001 From: oshoukry Date: Sun, 16 May 2021 18:19:04 -0700 Subject: [PATCH] Fixed issue #140 --- .../rule/impl/NoStaticExceptFinalRule.java | 2 +- .../rule/impl/NoStaticExceptFinalRuleTest.java | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/openpojo/validation/rule/impl/NoStaticExceptFinalRule.java b/src/main/java/com/openpojo/validation/rule/impl/NoStaticExceptFinalRule.java index 697192d2..dc74ac5a 100644 --- a/src/main/java/com/openpojo/validation/rule/impl/NoStaticExceptFinalRule.java +++ b/src/main/java/com/openpojo/validation/rule/impl/NoStaticExceptFinalRule.java @@ -35,7 +35,7 @@ public class NoStaticExceptFinalRule implements Rule { public void evaluate(final PojoClass pojoClass) { for (PojoField fieldEntry : pojoClass.getPojoFields()) { - if (fieldEntry.isStatic() && !fieldEntry.isFinal()) { + if (fieldEntry.isStatic() && !fieldEntry.isFinal() && !fieldEntry.isSynthetic()) { Affirm.fail(String.format("Static fields=[%s] not marked final are not allowed", fieldEntry)); } } diff --git a/src/test/java/com/openpojo/validation/rule/impl/NoStaticExceptFinalRuleTest.java b/src/test/java/com/openpojo/validation/rule/impl/NoStaticExceptFinalRuleTest.java index a5474647..10d2f36a 100644 --- a/src/test/java/com/openpojo/validation/rule/impl/NoStaticExceptFinalRuleTest.java +++ b/src/test/java/com/openpojo/validation/rule/impl/NoStaticExceptFinalRuleTest.java @@ -18,12 +18,18 @@ package com.openpojo.validation.rule.impl; +import com.openpojo.reflection.java.Java; +import com.openpojo.reflection.java.bytecode.asm.SimpleClassLoader; import com.openpojo.validation.CommonCode; import com.openpojo.validation.rule.Rule; import com.openpojo.validation.rule.impl.sampleclasses.NoStaticExceptFinalDoesClass; import com.openpojo.validation.rule.impl.sampleclasses.NoStaticExceptFinalDoesntClass; +import com.openpojo.validation.utils.AClassWithSyntheticFieldDumper; +import com.openpojo.validation.utils.AClassWithSyntheticStaticFieldDumper; import org.junit.Test; +import static com.openpojo.reflection.java.bytecode.asm.SubClassDefinition.GENERATED_CLASS_POSTFIX; + /** * @author oshoukry */ @@ -38,4 +44,13 @@ public void testEvaluate() { CommonCode.shouldFailRuleValidation(rule, failClasses); } + @Test + public void shouldIgnoreSyntheticFields() throws ClassNotFoundException { + final SimpleClassLoader simpleClassLoader = new SimpleClassLoader(); + final String className = this.getClass().getPackage().getName() + ".AClassWithStaticSyntheticField" + GENERATED_CLASS_POSTFIX; + final String classNameAsPath = className.replace(Java.PACKAGE_DELIMITER, Java.PATH_DELIMITER); + + CommonCode.shouldPassRuleValidation(rule, simpleClassLoader.loadThisClass(AClassWithSyntheticStaticFieldDumper.dump(classNameAsPath), className)); + } + }