Package: PrefixedUnderscoreRule

PrefixedUnderscoreRule

nameinstructionbranchcomplexitylinemethod
PrefixedUnderscoreRule(String, IToken)
M: 18 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 6 C: 0
0%
M: 1 C: 0
0%
evaluate(ICharacterScanner)
M: 98 C: 0
0%
M: 20 C: 0
0%
M: 11 C: 0
0%
M: 27 C: 0
0%
M: 1 C: 0
0%

Coverage

1: /*
2: * #%~
3: * org.overture.ide.ui
4: * %%
5: * Copyright (C) 2008 - 2014 Overture
6: * %%
7: * This program is free software: you can redistribute it and/or modify
8: * it under the terms of the GNU General Public License as
9: * published by the Free Software Foundation, either version 3 of the
10: * License, or (at your option) any later version.
11: *
12: * This program is distributed in the hope that it will be useful,
13: * but WITHOUT ANY WARRANTY; without even the implied warranty of
14: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15: * GNU General Public License for more details.
16: *
17: * You should have received a copy of the GNU General Public
18: * License along with this program. If not, see
19: * <http://www.gnu.org/licenses/gpl-3.0.html>.
20: * #~%
21: */
22: package org.overture.ide.ui.editor.syntax;
23:
24: import org.eclipse.jface.text.rules.ICharacterScanner;
25: import org.eclipse.jface.text.rules.IRule;
26: import org.eclipse.jface.text.rules.IToken;
27: import org.eclipse.jface.text.rules.Token;
28:
29: public class PrefixedUnderscoreRule implements IRule
30: {
31:         public static final int EOF = -1;
32:
33:         IToken fToken = null;
34:
35:         final private char[] fPrefix;
36:         final private int fLength;
37:
38:         public PrefixedUnderscoreRule(String prefix, IToken token)
39:         {
40:                 fToken = token;
41:                 fPrefix = prefix.toCharArray();
42:                 fLength = fPrefix.length;
43:         }
44:
45:         public IToken evaluate(ICharacterScanner scanner)
46:         {
47:                 StringBuffer sb = new StringBuffer();
48:                 int c = -1;
49:
50:                 int readCount = 0;
51:•                for (int i = 0; i < fLength; i++)
52:                 {
53:                         c = scanner.read();
54:•                        if (c == EOF)
55:                         {
56:                                 scanner.unread();
57:                                 return Token.EOF;
58:                         }
59:                         sb.append((char) c);
60:                         readCount++;
61:•                        if (c != fPrefix[i])
62:                         {
63:
64:•                                for (int j = 0; j < readCount; j++)
65:                                 {
66:                                         scanner.unread();
67:                                 }
68:
69:                                 return Token.UNDEFINED;
70:
71:                         }
72:                 }
73:
74:•                if (readCount == fLength)
75:                 {
76:                         c = scanner.read();
77:                         sb.append((char) c);
78:                         readCount++;
79:•                        if (c == '_')
80:                         {
81:                                 c = scanner.read();
82:                                 sb.append((char) c);
83:                                 scanner.unread();// we just need to check the next char not consume it
84:•                                if (Character.isJavaIdentifierStart(c)||Character.isWhitespace(c)||c=='(')
85:                                 {
86:                                         return fToken;
87:                                 }
88:                         }
89:                 }
90:
91:•                for (int j = 0; j < readCount; j++)
92:                 {
93:                         scanner.unread();
94:                 }
95:
96:                 return Token.UNDEFINED;
97:         }
98: }