Skip to content

Commit 80cf699

Browse files
add processor to process annotation and generate java code
1 parent 74a3c33 commit 80cf699

24 files changed

Lines changed: 750 additions & 365 deletions

File tree

Library/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
/build
2+
/libs/android.jar

Library/build.gradle

Lines changed: 10 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,15 @@
1-
apply plugin: 'com.android.library'
1+
apply plugin: 'java'
22

33
apply plugin: 'com.github.dcendents.android-maven'
44
apply plugin: 'com.jfrog.bintray'
5-
version = "1.0.5"
6-
7-
android {
8-
compileSdkVersion 24
9-
buildToolsVersion "24.0.2"
10-
11-
defaultConfig {
12-
minSdkVersion 9
13-
targetSdkVersion 24
14-
versionCode 6
15-
versionName "1.0.5"
16-
17-
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
18-
19-
}
20-
buildTypes {
21-
release {
22-
minifyEnabled false
23-
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
24-
}
25-
}
26-
}
5+
version = "1.1.0"
276

287
dependencies {
298
compile fileTree(dir: 'libs', include: ['*.jar'])
30-
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
31-
exclude group: 'com.android.support', module: 'support-annotations'
32-
})
33-
testCompile 'junit:junit:4.12'
349
}
3510

11+
sourceCompatibility = "1.6"
12+
targetCompatibility = "1.6"
3613

3714
def siteUrl = 'https://github.com/ThirtyDegreesRay/DataAutoAccess' // 项目的主页
3815
def gitUrl = 'https://github.com/ThirtyDegreesRay/DataAutoAccess.git' // Git仓库的url
@@ -70,13 +47,13 @@ install {
7047
}
7148
}
7249
task sourcesJar(type: Jar) {
73-
from android.sourceSets.main.java.srcDirs
50+
from sourceSets.main.java.srcDirs
7451
classifier = 'sources'
7552
}
76-
task javadoc(type: Javadoc) {
77-
source = android.sourceSets.main.java.srcDirs
78-
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
79-
}
53+
//task javadocb(type: Javadoc) {
54+
// source = sourceSets.main.java.srcDirs
55+
// classpath += project.files(getBootClasspath().join(File.pathSeparator))
56+
//}
8057
task javadocJar(type: Jar, dependsOn: javadoc) {
8158
classifier = 'javadoc'
8259
from javadoc.destinationDir
@@ -100,4 +77,4 @@ bintray {
10077
licenses = ["Apache-2.0"]
10178
publish = true
10279
}
103-
}
80+
}

Library/proguard-rules.pro

Lines changed: 0 additions & 17 deletions
This file was deleted.

Library/src/androidTest/java/com/thirtydegreesray/dataautoaccess/ExampleInstrumentedTest.java

Lines changed: 0 additions & 26 deletions
This file was deleted.

Library/src/main/AndroidManifest.xml

Lines changed: 0 additions & 9 deletions
This file was deleted.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.thirtydegreesray.dataautoaccess;
2+
3+
import java.lang.annotation.ElementType;
4+
import java.lang.annotation.Retention;
5+
import java.lang.annotation.RetentionPolicy;
6+
import java.lang.annotation.Target;
7+
8+
/**
9+
* data auto access<br>
10+
* set this inject, the object will save automatic save when onSaveInstanceState, and get data when onCreate<br>
11+
*
12+
* Created by ThirtyDegreesRay on 2016/9/6 09:35
13+
*/
14+
@Target(ElementType.FIELD)
15+
@Retention(RetentionPolicy.RUNTIME)
16+
public @interface AutoAccess {
17+
/**
18+
* the access key of the filed, must be unique in one class
19+
* @return dataName
20+
*/
21+
String dataName() ;
22+
}
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
package com.thirtydegreesray.dataautoaccess;
2+
3+
import java.util.ArrayList;
4+
5+
/**
6+
* Created by ThirtyDegreesRay on 2016/9/6 16:49
7+
*/
8+
9+
public class AutoAccessClass {
10+
11+
private String classPackage;
12+
private String className;
13+
private String targetClass;
14+
15+
private ArrayList<FieldAutoAccess> fields = new ArrayList<FieldAutoAccess>();
16+
17+
public AutoAccessClass(String classPackage, String className, String targetClass) {
18+
this.classPackage = classPackage;
19+
this.className = className;
20+
this.targetClass = targetClass;
21+
}
22+
23+
public void addField(FieldAutoAccess fieldAutoAccess){
24+
fields.add(fieldAutoAccess);
25+
}
26+
27+
public ArrayList<FieldAutoAccess> getFields() {
28+
return fields;
29+
}
30+
31+
/**
32+
* get fully qualified class name
33+
* @return fully qualified class name
34+
*/
35+
String getFqcn() {
36+
return classPackage + "." + className;
37+
}
38+
39+
/**
40+
* generate java code
41+
* @return java code
42+
*/
43+
String brewJava() {
44+
StringBuilder java = new StringBuilder();
45+
46+
java.append("package ").append(classPackage).append(";").append("\n");
47+
java.append("\n");
48+
java.append("import android.os.Bundle;").append("\n");
49+
java.append("import android.os.Parcelable;").append("\n");
50+
java.append("import java.io.Serializable;").append("\n");
51+
java.append("import java.util.ArrayList;").append("\n");
52+
java.append("\n");
53+
java.append("import com.thirtydegreesray.dataautoaccess.DataAutoAccess;").append("\n");
54+
java.append("import com.thirtydegreesray.dataautoaccess.DataAutoAccess.DataAccessor;").append("\n");
55+
java.append("\n");
56+
57+
java.append("public class ").append(className)
58+
.append("<T extends ").append(targetClass).append(">")
59+
.append(" implements").append(" DataAccessor<T>")
60+
.append("{\n");
61+
generateGetDataCode(java);
62+
generateSaveDataCode(java);
63+
java.append("}\n");
64+
return java.toString();
65+
}
66+
67+
private void generateGetDataCode(StringBuilder java){
68+
java.append("@Override ").append("public void getData(T target, Bundle dataStore){\n");
69+
for(FieldAutoAccess field : fields){
70+
java.append("\t").append("target.").append(field.getFieldName())
71+
.append(" = ")
72+
.append("DataAutoAccess.getCastData(").append("\"").append(field.getDataName()).append("\"")
73+
.append(", ").append("dataStore").append(");\n");
74+
}
75+
java.append("}\n");
76+
}
77+
78+
private void generateSaveDataCode(StringBuilder java){
79+
java.append("@Override ").append("public void saveData(T target, Bundle dataStore){\n");
80+
for(FieldAutoAccess field : fields){
81+
String putPreCode = DataAutoAccessProcessor.PUT_DATA_PRE_CODE_MAP.get(field.getFieldType());
82+
//type ArrayList
83+
if(putPreCode.equals("")){
84+
java.append("\t").append("DataAutoAccess.saveArrayList(")
85+
.append("\"").append(field.getDataName()).append("\"").append(", ")
86+
.append("target.").append(field.getFieldName()).append(", ")
87+
.append("dataStore").append(");\n");
88+
}else{
89+
java.append("\t").append("dataStore.").append(putPreCode)
90+
.append("(").append("\"").append(field.getDataName()).append("\"").append(", ")
91+
.append("target.").append(field.getFieldName()).append(");\n");
92+
}
93+
}
94+
java.append("}\n");
95+
}
96+
97+
}

0 commit comments

Comments
 (0)