Author: pkluegl
Date: Mon Jul  9 12:30:22 2012
New Revision: 1359109

URL: http://svn.apache.org/viewvc?rev=1359109&view=rev
Log:
UIMA-2428
- added dummy ast elements for context identification
- added checker for condition and action names
- added parentheses when completing conditions and actions

Added:
    
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/antlr3/org/apache/uima/textmarker/ide/core/parser/TextMarkerLexer.g
    
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/antlr3/org/apache/uima/textmarker/ide/core/parser/TextMarkerLexer.tokens
    
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/antlr3/org/apache/uima/textmarker/ide/core/parser/TextMarkerParser.tokens
Modified:
    uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/   (props changed)
    
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/antlr3/org/apache/uima/textmarker/ide/core/parser/TextMarkerParser.g
    
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/core/codeassist/TextMarkerCompletionEngine.java
    
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/core/codeassist/TextMarkerReferenceVisitor.java
    
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/formatter/TextMarkerFormatter.java
    
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/ActionFactory.java
    
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/ConditionFactory.java
    
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/ExpressionFactory.java
    
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/validator/TextMarkerCheckerProblemFactory.java
    
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/validator/TextMarkerVarRefChecker.java

Propchange: uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Mon Jul  9 12:30:22 2012
@@ -0,0 +1,5 @@
+.settings
+target
+.classpath
+.project
+META-INF

Added: 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/antlr3/org/apache/uima/textmarker/ide/core/parser/TextMarkerLexer.g
URL: 
http://svn.apache.org/viewvc/uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/antlr3/org/apache/uima/textmarker/ide/core/parser/TextMarkerLexer.g?rev=1359109&view=auto
==============================================================================
--- 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/antlr3/org/apache/uima/textmarker/ide/core/parser/TextMarkerLexer.g
 (added)
+++ 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/antlr3/org/apache/uima/textmarker/ide/core/parser/TextMarkerLexer.g
 Mon Jul  9 12:30:22 2012
@@ -0,0 +1,519 @@
+lexer grammar TextMarkerLexer;
+options {
+       language = Java;
+}
+
+
+tokens {
+       DocComment;
+       Annotation;
+       ListIdentifier;
+}
+
+@lexer::header {
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+*/
+
+       package org.apache.uima.textmarker.ide.core.parser;
+}
+
+@lexer::members {
+       public int implicitLineJoiningLevel = 0;
+       public int startPos=-1;
+       public void emitErrorMessage(String msg) {
+       }
+}
+
+
+TRIE
+       :       'TRIE'
+       ;
+
+CONTAINS
+       :       'CONTAINS'
+       ;
+
+DECLARE
+       :       'DECLARE'
+       ;
+
+WORDLIST
+       :       'WORDLIST'
+       ;
+
+WORDTABLE
+       :       'WORDTABLE'
+       ;
+
+AND
+       :       'AND'
+       ;
+
+CONTEXTCOUNT
+       :       'CONTEXTCOUNT'
+       ;
+
+COUNT
+       :       'COUNT'
+       ;
+
+TOTALCOUNT
+       :       'TOTALCOUNT'
+       ;
+
+CURRENTCOUNT
+       :       'CURRENTCOUNT'
+       ;
+
+INLIST
+       :       'INLIST'
+       ;
+
+
+LAST
+       :       'LAST'
+       ;
+
+MOFN
+       :       'MOFN'
+       ;
+
+NEAR
+       :       'NEAR'
+       ;
+
+OR
+       :       'OR'
+       ;
+
+PARTOF
+       :       'PARTOF'
+       ;
+       
+PARTOFNEQ
+       :       'PARTOFNEQ'
+       ;
+
+POSITION
+       :       'POSITION'
+       ;
+
+REGEXP
+       :       'REGEXP'
+       ;
+
+SCORE
+       :       'SCORE'
+       ;
+
+VOTE
+       :       'VOTE'
+       ;
+
+IF
+       :       'IF'
+       ;
+
+FEATURE
+       :       'FEATURE'
+       ;
+
+PARSE
+       :       'PARSE'
+       ;
+
+CREATE
+       :       'CREATE'
+       ;
+
+GATHER
+       :       'GATHER'
+       ;
+
+FILL
+       :       'FILL'
+       ;
+
+ATTRIBUTE
+       :       'ATTRIBUTE'
+       ;
+
+COLOR
+       :       'COLOR'
+       ;
+
+DEL
+       :       'DEL'
+       ;
+
+LOG
+       :       'LOG'
+       ;
+
+MARK
+       :       'MARK'
+       ;
+
+MARKSCORE
+       :       'MARKSCORE'
+       ;
+
+MARKONCE
+       :       'MARKONCE'
+       ;
+
+MARKFAST
+       :       'MARKFAST'
+       ;
+       
+MARKTABLE
+       :       'MARKTABLE'
+       ;
+       
+MARKLAST
+       :       'MARKLAST'
+       ;
+
+REPLACE
+       :       'REPLACE'
+       ;
+
+RETAINTYPE
+       :       'RETAINTYPE'
+       ;
+
+FILTERTYPE
+       :       'FILTERTYPE'
+       ;
+
+CALL
+       :       'CALL'
+       ;
+
+
+EXEC
+       :       'EXEC'
+       ;
+
+CONFIGURE
+       :       'CONFIGURE'
+       ;
+
+ASSIGN
+       :       'ASSIGN'
+       ;
+
+SETFEATURE
+       :       'SETFEATURE'
+       ;
+
+GETFEATURE
+       :       'GETFEATURE'
+       ;
+
+UNMARK
+       :       'UNMARK'
+       ;
+
+UNMARKALL
+       :       'UNMARKALL'
+       ;
+
+TRANSFER
+       :       'TRANSFER'
+       ;
+
+
+EXPAND         
+       :       'EXPAND'         
+       ;
+
+DYNAMICANCHORING       
+       :       'DYNAMICANCHORING'       
+       ;
+
+BEFORE
+       :       'BEFORE'
+       ;
+
+AFTER
+       :       'AFTER'
+       ;
+
+IS     
+       :       'IS'     
+       ;
+
+
+STARTSWITH     
+       :       'STARTSWITH'     
+       ;
+
+ENDSWITH       
+       :       'ENDSWITH'       
+       ;
+
+
+
+NOT
+       :       'NOT'
+       ;
+
+ADD    :       'ADD';
+REMOVE :       'REMOVE';
+REMOVEDUPLICATE        :       'REMOVEDUPLICATE';
+MERGE  :       'MERGE';
+GET    :       'GET';
+GETLIST        :       'GETLIST';
+SIZE   :       'SIZE';
+MATCHEDTEXT    :       'MATCHEDTEXT';
+REMOVESTRING   :       'REMOVESTRING';
+CLEAR  :        'CLEAR';
+
+THEN 
+       :       '->'
+       ;
+
+BasicAnnotationType 
+       : 'COLON'| 'SW' | 'MARKUP' | 'PERIOD' | 'CW'| 'NUM' | 'QUESTION' | 
'SPECIAL' | 'CAP' | 'COMMA' | 'EXCLAMATION' | 'SEMICOLON' | 'NBSP'| 'AMP' |
+       '_' | 'SENTENCEEND' | 'W' | 'PM' | 'ANY' | 'ALL' | 'SPACE' | 'BREAK' 
+       ;
+       
+LogLevel:
+       'finest' | 'finer' | 'fine' | 'config' | 'info' | 'warning' | 'severe'
+       ;       
+
+OldColor 
+       : 'black' | 'maroon' | 'green' | 'olive' | 'navy' | 'purple' | 'teal' | 
'gray' | 'silver' | 'red' | 'lime' | 'yellow' | 'blue' | 'fuchsia' | 'aqua'
+       ;
+
+PackageString   :      'PACKAGE';
+ScriptString   :       'SCRIPT';
+EngineString   :       'ENGINE';
+BlockString    :       'BLOCK';
+AutomataBlockString    :       'RULES';
+TypeString     :       'TYPE';
+IntString      :       'INT';
+DoubleString   :       'DOUBLE';
+FloatString    :       'FLOAT';
+StringString   :       'STRING';
+BooleanString  :       'BOOLEAN';
+TypeSystemString:      'TYPESYSTEM';   
+SymbolString   :       'SYMBOL';
+CONDITION      :       'CONDITION';    
+ACTION         :       'ACTION';
+BOOLEANLIST 
+       :        'BOOLEANLIST';
+INTLIST :      'INTLIST';
+DOUBLELIST
+       :        'DOUBLELIST';
+FLOATLIST
+       :        'FLOATLIST';
+STRINGLIST
+       :       'STRINGLIST';   
+TYPELIST:      'TYPELIST';
+
+
+
+EXP    :       'EXP';
+LOGN   :       'LOGN';
+SIN    :       'SIN';
+COS    :       'COS';
+TAN    :       'TAN';
+XOR    :       'XOR';
+TRUE   :       'true';
+FALSE  :       'false';
+
+HexLiteral : '0' ('x'|'X') HexDigit+ IntegerTypeSuffix? ;
+
+DecimalLiteral : ('0' | '1'..'9' '0'..'9'*) IntegerTypeSuffix? ;
+
+OctalLiteral : '0' ('0'..'7')+ IntegerTypeSuffix? ;
+
+fragment
+HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ;
+
+fragment
+IntegerTypeSuffix : ('l'|'L') ;
+
+FloatingPointLiteral
+    :   ('0'..'9')+ '.' ('0'..'9')* Exponent? FloatTypeSuffix?
+    |   '.' ('0'..'9')+ Exponent? FloatTypeSuffix?
+    //|   ('0'..'9')+ Exponent FloatTypeSuffix?
+    //|   ('0'..'9')+ Exponent? FloatTypeSuffix
+       ;
+       
+fragment
+Exponent : ('e'|'E') ('+'|'-')? ('0'..'9')+ ;
+
+fragment
+FloatTypeSuffix : ('f'|'F'|'d'|'D') ;
+
+CharacterLiteral
+    :   '\'' ( EscapeSequence | ~('\''|'\\') ) '\''
+    ;
+
+StringLiteral
+    :  '"' ( EscapeSequence | ~('\\'|'"') )* '"'
+    ;
+
+RessourceLiteral
+    :  '\'' ( EscapeSequence | ~('\\'|'\'') )* '\''
+    ;
+
+fragment
+EscapeSequence
+    :   '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\')
+    |   UnicodeEscape
+    |   OctalEscape
+    ;
+
+fragment
+OctalEscape
+    :   '\\' ('0'..'3') ('0'..'7') ('0'..'7')
+    |   '\\' ('0'..'7') ('0'..'7')
+    |   '\\' ('0'..'7')
+    ;
+
+fragment
+UnicodeEscape
+    :   '\\' 'u' HexDigit HexDigit HexDigit HexDigit
+    ;
+
+       
+Identifier 
+    :   Letter (Letter|JavaIDDigit)*
+    ;
+
+
+fragment
+Letter
+    :  '\u0024' |
+       '\u0041'..'\u005a' |
+       '\u005f' |
+       '\u0061'..'\u007a' |
+       '\u00c0'..'\u00d6' |
+       '\u00d8'..'\u00f6' |
+       '\u00f8'..'\u00ff' |
+       '\u0100'..'\u1fff' |
+       '\u3040'..'\u318f' |
+       '\u3300'..'\u337f' |
+       '\u3400'..'\u3d2d' |
+       '\u4e00'..'\u9fff' |
+       '\uf900'..'\ufaff'
+    ;
+
+fragment
+JavaIDDigit
+    :  '\u0030'..'\u0039' |
+       '\u0660'..'\u0669' |
+       '\u06f0'..'\u06f9' |
+       '\u0966'..'\u096f' |
+       '\u09e6'..'\u09ef' |
+       '\u0a66'..'\u0a6f' |
+       '\u0ae6'..'\u0aef' |
+       '\u0b66'..'\u0b6f' |
+       '\u0be7'..'\u0bef' |
+       '\u0c66'..'\u0c6f' |
+       '\u0ce6'..'\u0cef' |
+       '\u0d66'..'\u0d6f' |
+       '\u0e50'..'\u0e59' |
+       '\u0ed0'..'\u0ed9' |
+       '\u1040'..'\u1049'
+   ;
+
+
+
+LPAREN : '(' {implicitLineJoiningLevel++;} ;
+
+RPAREN : ')' {implicitLineJoiningLevel--;} ;
+
+LBRACK : '[' {implicitLineJoiningLevel++;} ;
+
+RBRACK : ']' {implicitLineJoiningLevel--;} ;
+
+LCURLY : '{' {implicitLineJoiningLevel++;} ;
+
+RCURLY : '}' {implicitLineJoiningLevel--;} ;
+
+CIRCUMFLEX     : '^' ;
+
+AT : '@' ;
+
+DOT : '.' ;
+
+COLON  : ':' ;
+
+COMMA  : ',' ;
+
+SEMI   : ';' ;
+
+PLUS   : '+' ;
+
+MINUS  : '-' ;
+
+STAR   : '*' ;
+
+SLASH  : '/' ;
+
+VBAR   : '|' ;
+
+AMPER  : '&' ;
+
+LESS   : '<' ;
+
+GREATER        : '>' ;
+
+ASSIGN_EQUAL   : '=' ;
+
+PERCENT        : '%' ;
+
+QUESTION       : '?' ;
+
+EQUAL  : '==' ;
+
+NOTEQUAL       : '!=' ;
+
+ALT_NOTEQUAL: '<>' ;
+
+LESSEQUAL      : '<=' ;
+
+
+GREATEREQUAL   : '>=' ;
+
+WS  :  (' '|'\r'|'\t'|'\u000C'|'\n') {$channel=HIDDEN;}
+    ;
+
+
+
+
+
+
+
+COMMENT
+    :   '/*'{if (input.LA(1)=='*') $type=DocComment; else $channel=HIDDEN;} ( 
options {greedy=false;} : . )* '*/' 
+    ;
+
+LINE_COMMENT
+    : '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;}
+    ;
+
+
+
+    

Added: 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/antlr3/org/apache/uima/textmarker/ide/core/parser/TextMarkerLexer.tokens
URL: 
http://svn.apache.org/viewvc/uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/antlr3/org/apache/uima/textmarker/ide/core/parser/TextMarkerLexer.tokens?rev=1359109&view=auto
==============================================================================
--- 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/antlr3/org/apache/uima/textmarker/ide/core/parser/TextMarkerLexer.tokens
 (added)
+++ 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/antlr3/org/apache/uima/textmarker/ide/core/parser/TextMarkerLexer.tokens
 Mon Jul  9 12:30:22 2012
@@ -0,0 +1,151 @@
+STAR=138
+FloatTypeSuffix=113
+OctalLiteral=111
+LOG=37
+CONTAINS=8
+REMOVE=65
+GREATEREQUAL=151
+MARKFAST=41
+MATCHEDTEXT=71
+CONDITION=91
+COUNT=14
+LOGN=100
+DYNAMICANCHORING=57
+NOT=63
+Identifier=123
+ACTION=92
+NOTEQUAL=148
+CLEAR=73
+VBAR=140
+DOUBLELIST=95
+ENDSWITH=62
+RPAREN=125
+CREATE=31
+GREATER=143
+SIN=101
+EXP=99
+CURRENTCOUNT=16
+COS=102
+TAN=103
+TYPELIST=98
+FloatString=86
+LESS=142
+REGEXP=25
+GET=68
+PARTOF=22
+UNMARK=53
+LAST=18
+COMMENT=153
+REMOVEDUPLICATE=66
+UNMARKALL=54
+RBRACK=127
+NEAR=20
+LINE_COMMENT=154
+IntegerTypeSuffix=108
+MARKSCORE=39
+REMOVESTRING=72
+TRANSFER=55
+LCURLY=128
+TRIE=7
+FILTERTYPE=46
+STRINGLIST=97
+MARKONCE=40
+ScriptString=79
+EngineString=80
+WS=152
+WORDTABLE=11
+WORDLIST=10
+AutomataBlockString=82
+FloatingPointLiteral=114
+INTLIST=94
+OR=21
+JavaIDDigit=122
+FLOATLIST=96
+CALL=47
+Annotation=5
+FALSE=106
+LESSEQUAL=150
+RessourceLiteral=118
+VOTE=27
+Letter=121
+EscapeSequence=115
+SIZE=70
+BasicAnnotationType=75
+LBRACK=126
+CharacterLiteral=116
+DEL=36
+ATTRIBUTE=34
+TypeString=83
+Exponent=112
+ASSIGN_EQUAL=144
+RETAINTYPE=45
+AND=12
+TypeSystemString=89
+EXPAND=56
+BlockString=81
+IntString=84
+HexDigit=107
+COLOR=35
+LPAREN=124
+POSITION=24
+IF=28
+AT=131
+LogLevel=76
+CONFIGURE=49
+SLASH=139
+THEN=74
+FILL=33
+COMMA=134
+IS=60
+AMPER=141
+REPLACE=44
+GETLIST=69
+EQUAL=147
+GATHER=32
+INLIST=17
+PLUS=136
+BooleanString=88
+GETFEATURE=52
+DOT=132
+ListIdentifier=6
+PARTOFNEQ=23
+BOOLEANLIST=93
+ADD=64
+MARKTABLE=42
+HexLiteral=109
+XOR=104
+PERCENT=145
+MARK=38
+PARSE=30
+PackageString=78
+OldColor=77
+MARKLAST=43
+MERGE=67
+CONTEXTCOUNT=13
+BEFORE=58
+EXEC=48
+MINUS=137
+AFTER=59
+DecimalLiteral=110
+SEMI=135
+TRUE=105
+FEATURE=29
+SymbolString=90
+COLON=133
+StringLiteral=117
+StringString=87
+SCORE=26
+QUESTION=146
+UnicodeEscape=119
+RCURLY=129
+STARTSWITH=61
+ASSIGN=50
+TOTALCOUNT=15
+DECLARE=9
+DocComment=4
+MOFN=19
+OctalEscape=120
+SETFEATURE=51
+DoubleString=85
+CIRCUMFLEX=130
+ALT_NOTEQUAL=149

Modified: 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/antlr3/org/apache/uima/textmarker/ide/core/parser/TextMarkerParser.g
URL: 
http://svn.apache.org/viewvc/uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/antlr3/org/apache/uima/textmarker/ide/core/parser/TextMarkerParser.g?rev=1359109&r1=1359108&r2=1359109&view=diff
==============================================================================
--- 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/antlr3/org/apache/uima/textmarker/ide/core/parser/TextMarkerParser.g
 (original)
+++ 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/antlr3/org/apache/uima/textmarker/ide/core/parser/TextMarkerParser.g
 Mon Jul  9 12:30:22 2012
@@ -602,9 +602,23 @@ ruleElementComposed returns [ComposedRul
        ;
 
 ruleElementType returns [TextMarkerRuleElement re = null] 
-    :
+@init{
+List<TextMarkerCondition> dummyConds = new ArrayList<TextMarkerCondition>();
+}
+  :
     (typeExpression)=>idRef=typeExpression quantifier = quantifierPart? 
-        (LCURLY c = conditions? (THEN a = actions)? end = RCURLY)?
+        (LCURLY 
+        {
+        
+        dummyConds.add(ConditionFactory.createEmptyCondition(input.LT(1)));
+        } 
+        c = conditions? 
+        {
+        if(c==null) {
+               c = dummyConds;
+        }
+        }
+        (THEN a = actions)? end = RCURLY)?
         {
         // TODO handle quantifierPart.
         re = ScriptFactory.createRuleElement(idRef,quantifier,c,a,end);}
@@ -614,7 +628,11 @@ ruleElementType returns [TextMarkerRuleE
 ruleElementLiteral returns [TextMarkerRuleElement re = null] 
     :
     (simpleStringExpression)=>idRef=simpleStringExpression quantifier = 
quantifierPart? 
-        (LCURLY c = conditions? (THEN a = actions)? end = RCURLY)?
+        (LCURLY 
+
+        c = conditions? 
+        (THEN a = actions)? 
+        end = RCURLY)?
         {
         // TODO handle quantifierPart.
         re = ScriptFactory.createRuleElement(idRef,quantifier,c,a,end);}
@@ -622,8 +640,11 @@ ruleElementLiteral returns [TextMarkerRu
     ;
     
 conditions returns [List<TextMarkerCondition> conds = new 
ArrayList<TextMarkerCondition>()]
+@init {
+conds.add(ConditionFactory.createEmptyCondition(input.LT(1)));
+}
     :
-    c = condition {conds.add(c);} (COMMA c = condition {conds.add(c);} )*
+    c = condition {conds.remove(0);conds.add(c);} (COMMA c = condition 
{conds.add(c);} )*
     ;
 
   
@@ -760,6 +781,9 @@ simpleTypeListExpression returns [Expres
        ;       
        
 typeExpression returns [Expression expr = null]
+@init {
+expr = ExpressionFactory.createEmptyTypeExpression(input.LT(1));
+}
        :
        tf = typeFunction {expr = tf;}
        | st = simpleTypeExpression 
@@ -823,6 +847,9 @@ quantifierPart returns [List<Expression>
        
        
 condition returns [TextMarkerCondition result = null]
+@init {
+result = ConditionFactory.createEmptyCondition(input.LT(1));
+}
        :
        (
        c = conditionAnd
@@ -853,20 +880,20 @@ condition returns [TextMarkerCondition r
        | c = conditionPartOfNeq
        | c = conditionSize
        | (c = externalCondition)=> c = externalCondition
-       //| c = variableCondition
+       | c = variableCondition
        ) {result = c;}
        ;
        
 //TODO added rule
-//variableCondition returns [TextMarkerCondition condition = null]
-//     :               
-//     // also create condition for auto-completion
-//     //{isVariableOfType(input.LT(1).getText(), "CONDITION")}? 
-//     id = Identifier
-//     {
-//             condition = ConditionFactory.createCondition(id);
-//     }
-//     ;       
+variableCondition returns [TextMarkerCondition condition = null]
+       :               
+       // also create condition for auto-completion
+       //{isVariableOfType(input.LT(1).getText(), "CONDITION")}? 
+       id = Identifier
+       {
+               condition = ConditionFactory.createCondition(id);
+       }
+       ;       
        
        
 externalCondition returns [TextMarkerCondition condition = null]
@@ -1109,6 +1136,9 @@ conditionSize returns [TextMarkerConditi
 
        
 action returns [TextMarkerAction result = null]
+@init {
+result = ActionFactory.createEmptyAction(input.LT(1));
+}
        :
        (
        a = actionColor
@@ -1147,20 +1177,20 @@ action returns [TextMarkerAction result 
        | a = actionConfigure
        | a = actionDynamicAnchoring
        | (a = externalAction)=> a = externalAction
-       //| a = variableAction
+       | a = variableAction
        ) {result = a;}
        ;
 
 
-//variableAction returns [TextMarkerAction action = null]
-//     :
-//     // also create an dummy action for auto-completion
-//     //{isVariableOfType(input.LT(1).getText(), "ACTION")}?
-//      id = Identifier
-//     {
-//             action = ActionFactory.createAction(id);
-//     }
-//     ;
+variableAction returns [TextMarkerAction action = null]
+       :
+       // also create an dummy action for auto-completion
+       //{isVariableOfType(input.LT(1).getText(), "ACTION")}?
+        id = Identifier
+       {
+               action = ActionFactory.createAction(id);
+       }
+       ;
        
 externalAction returns [TextMarkerAction action = null]
        :
@@ -1777,6 +1807,9 @@ wordTableExpression returns [Expression 
 
 //seems OK
 numberExpression returns [Expression expr = null]
+@init {
+expr = ExpressionFactory.createEmptyNumberExpression(input.LT(1));
+}
        :
        e = additiveExpression
        {if(e!=null) expr = ExpressionFactory.createNumberExpression(e);}
@@ -1853,8 +1886,12 @@ numberVariable returns [Expression expr 
        
 //OK - interface to flag stringExpressions?
 stringExpression returns [Expression expr = null]
-@init {List<Expression> exprList = new ArrayList<Expression>();}
+@init {
+List<Expression> exprList = new ArrayList<Expression>();
+{expr = ExpressionFactory.createEmptyStringExpression(input.LT(1));}
+}
        :
+       
        e = stringFunction {expr = e;} 
        |
        strExpr1 = simpleStringExpression {if (strExpr1!=null) 
exprList.add(strExpr1);}
@@ -1906,6 +1943,9 @@ simpleStringExpression returns [Expressi
 
 //OK - interface to flag booleanExpressions?
 booleanExpression returns [Expression expr = null]
+@init{
+expr = ExpressionFactory.createEmptyBooleanExpression(input.LT(1));
+}
        :
        bcE = composedBooleanExpression {expr = bcE;}
        | sbE = simpleBooleanExpression {expr = sbE;}

Added: 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/antlr3/org/apache/uima/textmarker/ide/core/parser/TextMarkerParser.tokens
URL: 
http://svn.apache.org/viewvc/uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/antlr3/org/apache/uima/textmarker/ide/core/parser/TextMarkerParser.tokens?rev=1359109&view=auto
==============================================================================
--- 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/antlr3/org/apache/uima/textmarker/ide/core/parser/TextMarkerParser.tokens
 (added)
+++ 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/antlr3/org/apache/uima/textmarker/ide/core/parser/TextMarkerParser.tokens
 Mon Jul  9 12:30:22 2012
@@ -0,0 +1,151 @@
+STAR=138
+FloatTypeSuffix=113
+OctalLiteral=111
+LOG=37
+CONTAINS=8
+REMOVE=65
+GREATEREQUAL=151
+MARKFAST=41
+MATCHEDTEXT=71
+CONDITION=91
+COUNT=14
+LOGN=100
+DYNAMICANCHORING=57
+NOT=63
+Identifier=123
+ACTION=92
+NOTEQUAL=148
+CLEAR=73
+VBAR=140
+DOUBLELIST=95
+ENDSWITH=62
+RPAREN=125
+CREATE=31
+GREATER=143
+SIN=101
+EXP=99
+CURRENTCOUNT=16
+COS=102
+TAN=103
+TYPELIST=98
+FloatString=86
+LESS=142
+REGEXP=25
+GET=68
+PARTOF=22
+UNMARK=53
+LAST=18
+COMMENT=153
+REMOVEDUPLICATE=66
+UNMARKALL=54
+RBRACK=127
+NEAR=20
+LINE_COMMENT=154
+IntegerTypeSuffix=108
+MARKSCORE=39
+REMOVESTRING=72
+TRANSFER=55
+LCURLY=128
+TRIE=7
+FILTERTYPE=46
+STRINGLIST=97
+MARKONCE=40
+ScriptString=79
+EngineString=80
+WS=152
+WORDTABLE=11
+WORDLIST=10
+AutomataBlockString=82
+FloatingPointLiteral=114
+INTLIST=94
+OR=21
+JavaIDDigit=122
+FLOATLIST=96
+CALL=47
+Annotation=5
+FALSE=106
+LESSEQUAL=150
+RessourceLiteral=118
+VOTE=27
+Letter=121
+EscapeSequence=115
+SIZE=70
+BasicAnnotationType=75
+LBRACK=126
+CharacterLiteral=116
+DEL=36
+ATTRIBUTE=34
+TypeString=83
+Exponent=112
+ASSIGN_EQUAL=144
+RETAINTYPE=45
+AND=12
+TypeSystemString=89
+EXPAND=56
+BlockString=81
+IntString=84
+HexDigit=107
+COLOR=35
+LPAREN=124
+POSITION=24
+IF=28
+AT=131
+LogLevel=76
+CONFIGURE=49
+SLASH=139
+THEN=74
+FILL=33
+COMMA=134
+IS=60
+AMPER=141
+REPLACE=44
+GETLIST=69
+EQUAL=147
+GATHER=32
+INLIST=17
+PLUS=136
+BooleanString=88
+GETFEATURE=52
+DOT=132
+ListIdentifier=6
+PARTOFNEQ=23
+BOOLEANLIST=93
+ADD=64
+MARKTABLE=42
+HexLiteral=109
+XOR=104
+PERCENT=145
+MARK=38
+PARSE=30
+PackageString=78
+OldColor=77
+MARKLAST=43
+MERGE=67
+CONTEXTCOUNT=13
+BEFORE=58
+EXEC=48
+MINUS=137
+AFTER=59
+DecimalLiteral=110
+SEMI=135
+TRUE=105
+FEATURE=29
+SymbolString=90
+COLON=133
+StringLiteral=117
+StringString=87
+SCORE=26
+QUESTION=146
+UnicodeEscape=119
+RCURLY=129
+STARTSWITH=61
+ASSIGN=50
+TOTALCOUNT=15
+DECLARE=9
+DocComment=4
+MOFN=19
+OctalEscape=120
+SETFEATURE=51
+DoubleString=85
+CIRCUMFLEX=130
+ALT_NOTEQUAL=149

Modified: 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/core/codeassist/TextMarkerCompletionEngine.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/core/codeassist/TextMarkerCompletionEngine.java?rev=1359109&r1=1359108&r2=1359109&view=diff
==============================================================================
--- 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/core/codeassist/TextMarkerCompletionEngine.java
 (original)
+++ 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/core/codeassist/TextMarkerCompletionEngine.java
 Mon Jul  9 12:30:22 2012
@@ -42,6 +42,7 @@ import org.apache.uima.textmarker.ide.co
 import org.apache.uima.textmarker.ide.core.parser.TextMarkerParseUtils;
 import org.apache.uima.textmarker.ide.parser.ast.ComponentDeclaration;
 import org.apache.uima.textmarker.ide.parser.ast.ComponentReference;
+import org.apache.uima.textmarker.ide.parser.ast.TMExpressionConstants;
 import org.apache.uima.textmarker.ide.parser.ast.TMTypeConstants;
 import org.apache.uima.textmarker.ide.parser.ast.TextMarkerAction;
 import org.apache.uima.textmarker.ide.parser.ast.TextMarkerCondition;
@@ -56,6 +57,7 @@ import org.eclipse.core.resources.IResou
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.dltk.ast.ASTNode;
+import org.eclipse.dltk.ast.declarations.TypeDeclaration;
 import org.eclipse.dltk.codeassist.RelevanceConstants;
 import org.eclipse.dltk.codeassist.ScriptCompletionEngine;
 import org.eclipse.dltk.compiler.CharOperation;
@@ -66,8 +68,10 @@ import org.eclipse.dltk.core.IMethod;
 import org.eclipse.dltk.core.IModelElement;
 import org.eclipse.dltk.core.IType;
 import org.eclipse.dltk.core.ModelException;
+import org.eclipse.dltk.internal.core.ModelManager;
 import org.eclipse.dltk.internal.core.SourceField;
 import org.eclipse.dltk.internal.core.SourceMethod;
+import org.eclipse.dltk.internal.core.SourceModule;
 
 public class TextMarkerCompletionEngine extends ScriptCompletionEngine {
 
@@ -100,7 +104,7 @@ public class TextMarkerCompletionEngine 
   }
 
   public void complete(IModuleSource module, int position, int i) {
-    this.sourceModule =  module;
+    this.sourceModule = module;
     this.actualCompletionPosition = position;
     this.offset = i;
     this.requestor.beginReporting();
@@ -134,7 +138,7 @@ public class TextMarkerCompletionEngine 
           doCompletionOnVarRef(module, parsed, startPart, type,
                   ((TextMarkerVariableReference) node).getName());
           // TODO: only if first rule element
-          doCompletionOnDeclaration(module, startPart);
+          // doCompletionOnDeclaration(module, startPart);
         } else if (node instanceof ComponentDeclaration) {
           doCompletionOnComponentDeclaration(module, parsed, startPart,
                   ((ComponentDeclaration) node).getType(), startPart);
@@ -197,8 +201,8 @@ public class TextMarkerCompletionEngine 
           TextMarkerModuleDeclaration parsed, String startPart, int type, 
String complString)
           throws CoreException {
     if (type == ComponentDeclaration.SCRIPT) {
-      List<IFolder> scriptFolders = 
TextMarkerProjectUtils.getAllScriptFolders(sourceModule.getModelElement()
-              .getScriptProject());
+      List<IFolder> scriptFolders = 
TextMarkerProjectUtils.getAllScriptFolders(sourceModule
+              .getModelElement().getScriptProject());
 
       List<String> scripts = new ArrayList<String>();
       for (IFolder folder : scriptFolders) {
@@ -213,8 +217,8 @@ public class TextMarkerCompletionEngine 
         }
       }
     } else if (type == ComponentDeclaration.ENGINE) {
-      List<IFolder> descriptorFolders = 
TextMarkerProjectUtils.getAllDescriptorFolders(sourceModule.getModelElement()
-              .getScriptProject().getProject());
+      List<IFolder> descriptorFolders = 
TextMarkerProjectUtils.getAllDescriptorFolders(sourceModule
+              .getModelElement().getScriptProject().getProject());
       List<String> engines = new ArrayList<String>();
       for (IFolder folder : descriptorFolders) {
         try {
@@ -228,8 +232,8 @@ public class TextMarkerCompletionEngine 
         }
       }
     } else {
-      List<IFolder> descriptorFolders = 
TextMarkerProjectUtils.getAllDescriptorFolders(sourceModule.getModelElement()
-              .getScriptProject().getProject());
+      List<IFolder> descriptorFolders = 
TextMarkerProjectUtils.getAllDescriptorFolders(sourceModule
+              .getModelElement().getScriptProject().getProject());
       List<String> tss = new ArrayList<String>();
       for (IFolder folder : descriptorFolders) {
         try {
@@ -390,7 +394,7 @@ public class TextMarkerCompletionEngine 
     String[] keywords = 
TextMarkerKeywordsManager.getKeywords(ITextMarkerKeywords.ACTION);
     for (String string : keywords) {
       if (match(complString, string)) {
-        addProposal(complString, string, 
CompletionProposal.METHOD_NAME_REFERENCE);
+        addProposal(complString, string + "()", string, 
CompletionProposal.METHOD_NAME_REFERENCE);
       }
     }
   }
@@ -403,7 +407,7 @@ public class TextMarkerCompletionEngine 
     String[] keywords = 
TextMarkerKeywordsManager.getKeywords(ITextMarkerKeywords.CONDITION);
     for (String string : keywords) {
       if (match(complString, string)) {
-        addProposal(complString, string, 
CompletionProposal.METHOD_NAME_REFERENCE);
+        addProposal(complString, string + "()", string, 
CompletionProposal.METHOD_NAME_REFERENCE);
       }
     }
   }
@@ -411,47 +415,44 @@ public class TextMarkerCompletionEngine 
   private void doCompletionOnVarRef(IModuleSource cu, 
TextMarkerModuleDeclaration parsed,
           String startPart, int type, String complString) {
     Collection<String> types = new HashSet<String>();
-    try {
-      IPath path = sourceModule.getModelElement().getPath();
-      path = path.removeFirstSegments(2);
-      types = importTypeSystem(path.toPortableString(), 
sourceModule.getModelElement().getScriptProject()
-              .getProject());
-    } catch (Exception e) {
-    }
-    for (String string : types) {
-      if (match(complString, string)) {
-        addProposal(complString, string, CompletionProposal.TYPE_REF);
+    if (type == TMTypeConstants.TM_TYPE_AT) {
+      try {
+        IPath path = sourceModule.getModelElement().getPath();
+        path = path.removeFirstSegments(2);
+        types = importTypeSystem(path.toPortableString(), 
sourceModule.getModelElement()
+                .getScriptProject().getProject());
+      } catch (Exception e) {
+      }
+      for (String string : types) {
+        if (match(complString, string)) {
+          addProposal(complString, string, CompletionProposal.TYPE_REF);
+        }
+      }
+    } else {
+      IModelElement modelElement = sourceModule.getModelElement();
+      if (modelElement instanceof SourceModule) {
+        SourceModule sm = (SourceModule) modelElement;
+        try {
+          IField[] fields = sm.getFields();
+          for (IField iField : fields) {
+            SourceField f = (SourceField) iField;
+            int fieldType = TextMarkerParseUtils.getTypeOfIModelElement(f);
+            if (TMTypeConstants.TM_TYPE_N == type) {
+              if (fieldType == TMTypeConstants.TM_TYPE_N || fieldType == 
TMTypeConstants.TM_TYPE_I
+                      || fieldType == TMTypeConstants.TM_TYPE_D
+                      || fieldType == TMTypeConstants.TM_TYPE_F) {
+                addProposal(complString, f.getElementName(), 
CompletionProposal.LOCAL_VARIABLE_REF);
+              }
+            } else if (type == fieldType) {
+              addProposal(complString, f.getElementName(), 
CompletionProposal.LOCAL_VARIABLE_REF);
+            }
+
+          }
+        } catch (ModelException e) {
+        }
+
       }
     }
-//    try {
-//      if (cu != null) {
-//        IField[] fieldsArray = sourceModule.getModelElement().getFields();
-//        for (IField field : fieldsArray) {
-//          // if (type != TMTypeConstants.TM_TYPE_AT && 
Flags.isPrivate(field.getFlags())
-//          // || (type & TMTypeConstants.TM_TYPE_AT) != 0 && 
Flags.isPublic(field.getFlags())) {
-//          if ((type & TextMarkerParseUtils.getTypeOfIModelElement(field)) != 
0) {
-//            addProposal(complString, new ArrayList<String>(), field);
-//          }
-//        }
-//        List<IField> fields = new ArrayList<IField>();
-//        IModelElement[] children = 
sourceModule.getModelElement().getChildren();
-//        for (IModelElement iModelElement : children) {
-//          if (iModelElement instanceof SourceMethod) {
-//            collectFields((SourceMethod) iModelElement, fields);
-//          }
-//        }
-//        for (IField field : fields) {
-//          // if (type != TMTypeConstants.TM_TYPE_AT && 
Flags.isPrivate(field.getFlags())
-//          // || (type & TMTypeConstants.TM_TYPE_AT) != 0 && 
Flags.isPublic(field.getFlags())) {
-//          // if ((type & TextMarkerParseUtils.getTypeOfIModelElement(field)) 
!= 0) {
-//          if (!types.contains(field.getElementName())) {
-//            addProposal(complString, new ArrayList<String>(), field);
-//          }
-          // }
-//        }
-//      }
-//    } catch (ModelException e) {
-//    }
   }
 
   private boolean match(String complString, String string) {
@@ -498,35 +499,35 @@ public class TextMarkerCompletionEngine 
    * @param cu
    */
   private void suggestFields(IModuleSource cu) {
-//    try {
-//      if (cu != null) {
-//        IField[] fieldsArray = sourceModule.getFields();
-//        for (IField field : fieldsArray) {
-//          int relevance = RelevanceConstants.R_EXACT_EXPECTED_TYPE;
-//          // accept result
-//          super.noProposal = false;
-//          int kind = CompletionProposal.LOCAL_VARIABLE_REF;
-//          if (!super.requestor.isIgnored(kind)) {
-//            CompletionProposal proposal = super.createProposal(kind, 
actualCompletionPosition);
-//            proposal.setRelevance(relevance);
-//            proposal.setModelElement(field);
-//            proposal.setName(field.getElementName());
-//            proposal.setCompletion(field.getElementName());
-//            proposal.setReplaceRange(this.startPosition - this.offset, 
this.endPosition
-//                    - this.offset);
-//            try {
-//              proposal.setFlags(field.getFlags());
-//            } catch (ModelException e) {
-//            }
-//            this.requestor.accept(proposal);
-//            if (DEBUG) {
-//              this.printDebug(proposal);
-//            }
-//          }
-//        }
-//      }
-//    } catch (ModelException e) {
-//    }
+    // try {
+    // if (cu != null) {
+    // IField[] fieldsArray = sourceModule.getFields();
+    // for (IField field : fieldsArray) {
+    // int relevance = RelevanceConstants.R_EXACT_EXPECTED_TYPE;
+    // // accept result
+    // super.noProposal = false;
+    // int kind = CompletionProposal.LOCAL_VARIABLE_REF;
+    // if (!super.requestor.isIgnored(kind)) {
+    // CompletionProposal proposal = super.createProposal(kind, 
actualCompletionPosition);
+    // proposal.setRelevance(relevance);
+    // proposal.setModelElement(field);
+    // proposal.setName(field.getElementName());
+    // proposal.setCompletion(field.getElementName());
+    // proposal.setReplaceRange(this.startPosition - this.offset, 
this.endPosition
+    // - this.offset);
+    // try {
+    // proposal.setFlags(field.getFlags());
+    // } catch (ModelException e) {
+    // }
+    // this.requestor.accept(proposal);
+    // if (DEBUG) {
+    // this.printDebug(proposal);
+    // }
+    // }
+    // }
+    // }
+    // } catch (ModelException e) {
+    // }
   }
 
   /**
@@ -541,7 +542,7 @@ public class TextMarkerCompletionEngine 
     if (CharOperation.camelCaseMatch(complString.toCharArray(), fieldName)
             || match(complString, field.getElementName())) {
 
-      int relevance = RelevanceConstants.R_DEFAULT +1;
+      int relevance = RelevanceConstants.R_DEFAULT + 1;
       relevance += computeRelevanceForCaseMatching(complFragment, 
field.getElementName());
 
       // accept result
@@ -567,6 +568,10 @@ public class TextMarkerCompletionEngine 
   }
 
   private void addProposal(String complString, String string, int kind) {
+    addProposal(complString, string, string, kind);
+  }
+
+  private void addProposal(String complString, String string, String name, int 
kind) {
     char[] fieldName = string.toCharArray();
     char[] complFragment = complString.toCharArray();
 
@@ -576,7 +581,7 @@ public class TextMarkerCompletionEngine 
     }
     if (CharOperation.camelCaseMatch(pattern, fieldName) || match(complString, 
string)) {
 
-      int relevance = RelevanceConstants.R_DEFAULT +1;
+      int relevance = RelevanceConstants.R_DEFAULT + 1;
       relevance += computeRelevanceForCaseMatching(complFragment, string);
 
       // accept result
@@ -584,7 +589,7 @@ public class TextMarkerCompletionEngine 
       if (!super.requestor.isIgnored(kind)) {
         CompletionProposal proposal = super.createProposal(kind, 
actualCompletionPosition);
         proposal.setRelevance(relevance);
-        proposal.setName(string);
+        proposal.setName(name);
         proposal.setCompletion(string);
         proposal.setReplaceRange(this.startPosition - this.offset, 
this.endPosition - this.offset);
         // try {
@@ -608,9 +613,7 @@ public class TextMarkerCompletionEngine 
     for (int a = 0; a < keywords.size(); a++) {
       keyWordsArray[a] = keywords.get(a).toCharArray();
     }
-    findKeywords(startPart.toCharArray(), keywords.toArray( new String[0]), 
true);
+    findKeywords(startPart.toCharArray(), keywords.toArray(new String[0]), 
true);
   }
 
- 
-
 }

Modified: 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/core/codeassist/TextMarkerReferenceVisitor.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/core/codeassist/TextMarkerReferenceVisitor.java?rev=1359109&r1=1359108&r2=1359109&view=diff
==============================================================================
--- 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/core/codeassist/TextMarkerReferenceVisitor.java
 (original)
+++ 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/core/codeassist/TextMarkerReferenceVisitor.java
 Mon Jul  9 12:30:22 2012
@@ -23,6 +23,7 @@ import org.apache.uima.textmarker.ide.pa
 import org.apache.uima.textmarker.ide.parser.ast.ComponentReference;
 import org.apache.uima.textmarker.ide.parser.ast.TextMarkerAction;
 import org.apache.uima.textmarker.ide.parser.ast.TextMarkerCondition;
+import org.apache.uima.textmarker.ide.parser.ast.TextMarkerExpression;
 import org.apache.uima.textmarker.ide.parser.ast.TextMarkerVariableReference;
 import org.eclipse.dltk.ast.ASTNode;
 import org.eclipse.dltk.ast.ASTVisitor;
@@ -57,10 +58,19 @@ public class TextMarkerReferenceVisitor 
     } else if (s instanceof TextMarkerAction && ((TextMarkerAction) 
s).getNameStart() <= start
             && start <= ((TextMarkerAction) s).getNameEnd()) {
       result = s;
+    } else if (s instanceof TextMarkerAction && ((TextMarkerAction) 
s).getNameStart()-1 == start
+            && start == ((TextMarkerAction) s).getNameEnd()-1) {
+      result = s;
     } else if (s instanceof TextMarkerCondition
             && ((TextMarkerCondition) s).getNameStart() <= start
             && start <= ((TextMarkerCondition) s).getNameEnd()) {
       result = s;
+    } else if (s instanceof TextMarkerCondition
+            && ((TextMarkerCondition) s).getNameStart()-1 == start
+            && start == ((TextMarkerCondition) s).getNameEnd()-1) {
+      result = s;
+    } else if(s instanceof TextMarkerExpression && s.sourceStart() == start && 
s.sourceEnd() == start) {
+      result = s;
     }
     return super.visit(s);
   }

Modified: 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/formatter/TextMarkerFormatter.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/formatter/TextMarkerFormatter.java?rev=1359109&r1=1359108&r2=1359109&view=diff
==============================================================================
--- 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/formatter/TextMarkerFormatter.java
 (original)
+++ 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/formatter/TextMarkerFormatter.java
 Mon Jul  9 12:30:22 2012
@@ -90,8 +90,8 @@ public class TextMarkerFormatter extends
     if (!reporter.gotProblems()) {
 
       BitSet bs = new BitSet();
-      bs.add(TextMarkerParser.LINE_COMMENT);
-      bs.add(TextMarkerParser.COMMENT);
+      bs.add(org.apache.uima.textmarker.parser.TextMarkerParser.LINE_COMMENT);
+      bs.add(org.apache.uima.textmarker.parser.TextMarkerParser.COMMENT);
       List<CommonToken> comments = tokenStream.getTokens(0, 
tokenStream.size(), bs);
 
       final String output = format(input, (ModuleDeclaration)md, comments, 
indent);

Modified: 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/ActionFactory.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/ActionFactory.java?rev=1359109&r1=1359108&r2=1359109&view=diff
==============================================================================
--- 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/ActionFactory.java
 (original)
+++ 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/ActionFactory.java
 Mon Jul  9 12:30:22 2012
@@ -66,6 +66,12 @@ public class ActionFactory extends Abstr
     return createAction(type, listOfExpressions);
   }
 
+  public static TextMarkerAction createEmptyAction(Token token) {
+    int bounds[] = getBounds(token);
+    return new TextMarkerAction(bounds[0], bounds[0], new 
ArrayList<Expression>(),
+            TMConditionConstants.CONSTANT_OFFSET, "", bounds[0], bounds[0]);
+  }
+  
   public static TextMarkerAction createAction(Token type, Map<Expression, 
Expression> map,
           Expression... exprsArray) {
     List<Expression> listOfExpressions = new ArrayList<Expression>();

Modified: 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/ConditionFactory.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/ConditionFactory.java?rev=1359109&r1=1359108&r2=1359109&view=diff
==============================================================================
--- 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/ConditionFactory.java
 (original)
+++ 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/ConditionFactory.java
 Mon Jul  9 12:30:22 2012
@@ -15,7 +15,7 @@
  * KIND, either express or implied.  See the License for the
  * specific language governing permissions and limitations
  * under the License.
-*/
+ */
 
 package org.apache.uima.textmarker.ide.parser.ast;
 
@@ -25,7 +25,6 @@ import java.util.List;
 import org.antlr.runtime.Token;
 import org.eclipse.dltk.ast.expressions.Expression;
 
-
 public class ConditionFactory extends AbstractFactory {
 
   public static TextMarkerCondition createCondition(Token type, List exprs) {
@@ -59,6 +58,12 @@ public class ConditionFactory extends Ab
     return createCondition(type, exprL);
   }
 
+  public static TextMarkerCondition createEmptyCondition(Token token) {
+    int bounds[] = getBounds(token);
+    return new TextMarkerCondition(bounds[0], bounds[0], new 
ArrayList<Expression>(),
+            TMConditionConstants.CONSTANT_OFFSET, "", bounds[0], bounds[0]);
+  }
+
   // public static TextMarkerCondition createConditionAnd(int start, int end,
   // DLTKToken token, List<TextMarkerCondition> conds,
   // TextMarkerBlock parent) {

Modified: 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/ExpressionFactory.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/ExpressionFactory.java?rev=1359109&r1=1359108&r2=1359109&view=diff
==============================================================================
--- 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/ExpressionFactory.java
 (original)
+++ 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/ExpressionFactory.java
 Mon Jul  9 12:30:22 2012
@@ -113,6 +113,22 @@ public class ExpressionFactory extends A
     return new TextMarkerExpression(e.sourceStart(), e.sourceEnd(), e, 
TMTypeConstants.TM_TYPE_AT);
   }
 
+  public static Expression createEmptyTypeExpression(Token token) {
+    int bounds[] = getBounds(token);
+    return new TextMarkerVariableReference(bounds[0], bounds[0], "", 
TMTypeConstants.TM_TYPE_AT);
+  }
+  public static Expression createEmptyStringExpression(Token token) {
+    int bounds[] = getBounds(token);
+    return new TextMarkerVariableReference(bounds[0], bounds[0], "", 
TMTypeConstants.TM_TYPE_S);
+  }
+  public static Expression createEmptyNumberExpression(Token token) {
+    int bounds[] = getBounds(token);
+    return new TextMarkerVariableReference(bounds[0], bounds[0], "", 
TMTypeConstants.TM_TYPE_N);
+  }
+  public static Expression createEmptyBooleanExpression(Token token) {
+    int bounds[] = getBounds(token);
+    return new TextMarkerVariableReference(bounds[0], bounds[0], "", 
TMTypeConstants.TM_TYPE_B);
+  }
   // public static Expression createSimpleTypeExpression(Token at, 
TextMarkerBlock env) {
   // int bounds[] = getBounds(at);
   // return new TextMarkerSimpleTypeExpression(bounds[0], bounds[1], 
at.getText());
@@ -325,4 +341,6 @@ public class ExpressionFactory extends A
     return createStringExpression(list);
   }
 
+  
+
 }

Modified: 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/validator/TextMarkerCheckerProblemFactory.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/validator/TextMarkerCheckerProblemFactory.java?rev=1359109&r1=1359108&r2=1359109&view=diff
==============================================================================
--- 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/validator/TextMarkerCheckerProblemFactory.java
 (original)
+++ 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/validator/TextMarkerCheckerProblemFactory.java
 Mon Jul  9 12:30:22 2012
@@ -22,6 +22,8 @@ package org.apache.uima.textmarker.ide.v
 import java.util.List;
 
 import org.apache.uima.textmarker.ide.parser.ast.TextMarkerAbstractDeclaration;
+import org.apache.uima.textmarker.ide.parser.ast.TextMarkerAction;
+import org.apache.uima.textmarker.ide.parser.ast.TextMarkerCondition;
 import org.apache.uima.textmarker.ide.parser.ast.TextMarkerFeatureDeclaration;
 import org.apache.uima.textmarker.ide.parser.ast.TextMarkerVariableReference;
 import org.eclipse.dltk.ast.ASTListNode;
@@ -80,7 +82,8 @@ public class TextMarkerCheckerProblemFac
             getLine(node), severity);
   }
 
-  public IProblem createDuplicateShortName(TextMarkerAbstractDeclaration var, 
ProblemSeverity severity) {
+  public IProblem createDuplicateShortName(TextMarkerAbstractDeclaration var,
+          ProblemSeverity severity) {
     return new TextMarkerCheckerDefaultProblem(this.fileName, "The type " + 
var.getName()
             + " conflicts with other types with same short name, but different 
namespace.", var,
             getLine(var), severity);
@@ -159,4 +162,15 @@ public class TextMarkerCheckerProblemFac
             + "\" is final and cannot be used as a parent type.";
     return new TextMarkerCheckerDefaultProblem(this.fileName, message, parent, 
getLine(parent));
   }
+
+  public IProblem createUnknownConditionProblem(TextMarkerCondition cond) {
+    String message = "error: Condition \"" + cond.getName() + "\" is not 
defined.";
+    return new TextMarkerCheckerDefaultProblem(this.fileName, message, cond, 
getLine(cond));
+  }
+
+  public IProblem createUnknownActionProblem(TextMarkerAction action) {
+    String message = "error: Action \"" + action.getName() + "\" is not 
defined.";
+    return new TextMarkerCheckerDefaultProblem(this.fileName, message, action, 
getLine(action));
+  }
+
 }

Modified: 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/validator/TextMarkerVarRefChecker.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/validator/TextMarkerVarRefChecker.java?rev=1359109&r1=1359108&r2=1359109&view=diff
==============================================================================
--- 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/validator/TextMarkerVarRefChecker.java
 (original)
+++ 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-ide/src/main/java/org/apache/uima/textmarker/ide/validator/TextMarkerVarRefChecker.java
 Mon Jul  9 12:30:22 2012
@@ -34,6 +34,9 @@ import org.apache.uima.resource.Resource
 import org.apache.uima.resource.metadata.FeatureDescription;
 import org.apache.uima.resource.metadata.TypeDescription;
 import org.apache.uima.resource.metadata.TypeSystemDescription;
+import org.apache.uima.textmarker.ide.core.ITextMarkerKeywords;
+import org.apache.uima.textmarker.ide.core.TextMarkerKeywords;
+import org.apache.uima.textmarker.ide.core.TextMarkerKeywordsManager;
 import org.apache.uima.textmarker.ide.core.builder.TextMarkerProjectUtils;
 import org.apache.uima.textmarker.ide.parser.ast.TMActionConstants;
 import org.apache.uima.textmarker.ide.parser.ast.TMTypeConstants;
@@ -199,6 +202,16 @@ public class TextMarkerVarRefChecker imp
       // check assign types
       if (s instanceof TextMarkerAction) {
         TextMarkerAction tma = (TextMarkerAction) s;
+        
+        String actionName = 
currentFile.getSource().substring(tma.getNameStart(),
+                tma.getNameEnd());
+        String[] keywords = 
TextMarkerKeywordsManager.getKeywords(ITextMarkerKeywords.ACTION);
+        List<String> asList = Arrays.asList(keywords);
+        if(!"".equals(actionName) && !asList.contains(actionName)) {
+          IProblem problem = problemFactory.createUnknownActionProblem(tma);
+          rep.reportProblem(problem);
+        }
+        
         if (tma.getKind() == TMActionConstants.A_ASSIGN) {
           List<?> childs = tma.getChilds();
           try {
@@ -248,6 +261,13 @@ public class TextMarkerVarRefChecker imp
         TextMarkerCondition cond = (TextMarkerCondition) s;
         String conditionName = 
currentFile.getSource().substring(cond.getNameStart(),
                 cond.getNameEnd());
+        String[] keywords = 
TextMarkerKeywordsManager.getKeywords(ITextMarkerKeywords.CONDITION);
+        List<String> asList = Arrays.asList(keywords);
+        if(!"".equals(conditionName) && !asList.contains(conditionName)) {
+          IProblem problem = 
problemFactory.createUnknownConditionProblem(cond);
+          rep.reportProblem(problem);
+        }
+        
         if (conditionName.equals("FEATURE")) {
           if (matchedType != null) {
             List<?> args = cond.getChilds();


Reply via email to