From 0c454289bcae39ae11b18629e954ad6fb2bf7452 Mon Sep 17 00:00:00 2001 From: sullis Date: Sat, 9 Apr 2022 15:56:04 -0700 Subject: [PATCH] refactor EclipseCollectionsCodeGenerator 1) simplify EclipseCollectionsCodeGenerator constructor parameters 2) add unit test for EclipseCollectionsCodeGenerator 3) verify that all templates produce valid Java source code 4) verify the generated file count --- .../maven/AbstractGenerateMojo.java | 8 +- eclipse-collections-code-generator/pom.xml | 22 +++++ .../EclipseCollectionsCodeGenerator.java | 14 ++- .../codegenerator/tools/FileUtils.java | 98 ++----------------- .../impl/bag/mutable/primitiveHashBag.stg | 2 + .../block/factory/primitivePredicates.stg | 2 + .../immutable/immutablePrimitiveArrayList.stg | 2 + .../impl/list/mutable/primitiveArrayList.stg | 2 + .../impl/set/mutable/primitiveHashSet.stg | 2 + .../immutablePrimitiveEmptyBagTest.stg | 2 + .../immutablePrimitiveHashBagTest.stg | 2 + .../immutablePrimitiveSingletonBagTest.stg | 2 + .../abstractMutablePrimitiveBagTestCase.stg | 2 + .../test/bag/mutable/primitiveHashBagTest.stg | 2 + .../mutable/synchronizedPrimitiveBagTest.stg | 2 + .../mutable/unmodifiablePrimitiveBagTest.stg | 2 + .../block/factory/primitivePredicatesTest.stg | 2 + ...ctImmutablePrimitiveCollectionTestCase.stg | 2 + ...ractMutablePrimitiveCollectionTestCase.stg | 2 + .../abstractPrimitiveIterableTestCase.stg | 2 + .../test/factory/primitiveBagsTest.stg | 2 + .../test/factory/primitiveListsTest.stg | 2 + .../test/factory/primitiveSetsTest.stg | 2 + .../test/factory/primitiveStacksTest.stg | 2 + .../lazy/lazyPrimitiveIterableAdapterTest.stg | 2 + .../test/lazy/primitiveSelectIterableTest.stg | 2 + .../test/lazy/primitiveTapIterableTest.stg | 2 + .../lazy/reversePrimitiveIterableTest.stg | 2 + ...abstractImmutablePrimitiveListTestCase.stg | 2 + .../immutablePrimitiveArrayListTest.stg | 2 + .../immutablePrimitiveEmptyListTest.stg | 2 + .../immutablePrimitiveSingletonListTest.stg | 2 + .../mutable/abstractPrimitiveListTestCase.stg | 2 + .../list/mutable/primitiveArrayListTest.stg | 2 + .../mutable/synchronizedPrimitiveListTest.stg | 2 + .../mutable/unmodifiablePrimitiveListTest.stg | 2 + .../mutable/abstractPrimitiveSetTestCase.stg | 2 + .../test/set/mutable/primitiveHashSetTest.stg | 2 + .../mutable/synchronizedPrimitiveSetTest.stg | 2 + .../mutable/unmodifiablePrimitiveSetTest.stg | 2 + .../stack/mutable/primitiveArrayStackTest.stg | 2 + .../synchronizedPrimitiveStackTest.stg | 2 + .../unmodifiablePrimitiveStackTest.stg | 2 + .../test/utility/lazyPrimitiveIterateTest.stg | 2 + .../codegenerator/BasicErrorListener.java | 37 +++++++ .../EclipseCollectionsCodeGeneratorTest.java | 83 ++++++++++++++++ 46 files changed, 236 insertions(+), 106 deletions(-) create mode 100644 eclipse-collections-code-generator/src/test/java/org/eclipse/collections/codegenerator/BasicErrorListener.java create mode 100644 eclipse-collections-code-generator/src/test/java/org/eclipse/collections/codegenerator/EclipseCollectionsCodeGeneratorTest.java diff --git a/eclipse-collections-code-generator-maven-plugin/src/main/java/org/eclipse/collections/codegenerator/maven/AbstractGenerateMojo.java b/eclipse-collections-code-generator-maven-plugin/src/main/java/org/eclipse/collections/codegenerator/maven/AbstractGenerateMojo.java index 572d3e2221..be54198826 100644 --- a/eclipse-collections-code-generator-maven-plugin/src/main/java/org/eclipse/collections/codegenerator/maven/AbstractGenerateMojo.java +++ b/eclipse-collections-code-generator-maven-plugin/src/main/java/org/eclipse/collections/codegenerator/maven/AbstractGenerateMojo.java @@ -11,10 +11,6 @@ package org.eclipse.collections.codegenerator.maven; import java.io.File; -import java.net.URL; -import java.net.URLClassLoader; -import java.util.Arrays; -import java.util.List; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; @@ -43,16 +39,14 @@ public void execute() throws MojoExecutionException this.getLog().info("Generating sources in " + this.mavenProject.getArtifactId() + " to " + this.getOutputDirectory()); } - List urls = Arrays.asList(((URLClassLoader) this.getClass().getClassLoader()).getURLs()); - boolean[] error = new boolean[1]; ErrorListener errorListener = string -> { this.getLog().error(string); error[0] = true; }; + EclipseCollectionsCodeGenerator codeGenerator = new EclipseCollectionsCodeGenerator( this.getTemplateDirectory(), - urls, errorListener, this.getOutputDirectory(), this.getFileExtension()); diff --git a/eclipse-collections-code-generator/pom.xml b/eclipse-collections-code-generator/pom.xml index 7301b6d126..406394b609 100644 --- a/eclipse-collections-code-generator/pom.xml +++ b/eclipse-collections-code-generator/pom.xml @@ -42,6 +42,28 @@ + + io.github.classgraph + classgraph + 4.8.146 + + + junit + junit + test + + + com.github.javaparser + javaparser-core + 3.24.2 + test + + + commons-io + commons-io + 2.11.0 + test + diff --git a/eclipse-collections-code-generator/src/main/java/org/eclipse/collections/codegenerator/EclipseCollectionsCodeGenerator.java b/eclipse-collections-code-generator/src/main/java/org/eclipse/collections/codegenerator/EclipseCollectionsCodeGenerator.java index 256c860fde..ba94d11c10 100644 --- a/eclipse-collections-code-generator/src/main/java/org/eclipse/collections/codegenerator/EclipseCollectionsCodeGenerator.java +++ b/eclipse-collections-code-generator/src/main/java/org/eclipse/collections/codegenerator/EclipseCollectionsCodeGenerator.java @@ -17,6 +17,7 @@ import java.nio.file.Paths; import java.util.List; import java.util.Objects; +import java.util.regex.Pattern; import java.util.zip.CRC32; import org.eclipse.collections.codegenerator.model.Primitive; @@ -27,8 +28,7 @@ public class EclipseCollectionsCodeGenerator { - private final String templateDirectory; - private final List classPathURLs; + private final Pattern resourcePattern; private final ErrorListener errorListener; private final File outputDirectory; private final String fileExtension; @@ -37,13 +37,12 @@ public class EclipseCollectionsCodeGenerator public EclipseCollectionsCodeGenerator( String templateDirectory, - List classPathURLs, ErrorListener errorListener, File outputDirectory, String fileExtension) { - this.templateDirectory = Objects.requireNonNull(templateDirectory); - this.classPathURLs = Objects.requireNonNull(classPathURLs); + Objects.requireNonNull(templateDirectory); + this.resourcePattern = Pattern.compile(templateDirectory + "/.*\\.stg"); this.errorListener = Objects.requireNonNull(errorListener); this.outputDirectory = Objects.requireNonNull(outputDirectory); this.fileExtension = Objects.requireNonNull(fileExtension); @@ -56,10 +55,9 @@ public EclipseCollectionsCodeGenerator( */ public int generateFiles() { - List allTemplateFilesFromClassPath = - FileUtils.getAllTemplateFilesFromClasspath(this.templateDirectory, this.classPathURLs); + List templateFiles = FileUtils.findTemplateFiles(this.resourcePattern); - for (URL url : allTemplateFilesFromClassPath) + for (URL url : templateFiles) { STGroupFile templateFile = new STGroupFile(url, "UTF-8", '<', '>'); if (!templateFile.isDefined("fileName")) diff --git a/eclipse-collections-code-generator/src/main/java/org/eclipse/collections/codegenerator/tools/FileUtils.java b/eclipse-collections-code-generator/src/main/java/org/eclipse/collections/codegenerator/tools/FileUtils.java index 20f237ce3b..e40673ea1c 100644 --- a/eclipse-collections-code-generator/src/main/java/org/eclipse/collections/codegenerator/tools/FileUtils.java +++ b/eclipse-collections-code-generator/src/main/java/org/eclipse/collections/codegenerator/tools/FileUtils.java @@ -12,17 +12,15 @@ import java.io.BufferedWriter; import java.io.File; -import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; -import java.net.URISyntaxException; import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; -import java.util.ArrayList; import java.util.List; -import java.util.jar.JarEntry; -import java.util.jar.JarInputStream; +import java.util.regex.Pattern; + +import io.github.classgraph.ClassGraph; public final class FileUtils { @@ -77,88 +75,11 @@ public static void writeToFile(String data, File outputFile, boolean outputFileM } } - public static List getAllTemplateFilesFromClasspath(String templateDirectory, List classPathURLs) - { - List files = new ArrayList<>(); - try - { - for (URL url : classPathURLs) - { - recurseURL(url, files, templateDirectory); - } - } - catch (IOException | URISyntaxException e) - { - throw new RuntimeException(e); - } - return files; - } - - private static void recurseURL(URL url, List files, String templateDirectory) throws URISyntaxException, IOException + public static List findTemplateFiles(Pattern resourcePattern) { - if ("file".equals(url.getProtocol())) - { - recurse(new File(url.toURI()), new File(url.toURI()), files, templateDirectory); - } - else - { - if (url.getPath().endsWith(".jar")) - { - JarInputStream stream = new JarInputStream(url.openStream()); - processJar(stream, files, templateDirectory); - stream.close(); - } - } - } - - private static void recurse(File rootDirectory, File file, List files, String templateDirectory) throws IOException - { - if (file.isDirectory()) - { - File[] children = file.listFiles(); - if (children != null) - { - for (File child : children) - { - recurse(rootDirectory, child, files, templateDirectory); - } - } - } - else - { - if (file.getName().endsWith(".jar")) - { - try (JarInputStream stream = new JarInputStream(new FileInputStream(file))) - { - processJar(stream, files, templateDirectory); - } - } - else - { - String rootPath = rootDirectory.getAbsolutePath(); - String filePath = file.getAbsolutePath(); - if (filePath.contains(templateDirectory) && !rootPath.equals(filePath) && isTemplateFile(filePath)) - { - files.add(new URL("file:" + filePath)); - } - } - } - } - - private static void processJar( - JarInputStream stream, - List files, - String templateDirectory) throws IOException - { - JarEntry entry; - while ((entry = stream.getNextJarEntry()) != null) - { - String entryName = entry.getName(); - if (isTemplateFile(entryName) && entryName.startsWith(templateDirectory)) - { - files.add(FileUtils.class.getClassLoader().getResource(entryName)); - } - } + return new ClassGraph().scan() + .getResourcesMatchingPattern(resourcePattern) + .getURLs(); } public static void createDirectory(File path) @@ -173,11 +94,6 @@ public static void createDirectory(File path) } } - private static boolean isTemplateFile(String filePath) - { - return filePath.endsWith(".stg"); - } - public static String readFile(Path path) { try diff --git a/eclipse-collections-code-generator/src/main/resources/impl/bag/mutable/primitiveHashBag.stg b/eclipse-collections-code-generator/src/main/resources/impl/bag/mutable/primitiveHashBag.stg index 8ec90f492a..1f0798c583 100644 --- a/eclipse-collections-code-generator/src/main/resources/impl/bag/mutable/primitiveHashBag.stg +++ b/eclipse-collections-code-generator/src/main/resources/impl/bag/mutable/primitiveHashBag.stg @@ -3,6 +3,8 @@ import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + targetPath() ::= "org/eclipse/collections/impl/bag/mutable/primitive" fileName(primitive) ::= "HashBag" diff --git a/eclipse-collections-code-generator/src/main/resources/impl/block/factory/primitivePredicates.stg b/eclipse-collections-code-generator/src/main/resources/impl/block/factory/primitivePredicates.stg index a42aeb3dd6..81f32792d7 100644 --- a/eclipse-collections-code-generator/src/main/resources/impl/block/factory/primitivePredicates.stg +++ b/eclipse-collections-code-generator/src/main/resources/impl/block/factory/primitivePredicates.stg @@ -3,6 +3,8 @@ import "primitiveEquals.stg" import "primitiveEqualsWithDelta.stg" import "specialPredicates.stg" +skipBoolean() ::= "true" + targetPath() ::= "org/eclipse/collections/impl/block/factory/primitive" fileName(primitive) ::= "Predicates" diff --git a/eclipse-collections-code-generator/src/main/resources/impl/list/immutable/immutablePrimitiveArrayList.stg b/eclipse-collections-code-generator/src/main/resources/impl/list/immutable/immutablePrimitiveArrayList.stg index f3c8c32c91..fc7c4ec754 100644 --- a/eclipse-collections-code-generator/src/main/resources/impl/list/immutable/immutablePrimitiveArrayList.stg +++ b/eclipse-collections-code-generator/src/main/resources/impl/list/immutable/immutablePrimitiveArrayList.stg @@ -3,6 +3,8 @@ import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + targetPath() ::= "org/eclipse/collections/impl/list/immutable/primitive" fileName(primitive) ::= "ImmutableArrayList" diff --git a/eclipse-collections-code-generator/src/main/resources/impl/list/mutable/primitiveArrayList.stg b/eclipse-collections-code-generator/src/main/resources/impl/list/mutable/primitiveArrayList.stg index 67883eb107..5c2f6cd783 100644 --- a/eclipse-collections-code-generator/src/main/resources/impl/list/mutable/primitiveArrayList.stg +++ b/eclipse-collections-code-generator/src/main/resources/impl/list/mutable/primitiveArrayList.stg @@ -3,6 +3,8 @@ import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + targetPath() ::= "org/eclipse/collections/impl/list/mutable/primitive" fileName(primitive) ::= "ArrayList" diff --git a/eclipse-collections-code-generator/src/main/resources/impl/set/mutable/primitiveHashSet.stg b/eclipse-collections-code-generator/src/main/resources/impl/set/mutable/primitiveHashSet.stg index 2df70d1f73..6ed9daefe3 100644 --- a/eclipse-collections-code-generator/src/main/resources/impl/set/mutable/primitiveHashSet.stg +++ b/eclipse-collections-code-generator/src/main/resources/impl/set/mutable/primitiveHashSet.stg @@ -3,6 +3,8 @@ import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + targetPath() ::= "org/eclipse/collections/impl/set/mutable/primitive" fileName(primitive) ::= "HashSet" diff --git a/eclipse-collections-code-generator/src/main/resources/test/bag/immutable/immutablePrimitiveEmptyBagTest.stg b/eclipse-collections-code-generator/src/main/resources/test/bag/immutable/immutablePrimitiveEmptyBagTest.stg index 7c92e3e8ea..dd5d837000 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/bag/immutable/immutablePrimitiveEmptyBagTest.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/bag/immutable/immutablePrimitiveEmptyBagTest.stg @@ -2,6 +2,8 @@ import "copyrightAndOthers.stg" import "primitiveEquals.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/bag/immutable/primitive" diff --git a/eclipse-collections-code-generator/src/main/resources/test/bag/immutable/immutablePrimitiveHashBagTest.stg b/eclipse-collections-code-generator/src/main/resources/test/bag/immutable/immutablePrimitiveHashBagTest.stg index 7b7be22296..0548722619 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/bag/immutable/immutablePrimitiveHashBagTest.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/bag/immutable/immutablePrimitiveHashBagTest.stg @@ -3,6 +3,8 @@ import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/bag/immutable/primitive" diff --git a/eclipse-collections-code-generator/src/main/resources/test/bag/immutable/immutablePrimitiveSingletonBagTest.stg b/eclipse-collections-code-generator/src/main/resources/test/bag/immutable/immutablePrimitiveSingletonBagTest.stg index 191478da38..dcf8063b8c 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/bag/immutable/immutablePrimitiveSingletonBagTest.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/bag/immutable/immutablePrimitiveSingletonBagTest.stg @@ -2,6 +2,8 @@ import "copyright.stg" import "primitiveEquals.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/bag/immutable/primitive" diff --git a/eclipse-collections-code-generator/src/main/resources/test/bag/mutable/abstractMutablePrimitiveBagTestCase.stg b/eclipse-collections-code-generator/src/main/resources/test/bag/mutable/abstractMutablePrimitiveBagTestCase.stg index 9f508b9b84..2eb5c46ddd 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/bag/mutable/abstractMutablePrimitiveBagTestCase.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/bag/mutable/abstractMutablePrimitiveBagTestCase.stg @@ -3,6 +3,8 @@ import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/bag/mutable/primitive" diff --git a/eclipse-collections-code-generator/src/main/resources/test/bag/mutable/primitiveHashBagTest.stg b/eclipse-collections-code-generator/src/main/resources/test/bag/mutable/primitiveHashBagTest.stg index ff8a320885..be317440fe 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/bag/mutable/primitiveHashBagTest.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/bag/mutable/primitiveHashBagTest.stg @@ -3,6 +3,8 @@ import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/bag/mutable/primitive" diff --git a/eclipse-collections-code-generator/src/main/resources/test/bag/mutable/synchronizedPrimitiveBagTest.stg b/eclipse-collections-code-generator/src/main/resources/test/bag/mutable/synchronizedPrimitiveBagTest.stg index 6be74a1519..4bedae465e 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/bag/mutable/synchronizedPrimitiveBagTest.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/bag/mutable/synchronizedPrimitiveBagTest.stg @@ -2,6 +2,8 @@ import "copyright.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/bag/mutable/primitive" diff --git a/eclipse-collections-code-generator/src/main/resources/test/bag/mutable/unmodifiablePrimitiveBagTest.stg b/eclipse-collections-code-generator/src/main/resources/test/bag/mutable/unmodifiablePrimitiveBagTest.stg index cd590d4996..8044800157 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/bag/mutable/unmodifiablePrimitiveBagTest.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/bag/mutable/unmodifiablePrimitiveBagTest.stg @@ -2,6 +2,8 @@ import "copyrightAndOthers.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/bag/mutable/primitive" diff --git a/eclipse-collections-code-generator/src/main/resources/test/block/factory/primitivePredicatesTest.stg b/eclipse-collections-code-generator/src/main/resources/test/block/factory/primitivePredicatesTest.stg index 1050b6af61..5f5dcb504f 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/block/factory/primitivePredicatesTest.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/block/factory/primitivePredicatesTest.stg @@ -1,6 +1,8 @@ import "copyright.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/block/factory/primitive" diff --git a/eclipse-collections-code-generator/src/main/resources/test/collection/immutable/abstractImmutablePrimitiveCollectionTestCase.stg b/eclipse-collections-code-generator/src/main/resources/test/collection/immutable/abstractImmutablePrimitiveCollectionTestCase.stg index d139ce197f..765fc583b2 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/collection/immutable/abstractImmutablePrimitiveCollectionTestCase.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/collection/immutable/abstractImmutablePrimitiveCollectionTestCase.stg @@ -3,6 +3,8 @@ import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/collection/immutable/primitive" diff --git a/eclipse-collections-code-generator/src/main/resources/test/collection/mutable/abstractMutablePrimitiveCollectionTestCase.stg b/eclipse-collections-code-generator/src/main/resources/test/collection/mutable/abstractMutablePrimitiveCollectionTestCase.stg index 69c907b9ad..3704268ac3 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/collection/mutable/abstractMutablePrimitiveCollectionTestCase.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/collection/mutable/abstractMutablePrimitiveCollectionTestCase.stg @@ -3,6 +3,8 @@ import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/collection/mutable/primitive" diff --git a/eclipse-collections-code-generator/src/main/resources/test/collection/mutable/abstractPrimitiveIterableTestCase.stg b/eclipse-collections-code-generator/src/main/resources/test/collection/mutable/abstractPrimitiveIterableTestCase.stg index a7d3fa002b..3695f68a38 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/collection/mutable/abstractPrimitiveIterableTestCase.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/collection/mutable/abstractPrimitiveIterableTestCase.stg @@ -3,6 +3,8 @@ import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/collection/mutable/primitive" diff --git a/eclipse-collections-code-generator/src/main/resources/test/factory/primitiveBagsTest.stg b/eclipse-collections-code-generator/src/main/resources/test/factory/primitiveBagsTest.stg index 057a726fef..0edcaf04c2 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/factory/primitiveBagsTest.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/factory/primitiveBagsTest.stg @@ -2,6 +2,8 @@ import "copyright.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/factory/primitive" diff --git a/eclipse-collections-code-generator/src/main/resources/test/factory/primitiveListsTest.stg b/eclipse-collections-code-generator/src/main/resources/test/factory/primitiveListsTest.stg index 388d0c416a..070f030e09 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/factory/primitiveListsTest.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/factory/primitiveListsTest.stg @@ -2,6 +2,8 @@ import "copyrightAndOthers.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/factory/primitive" diff --git a/eclipse-collections-code-generator/src/main/resources/test/factory/primitiveSetsTest.stg b/eclipse-collections-code-generator/src/main/resources/test/factory/primitiveSetsTest.stg index dc642fb468..9fef86946b 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/factory/primitiveSetsTest.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/factory/primitiveSetsTest.stg @@ -2,6 +2,8 @@ import "copyrightAndOthers.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/factory/primitive" diff --git a/eclipse-collections-code-generator/src/main/resources/test/factory/primitiveStacksTest.stg b/eclipse-collections-code-generator/src/main/resources/test/factory/primitiveStacksTest.stg index 5623ad899a..982d9d6883 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/factory/primitiveStacksTest.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/factory/primitiveStacksTest.stg @@ -2,6 +2,8 @@ import "copyright.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/factory/primitive" diff --git a/eclipse-collections-code-generator/src/main/resources/test/lazy/lazyPrimitiveIterableAdapterTest.stg b/eclipse-collections-code-generator/src/main/resources/test/lazy/lazyPrimitiveIterableAdapterTest.stg index 8731f64294..96764f01a5 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/lazy/lazyPrimitiveIterableAdapterTest.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/lazy/lazyPrimitiveIterableAdapterTest.stg @@ -3,6 +3,8 @@ import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/lazy/primitive" diff --git a/eclipse-collections-code-generator/src/main/resources/test/lazy/primitiveSelectIterableTest.stg b/eclipse-collections-code-generator/src/main/resources/test/lazy/primitiveSelectIterableTest.stg index 26b064bddb..e83ca22a7c 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/lazy/primitiveSelectIterableTest.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/lazy/primitiveSelectIterableTest.stg @@ -3,6 +3,8 @@ import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/lazy/primitive" diff --git a/eclipse-collections-code-generator/src/main/resources/test/lazy/primitiveTapIterableTest.stg b/eclipse-collections-code-generator/src/main/resources/test/lazy/primitiveTapIterableTest.stg index a56db31566..31f27daca4 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/lazy/primitiveTapIterableTest.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/lazy/primitiveTapIterableTest.stg @@ -3,6 +3,8 @@ import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/lazy/primitive" diff --git a/eclipse-collections-code-generator/src/main/resources/test/lazy/reversePrimitiveIterableTest.stg b/eclipse-collections-code-generator/src/main/resources/test/lazy/reversePrimitiveIterableTest.stg index 9ee5fa69ff..2787c76f20 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/lazy/reversePrimitiveIterableTest.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/lazy/reversePrimitiveIterableTest.stg @@ -2,6 +2,8 @@ import "copyright.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/lazy/primitive" diff --git a/eclipse-collections-code-generator/src/main/resources/test/list/immutable/abstractImmutablePrimitiveListTestCase.stg b/eclipse-collections-code-generator/src/main/resources/test/list/immutable/abstractImmutablePrimitiveListTestCase.stg index 4a6e6bfe69..0969969118 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/list/immutable/abstractImmutablePrimitiveListTestCase.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/list/immutable/abstractImmutablePrimitiveListTestCase.stg @@ -1,6 +1,8 @@ import "copyrightAndOthers.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/list/immutable/primitive" diff --git a/eclipse-collections-code-generator/src/main/resources/test/list/immutable/immutablePrimitiveArrayListTest.stg b/eclipse-collections-code-generator/src/main/resources/test/list/immutable/immutablePrimitiveArrayListTest.stg index 6627577811..de810f23b2 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/list/immutable/immutablePrimitiveArrayListTest.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/list/immutable/immutablePrimitiveArrayListTest.stg @@ -2,6 +2,8 @@ import "copyright.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/list/immutable/primitive" diff --git a/eclipse-collections-code-generator/src/main/resources/test/list/immutable/immutablePrimitiveEmptyListTest.stg b/eclipse-collections-code-generator/src/main/resources/test/list/immutable/immutablePrimitiveEmptyListTest.stg index 98ad5eebe3..28788185fe 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/list/immutable/immutablePrimitiveEmptyListTest.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/list/immutable/immutablePrimitiveEmptyListTest.stg @@ -1,6 +1,8 @@ import "copyrightAndOthers.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/list/immutable/primitive" diff --git a/eclipse-collections-code-generator/src/main/resources/test/list/immutable/immutablePrimitiveSingletonListTest.stg b/eclipse-collections-code-generator/src/main/resources/test/list/immutable/immutablePrimitiveSingletonListTest.stg index 6972b64550..c7b3a72109 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/list/immutable/immutablePrimitiveSingletonListTest.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/list/immutable/immutablePrimitiveSingletonListTest.stg @@ -1,6 +1,8 @@ import "copyright.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/list/immutable/primitive" diff --git a/eclipse-collections-code-generator/src/main/resources/test/list/mutable/abstractPrimitiveListTestCase.stg b/eclipse-collections-code-generator/src/main/resources/test/list/mutable/abstractPrimitiveListTestCase.stg index 7292662b00..3832f4e7ad 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/list/mutable/abstractPrimitiveListTestCase.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/list/mutable/abstractPrimitiveListTestCase.stg @@ -2,6 +2,8 @@ import "copyrightAndOthers.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/list/mutable/primitive" diff --git a/eclipse-collections-code-generator/src/main/resources/test/list/mutable/primitiveArrayListTest.stg b/eclipse-collections-code-generator/src/main/resources/test/list/mutable/primitiveArrayListTest.stg index 1e07730500..3c6b27c004 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/list/mutable/primitiveArrayListTest.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/list/mutable/primitiveArrayListTest.stg @@ -2,6 +2,8 @@ import "copyright.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/list/mutable/primitive" diff --git a/eclipse-collections-code-generator/src/main/resources/test/list/mutable/synchronizedPrimitiveListTest.stg b/eclipse-collections-code-generator/src/main/resources/test/list/mutable/synchronizedPrimitiveListTest.stg index 013765c4a7..a0b33e238b 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/list/mutable/synchronizedPrimitiveListTest.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/list/mutable/synchronizedPrimitiveListTest.stg @@ -2,6 +2,8 @@ import "copyright.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/list/mutable/primitive" diff --git a/eclipse-collections-code-generator/src/main/resources/test/list/mutable/unmodifiablePrimitiveListTest.stg b/eclipse-collections-code-generator/src/main/resources/test/list/mutable/unmodifiablePrimitiveListTest.stg index 5ab76ba90b..b98974a92a 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/list/mutable/unmodifiablePrimitiveListTest.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/list/mutable/unmodifiablePrimitiveListTest.stg @@ -2,6 +2,8 @@ import "copyrightAndOthers.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/list/mutable/primitive" diff --git a/eclipse-collections-code-generator/src/main/resources/test/set/mutable/abstractPrimitiveSetTestCase.stg b/eclipse-collections-code-generator/src/main/resources/test/set/mutable/abstractPrimitiveSetTestCase.stg index 32b4c8fb26..8f9f5ef402 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/set/mutable/abstractPrimitiveSetTestCase.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/set/mutable/abstractPrimitiveSetTestCase.stg @@ -1,6 +1,8 @@ import "copyrightAndOthers.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/set/mutable/primitive" diff --git a/eclipse-collections-code-generator/src/main/resources/test/set/mutable/primitiveHashSetTest.stg b/eclipse-collections-code-generator/src/main/resources/test/set/mutable/primitiveHashSetTest.stg index e8d8a3c8be..1739a73d14 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/set/mutable/primitiveHashSetTest.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/set/mutable/primitiveHashSetTest.stg @@ -1,6 +1,8 @@ import "copyright.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/set/mutable/primitive" diff --git a/eclipse-collections-code-generator/src/main/resources/test/set/mutable/synchronizedPrimitiveSetTest.stg b/eclipse-collections-code-generator/src/main/resources/test/set/mutable/synchronizedPrimitiveSetTest.stg index 0259a59e61..667bf4e125 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/set/mutable/synchronizedPrimitiveSetTest.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/set/mutable/synchronizedPrimitiveSetTest.stg @@ -2,6 +2,8 @@ import "copyright.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/set/mutable/primitive" diff --git a/eclipse-collections-code-generator/src/main/resources/test/set/mutable/unmodifiablePrimitiveSetTest.stg b/eclipse-collections-code-generator/src/main/resources/test/set/mutable/unmodifiablePrimitiveSetTest.stg index 6661b244dc..22c9704585 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/set/mutable/unmodifiablePrimitiveSetTest.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/set/mutable/unmodifiablePrimitiveSetTest.stg @@ -2,6 +2,8 @@ import "copyrightAndOthers.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/set/mutable/primitive" diff --git a/eclipse-collections-code-generator/src/main/resources/test/stack/mutable/primitiveArrayStackTest.stg b/eclipse-collections-code-generator/src/main/resources/test/stack/mutable/primitiveArrayStackTest.stg index dd13c02fda..6cb3fa1fcb 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/stack/mutable/primitiveArrayStackTest.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/stack/mutable/primitiveArrayStackTest.stg @@ -2,6 +2,8 @@ import "copyright.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/stack/mutable/primitive" diff --git a/eclipse-collections-code-generator/src/main/resources/test/stack/mutable/synchronizedPrimitiveStackTest.stg b/eclipse-collections-code-generator/src/main/resources/test/stack/mutable/synchronizedPrimitiveStackTest.stg index 7e68b106be..d7358faa39 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/stack/mutable/synchronizedPrimitiveStackTest.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/stack/mutable/synchronizedPrimitiveStackTest.stg @@ -2,6 +2,8 @@ import "copyright.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/stack/mutable/primitive" diff --git a/eclipse-collections-code-generator/src/main/resources/test/stack/mutable/unmodifiablePrimitiveStackTest.stg b/eclipse-collections-code-generator/src/main/resources/test/stack/mutable/unmodifiablePrimitiveStackTest.stg index a02230b850..28fbfb6006 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/stack/mutable/unmodifiablePrimitiveStackTest.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/stack/mutable/unmodifiablePrimitiveStackTest.stg @@ -2,6 +2,8 @@ import "copyright.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/stack/mutable/primitive" diff --git a/eclipse-collections-code-generator/src/main/resources/test/utility/lazyPrimitiveIterateTest.stg b/eclipse-collections-code-generator/src/main/resources/test/utility/lazyPrimitiveIterateTest.stg index 78745bf0e8..8e367f6021 100644 --- a/eclipse-collections-code-generator/src/main/resources/test/utility/lazyPrimitiveIterateTest.stg +++ b/eclipse-collections-code-generator/src/main/resources/test/utility/lazyPrimitiveIterateTest.stg @@ -1,6 +1,8 @@ import "copyrightAndOthers.stg" import "primitiveLiteral.stg" +skipBoolean() ::= "true" + isTest() ::= "true" targetPath() ::= "org/eclipse/collections/impl/utility/primitive" diff --git a/eclipse-collections-code-generator/src/test/java/org/eclipse/collections/codegenerator/BasicErrorListener.java b/eclipse-collections-code-generator/src/test/java/org/eclipse/collections/codegenerator/BasicErrorListener.java new file mode 100644 index 0000000000..e601aeff32 --- /dev/null +++ b/eclipse-collections-code-generator/src/test/java/org/eclipse/collections/codegenerator/BasicErrorListener.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2022 Goldman Sachs and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v. 1.0 which accompany this distribution. + * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + */ + +package org.eclipse.collections.codegenerator; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +class BasicErrorListener implements ErrorListener +{ + private final List errors = Collections.synchronizedList(new ArrayList()); + + @Override + public void error(String errorMessage) + { + errors.add(errorMessage); + } + + public boolean hasErrors() + { + return errors.size() > 0; + } + + @Override + public String toString() + { + return String.valueOf(errors); + } +} diff --git a/eclipse-collections-code-generator/src/test/java/org/eclipse/collections/codegenerator/EclipseCollectionsCodeGeneratorTest.java b/eclipse-collections-code-generator/src/test/java/org/eclipse/collections/codegenerator/EclipseCollectionsCodeGeneratorTest.java new file mode 100644 index 0000000000..e7b5806bff --- /dev/null +++ b/eclipse-collections-code-generator/src/test/java/org/eclipse/collections/codegenerator/EclipseCollectionsCodeGeneratorTest.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2022 Goldman Sachs and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v. 1.0 which accompany this distribution. + * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + */ + +package org.eclipse.collections.codegenerator; + +import java.io.File; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.util.Collection; + +import com.github.javaparser.JavaParser; +import com.github.javaparser.ParseResult; +import com.github.javaparser.ParserConfiguration; +import com.github.javaparser.ast.CompilationUnit; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +public class EclipseCollectionsCodeGeneratorTest +{ + @Test + public void validateApiTemplates() throws Exception + { + validateTemplates("api", 1338); + } + + @Test + public void validateImplTemplates() throws Exception + { + validateTemplates("impl", 1469); + } + + @Test + public void validateTestTemplates() throws Exception + { + validateTemplates("test", 2342); + } + + private static void validateTemplates(String templateDirectory, int expectedFileCount) throws Exception + { + BasicErrorListener errorListener = new BasicErrorListener(); + File outputDirectory = Files.createTempDirectory("temp-").toFile(); + outputDirectory.deleteOnExit(); + EclipseCollectionsCodeGenerator generator = new EclipseCollectionsCodeGenerator( + templateDirectory, + errorListener, + outputDirectory, + ".java"); + int fileCount = generator.generateFiles(); + assertEquals(expectedFileCount, fileCount); + assertFalse(String.valueOf(errorListener), errorListener.hasErrors()); + String[] extensions = new String[]{"java"}; + Collection javaFiles = org.apache.commons.io.FileUtils.listFiles(outputDirectory, extensions, true); + assertEquals(expectedFileCount, javaFiles.size()); + for (File javaFile: javaFiles) + { + assertValidJavaSourceFile(javaFile); + } + } + + private static void assertValidJavaSourceFile(File file) throws Exception + { + assertTrue(file.exists()); + assertTrue(file.canRead()); + assertTrue(file.length() > 0); + ParserConfiguration config = new ParserConfiguration(); + config.setLanguageLevel(ParserConfiguration.LanguageLevel.JAVA_8); + JavaParser parser = new JavaParser(config); + String code = new String(Files.readAllBytes(file.toPath()), StandardCharsets.UTF_8); + ParseResult parseResult = parser.parse(code); + assertTrue(String.valueOf(parseResult.getProblems()) + "\n" + code, + parseResult.isSuccessful()); + } +}