1818 * specific language governing permissions and limitations
1919 * under the License.
2020 */
21-
2221package com .igormaznitsa .prologparser ;
2322
2423import com .igormaznitsa .prologparser .terms .OpContainer ;
2524import com .igormaznitsa .prologparser .tokenizer .Op ;
2625
27- import java .util .Arrays ;
2826import java .util .Collections ;
2927import java .util .HashMap ;
3028import java .util .HashSet ;
3129import java .util .List ;
3230import java .util .Map ;
31+ import java .util .Objects ;
3332import java .util .Set ;
3433import java .util .stream .Stream ;
3534
@@ -46,25 +45,22 @@ public class DefaultParserContext implements ParserContext {
4645 protected final Map <String , OpContainer > opContainers = new HashMap <>();
4746 protected final int parserContextFlags ;
4847
49- public DefaultParserContext (final int parserContextFlags , final List <Op > operators ) {
50- this .parserContextFlags = parserContextFlags ;
51- this .addOps (operators .toArray (EMPTY ));
52- }
53-
5448 public DefaultParserContext (final int parserContextFlags ) {
55- this ( parserContextFlags , Collections . emptyList ()) ;
49+ this . parserContextFlags = parserContextFlags ;
5650 }
5751
5852 public static ParserContext of (final int parserContextFlags ) {
5953 return new DefaultParserContext (parserContextFlags );
6054 }
6155
6256 public static ParserContext of (final int parserContextFlags , final Op ... operators ) {
63- return new DefaultParserContext (parserContextFlags , Arrays . asList (operators ) );
57+ return new DefaultParserContext (parserContextFlags ). addOps (operators );
6458 }
6559
66- public static ParserContext of (final int parserContextFlags , final List <Op > operators ) {
67- return new DefaultParserContext (parserContextFlags , operators );
60+ @ SafeVarargs
61+ @ SuppressWarnings ("varagrs" )
62+ public static ParserContext of (final int parserContextFlags , final List <Op >... operators ) {
63+ return new DefaultParserContext (parserContextFlags ).addOps (operators );
6864 }
6965
7066 public Map <String , OpContainer > findAllOperators () {
@@ -80,17 +76,27 @@ protected void fillPrefixes(final String name) {
8076 rangeClosed (1 , name .length ()).mapToObj (i -> name .substring (0 , i )).forEach (this .opPrefixes ::add );
8177 }
8278
79+ @ SafeVarargs
80+ @ SuppressWarnings ("varargs" )
81+ public final DefaultParserContext addOps (final List <Op >... operators ) {
82+ Stream .of (operators ).filter (Objects ::nonNull ).forEach (ops -> this .addOps (ops .toArray (EMPTY )));
83+ return this ;
84+ }
85+
8386 public DefaultParserContext addOps (final Op ... operators ) {
84- Stream .of (operators ).flatMap (Op ::streamOp ).forEach (x -> {
85- fillPrefixes (x .getText ());
86- OpContainer container = this .opContainers .get (x .getText ());
87- if (container == null ) {
88- container = OpContainer .make (x );
89- this .opContainers .put (x .getText (), container );
90- } else {
91- container .add (x );
92- }
93- });
87+ Stream .of (operators )
88+ .filter (Objects ::nonNull )
89+ .flatMap (Op ::streamOp )
90+ .forEach (x -> {
91+ fillPrefixes (x .getText ());
92+ OpContainer container = this .opContainers .get (x .getText ());
93+ if (container == null ) {
94+ container = OpContainer .make (x );
95+ this .opContainers .put (x .getText (), container );
96+ } else {
97+ container .add (x );
98+ }
99+ });
94100 return this ;
95101 }
96102
0 commit comments