aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-10-24 14:23:15 +0100
committerMichael Williamson <mike@zwobble.org>2015-10-24 14:23:15 +0100
commit06580f553ec7a715d2a924c9edecdebda52f940a (patch)
tree9b17b9838f319a29bdded87fe684f712b6896d99 /src/main/java/org
parent772c5b3688533b622563e66a087dd3c543cff4e6 (diff)
Java: read annotations on methods
Diffstat (limited to 'src/main/java/org')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/AnnotationNode.java8
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java8
-rw-r--r--src/main/java/org/zwobble/couscous/ast/MethodNode.java1
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java4
4 files changed, 21 insertions, 0 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/AnnotationNode.java b/src/main/java/org/zwobble/couscous/ast/AnnotationNode.java
new file mode 100644
index 0000000..1f34126
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/ast/AnnotationNode.java
@@ -0,0 +1,8 @@
+package org.zwobble.couscous.ast;
+
+import lombok.Value;
+
+@Value(staticConstructor="annotation")
+public class AnnotationNode {
+ TypeName type;
+}
diff --git a/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java b/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java
index 7466f07..1b8aea3 100644
--- a/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java
+++ b/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java
@@ -60,6 +60,7 @@ public class ClassNodeBuilder {
return new MethodBuilder<MethodNode>(builder -> MethodNode.builder()
.isStatic(isStatic)
.name(name)
+ .annotations(builder.annotations.build())
.arguments(builder.arguments.build())
.body(builder.statements.build())
.build());
@@ -75,15 +76,22 @@ public class ClassNodeBuilder {
public class MethodBuilder<T> {
private final Function<MethodBuilder<?>, T> build;
+ private final ImmutableList.Builder<AnnotationNode> annotations;
private final ImmutableList.Builder<FormalArgumentNode> arguments;
private final ImmutableList.Builder<StatementNode> statements;
public MethodBuilder(Function<MethodBuilder<?>, T> build) {
this.build = build;
+ this.annotations = ImmutableList.builder();
this.arguments = ImmutableList.builder();
this.statements = ImmutableList.builder();
}
+ public MethodBuilder<T> annotation(TypeName type) {
+ annotations.add(AnnotationNode.annotation(type));
+ return this;
+ }
+
public ThisReferenceNode thisReference() {
return ThisReferenceNode.thisReference(name);
}
diff --git a/src/main/java/org/zwobble/couscous/ast/MethodNode.java b/src/main/java/org/zwobble/couscous/ast/MethodNode.java
index 0bdad59..644b57b 100644
--- a/src/main/java/org/zwobble/couscous/ast/MethodNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/MethodNode.java
@@ -15,6 +15,7 @@ public class MethodNode implements CallableNode {
return builder().isStatic(true).name(name);
}
+ List<AnnotationNode> annotations;
boolean isStatic;
String name;
@Singular
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
index 62aa75a..9b680be 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
@@ -13,6 +13,7 @@ import org.eclipse.jdt.core.dom.Expression;
import org.eclipse.jdt.core.dom.ExpressionStatement;
import org.eclipse.jdt.core.dom.FieldAccess;
import org.eclipse.jdt.core.dom.FieldDeclaration;
+import org.eclipse.jdt.core.dom.IAnnotationBinding;
import org.eclipse.jdt.core.dom.IBinding;
import org.eclipse.jdt.core.dom.ITypeBinding;
import org.eclipse.jdt.core.dom.IVariableBinding;
@@ -114,6 +115,9 @@ public class JavaReader {
private static <T> MethodBuilder<T> buildMethod(
MethodDeclaration method,
MethodBuilder<T> builder) {
+ for (IAnnotationBinding annotation : method.resolveBinding().getAnnotations()) {
+ builder.annotation(typeOf(annotation.getAnnotationType()));
+ }
for (Object parameterObject : method.parameters()) {
val parameter = (SingleVariableDeclaration)parameterObject;
builder.argument(