From 9791dad058d354885ed8291b878e006236be9064 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emil=20Sj=C3=B6lander?= Date: Sun, 28 Jun 2015 16:44:31 -0700 Subject: [PATCH] Add inheritence support --- .../intentbuilder/Processor.java | 32 +++++++++++++------ .../intentbuilder/sample/MySubClass.java | 26 +++++++++++++++ .../intentbuilder/sample/MySuperClass.java | 24 ++++++++++++++ 3 files changed, 73 insertions(+), 9 deletions(-) create mode 100644 sample/src/main/java/se/emilsjolander/intentbuilder/sample/MySubClass.java create mode 100644 sample/src/main/java/se/emilsjolander/intentbuilder/sample/MySuperClass.java diff --git a/compiler/src/main/java/se/emilsjolander/intentbuilder/Processor.java b/compiler/src/main/java/se/emilsjolander/intentbuilder/Processor.java index f072386..ee48784 100644 --- a/compiler/src/main/java/se/emilsjolander/intentbuilder/Processor.java +++ b/compiler/src/main/java/se/emilsjolander/intentbuilder/Processor.java @@ -11,6 +11,7 @@ import com.squareup.javapoet.TypeSpec; import java.util.ArrayList; +import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -22,9 +23,11 @@ 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.Modifier; import javax.lang.model.element.PackageElement; import javax.lang.model.element.TypeElement; +import javax.lang.model.type.TypeMirror; import javax.lang.model.util.Elements; import javax.lang.model.util.Types; import javax.tools.Diagnostic; @@ -96,15 +99,7 @@ private TypeSpec getBuilderSpec(Element annotatedElement) { List optional = new ArrayList<>(); List all = new ArrayList<>(); - for (Element e : annotatedElement.getEnclosedElements()) { - if (e.getAnnotation(Extra.class) != null) { - if (e.getAnnotation(se.emilsjolander.intentbuilder.Optional.class) != null) { - optional.add(e); - } else { - required.add(e); - } - } - } + getAnnotatedFields(annotatedElement, required, optional); all.addAll(required); all.addAll(optional); @@ -164,4 +159,23 @@ private TypeSpec getBuilderSpec(Element annotatedElement) { return builder.build(); } + private void getAnnotatedFields(Element annotatedElement, List required, List optional) { + for (Element e : annotatedElement.getEnclosedElements()) { + if (e.getAnnotation(Extra.class) != null) { + if (e.getAnnotation(se.emilsjolander.intentbuilder.Optional.class) != null) { + optional.add(e); + } else { + required.add(e); + } + } + } + + List superTypes = Processor.instance.typeUtils.directSupertypes(annotatedElement.asType()); + TypeMirror superClassType = superTypes.size() > 0 ? superTypes.get(0) : null; + Element superClass = superClassType == null ? null : Processor.instance.typeUtils.asElement(superClassType); + if (superClass != null && superClass.getKind() == ElementKind.CLASS) { + getAnnotatedFields(superClass, required, optional); + } + } + } \ No newline at end of file diff --git a/sample/src/main/java/se/emilsjolander/intentbuilder/sample/MySubClass.java b/sample/src/main/java/se/emilsjolander/intentbuilder/sample/MySubClass.java new file mode 100644 index 0000000..8276657 --- /dev/null +++ b/sample/src/main/java/se/emilsjolander/intentbuilder/sample/MySubClass.java @@ -0,0 +1,26 @@ +package se.emilsjolander.intentbuilder.sample; + +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.widget.TextView; + +import se.emilsjolander.intentbuilder.Extra; +import se.emilsjolander.intentbuilder.IntentBuilder; +import se.emilsjolander.intentbuilder.Optional; + +@IntentBuilder +public class MySubClass extends MySuperClass { + + @Extra @Optional + String three; + + @Extra @Optional + String four; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + MySubClassIntentBuilder.inject(getIntent(), this); + } + +} diff --git a/sample/src/main/java/se/emilsjolander/intentbuilder/sample/MySuperClass.java b/sample/src/main/java/se/emilsjolander/intentbuilder/sample/MySuperClass.java new file mode 100644 index 0000000..f3c1318 --- /dev/null +++ b/sample/src/main/java/se/emilsjolander/intentbuilder/sample/MySuperClass.java @@ -0,0 +1,24 @@ +package se.emilsjolander.intentbuilder.sample; + +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.widget.TextView; + +import se.emilsjolander.intentbuilder.Extra; +import se.emilsjolander.intentbuilder.IntentBuilder; +import se.emilsjolander.intentbuilder.Optional; + +public class MySuperClass extends AppCompatActivity { + + @Extra + String one; + + @Extra + String two; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + +}