Skip to content

Commit

Permalink
添加resolve方法,实现批量添加字段
Browse files Browse the repository at this point in the history
  • Loading branch information
TanZhiL committed Jan 16, 2020
1 parent 9dd39b8 commit 4a59262
Showing 1 changed file with 39 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -292,6 +292,13 @@ private TypeSpec processDoubleCache(TypeElement typeElement, int memoryMaxCount,

FieldSpec fieldSpec = FieldSpec.builder(targetClassName, "sInstance", Modifier.PRIVATE, Modifier.VOLATILE, Modifier.STATIC)
.build();

MethodSpec.Builder resolve = MethodSpec.methodBuilder("resolve")
.addModifiers(Modifier.PUBLIC)
.addParameter(ClassName.get(typeElement),"spEntity")
.addStatement(typeElement.getSimpleName() + "MemoryCache.get().resolve(spEntity)")
.addStatement(typeElement.getSimpleName() + "DiskCache.get().resolve(spEntity)")
.returns(TypeName.VOID);
TypeSpec typeSpec = TypeSpec.classBuilder(typeElement.getSimpleName() + "DoubleCache")
.superclass(TypeName.get(typeElement.asType()))
.addModifiers(Modifier.PUBLIC, Modifier.FINAL)
Expand All @@ -300,6 +307,7 @@ private TypeSpec processDoubleCache(TypeElement typeElement, int memoryMaxCount,
.addType(processDiskCache(typeElement.getSimpleName() + "DoubleCache",typeElement,diskMaxCount,diskMaxSize,global))
.addMethod(getMethodSpec2)
.addMethod(constructor)
.addMethod(resolve.build())
.addMethod(clearMethodSpec)
.addMethod(getDiskCountMethodSpec)
.addMethod(getDiskSizeMethodSpec)
Expand All @@ -317,6 +325,11 @@ private TypeSpec processDiskCache(String prefix, TypeElement typeElement, int di
// 获取该类的全部成员,包括
List<? extends Element> members = elementUtils.getAllMembers(typeElement);
List<MethodSpec> methodSpecs = new ArrayList<>();
MethodSpec.Builder resolve = MethodSpec.methodBuilder("resolve")
.addModifiers(Modifier.PUBLIC)
.addParameter(ClassName.get(typeElement),"spEntity")
.returns(TypeName.VOID);
List<String> fileds=new ArrayList<>();
for (Element element : members) {
// 忽略除了成员方法外的元素
if (!(element instanceof ExecutableElement)) {
Expand Down Expand Up @@ -400,6 +413,7 @@ private TypeSpec processDiskCache(String prefix, TypeElement typeElement, int di
ParameterizedTypeName typeName = ParameterizedTypeName.get(ClassName.get("io.reactivex", "Observable"), rxfield);
if (name.startsWith("set")) {
//setter
fileds.add(name.substring(3));
String parameterName = executableElement.getParameters().get(0).getSimpleName().toString();
MethodSpec setMethod;
if (isObject) {
Expand Down Expand Up @@ -558,13 +572,16 @@ private TypeSpec processDiskCache(String prefix, TypeElement typeElement, int di
fieldSpec = FieldSpec.builder(targetClassName, "sInstance", Modifier.PRIVATE, Modifier.VOLATILE, Modifier.STATIC)
.build();
}

for (String field:fileds){
resolve.addStatement("this.set"+field+"("+"spEntity.get"+field+"())");
}
TypeSpec.Builder builder = TypeSpec.classBuilder(typeElement.getSimpleName() + "DiskCache");
builder.superclass(TypeName.get(typeElement.asType()));
builder.addModifiers( Modifier.FINAL);
builder.addMethods(methodSpecs);
builder.addMethod(getMethodSpec2);
builder.addMethod(constructor);
builder.addMethod(resolve.build());
builder.addMethod(clearMethodSpec);
builder.addMethod(getCountMethodSpec);
builder.addMethod(getSizeMethodSpec);
Expand All @@ -586,6 +603,11 @@ private TypeSpec processMemoryCache(String prefix, TypeElement typeElement, int
// 获取该类的全部成员,包括
List<? extends Element> members = elementUtils.getAllMembers(typeElement);
List<MethodSpec> methodSpecs = new ArrayList<>();
MethodSpec.Builder resolve = MethodSpec.methodBuilder("resolve")
.addModifiers(Modifier.PUBLIC)
.addParameter(ClassName.get(typeElement),"spEntity")
.returns(TypeName.VOID);
List<String> fileds=new ArrayList<>();
for (Element element : members) {
// 忽略除了成员方法外的元素
if (!(element instanceof ExecutableElement)) {
Expand Down Expand Up @@ -640,6 +662,7 @@ private TypeSpec processMemoryCache(String prefix, TypeElement typeElement, int
if (name.startsWith("set")) {
//setter

fileds.add(name.substring(3));
ParameterizedTypeName typeName = ParameterizedTypeName.get(ClassName.get("io.reactivex", "Observable"), type.box());
String parameterName = executableElement.getParameters().get(0).getSimpleName().toString();

Expand Down Expand Up @@ -740,12 +763,17 @@ private TypeSpec processMemoryCache(String prefix, TypeElement typeElement, int
fieldSpec = FieldSpec.builder(targetClassName, "sInstance", Modifier.PRIVATE, Modifier.VOLATILE, Modifier.STATIC)
.build();
}

for (String field:fileds){
resolve.addStatement("this.set"+field+"("+"spEntity.get"+field+"())");
}
TypeSpec.Builder builder = TypeSpec.classBuilder(typeElement.getSimpleName() + "MemoryCache");
builder.superclass(TypeName.get(typeElement.asType()));
builder.addModifiers(Modifier.FINAL);
builder.addMethods(methodSpecs);
builder.addMethod(getMethodSpec2);
builder.addMethod(constructor);
builder.addMethod(resolve.build());
builder.addMethod(clearMethodSpec);
builder.addMethod(resetMethodSpec);
builder.addMethod(getCountMethodSpec);
Expand Down Expand Up @@ -778,6 +806,11 @@ private void processSP(Set<? extends Element> elements) {
// 获取该类的全部成员,包括
List<? extends Element> members = elementUtils.getAllMembers(typeElement);
List<MethodSpec> methodSpecs = new ArrayList<>();
MethodSpec.Builder resolve = MethodSpec.methodBuilder("resolve")
.addModifiers(Modifier.PUBLIC)
.addParameter(ClassName.get(typeElement),"spEntity")
.returns(TypeName.VOID);
List<String> fileds=new ArrayList<>();
for (Element item : members) {
// 忽略除了成员方法外的元素
if (!(item instanceof ExecutableElement)) {
Expand Down Expand Up @@ -880,7 +913,7 @@ private void processSP(Set<? extends Element> elements) {

if (name.startsWith("set")) {
//setter

fileds.add(name.substring(3));
ParameterizedTypeName rxfield = ParameterizedTypeName.get(ClassName.get("com.thomas.rxpersistence", "RxField"), type.box());
ParameterizedTypeName typeName = ParameterizedTypeName.get(ClassName.get("io.reactivex", "Observable"), rxfield);

Expand Down Expand Up @@ -1101,12 +1134,16 @@ private void processSP(Set<? extends Element> elements) {
.returns(TypeName.VOID)
.addStatement("sInstance = null")
.build();
for (String field:fileds){
resolve.addStatement("this.set"+field+"("+"spEntity.get"+field+"())");
}
TypeSpec typeSpec = TypeSpec.classBuilder(element.getSimpleName() + "SP")
.superclass(TypeName.get(typeElement.asType()))
.addModifiers(Modifier.PUBLIC, Modifier.FINAL)
.addMethods(methodSpecs)
.addMethod(getMethodSpec2)
.addMethod(constructor.build())
.addMethod(resolve.build())
.addMethod(clearMethodSpec)
.addMethod(setMethodRx)
.addMethod(getRealKeyMethodSpec)
Expand Down

0 comments on commit 4a59262

Please sign in to comment.