Thanks for looking through this.

On 14/06/2017 22:44, Peter Levart wrote:
:

...where you use the 'reflectionFactory' field one time and 'getReflectionFactory()' method another time. The field might not already be initialized...
Well spotted, it should be using getReflectionFactory(), not reflectionFactory. I'm not sure how that crept in.


:


In j.u.ServiceLoader:

:

...does not return true for situations like:

public interface A {}
public interface B extends A {}
public class C implements B {}

isAssignable(C.class, "A") ???

If A is a service interface and C is its implementation class, should C be considered a valid service provider? If yes, the method might need some stack or queue or recursion.
I think I'd prefer to just remove this completely. As you probably gathered, this is just to disambiguate error cases when Class.isAssignableFrom indicates the provider listed in META-INF/services/<service> is not an implementation of the service type. It's a long standing SL issue (pre-dates JDK 9) and probably not worth trying to improve this now.



In IllegalAccessLogger:

Is the following method:

280 private void log(Class<?> caller, String what, Supplier<String> msgSupplier) ...

Invoked frequently from different threads? Might synchronization in this method be a performance bottleneck? There are some optimizations possible...
Are you concerned about the permit case or the warn/debug case? For the permit (default) case then the logger is discarded at the first illegal access. At worse, then several threads compete (and synchronized) to be the first offender but there is no synchronization or logging after that.

With the warn/debug case then someone has opt'ed in to get warnings or stack traces. If there is really bad code with continuous calls to log because of illegal reflective access then it could indeed be a bottleneck. I don't think we should be too concerned with that. Yes, it could be improved if it really is an issue so I think we should wait to see what the default setting will be in JDK 10. If it becomes "warn" then we might have to look at it again.

-Alan

Reply via email to