Skip to content

Commit 678af98

Browse files
committed
Fix: Multiple Calls of TermReferences
If a TermReference is called multiple times and it contains the possibility of using variables it is getting stuck on the first variable that was passed down in the parameters.
1 parent 3a204de commit 678af98

File tree

5 files changed

+37
-35
lines changed

5 files changed

+37
-35
lines changed

src/main/java/net/quickwrite/fluent4j/ast/placeable/TermReference.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ protected boolean check(final String string) {
4141

4242
@Override
4343
public CharSequence getResult(final AccessorBundle bundle) {
44-
return this.getArgumentResult(bundle).getResult(new AccessorElementsBundle(bundle.getBundle(), arguments));
44+
return this.getArgumentResult(bundle).getResult(new AccessorElementsBundle(bundle.getBundle(), this.getArguments(bundle)));
4545
}
4646

4747
/**

src/main/java/net/quickwrite/fluent4j/ast/placeable/base/FluentFunction.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,10 @@ public FluentFunction(final String functionName, final FluentArgs arguments) {
3838
* @return The sanitized arguments of the function
3939
*/
4040
protected FluentArgs getArguments(final AccessorBundle bundle) {
41-
if (this.arguments != null)
42-
this.arguments.sanitize(bundle);
41+
if (this.arguments == null)
42+
return null;
4343

44-
return this.arguments;
44+
return this.arguments.sanitize(bundle);
4545
}
4646

4747
/**

src/main/java/net/quickwrite/fluent4j/util/args/FluentArgs.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public interface FluentArgs {
2323
* @param bundle The main bundle
2424
*
2525
*/
26-
void sanitize(final AccessorBundle bundle);
26+
FluentArgs sanitize(final AccessorBundle bundle);
2727

2828
/**
2929
* Adds a new named argument to the named arguments.

src/main/java/net/quickwrite/fluent4j/util/args/FluentArguments.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
* positional arguments.
1414
*/
1515
public class FluentArguments implements FluentArgs {
16-
private final Map<String, FluentElement> namedArguments;
16+
protected final Map<String, FluentElement> namedArguments;
1717

1818
/**
1919
* Creates a new argument container with the given
@@ -34,14 +34,21 @@ public FluentArguments(final Map<String, FluentElement> namedArguments) {
3434
}
3535

3636
@Override
37-
public void sanitize(AccessorBundle bundle) {
37+
public FluentArgs sanitize(final AccessorBundle bundle) {
38+
final FluentArgs args = new FluentArguments();
39+
3840
for (final String key : namedArguments.keySet()) {
3941
final FluentElement argument = namedArguments.get(key);
4042

4143
if (argument instanceof FluentArgumentResult) {
42-
namedArguments.put(key, ((FluentArgumentResult) argument).getArgumentResult(bundle));
44+
args.setNamed(key, ((FluentArgumentResult) argument).getArgumentResult(bundle));
45+
continue;
4346
}
47+
48+
args.setNamed(key, argument);
4449
}
50+
51+
return args;
4552
}
4653

4754
@Override
@@ -64,9 +71,13 @@ public boolean isEmpty() {
6471
return this.namedArguments.isEmpty();
6572
}
6673

74+
public FluentArgs clone() throws CloneNotSupportedException {
75+
return (FluentArgs) super.clone();
76+
}
77+
6778
@Override
6879
public String toString() {
69-
return "ResourceNamedFluentArguments: {\n" +
80+
return "FluentArguments: {\n" +
7081
"\t\t\tnamedArguments: \"" + this.namedArguments + "\"\n" +
7182
"\t\t}";
7283
}

src/main/java/net/quickwrite/fluent4j/util/args/FunctionFluentArguments.java

Lines changed: 17 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,8 @@
1111
* are used as the parameters when a message, term or a function
1212
* is getting accessed.
1313
*/
14-
public class FunctionFluentArguments implements FunctionFluentArgs {
15-
private final Map<String, FluentElement> namedArguments;
16-
private final List<FluentElement> positionalArguments;
14+
public class FunctionFluentArguments extends FluentArguments implements FunctionFluentArgs {
15+
protected final List<FluentElement> positionalArguments;
1716

1817
/**
1918
* Creates a new empty argument
@@ -31,27 +30,34 @@ public FunctionFluentArguments() {
3130
* @param positionalArguments The positional arguments
3231
*/
3332
public FunctionFluentArguments(final Map<String, FluentElement> namedArguments, final List<FluentElement> positionalArguments) {
34-
this.namedArguments = namedArguments;
33+
super(namedArguments);
3534
this.positionalArguments = positionalArguments;
3635
}
3736

3837
@Override
39-
public void sanitize(AccessorBundle bundle) {
38+
public FluentArgs sanitize(final AccessorBundle bundle) {
39+
final FunctionFluentArgs args = new FunctionFluentArguments();
40+
4041
for (final String key : namedArguments.keySet()) {
4142
final FluentElement argument = namedArguments.get(key);
4243

4344
if (argument instanceof FluentArgumentResult) {
44-
namedArguments.put(key, ((FluentArgumentResult) argument).getArgumentResult(bundle));
45+
args.setNamed(key, ((FluentArgumentResult) argument).getArgumentResult(bundle));
46+
continue;
4547
}
46-
}
4748

48-
for (int i = 0; i < positionalArguments.size(); i++) {
49-
final FluentElement argument = positionalArguments.get(i);
49+
args.setNamed(key, argument);
50+
}
5051

52+
for (final FluentElement argument : positionalArguments) {
5153
if (argument instanceof FluentArgumentResult) {
52-
positionalArguments.set(i, ((FluentArgumentResult) argument).getArgumentResult(bundle));
54+
args.addPositional(((FluentArgumentResult) argument).getArgumentResult(bundle));
55+
continue;
5356
}
57+
args.addPositional(argument);
5458
}
59+
60+
return args;
5561
}
5662

5763
@Override
@@ -68,21 +74,6 @@ public int getPositionalSize() {
6874
return this.positionalArguments.size();
6975
}
7076

71-
@Override
72-
public void setNamed(final String key, final FluentElement argument) {
73-
this.namedArguments.put(key, argument);
74-
}
75-
76-
@Override
77-
public FluentElement getNamed(final String key) {
78-
return this.namedArguments.get(key);
79-
}
80-
81-
@Override
82-
public Set<String> getNamedKeys() {
83-
return this.namedArguments.keySet();
84-
}
85-
8677
@Override
8778
public void addPositional(final FluentElement argument) {
8879
this.positionalArguments.add(argument);
@@ -95,7 +86,7 @@ public boolean isEmpty() {
9586

9687
@Override
9788
public String toString() {
98-
return "ResourceFluentArguments: {\n" +
89+
return "FunctionFluentArguments: {\n" +
9990
"\t\t\tnamedArguments: \"" + this.namedArguments + "\"\n" +
10091
"\t\t\tpositionalArguments: \"" + this.positionalArguments + "\"\n" +
10192
"\t\t}";

0 commit comments

Comments
 (0)