diff options
Diffstat (limited to 'src')
4 files changed, 18 insertions, 4 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/FieldAccessNode.java b/src/main/java/org/zwobble/couscous/ast/FieldAccessNode.java index 23e3aaa..b28d823 100644 --- a/src/main/java/org/zwobble/couscous/ast/FieldAccessNode.java +++ b/src/main/java/org/zwobble/couscous/ast/FieldAccessNode.java @@ -69,7 +69,7 @@ public class FieldAccessNode implements AssignableExpressionNode { public ExpressionNode transform(NodeTransformer transformer) { return new FieldAccessNode( transformer.transformReceiver(left), - fieldName, + transformer.transformFieldName(fieldName), transformer.transform(type)); } diff --git a/src/main/java/org/zwobble/couscous/ast/FieldDeclarationNode.java b/src/main/java/org/zwobble/couscous/ast/FieldDeclarationNode.java index 515045f..67f79c9 100644 --- a/src/main/java/org/zwobble/couscous/ast/FieldDeclarationNode.java +++ b/src/main/java/org/zwobble/couscous/ast/FieldDeclarationNode.java @@ -47,7 +47,7 @@ public class FieldDeclarationNode implements Node { public FieldDeclarationNode transform(NodeTransformer transformer) { return new FieldDeclarationNode( isStatic, - name, + transformer.transformFieldName(name), transformer.transform(type)); } 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 73d0919..f52bedc 100644 --- a/src/main/java/org/zwobble/couscous/ast/visitors/NodeTransformer.java +++ b/src/main/java/org/zwobble/couscous/ast/visitors/NodeTransformer.java @@ -176,6 +176,7 @@ public class NodeTransformer { private Function<ExpressionNode, Optional<ExpressionNode>> transformExpression = expression -> Optional.empty(); private Function<Type, Type> transformType = type -> type; private Function<MethodSignature, String> transformMethodName = MethodSignature::getName; + private Function<String, String> transformFieldName = name -> name; public Builder transformExpression( Function<ExpressionNode, Optional<ExpressionNode>> transformExpression) @@ -196,23 +197,31 @@ public class NodeTransformer { return this; } + public Builder transformFieldName(Function<String, String> transformFieldName) { + this.transformFieldName = transformFieldName; + return this; + } + public NodeTransformer build() { - return new NodeTransformer(transformExpression, transformType, transformMethodName); + return new NodeTransformer(transformExpression, transformType, transformMethodName, transformFieldName); } } private final Function<ExpressionNode, Optional<ExpressionNode>> transformExpression; private final Function<Type, Type> transformType; private final Function<MethodSignature, String> transformMethodName; + private final Function<String, String> transformFieldName; private NodeTransformer( Function<ExpressionNode, Optional<ExpressionNode>> transformExpression, Function<Type, Type> transformType, - Function<MethodSignature, String> transformMethodName) + Function<MethodSignature, String> transformMethodName, + Function<String, String> transformFieldName) { this.transformExpression = transformExpression; this.transformType = transformType; this.transformMethodName = transformMethodName; + this.transformFieldName = transformFieldName; } public MethodSignature transform(MethodSignature signature) { @@ -239,6 +248,10 @@ public class NodeTransformer { return transformMethodName.apply(signature); } + public String transformFieldName(String name) { + return transformFieldName.apply(name); + } + public ExpressionNode transformExpression(ExpressionNode expression) { return transformExpression.apply(expression) .orElseGet(() -> expression.transform(this)); diff --git a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java index 00de205..cc6daef 100644 --- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java +++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java @@ -40,6 +40,7 @@ public class CsharpCodeGenerator { .transformType(this::transformType) .transformExpression(this::transformExpression) .transformMethodName(naming::methodName) + .transformFieldName(name -> "_" + name) .build(); } |
