From f9000bcd5da5cd7ecac04925535fa38717603c95 Mon Sep 17 00:00:00 2001 From: Rinat Gatyatullin Date: Thu, 3 Mar 2022 13:41:06 -0500 Subject: [PATCH] Add primitive Stack factories in API. Closes #1207. Signed-off-by: Rinat Gatyatullin --- .../factory/stack/primitive/package-info.java | 14 ++++++ .../api/factory/primitiveStacksAPI.stg | 40 +++++++++++++++++ .../immutablePrimitiveStackFactoryImpl.stg | 4 +- .../mutablePrimitiveStackFactoryImpl.stg | 4 +- .../serviceImmutablePrimitiveStackFactory.stg | 11 +++++ .../serviceMutablePrimitiveStackFactory.stg | 11 +++++ .../test/factory/primitiveStacksTest.stg | 43 ++++++++++++++++++- 7 files changed, 122 insertions(+), 5 deletions(-) create mode 100644 eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/stack/primitive/package-info.java create mode 100644 eclipse-collections-code-generator/src/main/resources/api/factory/primitiveStacksAPI.stg create mode 100644 eclipse-collections-code-generator/src/main/resources/services/serviceImmutablePrimitiveStackFactory.stg create mode 100644 eclipse-collections-code-generator/src/main/resources/services/serviceMutablePrimitiveStackFactory.stg diff --git a/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/stack/primitive/package-info.java b/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/stack/primitive/package-info.java new file mode 100644 index 0000000000..e965b65b34 --- /dev/null +++ b/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/stack/primitive/package-info.java @@ -0,0 +1,14 @@ +/* + * 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. + */ + +/** + * This package contains factory API for creating primitive stack instances. + */ +package org.eclipse.collections.api.factory.stack.primitive; diff --git a/eclipse-collections-code-generator/src/main/resources/api/factory/primitiveStacksAPI.stg b/eclipse-collections-code-generator/src/main/resources/api/factory/primitiveStacksAPI.stg new file mode 100644 index 0000000000..68727af998 --- /dev/null +++ b/eclipse-collections-code-generator/src/main/resources/api/factory/primitiveStacksAPI.stg @@ -0,0 +1,40 @@ +import "copyrightAndOthers.stg" + +targetPath() ::= "org/eclipse/collections/api/factory/primitive" + +fileName(primitive) ::= "Stacks" + +class(primitive) ::= << + +>> + +body(type, name) ::= << + + +package org.eclipse.collections.api.factory.primitive; + +import org.eclipse.collections.api.factory.ServiceLoaderUtils; +import org.eclipse.collections.api.factory.stack.primitive.ImmutableStackFactory; +import org.eclipse.collections.api.factory.stack.primitive.MutableStackFactory; + +/** + * Stacks is a static utility for creating {@link ImmutableStackFactory} and {@link MutableStackFactory}. + * This file was automatically generated from template file primitiveStacksAPI.stg. + * + * @since 11.1. + */ +@SuppressWarnings("ConstantNamingConvention") +public final class Stacks +{ + public static final ImmutableStackFactory immutable = + ServiceLoaderUtils.loadServiceClass(ImmutableStackFactory.class); + public static final MutableStackFactory mutable = + ServiceLoaderUtils.loadServiceClass(MutableStackFactory.class); + + private Stacks() + { + throw new AssertionError("Suppress default constructor for noninstantiability"); + } +} + +>> diff --git a/eclipse-collections-code-generator/src/main/resources/impl/stack/immutable/immutablePrimitiveStackFactoryImpl.stg b/eclipse-collections-code-generator/src/main/resources/impl/stack/immutable/immutablePrimitiveStackFactoryImpl.stg index e7852552ff..1f38966cae 100644 --- a/eclipse-collections-code-generator/src/main/resources/impl/stack/immutable/immutablePrimitiveStackFactoryImpl.stg +++ b/eclipse-collections-code-generator/src/main/resources/impl/stack/immutable/immutablePrimitiveStackFactoryImpl.stg @@ -25,9 +25,9 @@ import org.eclipse.collections.impl.factory.primitive.Stacks; * * @since 4.0. */ -public enum ImmutableStackFactoryImpl implements ImmutableStackFactory +public class ImmutableStackFactoryImpl implements ImmutableStackFactory { - INSTANCE; + public static final ImmutableStackFactory INSTANCE = new ImmutableStackFactoryImpl(); @Override public ImmutableStack empty() diff --git a/eclipse-collections-code-generator/src/main/resources/impl/stack/mutable/mutablePrimitiveStackFactoryImpl.stg b/eclipse-collections-code-generator/src/main/resources/impl/stack/mutable/mutablePrimitiveStackFactoryImpl.stg index 1b56cac836..384e003ffe 100644 --- a/eclipse-collections-code-generator/src/main/resources/impl/stack/mutable/mutablePrimitiveStackFactoryImpl.stg +++ b/eclipse-collections-code-generator/src/main/resources/impl/stack/mutable/mutablePrimitiveStackFactoryImpl.stg @@ -26,9 +26,9 @@ import org.eclipse.collections.impl.utility.Iterate; * * @since 6.0. */ -public enum MutableStackFactoryImpl implements MutableStackFactory +public class MutableStackFactoryImpl implements MutableStackFactory { - INSTANCE; + public static final MutableStackFactory INSTANCE = new MutableStackFactoryImpl(); @Override public MutableStack empty() diff --git a/eclipse-collections-code-generator/src/main/resources/services/serviceImmutablePrimitiveStackFactory.stg b/eclipse-collections-code-generator/src/main/resources/services/serviceImmutablePrimitiveStackFactory.stg new file mode 100644 index 0000000000..e84de1c54f --- /dev/null +++ b/eclipse-collections-code-generator/src/main/resources/services/serviceImmutablePrimitiveStackFactory.stg @@ -0,0 +1,11 @@ +targetPath() ::= "" + +fileName(primitive) ::= "org.eclipse.collections.api.factory.stack.primitive.ImmutableStackFactory" + +class(primitive) ::= << + +>> + +body(type, name, wrapperName) ::= << +org.eclipse.collections.impl.stack.immutable.primitive.ImmutableStackFactoryImpl +>> diff --git a/eclipse-collections-code-generator/src/main/resources/services/serviceMutablePrimitiveStackFactory.stg b/eclipse-collections-code-generator/src/main/resources/services/serviceMutablePrimitiveStackFactory.stg new file mode 100644 index 0000000000..e7cc38564a --- /dev/null +++ b/eclipse-collections-code-generator/src/main/resources/services/serviceMutablePrimitiveStackFactory.stg @@ -0,0 +1,11 @@ +targetPath() ::= "" + +fileName(primitive) ::= "org.eclipse.collections.api.factory.stack.primitive.MutableStackFactory" + +class(primitive) ::= << + +>> + +body(type, name, wrapperName) ::= << +org.eclipse.collections.impl.stack.mutable.primitive.MutableStackFactoryImpl +>> 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 3d0a1f97ac..5623ad899a 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 @@ -18,6 +18,7 @@ body(type, wrapperName, name) ::= << package org.eclipse.collections.impl.factory.primitive; import org.eclipse.collections.api.factory.stack.primitive.ImmutableStackFactory; +import org.eclipse.collections.api.factory.stack.primitive.MutableStackFactory; import org.eclipse.collections.api.stack.primitive.ImmutableStack; import org.eclipse.collections.api.stack.primitive.MutableStack; import org.eclipse.collections.impl.stack.mutable.primitive.ArrayStack; @@ -35,7 +36,12 @@ public class StacksTest @Test public void immutables() { - ImmutableStackFactory stackFactory = Stacks.immutable; + this.assertImmutableStackFactory(Stacks.immutable); + this.assertImmutableStackFactory(org.eclipse.collections.api.factory.primitive.Stacks.immutable); + } + + private void assertImmutableStackFactory(ImmutableStackFactory stackFactory) + { Assert.assertEquals(ArrayStack.newStackWith(), stackFactory.of()); Verify.assertInstanceOf(ImmutableStack.class, stackFactory.of()); Assert.assertEquals(ArrayStack.newStackWith(<(literal.(type))("1")>), stackFactory.of(<(literal.(type))("1")>)); @@ -62,6 +68,41 @@ public class StacksTest Verify.assertInstanceOf(ImmutableStack.class, stackFactory.ofAll(ArrayStack.newStackWith(<["1", "2", "3"]:(literal.(type))(); separator=", ">))); } + @Test + public void mutables() + { + this.assertMutableStackFactory(Stacks.mutable); + this.assertMutableStackFactory(org.eclipse.collections.api.factory.primitive.Stacks.mutable); + } + + private void assertMutableStackFactory(MutableStackFactory stackFactory) + { + Assert.assertEquals(ArrayStack.newStackWith(), stackFactory.of()); + Verify.assertInstanceOf(MutableStack.class, stackFactory.of()); + Assert.assertEquals(ArrayStack.newStackWith(<(literal.(type))("1")>), stackFactory.of(<(literal.(type))("1")>)); + Verify.assertInstanceOf(MutableStack.class, stackFactory.of(<(literal.(type))("1")>)); + Assert.assertEquals(ArrayStack.newStackWith(<["1", "2"]:(literal.(type))(); separator=", ">), stackFactory.of(<["1", "2"]:(literal.(type))(); separator=", ">)); + Verify.assertInstanceOf(MutableStack.class, stackFactory.of(<["1", "2"]:(literal.(type))(); separator=", ">)); + Assert.assertEquals(ArrayStack.newStackWith(<["1", "2", "3"]:(literal.(type))(); separator=", ">), stackFactory.of(<["1", "2", "3"]:(literal.(type))(); separator=", ">)); + Verify.assertInstanceOf(MutableStack.class, stackFactory.of(<["1", "2", "3"]:(literal.(type))(); separator=", ">)); + Assert.assertEquals(ArrayStack.newStackWith(<["1", "2", "3", "4"]:(literal.(type))(); separator=", ">), stackFactory.of(<["1", "2", "3", "4"]:(literal.(type))(); separator=", ">)); + Verify.assertInstanceOf(MutableStack.class, stackFactory.of(<["1", "2", "3", "4"]:(literal.(type))(); separator=", ">)); + Assert.assertEquals(ArrayStack.newStackWith(<["1", "2", "3", "4", "5"]:(literal.(type))(); separator=", ">), stackFactory.of(<["1", "2", "3", "4", "5"]:(literal.(type))(); separator=", ">)); + Verify.assertInstanceOf(MutableStack.class, stackFactory.of(<["1", "2", "3", "4", "5"]:(literal.(type))(); separator=", ">)); + Assert.assertEquals(ArrayStack.newStackWith(<["1", "2", "3", "4", "5", "6"]:(literal.(type))(); separator=", ">), stackFactory.of(<["1", "2", "3", "4", "5", "6"]:(literal.(type))(); separator=", ">)); + Verify.assertInstanceOf(MutableStack.class, stackFactory.of(<["1", "2", "3", "4", "5", "6"]:(literal.(type))(); separator=", ">)); + Assert.assertEquals(ArrayStack.newStackWith(<["1", "2", "3", "4", "5", "6", "7"]:(literal.(type))(); separator=", ">), stackFactory.of(<["1", "2", "3", "4", "5", "6", "7"]:(literal.(type))(); separator=", ">)); + Verify.assertInstanceOf(MutableStack.class, stackFactory.of(<["1", "2", "3", "4", "5", "6", "7"]:(literal.(type))(); separator=", ">)); + Assert.assertEquals(ArrayStack.newStackWith(<["1", "2", "3", "4", "5", "6", "7", "8"]:(literal.(type))(); separator=", ">), stackFactory.of(<["1", "2", "3", "4", "5", "6", "7", "8"]:(literal.(type))(); separator=", ">)); + Verify.assertInstanceOf(MutableStack.class, stackFactory.of(<["1", "2", "3", "4", "5", "6", "7", "8"]:(literal.(type))(); separator=", ">)); + Assert.assertEquals(ArrayStack.newStackWith(<["1", "2", "3", "4", "5", "6", "7", "8", "9"]:(literal.(type))(); separator=", ">), stackFactory.of(<["1", "2", "3", "4", "5", "6", "7", "8", "9"]:(literal.(type))(); separator=", ">)); + Verify.assertInstanceOf(MutableStack.class, stackFactory.of(<["1", "2", "3", "4", "5", "6", "7", "8", "9"]:(literal.(type))(); separator=", ">)); + Assert.assertEquals(ArrayStack.newStackWith(<["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]:(literal.(type))(); separator=", ">), stackFactory.of(<["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]:(literal.(type))(); separator=", ">)); + Verify.assertInstanceOf(MutableStack.class, stackFactory.of(<["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]:(literal.(type))(); separator=", ">)); + Assert.assertEquals(ArrayStack.newStackWith(<["3", "2", "1"]:(literal.(type))(); separator=", ">), stackFactory.ofAll(ArrayStack.newStackWith(<["1", "2", "3"]:(literal.(type))(); separator=", ">))); + Verify.assertInstanceOf(MutableStack.class, stackFactory.ofAll(ArrayStack.newStackWith(<["1", "2", "3"]:(literal.(type))(); separator=", ">))); + } + @Test public void empty() {