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/08/26 17:45:12 UTC

[09/24] zest-java git commit: ZEST-113; Removed the use of Specification and replaced with Java 8 Predicate.

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/bootstrap/src/main/java/org/apache/zest/bootstrap/LayerAssembly.java
----------------------------------------------------------------------
diff --git a/core/bootstrap/src/main/java/org/apache/zest/bootstrap/LayerAssembly.java b/core/bootstrap/src/main/java/org/apache/zest/bootstrap/LayerAssembly.java
index 9b320c3..335752a 100644
--- a/core/bootstrap/src/main/java/org/apache/zest/bootstrap/LayerAssembly.java
+++ b/core/bootstrap/src/main/java/org/apache/zest/bootstrap/LayerAssembly.java
@@ -19,9 +19,9 @@
 
 package org.apache.zest.bootstrap;
 
+import java.util.function.Predicate;
 import org.apache.zest.api.activation.Activator;
 import org.apache.zest.api.structure.Layer;
-import org.apache.zest.functional.Specification;
 
 /**
  * Fluid API for declaring a layer in an application. This is obtained by calling {@link ApplicationAssembly#layer(String)}.
@@ -69,7 +69,7 @@ public interface LayerAssembly
      *
      * @return An EntityDeclaration for the specified EntityComposite types.
      */
-    EntityDeclaration entities( Specification<? super EntityAssembly> specification );
+    EntityDeclaration entities( Predicate<? super EntityAssembly> specification );
 
     /**
      * Given a Specification for ServiceAssembly's, returns a ServiceDeclaration that can
@@ -79,7 +79,7 @@ public interface LayerAssembly
      *
      * @return An ServiceDeclaration for the specified ServiceComposite types.
      */
-    ServiceDeclaration services( Specification<? super ServiceAssembly> specification );
+    ServiceDeclaration services( Predicate<? super ServiceAssembly> specification );
 
     /**
      * Given a Specification for TransientAssembly's, returns a TransientDeclaration that can
@@ -89,7 +89,7 @@ public interface LayerAssembly
      *
      * @return An TransientDeclaration for the specified TransientComposite types.
      */
-    TransientDeclaration transients( Specification<? super TransientAssembly> specification );
+    TransientDeclaration transients( Predicate<? super TransientAssembly> specification );
 
     /**
      * Given a Specification for ValueAssembly's, returns a ValueDeclaration that can
@@ -99,7 +99,7 @@ public interface LayerAssembly
      *
      * @return An ValueDeclaration for the specified ValueComposite types.
      */
-    ValueDeclaration values( Specification<? super ValueAssembly> specification );
+    ValueDeclaration values( Predicate<? super ValueAssembly> specification );
 
     /**
      * Given a Specification for ObjectAssembly's, returns a ObjectDeclaration that can
@@ -109,7 +109,7 @@ public interface LayerAssembly
      *
      * @return An ObjectDeclaration for the specified Object types.
      */
-    ObjectDeclaration objects( Specification<? super ObjectAssembly> specification );
+    ObjectDeclaration objects( Predicate<? super ObjectAssembly> specification );
 
     /**
      * Given a Specification for ImportedServiceAssembly's, returns a ImportedServiceDeclaration that can
@@ -119,5 +119,5 @@ public interface LayerAssembly
      *
      * @return An ImportedServiceDeclaration for the specified Imported Service types.
      */
-    ImportedServiceDeclaration importedServices( Specification<? super ImportedServiceAssembly> specification );
+    ImportedServiceDeclaration importedServices( Predicate<? super ImportedServiceAssembly> specification );
 }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/bootstrap/src/main/java/org/apache/zest/bootstrap/ModuleAssembly.java
----------------------------------------------------------------------
diff --git a/core/bootstrap/src/main/java/org/apache/zest/bootstrap/ModuleAssembly.java b/core/bootstrap/src/main/java/org/apache/zest/bootstrap/ModuleAssembly.java
index 6bf4437..f99c506 100644
--- a/core/bootstrap/src/main/java/org/apache/zest/bootstrap/ModuleAssembly.java
+++ b/core/bootstrap/src/main/java/org/apache/zest/bootstrap/ModuleAssembly.java
@@ -19,10 +19,10 @@
 
 package org.apache.zest.bootstrap;
 
+import java.util.function.Predicate;
 import org.apache.zest.api.activation.Activator;
 import org.apache.zest.api.structure.Module;
 import org.apache.zest.api.type.HasTypes;
-import org.apache.zest.functional.Specification;
 
 /**
  * The ModuleAssembly is used to register any information about * what the module should contain, such as composites,
@@ -98,7 +98,7 @@ public interface ModuleAssembly
      *
      * @return An TransientDeclaration for the specified TransientComposite types.
      */
-    TransientDeclaration transients( Specification<? super TransientAssembly> specification );
+    TransientDeclaration transients( Predicate<? super TransientAssembly> specification );
 
     /**
      * Declare a list of ValueComposites for this Module. Use the ValueDeclaration that is returned to
@@ -118,7 +118,7 @@ public interface ModuleAssembly
      *
      * @return An ValueDeclaration for the specified ValueComposite types.
      */
-    ValueDeclaration values( Specification<? super ValueAssembly> specification );
+    ValueDeclaration values( Predicate<? super ValueAssembly> specification );
 
     /**
      * Declare a list of EntityComposites for this Module. Use the EntityDeclaration that is returned to
@@ -138,7 +138,7 @@ public interface ModuleAssembly
      *
      * @return An EntityDeclaration for the specified EntityComposite types.
      */
-    EntityDeclaration entities( Specification<? super EntityAssembly> specification );
+    EntityDeclaration entities( Predicate<? super EntityAssembly> specification );
 
     /**
      * Declare a list of Configuration Composites for this Module. Use the ConfigurationDeclaration that is returned to
@@ -158,7 +158,7 @@ public interface ModuleAssembly
      *
      * @return An ConfigurationDeclaration for the specified EntityComposite types.
      */
-    ConfigurationDeclaration configurations( Specification<HasTypes> specification );
+    ConfigurationDeclaration configurations( Predicate<HasTypes> specification );
 
 
     /**
@@ -180,7 +180,7 @@ public interface ModuleAssembly
      *
      * @return An ObjectDeclaration for the specified Object types.
      */
-    ObjectDeclaration objects( Specification<? super ObjectAssembly> specification );
+    ObjectDeclaration objects( Predicate<? super ObjectAssembly> specification );
 
     /**
      * Create a list of ServiceComposites for this Module. Use the ServiceDeclaration that is returned to
@@ -211,7 +211,7 @@ public interface ModuleAssembly
      *
      * @return An ServiceDeclaration for the specified ServiceComposite types.
      */
-    ServiceDeclaration services( Specification<? super ServiceAssembly> specification );
+    ServiceDeclaration services( Predicate<? super ServiceAssembly> specification );
 
     /**
      * Declare a list of imported services for this Module. Use the ImportedServiceDeclaration that is returned to
@@ -231,7 +231,7 @@ public interface ModuleAssembly
      *
      * @return An ImportedServiceDeclaration for the specified Imported Service types.
      */
-    ImportedServiceDeclaration importedServices( Specification<? super ImportedServiceAssembly> specification );
+    ImportedServiceDeclaration importedServices( Predicate<? super ImportedServiceAssembly> specification );
 
     <T> MixinDeclaration<T> forMixin( Class<T> mixinType );
 

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/bootstrap/src/test/java/org/apache/zest/bootstrap/DocumentationSupport.java
----------------------------------------------------------------------
diff --git a/core/bootstrap/src/test/java/org/apache/zest/bootstrap/DocumentationSupport.java b/core/bootstrap/src/test/java/org/apache/zest/bootstrap/DocumentationSupport.java
index 6522f57..bd081d0 100644
--- a/core/bootstrap/src/test/java/org/apache/zest/bootstrap/DocumentationSupport.java
+++ b/core/bootstrap/src/test/java/org/apache/zest/bootstrap/DocumentationSupport.java
@@ -18,6 +18,7 @@
  */
 package org.apache.zest.bootstrap;
 
+import java.util.function.Predicate;
 import org.apache.zest.api.activation.ActivationException;
 import org.apache.zest.api.common.Visibility;
 import org.apache.zest.api.property.Property;
@@ -27,15 +28,14 @@ import org.apache.zest.api.structure.Application;
 import org.apache.zest.api.structure.ApplicationDescriptor;
 import org.apache.zest.api.structure.Module;
 import org.apache.zest.functional.Iterables;
-import org.apache.zest.functional.Specification;
 
 public class DocumentationSupport
 {
 
-    public static Specification<ObjectAssembly> hasMyTypeSpecification = new Specification<ObjectAssembly>()
+    public static Predicate<ObjectAssembly> hasMyTypeSpecification = new Predicate<ObjectAssembly>()
     {
 
-        public boolean satisfiedBy( ObjectAssembly item )
+        public boolean test( ObjectAssembly item )
         {
             return Iterables.toList( item.types() ).contains( String.class );
         }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/functional/src/main/java/org/apache/zest/functional/ForEach.java
----------------------------------------------------------------------
diff --git a/core/functional/src/main/java/org/apache/zest/functional/ForEach.java b/core/functional/src/main/java/org/apache/zest/functional/ForEach.java
index e7e815a..23d1619 100644
--- a/core/functional/src/main/java/org/apache/zest/functional/ForEach.java
+++ b/core/functional/src/main/java/org/apache/zest/functional/ForEach.java
@@ -15,6 +15,7 @@ package org.apache.zest.functional;
 
 import java.util.Iterator;
 import java.util.function.Function;
+import java.util.function.Predicate;
 
 /**
  * When using Iterables with map() and filter() the code often reads "in reverse", with the first item last in the code.
@@ -47,7 +48,7 @@ public final class ForEach<T>
         return iterable.iterator();
     }
 
-    public ForEach<T> filter( Specification<? super T> specification )
+    public ForEach<T> filter( Predicate<? super T> specification )
     {
         return new ForEach<>( Iterables.filter( specification, iterable ) );
     }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/functional/src/main/java/org/apache/zest/functional/Functions.java
----------------------------------------------------------------------
diff --git a/core/functional/src/main/java/org/apache/zest/functional/Functions.java b/core/functional/src/main/java/org/apache/zest/functional/Functions.java
index 318c8c0..f5688db 100644
--- a/core/functional/src/main/java/org/apache/zest/functional/Functions.java
+++ b/core/functional/src/main/java/org/apache/zest/functional/Functions.java
@@ -18,6 +18,7 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.function.BiFunction;
 import java.util.function.Function;
+import java.util.function.Predicate;
 
 /**
  * Utility functions. Combine these with methods in Iterables, for example. See FunctionsTest for usages.
@@ -26,14 +27,7 @@ public final class Functions
 {
     public static <A, B, C> BiFunction<Function<? super B, C>, Function<A, B>, Function<A, C>> compose()
     {
-        return new BiFunction<Function<? super B, C>, Function<A, B>, Function<A, C>>()
-        {
-            @Override
-            public Function<A, C> apply( Function<? super B, C> bcFunction, Function<A, B> abFunction )
-            {
-                return compose( bcFunction, abFunction );
-            }
-        };
+        return Functions::compose;
     }
 
     /**
@@ -48,64 +42,29 @@ public final class Functions
                                                                  final Function<FROM, MIDDLE> inner
     )
     {
-        return new Function<FROM, TO>()
-        {
-            @Override
-            public TO apply( FROM from )
-            {
-                return outer.apply( inner.apply( from ) );
-            }
-        };
+        return from -> outer.apply( inner.apply( from ) );
     }
 
     public static <TO, FROM extends TO> Function<FROM, TO> identity()
     {
-        return new Function<FROM, TO>()
-        {
-            @Override
-            public TO apply( FROM from )
-            {
-                return from;
-            }
-        };
+        return from -> from;
     }
 
     public static <FROM, TO> Function<FROM, TO> fromMap( final Map<FROM, TO> map )
     {
-        return new Function<FROM, TO>()
-        {
-            @Override
-            public TO apply( FROM from )
-            {
-                return map.get( from );
-            }
-        };
+        return map::get;
     }
 
     public static <T> Function<T, T> withDefault( final T defaultValue )
     {
-        return new Function<T, T>()
-        {
-            @Override
-            public T apply( T from )
-            {
-                if( from == null )
-                {
-                    return defaultValue;
-                }
-                else
-                {
-                    return from;
-                }
-            }
-        };
+        return from -> from == null ? defaultValue : from;
     }
 
     public static Function<Number, Long> longSum()
     {
         return new Function<Number, Long>()
         {
-            long sum;
+            private long sum = 0;
 
             @Override
             public Long apply( Number number )
@@ -120,7 +79,7 @@ public final class Functions
     {
         return new Function<Number, Integer>()
         {
-            int sum;
+            private int sum = 0;
 
             @Override
             public Integer apply( Number number )
@@ -142,7 +101,7 @@ public final class Functions
      *
      * @return A Function that can count items adhering to a Specification.
      */
-    public static <T> Function<T, Integer> count( final Specification<T> specification )
+    public static <T> Function<T, Integer> count( final Predicate<T> specification )
     {
         return new Function<T, Integer>()
         {
@@ -151,7 +110,7 @@ public final class Functions
             @Override
             public Integer apply( T item )
             {
-                if( specification.satisfiedBy( item ) )
+                if( specification.test( item ) )
                 {
                     count++;
                 }
@@ -171,7 +130,7 @@ public final class Functions
      * @return A Function that will provide the 'index' where the Specifcation is fulfilled. The Function will
      * return -1 if the current item doesn't fulfill the Specification.
      */
-    public static <T> Function<T, Integer> indexOf( final Specification<T> specification )
+    public static <T> Function<T, Integer> indexOf( final Predicate<T> specification )
     {
         return new Function<T, Integer>()
         {
@@ -181,7 +140,7 @@ public final class Functions
             @Override
             public Integer apply( T item )
             {
-                if( index == -1 && specification.satisfiedBy( item ) )
+                if( index == -1 && specification.test( item ) )
                 {
                     index = current;
                 }
@@ -218,14 +177,14 @@ public final class Functions
      *
      * @return A Function that performs the filter operation when applied to Iterables.
      */
-    public static <T> Function<T, T> filteredMap( final Specification<T> specification, final Function<T, T> function )
+    public static <T> Function<T, T> filteredMap( final Predicate<T> specification, final Function<T, T> function )
     {
         return new Function<T, T>()
         {
             @Override
             public T apply( T from )
             {
-                return specification.satisfiedBy( from ) ? function.apply( from ) : from;
+                return specification.test( from ) ? function.apply( from ) : from;
             }
         };
     }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/functional/src/main/java/org/apache/zest/functional/Iterables.java
----------------------------------------------------------------------
diff --git a/core/functional/src/main/java/org/apache/zest/functional/Iterables.java b/core/functional/src/main/java/org/apache/zest/functional/Iterables.java
index 1b80bcc..bc6f076 100644
--- a/core/functional/src/main/java/org/apache/zest/functional/Iterables.java
+++ b/core/functional/src/main/java/org/apache/zest/functional/Iterables.java
@@ -27,6 +27,7 @@ import java.util.List;
 import java.util.NoSuchElementException;
 import java.util.Set;
 import java.util.function.Function;
+import java.util.function.Predicate;
 
 /**
  * Utility methods for working with Iterables. See test for examples of how to use.
@@ -204,9 +205,9 @@ public final class Iterables
     }
 
     @SuppressWarnings( "unchecked" )
-    public static <X> Iterable<X> filter( Specification<? /* super X*/> specification, Iterable<X> i )
+    public static <X> Iterable<X> filter( Predicate<? /* super X*/> specification, Iterable<X> i )
     {
-        return new FilterIterable<>( i, (Specification<? super X>) specification );
+        return new FilterIterable<>( i, (Predicate<? super X>) specification );
     }
 
     public static <X> X first( Iterable<X> i )
@@ -287,13 +288,13 @@ public final class Iterables
         return list;
     }
 
-    public static <T> boolean matchesAny( Specification<? super T> specification, Iterable<T> iterable )
+    public static <T> boolean matchesAny( Predicate<? super T> specification, Iterable<T> iterable )
     {
         boolean result = false;
 
         for( T item : iterable )
         {
-            if( ( (Specification<? super T>) specification ).satisfiedBy( item ) )
+            if( ( (Predicate<? super T>) specification ).test( item ) )
             {
                 result = true;
                 break;
@@ -303,12 +304,12 @@ public final class Iterables
         return result;
     }
 
-    public static <T> boolean matchesAll( Specification<? super T> specification, Iterable<T> iterable )
+    public static <T> boolean matchesAll( Predicate<? super T> specification, Iterable<T> iterable )
     {
         boolean result = true;
         for( T item : iterable )
         {
-            if( !specification.satisfiedBy( item ) )
+            if( !specification.test( item ) )
             {
                 result = false;
             }
@@ -717,9 +718,9 @@ public final class Iterables
     {
         private final Iterable<T> iterable;
 
-        private final Specification<? super T> specification;
+        private final Predicate<? super T> specification;
 
-        private FilterIterable( Iterable<T> iterable, Specification<? super T> specification )
+        private FilterIterable( Iterable<T> iterable, Predicate<? super T> specification )
         {
             this.iterable = iterable;
             this.specification = specification;
@@ -736,13 +737,13 @@ public final class Iterables
         {
             private final Iterator<T> iterator;
 
-            private final Specification<? super T> specification;
+            private final Predicate<? super T> specification;
 
             private T currentValue;
             boolean finished = false;
             boolean nextConsumed = true;
 
-            private FilterIterator( Iterator<T> iterator, Specification<? super T> specification )
+            private FilterIterator( Iterator<T> iterator, Predicate<? super T> specification )
             {
                 this.specification = specification;
                 this.iterator = iterator;
@@ -754,7 +755,7 @@ public final class Iterables
                 while( !found && iterator.hasNext() )
                 {
                     T currentValue = iterator.next();
-                    boolean satisfies = specification.satisfiedBy( currentValue );
+                    boolean satisfies = specification.test( currentValue );
 
                     if( satisfies )
                     {

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/functional/src/main/java/org/apache/zest/functional/Specification.java
----------------------------------------------------------------------
diff --git a/core/functional/src/main/java/org/apache/zest/functional/Specification.java b/core/functional/src/main/java/org/apache/zest/functional/Specification.java
deleted file mode 100644
index 3ff725d..0000000
--- a/core/functional/src/main/java/org/apache/zest/functional/Specification.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2010, Rickard Öberg. 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.apache.zest.functional;
-
-/**
- * Generic specification interface.
- *
- * @param <T>
- */
-// START SNIPPET: specification
-public interface Specification<T>
-{
-// END SNIPPET: specification
-
-    /**
-     * Test whether an item matches the given specification
-     *
-     * @param item the item to be tested
-     *
-     * @return true if the item matches, false otherwise
-     */
-// START SNIPPET: specification
-    boolean satisfiedBy( T item );
-}
-// END SNIPPET: specification

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/functional/src/main/java/org/apache/zest/functional/Specifications.java
----------------------------------------------------------------------
diff --git a/core/functional/src/main/java/org/apache/zest/functional/Specifications.java b/core/functional/src/main/java/org/apache/zest/functional/Specifications.java
index e81cd48..467f468 100644
--- a/core/functional/src/main/java/org/apache/zest/functional/Specifications.java
+++ b/core/functional/src/main/java/org/apache/zest/functional/Specifications.java
@@ -14,70 +14,71 @@
 package org.apache.zest.functional;
 
 import java.util.function.Function;
+import java.util.function.Predicate;
 
 /**
  * Common generic specification expressions
  */
 public class Specifications
 {
-    public static <T> Specification<T> TRUE()
+    public static <T> Predicate<T> TRUE()
     {
-        return new Specification<T>()
+        return new Predicate<T>()
         {
             @Override
-            public boolean satisfiedBy( T instance )
+            public boolean test( T instance )
             {
                 return true;
             }
         };
     }
 
-    public static <T> Specification<T> not( final Specification<T> specification )
+    public static <T> Predicate<T> not( final Predicate<T> specification )
     {
-        return new Specification<T>()
+        return new Predicate<T>()
         {
             @Override
-            public boolean satisfiedBy( T instance )
+            public boolean test( T instance )
             {
-                return !specification.satisfiedBy( instance );
+                return !specification.test( instance );
             }
         };
     }
 
     @SafeVarargs
-    public static <T> AndSpecification<T> and( final Specification<T>... specifications )
+    public static <T> AndSpecification<T> and( final Predicate<T>... specifications )
     {
         return and( Iterables.iterable( specifications ) );
     }
 
-    public static <T> AndSpecification<T> and( final Iterable<Specification<T>> specifications )
+    public static <T> AndSpecification<T> and( final Iterable<Predicate<T>> specifications )
     {
         return new AndSpecification<>( specifications );
     }
 
     @SafeVarargs
-    public static <T> OrSpecification<T> or( final Specification<T>... specifications )
+    public static <T> OrSpecification<T> or( final Predicate<T>... specifications )
     {
         return or( Iterables.iterable( specifications ) );
     }
 
-    public static <T> OrSpecification<T> or( final Iterable<Specification<T>> specifications )
+    public static <T> OrSpecification<T> or( final Iterable<Predicate<T>> specifications )
     {
         return new OrSpecification<>( specifications );
     }
 
     @SafeVarargs
-    public static <T> Specification<T> in( final T... allowed )
+    public static <T> Predicate<T> in( final T... allowed )
     {
         return in( Iterables.iterable( allowed ) );
     }
 
-    public static <T> Specification<T> in( final Iterable<T> allowed )
+    public static <T> Predicate<T> in( final Iterable<T> allowed )
     {
-        return new Specification<T>()
+        return new Predicate<T>()
         {
             @Override
-            public boolean satisfiedBy( T item )
+            public boolean test( T item )
             {
                 for( T allow : allowed )
                 {
@@ -91,28 +92,28 @@ public class Specifications
         };
     }
 
-    public static <T> Specification<T> notNull()
+    public static <T> Predicate<T> notNull()
     {
-        return new Specification<T>()
+        return new Predicate<T>()
         {
             @Override
-            public boolean satisfiedBy( T item )
+            public boolean test( T item )
             {
                 return item != null;
             }
         };
     }
 
-    public static <FROM, TO> Specification<FROM> translate( final Function<FROM, TO> function,
-                                                            final Specification<? super TO> specification
+    public static <FROM, TO> Predicate<FROM> translate( final Function<FROM, TO> function,
+                                                        final Predicate<? super TO> specification
     )
     {
-        return new Specification<FROM>()
+        return new Predicate<FROM>()
         {
             @Override
-            public boolean satisfiedBy( FROM item )
+            public boolean test( FROM item )
             {
-                return specification.satisfiedBy( function.apply( item ) );
+                return specification.test( function.apply( item ) );
             }
         };
     }
@@ -121,21 +122,21 @@ public class Specifications
      * AND Specification.
      */
     public static class AndSpecification<T>
-        implements Specification<T>
+        implements Predicate<T>
     {
-        private final Iterable<Specification<T>> specifications;
+        private final Iterable<Predicate<T>> specifications;
 
-        private AndSpecification( Iterable<Specification<T>> specifications )
+        private AndSpecification( Iterable<Predicate<T>> specifications )
         {
             this.specifications = specifications;
         }
 
         @Override
-        public boolean satisfiedBy( T instance )
+        public boolean test( T instance )
         {
-            for( Specification<T> specification : specifications )
+            for( Predicate<T> specification : specifications )
             {
-                if( !specification.satisfiedBy( instance ) )
+                if( !specification.test( instance ) )
                 {
                     return false;
                 }
@@ -145,15 +146,15 @@ public class Specifications
         }
 
         @SafeVarargs
-        public final AndSpecification<T> and( Specification<T>... specifications )
+        public final AndSpecification<T> and( Predicate<T>... specifications )
         {
-            Iterable<Specification<T>> iterable = Iterables.iterable( specifications );
-            Iterable<Specification<T>> flatten = Iterables.flatten( this.specifications, iterable );
+            Iterable<Predicate<T>> iterable = Iterables.iterable( specifications );
+            Iterable<Predicate<T>> flatten = Iterables.flatten( this.specifications, iterable );
             return Specifications.and( flatten );
         }
 
         @SafeVarargs
-        public final OrSpecification<T> or( Specification<T>... specifications )
+        public final OrSpecification<T> or( Predicate<T>... specifications )
         {
             return Specifications.or( Iterables.prepend( this, Iterables.iterable( specifications ) ) );
         }
@@ -163,21 +164,21 @@ public class Specifications
      * OR Specification.
      */
     public static class OrSpecification<T>
-        implements Specification<T>
+        implements Predicate<T>
     {
-        private final Iterable<Specification<T>> specifications;
+        private final Iterable<Predicate<T>> specifications;
 
-        private OrSpecification( Iterable<Specification<T>> specifications )
+        private OrSpecification( Iterable<Predicate<T>> specifications )
         {
             this.specifications = specifications;
         }
 
         @Override
-        public boolean satisfiedBy( T instance )
+        public boolean test( T instance )
         {
-            for( Specification<T> specification : specifications )
+            for( Predicate<T> specification : specifications )
             {
-                if( specification.satisfiedBy( instance ) )
+                if( specification.test( instance ) )
                 {
                     return true;
                 }
@@ -187,16 +188,16 @@ public class Specifications
         }
 
         @SafeVarargs
-        public final AndSpecification<T> and( Specification<T>... specifications )
+        public final AndSpecification<T> and( Predicate<T>... specifications )
         {
             return Specifications.and( Iterables.prepend( this, Iterables.iterable( specifications ) ) );
         }
 
         @SafeVarargs
-        public final OrSpecification<T> or( Specification<T>... specifications )
+        public final OrSpecification<T> or( Predicate<T>... specifications )
         {
-            Iterable<Specification<T>> iterable = Iterables.iterable( specifications );
-            Iterable<Specification<T>> flatten = Iterables.flatten( this.specifications, iterable );
+            Iterable<Predicate<T>> iterable = Iterables.iterable( specifications );
+            Iterable<Predicate<T>> flatten = Iterables.flatten( this.specifications, iterable );
             return Specifications.or( flatten );
         }
     }
@@ -204,5 +205,4 @@ public class Specifications
     private Specifications()
     {
     }
-
 }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/functional/src/test/java/org/apache/zest/functional/IntegerRangeSpecificationTest.java
----------------------------------------------------------------------
diff --git a/core/functional/src/test/java/org/apache/zest/functional/IntegerRangeSpecificationTest.java b/core/functional/src/test/java/org/apache/zest/functional/IntegerRangeSpecificationTest.java
index fa082fe..7deb6ae 100644
--- a/core/functional/src/test/java/org/apache/zest/functional/IntegerRangeSpecificationTest.java
+++ b/core/functional/src/test/java/org/apache/zest/functional/IntegerRangeSpecificationTest.java
@@ -16,6 +16,7 @@
 
 package org.apache.zest.functional;
 
+import java.util.function.Predicate;
 import org.junit.Test;
 
 import static org.junit.Assert.assertFalse;
@@ -27,17 +28,17 @@ public class IntegerRangeSpecificationTest
     @Test
     public void test1()
     {
-        Specification<Integer> spec = new IntegerRangeSpecification( 10, 12 );
-        assertTrue( spec.satisfiedBy( 10 ) );
-        assertTrue( spec.satisfiedBy( 11 ) );
-        assertTrue( spec.satisfiedBy( 12 ) );
-        assertFalse( spec.satisfiedBy( 9 ) );
-        assertFalse( spec.satisfiedBy( 13 ) );
+        Predicate<Integer> spec = new IntegerRangeSpecification( 10, 12 );
+        assertTrue( spec.test( 10 ) );
+        assertTrue( spec.test( 11 ) );
+        assertTrue( spec.test( 12 ) );
+        assertFalse( spec.test( 9 ) );
+        assertFalse( spec.test( 13 ) );
     }
 
     // START SNIPPET: specification
     public static class IntegerRangeSpecification
-        implements Specification<Integer>
+        implements Predicate<Integer>
     {
 
         private int lower;
@@ -50,7 +51,7 @@ public class IntegerRangeSpecificationTest
         }
 
         @Override
-        public boolean satisfiedBy( Integer item )
+        public boolean test( Integer item )
         {
             return item >= lower && item <= higher;
         }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/functional/src/test/java/org/apache/zest/functional/IterablesTest.java
----------------------------------------------------------------------
diff --git a/core/functional/src/test/java/org/apache/zest/functional/IterablesTest.java b/core/functional/src/test/java/org/apache/zest/functional/IterablesTest.java
index 3171fbc..7ff5bab 100644
--- a/core/functional/src/test/java/org/apache/zest/functional/IterablesTest.java
+++ b/core/functional/src/test/java/org/apache/zest/functional/IterablesTest.java
@@ -19,6 +19,7 @@ import java.util.Comparator;
 import java.util.Enumeration;
 import java.util.List;
 import java.util.function.Function;
+import java.util.function.Predicate;
 import org.hamcrest.CoreMatchers;
 import org.junit.Test;
 
@@ -249,11 +250,11 @@ public class IterablesTest
     {
         final int[] count = new int[ 1 ];
 
-        Iterable<String> b = Iterables.cache( Iterables.filter( Specifications.and( new Specification<String>()
+        Iterable<String> b = Iterables.cache( Iterables.filter( Specifications.and( new Predicate<String>()
         {
 
             @Override
-            public boolean satisfiedBy( String item )
+            public boolean test( String item )
             {
                 count[ 0] = count[ 0] + 1;
                 return true;

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/functional/src/test/java/org/apache/zest/functional/SpecificationsTest.java
----------------------------------------------------------------------
diff --git a/core/functional/src/test/java/org/apache/zest/functional/SpecificationsTest.java b/core/functional/src/test/java/org/apache/zest/functional/SpecificationsTest.java
index 7767ffe..f5ce2c0 100644
--- a/core/functional/src/test/java/org/apache/zest/functional/SpecificationsTest.java
+++ b/core/functional/src/test/java/org/apache/zest/functional/SpecificationsTest.java
@@ -15,6 +15,7 @@
 package org.apache.zest.functional;
 
 import java.util.function.Function;
+import java.util.function.Predicate;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -28,45 +29,44 @@ public class SpecificationsTest
     @Test
     public void testTRUE()
     {
-        Assert.assertThat( Specifications.<Object>TRUE().satisfiedBy( new Object() ), equalTo( true ) );
+        Assert.assertThat( Specifications.<Object>TRUE().test( new Object() ), equalTo( true ) );
     }
 
     @Test
     public void testNot()
     {
-        Assert.assertThat( Specifications.not( Specifications.<Object>TRUE() )
-                               .satisfiedBy( new Object() ), equalTo( false ) );
+        Assert.assertThat( Specifications.not( Specifications.<Object>TRUE() ).test( new Object() ), equalTo( false ) );
     }
 
     @Test
     public void testAnd()
     {
-        Specification<Object> trueSpec = Specifications.<Object>TRUE();
-        Specification<Object> falseSpec = Specifications.not( Specifications.<Object>TRUE() );
+        Predicate<Object> trueSpec = Specifications.<Object>TRUE();
+        Predicate<Object> falseSpec = Specifications.not( Specifications.<Object>TRUE() );
 
-        Assert.assertThat( Specifications.and( falseSpec, falseSpec ).satisfiedBy( new Object() ), equalTo( false ) );
-        Assert.assertThat( Specifications.and( trueSpec, falseSpec ).satisfiedBy( new Object() ), equalTo( false ) );
-        Assert.assertThat( Specifications.and( falseSpec, trueSpec ).satisfiedBy( new Object() ), equalTo( false ) );
-        Assert.assertThat( Specifications.and( trueSpec, trueSpec ).satisfiedBy( new Object() ), equalTo( true ) );
+        Assert.assertThat( Specifications.and( falseSpec, falseSpec ).test( new Object() ), equalTo( false ) );
+        Assert.assertThat( Specifications.and( trueSpec, falseSpec ).test( new Object() ), equalTo( false ) );
+        Assert.assertThat( Specifications.and( falseSpec, trueSpec ).test( new Object() ), equalTo( false ) );
+        Assert.assertThat( Specifications.and( trueSpec, trueSpec ).test( new Object() ), equalTo( true ) );
     }
 
     @Test
     public void testOr()
     {
-        Specification<Object> trueSpec = Specifications.<Object>TRUE();
-        Specification<Object> falseSpec = Specifications.not( Specifications.<Object>TRUE() );
+        Predicate<Object> trueSpec = Specifications.<Object>TRUE();
+        Predicate<Object> falseSpec = Specifications.not( Specifications.<Object>TRUE() );
 
-        Assert.assertThat( Specifications.or( falseSpec, falseSpec ).satisfiedBy( new Object() ), equalTo( false ) );
-        Assert.assertThat( Specifications.or( trueSpec, falseSpec ).satisfiedBy( new Object() ), equalTo( true ) );
-        Assert.assertThat( Specifications.or( falseSpec, trueSpec ).satisfiedBy( new Object() ), equalTo( true ) );
-        Assert.assertThat( Specifications.or( trueSpec, trueSpec ).satisfiedBy( new Object() ), equalTo( true ) );
+        Assert.assertThat( Specifications.or( falseSpec, falseSpec ).test( new Object() ), equalTo( false ) );
+        Assert.assertThat( Specifications.or( trueSpec, falseSpec ).test( new Object() ), equalTo( true ) );
+        Assert.assertThat( Specifications.or( falseSpec, trueSpec ).test( new Object() ), equalTo( true ) );
+        Assert.assertThat( Specifications.or( trueSpec, trueSpec ).test( new Object() ), equalTo( true ) );
     }
 
     @Test
     public void testIn()
     {
-        Assert.assertThat( Specifications.in( "1", "2", "3" ).satisfiedBy( "2" ), equalTo( true ) );
-        Assert.assertThat( Specifications.in( "1", "2", "3" ).satisfiedBy( "4" ), equalTo( false ) );
+        Assert.assertThat( Specifications.in( "1", "2", "3" ).test( "2" ), equalTo( true ) );
+        Assert.assertThat( Specifications.in( "1", "2", "3" ).test( "4" ), equalTo( false ) );
     }
 
     @Test
@@ -81,6 +81,6 @@ public class SpecificationsTest
             }
         };
 
-        Assert.assertTrue( Specifications.translate( stringifier, Specifications.in( "3" ) ).satisfiedBy( 3L ) );
+        Assert.assertTrue( Specifications.translate( stringifier, Specifications.in( "3" ) ).test( 3L ) );
     }
 }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/io/src/main/java/org/apache/zest/io/Transforms.java
----------------------------------------------------------------------
diff --git a/core/io/src/main/java/org/apache/zest/io/Transforms.java b/core/io/src/main/java/org/apache/zest/io/Transforms.java
index db5890f..ac169bd 100644
--- a/core/io/src/main/java/org/apache/zest/io/Transforms.java
+++ b/core/io/src/main/java/org/apache/zest/io/Transforms.java
@@ -20,8 +20,8 @@ import java.text.MessageFormat;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.locks.Lock;
 import java.util.function.Function;
+import java.util.function.Predicate;
 import java.util.logging.Logger;
-import org.apache.zest.functional.Specification;
 
 /**
  * Utility class for I/O transforms
@@ -38,7 +38,7 @@ public class Transforms
      *
      * @return And Output encapsulation the filter operation.
      */
-    public static <T, Receiver2ThrowableType extends Throwable> Output<T, Receiver2ThrowableType> filter( final Specification<? super T> specification,
+    public static <T, Receiver2ThrowableType extends Throwable> Output<T, Receiver2ThrowableType> filter( final Predicate<? super T> specification,
                                                                                                           final Output<T, Receiver2ThrowableType> output
     )
     {
@@ -60,7 +60,7 @@ public class Transforms
                             public void receive( T item )
                                 throws ReceiverThrowableType
                             {
-                                if( specification.satisfiedBy( item ) )
+                                if( specification.test( item ) )
                                 {
                                     receiver.receive( item );
                                 }
@@ -126,7 +126,7 @@ public class Transforms
      *
      * @return An Output instance that encapsulates the operation.
      */
-    public static <T, Receiver2ThrowableType extends Throwable> Output<T, Receiver2ThrowableType> filteredMap( final Specification<? super T> specification,
+    public static <T, Receiver2ThrowableType extends Throwable> Output<T, Receiver2ThrowableType> filteredMap( final Predicate<? super T> specification,
                                                                                                                final Function<? super T, ? extends T> function,
                                                                                                                final Output<T, Receiver2ThrowableType> output
     )
@@ -149,7 +149,7 @@ public class Transforms
                             public void receive( T item )
                                 throws ReceiverThrowableType
                             {
-                                if( specification.satisfiedBy( item ) )
+                                if( specification.test( item ) )
                                 {
                                     receiver.receive( function.apply( item ) );
                                 }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/CompositeAssemblyImpl.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/CompositeAssemblyImpl.java b/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/CompositeAssemblyImpl.java
index 5ab762f..7f4b83f 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/CompositeAssemblyImpl.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/CompositeAssemblyImpl.java
@@ -20,6 +20,7 @@ package org.apache.zest.runtime.bootstrap;
 
 import java.lang.annotation.Annotation;
 import java.lang.reflect.AccessibleObject;
+import java.lang.reflect.AnnotatedElement;
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Member;
@@ -32,7 +33,10 @@ import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.function.Consumer;
 import java.util.function.Function;
+import java.util.function.Predicate;
+import java.util.stream.StreamSupport;
 import org.apache.zest.api.common.MetaInfo;
 import org.apache.zest.api.common.Optional;
 import org.apache.zest.api.common.QualifiedName;
@@ -58,11 +62,8 @@ import org.apache.zest.api.util.Annotations;
 import org.apache.zest.api.util.Classes;
 import org.apache.zest.api.util.Fields;
 import org.apache.zest.bootstrap.StateDeclarations;
-import org.apache.zest.functional.ForEach;
 import org.apache.zest.functional.HierarchicalVisitorAdapter;
 import org.apache.zest.functional.Iterables;
-import org.apache.zest.functional.Specification;
-import org.apache.zest.functional.Visitor;
 import org.apache.zest.runtime.composite.AbstractConstraintModel;
 import org.apache.zest.runtime.composite.CompositeConstraintModel;
 import org.apache.zest.runtime.composite.CompositeMethodModel;
@@ -71,7 +72,7 @@ import org.apache.zest.runtime.composite.ConcernModel;
 import org.apache.zest.runtime.composite.ConcernsModel;
 import org.apache.zest.runtime.composite.ConstraintModel;
 import org.apache.zest.runtime.composite.ConstraintsModel;
-import org.apache.zest.runtime.composite.GenericSpecification;
+import org.apache.zest.runtime.composite.Genericpredicate;
 import org.apache.zest.runtime.composite.MixinModel;
 import org.apache.zest.runtime.composite.MixinsModel;
 import org.apache.zest.runtime.composite.SideEffectModel;
@@ -314,16 +315,16 @@ public abstract class CompositeAssemblyImpl
         // Check if mixinClass implements the method. If so, check if the mixinClass is generic or if the filter passes.
         // If a mixinClass is both generic AND non-generic at the same time, then the filter applies to the non-generic
         // side only.
-        Specification<Class<?>> appliesToSpec = new Specification<Class<?>>()
+        Predicate<Class<?>> appliesToSpec = new Predicate<Class<?>>()
         {
             @Override
-            public boolean satisfiedBy( Class<?> item )
+            public boolean test( Class<?> item )
             {
                 return helper.appliesTo( item, method, types, item );
             }
         };
         return first( filter( and( isAssignableFrom( method.getDeclaringClass() ),
-                                   or( GenericSpecification.INSTANCE, appliesToSpec ) ),
+                                   or( Genericpredicate.INSTANCE, appliesToSpec ) ),
                               mixins ) );
     }
 
@@ -331,10 +332,10 @@ public abstract class CompositeAssemblyImpl
     private Class<?> findGenericImplementation( final Method method, Iterable<Class<?>> mixins )
     {
         // Check if mixinClass is generic and the applies-to filter passes
-        return first( filter( and( GenericSpecification.INSTANCE, new Specification<Class<?>>()
+        return first( filter( and( Genericpredicate.INSTANCE, new Predicate<Class<?>>()
         {
             @Override
-            public boolean satisfiedBy( Class<?> item )
+            public boolean test( Class<?> item )
             {
                 return helper.appliesTo( item, method, types, item );
             }
@@ -389,19 +390,18 @@ public abstract class CompositeAssemblyImpl
                 if( visited instanceof MixinModel )
                 {
                     MixinModel model = (MixinModel) visited;
-                    Visitor<Field, RuntimeException> addState = new Visitor<Field, RuntimeException>()
+                    Consumer<Field> addState = new Consumer<Field>()
                     {
                         @Override
-                        public boolean visit( Field visited )
-                            throws RuntimeException
+                        public void accept( Field field )
                         {
-                            addStateFor( visited, constraintClasses );
-                            return true;
+                            addStateFor( field, constraintClasses );
                         }
                     };
-                    ForEach.forEach( Fields.FIELDS_OF.apply( model.mixinClass() ) ).
-                        filter( Annotations.hasAnnotation( State.class ) ).
-                        visit( addState );
+                    Iterable<Field> fields = Fields.FIELDS_OF.apply( model.mixinClass() );
+                    StreamSupport.stream( fields.spliterator(), true )
+                        .filter( Annotations.hasAnnotation( State.class ) )
+                        .forEach( addState );
                     return false;
                 }
                 return super.visitEnter( visited );
@@ -517,9 +517,10 @@ public abstract class CompositeAssemblyImpl
         valueType = wrapperClass( valueType );
 
         List<AbstractConstraintModel> constraintModels = new ArrayList<>();
+        Iterable<Annotation> filter = filter( translate( type(), hasAnnotation( ConstraintDeclaration.class ) ),
+                                              constraintAnnotations );
         nextConstraint:
-        for( Annotation constraintAnnotation : filter( translate( type(), hasAnnotation( ConstraintDeclaration.class ) ),
-                                                       constraintAnnotations ) )
+        for( Annotation constraintAnnotation : filter )
         {
             // Check composite declarations first
             Class<? extends Annotation> annotationType = constraintAnnotation.annotationType();

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/LayerAssemblyImpl.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/LayerAssemblyImpl.java b/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/LayerAssemblyImpl.java
index c199bee..d029800 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/LayerAssemblyImpl.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/LayerAssemblyImpl.java
@@ -23,6 +23,7 @@ import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.function.Predicate;
 import org.apache.zest.api.activation.Activator;
 import org.apache.zest.api.common.MetaInfo;
 import org.apache.zest.api.common.Visibility;
@@ -44,7 +45,6 @@ import org.apache.zest.bootstrap.TransientAssembly;
 import org.apache.zest.bootstrap.TransientDeclaration;
 import org.apache.zest.bootstrap.ValueAssembly;
 import org.apache.zest.bootstrap.ValueDeclaration;
-import org.apache.zest.functional.Specification;
 
 /**
  * Assembly of a Layer. From here you can create more ModuleAssemblies for
@@ -135,7 +135,7 @@ public final class LayerAssemblyImpl
     }
 
     @Override
-    public EntityDeclaration entities( Specification<? super EntityAssembly> specification )
+    public EntityDeclaration entities( Predicate<? super EntityAssembly> specification )
     {
         final List<EntityDeclaration> declarations = new ArrayList<>();
 
@@ -209,7 +209,7 @@ public final class LayerAssemblyImpl
     }
 
     @Override
-    public ServiceDeclaration services( Specification<? super ServiceAssembly> specification )
+    public ServiceDeclaration services( Predicate<? super ServiceAssembly> specification )
     {
         final List<ServiceDeclaration> declarations = new ArrayList<>();
 
@@ -325,7 +325,7 @@ public final class LayerAssemblyImpl
     }
 
     @Override
-    public TransientDeclaration transients( Specification<? super TransientAssembly> specification )
+    public TransientDeclaration transients( Predicate<? super TransientAssembly> specification )
     {
         final List<TransientDeclaration> declarations = new ArrayList<>();
 
@@ -399,7 +399,7 @@ public final class LayerAssemblyImpl
     }
 
     @Override
-    public ValueDeclaration values( Specification<? super ValueAssembly> specification )
+    public ValueDeclaration values( Predicate<? super ValueAssembly> specification )
     {
         final List<ValueDeclaration> declarations = new ArrayList<>();
 
@@ -472,7 +472,7 @@ public final class LayerAssemblyImpl
     }
 
     @Override
-    public ObjectDeclaration objects( Specification<? super ObjectAssembly> specification )
+    public ObjectDeclaration objects( Predicate<? super ObjectAssembly> specification )
     {
         final List<ObjectDeclaration> declarations = new ArrayList<>();
 
@@ -506,7 +506,7 @@ public final class LayerAssemblyImpl
     }
 
     @Override
-    public ImportedServiceDeclaration importedServices( Specification<? super ImportedServiceAssembly> specification )
+    public ImportedServiceDeclaration importedServices( Predicate<? super ImportedServiceAssembly> specification )
     {
         final List<ImportedServiceDeclaration> declarations = new ArrayList<>();
 

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ModuleAssemblyImpl.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ModuleAssemblyImpl.java b/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ModuleAssemblyImpl.java
index 673dfe7..6f072de 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ModuleAssemblyImpl.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ModuleAssemblyImpl.java
@@ -22,6 +22,7 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.function.Predicate;
 import org.apache.zest.api.activation.Activator;
 import org.apache.zest.api.common.MetaInfo;
 import org.apache.zest.api.common.Visibility;
@@ -55,7 +56,6 @@ import org.apache.zest.bootstrap.TransientDeclaration;
 import org.apache.zest.bootstrap.ValueAssembly;
 import org.apache.zest.bootstrap.ValueDeclaration;
 import org.apache.zest.functional.Iterables;
-import org.apache.zest.functional.Specification;
 import org.apache.zest.functional.Specifications;
 import org.apache.zest.runtime.activation.ActivatorsModel;
 import org.apache.zest.runtime.composite.TransientModel;
@@ -168,12 +168,12 @@ public final class ModuleAssemblyImpl
     }
 
     @Override
-    public ValueDeclaration values( Specification<? super ValueAssembly> specification )
+    public ValueDeclaration values( Predicate<? super ValueAssembly> specification )
     {
         List<ValueAssemblyImpl> assemblies = new ArrayList<>();
         for( ValueAssemblyImpl transientAssembly : valueAssemblies.values() )
         {
-            if( specification.satisfiedBy( transientAssembly ) )
+            if( specification.test( transientAssembly ) )
             {
                 assemblies.add( transientAssembly );
             }
@@ -206,12 +206,12 @@ public final class ModuleAssemblyImpl
     }
 
     @Override
-    public TransientDeclaration transients( Specification<? super TransientAssembly> specification )
+    public TransientDeclaration transients( Predicate<? super TransientAssembly> specification )
     {
         List<TransientAssemblyImpl> assemblies = new ArrayList<>();
         for( TransientAssemblyImpl transientAssembly : transientAssemblies.values() )
         {
-            if( specification.satisfiedBy( transientAssembly ) )
+            if( specification.test( transientAssembly ) )
             {
                 assemblies.add( transientAssembly );
             }
@@ -244,12 +244,12 @@ public final class ModuleAssemblyImpl
     }
 
     @Override
-    public EntityDeclaration entities( Specification<? super EntityAssembly> specification )
+    public EntityDeclaration entities( Predicate<? super EntityAssembly> specification )
     {
         List<EntityAssemblyImpl> assemblies = new ArrayList<>();
         for( EntityAssemblyImpl entityAssembly : entityAssemblies.values() )
         {
-            if( specification.satisfiedBy( entityAssembly ) )
+            if( specification.test( entityAssembly ) )
             {
                 assemblies.add( entityAssembly );
             }
@@ -298,14 +298,14 @@ public final class ModuleAssemblyImpl
     }
 
     @Override
-    public ConfigurationDeclaration configurations( Specification<HasTypes> specification )
+    public ConfigurationDeclaration configurations( Predicate<HasTypes> specification )
     {
-        Specification<HasTypes> isConfigurationComposite = new MatchTypeSpecification( Identity.class );
+        Predicate<HasTypes> isConfigurationComposite = new MatchTypeSpecification( Identity.class );
         specification = Specifications.and( specification, isConfigurationComposite );
         List<EntityAssemblyImpl> entityAssmblyList = new ArrayList<>();
         for( EntityAssemblyImpl entityAssembly : entityAssemblies.values() )
         {
-            if( specification.satisfiedBy( entityAssembly ) )
+            if( specification.test( entityAssembly ) )
             {
                 entityAssmblyList.add( entityAssembly );
             }
@@ -313,7 +313,7 @@ public final class ModuleAssemblyImpl
         List<ValueAssemblyImpl> valueAssemblyList = new ArrayList<>();
         for( ValueAssemblyImpl transientAssembly : valueAssemblies.values() )
         {
-            if( specification.satisfiedBy( transientAssembly ) )
+            if( specification.test( transientAssembly ) )
             {
                 valueAssemblyList.add( transientAssembly );
             }
@@ -349,12 +349,12 @@ public final class ModuleAssemblyImpl
     }
 
     @Override
-    public ObjectDeclaration objects( Specification<? super ObjectAssembly> specification )
+    public ObjectDeclaration objects( Predicate<? super ObjectAssembly> specification )
     {
         List<ObjectAssemblyImpl> assemblies = new ArrayList<>();
         for( ObjectAssemblyImpl objectAssembly : objectAssemblies.values() )
         {
-            if( specification.satisfiedBy( objectAssembly ) )
+            if( specification.test( objectAssembly ) )
             {
                 assemblies.add( objectAssembly );
             }
@@ -401,12 +401,12 @@ public final class ModuleAssemblyImpl
     }
 
     @Override
-    public ServiceDeclaration services( Specification<? super ServiceAssembly> specification )
+    public ServiceDeclaration services( Predicate<? super ServiceAssembly> specification )
     {
         List<ServiceAssemblyImpl> assemblies = new ArrayList<>();
         for( ServiceAssemblyImpl serviceAssembly : serviceAssemblies )
         {
-            if( specification.satisfiedBy( serviceAssembly ) )
+            if( specification.test( serviceAssembly ) )
             {
                 assemblies.add( serviceAssembly );
             }
@@ -438,12 +438,12 @@ public final class ModuleAssemblyImpl
     }
 
     @Override
-    public ImportedServiceDeclaration importedServices( Specification<? super ImportedServiceAssembly> specification )
+    public ImportedServiceDeclaration importedServices( Predicate<? super ImportedServiceAssembly> specification )
     {
         List<ImportedServiceAssemblyImpl> assemblies = new ArrayList<>();
         for( ImportedServiceAssemblyImpl objectAssembly : importedServiceAssemblies.values() )
         {
-            if( specification.satisfiedBy( objectAssembly ) )
+            if( specification.test( objectAssembly ) )
             {
                 assemblies.add( objectAssembly );
             }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/runtime/src/main/java/org/apache/zest/runtime/composite/CompositeMethodModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/CompositeMethodModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/CompositeMethodModel.java
index 9258dbc..dfaccfa 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/CompositeMethodModel.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/composite/CompositeMethodModel.java
@@ -216,7 +216,7 @@ public final class CompositeMethodModel
             try
             {
                 MixinModel model = mixins.mixinFor( method );
-                if( GenericSpecification.INSTANCE.satisfiedBy( model.mixinClass() ) )
+                if( Genericpredicate.INSTANCE.test( model.mixinClass() ) )
                 {
                     return false;
                 }
@@ -237,7 +237,7 @@ public final class CompositeMethodModel
             try
             {
                 MixinModel model = mixins.mixinFor( method );
-                if( !GenericSpecification.INSTANCE.satisfiedBy( model.mixinClass() ) )
+                if( !Genericpredicate.INSTANCE.test( model.mixinClass() ) )
                 {
                     T annotation = annotationClass.cast( model.mixinClass()
                                                              .getMethod( method.getName(), method.getParameterTypes() )
@@ -264,7 +264,7 @@ public final class CompositeMethodModel
             List<Annotation> annotations = new ArrayList<Annotation>();
             MixinModel model = mixins.mixinFor( method );
             Annotation[] mixinAnnotations = new Annotation[ 0 ];
-            if( !GenericSpecification.INSTANCE.satisfiedBy( model.mixinClass() ) )
+            if( !Genericpredicate.INSTANCE.test( model.mixinClass() ) )
             {
                 mixinAnnotations = model.mixinClass().getAnnotations();
                 annotations.addAll( Arrays.asList( mixinAnnotations ) );

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/runtime/src/main/java/org/apache/zest/runtime/composite/GenericSpecification.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/GenericSpecification.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/GenericSpecification.java
deleted file mode 100644
index 47ba877..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/GenericSpecification.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.apache.zest.runtime.composite;
-
-import java.lang.reflect.InvocationHandler;
-import org.apache.zest.functional.Specification;
-
-/**
- * Specification that checks whether a given class implements InvocationHandler or not.
- */
-public class GenericSpecification
-    implements Specification<Class<?>>
-{
-    public static final GenericSpecification INSTANCE = new GenericSpecification();
-
-    @Override
-    public boolean satisfiedBy( Class<?> item )
-    {
-        return InvocationHandler.class.isAssignableFrom( item );
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/runtime/src/main/java/org/apache/zest/runtime/composite/Genericpredicate.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/Genericpredicate.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/Genericpredicate.java
new file mode 100644
index 0000000..e69ec3c
--- /dev/null
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/composite/Genericpredicate.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.zest.runtime.composite;
+
+import java.lang.reflect.InvocationHandler;
+import java.util.function.Predicate;
+
+/**
+ * Specification that checks whether a given class implements InvocationHandler or not.
+ */
+public class Genericpredicate
+    implements Predicate<Class<?>>
+{
+    public static final Genericpredicate INSTANCE = new Genericpredicate();
+
+    @Override
+    public boolean test( Class<?> item )
+    {
+        return InvocationHandler.class.isAssignableFrom( item );
+    }
+}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/runtime/src/main/java/org/apache/zest/runtime/composite/MixinsModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/MixinsModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/MixinsModel.java
index 8c78f26..30fc6c0 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/MixinsModel.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/composite/MixinsModel.java
@@ -24,11 +24,11 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.function.Function;
+import java.util.function.Predicate;
 import org.apache.zest.api.util.Classes;
 import org.apache.zest.bootstrap.BindingException;
 import org.apache.zest.functional.HierarchicalVisitor;
 import org.apache.zest.functional.HierarchicalVisitorAdapter;
-import org.apache.zest.functional.Specification;
 import org.apache.zest.functional.VisitableHierarchy;
 import org.apache.zest.runtime.injection.DependencyModel;
 import org.apache.zest.runtime.injection.InjectedFieldModel;
@@ -210,10 +210,10 @@ public class MixinsModel
             {
                 return entry.getKey();
             }
-        }, filter( new Specification<Map.Entry<Method, MixinModel>>()
+        }, filter( new Predicate<Map.Entry<Method, MixinModel>>()
         {
             @Override
-            public boolean satisfiedBy( Map.Entry<Method, MixinModel> item )
+            public boolean test( Map.Entry<Method, MixinModel> item )
             {
                 MixinModel model = item.getValue();
                 return model.mixinClass().equals( mixinClass );

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/runtime/src/main/java/org/apache/zest/runtime/injection/DependencyModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/DependencyModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/DependencyModel.java
index 619c570..73381bb 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/DependencyModel.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/injection/DependencyModel.java
@@ -20,13 +20,13 @@ import java.lang.reflect.Type;
 import java.lang.reflect.TypeVariable;
 import java.util.Collections;
 import java.util.function.Function;
+import java.util.function.Predicate;
 import org.apache.zest.api.common.ConstructionException;
 import org.apache.zest.api.common.Optional;
 import org.apache.zest.api.composite.DependencyDescriptor;
 import org.apache.zest.bootstrap.BindingException;
 import org.apache.zest.bootstrap.InvalidInjectionException;
 import org.apache.zest.functional.Iterables;
-import org.apache.zest.functional.Specification;
 import org.apache.zest.functional.Visitable;
 import org.apache.zest.functional.Visitor;
 import org.apache.zest.runtime.injection.provider.InjectionProviderException;
@@ -384,7 +384,7 @@ public final class DependencyModel
     }
 
     public static class ScopeSpecification
-        implements Specification<DependencyModel>
+        implements Predicate<DependencyModel>
     {
         private final Class<? extends Annotation> scope;
 
@@ -394,7 +394,7 @@ public final class DependencyModel
         }
 
         @Override
-        public boolean satisfiedBy( DependencyModel model )
+        public boolean test( DependencyModel model )
         {
             return model.hasScope( scope );
         }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedFieldModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedFieldModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedFieldModel.java
index 60977a5..f521e11 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedFieldModel.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedFieldModel.java
@@ -19,12 +19,12 @@ import java.lang.reflect.Field;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Proxy;
 import java.util.Collection;
+import java.util.function.Predicate;
 import org.apache.zest.api.composite.InjectedFieldDescriptor;
 import org.apache.zest.api.util.Classes;
 import org.apache.zest.bootstrap.BindingException;
 import org.apache.zest.bootstrap.InjectionException;
 import org.apache.zest.functional.HierarchicalVisitor;
-import org.apache.zest.functional.Specification;
 import org.apache.zest.functional.VisitableHierarchy;
 import org.apache.zest.runtime.composite.TransientInstance;
 import org.apache.zest.runtime.model.Resolution;
@@ -127,9 +127,9 @@ public final class InjectedFieldModel
         return visitor.visitLeave( this );
     }
 
-    public Collection<DependencyModel> filter( Specification<DependencyModel> specification )
+    public Collection<DependencyModel> filter( Predicate<DependencyModel> specification )
     {
-        if( specification.satisfiedBy( dependencyModel ) )
+        if( specification.test( dependencyModel ) )
         {
             return singleton( dependencyModel );
         }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedParametersModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedParametersModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedParametersModel.java
index 2bb8360..1a4c723 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedParametersModel.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedParametersModel.java
@@ -17,9 +17,9 @@ package org.apache.zest.runtime.injection;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import java.util.function.Predicate;
 import org.apache.zest.api.composite.InjectedParametersDescriptor;
 import org.apache.zest.functional.HierarchicalVisitor;
-import org.apache.zest.functional.Specification;
 import org.apache.zest.functional.VisitableHierarchy;
 
 /**
@@ -79,12 +79,12 @@ public final class InjectedParametersModel
         return visitor.visitLeave( this );
     }
 
-    public Collection<DependencyModel> filter( Specification<DependencyModel> specification )
+    public Collection<DependencyModel> filter( Predicate<DependencyModel> specification )
     {
         ArrayList<DependencyModel> result = new ArrayList<DependencyModel>();
         for( DependencyModel model : parameterDependencies )
         {
-            if( specification.satisfiedBy( model ) )
+            if( specification.test( model ) )
             {
                 result.add( model );
             }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/ServiceInjectionProviderFactory.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/ServiceInjectionProviderFactory.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/ServiceInjectionProviderFactory.java
index 952a73c..764d227 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/ServiceInjectionProviderFactory.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/ServiceInjectionProviderFactory.java
@@ -18,6 +18,7 @@ import java.lang.annotation.Annotation;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
 import java.util.function.Function;
+import java.util.function.Predicate;
 import org.apache.zest.api.service.NoSuchServiceException;
 import org.apache.zest.api.service.ServiceReference;
 import org.apache.zest.api.service.qualifier.Qualifier;
@@ -25,7 +26,6 @@ import org.apache.zest.api.util.Annotations;
 import org.apache.zest.api.util.Classes;
 import org.apache.zest.bootstrap.InvalidInjectionException;
 import org.apache.zest.functional.Iterables;
-import org.apache.zest.functional.Specification;
 import org.apache.zest.functional.Specifications;
 import org.apache.zest.runtime.injection.DependencyModel;
 import org.apache.zest.runtime.injection.InjectionContext;
@@ -49,7 +49,7 @@ public final class ServiceInjectionProviderFactory
         // TODO This could be changed to allow multiple @Qualifier annotations
         Annotation qualifierAnnotation = first( filter( Specifications.translate( Annotations.type(), hasAnnotation( Qualifier.class ) ), iterable( dependencyModel
                                                                                                                                                         .annotations() ) ) );
-        Specification<ServiceReference<?>> serviceQualifier = null;
+        Predicate<ServiceReference<?>> serviceQualifier = null;
         if( qualifierAnnotation != null )
         {
             Qualifier qualifier = qualifierAnnotation.annotationType().getAnnotation( Qualifier.class );
@@ -96,7 +96,7 @@ public final class ServiceInjectionProviderFactory
         extends ServiceInjectionProvider
     {
         private IterableServiceReferenceProvider( Type serviceType,
-                                                  Specification<ServiceReference<?>> serviceQualifier
+                                                  Predicate<ServiceReference<?>> serviceQualifier
         )
         {
             super( serviceType, serviceQualifier );
@@ -115,7 +115,7 @@ public final class ServiceInjectionProviderFactory
         implements Function<ServiceReference<?>, Object>
     {
         private IterableServiceProvider( Type serviceType,
-                                         Specification<ServiceReference<?>> serviceQualifier
+                                         Predicate<ServiceReference<?>> serviceQualifier
         )
         {
             super( serviceType, serviceQualifier );
@@ -138,7 +138,7 @@ public final class ServiceInjectionProviderFactory
     private static class ServiceReferenceProvider
         extends ServiceInjectionProvider
     {
-        ServiceReferenceProvider( Type serviceType, Specification<ServiceReference<?>> qualifier )
+        ServiceReferenceProvider( Type serviceType, Predicate<ServiceReference<?>> qualifier )
         {
             super( serviceType, qualifier );
         }
@@ -154,7 +154,7 @@ public final class ServiceInjectionProviderFactory
     private static class ServiceProvider
         extends ServiceInjectionProvider
     {
-        ServiceProvider( Type serviceType, Specification<ServiceReference<?>> qualifier )
+        ServiceProvider( Type serviceType, Predicate<ServiceReference<?>> qualifier )
         {
             super( serviceType, qualifier );
         }
@@ -180,10 +180,10 @@ public final class ServiceInjectionProviderFactory
         implements InjectionProvider
     {
         private final Type serviceType;
-        private final Specification<ServiceReference<?>> serviceQualifier;
+        private final Predicate<ServiceReference<?>> serviceQualifier;
 
         private ServiceInjectionProvider( Type serviceType,
-                                            Specification<ServiceReference<?>> serviceQualifier
+                                          Predicate<ServiceReference<?>> serviceQualifier
         )
         {
             this.serviceType = serviceType;

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/ThisInjectionProviderFactory.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/ThisInjectionProviderFactory.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/ThisInjectionProviderFactory.java
index a7b53eb..70c8160 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/ThisInjectionProviderFactory.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/ThisInjectionProviderFactory.java
@@ -52,7 +52,7 @@ public final class ThisInjectionProviderFactory
             final Class<?> thisType = dependencyModel.rawInjectionType();
 
             Iterable<Class<?>> injectionTypes = null;
-            if( Classes.assignableTypeSpecification( thisType ).satisfiedBy( bindingContext.model() ) )
+            if( Classes.assignableTypeSpecification( thisType ).test( bindingContext.model() ) )
             {
                 injectionTypes = bindingContext.model().types();
             }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/runtime/src/main/java/org/apache/zest/runtime/query/IterableQuerySource.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/query/IterableQuerySource.java b/core/runtime/src/main/java/org/apache/zest/runtime/query/IterableQuerySource.java
index 451f1d1..7166229 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/query/IterableQuerySource.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/query/IterableQuerySource.java
@@ -19,12 +19,12 @@ import java.util.Comparator;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Predicate;
 import org.apache.zest.api.composite.Composite;
 import org.apache.zest.api.property.Property;
 import org.apache.zest.api.query.grammar.OrderBy;
 import org.apache.zest.api.util.Classes;
 import org.apache.zest.functional.Iterables;
-import org.apache.zest.functional.Specification;
 import org.apache.zest.functional.Specifications;
 import org.apache.zest.spi.query.QuerySource;
 
@@ -49,7 +49,7 @@ public class IterableQuerySource
 
     @Override
     public <T> T find( Class<T> resultType,
-                       Specification<Composite> whereClause,
+                       Predicate<Composite> whereClause,
                        Iterable<OrderBy> orderBySegments,
                        Integer firstResult,
                        Integer maxResults,
@@ -66,7 +66,7 @@ public class IterableQuerySource
 
     @Override
     public <T> long count( Class<T> resultType,
-                           Specification<Composite> whereClause,
+                           Predicate<Composite> whereClause,
                            Iterable<OrderBy> orderBySegments,
                            Integer firstResult,
                            Integer maxResults,
@@ -78,7 +78,7 @@ public class IterableQuerySource
 
     @Override
     public <T> Iterator<T> iterator( Class<T> resultType,
-                                     Specification<Composite> whereClause,
+                                     Predicate<Composite> whereClause,
                                      Iterable<OrderBy> orderBySegments,
                                      Integer firstResult,
                                      Integer maxResults,
@@ -90,7 +90,7 @@ public class IterableQuerySource
 
     @SuppressWarnings( {"raw", "unchecked"} )
     private <T> List<T> list( Class<T> resultType,
-                              Specification<Composite> whereClause,
+                              Predicate<Composite> whereClause,
                               Iterable<OrderBy> orderBySegments,
                               Integer firstResult,
                               Integer maxResults,
@@ -146,7 +146,7 @@ public class IterableQuerySource
     }
 
     @SuppressWarnings( {"raw", "unchecked"} )
-    private <T> List<T> filter( Class<T> resultType, Specification whereClause )
+    private <T> List<T> filter( Class<T> resultType, Predicate whereClause )
     {
         if( whereClause == null )
         {

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/runtime/src/main/java/org/apache/zest/runtime/query/QueryBuilderImpl.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/query/QueryBuilderImpl.java b/core/runtime/src/main/java/org/apache/zest/runtime/query/QueryBuilderImpl.java
index 67ab342..7bf6045 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/query/QueryBuilderImpl.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/query/QueryBuilderImpl.java
@@ -18,11 +18,11 @@
  */
 package org.apache.zest.runtime.query;
 
+import java.util.function.Predicate;
 import org.apache.zest.api.composite.Composite;
 import org.apache.zest.api.query.Query;
 import org.apache.zest.api.query.QueryBuilder;
 import org.apache.zest.api.query.QueryExpressions;
-import org.apache.zest.functional.Specification;
 import org.apache.zest.spi.query.EntityFinder;
 import org.apache.zest.spi.query.QueryBuilderSPI;
 import org.apache.zest.spi.query.QuerySource;
@@ -46,7 +46,7 @@ final class QueryBuilderImpl<T>
     /**
      * Where clause.
      */
-    private final Specification<Composite> whereClause;
+    private final Predicate<Composite> whereClause;
 
     /**
      * Constructor.
@@ -57,7 +57,7 @@ final class QueryBuilderImpl<T>
      */
     QueryBuilderImpl( final EntityFinder entityFinder,
                       final Class<T> resultType,
-                      final Specification<Composite> whereClause
+                      final Predicate<Composite> whereClause
     )
     {
         this.entityFinder = entityFinder;
@@ -67,7 +67,7 @@ final class QueryBuilderImpl<T>
 
     @Override
     @SuppressWarnings( "unchecked" )
-    public QueryBuilder<T> where( Specification<Composite> specification )
+    public QueryBuilder<T> where( Predicate<Composite> specification )
     {
         if( specification == null )
         {

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/runtime/src/main/java/org/apache/zest/runtime/query/QueryImpl.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/query/QueryImpl.java b/core/runtime/src/main/java/org/apache/zest/runtime/query/QueryImpl.java
index 59ebb5d..c0d5286 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/query/QueryImpl.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/query/QueryImpl.java
@@ -21,6 +21,7 @@ package org.apache.zest.runtime.query;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
+import java.util.function.Predicate;
 import org.apache.zest.api.composite.Composite;
 import org.apache.zest.api.property.Property;
 import org.apache.zest.api.query.Query;
@@ -28,7 +29,6 @@ import org.apache.zest.api.query.QueryExecutionException;
 import org.apache.zest.api.query.QueryExpressions;
 import org.apache.zest.api.query.grammar.OrderBy;
 import org.apache.zest.functional.Iterables;
-import org.apache.zest.functional.Specification;
 import org.apache.zest.spi.query.QuerySource;
 
 /**
@@ -46,7 +46,7 @@ import org.apache.zest.spi.query.QuerySource;
     /**
      * Where clause.
      */
-    private final Specification<Composite> whereClause;
+    private final Predicate<Composite> whereClause;
     private QuerySource querySource;
     /**
      * Order by clause segments.
@@ -72,7 +72,7 @@ import org.apache.zest.spi.query.QuerySource;
      * @param whereClause where clause
      */
     /* package */ QueryImpl( final Class<T> resultType,
-               final Specification<Composite> whereClause,
+               final Predicate<Composite> whereClause,
                final QuerySource querySource
     )
     {

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServicesInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServicesInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServicesInstance.java
index f957f11..5fa5118 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServicesInstance.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServicesInstance.java
@@ -15,6 +15,7 @@
 package org.apache.zest.runtime.service;
 
 import java.util.List;
+import java.util.function.Predicate;
 import org.apache.zest.api.activation.Activation;
 import org.apache.zest.api.activation.ActivationEventListener;
 import org.apache.zest.api.activation.ActivationEventListenerRegistration;
@@ -23,7 +24,6 @@ import org.apache.zest.api.activation.PassivationException;
 import org.apache.zest.api.common.Visibility;
 import org.apache.zest.api.service.ServiceReference;
 import org.apache.zest.functional.Iterables;
-import org.apache.zest.functional.Specification;
 import org.apache.zest.runtime.activation.ActivationDelegate;
 import org.apache.zest.runtime.activation.ActivatorsInstance;
 
@@ -69,10 +69,10 @@ public class ImportedServicesInstance
 
     public Iterable<ServiceReference> visibleServices( final Visibility visibility )
     {
-        return Iterables.filter( new Specification<ServiceReference>()
+        return Iterables.filter( new Predicate<ServiceReference>()
         {
             @Override
-            public boolean satisfiedBy( ServiceReference item )
+            public boolean test( ServiceReference item )
             {
                 return ( (ImportedServiceReferenceInstance) item ).serviceDescriptor()
                     .visibility()

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/runtime/src/main/java/org/apache/zest/runtime/service/ServiceInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/service/ServiceInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/service/ServiceInstance.java
index 727b6fd..6a401d2 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/service/ServiceInstance.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/service/ServiceInstance.java
@@ -51,7 +51,7 @@ public class ServiceInstance
         super( compositeModel, moduleInstance, mixins, state );
 
         implementsServiceAvailable =
-            Classes.assignableTypeSpecification( Availability.class ).satisfiedBy( descriptor() );
+            Classes.assignableTypeSpecification( Availability.class ).test( descriptor() );
         hasEnabledConfiguration = compositeModel.configurationType() != null
                                   && Enabled.class.isAssignableFrom( compositeModel.configurationType() );
     }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/runtime/src/main/java/org/apache/zest/runtime/service/ServicesInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/service/ServicesInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/service/ServicesInstance.java
index bb03428..7400faf 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/service/ServicesInstance.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/service/ServicesInstance.java
@@ -15,6 +15,7 @@
 package org.apache.zest.runtime.service;
 
 import java.util.List;
+import java.util.function.Predicate;
 import org.apache.zest.api.activation.Activation;
 import org.apache.zest.api.activation.ActivationEventListener;
 import org.apache.zest.api.activation.ActivationEventListenerRegistration;
@@ -23,7 +24,6 @@ import org.apache.zest.api.activation.PassivationException;
 import org.apache.zest.api.common.Visibility;
 import org.apache.zest.api.service.ServiceReference;
 import org.apache.zest.functional.Iterables;
-import org.apache.zest.functional.Specification;
 import org.apache.zest.runtime.activation.ActivationDelegate;
 import org.apache.zest.runtime.activation.ActivatorsInstance;
 
@@ -67,10 +67,10 @@ public class ServicesInstance
 
     public Iterable<ServiceReference> visibleServices( final Visibility visibility )
     {
-        return Iterables.filter( new Specification<ServiceReference>()
+        return Iterables.filter( new Predicate<ServiceReference>()
         {
             @Override
-            public boolean satisfiedBy( ServiceReference item )
+            public boolean test( ServiceReference item )
             {
                 return ( (ServiceReferenceInstance) item ).serviceDescriptor()
                            .visibility()