From fe0da296094eb162f6e661a0f7939b67c2b8569f Mon Sep 17 00:00:00 2001 From: Hadi Satrio Date: Thu, 31 Aug 2017 19:41:06 +0700 Subject: [PATCH] Initial revision --- .gitignore | 52 +++ LICENSE.txt | 187 ++++++++++ README.md | 74 ++++ annotations/.gitignore | 17 + annotations/build.gradle | 31 ++ .../viewmodelprovider/GeneratedProvider.java | 24 ++ build.gradle | 41 +++ compiler/.gitignore | 17 + compiler/build.gradle | 38 ++ .../GeneratedProviderProcessor.java | 348 ++++++++++++++++++ .../NoPackageNameException.java | 26 ++ demo/.gitignore | 52 +++ demo/build.gradle | 46 +++ demo/src/main/AndroidManifest.xml | 35 ++ .../alfreddemo/CustomViewModelFactory.java | 54 +++ .../android/alfreddemo/DopeViewModel.java | 34 ++ .../alfreddemo/EvenLamerViewModel.java | 37 ++ .../android/alfreddemo/LameViewModel.java | 31 ++ .../android/alfreddemo/SeeAlfredInAction.java | 46 +++ .../res/drawable/ic_launcher_background.xml | 127 +++++++ .../layout/activity_see_alfred_in_action.xml | 32 ++ .../res/mipmap-anydpi-v26/ic_launcher.xml | 20 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 20 + demo/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3358 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 5117 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 5084 bytes demo/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2386 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 2652 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 3179 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4648 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 7011 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 7381 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7008 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 14578 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 11545 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9442 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 21908 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 16109 bytes demo/src/main/res/values/colors.xml | 21 ++ demo/src/main/res/values/strings.xml | 19 + demo/src/main/res/values/styles.xml | 24 ++ gradle.properties | 1 + gradle/dependencies.gradle | 25 ++ gradle/versions.gradle | 35 ++ gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 53636 bytes gradle/wrapper/gradle-wrapper.properties | 20 + gradlew | 160 ++++++++ gradlew.bat | 90 +++++ settings.gradle | 1 + 49 files changed, 1785 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE.txt create mode 100644 README.md create mode 100644 annotations/.gitignore create mode 100644 annotations/build.gradle create mode 100644 annotations/src/main/java/com/hadisatrio/libs/android/viewmodelprovider/GeneratedProvider.java create mode 100644 build.gradle create mode 100644 compiler/.gitignore create mode 100644 compiler/build.gradle create mode 100644 compiler/src/main/java/com/hadisatrio/libs/android/viewmodelprovider/GeneratedProviderProcessor.java create mode 100644 compiler/src/main/java/com/hadisatrio/libs/android/viewmodelprovider/NoPackageNameException.java create mode 100644 demo/.gitignore create mode 100644 demo/build.gradle create mode 100644 demo/src/main/AndroidManifest.xml create mode 100644 demo/src/main/java/com/hadisatrio/apps/android/alfreddemo/CustomViewModelFactory.java create mode 100644 demo/src/main/java/com/hadisatrio/apps/android/alfreddemo/DopeViewModel.java create mode 100644 demo/src/main/java/com/hadisatrio/apps/android/alfreddemo/EvenLamerViewModel.java create mode 100644 demo/src/main/java/com/hadisatrio/apps/android/alfreddemo/LameViewModel.java create mode 100644 demo/src/main/java/com/hadisatrio/apps/android/alfreddemo/SeeAlfredInAction.java create mode 100644 demo/src/main/res/drawable/ic_launcher_background.xml create mode 100644 demo/src/main/res/layout/activity_see_alfred_in_action.xml create mode 100644 demo/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 demo/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 demo/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 demo/src/main/res/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 demo/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 demo/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 demo/src/main/res/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 demo/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 demo/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 demo/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 demo/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 demo/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 demo/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 demo/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 demo/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 demo/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 demo/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 demo/src/main/res/values/colors.xml create mode 100644 demo/src/main/res/values/strings.xml create mode 100644 demo/src/main/res/values/styles.xml create mode 100644 gradle.properties create mode 100644 gradle/dependencies.gradle create mode 100644 gradle/versions.gradle create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d6627b6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,52 @@ +# Built application files +*.apk +*.ap_ + +# Files for the ART/Dalvik VM +*.dex + +# Java class files +*.class + +# Generated files +bin/ +gen/ +out/ + +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Proguard folder generated by Eclipse +proguard/ + +# Log Files +*.log + +# Android Studio Navigation editor temp files +.navigation/ + +# Android Studio captures folder +captures/ + +# Intellij +*.iml +.idea + +# Keystore files +*.jks + +# External native build folder generated in Android Studio 2.2 and later +.externalNativeBuild + +# OS-specific files +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..9e30b4f --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,187 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. diff --git a/README.md b/README.md new file mode 100644 index 0000000..ae935d5 --- /dev/null +++ b/README.md @@ -0,0 +1,74 @@ +Alfred – Android `ViewModel` instantiation made effortless +--- + +[![JitPack][1]][2] + +![Alfred, your trusty View Model butler.](http://i.imgur.com/EDNJaWB.jpg) + + +### Why should I use it? + +``` + // It's so you can just do this... + + DopeViewModel dopeViewModel = DopeViewModelProvider.get(this, "...", 0L); +``` + +``` + // Instead this... + + LameViewModel lameViewModel = ViewModelProviders.of(this).get(LameViewModel.class); + lameViewModel.setMessage("..."); + lameViewModel.setFucksGiven(1L); +``` + +``` + // Or, God forbid, this... + + EvenLamerViewModel evenLamerViewModel = ViewModelProviders.of(this, new CustomViewModelFactory("...", 1000L)).get(EvenLamerViewModel.class); + + ... + + public final class CustomViewModelFactory implements ViewModelProvider.Factory { + + // About 28 lines of code here (given your ViewModel takes 2 arguments like above). + } +``` + + +### Including `Alfred` to your project + +Include `Alfred` to your Gradle project by adding it as a dependency in your `build.gradle`: + +``` + apply plugin: 'com.neenbedankt.android-apt' + + repositories { + maven { url "https://jitpack.io" } + } + + dependencies { + compile 'com.hadisatrio.Alfred:annotations:v1.0.0-RC.1' + apt 'com.hadisatrio.Alfred:compiler:v1.0.0-RC.1' + } +``` + +You'll also need `android-apt` in your project. See how to do it [here.](https://bitbucket.org/hvisser/android-apt) + + +### Contributions + +Any kind of contribution will be appreciated. PR away! + + +### License + +`Alfred` is published under the [Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0.html). + +--- + +_**p.s.**, Please let me know if you're using `Alfred` in your projects. Drop an email at +hi[you-know-what-to-put-here]hadisatrio.com._ ;) + +[1]: https://jitpack.io/v/MrHadiSatrio/Alfred.svg?style=flat-square +[2]: https://jitpack.io/#MrHadiSatrio/Alfred diff --git a/annotations/.gitignore b/annotations/.gitignore new file mode 100644 index 0000000..9ff7f0e --- /dev/null +++ b/annotations/.gitignore @@ -0,0 +1,17 @@ +# Built files +build/ + +# Gradle files +.gradle/ + +# IntelliJ files +.idea + +# OS-specific files +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db diff --git a/annotations/build.gradle b/annotations/build.gradle new file mode 100644 index 0000000..17a6f3f --- /dev/null +++ b/annotations/build.gradle @@ -0,0 +1,31 @@ +apply plugin: 'java-library' +apply plugin: 'maven' + +group = "com.github.MrHadiSatrio" +version = rootProject.alfredAnnotationsVersion + +sourceCompatibility = rootProject.sourceCompatibilityVersion +targetCompatibility = rootProject.targetCompatibilityVersion + +repositories { + mavenCentral() +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) +} + +task sourcesJar(type: Jar, dependsOn: classes) { + classifier = 'sources' + from sourceSets.main.allSource +} + +task javadocJar(type: Jar, dependsOn: javadoc) { + classifier = 'javadoc' + from javadoc.destinationDir +} + +artifacts { + archives sourcesJar + archives javadocJar +} diff --git a/annotations/src/main/java/com/hadisatrio/libs/android/viewmodelprovider/GeneratedProvider.java b/annotations/src/main/java/com/hadisatrio/libs/android/viewmodelprovider/GeneratedProvider.java new file mode 100644 index 0000000..dfad005 --- /dev/null +++ b/annotations/src/main/java/com/hadisatrio/libs/android/viewmodelprovider/GeneratedProvider.java @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2017 Hadi Satrio + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.hadisatrio.libs.android.viewmodelprovider; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(RetentionPolicy.CLASS) +public @interface GeneratedProvider { +} diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..59a92c9 --- /dev/null +++ b/build.gradle @@ -0,0 +1,41 @@ +buildscript { + + apply from: rootProject.file("gradle/versions.gradle") + apply from: rootProject.file("gradle/dependencies.gradle") + + repositories { + google() + jcenter() + } + + dependencies { + classpath androidToolsPlugin + } +} + +allprojects { + repositories { + google() + jcenter() + } +} + +task clean(type: Delete) { + allprojects.each { project -> + delete project.buildDir + } +} + +task zip(type: Zip) { + from project.projectDir + exclude '.gradle' + exclude '.idea' + exclude '.okbuck' + exclude 'zips' + exclude 'build' + exclude '**/build' + exclude 'local.properties' + exclude '*.iml' + archiveName project.name + " (" + new Date().format("yyyyMMddHHmmss") + ").zip" + destinationDir file(project.projectDir.path + "/zips") +} diff --git a/compiler/.gitignore b/compiler/.gitignore new file mode 100644 index 0000000..9ff7f0e --- /dev/null +++ b/compiler/.gitignore @@ -0,0 +1,17 @@ +# Built files +build/ + +# Gradle files +.gradle/ + +# IntelliJ files +.idea + +# OS-specific files +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db diff --git a/compiler/build.gradle b/compiler/build.gradle new file mode 100644 index 0000000..67db2c0 --- /dev/null +++ b/compiler/build.gradle @@ -0,0 +1,38 @@ +apply plugin: 'java-library' +apply plugin: 'maven' + +group = "com.github.MrHadiSatrio" +version = rootProject.alfredCompilerVersion + +sourceCompatibility = rootProject.sourceCompatibilityVersion +targetCompatibility = rootProject.targetCompatibilityVersion + +repositories { + mavenCentral() +} + +dependencies { + + implementation alfredAnnotations + + implementation autoservice + implementation javapoet + + api rootProject.supportv4 + api rootProject.archComponentsExtensions +} + +task sourcesJar(type: Jar, dependsOn: classes) { + classifier = 'sources' + from sourceSets.main.allSource +} + +task javadocJar(type: Jar, dependsOn: javadoc) { + classifier = 'javadoc' + from javadoc.destinationDir +} + +artifacts { + archives sourcesJar + archives javadocJar +} diff --git a/compiler/src/main/java/com/hadisatrio/libs/android/viewmodelprovider/GeneratedProviderProcessor.java b/compiler/src/main/java/com/hadisatrio/libs/android/viewmodelprovider/GeneratedProviderProcessor.java new file mode 100644 index 0000000..ebc6459 --- /dev/null +++ b/compiler/src/main/java/com/hadisatrio/libs/android/viewmodelprovider/GeneratedProviderProcessor.java @@ -0,0 +1,348 @@ +/* + * Copyright (C) 2017 Hadi Satrio + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.hadisatrio.libs.android.viewmodelprovider; + +import com.google.auto.service.AutoService; +import com.squareup.javapoet.ClassName; +import com.squareup.javapoet.FieldSpec; +import com.squareup.javapoet.JavaFile; +import com.squareup.javapoet.MethodSpec; +import com.squareup.javapoet.ParameterizedTypeName; +import com.squareup.javapoet.TypeName; +import com.squareup.javapoet.TypeSpec; +import com.squareup.javapoet.TypeVariableName; + +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + +import javax.annotation.processing.AbstractProcessor; +import javax.annotation.processing.Filer; +import javax.annotation.processing.Messager; +import javax.annotation.processing.ProcessingEnvironment; +import javax.annotation.processing.Processor; +import javax.annotation.processing.RoundEnvironment; +import javax.lang.model.SourceVersion; +import javax.lang.model.element.Element; +import javax.lang.model.element.ElementKind; +import javax.lang.model.element.ExecutableElement; +import javax.lang.model.element.Modifier; +import javax.lang.model.element.PackageElement; +import javax.lang.model.element.TypeElement; +import javax.lang.model.element.VariableElement; +import javax.lang.model.type.TypeKind; +import javax.lang.model.type.TypeMirror; +import javax.lang.model.util.Elements; +import javax.lang.model.util.Types; +import javax.tools.Diagnostic; + +@AutoService(Processor.class) +public final class GeneratedProviderProcessor extends AbstractProcessor { + + private static final String VIEW_MODEL_CLASS_NAME = "android.arch.lifecycle.ViewModel"; + private static final String VIEW_MODEL_FACTORY_CLASS_NAME = "android.arch.lifecycle.ViewModelProvider.Factory"; + private static final String VIEW_MODEL_PROVIDERS_CLASS_NAME = "android.arch.lifecycle.ViewModelProviders"; + private static final String FRAGMENT_ACTIVITY_CLASS_NAME = "android.support.v4.app.FragmentActivity"; + private static final String FRAGMENT_CLASS_NAME = "android.support.v4.app.Fragment"; + + private static final String PROVIDER_CLASS_SUFFIX = "Provider"; + private static final String FACTORY_CLASS_SUFFIX = "Factory"; + private static final String PARAMS_PREFIX = "p"; + private static final String VARIABLE_PREFIX = "var"; + + private Elements elementUtils; + private Types typeUtils; + private Filer filer; + private Messager messager; + + @Override + public synchronized void init(ProcessingEnvironment processingEnv) { + super.init(processingEnv); + elementUtils = processingEnv.getElementUtils(); + typeUtils = processingEnv.getTypeUtils(); + filer = processingEnv.getFiler(); + messager = processingEnv.getMessager(); + } + + @Override + public Set getSupportedAnnotationTypes() { + final Set annotations = new LinkedHashSet<>(); + annotations.add(GeneratedProvider.class.getCanonicalName()); + return annotations; + } + + @Override + public SourceVersion getSupportedSourceVersion() { + return SourceVersion.latestSupported(); + } + + @Override + public boolean process(Set annotations, RoundEnvironment roundEnv) { + + for (Element annotatedElement : roundEnv.getElementsAnnotatedWith(GeneratedProvider.class)) { + if (annotatedElement.getKind() != ElementKind.CLASS) { + error( + annotatedElement, + "Only classes can be annotated with @%s.", + GeneratedProvider.class.getSimpleName() + ); + return true; // Error message printed, exit processing. + } + + // We can cast it, because we know that it of ElementKind.CLASS. + final TypeElement typeElement = (TypeElement) annotatedElement; + + // Check whether or not this class meets our pre-requisites. + try { + if (!isValidClass(typeElement)) { + return true; // Error message printed, exit processing. + } + } catch (ClassNotFoundException e) { + error( + "Couldn't find the required classes. " + + "Have you declare Android Architecture Components libraries as " + + "your project's dependency?" + ); + return true; // Error message printed, exit processing. + } + + try { + generateFactory(typeElement); + } catch (IOException | ClassNotFoundException | NoPackageNameException e) { + error("Error while generating factory for class %s. Cause: %s.", typeElement, e); + return true; // Error message printed, exit processing. + } + + try { + generateProvider(typeElement); + } catch (IOException | ClassNotFoundException | NoPackageNameException e) { + error("Error while generating provider for class %s. Cause: %s.", typeElement, e); + return true; // Error message printed, exit processing. + } + } + + // We have finished processing. + return true; + } + + private void error(Element e, String message, Object... args) { + messager.printMessage( + Diagnostic.Kind.ERROR, + String.format(message, args), + e + ); + } + + private void error(String message, Object... args) { + messager.printMessage( + Diagnostic.Kind.ERROR, + String.format(message, args) + ); + } + + private boolean isValidClass(TypeElement classElement) throws ClassNotFoundException { + + /* Req #1: Annotated class has to be public. */ + if (!classElement.getModifiers().contains(Modifier.PUBLIC)) { + error(classElement, "The class %s is not public.", + classElement.getQualifiedName().toString()); + return false; + } + + /* Req #2: Annotated class has to be concrete (not abstract). */ + if (classElement.getModifiers().contains(Modifier.ABSTRACT)) { + error(classElement, "The class %s is abstract. You can't annotate abstract classes with @%.", + classElement.getQualifiedName().toString(), GeneratedProvider.class.getSimpleName()); + return false; + } + + /* Req #3: Annotated class has to be a subclass of ViewModel. */ + TypeElement currentClass = classElement; + while (true) { + final TypeMirror superClassType = currentClass.getSuperclass(); + + if (superClassType.getKind() == TypeKind.NONE) { + // Basis class (java.lang.Object) reached, so exit. + error(classElement, "The class %s annotated with @%s must inherit from %s.", + classElement.getQualifiedName().toString(), GeneratedProvider.class.getSimpleName(), + Class.forName(VIEW_MODEL_CLASS_NAME)); + return false; + } + + if (superClassType.toString().equals(VIEW_MODEL_CLASS_NAME)) { + // Required super class found. Break the loop so we can return. + break; + } + + // Moving up in inheritance tree. + currentClass = (TypeElement) typeUtils.asElement(superClassType); + } + + return true; + } + + private void generateFactory(TypeElement typeElement) + throws IOException, ClassNotFoundException, NoPackageNameException { + + final String packageName = getPackageName(typeElement); + final String genClassName = typeElement.getSimpleName() + FACTORY_CLASS_SUFFIX; + final List ctorParams = getConstructorParamTypes(typeElement); + + // Define the fields based on previously queried constructor params. + final List fieldSpecs = new ArrayList<>(); + final StringBuilder fieldTypesCsv = new StringBuilder(); + final StringBuilder fieldNamesCsv = new StringBuilder(); + for (int i = 0; i < ctorParams.size(); i++) { + fieldSpecs.add( + FieldSpec.builder( + TypeName.get(ctorParams.get(i)), + VARIABLE_PREFIX + i, + Modifier.PRIVATE, + Modifier.FINAL + ).build() + ); + + if (fieldTypesCsv.length() > 0) fieldTypesCsv.append(','); + fieldTypesCsv.append(TypeName.get(ctorParams.get(i))).append(".class"); + + if (fieldNamesCsv.length() > 0) fieldNamesCsv.append(','); + fieldNamesCsv.append(VARIABLE_PREFIX).append(i); + } + + // Define the constructor of the generated class. + final MethodSpec.Builder ctorSpecBuilder = MethodSpec.constructorBuilder(); + for (int i = 0; i < ctorParams.size(); i++) { + ctorSpecBuilder.addParameter( + TypeName.get(ctorParams.get(i)), + PARAMS_PREFIX + i + ); + + // Create statement to assign parameter value to its appropriate field. + ctorSpecBuilder.addStatement( + "this.$L = $L", + VARIABLE_PREFIX + i, + PARAMS_PREFIX + i + ); + } + final MethodSpec ctorSpec = ctorSpecBuilder.build(); + + // Define the `create()` method that will be called by ViewModelProviders + // to actually instantiate the ViewModel. + final TypeVariableName typeVariableName = TypeVariableName.get("T", Class.forName(VIEW_MODEL_CLASS_NAME)); + final MethodSpec createSpec = MethodSpec.methodBuilder("create") + .addAnnotation(Override.class) + .addModifiers(Modifier.PUBLIC) + .addTypeVariable(typeVariableName) + .returns(typeVariableName) + .addParameter(ParameterizedTypeName.get(ClassName.get(Class.class), typeVariableName), "modelClass") + .beginControlFlow("if ($T.class.isAssignableFrom($L))", typeElement, "modelClass") + .beginControlFlow("try") + .addStatement("return $L.getConstructor($L).newInstance($L)", "modelClass", fieldTypesCsv, fieldNamesCsv) + .nextControlFlow("catch ($T | $T | $T | $T e)", NoSuchMethodException.class, IllegalAccessException.class, InstantiationException.class, InvocationTargetException.class) + .addStatement("throw new $T(\"Couldn't create an instance of $T\", e)", RuntimeException.class, typeElement) + .endControlFlow() + .nextControlFlow("else") + .addStatement("throw new $T(\"Couldn't create an instance of $T\")", RuntimeException.class, typeElement) + .endControlFlow() + .build(); + + // Define the class using the previously defined specs. + final TypeSpec factory = TypeSpec.classBuilder(genClassName) + .addSuperinterface(ClassName.bestGuess(VIEW_MODEL_FACTORY_CLASS_NAME)) + .addModifiers(Modifier.FINAL) + .addFields(fieldSpecs) + .addMethod(ctorSpec) + .addMethod(createSpec) + .build(); + + // Write the class. + JavaFile.builder(packageName, factory) + .build().writeTo(filer); + } + + private String getPackageName(TypeElement typeElement) throws NoPackageNameException { + final PackageElement pkg = elementUtils.getPackageOf(typeElement); + if (pkg.isUnnamed()) { + throw new NoPackageNameException(typeElement); + } + return pkg.getQualifiedName().toString(); + } + + private List getConstructorParamTypes(TypeElement typeElement) { + final List subjectCtorParams = new ArrayList<>(); + for (Element element : typeElement.getEnclosedElements()) { + if (element.getKind() == ElementKind.CONSTRUCTOR) { + final ExecutableElement ctor = ((ExecutableElement) element); + for (VariableElement ctorParameter : ctor.getParameters()) { + subjectCtorParams.add(ctorParameter.asType()); + } + } + } + return subjectCtorParams; + } + + private void generateProvider(TypeElement typeElement) + throws IOException, ClassNotFoundException, NoPackageNameException { + + final String packageName = getPackageName(typeElement); + final String genClassName = typeElement.getSimpleName() + PROVIDER_CLASS_SUFFIX; + final List subjectCtorParams = getConstructorParamTypes(typeElement); + final Class viewModelProviderClass = Class.forName(VIEW_MODEL_PROVIDERS_CLASS_NAME); + + final StringBuilder ctorParamNamesCsv = new StringBuilder(); + for (int i = 0; i < subjectCtorParams.size(); i++) { + if (ctorParamNamesCsv.length() > 0) ctorParamNamesCsv.append(','); + ctorParamNamesCsv.append(PARAMS_PREFIX).append(i + 1); + } + + // Generate `get()` method to be called from activities. + final MethodSpec.Builder activityGetBuilder = MethodSpec.methodBuilder("get") + .returns(TypeName.get(typeElement.asType())) + .addModifiers(Modifier.PUBLIC, Modifier.STATIC) + .addParameter(ClassName.bestGuess(FRAGMENT_ACTIVITY_CLASS_NAME), "activity"); + for (int i = 0; i < subjectCtorParams.size(); i++) { + activityGetBuilder.addParameter(TypeName.get(subjectCtorParams.get(i)), (PARAMS_PREFIX + (i + 1))); + } + activityGetBuilder.addStatement("return $T.of(activity, new $TFactory($L)).get($T.class)", viewModelProviderClass, typeElement, ctorParamNamesCsv, typeElement); + final MethodSpec activityGet = activityGetBuilder.build(); + + // Generate `get()` method to be called from fragments. + final MethodSpec.Builder fragmentGetBuilder = MethodSpec.methodBuilder("get") + .returns(TypeName.get(typeElement.asType())) + .addModifiers(Modifier.PUBLIC, Modifier.STATIC) + .addParameter(ClassName.bestGuess(FRAGMENT_CLASS_NAME), "fragment"); + for (int i = 0; i < subjectCtorParams.size(); i++) { + fragmentGetBuilder.addParameter(TypeName.get(subjectCtorParams.get(i)), (PARAMS_PREFIX + (i + 1))); + } + fragmentGetBuilder.addStatement("return $T.of(fragment, new $TFactory($L)).get($T.class)", viewModelProviderClass, typeElement, ctorParamNamesCsv, typeElement); + final MethodSpec fragmentGet = fragmentGetBuilder.build(); + + // Define the class using the previously defined specs. + final TypeSpec provider = TypeSpec.classBuilder(genClassName) + .addModifiers(Modifier.PUBLIC, Modifier.FINAL) + .addMethod(activityGet) + .addMethod(fragmentGet) + .build(); + + // Write the class. + JavaFile.builder(packageName, provider) + .build().writeTo(filer); + } +} diff --git a/compiler/src/main/java/com/hadisatrio/libs/android/viewmodelprovider/NoPackageNameException.java b/compiler/src/main/java/com/hadisatrio/libs/android/viewmodelprovider/NoPackageNameException.java new file mode 100644 index 0000000..3de61c5 --- /dev/null +++ b/compiler/src/main/java/com/hadisatrio/libs/android/viewmodelprovider/NoPackageNameException.java @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2017 Hadi Satrio + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.hadisatrio.libs.android.viewmodelprovider; + +import javax.lang.model.element.TypeElement; + +class NoPackageNameException extends Exception { + + NoPackageNameException(TypeElement typeElement) { + super("The package of " + typeElement.getSimpleName() + " has no name."); + } +} diff --git a/demo/.gitignore b/demo/.gitignore new file mode 100644 index 0000000..d6627b6 --- /dev/null +++ b/demo/.gitignore @@ -0,0 +1,52 @@ +# Built application files +*.apk +*.ap_ + +# Files for the ART/Dalvik VM +*.dex + +# Java class files +*.class + +# Generated files +bin/ +gen/ +out/ + +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Proguard folder generated by Eclipse +proguard/ + +# Log Files +*.log + +# Android Studio Navigation editor temp files +.navigation/ + +# Android Studio captures folder +captures/ + +# Intellij +*.iml +.idea + +# Keystore files +*.jks + +# External native build folder generated in Android Studio 2.2 and later +.externalNativeBuild + +# OS-specific files +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db diff --git a/demo/build.gradle b/demo/build.gradle new file mode 100644 index 0000000..f7b43dd --- /dev/null +++ b/demo/build.gradle @@ -0,0 +1,46 @@ +apply plugin: 'com.android.application' + +android { + + compileSdkVersion rootProject.compileSdkVersion + buildToolsVersion rootProject.buildToolsVersion + + defaultConfig { + + applicationId "com.hadisatrio.apps.android.alfreddemo" + + minSdkVersion rootProject.minSdkVersion + targetSdkVersion targetSdkVersion + versionCode rootProject.demoVersionCode + versionName rootProject.demoVersionName + + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } + + buildTypes { + debug { + minifyEnabled false + } + release { + minifyEnabled false + } + } +} + +dependencies { + + implementation rootProject.supportv4 + implementation rootProject.appcompatv7 + implementation rootProject.constraintLayout + + implementation rootProject.archComponents + implementation rootProject.archComponentsExtensions + annotationProcessor rootProject.archComponentsCompiler + + implementation rootProject.alfredAnnotations + annotationProcessor rootProject.alfredCompiler + + testImplementation rootProject.junit + androidTestImplementation rootProject.runner + androidTestImplementation rootProject.espressoCore +} diff --git a/demo/src/main/AndroidManifest.xml b/demo/src/main/AndroidManifest.xml new file mode 100644 index 0000000..ef44333 --- /dev/null +++ b/demo/src/main/AndroidManifest.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + diff --git a/demo/src/main/java/com/hadisatrio/apps/android/alfreddemo/CustomViewModelFactory.java b/demo/src/main/java/com/hadisatrio/apps/android/alfreddemo/CustomViewModelFactory.java new file mode 100644 index 0000000..c8b54cd --- /dev/null +++ b/demo/src/main/java/com/hadisatrio/apps/android/alfreddemo/CustomViewModelFactory.java @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2017 Hadi Satrio + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.hadisatrio.apps.android.alfreddemo; + +import android.arch.lifecycle.ViewModel; +import android.arch.lifecycle.ViewModelProvider; +import android.content.Context; + +import java.lang.reflect.InvocationTargetException; + +public final class CustomViewModelFactory implements ViewModelProvider.Factory { + + private final Context context; + private final Long fucksGiven; + + CustomViewModelFactory(Context context, Long fucksGiven) { + this.context = context; + this.fucksGiven = fucksGiven; + } + + @Override + public T create(Class modelClass) { + if (DopeViewModel.class.isAssignableFrom(modelClass)) { + try { + return modelClass.getConstructor(android.content.Context.class, java.lang.Long.class) + .newInstance(context, fucksGiven); + } catch (NoSuchMethodException e) { + throw new RuntimeException("Cannot create an instance of " + modelClass, e); + } catch (IllegalAccessException e) { + throw new RuntimeException("Cannot create an instance of " + modelClass, e); + } catch (InstantiationException e) { + throw new RuntimeException("Cannot create an instance of " + modelClass, e); + } catch (InvocationTargetException e) { + throw new RuntimeException("Cannot create an instance of " + modelClass, e); + } + } else { + throw new RuntimeException("Couldn't create an instance of " + modelClass); + } + } +} diff --git a/demo/src/main/java/com/hadisatrio/apps/android/alfreddemo/DopeViewModel.java b/demo/src/main/java/com/hadisatrio/apps/android/alfreddemo/DopeViewModel.java new file mode 100644 index 0000000..46cb1a1 --- /dev/null +++ b/demo/src/main/java/com/hadisatrio/apps/android/alfreddemo/DopeViewModel.java @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2017 Hadi Satrio + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.hadisatrio.apps.android.alfreddemo; + +import android.arch.lifecycle.ViewModel; +import android.content.Context; + +import com.hadisatrio.libs.android.viewmodelprovider.GeneratedProvider; + +@GeneratedProvider +public final class DopeViewModel extends ViewModel { + + private final Context context; + private final Long fucksGiven; + + public DopeViewModel(Context context, Long fucksGiven) { + this.context = context; + this.fucksGiven = fucksGiven; + } +} diff --git a/demo/src/main/java/com/hadisatrio/apps/android/alfreddemo/EvenLamerViewModel.java b/demo/src/main/java/com/hadisatrio/apps/android/alfreddemo/EvenLamerViewModel.java new file mode 100644 index 0000000..e19e032 --- /dev/null +++ b/demo/src/main/java/com/hadisatrio/apps/android/alfreddemo/EvenLamerViewModel.java @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2017 Hadi Satrio + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.hadisatrio.apps.android.alfreddemo; + +import android.arch.lifecycle.ViewModel; +import android.content.Context; + +public final class EvenLamerViewModel extends ViewModel { + + private Context context; + private Long fucksGiven; + + public EvenLamerViewModel() { + } + + public void setContext(Context context) { + this.context = context; + } + + public void setFucksGiven(Long fucksGiven) { + this.fucksGiven = fucksGiven; + } +} diff --git a/demo/src/main/java/com/hadisatrio/apps/android/alfreddemo/LameViewModel.java b/demo/src/main/java/com/hadisatrio/apps/android/alfreddemo/LameViewModel.java new file mode 100644 index 0000000..3cefc2d --- /dev/null +++ b/demo/src/main/java/com/hadisatrio/apps/android/alfreddemo/LameViewModel.java @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2017 Hadi Satrio + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.hadisatrio.apps.android.alfreddemo; + +import android.arch.lifecycle.ViewModel; +import android.content.Context; + +public final class LameViewModel extends ViewModel { + + private final Context context; + private final Long fucksGiven; + + public LameViewModel(Context context, Long fucksGiven) { + this.context = context; + this.fucksGiven = fucksGiven; + } +} diff --git a/demo/src/main/java/com/hadisatrio/apps/android/alfreddemo/SeeAlfredInAction.java b/demo/src/main/java/com/hadisatrio/apps/android/alfreddemo/SeeAlfredInAction.java new file mode 100644 index 0000000..58c51db --- /dev/null +++ b/demo/src/main/java/com/hadisatrio/apps/android/alfreddemo/SeeAlfredInAction.java @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2017 Hadi Satrio + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.hadisatrio.apps.android.alfreddemo; + +import android.arch.lifecycle.ViewModelProviders; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; + +public final class SeeAlfredInAction extends AppCompatActivity { + + private DopeViewModel dopeViewModel; + private LameViewModel lameViewModel; + private EvenLamerViewModel evenLamerViewModel; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.activity_see_alfred_in_action); + + // This is dope... + dopeViewModel = DopeViewModelProvider.get(this, this, 0L); + + // ...this is lame.. + lameViewModel = ViewModelProviders.of(this, new CustomViewModelFactory(this, 0L)).get(LameViewModel.class); + + // ..and don't even get me started with this. + evenLamerViewModel = ViewModelProviders.of(this).get(EvenLamerViewModel.class); + evenLamerViewModel.setContext(this); + evenLamerViewModel.setFucksGiven(1000L); + } +} diff --git a/demo/src/main/res/drawable/ic_launcher_background.xml b/demo/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..de7cd4f --- /dev/null +++ b/demo/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/demo/src/main/res/layout/activity_see_alfred_in_action.xml b/demo/src/main/res/layout/activity_see_alfred_in_action.xml new file mode 100644 index 0000000..ac5b263 --- /dev/null +++ b/demo/src/main/res/layout/activity_see_alfred_in_action.xml @@ -0,0 +1,32 @@ + + + + + + diff --git a/demo/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/demo/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..10a73ce --- /dev/null +++ b/demo/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,20 @@ + + + + + + diff --git a/demo/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/demo/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..10a73ce --- /dev/null +++ b/demo/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,20 @@ + + + + + + diff --git a/demo/src/main/res/mipmap-hdpi/ic_launcher.png b/demo/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..550730310e5f66436525e196a5884166c4a3fb48 GIT binary patch literal 3358 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 literal 0 HcmV?d00001 diff --git a/demo/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/demo/src/main/res/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..4e526c95b4d61d7c6a8adbe49ea7e67c8970cdd6 GIT binary patch literal 5117 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 Xu!Sc9jjsLU=kb`ESQ%Gdb9wqdLNX-? literal 0 HcmV?d00001 diff --git a/demo/src/main/res/mipmap-hdpi/ic_launcher_round.png b/demo/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..8fab6a3a5b8342cacf009fd1a5481eb3c7faa5ac GIT binary patch literal 5084 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 Ef@vV1$N&HU literal 0 HcmV?d00001 diff --git a/demo/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/demo/src/main/res/mipmap-mdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..2c38c719088d8d97ecb7092fc07fd26c2ff96bf9 GIT binary patch literal 2652 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 literal 0 HcmV?d00001 diff --git a/demo/src/main/res/mipmap-mdpi/ic_launcher_round.png b/demo/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..1eecc0e7d5b0129aff2236d3c4ed2592543a8fe0 GIT binary patch literal 3179 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 R`1$|<002ovPDHLkV1k6j8%Y2F literal 0 HcmV?d00001 diff --git a/demo/src/main/res/mipmap-xhdpi/ic_launcher.png b/demo/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..ec87dcebee2b6e52f988e50e087a7dbcfc4321a4 GIT binary patch literal 4648 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 literal 0 HcmV?d00001 diff --git a/demo/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/demo/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..072467eaaafb06293a727a85b97ad57f6667b318 GIT binary patch literal 7011 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

HWg8C^o)QF79Mg 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 Hu0mjf20Ao4 literal 0 HcmV?d00001 diff --git a/demo/src/main/res/mipmap-xxhdpi/ic_launcher.png b/demo/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..6f67f21bac1024e18e1584913e5bcd5e1395456a GIT binary patch literal 7008 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 LNkvXXu0mjfne+ST literal 0 HcmV?d00001 diff --git a/demo/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/demo/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..0327e13fa7927a4a05b16efa6db900c7b5591043 GIT binary patch literal 9442 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

Be^f zfRdLN6alsV)L|yGBJVmqC~k(FK*38<#T=R1Oynm+YqR(y^(|TCcEq~4fXG-qgMlKv$7!Xnz#e*&>wVzIO}hMS`O#lzNacDdh8uzBwQq)L48r0 z#r;|IK^ORlw)-mtt{e_h%++1fllfQYYX*-e2XS{_+TZum4WohfScXGv|qXPQ> zq_!gwR7q&9rSx!Gdb`QaW8t63d=jA-WFDewzvyJ!rQ>noWb^7vJ?X|RFaF@wE-pPh z3Ou!SY2GjRnE>_t#>7UwX?O0p7djz0q0mrC&~TU|Lf6K7!=RdNC&wh;MV0hdm~koB zJED?U+USq#(oJ(?s)W+D@sAzX6RE!qLr%+<5CJtn6u6er*^q$(oZWw3513^MC0VOC z%%|W7g}SuX9@}m<`iAZVEeRIKf9C(n<}4Nv-z@&ZBdOq3F42A&TEgMM!(0>Kb;2e* zcysxmT07|LuWpK<7JQR*4m@}gK+18(f{5W2B2eaK0Rz1E4BN24s4v-X@wBXp#a=Ir z=Ac0PdH%2!NhHkVRGNaqK8EkRDZv1GZVcURk2kSl3v*+o?Hx+ z;<$SmGdxv}-!BOpFc+o-?HTuj_LXP_b%qWxAKZK>tooDSI9;cgzB~njj@ulA}%Zb6a`i+tI?#xY!bH5Z1O9OpZ-cJmB z7_2Swq%g%e1Xa!Ytf|_iG9;#Jl`O5m<1qtkY|-dzrKd|x?Ddu@Vq%*J$9Zpkr#XfOim3a4mhe5>ie0?Ytz}E;@63Y;T_@H zDAvflL}A3~vIE8JLDNcc;r{-gEvi5g6eKbG2=v*={*?J=d$C~8$@=an^#ZE=y+B$Y zQO)K}<^3kYN{{*dSsEz+bcs{xK&JPosTF-n4@w|y!_FUj{r%cwrlu(M`=9-LB|13V zsir{BW_Hmj9IHfaHO7`4}hH-YSznD7c z>o(A^y|6V9G+80$%oOZa_ItmYGeT4oNIk3e?h=;4rMUf*C`qht_UEMPTcoV0`t2SR zm+w?SZz?2OVg6l(aBCUJJz%wKjBZ8$kk|QvCj;Y;3-kiB*Y^p-X|?@1(b%Sr$JHc5r&lJ0oH2d2 z-ba?=9porCR}Jdq1EhHibg}#&5Lc*q+T(YY8pLu_U-#h6z;lY<_+s`H>jyTrIqYYj`uOWA$}3+orj|4 zBcXp>v9Nv~uRTLB9Z1)@`S|W6V*Z^O#2>SQZg_7Td2n;=X;5w*T~nsQ;iR6f_|Ciy zc8h{@J|_i(RFc4>KgX^EV{oW->xr8IM_72{K99g+euwI;paV*q*D)QGU*cU}I7wN`T$ zb4Vz<03@wpx10LXJ8hf^rfNt|edkubmS?$uMNM`jv2G?}TFK`3 zO>2k+Jz9)mB4|^vFhP0oEfa-?XPj~`v36XVO z4LDV8uf_p*(ZC>-grBz7>PCjdSPd>#Ym)!uVByw+K|_axOMX@WwUHru6cm?{6aM~s ziRm)yVPa`PFG@k*tmhpcI>SV?4~|0S+M&Y@*eWmSIgw*Q*E=Q`{Wr}VndkBSA198* zbvc{%YaJ%Xsn%nIPh${Ks{vJpzO$CS569+P*^6HcelE+{8b=?us8WYCEZ@9s%{dW& zRE(-Py6RiAr?DmbVRwp$aD)diH|~$ z<&QobV|JQ|j#zY* zlS;eH>}lHxaQngGmI^;9nVSV91IGz_UCvtGh?U2fg+!d0yPa97U4-6zRIj_~d0Vz~ zI&Y;rb!9sDNkQx`yV9OiAA1~>_xl3VYGU})H!B=k@S-e#VcoAhPz^FByU|;i=)0uG zLb&yZUs>n^N2_z=KMGg9O0ON{kC(%qGQ=Mb87Z*2z`mpxXVyf#c6c%|1o6xy;0T$Kzg?Ee6y5{Tyj literal 0 HcmV?d00001 diff --git a/demo/src/main/res/values/colors.xml b/demo/src/main/res/values/colors.xml new file mode 100644 index 0000000..0c25182 --- /dev/null +++ b/demo/src/main/res/values/colors.xml @@ -0,0 +1,21 @@ + + + + #3F51B5 + #303F9F + #FF4081 + diff --git a/demo/src/main/res/values/strings.xml b/demo/src/main/res/values/strings.xml new file mode 100644 index 0000000..602d77b --- /dev/null +++ b/demo/src/main/res/values/strings.xml @@ -0,0 +1,19 @@ + + + + Alfred + diff --git a/demo/src/main/res/values/styles.xml b/demo/src/main/res/values/styles.xml new file mode 100644 index 0000000..a210f89 --- /dev/null +++ b/demo/src/main/res/values/styles.xml @@ -0,0 +1,24 @@ + + + + + + diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..6ed0f8f --- /dev/null +++ b/gradle.properties @@ -0,0 +1 @@ +org.gradle.jvmargs=-Xmx1536m diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle new file mode 100644 index 0000000..5d2e88e --- /dev/null +++ b/gradle/dependencies.gradle @@ -0,0 +1,25 @@ +ext { + + // Alfred + alfredAnnotations = project(":annotations") + alfredCompiler = project(":compiler") + + // Gradle Plugins + androidToolsPlugin = "com.android.tools.build:gradle:$androidGradleVersion" + + // 1st Party Android Libraries + supportv4 = "com.android.support:support-v4:$supportLibraryVersion" + appcompatv7 = "com.android.support:appcompat-v7:$supportLibraryVersion" + constraintLayout = "com.android.support.constraint:constraint-layout:1.0.2" + archComponents = "android.arch.lifecycle:runtime:$archComponentsVersion" + archComponentsExtensions = "android.arch.lifecycle:extensions:$archComponentsVersion" + archComponentsCompiler = "android.arch.lifecycle:compiler:$archComponentsVersion" + testingSupportLib = "com.android.support.test:testing-support-lib:0.1" + runner = "com.android.support.test:runner:1.0.0" + + // 3rd Party Libraries + autoservice = "com.google.auto.service:auto-service:$autoserviceVersion" + javapoet = "com.squareup:javapoet:$javapoetVersion" + espressoCore = "com.android.support.test.espresso:espresso-core:$espressoVersion" + junit = "junit:junit:4.12" +} diff --git a/gradle/versions.gradle b/gradle/versions.gradle new file mode 100644 index 0000000..a16f722 --- /dev/null +++ b/gradle/versions.gradle @@ -0,0 +1,35 @@ +ext { + + // Alfred Versions + alfredAnnotationsVersion = "1.0.0-RC.1" + alfredCompilerVersion = "1.0.0-RC.1" + + // Demo App-Related Versions + demoVersionCode = 1 + demoVersionName = "1.0.0-RC.1" + minSdkVersion = 14 + targetSdkVersion = 26 + compileSdkVersion = 26 + + // Build-Related Versions + buildToolsVersion = "26.0.1" + sourceCompatibilityVersion = "1.7" // JavaVersion.VERSION_1_7 + targetCompatibilityVersion = "1.7" // JavaVersion.VERSION_1_7 + + // Plugins / Build-Level Versions + androidGradleVersion = "3.0.0-beta2" + + // 1st Party Android Library Versions + supportLibraryVersion = "26.0.1" + constraintLayoutVersion = "1.0.2" + archComponentsVersion = "1.0.0-alpha9" + + // 3rd Party Library Versions + autoserviceVersion = "1.0-rc3" + javapoetVersion = "1.9.0" + + // Test-Related Library Versions + junitVersion = "4.12" + mockitoVersion = "2.8.47" + espressoVersion = "3.0.0" +} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..13372aef5e24af05341d49695ee84e5f9b594659 GIT binary patch literal 53636 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ⅅ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 H-+%o-(+5aQ literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..957b5db --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,20 @@ +# +# Copyright (C) 2017 Hadi Satrio +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-rc-1-all.zip diff --git a/gradlew b/gradlew new file mode 100755 index 0000000..9d82f78 --- /dev/null +++ b/gradlew @@ -0,0 +1,160 @@ +#!/usr/bin/env bash + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; +esac + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..8a0b282 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..4754320 --- /dev/null +++ b/settings.gradle @@ -0,0 +1 @@ +include ':demo', ':annotations', ':compiler'