diff --git a/README.md b/README.md index 3f30ca2..e09bd47 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,11 @@ + +[![Android Arsenal](https://img.shields.io/badge/Android%20Arsenal-easydatabinding-green.svg?style=true)](https://android-arsenal.com/details/1/4106) + # easydatabinding This project goal is to create activity fragment and views, with less code to be more efficient on the view models -# Version : 0.4.5 +# Version : 0.6.0 # Goal I used DataBinding for a few weeks since Google allows us to use it. diff --git a/annotation/.gitignore b/annotation/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/annotation/.gitignore @@ -0,0 +1 @@ +/build diff --git a/annotation/annotation.iml b/annotation/annotation.iml new file mode 100644 index 0000000..65131f9 --- /dev/null +++ b/annotation/annotation.iml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/annotation/build.gradle b/annotation/build.gradle new file mode 100644 index 0000000..2a04e25 --- /dev/null +++ b/annotation/build.gradle @@ -0,0 +1,7 @@ +apply plugin: 'java' +apply plugin: 'maven' + +// This is important for publishing, even if Android Studio claims it isn't +// used. Android can't interpret Java 8 byte code. +sourceCompatibility = JavaVersion.VERSION_1_7 +targetCompatibility = JavaVersion.VERSION_1_7 diff --git a/annotation/src/main/java/com/joxad/easydatabinding/DataBindable.java b/annotation/src/main/java/com/joxad/easydatabinding/DataBindable.java new file mode 100644 index 0000000..71b10a0 --- /dev/null +++ b/annotation/src/main/java/com/joxad/easydatabinding/DataBindable.java @@ -0,0 +1,8 @@ +package com.joxad.easydatabinding; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +@Target(value = ElementType.TYPE) +public @interface DataBindable { +} diff --git a/build.gradle b/build.gradle index 2d3b9c8..2e9b4df 100644 --- a/build.gradle +++ b/build.gradle @@ -6,8 +6,8 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:2.1.0' - + classpath 'com.android.tools.build:gradle:2.1.2' + classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.2' classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3' } diff --git a/compiler/.gitignore b/compiler/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/compiler/.gitignore @@ -0,0 +1 @@ +/build diff --git a/compiler/build.gradle b/compiler/build.gradle new file mode 100644 index 0000000..6ece946 --- /dev/null +++ b/compiler/build.gradle @@ -0,0 +1,10 @@ +apply plugin: 'java' + +sourceCompatibility = JavaVersion.VERSION_1_7 +targetCompatibility = JavaVersion.VERSION_1_7 + +dependencies { + compile project (':annotation') + compile 'com.google.auto.service:auto-service:1.0-rc2' + compile 'com.squareup:javapoet:1.0.0' +} \ No newline at end of file diff --git a/compiler/compiler.iml b/compiler/compiler.iml new file mode 100644 index 0000000..ae0fd9b --- /dev/null +++ b/compiler/compiler.iml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/compiler/src/main/java/com/joxad/easydatabinding/AnnotatedClass.java b/compiler/src/main/java/com/joxad/easydatabinding/AnnotatedClass.java new file mode 100644 index 0000000..ea74f62 --- /dev/null +++ b/compiler/src/main/java/com/joxad/easydatabinding/AnnotatedClass.java @@ -0,0 +1,22 @@ +package com.joxad.easydatabinding; + +import java.util.List; + +import javax.lang.model.element.TypeElement; +import javax.lang.model.type.TypeMirror; + +class AnnotatedClass { + public final String annotatedClassName; + public final List variableNames; + public final TypeElement typeElement; + + public AnnotatedClass(TypeElement typeElement, List variableNames) { + this.annotatedClassName = typeElement.getSimpleName().toString(); + this.variableNames = variableNames; + this.typeElement = typeElement; + } + + public TypeMirror getType() { + return typeElement.asType(); + } +} \ No newline at end of file diff --git a/compiler/src/main/java/com/joxad/easydatabinding/ClassValidator.java b/compiler/src/main/java/com/joxad/easydatabinding/ClassValidator.java new file mode 100644 index 0000000..13a3355 --- /dev/null +++ b/compiler/src/main/java/com/joxad/easydatabinding/ClassValidator.java @@ -0,0 +1,15 @@ +package com.joxad.easydatabinding; + +import javax.lang.model.element.TypeElement; + +import static javax.lang.model.element.Modifier.ABSTRACT; +import static javax.lang.model.element.Modifier.PUBLIC; +final class ClassValidator { + static boolean isPublic(TypeElement annotatedClass) { + return annotatedClass.getModifiers().contains(PUBLIC); + } + + static boolean isAbstract(TypeElement annotatedClass) { + return annotatedClass.getModifiers().contains(ABSTRACT); + } +} \ No newline at end of file diff --git a/compiler/src/main/java/com/joxad/easydatabinding/CodeGenerator.java b/compiler/src/main/java/com/joxad/easydatabinding/CodeGenerator.java new file mode 100644 index 0000000..7f9a0e0 --- /dev/null +++ b/compiler/src/main/java/com/joxad/easydatabinding/CodeGenerator.java @@ -0,0 +1,47 @@ +package com.joxad.easydatabinding; + +import com.squareup.javapoet.MethodSpec; +import com.squareup.javapoet.TypeSpec; + +import java.util.List; + +import static com.squareup.javapoet.ClassName.get; +import static com.squareup.javapoet.MethodSpec.methodBuilder; +import static com.squareup.javapoet.TypeSpec.classBuilder; +import static javax.lang.model.element.Modifier.FINAL; +import static javax.lang.model.element.Modifier.PUBLIC; +import static javax.lang.model.element.Modifier.STATIC; + +final class CodeGenerator { + + private static final String CLASS_NAME = "DataBindableUtil"; + + public static TypeSpec generateClass(List classes) { + TypeSpec.Builder builder = classBuilder(CLASS_NAME) + .addModifiers(PUBLIC, FINAL); + for (AnnotatedClass anno : classes) { + builder.addMethod(makeCreateStringMethod(anno)); + } + return builder.build(); + } + + /** + * @return a createString() method that takes annotatedClass's type as an input. + */ + private static MethodSpec makeCreateStringMethod(AnnotatedClass annotatedClass) { + StringBuilder builder = new StringBuilder(); + builder.append(String.format("return \"%s{\" + ", annotatedClass.annotatedClassName)); + for (String variableName : annotatedClass.variableNames) { + builder.append(String.format(" \"%s='\" + String.valueOf(instance.%s) + \"',\" + ", + variableName, variableName)); + } + builder.append("\"}\""); + return methodBuilder("createString") + .addJavadoc("@return string suitable for {@param instance}'s toString()") + .addModifiers(PUBLIC, STATIC) + .addParameter(get(annotatedClass.getType()), "instance") + .addStatement(builder.toString()) + .returns(String.class) + .build(); + } +} \ No newline at end of file diff --git a/compiler/src/main/java/com/joxad/easydatabinding/DataBindableProcessor.java b/compiler/src/main/java/com/joxad/easydatabinding/DataBindableProcessor.java new file mode 100644 index 0000000..69840a2 --- /dev/null +++ b/compiler/src/main/java/com/joxad/easydatabinding/DataBindableProcessor.java @@ -0,0 +1,117 @@ +package com.joxad.easydatabinding; + +import com.google.auto.service.AutoService; +import com.squareup.javapoet.JavaFile; +import com.squareup.javapoet.TypeSpec; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +import javax.annotation.processing.*; +import javax.annotation.processing.Messager; +import javax.lang.model.SourceVersion; +import javax.lang.model.element.Element; +import javax.lang.model.element.TypeElement; +import javax.lang.model.element.VariableElement; + +import static com.squareup.javapoet.JavaFile.builder; +import static java.util.Collections.singleton; +import static javax.lang.model.SourceVersion.latestSupported; +import static javax.tools.Diagnostic.Kind.*; + + +@AutoService(Processor.class) +public class DataBindableProcessor extends AbstractProcessor { + + private static final String ANNOTATION = "@" + DataBindable.class.getSimpleName(); + + private Messager messager; + + @Override + public synchronized void init(ProcessingEnvironment processingEnv) { + super.init(processingEnv); + messager = processingEnv.getMessager(); + } + + @Override + public Set getSupportedAnnotationTypes() { + return singleton(DataBindableProcessor.class.getCanonicalName()); + } + + @Override + public SourceVersion getSupportedSourceVersion() { + return latestSupported(); + } + + @Override + public boolean process(Set annotations, RoundEnvironment roundEnv) { + ArrayList annotatedClasses = new ArrayList<>(); + for (Element annotatedElement : roundEnv.getElementsAnnotatedWith(DataBindable.class)) { + // Our annotation is defined with @Target(value=TYPE). Therefore, we can assume that + // this annotatedElement is a TypeElement. + TypeElement annotatedClass = (TypeElement) annotatedElement; + if (!isValidClass(annotatedClass)) { + return true; + } + try { + annotatedClasses.add(buildAnnotatedClass(annotatedClass)); + } catch (NoPackageNameException | IOException e) { + String message = String.format("Couldn't process class %s: %s", annotatedClass, + e.getMessage()); + messager.printMessage(ERROR, message, annotatedElement); + } + } + try { + generate(annotatedClasses); + } catch (NoPackageNameException | IOException e) { + messager.printMessage(ERROR, "Couldn't generate class"); + } + return true; + } + + private boolean isValidClass(TypeElement annotatedClass) { + + if (!ClassValidator.isPublic(annotatedClass)) { + String message = String.format("Classes annotated with %s must be public.", + ANNOTATION); + messager.printMessage(ERROR, message, annotatedClass); + return false; + } + + if (ClassValidator.isAbstract(annotatedClass)) { + String message = String.format("Classes annotated with %s must not be abstract.", + ANNOTATION); + messager.printMessage(ERROR, message, annotatedClass); + return false; + } + + return true; + } + + private com.joxad.easydatabinding.AnnotatedClass buildAnnotatedClass(TypeElement annotatedClass) + throws NoPackageNameException, IOException { + ArrayList variableNames = new ArrayList<>(); + for (Element element : annotatedClass.getEnclosedElements()) { + if (!(element instanceof VariableElement)) { + continue; + } + VariableElement variableElement = (VariableElement) element; + variableNames.add(variableElement.getSimpleName().toString()); + } + return new com.joxad.easydatabinding.AnnotatedClass(annotatedClass, variableNames); + } + + private void generate(List annos) throws NoPackageNameException, IOException { + if (annos.size() == 0) { + return; + } + String packageName = Utils.getPackageName(processingEnv.getElementUtils(), + annos.get(0).typeElement); + TypeSpec generatedClass = com.joxad.easydatabinding.CodeGenerator.generateClass(annos); + + JavaFile javaFile = builder(packageName, generatedClass).build(); + javaFile.writeTo(processingEnv.getFiler()); + } +} diff --git a/compiler/src/main/java/com/joxad/easydatabinding/NoPackageNameException.java b/compiler/src/main/java/com/joxad/easydatabinding/NoPackageNameException.java new file mode 100644 index 0000000..99188c5 --- /dev/null +++ b/compiler/src/main/java/com/joxad/easydatabinding/NoPackageNameException.java @@ -0,0 +1,10 @@ +package com.joxad.easydatabinding; + +import javax.lang.model.element.TypeElement; + +class NoPackageNameException extends Exception { + + public NoPackageNameException(TypeElement typeElement) { + super("The package of " + typeElement.getSimpleName() + " has no name"); + } +} \ No newline at end of file diff --git a/compiler/src/main/java/com/joxad/easydatabinding/Utils.java b/compiler/src/main/java/com/joxad/easydatabinding/Utils.java new file mode 100644 index 0000000..a2bc897 --- /dev/null +++ b/compiler/src/main/java/com/joxad/easydatabinding/Utils.java @@ -0,0 +1,21 @@ +package com.joxad.easydatabinding; + +import javax.lang.model.element.PackageElement; +import javax.lang.model.element.TypeElement; +import javax.lang.model.util.Elements; + +final class Utils { + + private Utils() { + // no instances + } + + static String getPackageName(Elements elementUtils, TypeElement type) + throws NoPackageNameException { + PackageElement pkg = elementUtils.getPackageOf(type); + if (pkg.isUnnamed()) { + throw new NoPackageNameException(type); + } + return pkg.getQualifiedName().toString(); + } +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index f894c80..9d5c6b6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -12,12 +12,12 @@ # Default value: -Xmx10248m -XX:MaxPermSize=256m # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 -# When configured, Gradle will run in incubating parallel mode. +# When configured, Gradle will run incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true -VERSION_NAME=0.4.5 +VERSION_NAME=0.6.0 POM_GROUP=com.joxad.easydatabinding POM_NAME=easydatabinding diff --git a/lib/build.gradle b/lib/build.gradle index 1c2f2cc..3b9d4b1 100644 --- a/lib/build.gradle +++ b/lib/build.gradle @@ -25,6 +25,5 @@ dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile libs.appCompat - provided libs.lombok } apply from: '../gradle/tasks/bintray_upload.gradle' diff --git a/lib/lib.iml b/lib/lib.iml index 19dbd15..93a84e5 100644 --- a/lib/lib.iml +++ b/lib/lib.iml @@ -1,6 +1,138 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lib/src/main/java/com/joxad/easydatabinding/activity/ActivityBase.java b/lib/src/main/java/com/joxad/easydatabinding/activity/ActivityBase.java index 73d2f77..fd4f29d 100644 --- a/lib/src/main/java/com/joxad/easydatabinding/activity/ActivityBase.java +++ b/lib/src/main/java/com/joxad/easydatabinding/activity/ActivityBase.java @@ -8,8 +8,7 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; - -import lombok.Getter; +import android.view.MenuItem; /** * {@link ActivityBase} will allow you to generate a basic activity that put your view model {@link B} and its {@link VM} @@ -19,12 +18,12 @@ public abstract class ActivityBase extends DialogFragment { + + /*** + * FragmentBinding used in this view + */ + + protected B binding; + /*** + * The view model that will be used to handle this fragment + */ + + protected VM vm; + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + binding = DataBindingUtil.inflate(inflater, layoutResources(), container, false); + vm = baseFragmentVM(binding); + binding.setVariable(data(), vm); + return binding.getRoot(); + } + + + @Override + public void onResume() { + super.onResume(); + vm.onResume(); + } + + @Override + public void onPause() { + super.onPause(); + vm.onPause(); + } + + + /*** + * Handle the permission and give it to the activity + * + * @param requestCode + * @param permissions + * @param grantResults + */ + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + if (vm instanceof IPermission) + ((IPermission) vm).onRequestPermissionsResult(requestCode, permissions, grantResults); + } + + /*** + * Handle the activity result if you need to use it inside the vm of the fragment + * + * @param requestCode + * @param resultCode + * @param data + */ + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (vm instanceof IResult) + ((IResult) vm).onActivityResult(requestCode, resultCode, data); + } + + /** + * The int value found in the {@link com.joxad.easydatabinding.BR} class generated by DataBinding + * + * @return + */ + public abstract int data(); + + /*** + * @return your layout resources + */ + @LayoutRes + public abstract int layoutResources(); + + /*** + * @param binding + * @return the {@link VM} you want to use in this activity + */ + public abstract VM baseFragmentVM(B binding); +} diff --git a/lib/src/main/java/com/joxad/easydatabinding/fragment/DialogFragmentBaseVM.java b/lib/src/main/java/com/joxad/easydatabinding/fragment/DialogFragmentBaseVM.java new file mode 100644 index 0000000..d252c64 --- /dev/null +++ b/lib/src/main/java/com/joxad/easydatabinding/fragment/DialogFragmentBaseVM.java @@ -0,0 +1,48 @@ +package com.joxad.easydatabinding.fragment; + +import android.databinding.BaseObservable; +import android.databinding.ViewDataBinding; + +import com.joxad.easydatabinding.base.IVM; + + +/** + * Created by josh on 13/04/16. + */ +public abstract class DialogFragmentBaseVM extends BaseObservable implements IVM { + + /*** + * {@link F} is the fragment that use the current VM + */ + protected F fragment; + /** + * {@link B} will be used to find the views inside the fragment + */ + protected B binding; + + /*** + * @param + * @param binding + */ + public DialogFragmentBaseVM(F fragment, B binding) { + this.fragment = fragment; + this.binding = binding; + init(); + } + + /*** + * LifeCycle of the Fragment + */ + protected void onResume() { + + } + + /*** + * LifeCycle of the fragment + */ + protected void onPause() { + + } + + public abstract void init(); +} \ No newline at end of file diff --git a/lib/src/main/java/com/joxad/easydatabinding/fragment/FragmentBase.java b/lib/src/main/java/com/joxad/easydatabinding/fragment/FragmentBase.java index d7b9768..c34c0f1 100644 --- a/lib/src/main/java/com/joxad/easydatabinding/fragment/FragmentBase.java +++ b/lib/src/main/java/com/joxad/easydatabinding/fragment/FragmentBase.java @@ -15,8 +15,6 @@ import com.joxad.easydatabinding.activity.IPermission; import com.joxad.easydatabinding.activity.IResult; -import lombok.Getter; - /** * Created by josh on 13/04/16. */ @@ -25,12 +23,12 @@ public abstract class FragmentBase - #3F51B5 - #303F9F - #FF4081 + #3F51B5 + #303F9F + #FF4081 diff --git a/lib/src/main/res/values/strings.xml b/lib/src/main/res/values/strings.xml index e512455..1a05954 100644 --- a/lib/src/main/res/values/strings.xml +++ b/lib/src/main/res/values/strings.xml @@ -1,3 +1,3 @@ - Easydatabinding + Easydatabinding diff --git a/lib/src/main/res/values/styles.xml b/lib/src/main/res/values/styles.xml index 5885930..42743bc 100644 --- a/lib/src/main/res/values/styles.xml +++ b/lib/src/main/res/values/styles.xml @@ -1,11 +1,11 @@ - diff --git a/sample/build.gradle b/sample/build.gradle index 968de8c..dfc63e5 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -1,4 +1,5 @@ apply plugin: 'com.android.application' +apply plugin: 'com.neenbedankt.android-apt' android { compileSdkVersion 23 @@ -22,9 +23,14 @@ android { dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) - testCompile 'junit:junit:4.12' compile project(':lib') + compile project(':annotation') + + + apt project(':compiler') compile libs.recyclerViewDataBinding compile libs.recyclerViewAdapter + } + diff --git a/sample/sample.iml b/sample/sample.iml index 19dbd15..944669a 100644 --- a/sample/sample.iml +++ b/sample/sample.iml @@ -1,6 +1,134 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sample/src/main/AndroidManifest.xml b/sample/src/main/AndroidManifest.xml index 3349a54..c50b682 100644 --- a/sample/src/main/AndroidManifest.xml +++ b/sample/src/main/AndroidManifest.xml @@ -4,7 +4,18 @@ + android:supportsRtl="true" + android:theme="@style/EasyTheme"> + + + + + + + + + + \ No newline at end of file diff --git a/sample/src/main/java/joxad/easydatabinding/sample/ActivityMain.java b/sample/src/main/java/joxad/easydatabinding/sample/ActivityMain.java index ed06d8a..0ce5a29 100644 --- a/sample/src/main/java/joxad/easydatabinding/sample/ActivityMain.java +++ b/sample/src/main/java/joxad/easydatabinding/sample/ActivityMain.java @@ -1,6 +1,7 @@ package joxad.easydatabinding.sample; import android.os.Bundle; +import android.support.annotation.Nullable; import com.joxad.easydatabinding.activity.ActivityBase; @@ -27,4 +28,6 @@ public int layoutResources() { public ActivityMainVM baseActivityVM(ActivityMainBinding binding, Bundle savedInstanceState) { return new ActivityMainVM(this, binding); } + + } diff --git a/sample/src/main/java/joxad/easydatabinding/sample/User.java b/sample/src/main/java/joxad/easydatabinding/sample/User.java index 2e21cf1..767b667 100644 --- a/sample/src/main/java/joxad/easydatabinding/sample/User.java +++ b/sample/src/main/java/joxad/easydatabinding/sample/User.java @@ -1,8 +1,11 @@ package joxad.easydatabinding.sample; +import com.joxad.easydatabinding.DataBindable; + /** * Created by josh on 13/04/16. */ +@DataBindable public class User { public String name; @@ -10,4 +13,9 @@ public class User { public User(String s) { name = s; } + + @Override + public String toString() { + return "";//DataBindableUtil.createString(this); + } } diff --git a/sample/src/main/java/joxad/easydatabinding/sample/annotations/Test.java b/sample/src/main/java/joxad/easydatabinding/sample/annotations/Test.java deleted file mode 100644 index 0e4dc69..0000000 --- a/sample/src/main/java/joxad/easydatabinding/sample/annotations/Test.java +++ /dev/null @@ -1,15 +0,0 @@ -package joxad.easydatabinding.sample.annotations; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.METHOD) //can use in method only. -public @interface Test { - - //should ignore this test? - public boolean enabled() default true; - -} \ No newline at end of file diff --git a/sample/src/main/java/joxad/easydatabinding/sample/annotations/TestExample.java b/sample/src/main/java/joxad/easydatabinding/sample/annotations/TestExample.java deleted file mode 100644 index e6ad9c1..0000000 --- a/sample/src/main/java/joxad/easydatabinding/sample/annotations/TestExample.java +++ /dev/null @@ -1,30 +0,0 @@ -package joxad.easydatabinding.sample.annotations; - - -@TesterInfo( - priority = TesterInfo.Priority.HIGH, - createdBy = "mkyong.com", - tags = {"sales","test" } -) -public class TestExample { - - @Test - void testA() { - if (true) - throw new RuntimeException("This test always failed"); - } - - @Test(enabled = false) - void testB() { - if (false) - throw new RuntimeException("This test always passed"); - } - - @Test(enabled = true) - void testC() { - if (10 > 1) { - // do nothing, this test always passed. - } - } - -} diff --git a/sample/src/main/java/joxad/easydatabinding/sample/annotations/TesterInfo.java b/sample/src/main/java/joxad/easydatabinding/sample/annotations/TesterInfo.java deleted file mode 100644 index 54da6d2..0000000 --- a/sample/src/main/java/joxad/easydatabinding/sample/annotations/TesterInfo.java +++ /dev/null @@ -1,24 +0,0 @@ -package joxad.easydatabinding.sample.annotations; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) //on class level -public @interface TesterInfo { - - public enum Priority { - LOW, MEDIUM, HIGH - } - - Priority priority() default Priority.MEDIUM; - - String[] tags() default ""; - - String createdBy() default "Mkyong"; - - String lastModified() default "03/01/2014"; - -} \ No newline at end of file diff --git a/sample/src/main/res/values/strings.xml b/sample/src/main/res/values/strings.xml index 1ad8c29..a136c02 100644 --- a/sample/src/main/res/values/strings.xml +++ b/sample/src/main/res/values/strings.xml @@ -1,3 +1,3 @@ - Sample + Sample diff --git a/sample/src/main/res/values/styles.xml b/sample/src/main/res/values/styles.xml index 5885930..42743bc 100644 --- a/sample/src/main/res/values/styles.xml +++ b/sample/src/main/res/values/styles.xml @@ -1,11 +1,11 @@ - diff --git a/sample/src/test/java/joxad/easydatabinding/sample/ExampleUnitTest.java b/sample/src/test/java/joxad/easydatabinding/sample/ExampleUnitTest.java deleted file mode 100644 index 3dfbfcf..0000000 --- a/sample/src/test/java/joxad/easydatabinding/sample/ExampleUnitTest.java +++ /dev/null @@ -1,15 +0,0 @@ -package joxad.easydatabinding.sample; - -import org.junit.Test; - -import static org.junit.Assert.*; - -/** - * To work on unit tests, switch the Test Artifact in the Build Variants view. - */ -public class ExampleUnitTest { - @Test - public void addition_isCorrect() throws Exception { - assertEquals(4, 2 + 2); - } -} \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 47470a4..7c69d03 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1 @@ -include ':lib', ':sample' +include ':annotation', ':compiler', ':sample',':lib'