johncarl81 / transfuse

:syringe: Transfuse - A Dependency Injection and Integration framework for Google Android
http://androidtransfuse.org/
Apache License 2.0
220 stars 28 forks source link

Support for Library Rs #196

Open johncarl81 opened 8 years ago

johncarl81 commented 8 years ago

Android libraries use R classes without public static final (http://tools.android.com/tips/non-constant-fields):

public final class R {
    public static final class anim {
        public static int abc_fade_in=0x7f040000;
        public static int abc_fade_out=0x7f040001;
...

This means you can't reference these fields from an annotation as there are not considered constants. The previous alternative was to use tags, which looses compile time checking. This PR gives an alternative way...

This PR adds a secondary annotation processor to generate a R class with public static final analogies for library public final non-static. Transfuse, in turn, recognizes these analogies and swaps in the original R library identifier. The only requirement is to annotate your source with the Bridge annotation:

@Bridge(R.class)
public class ...

Then you may use RBridge instead of R in any Transfuse annotation:

@Layout(RBridge.layout.main)
@View(RBridge.view.button)
dbachelder commented 8 years ago

❤️

dbachelder commented 8 years ago

@johncarl81 thoughts on merging to master?

johncarl81 commented 8 years ago

I have a couple changes I made recently to be able to publish this on maven central. I have a couple other tweaks to make, mainly to accommodate other libraries that use the base. Then it's time for prime time.

dbachelder commented 8 years ago

great.. do those changes change anything about the usage as I know it right now?

johncarl81 commented 8 years ago

They may affect how you reference the rbridge library.

johncarl81 commented 8 years ago

Ok @dbachelder, could you review the latest changes?

dbachelder commented 8 years ago

@johncarl81 I like that you've moved it into TF proper.. would you mind pushing this up as the snapshot release and I'll try it one more time before we merge it?

johncarl81 commented 8 years ago

Sure, done.