Skip to content

NullPointerException when adding an element to a collection inside rule method #23

@ghost

Description

When adding an element to a collection inside a method that creates a rule, a NullPointerException occurs during "createParser".

Example:

package test;

import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import org.parboiled.Parboiled;
import org.parboiled.Rule;
import org.parboiled.support.Var;

import com.github.parboiled1.grappa.parsers.EventBusParser;

public class NpeOnMap {

    public static void main(String[] args) {
        TestParser parser = Parboiled.createParser(TestParser.class);
    }

    public static class TestParser extends EventBusParser<String> {

        Rule relativity() {
            final Map<String, String> map = new LinkedHashMap<>();
//          map.put("x", "y"); // NPE
            final List<String> list = new LinkedList<>();
//          list.add("x"); // NPE
            Var<String> m = new Var<>();
            return sequence("a", m.set(match()));
//          return sequence("a", "b"); // No NPE in any case
        }

    }

}

The NPE only occurs when using "match()" inside the returned rule. If no "match()" is used, then any other code works fine.

StackTrace:

Exception in thread "main" java.lang.RuntimeException: Error creating extended parser class: null
    at org.parboiled.Parboiled.createParser(Parboiled.java:75)
    at test.NpeOnMap.main(NpeOnMap.java:17)
Caused by: java.lang.NullPointerException
    at org.parboiled.transform.process.ImplicitActionsConverter.getDependents(ImplicitActionsConverter.java:180)
    at org.parboiled.transform.process.ImplicitActionsConverter.isImplicitAction(ImplicitActionsConverter.java:110)
    at org.parboiled.transform.process.ImplicitActionsConverter.walkNode(ImplicitActionsConverter.java:83)
    at org.parboiled.transform.process.ImplicitActionsConverter.walkNode(ImplicitActionsConverter.java:92)
    at org.parboiled.transform.process.ImplicitActionsConverter.walkNode(ImplicitActionsConverter.java:92)
    at org.parboiled.transform.process.ImplicitActionsConverter.process(ImplicitActionsConverter.java:73)
    at org.parboiled.transform.ParserTransformer.runMethodTransformers(ParserTransformer.java:122)
    at org.parboiled.transform.ParserTransformer.extendParserClass(ParserTransformer.java:98)
    at org.parboiled.transform.ParserTransformer.transformParser(ParserTransformer.java:66)
    at org.parboiled.Parboiled.createParser(Parboiled.java:67)
    ... 1 more

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions