* fixed: ObjCClassNotFoundException when marshaling protocols implemented in pure Swift classes #784
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
reported over gitter, in scope of CleverAds:
Root case
Then trying to marshal pointer to Java world and turn it into Interface instance ObjC runtime tries find as much complete as possible class instance representation from this pointer to allow to have not just as $ObjCProxy of this interface/protocol but a proper class instance.
In case of reported issue:
there was expected
CASStatusHandler
protocol in callback. CAS provided pure Swift classCleverAdsSolutions.ImpressionWrapper
that implemented it. This class is extended fromSwift._SwiftObject
and this class is not known to RoboVM as well. As result everything was terminated with: ObjCClassNotFoundExceptionWhat is wrong here:
The fix:
consider
ObjCClassNotFoundException
case similar tonot isAssignableFrom
and use $ObjCProxy in both case. changes were done to not throw ObjCClassNotFoundException in case class being resolved on behalf of $ObjCProxy