Skip to content

Commit cc3c915

Browse files
committed
Add argument container with just named arguments
1 parent 2234ba0 commit cc3c915

File tree

4 files changed

+100
-2
lines changed

4 files changed

+100
-2
lines changed

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import net.quickwrite.fluent4j.ast.placeable.base.FluentFunction;
66
import net.quickwrite.fluent4j.util.StringSlice;
77
import net.quickwrite.fluent4j.util.args.FluentArgs;
8+
import net.quickwrite.fluent4j.util.args.ResourceNamedFluentArguments;
89
import net.quickwrite.fluent4j.util.bundle.DirectFluentBundle;
910

1011
/**
@@ -59,6 +60,11 @@ public FluentElement getArgumentResult(final DirectFluentBundle bundle, final Fl
5960
return term;
6061
}
6162

63+
@Override
64+
protected FluentArgs getFluentArgumentInstance() {
65+
return new ResourceNamedFluentArguments();
66+
}
67+
6268
@Override
6369
public String toString() {
6470
return "FluentTermReference: {\n" +

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ private FluentArgs getArguments(final StringSlice content) {
3939
return FluentArgs.EMPTY_ARGS;
4040
}
4141

42-
final FluentArgs arguments = new ResourceFluentArguments();
42+
final FluentArgs arguments = this.getFluentArgumentInstance();
4343

4444
while (!content.isBigger()) {
4545
Pair<String, FluentElement> argument = getArgument(content);
@@ -96,6 +96,10 @@ protected FluentArgs getArguments(final DirectFluentBundle bundle, final FluentA
9696
return this.arguments;
9797
}
9898

99+
protected FluentArgs getFluentArgumentInstance() {
100+
return new ResourceFluentArguments();
101+
}
102+
99103
/**
100104
* Returns the {@link FluentElement} that the function is returning.
101105
*

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ public boolean isEmpty() {
9595

9696
@Override
9797
public String toString() {
98-
return "FluentElementList: {\n" +
98+
return "ResourceFluentArguments: {\n" +
9999
"\t\t\tnamedArguments: \"" + this.namedArguments + "\"\n" +
100100
"\t\t\tpositionalArguments: \"" + this.positionalArguments + "\"\n" +
101101
"\t\t}";
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package net.quickwrite.fluent4j.util.args;
2+
3+
import net.quickwrite.fluent4j.ast.FluentElement;
4+
import net.quickwrite.fluent4j.ast.placeable.base.FluentArgumentResult;
5+
import net.quickwrite.fluent4j.util.bundle.DirectFluentBundle;
6+
7+
import java.util.HashMap;
8+
import java.util.Map;
9+
import java.util.Set;
10+
11+
/**
12+
* A storage for the named arguments without the
13+
* positional arguments.
14+
*/
15+
public class ResourceNamedFluentArguments implements FluentArgs {
16+
private final Map<String, FluentElement> namedArguments;
17+
18+
/**
19+
* Creates a new argument container with the given
20+
* arguments.
21+
*/
22+
public ResourceNamedFluentArguments() {
23+
this(new HashMap<>());
24+
}
25+
26+
/**
27+
* Creates a new argument container with the given
28+
* arguments.
29+
*
30+
* @param namedArguments The named arguments
31+
*/
32+
public ResourceNamedFluentArguments(final Map<String, FluentElement> namedArguments) {
33+
this.namedArguments = namedArguments;
34+
}
35+
36+
@Override
37+
public void sanitize(final DirectFluentBundle bundle, final FluentArgs arguments) {
38+
for (final String key : namedArguments.keySet()) {
39+
final FluentElement argument = namedArguments.get(key);
40+
41+
if (argument instanceof FluentArgumentResult) {
42+
namedArguments.put(key, ((FluentArgumentResult) argument).getArgumentResult(bundle, arguments));
43+
}
44+
}
45+
}
46+
47+
@Override
48+
public FluentElement getPositional(final int index) {
49+
return null;
50+
}
51+
52+
@Override
53+
public int getPositionalSize() {
54+
return 0;
55+
}
56+
57+
@Override
58+
public void setNamed(final String key, final FluentElement argument) {
59+
this.namedArguments.put(key, argument);
60+
}
61+
62+
@Override
63+
public FluentElement getNamed(final String key) {
64+
return this.namedArguments.get(key);
65+
}
66+
67+
@Override
68+
public Set<String> getNamedKeys() {
69+
return this.namedArguments.keySet();
70+
}
71+
72+
@Override
73+
public boolean isEmpty() {
74+
return this.namedArguments.isEmpty();
75+
}
76+
77+
@Override
78+
public void addPositional(final FluentElement argument) {
79+
80+
}
81+
82+
@Override
83+
public String toString() {
84+
return "ResourceNamedFluentArguments: {\n" +
85+
"\t\t\tnamedArguments: \"" + this.namedArguments + "\"\n" +
86+
"\t\t}";
87+
}
88+
}

0 commit comments

Comments
 (0)