Skip to content

Commit cee798f

Browse files
committed
fix capacity for option names, deprecate parser constructor
1 parent 476368d commit cee798f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+91
-159
lines changed

compiler/src/main/java/net/jbock/writing/CommandRepresentation.java

-13
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package net.jbock.writing;
22

33
import io.jbock.javapoet.ClassName;
4-
import io.jbock.javapoet.FieldSpec;
54
import net.jbock.annotated.Option;
65
import net.jbock.annotated.Parameter;
76
import net.jbock.annotated.VarargsParameter;
@@ -13,18 +12,10 @@
1312
import java.util.Optional;
1413
import java.util.function.Supplier;
1514

16-
import static javax.lang.model.element.Modifier.FINAL;
17-
import static javax.lang.model.element.Modifier.PRIVATE;
18-
import static net.jbock.common.Constants.STRING;
19-
import static net.jbock.common.Constants.mapOf;
2015
import static net.jbock.common.Suppliers.memoize;
2116

2217
public final class CommandRepresentation {
2318

24-
private final Supplier<FieldSpec> optionNames = memoize(() -> FieldSpec.builder(
25-
mapOf(STRING, optType()), "optionNames")
26-
.addModifiers(PRIVATE, FINAL).build());
27-
2819
private final Supplier<ClassName> optType = memoize(() -> namedOptions().isEmpty() ?
2920
ClassName.get(Void.class) : // javapoet #739
3021
sourceElement().optionEnumType());
@@ -70,10 +61,6 @@ List<Mapping<Option>> namedOptions() {
7061
return namedOptions;
7162
}
7263

73-
FieldSpec optionNames() {
74-
return optionNames.get();
75-
}
76-
7764
/** Returns the type of the option enum. */
7865
ClassName optType() {
7966
return optType.get();

compiler/src/main/java/net/jbock/writing/CreateModelMethod.java

+2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import net.jbock.model.Multiplicity;
1010
import net.jbock.model.Parameter;
1111

12+
import javax.lang.model.element.Modifier;
1213
import java.util.ArrayList;
1314
import java.util.List;
1415
import java.util.function.Supplier;
@@ -48,6 +49,7 @@ final class CreateModelMethod extends HasCommandRepresentation {
4849
.addStatement(joinByNewline(code))
4950
.returns(CommandModel.class)
5051
.addModifiers(sourceElement().accessModifiers())
52+
.addModifiers(Modifier.STATIC)
5153
.build();
5254
});
5355

compiler/src/main/java/net/jbock/writing/HasCommandRepresentation.java

-5
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package net.jbock.writing;
22

33
import io.jbock.javapoet.ClassName;
4-
import io.jbock.javapoet.FieldSpec;
54
import net.jbock.annotated.Option;
65
import net.jbock.annotated.Parameter;
76
import net.jbock.annotated.VarargsParameter;
@@ -31,10 +30,6 @@ final ClassName optType() {
3130
return commandRepresentation.optType();
3231
}
3332

34-
final FieldSpec optionNames() {
35-
return commandRepresentation.optionNames();
36-
}
37-
3833
final List<Mapping<Parameter>> positionalParameters() {
3934
return commandRepresentation.positionalParameters();
4035
}

compiler/src/main/java/net/jbock/writing/OptionNamesMethod.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313

1414
import static javax.lang.model.element.Modifier.PRIVATE;
1515
import static javax.lang.model.element.Modifier.STATIC;
16+
import static net.jbock.common.Constants.STRING;
17+
import static net.jbock.common.Constants.mapOf;
1618
import static net.jbock.common.Suppliers.memoize;
1719

1820
final class OptionNamesMethod extends HasCommandRepresentation {
@@ -25,15 +27,16 @@ final class OptionNamesMethod extends HasCommandRepresentation {
2527

2628
private final Supplier<MethodSpec> define = memoize(() -> {
2729
ParameterSpec result = ParameterSpec.builder(
28-
optionNames().type, "result").build();
30+
mapOf(STRING, optType()), "result").build();
2931
long mapSize = namedOptions().stream()
3032
.map(Mapping::item)
3133
.map(Option::names)
3234
.map(List::size)
3335
.mapToLong(i -> i)
3436
.sum();
3537
CodeBlock.Builder code = CodeBlock.builder();
36-
code.addStatement("$T $N = new $T<>($L)", result.type, result, HashMap.class, mapSize);
38+
int capacity = (int) (1 + Math.max(mapSize * 1.35, 15));
39+
code.addStatement("$T $N = new $T<>($L)", result.type, result, HashMap.class, capacity);
3740
for (Mapping<Option> namedOption : namedOptions()) {
3841
for (String dashedName : namedOption.item().names()) {
3942
code.addStatement("$N.put($S, $T.$L)",

compiler/src/main/java/net/jbock/writing/OptionStatesMethod.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import java.util.function.Supplier;
1818

1919
import static javax.lang.model.element.Modifier.PRIVATE;
20+
import static javax.lang.model.element.Modifier.STATIC;
2021
import static net.jbock.common.Constants.mapOf;
2122
import static net.jbock.common.Suppliers.memoize;
2223

@@ -45,7 +46,7 @@ result, sourceElement().optionEnumType(),
4546
return MethodSpec.methodBuilder("optionStates")
4647
.addCode(code.build())
4748
.returns(result.type)
48-
.addModifiers(PRIVATE)
49+
.addModifiers(PRIVATE, STATIC)
4950
.build();
5051
});
5152

compiler/src/main/java/net/jbock/writing/ParseMethod.java

+2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import io.jbock.simple.Inject;
77
import net.jbock.util.ExFailure;
88

9+
import javax.lang.model.element.Modifier;
910
import java.util.function.Supplier;
1011

1112
import static io.jbock.javapoet.ParameterSpec.builder;
@@ -57,6 +58,7 @@ EITHER, e, createModelMethod().get())
5758
.returns(generatedTypes().parseResultType())
5859
.addCode(code.build())
5960
.addModifiers(sourceElement().accessModifiers())
61+
.addModifiers(Modifier.STATIC)
6062
.build();
6163
});
6264

compiler/src/main/java/net/jbock/writing/ParseOrExitMethod.java

+2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import net.jbock.util.AtFileError;
1010
import net.jbock.util.ParseRequest;
1111

12+
import javax.lang.model.element.Modifier;
1213
import java.util.List;
1314

1415
import static io.jbock.javapoet.MethodSpec.methodBuilder;
@@ -77,6 +78,7 @@ MethodSpec define() {
7778
return methodBuilder("parseOrExit").addParameter(args)
7879
.addModifiers(sourceElement().accessModifiers())
7980
.returns(generatedTypes.sourceElement().typeName())
81+
.addModifiers(Modifier.STATIC)
8082
.addCode(code.build())
8183
.build();
8284
}

compiler/src/main/java/net/jbock/writing/ParserClass.java

+8-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package net.jbock.writing;
22

3+
import io.jbock.javapoet.AnnotationSpec;
4+
import io.jbock.javapoet.MethodSpec;
35
import io.jbock.javapoet.TypeSpec;
46
import io.jbock.simple.Inject;
57

@@ -53,17 +55,20 @@ TypeSpec define() {
5355
spec.addMethod(parseOrExitMethod.define());
5456
}
5557
if (!namedOptions().isEmpty()) {
56-
spec.addField(optionNames().toBuilder()
57-
.initializer("$N()", optionNamesMethod.get()).build());
5858
spec.addMethod(optionNamesMethod.get());
5959
spec.addMethod(optionStatesMethod.get());
6060
spec.addType(optionEnum.define());
6161
}
6262

6363
spec.addMethod(createModelMethod.get());
64+
Modifier[] modifiers = sourceElement().accessModifiers().toArray(new Modifier[0]);
65+
spec.addMethod(MethodSpec.constructorBuilder().addModifiers(modifiers)
66+
.addJavadoc("Constructor is deprecated, use the static methods instead.")
67+
.addAnnotation(AnnotationSpec.builder(Deprecated.class).addMember("forRemoval", "true").build())
68+
.build());
6469

6570
return spec.addOriginatingElement(sourceElement().element())
66-
.addModifiers(sourceElement().accessModifiers().toArray(new Modifier[0]))
71+
.addModifiers(modifiers)
6772
.addModifiers(Modifier.FINAL)
6873
.addType(implClass.define())
6974
.addAnnotation(generatedAnnotation.define()).build();

compiler/src/main/java/net/jbock/writing/ParserTypeFactory.java

+9-2
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,22 @@
1616
final class ParserTypeFactory extends HasCommandRepresentation {
1717

1818
private final OptionStatesMethod optionStatesMethod;
19+
private final OptionNamesMethod optionNamesMethod;
1920

2021
@Inject
2122
ParserTypeFactory(
2223
CommandRepresentation commandRepresentation,
23-
OptionStatesMethod optionStatesMethod) {
24+
OptionStatesMethod optionStatesMethod,
25+
OptionNamesMethod optionNamesMethod) {
2426
super(commandRepresentation);
2527
this.optionStatesMethod = optionStatesMethod;
28+
this.optionNamesMethod = optionNamesMethod;
2629
}
2730

2831
private final Supplier<ParserType> parserType = memoize(() -> {
2932
CodeBlock optionNames = namedOptions().isEmpty() ?
3033
CodeBlock.of("$T.of()", Map.class) :
31-
CodeBlock.of("$N", optionNames());
34+
CodeBlock.of("$N()", optionNamesMethod().get());
3235
CodeBlock optionStates = namedOptions().isEmpty() ?
3336
CodeBlock.of("$T.of()", Map.class) :
3437
CodeBlock.of("$N()", optionStatesMethod().get());
@@ -61,4 +64,8 @@ ParserType get() {
6164
private OptionStatesMethod optionStatesMethod() {
6265
return optionStatesMethod;
6366
}
67+
68+
private OptionNamesMethod optionNamesMethod() {
69+
return optionNamesMethod;
70+
}
6471
}

examples/src/main/java/examples/dustin/commandline/jbock/Main.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ abstract static class Arguments {
2828
}
2929

3030
public static void main(String[] arguments) {
31-
Arguments args = new Main_ArgumentsParser().parseOrExit(arguments);
31+
Arguments args = Main_ArgumentsParser.parseOrExit(arguments);
3232
System.out.println("The file '" + args.file() + "' was provided and verbosity is set to '" + args.verbose() + "'.");
3333
}
3434
}

examples/src/test/java/examples/dustin/commandline/jbock/MainTest.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,8 @@
77

88
class MainTest {
99

10-
private final Main_ArgumentsParser parser = new Main_ArgumentsParser();
11-
1210
private final ParserTestFixture<Main.Arguments> f =
13-
ParserTestFixture.create(parser::parse);
11+
ParserTestFixture.create(Main_ArgumentsParser::parse);
1412

1513
@Test
1614
void testMain() {

examples/src/test/java/net/jbock/examples/AdditionArgumentsTest.java

+2-4
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,8 @@
77

88
class AdditionArgumentsTest {
99

10-
private final AdditionArgumentsParser parser = new AdditionArgumentsParser();
11-
1210
private final ParserTestFixture<AdditionArguments> f =
13-
ParserTestFixture.create(parser::parse);
11+
ParserTestFixture.create(AdditionArgumentsParser::parse);
1412

1513
@Test
1614
void optionalAbsent() {
@@ -48,7 +46,7 @@ void dashesIgnored() {
4846
@Test
4947
void testPrint() {
5048
f.assertPrintsHelp(
51-
parser.createModel(),
49+
AdditionArgumentsParser.createModel(),
5250
"\u001B[1mUSAGE\u001B[m",
5351
" addition-arguments A B [C]",
5452
"",

examples/src/test/java/net/jbock/examples/AllCharactersArgumentsTest.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,8 @@
88

99
class AllCharactersArgumentsTest {
1010

11-
private final AllCharactersArgumentsParser parser = new AllCharactersArgumentsParser();
12-
1311
private final ParserTestFixture<AllCharactersArguments> f =
14-
ParserTestFixture.create(parser::parse);
12+
ParserTestFixture.create(AllCharactersArgumentsParser::parse);
1513

1614
@Test
1715
void tests() {

examples/src/test/java/net/jbock/examples/AllDoublesArgumentsTest.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,8 @@
88

99
class AllDoublesArgumentsTest {
1010

11-
private final AllDoublesArgumentsParser parser = new AllDoublesArgumentsParser();
12-
1311
private final ParserTestFixture<AllDoublesArguments> f =
14-
ParserTestFixture.create(parser::parse);
12+
ParserTestFixture.create(AllDoublesArgumentsParser::parse);
1513

1614
@Test
1715
void listOfInteger() {

examples/src/test/java/net/jbock/examples/AllFlagsArgumentsTest.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,8 @@
55

66
class AllFlagsArgumentsTest {
77

8-
private final AllFlagsArgumentsParser parser = new AllFlagsArgumentsParser();
9-
108
private final ParserTestFixture<AllFlagsArguments> f =
11-
ParserTestFixture.create(parser::parse);
9+
ParserTestFixture.create(AllFlagsArgumentsParser::parse);
1210

1311
@Test
1412
void tests() {

examples/src/test/java/net/jbock/examples/AllFloatsArgumentsTest.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,8 @@
88

99
class AllFloatsArgumentsTest {
1010

11-
private final AllFloatsArgumentsParser parser = new AllFloatsArgumentsParser();
12-
1311
private final ParserTestFixture<AllFloatsArguments> f =
14-
ParserTestFixture.create(parser::parse);
12+
ParserTestFixture.create(AllFloatsArgumentsParser::parse);
1513

1614
@Test
1715
void listOfInteger() {

examples/src/test/java/net/jbock/examples/AllIntegersArgumentsTest.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,8 @@
99

1010
class AllIntegersArgumentsTest {
1111

12-
private final AllIntegersArgumentsParser parser = new AllIntegersArgumentsParser();
13-
1412
private final ParserTestFixture<AllIntegersArguments> f =
15-
ParserTestFixture.create(parser::parse);
13+
ParserTestFixture.create(AllIntegersArgumentsParser::parse);
1614

1715
@Test
1816
void listOfInteger() {

examples/src/test/java/net/jbock/examples/AllLongsArgumentsTest.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,8 @@
88

99
class AllLongsArgumentsTest {
1010

11-
private final AllLongsArgumentsParser parser = new AllLongsArgumentsParser();
12-
1311
private final ParserTestFixture<AllLongsArguments> f =
14-
ParserTestFixture.create(parser::parse);
12+
ParserTestFixture.create(AllLongsArgumentsParser::parse);
1513

1614
@Test
1715
void listOfInteger() {

examples/src/test/java/net/jbock/examples/ClusteredShortOptionsTest.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@
55

66
class ClusteredShortOptionsTest {
77

8-
private final ClusteredShortOptionsParser parser = new ClusteredShortOptionsParser();
9-
10-
private final ParserTestFixture<ClusteredShortOptions> f = ParserTestFixture.create(parser::parse);
8+
private final ParserTestFixture<ClusteredShortOptions> f = ParserTestFixture.create(ClusteredShortOptionsParser::parse);
119

1210
@Test
1311
void testAttached() {

examples/src/test/java/net/jbock/examples/ComplicatedMapperArgumentsTest.java

+2-4
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,8 @@
1515

1616
class ComplicatedMapperArgumentsTest {
1717

18-
private final ComplicatedMapperArgumentsParser parser = new ComplicatedMapperArgumentsParser();
19-
2018
private final ParserTestFixture<ComplicatedMapperArguments> f =
21-
ParserTestFixture.create(parser::parse);
19+
ParserTestFixture.create(ComplicatedMapperArgumentsParser::parse);
2220

2321
@Test
2422
void lazyNumber() {
@@ -34,7 +32,7 @@ void lazyNumber() {
3432

3533
@Test
3634
void nullConverter() {
37-
Either<ParsingFailed, ComplicatedMapperArguments> parsed = parser.parse(List.of(
35+
Either<ParsingFailed, ComplicatedMapperArguments> parsed = ComplicatedMapperArgumentsParser.parse(List.of(
3836
"-N", "12",
3937
"--date", "2020-01-10"));
4038
assertTrue(parsed.getLeft().isPresent());

examples/src/test/java/net/jbock/examples/CpArgumentsTest.java

+2-4
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,8 @@
88

99
class CpArgumentsTest {
1010

11-
private final CpArgumentsParser parser = new CpArgumentsParser();
12-
1311
private final ParserTestFixture<CpArguments> f =
14-
ParserTestFixture.create(parser::parse);
12+
ParserTestFixture.create(CpArgumentsParser::parse);
1513

1614
@Test
1715
void errorMissingSource() {
@@ -102,7 +100,7 @@ void testEnum() {
102100
@Test
103101
void testPrint() {
104102
f.assertPrintsHelp(
105-
parser.createModel(),
103+
CpArgumentsParser.createModel(),
106104
"\u001B[1mUSAGE\u001B[m",
107105
" cp-arguments [OPTIONS] SOURCE DEST",
108106
"",

0 commit comments

Comments
 (0)