You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@polygene.apache.org by ni...@apache.org on 2015/04/17 18:08:17 UTC
[05/50] [abbrv] zest-qi4j git commit: Dominic Jones reported a
problem with SideEffects being exectued more than once. Test and fix for
that.
Dominic Jones reported a problem with SideEffects being exectued more than once. Test and fix for that.
Project: http://git-wip-us.apache.org/repos/asf/zest-qi4j/repo
Commit: http://git-wip-us.apache.org/repos/asf/zest-qi4j/commit/116fa089
Tree: http://git-wip-us.apache.org/repos/asf/zest-qi4j/tree/116fa089
Diff: http://git-wip-us.apache.org/repos/asf/zest-qi4j/diff/116fa089
Branch: refs/heads/3.0
Commit: 116fa089c55f3e45cd03244337344133f58a994c
Parents: b49eca6
Author: Niclas Hedhman <ni...@hedhman.org>
Authored: Sat May 24 23:47:30 2014 +0200
Committer: Niclas Hedhman <ni...@hedhman.org>
Committed: Sat May 24 23:47:30 2014 +0200
----------------------------------------------------------------------
.../bootstrap/CompositeAssemblyImpl.java | 79 +++++++++---------
.../sideeffects/SampleTransientTest.java | 84 ++++++++++++++++++++
.../sideeffects/SpecificSideEffectTest.java | 2 +-
.../src/test/java/org/qi4j/test/ASMTest.java | 2 +-
4 files changed, 123 insertions(+), 44 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/116fa089/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/CompositeAssemblyImpl.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/CompositeAssemblyImpl.java b/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/CompositeAssemblyImpl.java
index 61eb547..7441390 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/CompositeAssemblyImpl.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/CompositeAssemblyImpl.java
@@ -173,9 +173,10 @@ public abstract class CompositeAssemblyImpl
compositeMethodsModel = new CompositeMethodsModel( mixinsModel );
// Implement composite methods
- Iterable<Class<? extends Constraint<?, ?>>> constraintClasses = constraintDeclarations( this.types );
- Iterable<Class<?>> concernClasses = flatten( concerns, concernDeclarations( this.types ) );
- Iterable<Class<?>> sideEffectClasses = flatten( sideEffects, sideEffectDeclarations( this.types ) );
+ ArrayList<Type> allTypes = getTypes( this.types );
+ Iterable<Class<? extends Constraint<?, ?>>> constraintClasses = constraintDeclarations( getTypes( this.types ) );
+ Iterable<Class<?>> concernClasses = flatten( concerns, concernDeclarations( allTypes ) );
+ Iterable<Class<?>> sideEffectClasses = flatten( sideEffects, sideEffectDeclarations( allTypes ) );
Iterable<Class<?>> mixinClasses = flatten( mixins, mixinDeclarations( this.types ) );
implementMixinType( types, constraintClasses, concernClasses, sideEffectClasses, mixinClasses );
@@ -683,20 +684,12 @@ public abstract class CompositeAssemblyImpl
@SuppressWarnings( "unchecked" )
private Iterable<Class<? extends Constraint<?, ?>>> constraintDeclarations( Class<?> type )
{
- Iterable<? extends Class<?>> iterable = iterable( type );
- return constraintDeclarations( iterable );
+ ArrayList<Type> allTypes = getTypes( type );
+ return constraintDeclarations( allTypes );
}
- private Iterable<Class<? extends Constraint<?, ?>>> constraintDeclarations( Iterable<? extends Class<?>> typess )
+ private Iterable<Class<? extends Constraint<?, ?>>> constraintDeclarations( ArrayList<Type> allTypes )
{
- // Find constraint declarations
- List<Type> allTypes = new ArrayList<>();
- for( Class<?> type : typess )
- {
- Iterable<Type> types = typesOf( type );
- addAll( allTypes, types );
- }
-
// Find all constraints and flatten them into an iterable
Function<Type, Iterable<Class<? extends Constraint<?, ?>>>> function = new Function<Type, Iterable<Class<? extends Constraint<?, ?>>>>()
{
@@ -722,27 +715,11 @@ public abstract class CompositeAssemblyImpl
private Iterable<Class<?>> concernDeclarations( Class<?> type )
{
Iterable<? extends Class<?>> iterable = iterable( type );
- return concernDeclarations( iterable );
+ return concernDeclarations( getTypes( iterable ) );
}
- private Iterable<Class<?>> concernDeclarations( Iterable<? extends Class<?>> typess )
+ private Iterable<Class<?>> concernDeclarations( ArrayList<Type> allTypes )
{
- // Find concern declarations
- ArrayList<Type> allTypes = new ArrayList<>();
- for( Class<?> type : typess )
- {
- Iterable<Type> types;
- if( type.isInterface() )
- {
- types = typesOf( type );
- }
- else
- {
- types = cast( classHierarchy( type ) );
- }
- addAll( allTypes, types );
- }
-
// Find all concerns and flattern them into an iterable
Function<Type, Iterable<Class<?>>> function = new Function<Type, Iterable<Class<?>>>()
{
@@ -768,19 +745,11 @@ public abstract class CompositeAssemblyImpl
protected Iterable<Class<?>> sideEffectDeclarations( Class<?> type )
{
Iterable<? extends Class<?>> iterable = iterable( type );
- return sideEffectDeclarations( iterable );
+ return sideEffectDeclarations( getTypes( iterable ) );
}
- protected Iterable<Class<?>> sideEffectDeclarations( Iterable<? extends Class<?>> typess )
+ protected Iterable<Class<?>> sideEffectDeclarations( ArrayList<Type> allTypes )
{
- // Find side-effect declarations
- ArrayList<Type> allTypes = new ArrayList<>();
- for( Class<?> type : typess )
- {
- Iterable<Type> types = typesOf( type );
- addAll( allTypes, types );
- }
-
// Find all side-effects and flattern them into an iterable
Function<Type, Iterable<Class<?>>> function = new Function<Type, Iterable<Class<?>>>()
{
@@ -802,6 +771,32 @@ public abstract class CompositeAssemblyImpl
return toList( flatten );
}
+ private ArrayList<Type> getTypes( Class<?> type )
+ {
+ Iterable<? extends Class<?>> iterable = iterable( type );
+ return getTypes( iterable );
+ }
+
+ private ArrayList<Type> getTypes( Iterable<? extends Class<?>> typess )
+ {
+ // Find side-effect declarations
+ ArrayList<Type> allTypes = new ArrayList<>();
+ for( Class<?> type : typess )
+ {
+ Iterable<Type> types;
+ if( type.isInterface() )
+ {
+ types = typesOf( type );
+ }
+ else
+ {
+ types = cast( classHierarchy( type ) );
+ }
+ addAll( allTypes, types );
+ }
+ return allTypes;
+ }
+
@SuppressWarnings( "unchecked" )
protected Iterable<Class<?>> mixinDeclarations( Class<?> type )
{
http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/116fa089/core/runtime/src/test/java/org/qi4j/runtime/sideeffects/SampleTransientTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/qi4j/runtime/sideeffects/SampleTransientTest.java b/core/runtime/src/test/java/org/qi4j/runtime/sideeffects/SampleTransientTest.java
new file mode 100644
index 0000000..6a0d4f6
--- /dev/null
+++ b/core/runtime/src/test/java/org/qi4j/runtime/sideeffects/SampleTransientTest.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2014, Niclas Hedhman. All Rights Reserved.
+ * Copyright (c) 2014, Dominic Jones. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.qi4j.runtime.sideeffects;
+
+import org.junit.Test;
+import org.qi4j.api.common.UseDefaults;
+import org.qi4j.api.composite.TransientBuilderFactory;
+import org.qi4j.api.injection.scope.Structure;
+import org.qi4j.api.mixin.Mixins;
+import org.qi4j.api.property.Property;
+import org.qi4j.api.sideeffect.SideEffectOf;
+import org.qi4j.api.sideeffect.SideEffects;
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.test.AbstractQi4jTest;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.junit.Assert.assertThat;
+
+public class SampleTransientTest extends AbstractQi4jTest
+{
+
+ @Structure
+ TransientBuilderFactory transientBuilderFactory;
+
+ @Override
+ public void assemble( ModuleAssembly module )
+ throws AssemblyException
+ {
+ module.transients( SampleTransient.class );
+ }
+
+ @Test
+ public void givenTransientWithSideEffectsWhenInvokingMethodShouldExecuteSideEffectOnlyOnce()
+ {
+ SampleTransient sample = transientBuilderFactory.newTransient( SampleTransient.class );
+ sample.execute();
+ assertThat( sample.count().get(), equalTo(1));
+ }
+
+ @SideEffects( SampleSideEffect.class )
+ @Mixins( SampleTransientMixin.class )
+ public static interface SampleTransient
+ {
+ void execute();
+
+ @UseDefaults
+ Property<Integer> count();
+ }
+
+ public abstract static class SampleTransientMixin
+ implements SampleTransient
+ {
+ @Override
+ public void execute()
+ {
+ System.out.println( "Invocation of Transient" );
+ }
+ }
+
+ public abstract static class SampleSideEffect extends SideEffectOf<SampleTransient>
+ implements SampleTransient
+ {
+ @Override
+ public void execute()
+ {
+ System.out.println( "Invocation of SideEffect" );
+ count().set( count().get() + 1 );
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/116fa089/core/runtime/src/test/java/org/qi4j/runtime/sideeffects/SpecificSideEffectTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/qi4j/runtime/sideeffects/SpecificSideEffectTest.java b/core/runtime/src/test/java/org/qi4j/runtime/sideeffects/SpecificSideEffectTest.java
index 7bbbd73..21f8c4e 100644
--- a/core/runtime/src/test/java/org/qi4j/runtime/sideeffects/SpecificSideEffectTest.java
+++ b/core/runtime/src/test/java/org/qi4j/runtime/sideeffects/SpecificSideEffectTest.java
@@ -50,7 +50,7 @@ public class SpecificSideEffectTest
Property<Integer> count = some.count();
assertThat( "count is zero", count.get(), equalTo( 0 ) );
some.doStuff();
- assertThat( "count is not zero", count.get(), not( equalTo( 0 ) ) );
+ assertThat( "count is not zero", count.get(), equalTo( 1 ) );
}
@SideEffects( CounterSideEffect.class )
http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/116fa089/core/runtime/src/test/java/org/qi4j/test/ASMTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/qi4j/test/ASMTest.java b/core/runtime/src/test/java/org/qi4j/test/ASMTest.java
index f0cbc6c..797fc0a 100644
--- a/core/runtime/src/test/java/org/qi4j/test/ASMTest.java
+++ b/core/runtime/src/test/java/org/qi4j/test/ASMTest.java
@@ -143,7 +143,7 @@ public class ASMTest
}
@Test
- @Ignore( "This was dead commented code, ~70% of this source file ... What should we do about this!?!" )
+ @Ignore( "Convenience to look at what code is generated in the Fragment Classloader, and is not really a test case." )
public void fragmentClassLoaderGenerateClassTest()
throws Exception
{