class SubroutineDefinitionParser {

    public SubroutineDefinition parse(final String subroutineDefinition) {
        if (subroutineDefinition == null) {
            throw new IllegalArgumentException("Subroutine definition cannot be null.");
        }

        final EtmPoint point = PointFactory.getPoint(getClass(), "parse(String)");
        try {
            return new SubroutineDefinition(parseSubroutineName(subroutineDefinition),
                    parseArgumentNames(subroutineDefinition));
        } finally {
            point.collect();
        }
    }

}