From d9384c7994054a364648faa69da96aeed4e4cd25 Mon Sep 17 00:00:00 2001 From: David Wursteisen Date: Tue, 4 Jun 2019 23:29:46 +0200 Subject: [PATCH] Add support for @NotNull on public API. It will allow language with nullable type support (ie: Kotlin) to set non-nullable type on @NotNull annotated parameter (ie: Entity instead of Entity?). --- ashley/src/com/badlogic/ashley/core/Engine.java | 7 ++++--- .../com/badlogic/ashley/core/EntityListener.java | 6 ++++-- ashley/src/com/badlogic/ashley/core/Family.java | 7 ++++--- .../com/badlogic/ashley/signals/Listener.java | 4 +++- .../ashley/systems/IntervalIteratingSystem.java | 3 ++- .../badlogic/ashley/systems/IteratingSystem.java | 3 ++- .../ashley/systems/SortedIteratingSystem.java | 8 +++++--- .../badlogic/ashley/utils/ImmutableArray.java | 2 +- .../core/ComponentOperationHandlerTests.java | 8 ++++---- .../com/badlogic/ashley/core/EngineTests.java | 14 ++++++++------ .../ashley/core/EntityListenerTests.java | 6 ++++-- .../badlogic/ashley/core/EntityManagerTests.java | 9 +++++---- .../com/badlogic/ashley/core/EntityTests.java | 16 ++++++++-------- .../badlogic/ashley/core/FamilyManagerTests.java | 8 +++++--- .../badlogic/ashley/core/PooledEngineTests.java | 12 ++++++++---- .../com/badlogic/ashley/signals/SignalTests.java | 8 +++----- build.gradle | 4 +++- 17 files changed, 73 insertions(+), 52 deletions(-) diff --git a/ashley/src/com/badlogic/ashley/core/Engine.java b/ashley/src/com/badlogic/ashley/core/Engine.java index 5fbe55fb..3ad38d60 100644 --- a/ashley/src/com/badlogic/ashley/core/Engine.java +++ b/ashley/src/com/badlogic/ashley/core/Engine.java @@ -23,6 +23,7 @@ import com.badlogic.ashley.utils.ImmutableArray; import com.badlogic.gdx.utils.reflect.ClassReflection; import com.badlogic.gdx.utils.reflect.ReflectionException; +import org.jetbrains.annotations.NotNull; /** * The heart of the Entity framework. It is responsible for keeping track of {@link Entity} and @@ -269,7 +270,7 @@ protected void removeEntityInternal(Entity entity) { private class ComponentListener implements Listener { @Override - public void receive(Signal signal, Entity object) { + public void receive(@NotNull Signal signal, @NotNull Entity object) { familyManager.updateFamilyMembership(object); } } @@ -288,12 +289,12 @@ public void systemRemoved (EntitySystem system) { private class EngineEntityListener implements EntityListener { @Override - public void entityAdded (Entity entity) { + public void entityAdded (@NotNull Entity entity) { addEntityInternal(entity); } @Override - public void entityRemoved (Entity entity) { + public void entityRemoved (@NotNull Entity entity) { removeEntityInternal(entity); } } diff --git a/ashley/src/com/badlogic/ashley/core/EntityListener.java b/ashley/src/com/badlogic/ashley/core/EntityListener.java index 7fbd0eb5..9dcdf6b1 100644 --- a/ashley/src/com/badlogic/ashley/core/EntityListener.java +++ b/ashley/src/com/badlogic/ashley/core/EntityListener.java @@ -16,6 +16,8 @@ package com.badlogic.ashley.core; +import org.jetbrains.annotations.NotNull; + /** * Gets notified of {@link Entity} related events. * @author David Saltares @@ -26,12 +28,12 @@ public interface EntityListener { * {@link Engine#addEntityListener(EntityListener)} and {@link Engine#addEntityListener(Family, EntityListener)} * @param entity */ - public void entityAdded (Entity entity); + public void entityAdded (@NotNull Entity entity); /** * Called whenever an {@link Entity} is removed from {@link Engine} or a specific {@link Family} See * {@link Engine#addEntityListener(EntityListener)} and {@link Engine#addEntityListener(Family, EntityListener)} * @param entity */ - public void entityRemoved (Entity entity); + public void entityRemoved (@NotNull Entity entity); } diff --git a/ashley/src/com/badlogic/ashley/core/Family.java b/ashley/src/com/badlogic/ashley/core/Family.java index c6f24f91..6ca241b2 100644 --- a/ashley/src/com/badlogic/ashley/core/Family.java +++ b/ashley/src/com/badlogic/ashley/core/Family.java @@ -18,6 +18,7 @@ import com.badlogic.gdx.utils.Bits; import com.badlogic.gdx.utils.ObjectMap; +import org.jetbrains.annotations.NotNull; /** * Represents a group of {@link Component}s. It is used to describe what {@link Entity} objects an {@link EntitySystem} should @@ -74,7 +75,7 @@ public boolean matches (Entity entity) { * @return A Builder singleton instance to get a family */ @SafeVarargs - public static final Builder all (Class... componentTypes) { + public static final Builder all(@NotNull Class... componentTypes) { return builder.reset().all(componentTypes); } @@ -83,7 +84,7 @@ public static final Builder all (Class... componentTypes) { * @return A Builder singleton instance to get a family */ @SafeVarargs - public static final Builder one (Class... componentTypes) { + public static final Builder one(@NotNull Class... componentTypes) { return builder.reset().one(componentTypes); } @@ -92,7 +93,7 @@ public static final Builder one (Class... componentTypes) { * @return A Builder singleton instance to get a family */ @SafeVarargs - public static final Builder exclude (Class... componentTypes) { + public static final Builder exclude(@NotNull Class... componentTypes) { return builder.reset().exclude(componentTypes); } diff --git a/ashley/src/com/badlogic/ashley/signals/Listener.java b/ashley/src/com/badlogic/ashley/signals/Listener.java index 4b1c99b0..d48bb292 100644 --- a/ashley/src/com/badlogic/ashley/signals/Listener.java +++ b/ashley/src/com/badlogic/ashley/signals/Listener.java @@ -16,6 +16,8 @@ package com.badlogic.ashley.signals; +import org.jetbrains.annotations.NotNull; + /** * A simple Listener interface used to listen to a {@link Signal}. * @author Stefan Bachmann @@ -25,5 +27,5 @@ public interface Listener { * @param signal The Signal that triggered event * @param object The object passed on dispatch */ - public void receive (Signal signal, T object); + public void receive (@NotNull Signal signal, @NotNull T object); } diff --git a/ashley/src/com/badlogic/ashley/systems/IntervalIteratingSystem.java b/ashley/src/com/badlogic/ashley/systems/IntervalIteratingSystem.java index 67526b8f..42b94051 100644 --- a/ashley/src/com/badlogic/ashley/systems/IntervalIteratingSystem.java +++ b/ashley/src/com/badlogic/ashley/systems/IntervalIteratingSystem.java @@ -21,6 +21,7 @@ import com.badlogic.ashley.core.EntitySystem; import com.badlogic.ashley.core.Family; import com.badlogic.ashley.utils.ImmutableArray; +import org.jetbrains.annotations.NotNull; /** * A simple {@link EntitySystem} that processes a {@link Family} of entities not once per frame, but after a given interval. @@ -79,5 +80,5 @@ public Family getFamily () { * The user should place the entity processing logic here. * @param entity */ - protected abstract void processEntity (Entity entity); + protected abstract void processEntity (@NotNull Entity entity); } diff --git a/ashley/src/com/badlogic/ashley/systems/IteratingSystem.java b/ashley/src/com/badlogic/ashley/systems/IteratingSystem.java index 45d24c72..c6db0988 100644 --- a/ashley/src/com/badlogic/ashley/systems/IteratingSystem.java +++ b/ashley/src/com/badlogic/ashley/systems/IteratingSystem.java @@ -21,6 +21,7 @@ import com.badlogic.ashley.core.EntitySystem; import com.badlogic.ashley.core.Family; import com.badlogic.ashley.utils.ImmutableArray; +import org.jetbrains.annotations.NotNull; /** * A simple EntitySystem that iterates over each entity and calls processEntity() for each entity every time the EntitySystem is @@ -87,5 +88,5 @@ public Family getFamily () { * @param entity The current Entity being processed * @param deltaTime The delta time between the last and current frame */ - protected abstract void processEntity (Entity entity, float deltaTime); + protected abstract void processEntity (@NotNull Entity entity, float deltaTime); } diff --git a/ashley/src/com/badlogic/ashley/systems/SortedIteratingSystem.java b/ashley/src/com/badlogic/ashley/systems/SortedIteratingSystem.java index 4bdfe0a1..c96ac582 100644 --- a/ashley/src/com/badlogic/ashley/systems/SortedIteratingSystem.java +++ b/ashley/src/com/badlogic/ashley/systems/SortedIteratingSystem.java @@ -23,6 +23,8 @@ import com.badlogic.ashley.core.Family; import com.badlogic.ashley.utils.ImmutableArray; import com.badlogic.gdx.utils.Array; +import org.jetbrains.annotations.NotNull; + import java.util.Comparator; /** @@ -99,13 +101,13 @@ public void removedFromEngine (Engine engine) { } @Override - public void entityAdded (Entity entity) { + public void entityAdded (@NotNull Entity entity) { sortedEntities.add(entity); shouldSort = true; } @Override - public void entityRemoved (Entity entity) { + public void entityRemoved (@NotNull Entity entity) { sortedEntities.removeValue(entity, true); shouldSort = true; } @@ -139,5 +141,5 @@ public Family getFamily () { * @param entity The current Entity being processed * @param deltaTime The delta time between the last and current frame */ - protected abstract void processEntity (Entity entity, float deltaTime); + protected abstract void processEntity (@NotNull Entity entity, float deltaTime); } diff --git a/ashley/src/com/badlogic/ashley/utils/ImmutableArray.java b/ashley/src/com/badlogic/ashley/utils/ImmutableArray.java index 2a73e6d6..683e78d0 100644 --- a/ashley/src/com/badlogic/ashley/utils/ImmutableArray.java +++ b/ashley/src/com/badlogic/ashley/utils/ImmutableArray.java @@ -70,7 +70,7 @@ public T[] toArray () { return array.toArray(); } - public V[] toArray (Class type) { + public V[] toArray (Class type) { return array.toArray(type); } diff --git a/ashley/tests/com/badlogic/ashley/core/ComponentOperationHandlerTests.java b/ashley/tests/com/badlogic/ashley/core/ComponentOperationHandlerTests.java index de98aac3..64ca0b4c 100644 --- a/ashley/tests/com/badlogic/ashley/core/ComponentOperationHandlerTests.java +++ b/ashley/tests/com/badlogic/ashley/core/ComponentOperationHandlerTests.java @@ -1,12 +1,12 @@ package com.badlogic.ashley.core; -import static org.junit.Assert.*; - -import org.junit.Test; - import com.badlogic.ashley.core.ComponentOperationHandler.BooleanInformer; import com.badlogic.ashley.signals.Listener; import com.badlogic.ashley.signals.Signal; +import org.junit.Test; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; public class ComponentOperationHandlerTests { diff --git a/ashley/tests/com/badlogic/ashley/core/EngineTests.java b/ashley/tests/com/badlogic/ashley/core/EngineTests.java index 39bdab9c..7b616987 100644 --- a/ashley/tests/com/badlogic/ashley/core/EngineTests.java +++ b/ashley/tests/com/badlogic/ashley/core/EngineTests.java @@ -16,16 +16,18 @@ package com.badlogic.ashley.core; -import static org.junit.Assert.*; - -import com.badlogic.gdx.utils.reflect.ReflectionException; -import org.junit.Test; - import com.badlogic.ashley.systems.IteratingSystem; import com.badlogic.ashley.utils.ImmutableArray; import com.badlogic.gdx.utils.Array; -import com.badlogic.gdx.utils.Bits; import com.badlogic.gdx.utils.GdxRuntimeException; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; @SuppressWarnings("unchecked") public class EngineTests { diff --git a/ashley/tests/com/badlogic/ashley/core/EntityListenerTests.java b/ashley/tests/com/badlogic/ashley/core/EntityListenerTests.java index 7bcd4a1d..7df8853f 100644 --- a/ashley/tests/com/badlogic/ashley/core/EntityListenerTests.java +++ b/ashley/tests/com/badlogic/ashley/core/EntityListenerTests.java @@ -1,11 +1,13 @@ package com.badlogic.ashley.core; -import static org.mockito.Mockito.*; - import org.junit.Test; import org.mockito.InOrder; +import static org.mockito.Mockito.inOrder; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + public class EntityListenerTests { @Test diff --git a/ashley/tests/com/badlogic/ashley/core/EntityManagerTests.java b/ashley/tests/com/badlogic/ashley/core/EntityManagerTests.java index 22bec101..19c47ff9 100644 --- a/ashley/tests/com/badlogic/ashley/core/EntityManagerTests.java +++ b/ashley/tests/com/badlogic/ashley/core/EntityManagerTests.java @@ -1,11 +1,12 @@ package com.badlogic.ashley.core; -import static org.junit.Assert.*; - -import org.junit.Test; - import com.badlogic.ashley.utils.ImmutableArray; import com.badlogic.gdx.utils.Array; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertNotNull; public class EntityManagerTests { diff --git a/ashley/tests/com/badlogic/ashley/core/EntityTests.java b/ashley/tests/com/badlogic/ashley/core/EntityTests.java index 7218966d..90b84d97 100644 --- a/ashley/tests/com/badlogic/ashley/core/EntityTests.java +++ b/ashley/tests/com/badlogic/ashley/core/EntityTests.java @@ -16,17 +16,17 @@ package com.badlogic.ashley.core; -import static org.junit.Assert.*; - -import java.util.HashSet; -import java.util.Set; - -import org.junit.Test; - import com.badlogic.ashley.signals.Listener; import com.badlogic.ashley.signals.Signal; -import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.Bits; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; public class EntityTests { diff --git a/ashley/tests/com/badlogic/ashley/core/FamilyManagerTests.java b/ashley/tests/com/badlogic/ashley/core/FamilyManagerTests.java index cf84e0f3..048ec748 100644 --- a/ashley/tests/com/badlogic/ashley/core/FamilyManagerTests.java +++ b/ashley/tests/com/badlogic/ashley/core/FamilyManagerTests.java @@ -1,11 +1,13 @@ package com.badlogic.ashley.core; -import static org.junit.Assert.*; - -import org.junit.Test; import com.badlogic.ashley.utils.ImmutableArray; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.GdxRuntimeException; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; public class FamilyManagerTests { diff --git a/ashley/tests/com/badlogic/ashley/core/PooledEngineTests.java b/ashley/tests/com/badlogic/ashley/core/PooledEngineTests.java index 267d55d6..fe224b54 100644 --- a/ashley/tests/com/badlogic/ashley/core/PooledEngineTests.java +++ b/ashley/tests/com/badlogic/ashley/core/PooledEngineTests.java @@ -1,15 +1,19 @@ package com.badlogic.ashley.core; -import static org.junit.Assert.*; - -import org.junit.Test; - import com.badlogic.ashley.signals.Listener; import com.badlogic.ashley.signals.Signal; import com.badlogic.ashley.utils.ImmutableArray; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.Pool.Poolable; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; public class PooledEngineTests { private float deltaTime = 0.16f; diff --git a/ashley/tests/com/badlogic/ashley/signals/SignalTests.java b/ashley/tests/com/badlogic/ashley/signals/SignalTests.java index 691d9e4d..85e8404e 100644 --- a/ashley/tests/com/badlogic/ashley/signals/SignalTests.java +++ b/ashley/tests/com/badlogic/ashley/signals/SignalTests.java @@ -16,13 +16,11 @@ package com.badlogic.ashley.signals; -import static org.junit.Assert.*; - +import com.badlogic.gdx.utils.Array; import org.junit.Test; -import com.badlogic.ashley.signals.Listener; -import com.badlogic.ashley.signals.Signal; -import com.badlogic.gdx.utils.Array; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; public class SignalTests { diff --git a/build.gradle b/build.gradle index ffcd3eca..7868bd36 100644 --- a/build.gradle +++ b/build.gradle @@ -14,7 +14,8 @@ subprojects { ext { projectGroup = "ashley" - gdxVersion = "1.9.9" + annotationsVersion = "16.0.2" + gdxVersion = "1.9.10" jUnitVersion = "4.12" mockitoVersion = "1.10.19" } @@ -33,6 +34,7 @@ project(":ashley") { dependencies { api "com.badlogicgames.gdx:gdx:$gdxVersion" + compileOnly "org.jetbrains:annotations:$annotationsVersion" testImplementation "junit:junit:$jUnitVersion" testImplementation "org.mockito:mockito-core:$mockitoVersion" }