diff --git a/.codacy.yml b/.codacy.yml index 61e804e4b7..6dff37e697 100644 --- a/.codacy.yml +++ b/.codacy.yml @@ -6,3 +6,4 @@ exclude_paths: - "eo-runtime/src/main/java/EOorg/EOeolang/EOmalloc$EOof$EOallocated$EOread.java" - "eo-runtime/src/main/java/EOorg/EOeolang/EOmalloc$EOof$EOallocated$EOwrite.java" - "eo-runtime/src/test/java/EOorg/EOeolang/EOmallocTest.java" + - "eo-runtime/src/test/java/EOorg/EOeolang/EoClassesArePublicTest.java" diff --git a/eo-runtime/pom.xml b/eo-runtime/pom.xml index f7febb73c4..0f62a38d47 100644 --- a/eo-runtime/pom.xml +++ b/eo-runtime/pom.xml @@ -140,6 +140,11 @@ SOFTWARE. test + + com.google.guava + guava + test + diff --git a/eo-runtime/src/main/java/EOorg/EOeolang/EOcage$EOencaged$EOencage.java b/eo-runtime/src/main/java/EOorg/EOeolang/EOcage$EOencaged$EOencage.java index 53032e2f9a..2cd8a46b57 100644 --- a/eo-runtime/src/main/java/EOorg/EOeolang/EOcage$EOencaged$EOencage.java +++ b/eo-runtime/src/main/java/EOorg/EOeolang/EOcage$EOencaged$EOencage.java @@ -44,7 +44,7 @@ */ @Versionized @XmirObject(oname = "cage.encaged.encage") -final class EOcage$EOencaged$EOencage extends PhDefault implements Atom { +public final class EOcage$EOencaged$EOencage extends PhDefault implements Atom { /** * Ctor. * @param sigma Sigma diff --git "a/eo-runtime/src/main/java/EOorg/EOeolang/EOcage$EOencaged$EO\317\206.java" "b/eo-runtime/src/main/java/EOorg/EOeolang/EOcage$EOencaged$EO\317\206.java" index cd24460b54..8db4c61167 100644 --- "a/eo-runtime/src/main/java/EOorg/EOeolang/EOcage$EOencaged$EO\317\206.java" +++ "b/eo-runtime/src/main/java/EOorg/EOeolang/EOcage$EOencaged$EO\317\206.java" @@ -43,7 +43,7 @@ */ @Versionized @XmirObject(oname = "cage.encaged.@") -final class EOcage$EOencaged$EOφ extends PhDefault implements Atom { +public final class EOcage$EOencaged$EOφ extends PhDefault implements Atom { /** * Ctor. * @param sigma Sigma diff --git "a/eo-runtime/src/main/java/EOorg/EOeolang/EOcage$EO\317\206.java" "b/eo-runtime/src/main/java/EOorg/EOeolang/EOcage$EO\317\206.java" index 54b390702e..57fc77b535 100644 --- "a/eo-runtime/src/main/java/EOorg/EOeolang/EOcage$EO\317\206.java" +++ "b/eo-runtime/src/main/java/EOorg/EOeolang/EOcage$EO\317\206.java" @@ -42,7 +42,7 @@ */ @Versionized @XmirObject(oname = "cage.@") -final class EOcage$EOφ extends PhDefault implements Atom { +public final class EOcage$EOφ extends PhDefault implements Atom { /** * Ctor. * @param sigma Sigma diff --git a/eo-runtime/src/main/java/EOorg/EOeolang/EOio/Input.java b/eo-runtime/src/main/java/EOorg/EOeolang/EOio/Input.java index 97a01b0eea..619fc1e24c 100644 --- a/eo-runtime/src/main/java/EOorg/EOeolang/EOio/Input.java +++ b/eo-runtime/src/main/java/EOorg/EOeolang/EOio/Input.java @@ -39,7 +39,7 @@ * @since 0.28.0 */ @Versionized -public final class Input { +final class Input { /** * Default input. */ diff --git a/eo-runtime/src/main/java/EOorg/EOeolang/EOmalloc$EOof$EOallocated$EOread.java b/eo-runtime/src/main/java/EOorg/EOeolang/EOmalloc$EOof$EOallocated$EOread.java index 5f9ff39c03..2f4ff9bcb3 100644 --- a/eo-runtime/src/main/java/EOorg/EOeolang/EOmalloc$EOof$EOallocated$EOread.java +++ b/eo-runtime/src/main/java/EOorg/EOeolang/EOmalloc$EOof$EOallocated$EOread.java @@ -45,7 +45,7 @@ */ @Versionized @XmirObject(oname = "malloc.of.allocated.read") -final class EOmalloc$EOof$EOallocated$EOread extends PhDefault implements Atom { +public final class EOmalloc$EOof$EOallocated$EOread extends PhDefault implements Atom { /** * Ctor. * @param sigma Sigma diff --git a/eo-runtime/src/main/java/EOorg/EOeolang/EOmalloc$EOof$EOallocated$EOwrite.java b/eo-runtime/src/main/java/EOorg/EOeolang/EOmalloc$EOof$EOallocated$EOwrite.java index ba97da96ad..61fd877b05 100644 --- a/eo-runtime/src/main/java/EOorg/EOeolang/EOmalloc$EOof$EOallocated$EOwrite.java +++ b/eo-runtime/src/main/java/EOorg/EOeolang/EOmalloc$EOof$EOallocated$EOwrite.java @@ -46,7 +46,7 @@ */ @Versionized @XmirObject(oname = "malloc.of.allocated.write") -final class EOmalloc$EOof$EOallocated$EOwrite extends PhDefault implements Atom { +public final class EOmalloc$EOof$EOallocated$EOwrite extends PhDefault implements Atom { /** * Ctor. * @param sigma Sigma diff --git "a/eo-runtime/src/main/java/EOorg/EOeolang/EOmalloc$EOof$EO\317\206.java" "b/eo-runtime/src/main/java/EOorg/EOeolang/EOmalloc$EOof$EO\317\206.java" index 11a3844fec..add7ab9fef 100644 --- "a/eo-runtime/src/main/java/EOorg/EOeolang/EOmalloc$EOof$EO\317\206.java" +++ "b/eo-runtime/src/main/java/EOorg/EOeolang/EOmalloc$EOof$EO\317\206.java" @@ -44,7 +44,7 @@ */ @Versionized @XmirObject(oname = "malloc.of.@") -final class EOmalloc$EOof$EOφ extends PhDefault implements Atom { +public final class EOmalloc$EOof$EOφ extends PhDefault implements Atom { /** * Ctor. * @param sigma Sigma diff --git a/eo-runtime/src/test/java/EOorg/EOeolang/EOfailed.java b/eo-runtime/src/test/java/EOorg/EOeolang/EOfailed.java index 8421c167a7..acab47730c 100644 --- a/eo-runtime/src/test/java/EOorg/EOeolang/EOfailed.java +++ b/eo-runtime/src/test/java/EOorg/EOeolang/EOfailed.java @@ -40,5 +40,5 @@ "JTCOP.RuleCorrectTestName", "JTCOP.RuleInheritanceInTests" }) -final class EOfailed extends PhDefault { +public final class EOfailed extends PhDefault { } diff --git a/eo-runtime/src/test/java/EOorg/EOeolang/EoClassesArePublicTest.java b/eo-runtime/src/test/java/EOorg/EOeolang/EoClassesArePublicTest.java new file mode 100644 index 0000000000..ebe4c05523 --- /dev/null +++ b/eo-runtime/src/test/java/EOorg/EOeolang/EoClassesArePublicTest.java @@ -0,0 +1,77 @@ +/* + * 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 (10 lines) + */ +package EOorg.EOeolang; + +import com.google.common.reflect.ClassPath; +import com.jcabi.log.Logger; +import java.io.IOException; +import java.lang.reflect.Modifier; +import java.util.Set; +import java.util.stream.Collectors; +import org.eolang.Phi; +import org.hamcrest.MatcherAssert; +import org.hamcrest.Matchers; +import org.junit.jupiter.api.Test; + +/** + * Test that all EO.. classes are public. + * @since 0.38 + */ +@SuppressWarnings("JTCOP.RuleAllTestsHaveProductionClass") +public class EoClassesArePublicTest { + + @Test + @SuppressWarnings("JTCOP.RulePresentTense") + public void arePublic() throws IOException { + final Set> clazzes = ClassPath.from(ClassLoader.getSystemClassLoader()) + .getAllClasses() + .stream() + .filter(clazz -> clazz.getPackageName().equals("EOorg.EOeolang")) + .map(ClassPath.ClassInfo::load) + .filter(EoClassesArePublicTest::isEoClass) + .collect(Collectors.toSet()); + assert !clazzes.isEmpty(); + Logger.info(this.getClass(), "Found %d EO classes", clazzes.size()); + MatcherAssert.assertThat( + "All EO.. classes should be public", + clazzes.stream() + .filter(clazz -> !Modifier.isPublic(clazz.getModifiers())) + .collect(Collectors.toList()), + Matchers.empty() + ); + } + + /** + * Is EO.. class and is instance of {@link Phi}. + * @param clazz Class. + * @return True if is. + */ + private static boolean isEoClass(final Class clazz) { + return clazz.getSimpleName().startsWith("EO") + && Phi.class.isAssignableFrom(clazz); + } +}