aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/ast/visitors
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-08-29 17:13:03 +0100
committerMichael Williamson <mike@zwobble.org>2016-08-29 17:13:03 +0100
commita82ecb60d6ee7ee46e5800088f1769f86872077b (patch)
tree8b3c5442a1bd047606de63477839755e88dab2f5 /src/main/java/org/zwobble/couscous/ast/visitors
parent1babfdf8daa45ffef3d624db6c717f846d295440 (diff)
Initial support for static methods/fields on interfaces
Diffstat (limited to 'src/main/java/org/zwobble/couscous/ast/visitors')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/visitors/NodeTransformer.java16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/visitors/NodeTransformer.java b/src/main/java/org/zwobble/couscous/ast/visitors/NodeTransformer.java
index b2255d2..bcc920e 100644
--- a/src/main/java/org/zwobble/couscous/ast/visitors/NodeTransformer.java
+++ b/src/main/java/org/zwobble/couscous/ast/visitors/NodeTransformer.java
@@ -45,6 +45,7 @@ public class NodeTransformer {
private Function<Type, Type> transformType = type -> type;
private Function<MethodSignature, String> transformMethodName = MethodSignature::getName;
private Function<String, String> transformFieldName = name -> name;
+ private Function<Receiver, Receiver> transformReceiver = receiver -> receiver;
public Builder transformExpression(
Function<ExpressionNode, Optional<ExpressionNode>> transformExpression)
@@ -77,13 +78,19 @@ public class NodeTransformer {
return this;
}
+ public Builder transformReceiver(Function<Receiver, Receiver> receiver) {
+ this.transformReceiver = receiver;
+ return this;
+ }
+
public NodeTransformer build() {
return new NodeTransformer(
transformExpression,
transformStatement,
transformType,
transformMethodName,
- transformFieldName
+ transformFieldName,
+ transformReceiver
);
}
}
@@ -93,19 +100,22 @@ public class NodeTransformer {
private final Function<Type, Type> transformType;
private final Function<MethodSignature, String> transformMethodName;
private final Function<String, String> transformFieldName;
+ private final Function<Receiver, Receiver> transformReceiver;
private NodeTransformer(
Function<ExpressionNode, Optional<ExpressionNode>> transformExpression,
Function<StatementNode, Optional<List<StatementNode>>> transformStatement,
Function<Type, Type> transformType,
Function<MethodSignature, String> transformMethodName,
- Function<String, String> transformFieldName)
+ Function<String, String> transformFieldName,
+ Function<Receiver, Receiver> transformReceiver)
{
this.transformExpression = transformExpression;
this.transformStatement = transformStatement;
this.transformType = transformType;
this.transformMethodName = transformMethodName;
this.transformFieldName = transformFieldName;
+ this.transformReceiver = transformReceiver;
}
public MethodSignature transform(MethodSignature signature) {
@@ -142,7 +152,7 @@ public class NodeTransformer {
}
public Receiver transformReceiver(Receiver receiver) {
- return receiver.transformSubtree(this);
+ return transformReceiver.apply(receiver.transformSubtree(this));
}
public VariableDeclaration transform(VariableDeclaration declaration) {