You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2016/07/07 09:18:41 UTC

[07/10] brooklyn-server git commit: misc utils minor improvements

misc utils minor improvements

mainly around findMethod


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/b1999e3e
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/b1999e3e
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/b1999e3e

Branch: refs/heads/master
Commit: b1999e3e26519965c99a4e3bc8c1b23b011e8195
Parents: ec4da19
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Wed Jun 29 03:45:30 2016 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Wed Jun 29 10:50:59 2016 +0100

----------------------------------------------------------------------
 .../java/org/apache/brooklyn/test/Asserts.java  |  9 +++++
 .../brooklyn/util/collections/MutableSet.java   |  4 +-
 .../brooklyn/util/javalang/Reflections.java     | 41 ++++++++++++++++++++
 3 files changed, 52 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/b1999e3e/utils/common/src/main/java/org/apache/brooklyn/test/Asserts.java
----------------------------------------------------------------------
diff --git a/utils/common/src/main/java/org/apache/brooklyn/test/Asserts.java b/utils/common/src/main/java/org/apache/brooklyn/test/Asserts.java
index a544f01..43dcaa1 100644
--- a/utils/common/src/main/java/org/apache/brooklyn/test/Asserts.java
+++ b/utils/common/src/main/java/org/apache/brooklyn/test/Asserts.java
@@ -712,6 +712,9 @@ public class Asserts {
     public static void assertFalse(boolean condition, String message) {
         if (condition) fail(message);
     }
+    public static void assertFalse(boolean condition) {
+        if (condition) fail();
+    }
 
     /**
      * Fails a test with the given message.
@@ -720,6 +723,7 @@ public class Asserts {
     public static AssertionError fail(String message) {
         throw new AssertionError(message);
     }
+    public static AssertionError fail() { throw new AssertionError(); }
 
     public static void assertEqualsIgnoringOrder(Iterable<?> actual, Iterable<?> expected) {
         assertEqualsIgnoringOrder(actual, expected, false, null);
@@ -1347,4 +1351,9 @@ public class Asserts {
         eventuallyOnNotify(object, Suppliers.ofInstance(object), predicate, null);
     }
 
+    public static void assertSize(Iterable<?> list, int expectedSize) {
+        if (list==null) fail("List is null");
+        if (Iterables.size(list)!=expectedSize) fail("List has wrong size "+Iterables.size(list)+" (expected "+expectedSize+"): "+list);
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/b1999e3e/utils/common/src/main/java/org/apache/brooklyn/util/collections/MutableSet.java
----------------------------------------------------------------------
diff --git a/utils/common/src/main/java/org/apache/brooklyn/util/collections/MutableSet.java b/utils/common/src/main/java/org/apache/brooklyn/util/collections/MutableSet.java
index 70d8a9d..bcadf33 100644
--- a/utils/common/src/main/java/org/apache/brooklyn/util/collections/MutableSet.java
+++ b/utils/common/src/main/java/org/apache/brooklyn/util/collections/MutableSet.java
@@ -55,7 +55,7 @@ public class MutableSet<V> extends LinkedHashSet<V> {
         return result;
     }
     
-    public static <V> MutableSet<V> of(V v1, V v2, V v3, V ...vMore) {
+    public static <V> MutableSet<V> of(V v1, V v2, V v3, @SuppressWarnings("unchecked") V ...vMore) {
         MutableSet<V> result = new MutableSet<V>();
         result.add(v1);
         result.add(v2);
@@ -128,7 +128,7 @@ public class MutableSet<V> extends LinkedHashSet<V> {
             return this;
         }
 
-        public Builder<V> add(V v1, V v2, V ...values) {
+        public Builder<V> add(V v1, V v2, @SuppressWarnings("unchecked") V ...values) {
             result.add(v1);
             result.add(v2);
             for (V value: values) result.add(value);

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/b1999e3e/utils/common/src/main/java/org/apache/brooklyn/util/javalang/Reflections.java
----------------------------------------------------------------------
diff --git a/utils/common/src/main/java/org/apache/brooklyn/util/javalang/Reflections.java b/utils/common/src/main/java/org/apache/brooklyn/util/javalang/Reflections.java
index 7b2cba4..37f3fe6 100644
--- a/utils/common/src/main/java/org/apache/brooklyn/util/javalang/Reflections.java
+++ b/utils/common/src/main/java/org/apache/brooklyn/util/javalang/Reflections.java
@@ -583,6 +583,41 @@ public class Reflections {
         return result;
     }
 
+    /** Returns any method exactly matching the given signature, including privates and on parent classes. */
+    public static Maybe<Method> findMethodMaybe(Class<?> clazz, String name, Class<?>... parameterTypes) {
+        if (clazz == null || name == null) return Maybe.absentNoTrace("class or name is null");
+        Iterable<Method> result = findMethods(false, clazz, name, parameterTypes);
+        if (!result.iterator().hasNext()) return Maybe.absentNoTrace("no methods matching "+clazz.getName()+"."+name+"("+Arrays.asList(parameterTypes)+")");
+        return Maybe.of(result.iterator().next());
+    }
+    /** Returns all methods compatible with the given argument types, including privates and on parent classes and where the method takes a supertype. */
+    public static Iterable<Method> findMethodsCompatible(Class<?> clazz, String name, Class<?>... parameterTypes) {
+        return findMethods(true, clazz, name, parameterTypes);
+    }
+    private static Iterable<Method> findMethods(boolean allowCovariantParameterClasses, Class<?> clazz, String name, Class<?>... parameterTypes) {
+        if (clazz == null || name == null) {
+            return Collections.emptySet();
+        }
+        List<Method> result = MutableList.of();
+        Class<?> clazzToInspect = clazz;
+        
+        while (clazzToInspect != null) {
+            methods: for (Method m: clazzToInspect.getDeclaredMethods()) {
+                if (!name.equals(m.getName())) continue methods;
+                if (m.getParameterTypes().length!=parameterTypes.length) continue methods;
+                parameters: for (int i=0; i<parameterTypes.length; i++) {
+                    if (m.getParameterTypes()[i].equals(parameterTypes[i])) continue parameters;
+                    if (allowCovariantParameterClasses && m.getParameterTypes()[i].isAssignableFrom(parameterTypes[i])) continue;
+                    continue methods;
+                }
+                result.add(m);
+            }
+            clazzToInspect = clazzToInspect.getSuperclass();
+        }
+        return result;
+    }
+    
+    /** @deprecated since 0.10.0 use {@link #findMethodMaybe(Class, String, Class...)} or {@link #findMethodsCompatible(Class, String, Class...)} */ @Deprecated
     public static Method findMethod(Class<?> clazz, String name, Class<?>... parameterTypes) throws NoSuchMethodException {
         if (clazz == null || name == null) {
             throw new NullPointerException("Must not be null: clazz="+clazz+"; name="+name);
@@ -951,4 +986,10 @@ public class Reflections {
         return name;
     }
 
+    public static boolean hasSpecialSerializationMethods(Class<? extends Object> type) {
+        if (type==null) return false;
+        if (findMethodMaybe(type, "writeObject", java.io.ObjectOutputStream.class).isPresent()) return true;
+        return hasSpecialSerializationMethods(type.getSuperclass());
+    }
+
 }