aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/ast
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/zwobble/couscous/ast')
-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
3 files changed, 17 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