From 349122af1c0f122f8c4ebca733e5a6d464117af4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ste=CC=81phane=20Nicolas?= Date: Sat, 4 Oct 2014 14:50:22 +0200 Subject: [PATCH] Use version 0.4.1 of javassist gradle plugin via morpheus update. --- injectview-plugin/build.gradle | 4 +-- .../19.1.0/support-annotations-19.1.0.jar | Bin 0 -> 11464 bytes .../19.1.0/support-annotations-19.1.0.jar.md5 | 1 + .../support-annotations-19.1.0.jar.sha1 | 1 + .../19.1.0/support-annotations-19.1.0.pom | 8 ++++++ .../19.1.0/support-annotations-19.1.0.pom.md5 | 1 + .../support-annotations-19.1.0.pom.sha1 | 1 + .../injectview/InjectViewProcessor.java | 24 ++++++++++++++++++ ...ViewProcessorForViewsWithActivityTest.java | 11 ++++++++ 9 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 injectview-plugin/maven_3rd_party/com/android/support/support-annotations/19.1.0/support-annotations-19.1.0.jar create mode 100644 injectview-plugin/maven_3rd_party/com/android/support/support-annotations/19.1.0/support-annotations-19.1.0.jar.md5 create mode 100644 injectview-plugin/maven_3rd_party/com/android/support/support-annotations/19.1.0/support-annotations-19.1.0.jar.sha1 create mode 100644 injectview-plugin/maven_3rd_party/com/android/support/support-annotations/19.1.0/support-annotations-19.1.0.pom create mode 100644 injectview-plugin/maven_3rd_party/com/android/support/support-annotations/19.1.0/support-annotations-19.1.0.pom.md5 create mode 100644 injectview-plugin/maven_3rd_party/com/android/support/support-annotations/19.1.0/support-annotations-19.1.0.pom.sha1 diff --git a/injectview-plugin/build.gradle b/injectview-plugin/build.gradle index 4f96867..21cac9e 100644 --- a/injectview-plugin/build.gradle +++ b/injectview-plugin/build.gradle @@ -41,8 +41,8 @@ dependencies { compile 'com.github.stephanenicolas.afterburner:afterburner-library:1.0.2' //only needed to create a plugin - compile ("com.github.stephanenicolas.morpheus:morpheus-plugin:1.0.7") - compile ("com.github.stephanenicolas.morpheus:morpheus-commons:1.0.7") + compile ("com.github.stephanenicolas.morpheus:morpheus-plugin:1.0.8-SNAPSHOT") + compile ("com.github.stephanenicolas.morpheus:morpheus-commons:1.0.8-SNAPSHOT") compile gradleApi() compile localGroovy() diff --git a/injectview-plugin/maven_3rd_party/com/android/support/support-annotations/19.1.0/support-annotations-19.1.0.jar b/injectview-plugin/maven_3rd_party/com/android/support/support-annotations/19.1.0/support-annotations-19.1.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..dcbcad68f314878b3dea2027d55b8b684d768968 GIT binary patch literal 11464 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 z + + 4.0.0 + com.android.support + support-annotations + 19.1.0 + diff --git a/injectview-plugin/maven_3rd_party/com/android/support/support-annotations/19.1.0/support-annotations-19.1.0.pom.md5 b/injectview-plugin/maven_3rd_party/com/android/support/support-annotations/19.1.0/support-annotations-19.1.0.pom.md5 new file mode 100644 index 0000000..1801112 --- /dev/null +++ b/injectview-plugin/maven_3rd_party/com/android/support/support-annotations/19.1.0/support-annotations-19.1.0.pom.md5 @@ -0,0 +1 @@ +26d94fad9edf7c187b0d7c51a4e70bd9 \ No newline at end of file diff --git a/injectview-plugin/maven_3rd_party/com/android/support/support-annotations/19.1.0/support-annotations-19.1.0.pom.sha1 b/injectview-plugin/maven_3rd_party/com/android/support/support-annotations/19.1.0/support-annotations-19.1.0.pom.sha1 new file mode 100644 index 0000000..8164765 --- /dev/null +++ b/injectview-plugin/maven_3rd_party/com/android/support/support-annotations/19.1.0/support-annotations-19.1.0.pom.sha1 @@ -0,0 +1 @@ +2c182b967e6ab32e27afcd4b1ba1aa1158e12c0b \ No newline at end of file diff --git a/injectview-plugin/src/main/java/com/github/stephanenicolas/injectview/InjectViewProcessor.java b/injectview-plugin/src/main/java/com/github/stephanenicolas/injectview/InjectViewProcessor.java index bbd77c2..7caa100 100644 --- a/injectview-plugin/src/main/java/com/github/stephanenicolas/injectview/InjectViewProcessor.java +++ b/injectview-plugin/src/main/java/com/github/stephanenicolas/injectview/InjectViewProcessor.java @@ -5,6 +5,7 @@ import com.github.stephanenicolas.afterburner.exception.AfterBurnerImpossibleException; import com.github.stephanenicolas.morpheus.commons.CtClassFilter; import com.github.stephanenicolas.morpheus.commons.JavassistUtils; +import com.github.stephanenicolas.morpheus.commons.NullableUtils; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; @@ -269,6 +270,7 @@ private String injectFragmentStatements(List fragments, String root) th String getFragmentString = isUsingId ? ".findFragmentById(" + id + ")" : ".findFragmentByTag(\"" + tag + "\")"; buffer.append(root + "." + getFragmentManagerString + getFragmentString + ";\n"); + buffer.append(checkNullable(field)); } return buffer.toString(); } @@ -322,6 +324,7 @@ private String injectViewStatements(List viewsToInject, CtClass targetC isUsingId ? "findViewById(" + id + ")" : "findViewWithTag(\"" + tag + "\")"; } buffer.append(root + "." + findViewString + ";\n"); + buffer.append(checkNullable(field)); } log.debug("Inserted :" + buffer.toString()); return buffer.toString(); @@ -377,6 +380,7 @@ private String injectViewStatementsForParam(List viewsToInject, CtClass isUsingId ? "findViewById(" + id + ")" : "findViewWithTag(\"" + tag + "\")"; } buffer.append(root + "." + findViewString + ";\n"); + buffer.append(checkNullable(field)); } log.debug("Inserted :" + buffer.toString()); return buffer.toString(); @@ -451,6 +455,26 @@ private String createInjectedBodyWithParam(CtClass clazz, CtClass[] paramClasses return string; } + private String checkNullable(CtField field) throws NotFoundException { + String checkNullable = ""; + String fieldName = field.getName(); + try { + log.debug("Using pool in Nullable " + System.identityHashCode(field.getType().getClassPool())); + log.debug("Using pool in Nullable " + field.getType().getClassPool().get("android.support.annotation.Nullable")); + } catch (NotFoundException e) { + e.printStackTrace(); + } + + if (NullableUtils.isNotNullable(field)) { + checkNullable = "if (" + + fieldName + + " == null) {\n throw new RuntimeException(\"Field " + + fieldName + + " is null and is not @Nullable.\"); \n}\n"; + } + return checkNullable; + } + private static class InjectViewCtClassFilter implements CtClassFilter { @Override public boolean isValid(CtClass clazz) throws NotFoundException { return isActivity(clazz) || isView(clazz) || isFragment(clazz) || isSupportFragment(clazz); diff --git a/injectview-plugin/src/test/java/com/github/stephanenicolas/injectview/InjectViewProcessorForViewsWithActivityTest.java b/injectview-plugin/src/test/java/com/github/stephanenicolas/injectview/InjectViewProcessorForViewsWithActivityTest.java index 13b9baf..375b597 100644 --- a/injectview-plugin/src/test/java/com/github/stephanenicolas/injectview/InjectViewProcessorForViewsWithActivityTest.java +++ b/injectview-plugin/src/test/java/com/github/stephanenicolas/injectview/InjectViewProcessorForViewsWithActivityTest.java @@ -100,6 +100,14 @@ public void shouldInjectView_whenUsingAtContentView_withTag_withoutOnCreate() { assertThat((Integer) root.getTag(), is(CONTENT_VIEW_ID)); } + @Test + public void shouldInjectView_withInheritance() { + TestActivityInherited activity = Robolectric.buildActivity(TestActivityInherited.class) + .create() + .get(); + assertNotNull(activity.text1); + assertThat(activity.text1.getId(), is(VIEW_ID)); + } public static class TestActivityWithId extends Activity { @@ -224,4 +232,7 @@ public static class TestActivityWithContentViewAndTagWithoutOnCreate extends Act setContentView(linearLayout); } } + + public static class TestActivityInherited extends TestActivityWithId { + } }