[ https://issues.apache.org/jira/browse/XBEAN-265?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14003419#comment-14003419 ]
Matt Benson edited comment on XBEAN-265 at 5/20/14 3:22 PM: ------------------------------------------------------------ {quote} async or not the finder behavior should be the same. {quote} What about "Calling {{#link()}} before or after making other calls against the {{AnnotationFinder}} instance the behavior should be the same?" I'm only talking about finding classes that are *entries* in the {{Archive}}, but it seems to me pretty useless, not to mention impossible, if the classes found can only reference other classes that are also *entries* in the {{Archive}}. Every (normal) class extends {{java.lang.Object}} and very few actual archives contain this class. In any case, the error only happens when, at runtime, the decision is made to use class-based, rather than name-based, functionality. {quote} For your particular issue, would adding a CompositeURLsArchive(URLs) work? {quote} I still don't see how it would. My test cases demonstrate what I want: to search a specific location (jar, directory, whatever) for classes X that extend or implement some class or interface Y where Y may not be in the archive itself. If I included Y's archive K in the search, taking the suggested composite approach, I would also potentially find classes in K that extend or implement Y, which is not what I want. If the problem is that this call caused a {{ConcurrentModificationException}} or similar in the {{AsynchronousInheritanceAnnotationFinder}} then let's improve its design to be more tolerant of such... this is par for the course when designing something that is expected to run in a threaded manner. To that end, it'd be quite nice to have some Javadoc explaining the _intent_ of that class. EDIT: I confess that on reviewing the synchronization code in {{AsynchronousInheritanceAnnotationFinder}} I fail to see what could go wrong by simply restoring this method. And that's why we need a test. was (Author: mbenson): {quote} async or not the finder behavior should be the same. {quote} What about "Calling {{#link()}} before or after making other calls against the {{AnnotationFinder}} instance the behavior should be the same?" I'm only talking about finding classes that are *entries* in the {{Archive}}, but it seems to me pretty useless, not to mention impossible, if the classes found can only reference other classes that are also *entries* in the {{Archive}}. Every (normal) class extends {{java.lang.Object}} and very few actual archives contain this class. In any case, the error only happens when, at runtime, the decision is made to use class-based, rather than name-based, functionality. {quote} For your particular issue, would adding a CompositeURLsArchive(URLs) work? {quote} I still don't see how it would. My test cases demonstrate what I want: to search a specific location (jar, directory, whatever) for classes X that extend or implement some class or interface Y where Y may not be in the archive itself. If I included Y's archive K in the search, taking the suggested composite approach, I would also potentially find classes in K that extend or implement Y, which is not what I want. If the problem is that this call caused a {{ConcurrentModificationException}} or similar in the {{AsynchronousInheritanceAnnotationFinder}} then let's improve its design to be more tolerant of such... this is par for the course when designing something that is expected to run in a threaded manner. To that end, it'd be quite nice to have some Javadoc explaining the _intent_ of that class. > Regression: cannot find subclasses/implementations of "external" classes > after forcing ClassInfo.get() > ------------------------------------------------------------------------------------------------------ > > Key: XBEAN-265 > URL: https://issues.apache.org/jira/browse/XBEAN-265 > Project: XBean > Issue Type: Bug > Components: finder > Affects Versions: 3.15, 3.16, 3.17 > Reporter: Matt Benson > Labels: patch, test > > By "external" I mean available in the archive's classloader but not its > iterated entries. In general it is rather difficult to test the class-based > portion of {{AnnotationFinder}}'s implementation, but it can be done by > calling {{#findAnnotatedClasses()}} before {{#link()}}. Then it is possible > to demonstrate the problem. -- This message was sent by Atlassian JIRA (v6.2#6252)