Skip to content

Package: OperationParser

OperationParser

nameinstructionbranchcomplexitylinemethod
OperationParser(TokenStream, Collection)
M: 0 C: 9
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 4
100%
M: 0 C: 1
100%
create(TokenStream, Collection)
M: 0 C: 6
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
parse(String, ClassType, IdentifierToken)
M: 0 C: 85
100%
M: 1 C: 5
83%
M: 1 C: 3
75%
M: 0 C: 17
100%
M: 0 C: 1
100%

Coverage

1: package de.fhdw.wtf.parser;
2:
3: import java.util.ArrayList;
4: import java.util.Collection;
5:
6: import de.fhdw.wtf.common.ast.Operation;
7: import de.fhdw.wtf.common.ast.OperationModifier;
8: import de.fhdw.wtf.common.ast.type.ClassType;
9: import de.fhdw.wtf.common.ast.type.ProductType;
10: import de.fhdw.wtf.common.ast.type.Type;
11: import de.fhdw.wtf.common.exception.parser.AbstractParserException;
12: import de.fhdw.wtf.common.stream.TokenStream;
13: import de.fhdw.wtf.common.token.IdentifierToken;
14: import de.fhdw.wtf.common.token.Token;
15:
16: /**
17: * Parser to parse the given TokenStream to {@link Operation}s.
18: */
19: final class OperationParser {
20:         /**
21:          * TokenStream.
22:          */
23:         private final TokenStream stream;
24:         
25:         /**
26:          * Collection of exceptions.
27:          */
28:         private final Collection<AbstractParserException> exceptions;
29:         
30:         /**
31:          * Constructor of {@link OperationParser}.
32:          *
33:          * @param stream
34:          * tokenStream
35:          * @param exceptions
36:          * collection of exceptions
37:          */
38:         private OperationParser(final TokenStream stream, final Collection<AbstractParserException> exceptions) {
39:                 this.stream = stream;
40:                 this.exceptions = exceptions;
41:         }
42:         
43:         /**
44:          * FactoryMethod for {@link OperationParser}.
45:          *
46:          * @param stream
47:          * tokenStream
48:          * @param exceptions
49:          * collection of exceptions
50:          * @return The {@link OperationParser}-Object.
51:          */
52:         static OperationParser create(final TokenStream stream, final Collection<AbstractParserException> exceptions) {
53:                 return new OperationParser(stream, exceptions);
54:         }
55:         
56:         /**
57:          * Parses a series of Tokens and creates an {@link Operation}. The name of the operation will be <code>name</code>.
58:          *
59:          * @param name
60:          * name
61:          * @param firstToken
62:          * firstToken
63:          * @return Operation
64:          * @throws AbstractParserException
65:          * AbstractParserException
66:          */
67:         Operation parse(final String name, final ClassType containingType, final IdentifierToken firstToken)
68:                         throws AbstractParserException {
69:                 final Collection<OperationModifier> modifiers = new ArrayList<>();
70:                 final Token firstTokenProduct = this.stream.peek();
71:                 final ProductType params = ProductType.create(firstTokenProduct);
72:                 ParserUtils.requireAndRemoveBracketOpenToken(this.stream);
73:•                while (this.stream.hasNext() && this.stream.peek().isIdentifierToken()) {
74:                         params.addElement(ParameterParser.create(this.stream, this.exceptions).parse());
75:•                        if (this.stream.peek().isCommaToken()) {
76:                                 this.stream.removeFirst();
77:                         }
78:                 }
79:                 ParserUtils.requireAndRemoveBracketCloseToken(this.stream);
80:                 params.setLastToken(this.stream.peek());
81:                 ParserUtils.requireAndRemoveArrowToken(this.stream);
82:                 final Type type = TypeParser.create(this.stream, this.exceptions).parse();
83:                 // TODO anpassen
84:                 final Operation result =
85:                                 Operation.create(name, modifiers, params, containingType, type, firstToken, type.getLastToken());
86:                 ParserUtils.requireAndRemoveDoubleSquareBracketCloseToken(this.stream);
87:                 modifiers.addAll(OperationModifierParser.create(this.stream, this.exceptions).parse(result));
88:                 return result;
89:         }
90: }