From 68f7bb90d591c6736fa17452e68939e9c3c31c08 Mon Sep 17 00:00:00 2001 From: Roman Korostinskiy <70313618+c71n93@users.noreply.github.com> Date: Mon, 6 May 2024 13:33:40 +0300 Subject: [PATCH 01/21] #3160 enable pmd for eo-runtime and exclude EOorg package --- eo-runtime/pom.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/eo-runtime/pom.xml b/eo-runtime/pom.xml index f7febb73c4..fdcc6c30b7 100644 --- a/eo-runtime/pom.xml +++ b/eo-runtime/pom.xml @@ -324,7 +324,8 @@ SOFTWARE. qulice-maven-plugin - pmd:.* + pmd:/src/main/java/EOorg/.* + pmd:/src/test/java/EOorg/.* dependencies:org.eolang:eo-maven-plugin From 931958c59fc8e4996814f6b3bb14d05250d0aae9 Mon Sep 17 00:00:00 2001 From: Roman Korostinskiy <70313618+c71n93@users.noreply.github.com> Date: Mon, 6 May 2024 16:29:06 +0300 Subject: [PATCH 02/21] #3160 resolve PMD violations for tests from eo-runtime/src/test/java/org/eolang --- .../test/java/org/eolang/AtCompositeTest.java | 2 + .../test/java/org/eolang/AtLoggedTest.java | 2 +- .../src/test/java/org/eolang/AtNamedTest.java | 1 + .../src/test/java/org/eolang/BytesOfTest.java | 1 + .../src/test/java/org/eolang/DataTest.java | 1 - .../test/java/org/eolang/DataizedTest.java | 30 +++++-- .../java/org/eolang/ExInterruptedTest.java | 3 +- .../src/test/java/org/eolang/MainTest.java | 2 +- .../src/test/java/org/eolang/PhDataTest.java | 4 +- .../test/java/org/eolang/PhDefaultTest.java | 89 ++++++++++++------- .../test/java/org/eolang/PhLocatedTest.java | 2 +- .../test/java/org/eolang/PhLoggedTest.java | 3 +- .../test/java/org/eolang/PhMethodTest.java | 2 +- .../test/java/org/eolang/PhPackageTest.java | 1 + .../src/test/java/org/eolang/PhWithTest.java | 2 + .../java/org/eolang/UniverseDefaultTest.java | 5 +- .../org/eolang/VerboseBytesAsStringTest.java | 5 +- 17 files changed, 100 insertions(+), 55 deletions(-) diff --git a/eo-runtime/src/test/java/org/eolang/AtCompositeTest.java b/eo-runtime/src/test/java/org/eolang/AtCompositeTest.java index df6df237b4..de3017f998 100644 --- a/eo-runtime/src/test/java/org/eolang/AtCompositeTest.java +++ b/eo-runtime/src/test/java/org/eolang/AtCompositeTest.java @@ -34,6 +34,7 @@ * * @since 0.16 */ +@SuppressWarnings("PMD.JUnit5TestShouldBePackagePrivate") public final class AtCompositeTest { /** @@ -95,6 +96,7 @@ private static class Rnd extends PhDefault { /** * Ctor. */ + @SuppressWarnings("PMD.ConstructorOnlyInitializesOrCallOtherConstructors") Rnd() { super(); this.add( diff --git a/eo-runtime/src/test/java/org/eolang/AtLoggedTest.java b/eo-runtime/src/test/java/org/eolang/AtLoggedTest.java index 396b72cb9a..8e48279f18 100644 --- a/eo-runtime/src/test/java/org/eolang/AtLoggedTest.java +++ b/eo-runtime/src/test/java/org/eolang/AtLoggedTest.java @@ -39,7 +39,7 @@ * * @since 0.29 */ -class AtLoggedTest { +final class AtLoggedTest { /** * Testable object. diff --git a/eo-runtime/src/test/java/org/eolang/AtNamedTest.java b/eo-runtime/src/test/java/org/eolang/AtNamedTest.java index 2c25d1c743..4ce46c0153 100644 --- a/eo-runtime/src/test/java/org/eolang/AtNamedTest.java +++ b/eo-runtime/src/test/java/org/eolang/AtNamedTest.java @@ -64,6 +64,7 @@ private static class Dummy extends PhDefault { /** * Ctor. */ + @SuppressWarnings("PMD.ConstructorOnlyInitializesOrCallOtherConstructors") Dummy() { super(); this.add( diff --git a/eo-runtime/src/test/java/org/eolang/BytesOfTest.java b/eo-runtime/src/test/java/org/eolang/BytesOfTest.java index 42a36e24d7..122e534dd3 100644 --- a/eo-runtime/src/test/java/org/eolang/BytesOfTest.java +++ b/eo-runtime/src/test/java/org/eolang/BytesOfTest.java @@ -35,6 +35,7 @@ * * @since 1.0 */ +@SuppressWarnings("PMD.TooManyMethods") final class BytesOfTest { @Test diff --git a/eo-runtime/src/test/java/org/eolang/DataTest.java b/eo-runtime/src/test/java/org/eolang/DataTest.java index c9d5ffa10f..5e31fcb248 100644 --- a/eo-runtime/src/test/java/org/eolang/DataTest.java +++ b/eo-runtime/src/test/java/org/eolang/DataTest.java @@ -24,7 +24,6 @@ package org.eolang; import java.nio.charset.StandardCharsets; -import java.util.regex.Pattern; import org.hamcrest.MatcherAssert; import org.hamcrest.Matchers; import org.junit.jupiter.api.Test; diff --git a/eo-runtime/src/test/java/org/eolang/DataizedTest.java b/eo-runtime/src/test/java/org/eolang/DataizedTest.java index b2f856968f..c52013b11b 100644 --- a/eo-runtime/src/test/java/org/eolang/DataizedTest.java +++ b/eo-runtime/src/test/java/org/eolang/DataizedTest.java @@ -44,6 +44,10 @@ * became immutable. Need to find out what's going on and resolve the tests. */ final class DataizedTest { + /** + * System property for maximum dataization log level. + */ + private static final String DATAIZATION_LOG = "max.dataization.log"; @Test @Disabled @@ -107,14 +111,17 @@ void printsShortLogs() throws InterruptedException { log.addHandler(hnd); final Thread thread = new Thread( () -> { - final String property = System.getProperty("max.dataization.log"); - System.getProperties().setProperty("max.dataization.log", String.valueOf(1)); + final String property = System.getProperty(DataizedTest.DATAIZATION_LOG); + System.getProperties().setProperty( + DataizedTest.DATAIZATION_LOG, + String.valueOf(1) + ); final Phi phi = new PhiDec(Phi.Φ); new Dataized(phi, log).take(); if (property != null) { - System.getProperties().setProperty("max.dataization.log", property); + System.getProperties().setProperty(DataizedTest.DATAIZATION_LOG, property); } else { - System.clearProperty("max.dataization.log"); + System.clearProperty(DataizedTest.DATAIZATION_LOG); } }); thread.start(); @@ -138,14 +145,17 @@ void printsLongLogs() throws InterruptedException { log.addHandler(hnd); final Thread thread = new Thread( () -> { - final String property = System.getProperty("max.dataization.log"); - System.getProperties().setProperty("max.dataization.log", String.valueOf(2)); + final String property = System.getProperty(DataizedTest.DATAIZATION_LOG); + System.getProperties().setProperty( + DataizedTest.DATAIZATION_LOG, + String.valueOf(2) + ); final Phi phi = new PhiDec(Phi.Φ); new Dataized(phi, log).take(); if (property != null) { - System.getProperties().setProperty("max.dataization.log", property); + System.getProperties().setProperty(DataizedTest.DATAIZATION_LOG, property); } else { - System.clearProperty("max.dataization.log"); + System.clearProperty(DataizedTest.DATAIZATION_LOG); } }); thread.start(); @@ -169,6 +179,7 @@ private static class PhIncorrect extends PhDefault { * Ctor. * @param sigma Sigma */ + @SuppressWarnings("PMD.ConstructorOnlyInitializesOrCallOtherConstructors") PhIncorrect(final Phi sigma) { super(sigma); this.add( @@ -193,6 +204,7 @@ public static class PhiDec extends PhDefault { * * @param sigma Sigma */ + @SuppressWarnings("PMD.ConstructorOnlyInitializesOrCallOtherConstructors") PhiDec(final Phi sigma) { super(sigma); this.add( @@ -242,7 +254,7 @@ public void flush() { } @Override - public void close() throws SecurityException { + public void close() { throw new UnsupportedOperationException("#close()"); } diff --git a/eo-runtime/src/test/java/org/eolang/ExInterruptedTest.java b/eo-runtime/src/test/java/org/eolang/ExInterruptedTest.java index fd348efbf4..8dbcb12268 100644 --- a/eo-runtime/src/test/java/org/eolang/ExInterruptedTest.java +++ b/eo-runtime/src/test/java/org/eolang/ExInterruptedTest.java @@ -31,7 +31,7 @@ * * @since 0.28.3 */ -public class ExInterruptedTest { +final class ExInterruptedTest { @Test void throwsRightException() { @@ -53,6 +53,7 @@ private static class EOthrow extends PhDefault { * CTor. * @param sigma Sigma */ + @SuppressWarnings("PMD.ConstructorOnlyInitializesOrCallOtherConstructors") EOthrow(final Phi sigma) { super(sigma); this.add( diff --git a/eo-runtime/src/test/java/org/eolang/MainTest.java b/eo-runtime/src/test/java/org/eolang/MainTest.java index a8fdd226a3..30844e701c 100644 --- a/eo-runtime/src/test/java/org/eolang/MainTest.java +++ b/eo-runtime/src/test/java/org/eolang/MainTest.java @@ -30,7 +30,6 @@ import java.io.IOException; import java.nio.channels.Channels; import java.nio.charset.StandardCharsets; -import java.util.Arrays; import org.hamcrest.MatcherAssert; import org.hamcrest.Matchers; import org.junit.jupiter.api.Disabled; @@ -44,6 +43,7 @@ * tupled-stdout.eo was removed from eo-runtime tests because it wasn't working in CI. * Need to refactor them and enable */ +@SuppressWarnings("PMD.TooManyMethods") final class MainTest { @Test diff --git a/eo-runtime/src/test/java/org/eolang/PhDataTest.java b/eo-runtime/src/test/java/org/eolang/PhDataTest.java index 87553128ee..22e05e034d 100644 --- a/eo-runtime/src/test/java/org/eolang/PhDataTest.java +++ b/eo-runtime/src/test/java/org/eolang/PhDataTest.java @@ -32,7 +32,7 @@ * Test case for {@link PhData}. * @since 0.36.0 */ -public class PhDataTest { +final class PhDataTest { @Test void addsApplicationWithDelta() { MatcherAssert.assertThat( @@ -44,7 +44,7 @@ void addsApplicationWithDelta() { @Test void returnsData() { - final byte[] data = new byte[] {0x2A, 0x3B}; + final byte[] data = {0x2A, 0x3B}; MatcherAssert.assertThat( AtCompositeTest.TO_ADD_MESSAGE, new PhData(new Dummy(), data).delta(), diff --git a/eo-runtime/src/test/java/org/eolang/PhDefaultTest.java b/eo-runtime/src/test/java/org/eolang/PhDefaultTest.java index 2eb315b5a8..9959468633 100644 --- a/eo-runtime/src/test/java/org/eolang/PhDefaultTest.java +++ b/eo-runtime/src/test/java/org/eolang/PhDefaultTest.java @@ -41,7 +41,17 @@ * Test case for {@link PhDefault}. * @since 0.1 */ +@SuppressWarnings("PMD.TooManyMethods") final class PhDefaultTest { + /** + * Name of attribute. + */ + private static final String PLUS_ATT = "plus"; + + /** + * Name of attribute. + */ + private static final String VOID_ATT = "void"; @Test void comparesTwoObjects() { @@ -82,7 +92,7 @@ void doesNotHaveRhoWhenFormed() { @Test void setsRhoAfterDispatch() { - final Phi kid = new PhDefaultTest.Int().take("plus"); + final Phi kid = new PhDefaultTest.Int().take(PhDefaultTest.PLUS_ATT); Assertions.assertDoesNotThrow( () -> kid.take(Attr.RHO), String.format("Kid of should have %s attribute after dispatch", Attr.RHO) @@ -102,8 +112,8 @@ void doesNotHaveRhoAfterCopying() { @Test void copiesKid() { final Phi phi = new PhDefaultTest.Int(); - final Phi first = phi.take("plus"); - final Phi second = phi.copy().take("plus"); + final Phi first = phi.take(PhDefaultTest.PLUS_ATT); + final Phi second = phi.copy().take(PhDefaultTest.PLUS_ATT); MatcherAssert.assertThat( "Child attributes should be copied after copying main object", first, @@ -118,9 +128,9 @@ void takesDifferentAbstractKidsEveryDispatch() { final Phi phi = new PhDefaultTest.Int(); MatcherAssert.assertThat( "Child attributes should be copied on every dispatch", - phi.take("plus"), + phi.take(PhDefaultTest.PLUS_ATT), Matchers.not( - Matchers.equalTo(phi.take("plus")) + Matchers.equalTo(phi.take(PhDefaultTest.PLUS_ATT)) ) ); } @@ -128,7 +138,7 @@ void takesDifferentAbstractKidsEveryDispatch() { @Test void hasKidWithSetRhoAfterCopying() { final Phi phi = new PhDefaultTest.Int().copy(); - final Phi plus = phi.take("plus"); + final Phi plus = phi.take(PhDefaultTest.PLUS_ATT); Assertions.assertDoesNotThrow( () -> plus.take(Attr.RHO), String.format( @@ -153,9 +163,9 @@ void hasDifferentKidsAfterDoubleCopying() { final Phi second = first.copy(); MatcherAssert.assertThat( "Child objects after double copying should be different", - first.take("plus"), + first.take(PhDefaultTest.PLUS_ATT), Matchers.not( - Matchers.equalTo(second.take("plus")) + Matchers.equalTo(second.take(PhDefaultTest.PLUS_ATT)) ) ); } @@ -168,15 +178,15 @@ void changesKidRhoAfterSelfCopying() { String.format( "%s attribute of original object kid should refer to original object", Attr.RHO ), - phi.take("plus").take(Attr.RHO), - Matchers.not(Matchers.equalTo(copy.take("plus").take(Attr.RHO))) + phi.take(PhDefaultTest.PLUS_ATT).take(Attr.RHO), + Matchers.not(Matchers.equalTo(copy.take(PhDefaultTest.PLUS_ATT).take(Attr.RHO))) ); MatcherAssert.assertThat( String.format( "%s attribute of copied object kid should refer to copied object", Attr.RHO ), - copy.take("plus").take(Attr.RHO), + copy.take(PhDefaultTest.PLUS_ATT).take(Attr.RHO), Matchers.equalTo(copy) ); } @@ -184,7 +194,7 @@ void changesKidRhoAfterSelfCopying() { @Test void doesNotChangeRhoAfterDirectKidCopying() { final Phi phi = new PhDefaultTest.Int(); - final Phi first = phi.take("plus"); + final Phi first = phi.take(PhDefaultTest.PLUS_ATT); final Phi second = first.copy(); MatcherAssert.assertThat( String.format( @@ -201,7 +211,7 @@ void doesNotChangeRhoAfterDirectKidCopying() { @Test void doesNotCopyRhoWhileDispatch() { final Phi phi = new PhDefaultTest.Int(); - final Phi plus = phi.take("plus"); + final Phi plus = phi.take(PhDefaultTest.PLUS_ATT); MatcherAssert.assertThat( String.format("%s attributes should not be copied while dispatch", Attr.RHO), plus.take(Attr.RHO), @@ -212,7 +222,7 @@ void doesNotCopyRhoWhileDispatch() { @Test void doesNotCopySigmaWhileDispatch() { final Phi phi = new PhDefaultTest.Int(); - final Phi plus = phi.take("plus"); + final Phi plus = phi.take(PhDefaultTest.PLUS_ATT); MatcherAssert.assertThat( String.format("%s attributes should not be copied while dispatch", Attr.SIGMA), plus.take(Attr.SIGMA), @@ -226,7 +236,7 @@ void copiesUnsetVoidAttribute() { final Phi copy = phi.copy(); Assertions.assertThrows( EOerror.ExError.class, - () -> copy.take("void"), + () -> copy.take(PhDefaultTest.VOID_ATT), "Unset void attribute should be copied with unset value" ); } @@ -234,13 +244,13 @@ void copiesUnsetVoidAttribute() { @Test void copiesSetVoidAttributeOnCopy() { final Phi phi = new PhDefaultTest.Int(); - phi.put("void", new Data.ToPhi(10L)); + phi.put(PhDefaultTest.VOID_ATT, new Data.ToPhi(10L)); final Phi copy = phi.copy(); MatcherAssert.assertThat( "Copied set void attribute should be different from original one", - phi.take("void"), + phi.take(PhDefaultTest.VOID_ATT), Matchers.not( - Matchers.equalTo(copy.take("void")) + Matchers.equalTo(copy.take(PhDefaultTest.VOID_ATT)) ) ); } @@ -248,11 +258,11 @@ void copiesSetVoidAttributeOnCopy() { @Test void doesNotCopySetVoidAttributeWithRho() { final Phi phi = new PhDefaultTest.Int(); - phi.put("void", new Data.ToPhi(10L)); + phi.put(PhDefaultTest.VOID_ATT, new Data.ToPhi(10L)); MatcherAssert.assertThat( AtCompositeTest.TO_ADD_MESSAGE, - phi.take("void"), - Matchers.equalTo(phi.take("void")) + phi.take(PhDefaultTest.VOID_ATT), + Matchers.equalTo(phi.take(PhDefaultTest.VOID_ATT)) ); } @@ -274,7 +284,7 @@ void hasAccessToDependentOnContextAttribute() { () -> phi.take(Attr.PHI), AtCompositeTest.TO_ADD_MESSAGE ); - phi.put("void", new Data.ToPhi(10L)); + phi.put(PhDefaultTest.VOID_ATT, new Data.ToPhi(10L)); Assertions.assertDoesNotThrow( () -> phi.take(Attr.PHI), AtCompositeTest.TO_ADD_MESSAGE @@ -390,10 +400,10 @@ void cachesPhiViaNewRecursively() { @Test void refersToOriginalObjectAndDoesNotResetCache() { final Phi phi = new PhDefaultTest.Dummy(Phi.Φ); - phi.take("plus"); + phi.take(PhDefaultTest.PLUS_ATT); final Phi copy = phi.copy(); - copy.take("plus"); - phi.take("plus"); + copy.take(PhDefaultTest.PLUS_ATT); + phi.take(PhDefaultTest.PLUS_ATT); MatcherAssert.assertThat( AtCompositeTest.TO_ADD_MESSAGE, PhDefaultTest.Dummy.count, @@ -433,7 +443,7 @@ void hasDifferentFormaWithBoundedMethod() { Matchers.not( Matchers.equalTo( new PhWith( - five.take("plus").copy(), + five.take(PhDefaultTest.PLUS_ATT).copy(), "x", new Data.ToPhi(5L) ).forma() @@ -447,13 +457,13 @@ void hasTheSameFormaWithDifferentInstances() { MatcherAssert.assertThat( AtCompositeTest.TO_ADD_MESSAGE, new PhWith( - new Data.ToPhi(5L).take("plus").copy(), + new Data.ToPhi(5L).take(PhDefaultTest.PLUS_ATT).copy(), "x", new Data.ToPhi(5L) ).forma(), Matchers.equalTo( new PhWith( - new Data.ToPhi(6L).take("plus").copy(), + new Data.ToPhi(6L).take(PhDefaultTest.PLUS_ATT).copy(), "x", new Data.ToPhi(6L) ).forma() @@ -467,11 +477,11 @@ void doesNotCalculateRandomTwice() { new PhMethod( new PhWith( new PhMethod( - new Rnd(Phi.Φ), "plus" + new Rnd(Phi.Φ), PhDefaultTest.PLUS_ATT ), 0, new Data.ToPhi(1.2) ), - "plus" + PhDefaultTest.PLUS_ATT ), 0, new Data.ToPhi(1.2) ); @@ -500,6 +510,7 @@ private static class Rnd extends PhDefault { * Ctor. * @param sigma Sigma */ + @SuppressWarnings("PMD.ConstructorOnlyInitializesOrCallOtherConstructors") Rnd(final Phi sigma) { super(sigma); this.add( @@ -522,16 +533,17 @@ private static class Int extends PhDefault { /** * Ctor. */ + @SuppressWarnings("PMD.ConstructorOnlyInitializesOrCallOtherConstructors") Int() { super(Phi.Φ); - this.add("void", new AtVoid("void")); - this.add("plus", new AtSimple(new Plus(this))); + this.add(PhDefaultTest.VOID_ATT, new AtVoid(PhDefaultTest.VOID_ATT)); + this.add(PhDefaultTest.PLUS_ATT, new AtSimple(new Plus(this))); this.add( Attr.PHI, new AtOnce( new AtComposite( this, - rho -> rho.take("void") + rho -> rho.take(PhDefaultTest.VOID_ATT) ) ) ); @@ -541,7 +553,9 @@ private static class Int extends PhDefault { new AtComposite( this, rho -> { - final Phi plus = new Data.ToPhi(5L).take("plus").copy(); + final Phi plus = new Data.ToPhi(5L).take( + PhDefaultTest.PLUS_ATT + ).copy(); plus.put(0, new Data.ToPhi(6L)); return plus; } @@ -583,6 +597,7 @@ public static class Foo extends PhDefault { * @param sigma Sigma * @param data Data */ + @SuppressWarnings("PMD.ConstructorOnlyInitializesOrCallOtherConstructors") Foo(final Phi sigma, final Object data) { super(sigma); this.add("x", new AtVoid("x")); @@ -605,6 +620,7 @@ public static class Dummy extends PhDefault { * Ctor. * @param sigma Sigma */ + @SuppressWarnings("PMD.ConstructorOnlyInitializesOrCallOtherConstructors") Dummy(final Phi sigma) { super(sigma); this.add( @@ -633,6 +649,7 @@ public static class Counter extends PhDefault { * Ctor. * @param sigma Sigma */ + @SuppressWarnings("PMD.ConstructorOnlyInitializesOrCallOtherConstructors") Counter(final Phi sigma) { super(sigma); this.add( @@ -657,6 +674,7 @@ public static class Kid extends PhDefault { * Ctor. * @param sigma Sigma */ + @SuppressWarnings("PMD.ConstructorOnlyInitializesOrCallOtherConstructors") Kid(final Phi sigma) { super(sigma); this.add("z", new AtVoid("z")); @@ -678,6 +696,7 @@ public static class EndlessRecursion extends PhDefault { * Ctor. * @param sigma Sigma */ + @SuppressWarnings("PMD.ConstructorOnlyInitializesOrCallOtherConstructors") EndlessRecursion(final Phi sigma) { super(sigma); this.add( @@ -713,6 +732,7 @@ public static class RecursivePhi extends PhDefault { * Ctor. * @param sigma Sigma */ + @SuppressWarnings("PMD.ConstructorOnlyInitializesOrCallOtherConstructors") RecursivePhi(final Phi sigma) { super(sigma); this.add( @@ -748,6 +768,7 @@ public static class RecursivePhiViaNew extends PhDefault { * Ctor. * @param sigma Sigma */ + @SuppressWarnings("PMD.ConstructorOnlyInitializesOrCallOtherConstructors") RecursivePhiViaNew(final Phi sigma) { super(sigma); this.add( diff --git a/eo-runtime/src/test/java/org/eolang/PhLocatedTest.java b/eo-runtime/src/test/java/org/eolang/PhLocatedTest.java index 66678764b9..1a423fc4c3 100644 --- a/eo-runtime/src/test/java/org/eolang/PhLocatedTest.java +++ b/eo-runtime/src/test/java/org/eolang/PhLocatedTest.java @@ -32,7 +32,7 @@ * * @since 0.36.0 */ -class PhLocatedTest { +final class PhLocatedTest { @Test void savesLocationAfterCopying() { diff --git a/eo-runtime/src/test/java/org/eolang/PhLoggedTest.java b/eo-runtime/src/test/java/org/eolang/PhLoggedTest.java index 47b3d04c39..dada8d8f50 100644 --- a/eo-runtime/src/test/java/org/eolang/PhLoggedTest.java +++ b/eo-runtime/src/test/java/org/eolang/PhLoggedTest.java @@ -33,7 +33,7 @@ * * @since 0.29.0 */ -class PhLoggedTest { +final class PhLoggedTest { @Test void convertsToOriginTerm() { @@ -100,6 +100,7 @@ private static final class Dummy extends PhDefault { * Ctor. * @param sigma Sigma */ + @SuppressWarnings("PMD.ConstructorOnlyInitializesOrCallOtherConstructors") private Dummy(final Phi sigma) { super(sigma); this.add("x", new AtVoid("x")); diff --git a/eo-runtime/src/test/java/org/eolang/PhMethodTest.java b/eo-runtime/src/test/java/org/eolang/PhMethodTest.java index 80f0baf8b7..08895d71d2 100644 --- a/eo-runtime/src/test/java/org/eolang/PhMethodTest.java +++ b/eo-runtime/src/test/java/org/eolang/PhMethodTest.java @@ -25,7 +25,6 @@ import org.hamcrest.MatcherAssert; import org.hamcrest.Matchers; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; /** @@ -130,6 +129,7 @@ public static class Dummy extends PhDefault { * Ctor. * @param sigma Sigma */ + @SuppressWarnings("PMD.ConstructorOnlyInitializesOrCallOtherConstructors") Dummy(final Phi sigma) { super(sigma); this.add( diff --git a/eo-runtime/src/test/java/org/eolang/PhPackageTest.java b/eo-runtime/src/test/java/org/eolang/PhPackageTest.java index f77f6b7423..0aca154985 100644 --- a/eo-runtime/src/test/java/org/eolang/PhPackageTest.java +++ b/eo-runtime/src/test/java/org/eolang/PhPackageTest.java @@ -47,6 +47,7 @@ * * @since 0.24 */ +@SuppressWarnings("PMD.TooManyMethods") final class PhPackageTest { /** diff --git a/eo-runtime/src/test/java/org/eolang/PhWithTest.java b/eo-runtime/src/test/java/org/eolang/PhWithTest.java index 9cf283fb94..fd9e17a453 100644 --- a/eo-runtime/src/test/java/org/eolang/PhWithTest.java +++ b/eo-runtime/src/test/java/org/eolang/PhWithTest.java @@ -135,6 +135,7 @@ private static class DummyWithAtFree extends PhDefault { * @param attr Free attribute name * @param sigma Sigma */ + @SuppressWarnings("PMD.ConstructorOnlyInitializesOrCallOtherConstructors") DummyWithAtFree(final String attr, final Phi sigma) { super(sigma); this.add(attr, new AtVoid(attr)); @@ -151,6 +152,7 @@ public static class Dummy extends PhDefault { * Ctor. * @param sigma Sigma */ + @SuppressWarnings("PMD.ConstructorOnlyInitializesOrCallOtherConstructors") Dummy(final Phi sigma) { super(sigma); this.add("φ", new AtComposite(this, self -> new Data.ToPhi(1L))); diff --git a/eo-runtime/src/test/java/org/eolang/UniverseDefaultTest.java b/eo-runtime/src/test/java/org/eolang/UniverseDefaultTest.java index b99a30353d..10f2cf968e 100644 --- a/eo-runtime/src/test/java/org/eolang/UniverseDefaultTest.java +++ b/eo-runtime/src/test/java/org/eolang/UniverseDefaultTest.java @@ -52,7 +52,7 @@ final class UniverseDefaultTest { /** * Data byte array. */ - private static final byte[] DATA = new BytesOf(123456789L).take(); + private static final byte[] DATA = new BytesOf(123_456_789L).take(); @Test void findsSimpleAtt() { @@ -206,6 +206,7 @@ private static class DummyWithAt extends PhDefault { * Ctor. * @param sigma Sigma. */ + @SuppressWarnings("PMD.ConstructorOnlyInitializesOrCallOtherConstructors") DummyWithAt(final Phi sigma) { super(sigma); this.add( @@ -229,6 +230,7 @@ private static class DummyWithStructure extends PhDefault { * Ctor. * @param sigma Sigma */ + @SuppressWarnings("PMD.ConstructorOnlyInitializesOrCallOtherConstructors") DummyWithStructure(final Phi sigma) { super(sigma); this.add(UniverseDefaultTest.ABSTRACT_ATT, new AtComposite(this, DummyWithAt::new)); @@ -245,6 +247,7 @@ private static class DummyAbstract extends PhDefault { * Ctor. * @param sigma Sigma */ + @SuppressWarnings("PMD.ConstructorOnlyInitializesOrCallOtherConstructors") DummyAbstract(final Phi sigma) { super(sigma); this.add( diff --git a/eo-runtime/src/test/java/org/eolang/VerboseBytesAsStringTest.java b/eo-runtime/src/test/java/org/eolang/VerboseBytesAsStringTest.java index 825931e6d1..89bda4db6f 100644 --- a/eo-runtime/src/test/java/org/eolang/VerboseBytesAsStringTest.java +++ b/eo-runtime/src/test/java/org/eolang/VerboseBytesAsStringTest.java @@ -35,6 +35,7 @@ * * @since 0.1 */ +@SuppressWarnings("PMD.JUnit5TestShouldBePackagePrivate") public final class VerboseBytesAsStringTest { @ParameterizedTest @@ -118,9 +119,9 @@ public String toString(final Object object) { */ public Stream getTestSources() { return Stream.of( - 12345L, + 12_345L, "qwerty", - 12.34567D, + 12.345_67D, true, false, new byte[]{}, From 22fa0a4fa41893b2256d7eefa88cdebda1c8efbf Mon Sep 17 00:00:00 2001 From: Roman Korostinskiy <70313618+c71n93@users.noreply.github.com> Date: Mon, 6 May 2024 18:43:42 +0300 Subject: [PATCH 03/21] #3160 resolve PMD violations for tests from eo-runtime/src/main/java/org/eolang --- eo-runtime/src/main/java/org/eolang/AtCopied.java | 6 +++--- eo-runtime/src/main/java/org/eolang/Bytes.java | 5 ++--- eo-runtime/src/main/java/org/eolang/BytesOf.java | 4 ++++ eo-runtime/src/main/java/org/eolang/Data.java | 14 ++++++++++---- eo-runtime/src/main/java/org/eolang/Dataized.java | 10 ---------- .../src/main/java/org/eolang/ExAbstract.java | 15 ++++++++------- .../src/main/java/org/eolang/ExInterrupted.java | 5 +++-- eo-runtime/src/main/java/org/eolang/Main.java | 4 +++- .../src/main/java/org/eolang/PhDefault.java | 11 +---------- eo-runtime/src/main/java/org/eolang/PhFake.java | 1 + .../src/main/java/org/eolang/PhLocated.java | 1 + eo-runtime/src/main/java/org/eolang/PhLogged.java | 1 + eo-runtime/src/main/java/org/eolang/PhNamed.java | 1 + eo-runtime/src/main/java/org/eolang/PhOnce.java | 1 + .../src/main/java/org/eolang/PhPackage.java | 1 + eo-runtime/src/main/java/org/eolang/PhSafe.java | 1 + eo-runtime/src/main/java/org/eolang/PhTraced.java | 3 +++ eo-runtime/src/main/java/org/eolang/PhWrite.java | 1 + eo-runtime/src/main/java/org/eolang/Phi.java | 1 + eo-runtime/src/main/java/org/eolang/SafeFunc.java | 7 +++---- eo-runtime/src/main/java/org/eolang/Term.java | 1 + .../src/main/java/org/eolang/UniverseSafe.java | 1 + .../java/org/eolang/VerboseBytesAsString.java | 2 ++ 23 files changed, 53 insertions(+), 44 deletions(-) diff --git a/eo-runtime/src/main/java/org/eolang/AtCopied.java b/eo-runtime/src/main/java/org/eolang/AtCopied.java index 314178fa60..fb947a2b6e 100644 --- a/eo-runtime/src/main/java/org/eolang/AtCopied.java +++ b/eo-runtime/src/main/java/org/eolang/AtCopied.java @@ -39,10 +39,10 @@ final class AtCopied extends AtEnvelope { new AtGetOnly( () -> { final Phi ret; - if (!name.equals(Attr.RHO) && !name.equals(Attr.SIGMA)) { - ret = attr.get().copy(); - } else { + if (name.equals(Attr.RHO) || name.equals(Attr.SIGMA)) { ret = attr.get(); + } else { + ret = attr.get().copy(); } return ret; } diff --git a/eo-runtime/src/main/java/org/eolang/Bytes.java b/eo-runtime/src/main/java/org/eolang/Bytes.java index adb9182e0b..ea6cbaa511 100644 --- a/eo-runtime/src/main/java/org/eolang/Bytes.java +++ b/eo-runtime/src/main/java/org/eolang/Bytes.java @@ -23,8 +23,6 @@ */ package org.eolang; -import EOorg.EOeolang.EObytes; - /** * Bytes. * @@ -53,8 +51,9 @@ public interface Bytes { * OR operation. * @param other Bytes. * @return Bytes. - * @checkstyle MethodNameCheck (2 lines) + * @checkstyle MethodNameCheck (3 lines) */ + @SuppressWarnings("PMD.ShortMethodName") Bytes or(Bytes other); /** diff --git a/eo-runtime/src/main/java/org/eolang/BytesOf.java b/eo-runtime/src/main/java/org/eolang/BytesOf.java index cefb3a5822..593054a027 100644 --- a/eo-runtime/src/main/java/org/eolang/BytesOf.java +++ b/eo-runtime/src/main/java/org/eolang/BytesOf.java @@ -33,6 +33,7 @@ * @since 1.0 */ @Versionized +@SuppressWarnings({"PMD.TooManyMethods", "PMD.GodClass"}) public final class BytesOf implements Bytes { /** @@ -44,6 +45,7 @@ public final class BytesOf implements Bytes { * Ctor. * @param data Data. */ + @SuppressWarnings("PMD.ArrayIsStoredDirectly") public BytesOf(final byte[] data) { this.data = data; } @@ -108,6 +110,7 @@ public Bytes and(final Bytes other) { } @Override + @SuppressWarnings("PMD.ShortMethodName") public Bytes or(final Bytes other) { final byte[] first = this.take(); final byte[] second = other.take(); @@ -128,6 +131,7 @@ public Bytes xor(final Bytes other) { } @Override + @SuppressWarnings("PMD.CognitiveComplexity") public Bytes shift(final int bits) { // @checkstyle MethodBodyCommentsCheck (3 lines) // @checkstyle NestedIfDepthCheck (40 lines) diff --git a/eo-runtime/src/main/java/org/eolang/Data.java b/eo-runtime/src/main/java/org/eolang/Data.java index b71e0414b6..7eb8cabe5e 100644 --- a/eo-runtime/src/main/java/org/eolang/Data.java +++ b/eo-runtime/src/main/java/org/eolang/Data.java @@ -34,6 +34,7 @@ * @since 0.1 */ @Versionized +@SuppressWarnings("PMD.TooManyMethods") public interface Data { /** * Attach data to the object. @@ -200,6 +201,11 @@ private static Phi toPhi(final Object obj) { * @checkstyle NestedIfDepthCheck (100 lines) * @checkstyle ModifiedControlVariableCheck (100 lines) */ + @SuppressWarnings({ + "PMD.AvoidReassigningLoopVariables", + "PMD.CognitiveComplexity", + "PMD.NPathComplexity" + }) private static String unescapeJavaString(final String str) { final StringBuilder unescaped = new StringBuilder(str.length()); for (int idx = 0; idx < str.length(); ++idx) { @@ -212,19 +218,19 @@ private static String unescapeJavaString(final String str) { next = str.charAt(idx + 1); } if (next >= '0' && next <= '7') { - String code = String.valueOf(next); + final StringBuilder code = new StringBuilder(String.valueOf(next)); ++idx; if (idx < str.length() - 1 && str.charAt(idx + 1) >= '0' && str.charAt(idx + 1) <= '7') { - code += str.charAt(idx + 1); + code.append(str.charAt(idx + 1)); ++idx; if (idx < str.length() - 1 && str.charAt(idx + 1) >= '0' && str.charAt(idx + 1) <= '7') { - code += str.charAt(idx + 1); + code.append(str.charAt(idx + 1)); ++idx; } } - unescaped.append((char) Integer.parseInt(code, 8)); + unescaped.append((char) Integer.parseInt(code.toString(), 8)); continue; } switch (next) { diff --git a/eo-runtime/src/main/java/org/eolang/Dataized.java b/eo-runtime/src/main/java/org/eolang/Dataized.java index 75c1e6b479..d63d11dce0 100644 --- a/eo-runtime/src/main/java/org/eolang/Dataized.java +++ b/eo-runtime/src/main/java/org/eolang/Dataized.java @@ -150,14 +150,4 @@ public T take(final Class type) { } return type.cast(strong); } - - /** - * Clean up resources. - * This includes call of {@link ThreadLocal#remove()} method to prevent - * memory leaks. - */ - public static void cleanUp() { - Dataized.LEVEL.remove(); - Dataized.MAX_LEVEL.remove(); - } } diff --git a/eo-runtime/src/main/java/org/eolang/ExAbstract.java b/eo-runtime/src/main/java/org/eolang/ExAbstract.java index 2229c390fa..f92e0d971c 100644 --- a/eo-runtime/src/main/java/org/eolang/ExAbstract.java +++ b/eo-runtime/src/main/java/org/eolang/ExAbstract.java @@ -42,25 +42,26 @@ public abstract class ExAbstract extends RuntimeException { /** * Ctor. + * @param cause Exception cause */ - public ExAbstract() { - this(null); + public ExAbstract(final String cause) { + super(cause); } /** * Ctor. * @param cause Exception cause + * @param root Root cause exception */ - public ExAbstract(final String cause) { - super(cause); + public ExAbstract(final String cause, final Throwable root) { + super(cause, root); } /** * Ctor. - * @param cause Exception cause * @param root Root cause exception */ - ExAbstract(final String cause, final Throwable root) { - super(cause, root); + public ExAbstract(final Throwable root) { + super(root); } } diff --git a/eo-runtime/src/main/java/org/eolang/ExInterrupted.java b/eo-runtime/src/main/java/org/eolang/ExInterrupted.java index cc5da73fbc..50e3ad9675 100644 --- a/eo-runtime/src/main/java/org/eolang/ExInterrupted.java +++ b/eo-runtime/src/main/java/org/eolang/ExInterrupted.java @@ -38,8 +38,9 @@ public class ExInterrupted extends ExAbstract { /** * Ctor. + * @param root Root cause exception */ - public ExInterrupted() { - super(null); + public ExInterrupted(final InterruptedException root) { + super(root); } } diff --git a/eo-runtime/src/main/java/org/eolang/Main.java b/eo-runtime/src/main/java/org/eolang/Main.java index b72d138df5..09e541e8f1 100644 --- a/eo-runtime/src/main/java/org/eolang/Main.java +++ b/eo-runtime/src/main/java/org/eolang/Main.java @@ -49,6 +49,7 @@ * @since 0.1 */ @Versionized +@SuppressWarnings("PMD.MoreThanOneLogger") public final class Main { /** @@ -182,7 +183,8 @@ private static void run(final List opts) throws Exception { .newInstance(Phi.Φ); } catch (final ClassNotFoundException ex) { throw new ExUnset( - String.format("Can not find '%s' object", opts.get(0)) + String.format("Can not find '%s' object", opts.get(0)), + ex ); } if (opts.size() > 1) { diff --git a/eo-runtime/src/main/java/org/eolang/PhDefault.java b/eo-runtime/src/main/java/org/eolang/PhDefault.java index dc3d8a90d6..3d8f43be95 100644 --- a/eo-runtime/src/main/java/org/eolang/PhDefault.java +++ b/eo-runtime/src/main/java/org/eolang/PhDefault.java @@ -43,7 +43,7 @@ * @checkstyle DesignForExtensionCheck (500 lines) */ @Versionized -@SuppressWarnings({"PMD.TooManyMethods", "PMD.ConstructorShouldDoInitialization"}) +@SuppressWarnings({"PMD.TooManyMethods", "PMD.ConstructorShouldDoInitialization", "PMD.GodClass"}) public abstract class PhDefault implements Phi, Cloneable { /** @@ -312,15 +312,6 @@ public String forma() { return this.form; } - /** - * Clean up resources. - * This includes call of {@link ThreadLocal#remove()} method to prevent - * memory leaks. - */ - public static void cleanUp() { - PhDefault.NESTING.remove(); - } - /** * Add new attribute. * diff --git a/eo-runtime/src/main/java/org/eolang/PhFake.java b/eo-runtime/src/main/java/org/eolang/PhFake.java index 49423fbcaf..637c07e62a 100644 --- a/eo-runtime/src/main/java/org/eolang/PhFake.java +++ b/eo-runtime/src/main/java/org/eolang/PhFake.java @@ -47,6 +47,7 @@ public PhFake() { * Ctor. * @param sup The function to return the real object */ + @SuppressWarnings("PMD.ConstructorOnlyInitializesOrCallOtherConstructors") public PhFake(final Supplier sup) { super(Phi.Φ); this.add("args", new AtVoid("args")); diff --git a/eo-runtime/src/main/java/org/eolang/PhLocated.java b/eo-runtime/src/main/java/org/eolang/PhLocated.java index 33458ae922..ded8ce8da7 100644 --- a/eo-runtime/src/main/java/org/eolang/PhLocated.java +++ b/eo-runtime/src/main/java/org/eolang/PhLocated.java @@ -29,6 +29,7 @@ * * @since 0.21 */ +@SuppressWarnings("PMD.TooManyMethods") @Versionized public final class PhLocated implements Phi { diff --git a/eo-runtime/src/main/java/org/eolang/PhLogged.java b/eo-runtime/src/main/java/org/eolang/PhLogged.java index 27356f0f29..5692a1d1b4 100644 --- a/eo-runtime/src/main/java/org/eolang/PhLogged.java +++ b/eo-runtime/src/main/java/org/eolang/PhLogged.java @@ -34,6 +34,7 @@ * @since 0.24 */ @Versionized +@SuppressWarnings({"PMD.TooManyMethods", "PMD.SystemPrintln"}) public final class PhLogged implements Phi { /** diff --git a/eo-runtime/src/main/java/org/eolang/PhNamed.java b/eo-runtime/src/main/java/org/eolang/PhNamed.java index d5b0157b76..5de26bb4f7 100644 --- a/eo-runtime/src/main/java/org/eolang/PhNamed.java +++ b/eo-runtime/src/main/java/org/eolang/PhNamed.java @@ -30,6 +30,7 @@ * @since 0.17 */ @Versionized +@SuppressWarnings("PMD.TooManyMethods") final class PhNamed implements Phi { /** diff --git a/eo-runtime/src/main/java/org/eolang/PhOnce.java b/eo-runtime/src/main/java/org/eolang/PhOnce.java index 466d103e02..a5ce5f6214 100644 --- a/eo-runtime/src/main/java/org/eolang/PhOnce.java +++ b/eo-runtime/src/main/java/org/eolang/PhOnce.java @@ -33,6 +33,7 @@ * @since 0.1 */ @Versionized +@SuppressWarnings("PMD.TooManyMethods") class PhOnce implements Phi { /** diff --git a/eo-runtime/src/main/java/org/eolang/PhPackage.java b/eo-runtime/src/main/java/org/eolang/PhPackage.java index c79d9c1e8b..b505d11c64 100644 --- a/eo-runtime/src/main/java/org/eolang/PhPackage.java +++ b/eo-runtime/src/main/java/org/eolang/PhPackage.java @@ -35,6 +35,7 @@ * @since 0.22 */ @Versionized +@SuppressWarnings({"PMD.TooManyMethods", "PMD.ConstructorShouldDoInitialization"}) final class PhPackage implements Phi { /** diff --git a/eo-runtime/src/main/java/org/eolang/PhSafe.java b/eo-runtime/src/main/java/org/eolang/PhSafe.java index 3d3b716e5b..38e7dfafce 100644 --- a/eo-runtime/src/main/java/org/eolang/PhSafe.java +++ b/eo-runtime/src/main/java/org/eolang/PhSafe.java @@ -33,6 +33,7 @@ * @since 0.26 */ @Versionized +@SuppressWarnings("PMD.TooManyMethods") public final class PhSafe implements Phi { /** diff --git a/eo-runtime/src/main/java/org/eolang/PhTraced.java b/eo-runtime/src/main/java/org/eolang/PhTraced.java index e8d59f70af..035c9991fc 100644 --- a/eo-runtime/src/main/java/org/eolang/PhTraced.java +++ b/eo-runtime/src/main/java/org/eolang/PhTraced.java @@ -35,11 +35,13 @@ * @since 0.36 */ @Versionized +@SuppressWarnings("PMD.TooManyMethods") public final class PhTraced implements Phi { /** * Name of property that responsible for keeping max depth. */ + @SuppressWarnings("PMD.LongVariable") public static final String MAX_CAGE_RECURSION_DEPTH_PROPERTY_NAME = "EO_MAX_CAGE_RECURSION_DEPTH"; @@ -58,6 +60,7 @@ public final class PhTraced implements Phi { /** * Locator of encaged object. */ + @SuppressWarnings("PMD.AvoidFieldNameMatchingMethodName") private final Integer locator; /** diff --git a/eo-runtime/src/main/java/org/eolang/PhWrite.java b/eo-runtime/src/main/java/org/eolang/PhWrite.java index c4a28a18b1..bdbf06991f 100644 --- a/eo-runtime/src/main/java/org/eolang/PhWrite.java +++ b/eo-runtime/src/main/java/org/eolang/PhWrite.java @@ -52,6 +52,7 @@ public final class PhWrite extends PhDefault implements Atom { * @param attr Attribute name * @param ret Return value function */ + @SuppressWarnings("PMD.ConstructorOnlyInitializesOrCallOtherConstructors") public PhWrite( final Phi sigma, final String attr, diff --git a/eo-runtime/src/main/java/org/eolang/Phi.java b/eo-runtime/src/main/java/org/eolang/Phi.java index 3f4df95cd5..d1f676fde9 100644 --- a/eo-runtime/src/main/java/org/eolang/Phi.java +++ b/eo-runtime/src/main/java/org/eolang/Phi.java @@ -44,6 +44,7 @@ public interface Phi extends Term, Data { * @checkstyle ConstantNameCheck (5 lines) * @checkstyle AnonInnerLengthCheck (30 lines) */ + @SuppressWarnings("PMD.FieldNamingConventions") Phi Φ = new Phi() { /** * Default package. diff --git a/eo-runtime/src/main/java/org/eolang/SafeFunc.java b/eo-runtime/src/main/java/org/eolang/SafeFunc.java index ca0ebc9f7e..ff8feb14a7 100644 --- a/eo-runtime/src/main/java/org/eolang/SafeFunc.java +++ b/eo-runtime/src/main/java/org/eolang/SafeFunc.java @@ -47,18 +47,17 @@ class SafeFunc implements Supplier { } @Override + @SuppressWarnings({"PMD.AvoidCatchingGenericException", "PMD.AvoidRethrowingException"}) public T get() { try { return this.origin.call(); } catch (final InterruptedException ex) { Thread.currentThread().interrupt(); - throw new ExInterrupted(); - } catch (final ExAbstract ex) { - throw ex; + throw new ExInterrupted(ex); // @checkstyle IllegalCatchCheck (3 line) } catch (final RuntimeException ex) { throw ex; - } catch (final Throwable ex) { + } catch (final Exception ex) { throw new ExFailure( String.format( "Unexpected error '%s' of type %s", diff --git a/eo-runtime/src/main/java/org/eolang/Term.java b/eo-runtime/src/main/java/org/eolang/Term.java index d7273d89d9..03710277ac 100644 --- a/eo-runtime/src/main/java/org/eolang/Term.java +++ b/eo-runtime/src/main/java/org/eolang/Term.java @@ -42,6 +42,7 @@ public interface Term { * @return The expression in φ-calculus * @checkstyle MethodNameCheck (5 lines) */ + @SuppressWarnings("PMD.MethodNamingConventions") String φTerm(); } diff --git a/eo-runtime/src/main/java/org/eolang/UniverseSafe.java b/eo-runtime/src/main/java/org/eolang/UniverseSafe.java index aeaf9002c0..1c5bfaed18 100644 --- a/eo-runtime/src/main/java/org/eolang/UniverseSafe.java +++ b/eo-runtime/src/main/java/org/eolang/UniverseSafe.java @@ -40,6 +40,7 @@ * @checkstyle IllegalCatchCheck (200 lines) */ @Versionized +@SuppressWarnings("PMD.AvoidCatchingThrowable") public final class UniverseSafe implements Universe { /** diff --git a/eo-runtime/src/main/java/org/eolang/VerboseBytesAsString.java b/eo-runtime/src/main/java/org/eolang/VerboseBytesAsString.java index e4c4a3d66b..f84abb93fa 100644 --- a/eo-runtime/src/main/java/org/eolang/VerboseBytesAsString.java +++ b/eo-runtime/src/main/java/org/eolang/VerboseBytesAsString.java @@ -44,6 +44,7 @@ public final class VerboseBytesAsString implements Supplier { * Ctor. * @param data Data. */ + @SuppressWarnings("PMD.ArrayIsStoredDirectly") public VerboseBytesAsString(final byte[] data) { this.data = data; } @@ -81,6 +82,7 @@ public String get() { Arrays.toString(this.data), new String(this.data, StandardCharsets.UTF_8) ); + break; } return result; } From 8e82e95d3791c4e2ecbc5589266172b827abf399 Mon Sep 17 00:00:00 2001 From: Roman Korostinskiy <70313618+c71n93@users.noreply.github.com> Date: Mon, 6 May 2024 19:20:41 +0300 Subject: [PATCH 04/21] #3160 fix code duplication for DataizedTest and resolve some new PMD violations --- .../test/java/org/eolang/DataizedTest.java | 61 ++++++------------- .../test/java/org/eolang/SnippetTestCase.java | 54 ++++++++++------ .../test/java/org/eolang/XmirObjectTest.java | 6 +- 3 files changed, 57 insertions(+), 64 deletions(-) diff --git a/eo-runtime/src/test/java/org/eolang/DataizedTest.java b/eo-runtime/src/test/java/org/eolang/DataizedTest.java index c52013b11b..409775c188 100644 --- a/eo-runtime/src/test/java/org/eolang/DataizedTest.java +++ b/eo-runtime/src/test/java/org/eolang/DataizedTest.java @@ -35,6 +35,8 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; /** * Test case for {@link Dataized}. @@ -101,42 +103,9 @@ void logsWhenException() { ); } - @Test - void printsShortLogs() throws InterruptedException { - final Logger log = Logger.getLogger("printsShortLogs"); - final Level before = log.getLevel(); - log.setLevel(Level.ALL); - final List logs = new LinkedList<>(); - final Handler hnd = new Hnd(logs); - log.addHandler(hnd); - final Thread thread = new Thread( - () -> { - final String property = System.getProperty(DataizedTest.DATAIZATION_LOG); - System.getProperties().setProperty( - DataizedTest.DATAIZATION_LOG, - String.valueOf(1) - ); - final Phi phi = new PhiDec(Phi.Φ); - new Dataized(phi, log).take(); - if (property != null) { - System.getProperties().setProperty(DataizedTest.DATAIZATION_LOG, property); - } else { - System.clearProperty(DataizedTest.DATAIZATION_LOG); - } - }); - thread.start(); - thread.join(); - log.setLevel(before); - log.removeHandler(hnd); - MatcherAssert.assertThat( - AtCompositeTest.TO_ADD_MESSAGE, - logs.size(), - Matchers.equalTo(1) - ); - } - - @Test - void printsLongLogs() throws InterruptedException { + @ParameterizedTest + @ValueSource(ints = {1, 2}) + void printsShortLogs(final int level) throws InterruptedException { final Logger log = Logger.getLogger(Dataized.class.getName()); final Level before = log.getLevel(); log.setLevel(Level.ALL); @@ -148,7 +117,7 @@ void printsLongLogs() throws InterruptedException { final String property = System.getProperty(DataizedTest.DATAIZATION_LOG); System.getProperties().setProperty( DataizedTest.DATAIZATION_LOG, - String.valueOf(2) + String.valueOf(level) ); final Phi phi = new PhiDec(Phi.Φ); new Dataized(phi, log).take(); @@ -162,11 +131,19 @@ void printsLongLogs() throws InterruptedException { thread.join(); log.setLevel(before); log.removeHandler(hnd); - MatcherAssert.assertThat( - AtCompositeTest.TO_ADD_MESSAGE, - logs.size(), - Matchers.greaterThan(1) - ); + if (level == 1) { + MatcherAssert.assertThat( + "Number of log records should be 1 in case of short logs", + logs.size(), + Matchers.equalTo(1) + ); + } else if (level == 2) { + MatcherAssert.assertThat( + "Number of log records should be greater than 1 in case of long logs", + logs.size(), + Matchers.greaterThan(1) + ); + } } /** diff --git a/eo-runtime/src/test/java/org/eolang/SnippetTestCase.java b/eo-runtime/src/test/java/org/eolang/SnippetTestCase.java index 28465fc0ef..300ddaf96d 100755 --- a/eo-runtime/src/test/java/org/eolang/SnippetTestCase.java +++ b/eo-runtime/src/test/java/org/eolang/SnippetTestCase.java @@ -67,6 +67,22 @@ @ExtendWith(WeAreOnline.class) @SuppressWarnings({"JTCOP.RuleAllTestsHaveProductionClass", "JTCOP.RuleNotContainsTestWord"}) final class SnippetTestCase { + + /** + * True. + */ + private static final String TRUE = "true"; + + /** + * False. + */ + private static final String FALSE = "false"; + + /** + * UTF-8. + */ + private static final String UTF_8 = "UTF-8"; + @ParameterizedTest @Tag("slow") @ExtendWith(WeAreOnline.class) @@ -79,8 +95,8 @@ void runsAllSnippets(final String yml, final @TempDir Path temp) throws IOExcept new Farea(temp).together( f -> { f.properties() - .set("project.build.sourceEncoding", "UTF-8") - .set("project.reporting.outputEncoding", "UTF-8"); + .set("project.build.sourceEncoding", SnippetTestCase.UTF_8) + .set("project.reporting.outputEncoding", SnippetTestCase.UTF_8); SnippetTestCase.copySources(f, "src/main/eo"); f.files() .file(String.format("src/main/eo/%s", file)) @@ -98,7 +114,7 @@ void runsAllSnippets(final String yml, final @TempDir Path temp) throws IOExcept .phase("generate-sources") .goals("register", "assemble", "verify", "transpile") .configuration() - .set("failOnWarnings", "true"); + .set("failOnWarnings", SnippetTestCase.TRUE); f.build() .plugins() .append("org.codehaus.mojo", "exec-maven-plugin", "3.1.1") @@ -136,8 +152,8 @@ void runsTestsAfterPhiAndUnphi(final @TempDir Path temp) throws IOException { SnippetTestCase.copySources(f, "src/main"); SnippetTestCase.copySources(f, "src/test/eo"); f.properties() - .set("project.build.sourceEncoding", "UTF-8") - .set("project.reporting.outputEncoding", "UTF-8"); + .set("project.build.sourceEncoding", SnippetTestCase.UTF_8) + .set("project.reporting.outputEncoding", SnippetTestCase.UTF_8); f.dependencies().append( "net.sf.saxon", "Saxon-HE", @@ -170,7 +186,7 @@ void runsTestsAfterPhiAndUnphi(final @TempDir Path temp) throws IOException { .set("unphiMetas", new String[]{"+tests"}) .set("printSourcesDir", "${project.build.directory}/generated-eo-test/1-parse") .set("printOutputDir", "${project.basedir}/src/test/generated-eo") - .set("printReversed", "true"); + .set("printReversed", SnippetTestCase.TRUE); f.exec("clean", "compile"); final String phi = f.log(); MatcherAssert.assertThat( @@ -180,8 +196,8 @@ void runsTestsAfterPhiAndUnphi(final @TempDir Path temp) throws IOException { ); f.files().file("pom.xml").delete(); f.properties() - .set("project.build.sourceEncoding", "UTF-8") - .set("project.reporting.outputEncoding", "UTF-8"); + .set("project.build.sourceEncoding", SnippetTestCase.UTF_8) + .set("project.reporting.outputEncoding", SnippetTestCase.UTF_8); f.dependencies().append( "org.junit.jupiter", "junit-jupiter-api", @@ -207,10 +223,10 @@ void runsTestsAfterPhiAndUnphi(final @TempDir Path temp) throws IOException { .configuration() .set("foreign", "${project.basedir}/target/eo-foreign.csv") .set("foreignFormat", "csv") - .set("failOnWarning", "false") - .set("offline", "true") - .set("withRuntimeDependency", "false") - .set("placeBinariesThatHaveSources", "true"); + .set("failOnWarning", SnippetTestCase.FALSE) + .set("offline", SnippetTestCase.TRUE) + .set("withRuntimeDependency", SnippetTestCase.FALSE) + .set("placeBinariesThatHaveSources", SnippetTestCase.TRUE); f.build() .plugins() .append( @@ -230,17 +246,17 @@ void runsTestsAfterPhiAndUnphi(final @TempDir Path temp) throws IOException { .configuration() .set("foreign", "${project.basedir}/target/eo-foreign.csv") .set("foreignFormat", "csv") - .set("failOnWarning", "false") - .set("offline", "true") + .set("failOnWarning", SnippetTestCase.FALSE) + .set("offline", SnippetTestCase.TRUE) .set("scope", "test") .set("sourcesDir", "${project.basedir}/src/test/generated-eo") .set("targetDir", "${project.basedir}/target/eo-test") - .set("addSourcesRoot", "false") - .set("addTestSourcesRoot", "true") - .set("failOnWarning", "false") + .set("addSourcesRoot", SnippetTestCase.FALSE) + .set("addTestSourcesRoot", SnippetTestCase.TRUE) + .set("failOnWarning", SnippetTestCase.FALSE) .set("generatedDir", "${project.basedir}/target/generated-test-sources") - .set("withRuntimeDependency", "false") - .set("placeBinariesThatHaveSources", "true"); + .set("withRuntimeDependency", SnippetTestCase.FALSE) + .set("placeBinariesThatHaveSources", SnippetTestCase.TRUE); f.exec("clean", "test"); final String log = f.log(); Logger.debug(this, log); diff --git a/eo-runtime/src/test/java/org/eolang/XmirObjectTest.java b/eo-runtime/src/test/java/org/eolang/XmirObjectTest.java index b6e85faa58..d11f492a39 100644 --- a/eo-runtime/src/test/java/org/eolang/XmirObjectTest.java +++ b/eo-runtime/src/test/java/org/eolang/XmirObjectTest.java @@ -40,14 +40,14 @@ * * @since 0.38 */ -public class XmirObjectTest { +final class XmirObjectTest { @Test - public void annotatesOnlyPublicClasses() throws IOException { + void annotatesOnlyPublicClasses() throws IOException { final Set> clazzes = ClassPath.from(ClassLoader.getSystemClassLoader()) .getAllClasses() .stream() - .filter(clazz -> clazz.getPackageName().equals("EOorg.EOeolang")) + .filter(clazz -> "EOorg.EOeolang".equals(clazz.getPackageName())) .map(ClassPath.ClassInfo::load) .filter( clazz -> clazz.getSimpleName().startsWith("EO") From 029b7b23a31975fcbe030bdb90e6c82da1fa085c Mon Sep 17 00:00:00 2001 From: Roman Korostinskiy <70313618+c71n93@users.noreply.github.com> Date: Mon, 6 May 2024 19:32:14 +0300 Subject: [PATCH 05/21] #3160 add todo --- eo-runtime/pom.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/eo-runtime/pom.xml b/eo-runtime/pom.xml index 4c3704b47b..0e65beb4f8 100644 --- a/eo-runtime/pom.xml +++ b/eo-runtime/pom.xml @@ -329,6 +329,12 @@ SOFTWARE. qulice-maven-plugin + pmd:/src/main/java/EOorg/.* pmd:/src/test/java/EOorg/.* dependencies:org.eolang:eo-maven-plugin From aa4542d8d92ee08c35b7d1ad1527f33793ba4915 Mon Sep 17 00:00:00 2001 From: Roman Korostinskiy <70313618+c71n93@users.noreply.github.com> Date: Mon, 6 May 2024 20:30:29 +0300 Subject: [PATCH 06/21] #3160 get rid of parametrized test --- .../test/java/org/eolang/DataizedTest.java | 96 ++++++++++++------- 1 file changed, 64 insertions(+), 32 deletions(-) diff --git a/eo-runtime/src/test/java/org/eolang/DataizedTest.java b/eo-runtime/src/test/java/org/eolang/DataizedTest.java index 409775c188..c5dacdd7da 100644 --- a/eo-runtime/src/test/java/org/eolang/DataizedTest.java +++ b/eo-runtime/src/test/java/org/eolang/DataizedTest.java @@ -35,8 +35,6 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.ValueSource; /** * Test case for {@link Dataized}. @@ -49,7 +47,8 @@ final class DataizedTest { /** * System property for maximum dataization log level. */ - private static final String DATAIZATION_LOG = "max.dataization.log"; + @SuppressWarnings("PMD.LongVariable") + private static final String MAX_DATAIZATION_LOG_PROPERTY = "max.dataization.log"; @Test @Disabled @@ -103,45 +102,78 @@ void logsWhenException() { ); } - @ParameterizedTest - @ValueSource(ints = {1, 2}) - void printsShortLogs(final int level) throws InterruptedException { + @Test + void printsShortLogs() throws InterruptedException { + final Logger log = Logger.getLogger("printsShortLogs"); + final Level before = log.getLevel(); + log.setLevel(Level.ALL); + final List logs = new LinkedList<>(); + final Handler hnd = new Hnd(logs); + log.addHandler(hnd); + final Thread thread = new DataizedLoggerThread(log, 1); + thread.start(); + thread.join(); + log.setLevel(before); + log.removeHandler(hnd); + MatcherAssert.assertThat( + "Number of log records should be equal to 1 in the case of short logs", + logs.size(), + Matchers.equalTo(1) + ); + } + + @Test + void printsLongLogs() throws InterruptedException { final Logger log = Logger.getLogger(Dataized.class.getName()); final Level before = log.getLevel(); log.setLevel(Level.ALL); final List logs = new LinkedList<>(); final Handler hnd = new Hnd(logs); log.addHandler(hnd); - final Thread thread = new Thread( - () -> { - final String property = System.getProperty(DataizedTest.DATAIZATION_LOG); - System.getProperties().setProperty( - DataizedTest.DATAIZATION_LOG, - String.valueOf(level) - ); - final Phi phi = new PhiDec(Phi.Φ); - new Dataized(phi, log).take(); - if (property != null) { - System.getProperties().setProperty(DataizedTest.DATAIZATION_LOG, property); - } else { - System.clearProperty(DataizedTest.DATAIZATION_LOG); - } - }); + final Thread thread = new DataizedLoggerThread(log, 2); thread.start(); thread.join(); log.setLevel(before); log.removeHandler(hnd); - if (level == 1) { - MatcherAssert.assertThat( - "Number of log records should be 1 in case of short logs", - logs.size(), - Matchers.equalTo(1) - ); - } else if (level == 2) { - MatcherAssert.assertThat( - "Number of log records should be greater than 1 in case of long logs", - logs.size(), - Matchers.greaterThan(1) + MatcherAssert.assertThat( + "Number of log records should be greater than 1 the in case of long logs", + logs.size(), + Matchers.greaterThan(1) + ); + } + + /** + * Thread that logs dataization process with specified log level. + * @since 1.0 + */ + private static class DataizedLoggerThread extends Thread { + /** + * Ctor. + * + * @param logger Logger. + * @param level Log level. + */ + DataizedLoggerThread(final Logger logger, final int level) { + super( + () -> { + final String property = System.getProperty( + DataizedTest.MAX_DATAIZATION_LOG_PROPERTY + ); + System.getProperties().setProperty( + DataizedTest.MAX_DATAIZATION_LOG_PROPERTY, + String.valueOf(level) + ); + final Phi phi = new PhiDec(Phi.Φ); + new Dataized(phi, logger).take(); + if (property != null) { + System.getProperties().setProperty( + DataizedTest.MAX_DATAIZATION_LOG_PROPERTY, + property + ); + } else { + System.clearProperty(DataizedTest.MAX_DATAIZATION_LOG_PROPERTY); + } + } ); } } From db2d4d5ad3874cfcf7ed28cef232f3653780c39c Mon Sep 17 00:00:00 2001 From: Roman Korostinskiy <70313618+c71n93@users.noreply.github.com> Date: Mon, 6 May 2024 21:02:29 +0300 Subject: [PATCH 07/21] #3160 suppress false positive PMD.CloseResource --- eo-runtime/src/test/java/org/eolang/PhPackageTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/eo-runtime/src/test/java/org/eolang/PhPackageTest.java b/eo-runtime/src/test/java/org/eolang/PhPackageTest.java index 0aca154985..4b8d5bed22 100644 --- a/eo-runtime/src/test/java/org/eolang/PhPackageTest.java +++ b/eo-runtime/src/test/java/org/eolang/PhPackageTest.java @@ -157,6 +157,7 @@ void convertsToString() { } @Test + @SuppressWarnings("PMD.CloseResource") void findsAttributesConcurrently() throws InterruptedException { final int threads = Runtime.getRuntime().availableProcessors() + 10; final ExecutorService service = Executors.newFixedThreadPool(threads); From cf5db6ab3fd7ca6af72caa14985a12584a7212f5 Mon Sep 17 00:00:00 2001 From: Roman Korostinskiy <70313618+c71n93@users.noreply.github.com> Date: Mon, 6 May 2024 21:23:15 +0300 Subject: [PATCH 08/21] #3160 restart CI From 33b264a43cc5287ad24a5af19e97387296f9389e Mon Sep 17 00:00:00 2001 From: Roman Korostinskiy <70313618+c71n93@users.noreply.github.com> Date: Fri, 10 May 2024 10:56:55 +0300 Subject: [PATCH 09/21] #3160 set up file.encoding to UTF8 --- .github/workflows/mvn.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/mvn.yml b/.github/workflows/mvn.yml index 854bc6f863..a29711c744 100644 --- a/.github/workflows/mvn.yml +++ b/.github/workflows/mvn.yml @@ -21,6 +21,9 @@ # SOFTWARE. --- name: mvn +env: + JAVA_TOOL_OPTIONS: "-Dfile.encoding=UTF8" + JAVA_OPTS: "%JAVA_OPTS% -Dfile.encoding=UTF-8" on: push: branches: From 1286ee016529c8617ea7746ddaaa5a37633a0793 Mon Sep 17 00:00:00 2001 From: Roman Korostinskiy <70313618+c71n93@users.noreply.github.com> Date: Mon, 13 May 2024 11:24:43 +0300 Subject: [PATCH 10/21] #3160 remove file.encoding --- .github/workflows/mvn.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/mvn.yml b/.github/workflows/mvn.yml index a29711c744..854bc6f863 100644 --- a/.github/workflows/mvn.yml +++ b/.github/workflows/mvn.yml @@ -21,9 +21,6 @@ # SOFTWARE. --- name: mvn -env: - JAVA_TOOL_OPTIONS: "-Dfile.encoding=UTF8" - JAVA_OPTS: "%JAVA_OPTS% -Dfile.encoding=UTF-8" on: push: branches: From 5f15eb3eb4dfec5dc99009d8baf4dc689d79304b Mon Sep 17 00:00:00 2001 From: Roman Korostinskiy <70313618+c71n93@users.noreply.github.com> Date: Mon, 13 May 2024 11:52:01 +0300 Subject: [PATCH 11/21] #3160 restart CI From 058015a09c4b403b849c70c00a57c30634f999d1 Mon Sep 17 00:00:00 2001 From: Roman Korostinskiy <70313618+c71n93@users.noreply.github.com> Date: Mon, 13 May 2024 11:54:56 +0300 Subject: [PATCH 12/21] #3160 remove unnecessary import --- eo-runtime/src/test/java/org/eolang/MainTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/eo-runtime/src/test/java/org/eolang/MainTest.java b/eo-runtime/src/test/java/org/eolang/MainTest.java index 53cf92c0da..5ac67c0f90 100644 --- a/eo-runtime/src/test/java/org/eolang/MainTest.java +++ b/eo-runtime/src/test/java/org/eolang/MainTest.java @@ -32,7 +32,6 @@ import java.nio.charset.StandardCharsets; import org.hamcrest.MatcherAssert; import org.hamcrest.Matchers; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; /** From 380976e84018a3d5e13046b6c5ac90c504f3cc02 Mon Sep 17 00:00:00 2001 From: Roman Korostinskiy <70313618+c71n93@users.noreply.github.com> Date: Tue, 14 May 2024 15:49:19 +0300 Subject: [PATCH 13/21] #3160 shortened the variable name --- eo-runtime/src/test/java/org/eolang/DataizedTest.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/eo-runtime/src/test/java/org/eolang/DataizedTest.java b/eo-runtime/src/test/java/org/eolang/DataizedTest.java index 9af4b77e6e..eb267bda19 100644 --- a/eo-runtime/src/test/java/org/eolang/DataizedTest.java +++ b/eo-runtime/src/test/java/org/eolang/DataizedTest.java @@ -44,8 +44,7 @@ final class DataizedTest { /** * System property for maximum dataization log level. */ - @SuppressWarnings("PMD.LongVariable") - private static final String MAX_DATAIZATION_LOG_PROPERTY = "max.dataization.log"; + private static final String MAX_DATAIZATION = "max.dataization.log"; @Test void logsCorrectly() { @@ -152,21 +151,21 @@ private static class DataizedLoggerThread extends Thread { super( () -> { final String property = System.getProperty( - DataizedTest.MAX_DATAIZATION_LOG_PROPERTY + DataizedTest.MAX_DATAIZATION ); System.getProperties().setProperty( - DataizedTest.MAX_DATAIZATION_LOG_PROPERTY, + DataizedTest.MAX_DATAIZATION, String.valueOf(level) ); final Phi phi = new PhiDec(); new Dataized(phi, logger).take(); if (property != null) { System.getProperties().setProperty( - DataizedTest.MAX_DATAIZATION_LOG_PROPERTY, + DataizedTest.MAX_DATAIZATION, property ); } else { - System.clearProperty(DataizedTest.MAX_DATAIZATION_LOG_PROPERTY); + System.clearProperty(DataizedTest.MAX_DATAIZATION); } } ); From b2a049c42ce07c1bb45d31944e1d6b37bd5b58a7 Mon Sep 17 00:00:00 2001 From: Roman Korostinskiy <70313618+c71n93@users.noreply.github.com> Date: Tue, 14 May 2024 15:56:36 +0300 Subject: [PATCH 14/21] #3160 copy array instead of storing directly --- eo-runtime/src/main/java/org/eolang/BytesOf.java | 3 +-- eo-runtime/src/main/java/org/eolang/VerboseBytesAsString.java | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/eo-runtime/src/main/java/org/eolang/BytesOf.java b/eo-runtime/src/main/java/org/eolang/BytesOf.java index 593054a027..ec95ae4af8 100644 --- a/eo-runtime/src/main/java/org/eolang/BytesOf.java +++ b/eo-runtime/src/main/java/org/eolang/BytesOf.java @@ -45,9 +45,8 @@ public final class BytesOf implements Bytes { * Ctor. * @param data Data. */ - @SuppressWarnings("PMD.ArrayIsStoredDirectly") public BytesOf(final byte[] data) { - this.data = data; + this.data = Arrays.copyOf(data, data.length); } /** diff --git a/eo-runtime/src/main/java/org/eolang/VerboseBytesAsString.java b/eo-runtime/src/main/java/org/eolang/VerboseBytesAsString.java index f84abb93fa..c7cb05ebeb 100644 --- a/eo-runtime/src/main/java/org/eolang/VerboseBytesAsString.java +++ b/eo-runtime/src/main/java/org/eolang/VerboseBytesAsString.java @@ -44,9 +44,8 @@ public final class VerboseBytesAsString implements Supplier { * Ctor. * @param data Data. */ - @SuppressWarnings("PMD.ArrayIsStoredDirectly") public VerboseBytesAsString(final byte[] data) { - this.data = data; + this.data = Arrays.copyOf(data, data.length); } @Override From d3a83768c46b15d3112ec9ee24aa70bf03e0611b Mon Sep 17 00:00:00 2001 From: Roman Korostinskiy <70313618+c71n93@users.noreply.github.com> Date: Thu, 16 May 2024 13:08:11 +0300 Subject: [PATCH 15/21] #3160 resolve PMD.ConstructorShouldDoInitialization warning --- eo-runtime/src/main/java/org/eolang/PhDefault.java | 5 +++-- eo-runtime/src/main/java/org/eolang/PhPackage.java | 9 +++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/eo-runtime/src/main/java/org/eolang/PhDefault.java b/eo-runtime/src/main/java/org/eolang/PhDefault.java index 365eb2235e..3c1ed00624 100644 --- a/eo-runtime/src/main/java/org/eolang/PhDefault.java +++ b/eo-runtime/src/main/java/org/eolang/PhDefault.java @@ -42,7 +42,7 @@ * @checkstyle DesignForExtensionCheck (500 lines) */ @Versionized -@SuppressWarnings({"PMD.TooManyMethods", "PMD.ConstructorShouldDoInitialization", "PMD.GodClass"}) +@SuppressWarnings({"PMD.TooManyMethods", "PMD.GodClass"}) public class PhDefault implements Phi, Cloneable { /** * Vertices. @@ -74,7 +74,7 @@ public class PhDefault implements Phi, Cloneable { * Data. * @checkstyle VisibilityModifierCheck (2 lines) */ - private AtomicReference data = new AtomicReference<>(null); + private AtomicReference data; /** * Forma of it. @@ -96,6 +96,7 @@ public class PhDefault implements Phi, Cloneable { */ @SuppressWarnings("PMD.ConstructorOnlyInitializesOrCallOtherConstructors") public PhDefault() { + this.data = new AtomicReference<>(null); this.vertex = PhDefault.VTX.next(); this.form = this.getClass().getName(); this.attrs = new HashMap<>(0); diff --git a/eo-runtime/src/main/java/org/eolang/PhPackage.java b/eo-runtime/src/main/java/org/eolang/PhPackage.java index 265f56f3b9..7badbf4942 100644 --- a/eo-runtime/src/main/java/org/eolang/PhPackage.java +++ b/eo-runtime/src/main/java/org/eolang/PhPackage.java @@ -35,7 +35,7 @@ * @since 0.22 */ @Versionized -@SuppressWarnings({"PMD.TooManyMethods", "PMD.ConstructorShouldDoInitialization"}) +@SuppressWarnings("PMD.TooManyMethods") final class PhPackage implements Phi { /** @@ -46,9 +46,7 @@ final class PhPackage implements Phi { /** * All of them. */ - private final ThreadLocal> objects = ThreadLocal.withInitial( - () -> new ConcurrentHashMap<>(0) - ); + private final ThreadLocal> objects; /** * Ctor. @@ -56,6 +54,9 @@ final class PhPackage implements Phi { */ PhPackage(final String name) { this.pkg = name; + this.objects = ThreadLocal.withInitial( + () -> new ConcurrentHashMap<>(0) + ); } @Override From f4a0dd28f129229004f8131687a6efb5e6771078 Mon Sep 17 00:00:00 2001 From: Roman Korostinskiy <70313618+c71n93@users.noreply.github.com> Date: Thu, 16 May 2024 15:05:42 +0300 Subject: [PATCH 16/21] #3160 locatr --- eo-runtime/src/main/java/org/eolang/PhTraced.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/eo-runtime/src/main/java/org/eolang/PhTraced.java b/eo-runtime/src/main/java/org/eolang/PhTraced.java index 035c9991fc..6eb5980a4d 100644 --- a/eo-runtime/src/main/java/org/eolang/PhTraced.java +++ b/eo-runtime/src/main/java/org/eolang/PhTraced.java @@ -60,8 +60,7 @@ public final class PhTraced implements Phi { /** * Locator of encaged object. */ - @SuppressWarnings("PMD.AvoidFieldNameMatchingMethodName") - private final Integer locator; + private final Integer locatr; /** * Max depth of cage recursion. @@ -91,13 +90,13 @@ public PhTraced(final Phi object, final Integer locator) { */ public PhTraced(final Phi object, final Integer locator, final int depth) { this.object = object; - this.locator = locator; + this.locatr = locator; this.depth = depth; } @Override public Phi copy() { - return new PhTraced(this.object.copy(), this.locator); + return new PhTraced(this.object.copy(), this.locatr); } @Override @@ -191,13 +190,13 @@ public T get() { */ private Integer incrementCageCounter() { return PhTraced.DATAIZING_CAGES.get().compute( - PhTraced.this.locator, (key, counter) -> { + PhTraced.this.locatr, (key, counter) -> { final int ret = this.incremented(counter); if (ret > PhTraced.this.depth) { throw new ExFailure( "The cage %s with locator %d has reached the maximum nesting depth = %d", PhTraced.this.object, - PhTraced.this.locator, + PhTraced.this.locatr, PhTraced.this.depth ); } @@ -232,11 +231,11 @@ private void decrementCageCounter(final int incremented) { final int decremented = incremented - 1; if (decremented == 0) { PhTraced.DATAIZING_CAGES.get().remove( - PhTraced.this.locator + PhTraced.this.locatr ); } else { PhTraced.DATAIZING_CAGES.get().put( - PhTraced.this.locator, decremented + PhTraced.this.locatr, decremented ); } } From b63ec99243d1c5050256394582e9b942b1231ef9 Mon Sep 17 00:00:00 2001 From: Roman Korostinskiy <70313618+c71n93@users.noreply.github.com> Date: Thu, 16 May 2024 16:18:22 +0300 Subject: [PATCH 17/21] #3160 remove PhWrite --- .../src/main/java/org/eolang/PhWrite.java | 69 ------------------- 1 file changed, 69 deletions(-) delete mode 100644 eo-runtime/src/main/java/org/eolang/PhWrite.java diff --git a/eo-runtime/src/main/java/org/eolang/PhWrite.java b/eo-runtime/src/main/java/org/eolang/PhWrite.java deleted file mode 100644 index 70b20c5a9e..0000000000 --- a/eo-runtime/src/main/java/org/eolang/PhWrite.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2016-2024 Objectionary.com - * - * 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 NON-INFRINGEMENT. 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. - */ - -/* - * @checkstyle PackageNameCheck (4 lines) - */ - -package org.eolang; - -import java.util.function.Function; - -/** - * Object that writes other object to own \rho. - * @since 0.36.0 - */ -public final class PhWrite extends PhDefault implements Atom { - /** - * Attribute name. - */ - private final String attribute; - - /** - * Return value. - */ - private final Function value; - - /** - * Ctor. - * @param attr Attribute name - * @param ret Return value function - */ - @SuppressWarnings("PMD.ConstructorOnlyInitializesOrCallOtherConstructors") - public PhWrite( - final String attr, - final Function ret - ) { - this.attribute = attr; - this.add(this.attribute, new AtVoid(this.attribute)); - this.value = ret; - } - - @Override - public Phi lambda() { - final Phi rho = this.take(Attr.RHO); - rho.put(this.attribute, this.take(this.attribute)); - return this.value.apply(rho); - } -} From 88d82dec19f53d37fa383e2f81e23263d0724920 Mon Sep 17 00:00:00 2001 From: Roman Korostinskiy <70313618+c71n93@users.noreply.github.com> Date: Thu, 16 May 2024 17:05:24 +0300 Subject: [PATCH 18/21] #3160 add todo for refactoring --- eo-runtime/src/main/java/org/eolang/BytesOf.java | 5 +++++ eo-runtime/src/main/java/org/eolang/Data.java | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/eo-runtime/src/main/java/org/eolang/BytesOf.java b/eo-runtime/src/main/java/org/eolang/BytesOf.java index ec95ae4af8..af6260bd6d 100644 --- a/eo-runtime/src/main/java/org/eolang/BytesOf.java +++ b/eo-runtime/src/main/java/org/eolang/BytesOf.java @@ -31,6 +31,11 @@ * Bytes. * * @since 1.0 + * @todo #3160:90min This class requires refactoring. As a result of refactoring you should remove + * {@code @SuppressWarnings("PMD.GodClass")} from this class and + * {@code @SuppressWarnings("PMD.CognitiveComplexity")} from {@link BytesOf#shift} method. You can + * check description of this rules here + * pmd.github.io */ @Versionized @SuppressWarnings({"PMD.TooManyMethods", "PMD.GodClass"}) diff --git a/eo-runtime/src/main/java/org/eolang/Data.java b/eo-runtime/src/main/java/org/eolang/Data.java index e9c155a2fb..34d042fac0 100644 --- a/eo-runtime/src/main/java/org/eolang/Data.java +++ b/eo-runtime/src/main/java/org/eolang/Data.java @@ -197,6 +197,10 @@ private static Phi toPhi(final Object obj) { * @checkstyle JavaNCSSCheck (100 lines) * @checkstyle NestedIfDepthCheck (100 lines) * @checkstyle ModifiedControlVariableCheck (100 lines) + * @todo #3160:90min This method should be refactored because it has high cognitive + * complexity and other problems. All {@code @checkstyle} warnings suppression and + * {@code SuppressWarnings("PMD.WarningName")} annotations for this method should be + * removed as a result of refactoring. */ @SuppressWarnings({ "PMD.AvoidReassigningLoopVariables", From 2e6fade4bbee29520412e50731a01201abd0f833 Mon Sep 17 00:00:00 2001 From: Roman Korostinskiy <70313618+c71n93@users.noreply.github.com> Date: Thu, 16 May 2024 17:37:42 +0300 Subject: [PATCH 19/21] #3160 fix todo --- eo-runtime/src/main/java/org/eolang/Data.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/eo-runtime/src/main/java/org/eolang/Data.java b/eo-runtime/src/main/java/org/eolang/Data.java index 34d042fac0..877abcb13b 100644 --- a/eo-runtime/src/main/java/org/eolang/Data.java +++ b/eo-runtime/src/main/java/org/eolang/Data.java @@ -193,14 +193,14 @@ private static Phi toPhi(final Object obj) { * * @param str A string optionally containing standard java escape sequences. * @return The translated string - * @checkstyle CyclomaticComplexityCheck (100 lines) - * @checkstyle JavaNCSSCheck (100 lines) - * @checkstyle NestedIfDepthCheck (100 lines) - * @checkstyle ModifiedControlVariableCheck (100 lines) * @todo #3160:90min This method should be refactored because it has high cognitive * complexity and other problems. All {@code @checkstyle} warnings suppression and * {@code SuppressWarnings("PMD.WarningName")} annotations for this method should be * removed as a result of refactoring. + * @checkstyle CyclomaticComplexityCheck (100 lines) + * @checkstyle JavaNCSSCheck (100 lines) + * @checkstyle NestedIfDepthCheck (100 lines) + * @checkstyle ModifiedControlVariableCheck (100 lines) */ @SuppressWarnings({ "PMD.AvoidReassigningLoopVariables", From 72ce8c8b99583582399982dd712de077e2a143e7 Mon Sep 17 00:00:00 2001 From: Roman Korostinskiy <70313618+c71n93@users.noreply.github.com> Date: Mon, 27 May 2024 12:54:44 +0300 Subject: [PATCH 20/21] #3160 rename variable --- .../src/main/java/org/eolang/PhTraced.java | 6 ++---- .../test/java/EOorg/EOeolang/EOcageTest.java | 18 +++++++++--------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/eo-runtime/src/main/java/org/eolang/PhTraced.java b/eo-runtime/src/main/java/org/eolang/PhTraced.java index 6eb5980a4d..db9b5725ee 100644 --- a/eo-runtime/src/main/java/org/eolang/PhTraced.java +++ b/eo-runtime/src/main/java/org/eolang/PhTraced.java @@ -41,9 +41,7 @@ public final class PhTraced implements Phi { /** * Name of property that responsible for keeping max depth. */ - @SuppressWarnings("PMD.LongVariable") - public static final String - MAX_CAGE_RECURSION_DEPTH_PROPERTY_NAME = "EO_MAX_CAGE_RECURSION_DEPTH"; + public static final String RECURSION_THRESHOLD = "EO_MAX_CAGE_RECURSION_DEPTH"; /** * Cages that are currently being dataized. If one cage is being datazed, and @@ -77,7 +75,7 @@ public PhTraced(final Phi object, final Integer locator) { object, locator, Integer.parseInt( - System.getProperty(PhTraced.MAX_CAGE_RECURSION_DEPTH_PROPERTY_NAME, "100") + System.getProperty(PhTraced.RECURSION_THRESHOLD, "100") ) ); } diff --git a/eo-runtime/src/test/java/EOorg/EOeolang/EOcageTest.java b/eo-runtime/src/test/java/EOorg/EOeolang/EOcageTest.java index fb9684ceb8..d3ec0067fe 100644 --- a/eo-runtime/src/test/java/EOorg/EOeolang/EOcageTest.java +++ b/eo-runtime/src/test/java/EOorg/EOeolang/EOcageTest.java @@ -212,13 +212,13 @@ class RecursionTests { @BeforeEach void setDepth() { System.setProperty( - PhTraced.MAX_CAGE_RECURSION_DEPTH_PROPERTY_NAME, String.valueOf(MAX_DEPTH) + PhTraced.RECURSION_THRESHOLD, String.valueOf(MAX_DEPTH) ); } @AfterEach void clearDepth() { - System.clearProperty(PhTraced.MAX_CAGE_RECURSION_DEPTH_PROPERTY_NAME); + System.clearProperty(PhTraced.RECURSION_THRESHOLD); } @Test @@ -257,7 +257,7 @@ void doesNotThrowIfDataizesConcurrently() { @Test void rewritesItselfToItselfViaDummy() { System.setProperty( - PhTraced.MAX_CAGE_RECURSION_DEPTH_PROPERTY_NAME, "2" + PhTraced.RECURSION_THRESHOLD, "2" ); final Phi cage = EOcageTest.encaged( new PhWith(new EOcageTest.Dummy(), 0, new Data.ToPhi(1L)) @@ -295,8 +295,8 @@ void doesNotThrowExceptionIfSmallDepth() { () -> new Dataized(cage).take(), String.format( "We expect that dataizing of nested cage which recursion depth is less than property %s = %s does not throw %s", - PhTraced.MAX_CAGE_RECURSION_DEPTH_PROPERTY_NAME, - System.getProperty(PhTraced.MAX_CAGE_RECURSION_DEPTH_PROPERTY_NAME), + PhTraced.RECURSION_THRESHOLD, + System.getProperty(PhTraced.RECURSION_THRESHOLD), ExAbstract.class ) ); @@ -316,8 +316,8 @@ void doesNotThrowExceptionIfMaxDepth() { () -> new Dataized(cage).take(), String.format( "We expect that dataizing of nested cage which recursion depth is equal to property %s = %s does not throw %s", - PhTraced.MAX_CAGE_RECURSION_DEPTH_PROPERTY_NAME, - System.getProperty(PhTraced.MAX_CAGE_RECURSION_DEPTH_PROPERTY_NAME), + PhTraced.RECURSION_THRESHOLD, + System.getProperty(PhTraced.RECURSION_THRESHOLD), ExAbstract.class ) ); @@ -335,8 +335,8 @@ void throwsExceptionIfBigDepth() { () -> new Dataized(cage).take(), String.format( "We expect that dataizing of nested cage which recursion depth is more than property %s = %s does not throw %s", - PhTraced.MAX_CAGE_RECURSION_DEPTH_PROPERTY_NAME, - System.getProperty(PhTraced.MAX_CAGE_RECURSION_DEPTH_PROPERTY_NAME), + PhTraced.RECURSION_THRESHOLD, + System.getProperty(PhTraced.RECURSION_THRESHOLD), ExAbstract.class ) ); From df95e60478c5e6e774ae8b3da31925241e0c8b48 Mon Sep 17 00:00:00 2001 From: Roman Korostinskiy <70313618+c71n93@users.noreply.github.com> Date: Mon, 27 May 2024 13:11:11 +0300 Subject: [PATCH 21/21] #3160 shorten variable name --- .../src/main/java/org/eolang/PhTraced.java | 4 ++-- .../test/java/EOorg/EOeolang/EOcageTest.java | 18 +++++++++--------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/eo-runtime/src/main/java/org/eolang/PhTraced.java b/eo-runtime/src/main/java/org/eolang/PhTraced.java index db9b5725ee..5f906510d3 100644 --- a/eo-runtime/src/main/java/org/eolang/PhTraced.java +++ b/eo-runtime/src/main/java/org/eolang/PhTraced.java @@ -41,7 +41,7 @@ public final class PhTraced implements Phi { /** * Name of property that responsible for keeping max depth. */ - public static final String RECURSION_THRESHOLD = "EO_MAX_CAGE_RECURSION_DEPTH"; + public static final String RECURSION_LIMIT = "EO_MAX_CAGE_RECURSION_DEPTH"; /** * Cages that are currently being dataized. If one cage is being datazed, and @@ -75,7 +75,7 @@ public PhTraced(final Phi object, final Integer locator) { object, locator, Integer.parseInt( - System.getProperty(PhTraced.RECURSION_THRESHOLD, "100") + System.getProperty(PhTraced.RECURSION_LIMIT, "100") ) ); } diff --git a/eo-runtime/src/test/java/EOorg/EOeolang/EOcageTest.java b/eo-runtime/src/test/java/EOorg/EOeolang/EOcageTest.java index d3ec0067fe..e8d8ac4ae6 100644 --- a/eo-runtime/src/test/java/EOorg/EOeolang/EOcageTest.java +++ b/eo-runtime/src/test/java/EOorg/EOeolang/EOcageTest.java @@ -212,13 +212,13 @@ class RecursionTests { @BeforeEach void setDepth() { System.setProperty( - PhTraced.RECURSION_THRESHOLD, String.valueOf(MAX_DEPTH) + PhTraced.RECURSION_LIMIT, String.valueOf(MAX_DEPTH) ); } @AfterEach void clearDepth() { - System.clearProperty(PhTraced.RECURSION_THRESHOLD); + System.clearProperty(PhTraced.RECURSION_LIMIT); } @Test @@ -257,7 +257,7 @@ void doesNotThrowIfDataizesConcurrently() { @Test void rewritesItselfToItselfViaDummy() { System.setProperty( - PhTraced.RECURSION_THRESHOLD, "2" + PhTraced.RECURSION_LIMIT, "2" ); final Phi cage = EOcageTest.encaged( new PhWith(new EOcageTest.Dummy(), 0, new Data.ToPhi(1L)) @@ -295,8 +295,8 @@ void doesNotThrowExceptionIfSmallDepth() { () -> new Dataized(cage).take(), String.format( "We expect that dataizing of nested cage which recursion depth is less than property %s = %s does not throw %s", - PhTraced.RECURSION_THRESHOLD, - System.getProperty(PhTraced.RECURSION_THRESHOLD), + PhTraced.RECURSION_LIMIT, + System.getProperty(PhTraced.RECURSION_LIMIT), ExAbstract.class ) ); @@ -316,8 +316,8 @@ void doesNotThrowExceptionIfMaxDepth() { () -> new Dataized(cage).take(), String.format( "We expect that dataizing of nested cage which recursion depth is equal to property %s = %s does not throw %s", - PhTraced.RECURSION_THRESHOLD, - System.getProperty(PhTraced.RECURSION_THRESHOLD), + PhTraced.RECURSION_LIMIT, + System.getProperty(PhTraced.RECURSION_LIMIT), ExAbstract.class ) ); @@ -335,8 +335,8 @@ void throwsExceptionIfBigDepth() { () -> new Dataized(cage).take(), String.format( "We expect that dataizing of nested cage which recursion depth is more than property %s = %s does not throw %s", - PhTraced.RECURSION_THRESHOLD, - System.getProperty(PhTraced.RECURSION_THRESHOLD), + PhTraced.RECURSION_LIMIT, + System.getProperty(PhTraced.RECURSION_LIMIT), ExAbstract.class ) );