Commits

Michael Ludwig  committed 2440a96

Restructore project into separate modules to support integration tests, and janino vs. apt test cases

  • Participants
  • Parent commits e4a3211

Comments (0)

Files changed (230)

File entreri-apt-tests/invoker.properties

+invoker.buildResult = failure

File entreri-apt-tests/pom.xml

+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>entreri-apt-tests</artifactId>
+    <packaging>jar</packaging>
+
+    <name>Unit tests for Entreri using APT</name>
+
+    <parent>
+        <groupId>com.lhkbob.entreri</groupId>
+        <artifactId>entreri</artifactId>
+        <version>1.7.0-SNAPSHOT</version>
+    </parent>
+
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-invoker-plugin</artifactId>
+                <version>1.8</version>
+
+                <configuration>
+                    <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
+                    <settingsFile>${project.basedir}/src/it/settings.xml</settingsFile>
+                    <localRepositoryPath>${project.build.directory}/local-repo</localRepositoryPath>
+                    <addTestClassPath>true</addTestClassPath>
+
+                    <pomIncludes>
+                        <pomInclude>*/pom.xml</pomInclude>
+                    </pomIncludes>
+                </configuration>
+
+                <executions>
+                    <execution>
+                        <id>integration-test</id>
+                        <phase>integration-test</phase>
+                        <goals>
+                            <goal>install</goal>
+                            <goal>run</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+
+        </plugins>
+
+    </build>
+
+    <dependencies>
+        <dependency>
+            <groupId>${project.parent.groupId}</groupId>
+            <artifactId>entreri-core</artifactId>
+            <version>${project.parent.version}</version>
+        </dependency>
+    </dependencies>
+</project>

File entreri-apt-tests/src/it/InvalidFactoryComponent/invoker.properties

+invoker.buildResult = failure

File entreri-apt-tests/src/it/InvalidFactoryComponent/pom.xml

+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>test</groupId>
+    <artifactId>entreri-apt-tests-InvalidFactoryComponent</artifactId>
+    <version>1</version>
+    <packaging>jar</packaging>
+
+    <name>InvalidFactoryComponent build failure test</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>@project.groupId@</groupId>
+            <artifactId>entreri-core</artifactId>
+            <version>@project.version@</version>
+        </dependency>
+
+        <dependency>
+            <groupId>@project.groupId@</groupId>
+            <artifactId>entreri-apt-tests</artifactId>
+            <version>@project.version@</version>
+        </dependency>
+    </dependencies>
+</project>

File entreri-apt-tests/src/it/InvalidFactoryComponent/src/main/java/InvalidFactoryComponent.java

+/*
+ * Entreri, an entity-component framework in Java
+ *
+ * Copyright (c) 2012, Michael Ludwig
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ *     Redistributions of source code must retain the above copyright notice,
+ *         this list of conditions and the following disclaimer.
+ *     Redistributions in binary form must reproduce the above copyright notice,
+ *         this list of conditions and the following disclaimer in the
+ *         documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package com.lhkbob.entreri.components;
+
+import com.lhkbob.entreri.Component;
+import com.lhkbob.entreri.property.Factory;
+
+/**
+ * A test component that mis-configures a component so that the property factory has the
+ * incorrect type.
+ *
+ * @author Michael Ludwig
+ */
+public interface InvalidFactoryComponent extends Component {
+    public void setValue(int v);
+
+    @Factory(FloatPropertyFactory.class)
+    public int getValue();
+}

File entreri-apt-tests/src/it/InvalidPropertyComponent/invoker.properties

+invoker.buildResult = failure

File entreri-apt-tests/src/it/InvalidPropertyComponent/pom.xml

+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>test</groupId>
+    <artifactId>entreri-apt-tests-InvalidPropertyComponent</artifactId>
+    <version>1</version>
+    <packaging>jar</packaging>
+
+    <name>InvalidPropertyComponent build failure test</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>@project.groupId@</groupId>
+            <artifactId>entreri-core</artifactId>
+            <version>@project.version@</version>
+        </dependency>
+
+        <dependency>
+            <groupId>@project.groupId@</groupId>
+            <artifactId>entreri-apt-tests</artifactId>
+            <version>@project.version@</version>
+        </dependency>
+    </dependencies>
+</project>

File entreri-apt-tests/src/it/InvalidPropertyComponent/src/main/java/InvalidPropertyComponent.java

+/*
+ * Entreri, an entity-component framework in Java
+ *
+ * Copyright (c) 2012, Michael Ludwig
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ *     Redistributions of source code must retain the above copyright notice,
+ *         this list of conditions and the following disclaimer.
+ *     Redistributions in binary form must reproduce the above copyright notice,
+ *         this list of conditions and the following disclaimer in the
+ *         documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package com.lhkbob.entreri.components;
+
+import com.lhkbob.entreri.Component;
+
+/**
+ * Test component that uses the invalid property type NoFactoryProperty.
+ */
+public interface InvalidPropertyComponent extends Component {
+    public NoFactoryProperty.Crass getCrass();
+
+    public void setCrass(NoFactoryProperty.Crass value);
+}

File entreri-apt-tests/src/it/InvalidSharedObjectComponent/invoker.properties

+invoker.buildResult = failure

File entreri-apt-tests/src/it/InvalidSharedObjectComponent/pom.xml

+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>test</groupId>
+    <artifactId>entreri-apt-tests-InvalidSharedObjectComponent</artifactId>
+    <version>1</version>
+    <packaging>jar</packaging>
+
+    <name>InvalidSharedObjectComponent build failure test</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>@project.groupId@</groupId>
+            <artifactId>entreri-core</artifactId>
+            <version>@project.version@</version>
+        </dependency>
+
+        <dependency>
+            <groupId>@project.groupId@</groupId>
+            <artifactId>entreri-apt-tests</artifactId>
+            <version>@project.version@</version>
+        </dependency>
+    </dependencies>
+</project>

File entreri-apt-tests/src/it/InvalidSharedObjectComponent/src/main/java/InvalidSharedObjectComponent.java

+/*
+ * Entreri, an entity-component framework in Java
+ *
+ * Copyright (c) 2012, Michael Ludwig
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ *     Redistributions of source code must retain the above copyright notice,
+ *         this list of conditions and the following disclaimer.
+ *     Redistributions in binary form must reproduce the above copyright notice,
+ *         this list of conditions and the following disclaimer in the
+ *         documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package com.lhkbob.entreri.components;
+
+import com.lhkbob.entreri.Component;
+import com.lhkbob.entreri.SharedInstance;
+
+/**
+ * Invalid component definition that double checks that we fail when using a shared
+ * instance annotation with a object properties.
+ */
+public interface InvalidSharedObjectComponent extends Component {
+    @SharedInstance
+    public Object getValue();
+
+    public void setValue(Object v);
+}

File entreri-apt-tests/src/it/InvalidSharedPrimitiveComponent/invoker.properties

+invoker.buildResult = failure

File entreri-apt-tests/src/it/InvalidSharedPrimitiveComponent/pom.xml

+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>test</groupId>
+    <artifactId>entreri-apt-tests-InvalidSharedPrimitiveComponent</artifactId>
+    <version>1</version>
+    <packaging>jar</packaging>
+
+    <name>InvalidSharedPrimitiveComponent build failure test</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>@project.groupId@</groupId>
+            <artifactId>entreri-core</artifactId>
+            <version>@project.version@</version>
+        </dependency>
+
+        <dependency>
+            <groupId>@project.groupId@</groupId>
+            <artifactId>entreri-apt-tests</artifactId>
+            <version>@project.version@</version>
+        </dependency>
+    </dependencies>
+</project>

File entreri-apt-tests/src/it/InvalidSharedPrimitiveComponent/src/main/java/InvalidSharedPrimitiveComponent.java

+/*
+ * Entreri, an entity-component framework in Java
+ *
+ * Copyright (c) 2012, Michael Ludwig
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ *     Redistributions of source code must retain the above copyright notice,
+ *         this list of conditions and the following disclaimer.
+ *     Redistributions in binary form must reproduce the above copyright notice,
+ *         this list of conditions and the following disclaimer in the
+ *         documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package com.lhkbob.entreri.components;
+
+import com.lhkbob.entreri.Component;
+import com.lhkbob.entreri.SharedInstance;
+
+/**
+ * Invalid component type that tries to have a shared instance from a property that
+ * doesn't support it. Note that this failure also extends to any other property type that
+ * isn't ObjectProperty that doesn't implement ShareableProperty.
+ */
+public interface InvalidSharedPrimitiveComponent extends Component {
+    @SharedInstance
+    public int getSharedValue();
+
+    public void setSharedValue(int v);
+}

File entreri-apt-tests/src/it/MismatchedNameComponent/invoker.properties

+invoker.buildResult = failure

File entreri-apt-tests/src/it/MismatchedNameComponent/pom.xml

+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>test</groupId>
+    <artifactId>entreri-apt-tests-MismatchedNameComponent</artifactId>
+    <version>1</version>
+    <packaging>jar</packaging>
+
+    <name>MismatchedNameComponent build failure test</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>@project.groupId@</groupId>
+            <artifactId>entreri-core</artifactId>
+            <version>@project.version@</version>
+        </dependency>
+
+        <dependency>
+            <groupId>@project.groupId@</groupId>
+            <artifactId>entreri-apt-tests</artifactId>
+            <version>@project.version@</version>
+        </dependency>
+    </dependencies>
+</project>

File entreri-apt-tests/src/it/MismatchedNameComponent/src/main/java/MismatchedNameComponent.java

+/*
+ * Entreri, an entity-component framework in Java
+ *
+ * Copyright (c) 2012, Michael Ludwig
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ *     Redistributions of source code must retain the above copyright notice,
+ *         this list of conditions and the following disclaimer.
+ *     Redistributions in binary form must reproduce the above copyright notice,
+ *         this list of conditions and the following disclaimer in the
+ *         documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package com.lhkbob.entreri.components;
+
+import com.lhkbob.entreri.Component;
+import com.lhkbob.entreri.Named;
+
+/**
+ * A component type that uses mismatched Named annotations to break an otherwise valid
+ * definition.
+ */
+public interface MismatchedNameComponent extends Component {
+    @Named("right")
+    public void setValue(int f);
+
+    @Named("left")
+    public int getValue();
+}

File entreri-apt-tests/src/it/MismatchedTypeComponent/invoker.properties

+invoker.buildResult = failure

File entreri-apt-tests/src/it/MismatchedTypeComponent/pom.xml

+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>test</groupId>
+    <artifactId>entreri-apt-tests-MismatchedTypeComponent</artifactId>
+    <version>1</version>
+    <packaging>jar</packaging>
+
+    <name>MismatchedTypeComponent build failure test</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>@project.groupId@</groupId>
+            <artifactId>entreri-core</artifactId>
+            <version>@project.version@</version>
+        </dependency>
+
+        <dependency>
+            <groupId>@project.groupId@</groupId>
+            <artifactId>entreri-apt-tests</artifactId>
+            <version>@project.version@</version>
+        </dependency>
+    </dependencies>
+</project>

File entreri-apt-tests/src/it/MismatchedTypeComponent/src/main/java/MismatchedTypeComponent.java

+/*
+ * Entreri, an entity-component framework in Java
+ *
+ * Copyright (c) 2012, Michael Ludwig
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ *     Redistributions of source code must retain the above copyright notice,
+ *         this list of conditions and the following disclaimer.
+ *     Redistributions in binary form must reproduce the above copyright notice,
+ *         this list of conditions and the following disclaimer in the
+ *         documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package com.lhkbob.entreri.components;
+
+import com.lhkbob.entreri.Component;
+
+/**
+ * A component where the setter and getter types don't match for a property.
+ */
+public interface MismatchedTypeComponent extends Component {
+    public int getValue();
+
+    public void setValue(float f);
+}

File entreri-apt-tests/src/it/MissingGetterComponent/invoker.properties

+invoker.buildResult = failure

File entreri-apt-tests/src/it/MissingGetterComponent/pom.xml

+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>test</groupId>
+    <artifactId>entreri-apt-tests-MissingGetterComponent</artifactId>
+    <version>1</version>
+    <packaging>jar</packaging>
+
+    <name>MissingGetterComponent build failure test</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>@project.groupId@</groupId>
+            <artifactId>entreri-core</artifactId>
+            <version>@project.version@</version>
+        </dependency>
+
+        <dependency>
+            <groupId>@project.groupId@</groupId>
+            <artifactId>entreri-apt-tests</artifactId>
+            <version>@project.version@</version>
+        </dependency>
+    </dependencies>
+</project>

File entreri-apt-tests/src/it/MissingGetterComponent/src/main/java/MissingGetterComponent.java

+/*
+ * Entreri, an entity-component framework in Java
+ *
+ * Copyright (c) 2012, Michael Ludwig
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ *     Redistributions of source code must retain the above copyright notice,
+ *         this list of conditions and the following disclaimer.
+ *     Redistributions in binary form must reproduce the above copyright notice,
+ *         this list of conditions and the following disclaimer in the
+ *         documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package com.lhkbob.entreri.components;
+
+import com.lhkbob.entreri.Component;
+
+/**
+ * A test component that has a mismatched property definition by missing a getter for the
+ * setter.
+ *
+ * @author Michael Ludwig
+ */
+public interface MissingGetterComponent extends Component {
+    public void setValue(int v);
+}

File entreri-apt-tests/src/it/MissingPropertyGetComponent/invoker.properties

+invoker.buildResult = failure

File entreri-apt-tests/src/it/MissingPropertyGetComponent/pom.xml

+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>test</groupId>
+    <artifactId>entreri-apt-tests-MissingPropertyGetComponent</artifactId>
+    <version>1</version>
+    <packaging>jar</packaging>
+
+    <name>MissingPropertyGetComponent build failure test</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>@project.groupId@</groupId>
+            <artifactId>entreri-core</artifactId>
+            <version>@project.version@</version>
+        </dependency>
+
+        <dependency>
+            <groupId>@project.groupId@</groupId>
+            <artifactId>entreri-apt-tests</artifactId>
+            <version>@project.version@</version>
+        </dependency>
+    </dependencies>
+</project>

File entreri-apt-tests/src/it/MissingPropertyGetComponent/src/main/java/MissingPropertyGetComponent.java

+package com.lhkbob.entreri.components;
+
+import com.lhkbob.entreri.Component;
+import com.lhkbob.entreri.property.Factory;
+import com.lhkbob.entreri.property.Property;
+import com.lhkbob.entreri.property.PropertyFactory;
+
+/**
+ * Invalid component type because it references a property type that doesn't have the
+ * expected get method.
+ */
+public interface MissingPropertyGetComponent extends Component {
+    @Factory(MissingGetterFactory.class)
+    public Object getValue();
+
+    public void setValue(Object o);
+
+    public static class MissingGetterProperty implements Property {
+        public void set(Object o, int index) {
+
+        }
+
+        // we don't really have to implement these because the component
+        // will fail validation
+        @Override
+        public void setCapacity(int size) {
+        }
+
+        @Override
+        public int getCapacity() {
+            return 0;
+        }
+
+        @Override
+        public void swap(int indexA, int indexB) {
+        }
+    }
+
+    public static class MissingGetterFactory
+            implements PropertyFactory<MissingGetterProperty> {
+        @Override
+        public MissingGetterProperty create() {
+            return new MissingGetterProperty();
+        }
+
+        @Override
+        public void setDefaultValue(MissingGetterProperty property, int index) {
+        }
+
+        @Override
+        public void clone(MissingGetterProperty src, int srcIndex,
+                          MissingGetterProperty dst, int dstIndex) {
+        }
+    }
+}

File entreri-apt-tests/src/it/MissingPropertySetComponent/invoker.properties

+invoker.buildResult = failure

File entreri-apt-tests/src/it/MissingPropertySetComponent/pom.xml

+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>test</groupId>
+    <artifactId>entreri-apt-tests-MissingPropertySetComponent</artifactId>
+    <version>1</version>
+    <packaging>jar</packaging>
+
+    <name>MissingPropertySetComponent build failure test</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>@project.groupId@</groupId>
+            <artifactId>entreri-core</artifactId>
+            <version>@project.version@</version>
+        </dependency>
+
+        <dependency>
+            <groupId>@project.groupId@</groupId>
+            <artifactId>entreri-apt-tests</artifactId>
+            <version>@project.version@</version>
+        </dependency>
+    </dependencies>
+</project>

File entreri-apt-tests/src/it/MissingPropertySetComponent/src/main/java/MissingPropertySetComponent.java

+package com.lhkbob.entreri.components;
+
+import com.lhkbob.entreri.Component;
+import com.lhkbob.entreri.property.Factory;
+import com.lhkbob.entreri.property.Property;
+import com.lhkbob.entreri.property.PropertyFactory;
+
+/**
+ * Invalid component type because it references a property type that doesn't have the
+ * expected set method.
+ */
+public interface MissingPropertySetComponent extends Component {
+    @Factory(MissingSetterFactory.class)
+    public Object getValue();
+
+    public void setValue(Object o);
+
+    public static class MissingSetterProperty implements Property {
+        public Object get(int index) {
+            return null;
+        }
+
+        // we don't really have to implement these because the component
+        // will fail validation
+        @Override
+        public void setCapacity(int size) {
+        }
+
+        @Override
+        public int getCapacity() {
+            return 0;
+        }
+
+        @Override
+        public void swap(int indexA, int indexB) {
+        }
+    }
+
+    public static class MissingSetterFactory
+            implements PropertyFactory<MissingSetterProperty> {
+        @Override
+        public MissingSetterProperty create() {
+            return new MissingSetterProperty();
+        }
+
+        @Override
+        public void setDefaultValue(MissingSetterProperty property, int index) {
+        }
+
+        @Override
+        public void clone(MissingSetterProperty src, int srcIndex,
+                          MissingSetterProperty dst, int dstIndex) {
+        }
+    }
+}

File entreri-apt-tests/src/it/MissingSetterComponent/invoker.properties

+invoker.buildResult = failure

File entreri-apt-tests/src/it/MissingSetterComponent/pom.xml

+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>test</groupId>
+    <artifactId>entreri-apt-tests-MissingSetterComponent</artifactId>
+    <version>1</version>
+    <packaging>jar</packaging>
+
+    <name>MissingSetterComponent build failure test</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>@project.groupId@</groupId>
+            <artifactId>entreri-core</artifactId>
+            <version>@project.version@</version>
+        </dependency>
+
+        <dependency>
+            <groupId>@project.groupId@</groupId>
+            <artifactId>entreri-apt-tests</artifactId>
+            <version>@project.version@</version>
+        </dependency>
+    </dependencies>
+</project>

File entreri-apt-tests/src/it/MissingSetterComponent/src/main/java/MissingSetterComponent.java

+/*
+ * Entreri, an entity-component framework in Java
+ *
+ * Copyright (c) 2012, Michael Ludwig
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ *     Redistributions of source code must retain the above copyright notice,
+ *         this list of conditions and the following disclaimer.
+ *     Redistributions in binary form must reproduce the above copyright notice,
+ *         this list of conditions and the following disclaimer in the
+ *         documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package com.lhkbob.entreri.components;
+
+import com.lhkbob.entreri.Component;
+
+/**
+ * A test component that has a mismatched property definition by missing a setter for the
+ * getter.
+ *
+ * @author Michael Ludwig
+ */
+public interface MissingSetterComponent extends Component {
+    public int getValue();
+}

File entreri-apt-tests/src/it/NonBeanComponent/invoker.properties

+invoker.buildResult = failure

File entreri-apt-tests/src/it/NonBeanComponent/pom.xml

+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>test</groupId>
+    <artifactId>entreri-apt-tests-NonBeanComponent</artifactId>
+    <version>1</version>
+    <packaging>jar</packaging>
+
+    <name>NonBeanComponent build failure test</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>@project.groupId@</groupId>
+            <artifactId>entreri-core</artifactId>
+            <version>@project.version@</version>
+        </dependency>
+
+        <dependency>
+            <groupId>@project.groupId@</groupId>
+            <artifactId>entreri-apt-tests</artifactId>
+            <version>@project.version@</version>
+        </dependency>
+    </dependencies>
+</project>

File entreri-apt-tests/src/it/NonBeanComponent/src/main/java/NonBeanComponent.java

+/*
+ * Entreri, an entity-component framework in Java
+ *
+ * Copyright (c) 2012, Michael Ludwig
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ *     Redistributions of source code must retain the above copyright notice,
+ *         this list of conditions and the following disclaimer.
+ *     Redistributions in binary form must reproduce the above copyright notice,
+ *         this list of conditions and the following disclaimer in the
+ *         documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package com.lhkbob.entreri.components;
+
+import com.lhkbob.entreri.Component;
+
+/**
+ * Test component that declares a method that doesn't follow the bean conventions and is
+ * thus invalid.
+ */
+public interface NonBeanComponent extends Component {
+    public void thisCantPossiblyBeABeanMethod();
+}

File entreri-apt-tests/src/it/settings.xml

+<?xml version="1.0"?>
+<settings>
+    <profiles>
+        <profile>
+            <id>it-repo</id>
+            <activation>
+                <activeByDefault>true</activeByDefault>
+            </activation>
+            <repositories>
+                <repository>
+                    <id>local.central</id>
+                    <url>@localRepositoryUrl@</url>
+                    <releases>
+                        <enabled>true</enabled>
+                    </releases>
+                    <snapshots>
+                        <enabled>true</enabled>
+                    </snapshots>
+                </repository>
+            </repositories>
+            <pluginRepositories>
+                <pluginRepository>
+                    <id>local.central</id>
+                    <url>@localRepositoryUrl@</url>
+                    <releases>
+                        <enabled>true</enabled>
+                    </releases>
+                    <snapshots>
+                        <enabled>true</enabled>
+                    </snapshots>
+                </pluginRepository>
+            </pluginRepositories>
+        </profile>
+    </profiles>
+</settings>

File entreri-apt-tests/src/main/java/com.lhkbob.entreri.components/AbstractComponent.java

+/*
+ * Entreri, an entity-component framework in Java
+ *
+ * Copyright (c) 2012, Michael Ludwig
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ *     Redistributions of source code must retain the above copyright notice,
+ *         this list of conditions and the following disclaimer.
+ *     Redistributions in binary form must reproduce the above copyright notice,
+ *         this list of conditions and the following disclaimer in the
+ *         documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package com.lhkbob.entreri.components;
+
+import com.lhkbob.entreri.Component;
+
+/**
+ * A test component that is abstract to test component validation, e.g. this type is
+ * invalid.
+ *
+ * @author Michael Ludwig
+ */
+public abstract class AbstractComponent implements Component {
+
+    public abstract Object getUserData();
+
+    public abstract void setUserData(Object value);
+}

File entreri-apt-tests/src/main/java/com.lhkbob.entreri.components/BadConstructorComponent.java

+/*
+ * Entreri, an entity-component framework in Java
+ *
+ * Copyright (c) 2012, Michael Ludwig
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ *     Redistributions of source code must retain the above copyright notice,
+ *         this list of conditions and the following disclaimer.
+ *     Redistributions in binary form must reproduce the above copyright notice,
+ *         this list of conditions and the following disclaimer in the
+ *         documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package com.lhkbob.entreri.components;
+
+import com.lhkbob.entreri.*;
+
+/**
+ * A test component that is a class to test component validation, e.g. this type is
+ * invalid.
+ *
+ * @author Michael Ludwig
+ */
+public class BadConstructorComponent implements Component {
+
+    @Override
+    public EntitySystem getEntitySystem() {
+        return null;
+    }
+
+    @Override
+    public Entity getEntity() {
+        return null;
+    }
+
+    @Override
+    public boolean isAlive() {
+        return false;
+    }
+
+    @Override
+    public boolean isFlyweight() {
+        return false;
+    }
+
+    @Override
+    public int getIndex() {
+        return 0;
+    }
+
+    @Override
+    public int getVersion() {
+        return 0;
+    }
+
+    @Override
+    public void updateVersion() {
+    }
+
+    @Override
+    public Class<? extends Component> getType() {
+        return null;
+    }
+
+    @Override
+    public void setOwner(Owner owner) {
+    }
+
+    @Override
+    public Owner getOwner() {
+        return null;
+    }
+
+    @Override
+    public Owner notifyOwnershipGranted(Ownable obj) {
+        return null;
+    }
+
+    @Override
+    public void notifyOwnershipRevoked(Ownable obj) {
+    }
+}

File entreri-apt-tests/src/main/java/com.lhkbob.entreri.components/ComplexComponent.java

+/*
+ * Entreri, an entity-component framework in Java
+ *
+ * Copyright (c) 2012, Michael Ludwig
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ *     Redistributions of source code must retain the above copyright notice,
+ *         this list of conditions and the following disclaimer.
+ *     Redistributions in binary form must reproduce the above copyright notice,
+ *         this list of conditions and the following disclaimer in the
+ *         documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package com.lhkbob.entreri.components;
+
+import com.lhkbob.entreri.Named;
+import com.lhkbob.entreri.SharedInstance;
+import com.lhkbob.entreri.property.Factory;
+import com.lhkbob.entreri.property.IntProperty.DefaultInt;
+import com.lhkbob.entreri.property.LongProperty.DefaultLong;
+
+/**
+ * A Component that tests a variety of things: multiple properties, different types,
+ * customized default values, an overridden property factory, named properties, and
+ * multi-parameter methods, extending component types, auto-detected properties, sharable
+ * instances.
+ *
+ * @author Michael Ludwig
+ */
+public interface ComplexComponent extends IntComponent, FloatComponent {
+    public void setLong(long i);
+
+    @DefaultLong(Long.MAX_VALUE)
+    public long getLong();
+
+    public void setFactoryFloat(float f);
+
+    @Factory(FloatPropertyFactory.class)
+    public float getFactoryFloat();
+
+    public short getParam1();
+
+    public short getParam2();
+
+    public ComplexComponent setParams(@Named("param1") short p1,
+                                      @Named("param2") short p2);
+
+    @Named("foo-blah")
+    public boolean isNamedParamGetter();
+
+    @Named("foo-blah")
+    public ComplexComponent setNamedParamSetter(boolean foo);
+
+    @DefaultInt(14)
+    @SharedInstance
+    public CustomProperty.Bletch hasBletch();
+
+    public void setBletch(CustomProperty.Bletch b);
+}

File entreri-apt-tests/src/main/java/com.lhkbob.entreri.components/CustomProperty.java

+/*
+ * Entreri, an entity-component framework in Java
+ *
+ * Copyright (c) 2012, Michael Ludwig
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ *     Redistributions of source code must retain the above copyright notice,
+ *         this list of conditions and the following disclaimer.
+ *     Redistributions in binary form must reproduce the above copyright notice,
+ *         this list of conditions and the following disclaimer in the
+ *         documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package com.lhkbob.entreri.components;
+
+import com.lhkbob.entreri.property.*;
+
+@Factory(CustomProperty.CustomFactoryWithAttributes.class)
+public class CustomProperty implements ShareableProperty<CustomProperty.Bletch> {
+    private final ObjectProperty<Bletch> property;
+
+    public CustomProperty() {
+        property = new ObjectProperty<Bletch>();
+    }
+
+    @Override
+    public Bletch createShareableInstance() {
+        return new Bletch();
+    }
+
+    public void set(Bletch b, int index) {
+        property.set(b, index);
+    }
+
+    public Bletch get(int index) {
+        return property.get(index);
+    }
+
+    @Override
+    public void get(int index, Bletch b) {
+        b.value = property.get(index).value;
+    }
+
+    @Override
+    public void setCapacity(int size) {
+        property.setCapacity(size);
+    }
+
+    @Override
+    public int getCapacity() {
+        return property.getCapacity();
+    }
+
+    @Override
+    public void swap(int indexA, int indexB) {
+        property.swap(indexA, indexB);
+    }
+
+    public static class CustomFactoryWithAttributes
+            implements PropertyFactory<CustomProperty> {
+        private final Attributes attributes;
+
+        public CustomFactoryWithAttributes(Attributes attrs) {
+            attributes = attrs;
+        }
+
+        @Override
+        public CustomProperty create() {
+            return new CustomProperty();
+        }
+
+        @Override
+        public void setDefaultValue(CustomProperty property, int index) {
+            Bletch b = new Bletch();
+            b.value = (!attributes.hasAttribute(IntProperty.DefaultInt.class) ? 0
+                                                                              : attributes
+                               .getAttribute(IntProperty.DefaultInt.class).value());
+            property.set(b, index);
+        }
+
+        @Override
+        public void clone(CustomProperty src, int srcIndex, CustomProperty dst,
+                          int dstIndex) {
+            // don't care about clone policy for the tests, but make it consistent
+            // with value behavior for shareable property
+            src.get(srcIndex, dst.get(dstIndex));
+        }
+    }
+
+    public static class Bletch {
+        public int value;
+    }
+}

File entreri-apt-tests/src/main/java/com.lhkbob.entreri.components/FloatComponent.java

+/*
+ * Entreri, an entity-component framework in Java
+ *
+ * Copyright (c) 2012, Michael Ludwig
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ *     Redistributions of source code must retain the above copyright notice,
+ *         this list of conditions and the following disclaimer.
+ *     Redistributions in binary form must reproduce the above copyright notice,
+ *         this list of conditions and the following disclaimer in the
+ *         documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package com.lhkbob.entreri.components;
+
+import com.lhkbob.entreri.Component;
+
+/**
+ * A test component that tests the float primitive type.
+ *
+ * @author Michael Ludwig
+ */
+public interface FloatComponent extends Component {
+    public float getFloat();
+
+    public void setFloat(float value);
+}

File entreri-apt-tests/src/main/java/com.lhkbob.entreri.components/FloatPropertyFactory.java

+/*
+ * Entreri, an entity-component framework in Java
+ *
+ * Copyright (c) 2012, Michael Ludwig
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ *     Redistributions of source code must retain the above copyright notice,
+ *         this list of conditions and the following disclaimer.
+ *     Redistributions in binary form must reproduce the above copyright notice,
+ *         this list of conditions and the following disclaimer in the
+ *         documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package com.lhkbob.entreri.components;
+
+import com.lhkbob.entreri.property.FloatProperty;
+import com.lhkbob.entreri.property.PropertyFactory;
+
+public class FloatPropertyFactory implements PropertyFactory<FloatProperty> {
+    public static final float DEFAULT = 5f;
+
+    @Override
+    public FloatProperty create() {
+        return new FloatProperty();
+    }
+
+    @Override
+    public void setDefaultValue(FloatProperty p, int index) {
+        p.set(DEFAULT, index);
+    }
+
+    @Override
+    public void clone(FloatProperty src, int srcIndex, FloatProperty dst, int dstIndex) {
+        dst.set(src.get(srcIndex), dstIndex);
+    }
+}

File entreri-apt-tests/src/main/java/com.lhkbob.entreri.components/IntComponent.java

+/*
+ * Entreri, an entity-component framework in Java
+ *
+ * Copyright (c) 2012, Michael Ludwig
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are p