Github user aledsage commented on a diff in the pull request:

    https://github.com/apache/brooklyn-server/pull/982#discussion_r214612997
  
    --- Diff: 
core/src/main/java/org/apache/brooklyn/util/core/flags/MethodCoercions.java ---
    @@ -87,13 +89,23 @@ public boolean apply(@Nullable Method input) {
                 Method accessibleMethod = 
Reflections.findAccessibleMethod(method).get();
                 try {
                     Type paramType = method.getGenericParameterTypes()[0];
    -                Object coercedArgument = TypeCoercions.coerce(argument, 
TypeToken.of(paramType));
    -                return Maybe.of(accessibleMethod.invoke(instance, 
coercedArgument));
    +                Maybe<?> coercedArgumentM = 
TypeCoercions.tryCoerce(argument, TypeToken.of(paramType));
    +                RuntimeException exception = 
Maybe.getException(coercedArgumentM);
    --- End diff --
    
    Looks wrong - this will cast `coercedArgumentM` to `Maybe.absent`, but on 
the line below you do `coercedArgumentM.isPresent`. So presumably the call to 
`getException` will sometimes throw a `ClassCastException`?
    
    Ah, I see you've changed the semantics of `getException` to return null if 
it wasn't an exception.
    
    Why change it? I liked the way that asking for the exception when `present` 
was a programming error - there will never be an exception when present. It 
looks like you can easily avoid that by removing this line, and changing the if 
statement below to just `if (coercedArgumentM.isAbsent()) {`.


---

Reply via email to