diff --git a/README.md b/README.md index bbcf534..89ea0f5 100644 --- a/README.md +++ b/README.md @@ -209,10 +209,11 @@ public abstract class Proxy_MvpView implements MvpView { this.inner = instance; } - public abstract boolean predicate(final String methodName, final Object... args); + public abstract boolean predicate(@Methods @NonNull final String methodName, + final Object... args); public final Observable dummyCall() { - if (!predicate( "dummyCall" )) { + if (!predicate( Methods.DUMMYCALL )) { // @com.olku.annotations.AutoProxy.Yield("null") return (Observable)null; } @@ -220,7 +221,7 @@ public abstract class Proxy_MvpView implements MvpView { } public final Observable dummyCall(final List generic) { - if (!predicate( "dummyCall", generic )) { + if (!predicate( Methods.DUMMYCALL, generic )) { // @com.olku.annotations.AutoProxy.Yield(adapter=com.olku.generators.RetRxGenerator.class, value="empty") return Observable.empty(); } @@ -228,15 +229,15 @@ public abstract class Proxy_MvpView implements MvpView { } public final Observable dummyCall(final String message, final List args) { - if (!predicate( "dummyCall", message, args )) { - // @com.olku.annotations.AutoProxy.Yield("throws") - throw new UnsupportedOperationException("cannot resolve return type."); + if (!predicate( Methods.DUMMYCALL, message, args )) { + // @com.olku.annotations.AutoProxy.Yield + throw new UnsupportedOperationException("cannot resolve return value."); } return this.inner.dummyCall(message, args); } public final Observable dummyCall(final String message, final Object... args) { - if (!predicate( "dummyCall", message, args )) { + if (!predicate( Methods.DUMMYCALL, message, args )) { // @com.olku.annotations.AutoProxy.Yield(adapter=com.olku.generators.RetRxGenerator.class, value="error") return Observable.error(new UnsupportedOperationException("unsupported method call")); } @@ -244,7 +245,7 @@ public abstract class Proxy_MvpView implements MvpView { } public final double numericCall() { - if (!predicate( "numericCall" )) { + if (!predicate( Methods.NUMERICCALL )) { // @com.olku.annotations.AutoProxy.Yield("0") return 0; } @@ -252,7 +253,7 @@ public abstract class Proxy_MvpView implements MvpView { } public final boolean booleanCall() { - if (!predicate( "booleanCall" )) { + if (!predicate( Methods.BOOLEANCALL )) { // @com.olku.annotations.AutoProxy.Yield("false") return false; } @@ -260,7 +261,7 @@ public abstract class Proxy_MvpView implements MvpView { } public final boolean dispatchDeepLink(@NonNull final Uri deepLink) { - if (!predicate( "dispatchDeepLink", deepLink )) { + if (!predicate( Methods.DISPATCHDEEPLINK, deepLink )) { // @com.olku.annotations.AutoProxy.Yield("direct") // direct call, ignore predicate result } @@ -268,14 +269,26 @@ public abstract class Proxy_MvpView implements MvpView { } public final Observable startHearthAnimation() { - if (!predicate( "startHearthAnimation" )) { + if (!predicate( Methods.STARTHEARTHANIMATION )) { // @com.olku.annotations.AutoProxy.Yield(adapter=com.olku.generators.JustRxGenerator.class, value="true") return Observable.just(true); } return this.inner.startHearthAnimation(); } -} + @StringDef({Methods.BOOLEANCALL, Methods.DISPATCHDEEPLINK, Methods.DUMMYCALL, Methods.NUMERICCALL, Methods.STARTHEARTHANIMATION}) + public @interface Methods { + String BOOLEANCALL = "booleanCall"; + + String DISPATCHDEEPLINK = "dispatchDeepLink"; + + String DUMMYCALL = "dummyCall"; + + String NUMERICCALL = "numericCall"; + + String STARTHEARTHANIMATION = "startHearthAnimation"; + } +} ``` ## Step #5: Usage in project @@ -291,7 +304,7 @@ public abstract class Proxy_MvpView implements MvpView { // destroyed or any other inproper state). return new Proxy_MvpView(this.view) { @Override - public boolean predicate(final String methodName, final Object... args) { + public boolean predicate(@Methods @NonNull final String methodName, final Object... args) { return ((BaseFragment) inner).isUpdatable(); } }; @@ -327,7 +340,50 @@ Debugging: [more details ...](https://stackoverflow.com/questions/8587096/how-do-you-debug-java-annotation-processors-using-intellij) -## Roadmap +## How to Change/Generate GPG signing key? + +```bash +brew install gpg +gpg --gen-key + +# pub rsa2048 2020-04-21 [SC] [expires: 2022-04-21] +# 6B38C8BB4161F9AF99133B4B8DF78BA02F1868F9 +# uid Oleksandr Kucherenko +# sub rsa2048 2020-04-21 [E] [expires: 2022-04-21] +gpg -a --export 6B38C8BB4161F9AF99133B4B8DF78BA02F1868F9 >gpg.public.key +gpg -a --export-secret-key 6B38C8BB4161F9AF99133B4B8DF78BA02F1868F9 >gpg.private.key + +``` + +- open https://bintray.com/profile/edit +- Select `GPG Signing` +- First set the public key and press Update +- Than press Private Key `Click to Change` and upload private key +- Store Passpharse in `credentials.gradle` + +```diff +- ext.gpg_password = '' ++ ext.gpg_password = 'my_new_and_secure_passphrase' + +``` + + +## How to publish? + +Edit file `credentials.gradle` in the root of the project: + +```diff +- ext.bintray_dryrun = true ++ ext.bintray_dryrun = false +``` + +Disable DRY_RUN mode, that will allow binaries upload to the bintray side. Than Run: + +```bash +./gradlew bintrayUpload +``` + +# Roadmap - [x] Incremental Annotation Processing - [x] Create constants class for method names diff --git a/gpg.private.key b/gpg.private.key new file mode 100644 index 0000000..ed379dd --- /dev/null +++ b/gpg.private.key @@ -0,0 +1,60 @@ +-----BEGIN PGP PRIVATE KEY BLOCK----- + +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 +I5pbfRA9E8prRg== +=8je3 +-----END PGP PRIVATE KEY BLOCK----- diff --git a/gpg.public.key b/gpg.public.key new file mode 100644 index 0000000..fee5344 --- /dev/null +++ b/gpg.public.key @@ -0,0 +1,31 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQENBF6fBagBCADIIkoxvmHBbGb0ntNdaWOTNdp+Di7n+wO+3c+wCPh7FN6Sw+Lm +WxZD4PWYMnN3/MLKYYfgVuIslVwy53LUaMEv/jKWPWxahGT1aOFc6uXygd1R7QL8 +5hd4DyAdx+CDXYRMSETq7AvVDiY5ftfXqDDeiohgsnHOcTLB4nPWFu9sdCR15Zvg +8VdzveRtm7ia7Bgcwn4BfTko9qnqrtxZwKOXhGEWCsbd8BL2rcsYV8/LEEK91/2W +MRvvylECKVkzMoBSWXxmUDC+KzOr8Hg0DGIGN1E6oILj9kCh0RhS+b8APDF469uk +uttjvvlgi1DRp8kSBrtmZ7zoEMFtyf+gufwZABEBAAG0ME9sZWtzYW5kciBLdWNo +ZXJlbmtvIDxrdWNoZXJlbmtvLmFsZXhAZ21haWwuY29tPokBVAQTAQgAPhYhBGs4 +yLtBYfmvmRM7S433i6AvGGj5BQJenwWoAhsDBQkDwmcABQsJCAcCBhUKCQgLAgQW +AgMBAh4BAheAAAoJEI33i6AvGGj5cAkIAK/KBaX2tiez+S31bs8nSpM6wYY6EjNJ +7dFXxTQp6TCxEVBds9ek9G44kJACaTEmzuvMIIYPy902aW07mEmnxBF9ajwMT9MV +PkMMb2vazkuS86cnUo9RZY69+qMR5AzRwRswtRzxiU+ChDwdJZ9GQ+04hvQLskvI +uSEzI/KaSHFmji1rUvA9V156abb7S4yt4FN8Kftrl1rsaWMQDUf8kOa3nC0SMM4r +XKPHr1sBujGEefcrvewPZrm5KPZs5j3sL0VMX/md8Ljb2159tJw0CuA7xdAE4jl7 +zDt3+Qv6gG4bSNwWO/U2QvySsTCwYd1bYk8ZDFX1+JXCdlct0XQds4y5AQ0EXp8F +qAEIAKAdAsCuttbe6mV6jor//Zb8qYlpkaRzewjgA9releQ+adYIUsmK4Tt0xarC +H7u9JlrbcaEe0cpxu50UduMGyPjFuaWtHrdCBHsr8Dj6xAHbnD+LeMnOWoeQlK4D +i9vXdmsUu4NhiRTn+w7j5WOCK9fe15t3hjq1xpyEXMXH+YxkrCbYjKZZFdWZdi1v +fjtW/yjVY4NUg2lS7FEgCZdUmt3Pv0O7fGD7i6hb+JHLSQhWpgIfX29opOFeb+X+ +QXhSv7pzBcJAoOciIuX9k+RCHJPthiK1PAz3d4IcK8XPJIzA6ycFxQlvxC2kjJX2 +MXIXsthtLUdSxblepXDzHtLcg18AEQEAAYkBPAQYAQgAJhYhBGs4yLtBYfmvmRM7 +S433i6AvGGj5BQJenwWoAhsMBQkDwmcAAAoJEI33i6AvGGj5mXEH/jnHajUThIVp +doEwCq1MfVLOs+nruXu55ycZ6UvaEP0nv2pYpBKGeKNL7hA9wyPTwzkD9mI5xpVM +cvd8zsML7AOhc07WSWrptj4mB1fRJvCc8wT6eFCvXK2rIGG9jfbAD+s7Kjjs18Qx +MQUIKA6XlU54jUDwYz7Ukg884qtKKZ3WBHF54GGT41Td1FlsVDXbQwfupFBiSUVf +BEKeaS0xN8/s09wiv2cUWPkIlNCb/eMfZnSEwb5obLLJHtpjZ+a3idmW0X6BiPNM +KPHEVQLWnNs4wnD3QZoCvSXdP20c7SaTSuhRdljQC3fpHdwGYrHHHXecR0hizSOa +W30QPRPKa0Y= +=/xZQ +-----END PGP PUBLIC KEY BLOCK----- diff --git a/gradle/bintrayv2.gradle b/gradle/bintrayv2.gradle index 7982177..9a4c782 100644 --- a/gradle/bintrayv2.gradle +++ b/gradle/bintrayv2.gradle @@ -50,6 +50,7 @@ bintray { version { desc = libraryDescription + // https://www.jfrog.com/confluence/display/BT/Managing+Uploading+Content+New+UI#ManagingUploadingContentNewUI-GPGSigning gpg { sign = true //Determines whether to GPG sign the files. The default is false