You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by pk...@apache.org on 2016/01/13 18:30:09 UTC
svn commit: r1724465 - in /uima/ruta/trunk:
ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/
ruta-core/src/main/java/org/apache/uima/ruta/
ruta-core/src/main/java/org/apache/uima/ruta/action/
ruta-core/src/main/java/org/apache/uima/ruta/condition...
Author: pkluegl
Date: Wed Jan 13 17:30:09 2016
New Revision: 1724465
URL: http://svn.apache.org/viewvc?rev=1724465&view=rev
Log:
UIMA-4735
- macros for actions and conditions
Added:
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/MacroAction.java (with props)
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/MacroCondition.java (with props)
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/MacroConditionTest.java (with props)
uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaMacroDeclaration.java (with props)
Modified:
uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaEnvironment.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/ActionFactory.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/AssignAction.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/ImplicitVariableAssignmentAction.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ConditionFactory.java
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/action/MacroActionTest.java
uima/ruta/trunk/ruta-docbook/src/docbook/tools.ruta.language.syntax.xml
uima/ruta/trunk/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/LanguageCheckerVisitor.java
uima/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g
uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/RutaExtensionManager.java
uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/RutaKeywords.java
uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaExpressionList.java
uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaStatement.java
uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaTypeConstants.java
uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaUnaryArithmeticExpression.java
uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/StatementFactory.java
Modified: uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g?rev=1724465&r1=1724464&r2=1724465&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g (original)
+++ uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g Wed Jan 13 17:30:09 2016
@@ -385,11 +385,22 @@ public void setExternalFactory(RutaExter
}
-
- private void addActionMacro(RutaBlock env, String text, Map<String,String> def, List<AbstractRutaAction> as) {
- int i = 0;
+
+ private void addMacroAction(RutaBlock env, String name, Map<String,String> def, List<AbstractRutaAction> as) {
+ env.getEnvironment().addMacroAction(name, def, as);
}
-
+
+ private boolean isMacroAction(String name, RutaBlock env) {
+ return env.getEnvironment().isMacroAction(name);
+ }
+
+ private void addMacroCondition(RutaBlock env, String name, Map<String,String> def, List<AbstractRutaCondition> cs) {
+ env.getEnvironment().addMacroCondition(name, def, cs);
+ }
+
+ private boolean isMacroCondition(String name, RutaBlock env) {
+ return env.getEnvironment().isMacroCondition(name);
+ }
private Map<String,String> temporaryVariables = new HashMap<>();
@@ -415,6 +426,8 @@ public void setExternalFactory(RutaExter
}
}
+
+
}
@rulecatch {
@@ -479,8 +492,8 @@ statement returns [RutaStatement stmt =
:
( stmtDecl = declaration {stmt = stmtDecl;}
| stmtVariable = variableDeclaration {stmt = stmtVariable;}
- | stmtCM = conditionMacroDeclaration {stmt = stmtCM;}
- | stmtAM = actionMacroDeclaration {stmt = stmtAM;}
+ | stmtCM = macroConditionDeclaration {stmt = stmtCM;}
+ | stmtAM = macroActionDeclaration {stmt = stmtAM;}
| stmtRule = simpleStatement {stmt = stmtRule;}
| stmtBlock = blockDeclaration {stmt = stmtBlock;}
| stmtExternal = externalBlock {stmt = stmtExternal;}
@@ -571,16 +584,23 @@ List<String> vars = new ArrayList<String
;
-conditionMacroDeclaration returns [RutaStatement stmt = null]
- :
- type = CONDITION id = Identifier ASSIGN_EQUAL LPAREN cons = conditions RPAREN SEMI
- {addVariable($blockDeclaration::env, id.getText(), type.getText());
- AbstractRutaCondition condition = ConditionFactory.createConditionAnd(cons,$blockDeclaration::env);
- setValue($blockDeclaration::env, id.getText(), condition);}
+macroConditionDeclaration returns [RutaStatement stmt = null]
+@init {
+Map<String,String> def = new LinkedHashMap<>();
+}
+ :
+ CONDITION name = Identifier
+ LPAREN
+ (argType = varTypeToken argName = Identifier {def.put(argName.getText(),argType.getText());}
+ (COMMA argType = varTypeToken argName = Identifier {def.put(argName.getText(),argType.getText());})*)?
+ {addTemporaryVariables(def);}
+ RPAREN ASSIGN_EQUAL cs = conditions SEMI
+ {removeTemporaryVariables(def);}
+ {addMacroCondition($blockDeclaration::env, name.getText(), def, cs);}
;
-actionMacroDeclaration returns [RutaStatement stmt = null]
+macroActionDeclaration returns [RutaStatement stmt = null]
@init {
Map<String,String> def = new LinkedHashMap<>();
}
@@ -592,8 +612,7 @@ Map<String,String> def = new LinkedHashM
{addTemporaryVariables(def);}
RPAREN ASSIGN_EQUAL as = actions SEMI
{removeTemporaryVariables(def);}
- {addActionMacro($blockDeclaration::env, name.getText(), def, as);}
-
+ {addMacroAction($blockDeclaration::env, name.getText(), def, as);}
;
varTypeToken returns [Token token = null ]
@@ -1385,21 +1404,11 @@ condition returns [AbstractRutaConditio
| (featureMatchExpression2)=> f = featureMatchExpression2 {c = ConditionFactory.createImplicitCondition(f);}
| (booleanExpression)=> b = booleanExpression {c = ConditionFactory.createImplicitCondition(b);}
| (c = externalCondition)=> c = externalCondition
-
-// | c = variableCondition
+ | (c = macroCondition)=> c = macroCondition
) {result = c;}
;
-//variableCondition returns [AbstractRutaCondition condition = null]
-// :
-//
-// id = Identifier
-// {
-// condition = ConditionFactory.createConditionVariable(id);
-// }
-// ;
-
externalCondition returns [AbstractRutaCondition condition = null]
:
{isConditionExtension(input.LT(1).getText())}?
@@ -1409,6 +1418,14 @@ externalCondition returns [AbstractRutaC
}
;
+macroCondition returns [AbstractRutaCondition condition = null]
+ :
+ {isMacroCondition(input.LT(1).getText(), $blockDeclaration::env)}?
+ id = Identifier LPAREN args = varArgumentList? RPAREN
+ {
+ condition = ConditionFactory.createMacroCondition(id, args, $blockDeclaration::env);
+ }
+ ;
conditionAnd returns [AbstractRutaCondition cond = null]
:
AND LPAREN conds = conditions RPAREN
@@ -1654,6 +1671,7 @@ action returns [AbstractRutaAction resu
| a = actionRemoveFilterType
| (variableAssignmentAction)=> vae = variableAssignmentAction {a = vae;}
| (externalAction)=> a = externalAction
+ | (macroAction)=> a = macroAction
| (featureAssignmentExpression)=> fae = featureAssignmentExpression {a = ActionFactory.createAction(fae);}
| (typeExpression)=> te = typeExpression {a = ActionFactory.createAction(te);}
@@ -1708,19 +1726,11 @@ rawAction returns [AbstractRutaAction r
| a = actionAddFilterType
| a = actionRemoveFilterType
| (externalAction)=> a = externalAction
-
-// | a = variableAction
+ | (macroAction)=> a = macroAction
) {result = a;}
;
-//variableAction returns [AbstractRutaAction action = null]
-// :
-//
-// id = Identifier
-// {
-// action = ActionFactory.createActionVariable(id);
-// }
-// ;
+
externalAction returns [AbstractRutaAction action = null]
@@ -1732,7 +1742,14 @@ externalAction returns [AbstractRutaActi
}
;
-
+macroAction returns [AbstractRutaAction action = null]
+ :
+ {isMacroAction(input.LT(1).getText(), $blockDeclaration::env)}?
+ id = Identifier LPAREN args = varArgumentList? RPAREN
+ {
+ action = ActionFactory.createMacroAction(id, args, $blockDeclaration::env);
+ }
+ ;
actionCreate returns [AbstractRutaAction action = null]
@init {
@@ -2600,8 +2617,8 @@ composedBooleanExpression returns [IBool
:
(e2 = booleanCompare)=> e2 = booleanCompare {expr = e2;}
- | (bte = booleanTypeExpression)=> bte = booleanTypeExpression{expr = bte;}
| (bne = booleanNumberExpression)=> bne = booleanNumberExpression{expr = bne;}
+ | (bte = booleanTypeExpression)=> bte = booleanTypeExpression{expr = bte;}
| e1 = booleanFunction {expr = e1;}
| LPAREN ep = booleanExpression RPAREN {expr = ep;}
;
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaEnvironment.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaEnvironment.java?rev=1724465&r1=1724464&r2=1724465&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaEnvironment.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaEnvironment.java Wed Jan 13 17:30:09 2016
@@ -35,6 +35,8 @@ import java.util.logging.Level;
import java.util.logging.Logger;
import org.antlr.runtime.CommonToken;
+import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.apache.commons.lang3.tuple.Pair;
import org.apache.uima.UIMAFramework;
import org.apache.uima.UimaContext;
import org.apache.uima.cas.CAS;
@@ -145,6 +147,10 @@ public class RutaEnvironment {
private Map<String, Class<?>> availableListTypes;
+ private Map<String, Pair<Map<String, String>, List<AbstractRutaCondition>>> macroConditions;
+
+ private Map<String, Pair<Map<String, String>, List<AbstractRutaAction>>> macroActions;
+
private String[] resourcePaths = null;
private CAS cas;
@@ -169,6 +175,8 @@ public class RutaEnvironment {
variableValues = new HashMap<String, Object>();
variableTypes = new HashMap<String, Class<?>>();
variableGenericTypes = new HashMap<String, Class<?>>();
+ macroConditions = new HashMap<>();
+ macroActions = new HashMap<>();
availableTypes = new HashMap<String, Class<?>>();
availableTypes.put("ANNOTATION", AnnotationFS.class);
availableTypes.put("INT", Integer.class);
@@ -644,7 +652,7 @@ public class RutaEnvironment {
return tables.get(table);
}
- public void addVariable(String name, Class<?> type, Class<?> generic) {
+ private void addVariable(String name, Class<?> type, Class<?> generic) {
variableTypes.put(name, type);
if (generic != null) {
variableGenericTypes.put(name, generic);
@@ -688,6 +696,12 @@ public class RutaEnvironment {
public void addVariable(String name, String type) {
addVariable(name, availableTypes.get(type), availableListTypes.get(type));
}
+
+ public void removeVariable(String name) {
+ variableTypes.remove(name);
+ variableGenericTypes.remove(name);
+ variableValues.remove(name);
+ }
public boolean ownsVariable(String name) {
return variableTypes.containsKey(name);
@@ -906,4 +920,30 @@ public class RutaEnvironment {
this.resourceManager = resourceManager;
}
+ public void addMacroAction(String name, Map<String, String> def, List<AbstractRutaAction> actions) {
+ macroActions.put(name, new ImmutablePair<Map<String, String>, List<AbstractRutaAction>>(def,
+ actions));
+ }
+
+ public void addMacroCondition(String name, Map<String, String> def,
+ List<AbstractRutaCondition> conditions) {
+ macroConditions.put(name, new ImmutablePair<Map<String, String>, List<AbstractRutaCondition>>(
+ def, conditions));
+ }
+
+ public boolean isMacroAction(String name) {
+ return macroActions.keySet().contains(name);
+ }
+
+ public boolean isMacroCondition(String name) {
+ return macroConditions.keySet().contains(name);
+ }
+
+ public Pair<Map<String, String>, List<AbstractRutaAction>> getMacroAction(String name) {
+ return macroActions.get(name);
+ }
+
+ public Pair<Map<String, String>, List<AbstractRutaCondition>> getMacroCondition(String name) {
+ return macroConditions.get(name);
+ }
}
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java?rev=1724465&r1=1724464&r2=1724465&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java Wed Jan 13 17:30:09 2016
@@ -954,8 +954,7 @@ public class RutaStream extends FSIterat
} else if (value instanceof IStringExpression) {
IStringExpression stringExpr = (IStringExpression) value;
String string = stringExpr.getStringValue(context, this);
- StringArrayFS array = FSCollectionFactory.createStringArray(cas,
- new String[] { string });
+ StringArrayFS array = FSCollectionFactory.createStringArray(cas, new String[] { string });
annotation.setFeatureValue(feature, array);
}
} else if (range.equals(UIMAConstants.TYPE_INTEGER) || range.equals(UIMAConstants.TYPE_LONG)
@@ -969,13 +968,12 @@ public class RutaStream extends FSIterat
if (value instanceof INumberExpression) {
INumberExpression numberExpr = (INumberExpression) value;
int v = numberExpr.getIntegerValue(context, this);
- IntArrayFS array = FSCollectionFactory.createIntArray(cas,
- new int[] { v });
+ IntArrayFS array = FSCollectionFactory.createIntArray(cas, new int[] { v });
annotation.setFeatureValue(feature, array);
- } else if(value instanceof INumberListExpression) {
+ } else if (value instanceof INumberListExpression) {
INumberListExpression expr = (INumberListExpression) value;
List<Number> list = expr.getNumberList(context, this);
- IntArrayFS array = FSCollectionFactory.createIntArray(cas,RutaListUtils.toIntArray(list));
+ IntArrayFS array = FSCollectionFactory.createIntArray(cas, RutaListUtils.toIntArray(list));
annotation.setFeatureValue(feature, array);
}
} else if (range.equals(UIMAConstants.TYPE_DOUBLE)) {
@@ -988,13 +986,13 @@ public class RutaStream extends FSIterat
if (value instanceof INumberExpression) {
INumberExpression numberExpr = (INumberExpression) value;
double v = numberExpr.getDoubleValue(context, this);
- DoubleArrayFS array = FSCollectionFactory.createDoubleArray(cas,
- new double[] { v });
+ DoubleArrayFS array = FSCollectionFactory.createDoubleArray(cas, new double[] { v });
annotation.setFeatureValue(feature, array);
- } else if(value instanceof INumberListExpression) {
+ } else if (value instanceof INumberListExpression) {
INumberListExpression expr = (INumberListExpression) value;
List<Number> list = expr.getNumberList(context, this);
- DoubleArrayFS array = FSCollectionFactory.createDoubleArray(cas,RutaListUtils.toDoubleArray(list));
+ DoubleArrayFS array = FSCollectionFactory.createDoubleArray(cas,
+ RutaListUtils.toDoubleArray(list));
annotation.setFeatureValue(feature, array);
}
} else if (range.equals(UIMAConstants.TYPE_FLOAT)) {
@@ -1007,13 +1005,13 @@ public class RutaStream extends FSIterat
if (value instanceof INumberExpression) {
INumberExpression numberExpr = (INumberExpression) value;
float v = numberExpr.getFloatValue(context, this);
- FloatArrayFS array = FSCollectionFactory.createFloatArray(cas,
- new float[] { v });
+ FloatArrayFS array = FSCollectionFactory.createFloatArray(cas, new float[] { v });
annotation.setFeatureValue(feature, array);
- } else if(value instanceof INumberListExpression) {
+ } else if (value instanceof INumberListExpression) {
INumberListExpression expr = (INumberListExpression) value;
List<Number> list = expr.getNumberList(context, this);
- FloatArrayFS array = FSCollectionFactory.createFloatArray(cas,RutaListUtils.toFloatArray(list));
+ FloatArrayFS array = FSCollectionFactory.createFloatArray(cas,
+ RutaListUtils.toFloatArray(list));
annotation.setFeatureValue(feature, array);
}
} else if (range.equals(UIMAConstants.TYPE_BOOLEAN)) {
@@ -1031,8 +1029,7 @@ public class RutaStream extends FSIterat
} else if (value instanceof IBooleanExpression) {
IBooleanExpression expr = (IBooleanExpression) value;
Boolean v = expr.getBooleanValue(context, this);
- BooleanArrayFS array = FSCollectionFactory.createBooleanArray(cas,
- new boolean[] { v });
+ BooleanArrayFS array = FSCollectionFactory.createBooleanArray(cas, new boolean[] { v });
annotation.setFeatureValue(feature, array);
}
} else if (value instanceof AnnotationTypeExpression && !feature.getRange().isPrimitive()) {
@@ -1123,38 +1120,38 @@ public class RutaStream extends FSIterat
}
}
- public void assignVariable(String var, IRutaExpression expression, MatchContext context,
- RutaStream stream) {
+ public void assignVariable(String var, IRutaExpression expression, MatchContext context) {
RuleElement element = context.getElement();
RutaBlock parent = element.getParent();
RutaEnvironment environment = parent.getEnvironment();
Class<?> clazz = environment.getVariableType(var);
if (clazz.equals(Double.class) && expression instanceof INumberExpression) {
- double v = ((INumberExpression) expression).getDoubleValue(context, stream);
+ double v = ((INumberExpression) expression).getDoubleValue(context, this);
environment.setVariableValue(var, v);
} else if (clazz.equals(Integer.class) && expression instanceof INumberExpression) {
- int v = ((INumberExpression) expression).getIntegerValue(context, stream);
+ int v = ((INumberExpression) expression).getIntegerValue(context, this);
environment.setVariableValue(var, v);
} else if (clazz.equals(Type.class) && expression instanceof ITypeExpression) {
- Type v = ((ITypeExpression) expression).getType(context, stream);
+ Type v = ((ITypeExpression) expression).getType(context, this);
environment.setVariableValue(var, v);
} else if (clazz.equals(Boolean.class) && expression instanceof IBooleanExpression) {
- boolean v = ((IBooleanExpression) expression).getBooleanValue(context, stream);
+ boolean v = ((IBooleanExpression) expression).getBooleanValue(context, this);
environment.setVariableValue(var, v);
} else if (clazz.equals(String.class) && expression instanceof IStringExpression) {
- String v = ((IStringExpression) expression).getStringValue(context, stream);
+ String v = ((IStringExpression) expression).getStringValue(context, this);
environment.setVariableValue(var, v);
} else if (clazz.equals(AnnotationFS.class) && expression instanceof IAnnotationExpression) {
- AnnotationFS v = ((IAnnotationExpression) expression).getAnnotation(context, stream);
+ AnnotationFS v = ((IAnnotationExpression) expression).getAnnotation(context, this);
environment.setVariableValue(var, v);
} else if (clazz.equals(List.class)) {
Class<?> variableGenericType = environment.getVariableGenericType(var);
if (variableGenericType.equals(AnnotationFS.class)
&& expression instanceof IAnnotationListExpression) {
List<AnnotationFS> v = ((IAnnotationListExpression) expression).getAnnotationList(context,
- stream);
+ this);
environment.setVariableValue(var, v);
}
+ // TODO assign also other lists
}
}
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/ActionFactory.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/ActionFactory.java?rev=1724465&r1=1724464&r2=1724465&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/ActionFactory.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/ActionFactory.java Wed Jan 13 17:30:09 2016
@@ -24,6 +24,7 @@ import java.util.Map;
import java.util.logging.Level;
import org.antlr.runtime.Token;
+import org.apache.commons.lang3.tuple.Pair;
import org.apache.uima.ruta.RutaBlock;
import org.apache.uima.ruta.expression.IRutaExpression;
import org.apache.uima.ruta.expression.bool.IBooleanExpression;
@@ -36,6 +37,7 @@ import org.apache.uima.ruta.expression.s
import org.apache.uima.ruta.expression.string.IStringExpression;
import org.apache.uima.ruta.expression.type.AbstractTypeListExpression;
import org.apache.uima.ruta.expression.type.ITypeExpression;
+import org.apache.uima.ruta.extensions.RutaParseRuntimeException;
public class ActionFactory {
@@ -59,8 +61,8 @@ public class ActionFactory {
}
public static AbstractRutaAction createMarkFastAction(ITypeExpression type,
- AbstractStringListExpression list, IBooleanExpression ignore, INumberExpression ignoreLength,
- IBooleanExpression ignoreWS, RutaBlock env) {
+ AbstractStringListExpression list, IBooleanExpression ignore,
+ INumberExpression ignoreLength, IBooleanExpression ignoreWS, RutaBlock env) {
return new MarkFastAction(type, list, ignore, ignoreLength, ignoreWS);
}
@@ -159,8 +161,8 @@ public class ActionFactory {
return new UnmarkAction(f, list, b);
}
- public static AbstractRutaAction createUnmarkAllAction(ITypeExpression f, AbstractTypeListExpression list,
- RutaBlock env) {
+ public static AbstractRutaAction createUnmarkAllAction(ITypeExpression f,
+ AbstractTypeListExpression list, RutaBlock env) {
return new UnmarkAllAction(f, list);
}
@@ -267,11 +269,11 @@ public class ActionFactory {
public static AbstractRutaAction createImplicitVariableAssignmentAction(Token var, Token op,
IRutaExpression arg, RutaBlock env) {
- String varString = var != null ? var.getText() : null;
- String opString = op != null ? op.getText() : "=";
+ String varString = var != null ? var.getText() : null;
+ String opString = op != null ? op.getText() : "=";
return new ImplicitVariableAssignmentAction(varString, opString, arg);
}
-
+
public static AbstractRutaAction createMarkFirstAction(ITypeExpression type, RutaBlock env) {
return new MarkFirstAction(type);
}
@@ -287,6 +289,22 @@ public class ActionFactory {
return new SplitAction(type, complete, appendToBegin, appendToEnd);
}
-
+ public static AbstractRutaAction createMacroAction(Token id, List<IRutaExpression> args,
+ RutaBlock env) {
+ String name = id.getText();
+ Pair<Map<String, String>, List<AbstractRutaAction>> macroActionDefinition = env
+ .getEnvironment().getMacroAction(name);
+ if (macroActionDefinition == null) {
+ return null;
+ }
+ Map<String, String> definition = macroActionDefinition.getKey();
+ List<AbstractRutaAction> actions = macroActionDefinition.getValue();
+ if (definition.size() != args.size()) {
+ throw new RutaParseRuntimeException("Arguments of macro action '" + name
+ + "' do not match its definition: " + definition.values());
+ }
+
+ return new MacroAction(name, definition, actions, args);
+ }
}
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/AssignAction.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/AssignAction.java?rev=1724465&r1=1724464&r2=1724465&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/AssignAction.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/AssignAction.java Wed Jan 13 17:30:09 2016
@@ -38,7 +38,7 @@ public class AssignAction extends Abstra
@Override
public void execute(MatchContext context, RutaStream stream, InferenceCrowd crowd) {
- stream.assignVariable(var, expression, context, stream);
+ stream.assignVariable(var, expression, context);
}
public String getVar() {
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/ImplicitVariableAssignmentAction.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/ImplicitVariableAssignmentAction.java?rev=1724465&r1=1724464&r2=1724465&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/ImplicitVariableAssignmentAction.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/ImplicitVariableAssignmentAction.java Wed Jan 13 17:30:09 2016
@@ -44,7 +44,7 @@ public class ImplicitVariableAssignmentA
public void execute(MatchContext context, RutaStream stream, InferenceCrowd crowd) {
// only normal assignment is supported right now
if(StringUtils.equals(op, "=")) {
- stream.assignVariable(var, arg, context, stream);
+ stream.assignVariable(var, arg, context);
}
}
Added: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/MacroAction.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/MacroAction.java?rev=1724465&view=auto
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/MacroAction.java (added)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/MacroAction.java Wed Jan 13 17:30:09 2016
@@ -0,0 +1,105 @@
+/*
+ * 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.ruta.action;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import org.apache.uima.ruta.RutaBlock;
+import org.apache.uima.ruta.RutaEnvironment;
+import org.apache.uima.ruta.RutaStream;
+import org.apache.uima.ruta.expression.IRutaExpression;
+import org.apache.uima.ruta.rule.MatchContext;
+import org.apache.uima.ruta.visitor.InferenceCrowd;
+
+public class MacroAction extends AbstractRutaAction {
+
+ private final String name;
+
+ private final Map<String, String> definition;
+
+ private final List<AbstractRutaAction> actions;
+
+ private final List<IRutaExpression> arguments;
+
+ public MacroAction(String name, Map<String, String> definition, List<AbstractRutaAction> actions,
+ List<IRutaExpression> arguments) {
+ super();
+ this.name = name;
+ this.definition = definition;
+ this.actions = actions;
+ this.arguments = arguments;
+ }
+
+ @Override
+ public void execute(MatchContext context, RutaStream stream, InferenceCrowd crowd) {
+ prepareEnvironment(context, stream);
+ for (AbstractRutaAction eachAction : actions) {
+ crowd.beginVisit(eachAction, null);
+ eachAction.execute(context, stream, crowd);
+ crowd.endVisit(eachAction, null);
+ }
+ cleanupEnvironment(context, stream);
+ }
+
+ private void prepareEnvironment(MatchContext context, RutaStream stream) {
+ RutaBlock parent = context.getParent();
+ RutaEnvironment environment = parent.getEnvironment();
+ Set<Entry<String, String>> entrySet = definition.entrySet();
+ int index = 0;
+ for (Entry<String, String> entry : entrySet) {
+ String name = entry.getKey();
+ String type = entry.getValue();
+ IRutaExpression expression = arguments.get(index);
+ environment.addVariable(name, type);
+ stream.assignVariable(name, expression, context);
+ index++;
+ }
+ }
+
+ private void cleanupEnvironment(MatchContext context, RutaStream stream) {
+ RutaBlock parent = context.getParent();
+ RutaEnvironment environment = parent.getEnvironment();
+ Set<Entry<String, String>> entrySet = definition.entrySet();
+ for (Entry<String, String> entry : entrySet) {
+ String name = entry.getKey();
+ environment.removeVariable(name);
+ }
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public Map<String, String> getDefinition() {
+ return definition;
+ }
+
+ public List<AbstractRutaAction> getActions() {
+ return actions;
+ }
+
+ public List<IRutaExpression> getArguments() {
+ return arguments;
+ }
+
+}
Propchange: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/MacroAction.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ConditionFactory.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ConditionFactory.java?rev=1724465&r1=1724464&r2=1724465&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ConditionFactory.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ConditionFactory.java Wed Jan 13 17:30:09 2016
@@ -20,8 +20,10 @@
package org.apache.uima.ruta.condition;
import java.util.List;
+import java.util.Map;
import org.antlr.runtime.Token;
+import org.apache.commons.lang3.tuple.Pair;
import org.apache.uima.ruta.RutaBlock;
import org.apache.uima.ruta.expression.IRutaExpression;
import org.apache.uima.ruta.expression.bool.IBooleanExpression;
@@ -32,6 +34,7 @@ import org.apache.uima.ruta.expression.s
import org.apache.uima.ruta.expression.string.IStringExpression;
import org.apache.uima.ruta.expression.type.AbstractTypeListExpression;
import org.apache.uima.ruta.expression.type.ITypeExpression;
+import org.apache.uima.ruta.extensions.RutaParseRuntimeException;
public class ConditionFactory {
@@ -307,4 +310,21 @@ public class ConditionFactory {
return new ImplicitCondition(expr);
}
+ public static AbstractRutaCondition createMacroCondition(Token id, List<IRutaExpression> args, RutaBlock env) {
+ String name = id.getText();
+ Pair<Map<String, String>, List<AbstractRutaCondition>> macroConditionDefinition = env
+ .getEnvironment().getMacroCondition(name);
+ if (macroConditionDefinition == null) {
+ return null;
+ }
+ Map<String, String> definition = macroConditionDefinition.getKey();
+ List<AbstractRutaCondition> conditions = macroConditionDefinition.getValue();
+ if (definition.size() != args.size()) {
+ throw new RutaParseRuntimeException("Arguments of macro action '" + name
+ + "' do not match its definition: " + definition.values());
+ }
+
+ return new MacroCondition(name, definition, conditions, args);
+ }
+
}
Added: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/MacroCondition.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/MacroCondition.java?rev=1724465&view=auto
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/MacroCondition.java (added)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/MacroCondition.java Wed Jan 13 17:30:09 2016
@@ -0,0 +1,114 @@
+/*
+ * 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.ruta.condition;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import org.apache.uima.ruta.RutaBlock;
+import org.apache.uima.ruta.RutaEnvironment;
+import org.apache.uima.ruta.RutaStream;
+import org.apache.uima.ruta.expression.IRutaExpression;
+import org.apache.uima.ruta.rule.EvaluatedCondition;
+import org.apache.uima.ruta.rule.MatchContext;
+import org.apache.uima.ruta.visitor.InferenceCrowd;
+
+public class MacroCondition extends AbstractRutaCondition {
+
+ private final String name;
+
+ private final Map<String, String> definition;
+
+ private final List<AbstractRutaCondition> conditions;
+
+ private final List<IRutaExpression> arguments;
+
+ public MacroCondition(String name, Map<String, String> definition, List<AbstractRutaCondition> conditions,
+ List<IRutaExpression> arguments) {
+ super();
+ this.name = name;
+ this.definition = definition;
+ this.conditions = conditions;
+ this.arguments = arguments;
+ }
+
+
+ @Override
+ public EvaluatedCondition eval(MatchContext context, RutaStream stream, InferenceCrowd crowd) {
+ boolean result = true;
+ prepareEnvironment(context, stream);
+ List<EvaluatedCondition> evals = new ArrayList<EvaluatedCondition>();
+ for (AbstractRutaCondition each : conditions) {
+ crowd.beginVisit(each, null);
+ EvaluatedCondition eval = each.eval(context, stream, crowd);
+ crowd.endVisit(each, null);
+ result &= eval.isValue();
+ evals.add(eval);
+ }
+ cleanupEnvironment(context, stream);
+ return new EvaluatedCondition(this, result, evals);
+ }
+
+ private void prepareEnvironment(MatchContext context, RutaStream stream) {
+ RutaBlock parent = context.getParent();
+ RutaEnvironment environment = parent.getEnvironment();
+ Set<Entry<String, String>> entrySet = definition.entrySet();
+ int index = 0;
+ for (Entry<String, String> entry : entrySet) {
+ String name = entry.getKey();
+ String type = entry.getValue();
+ IRutaExpression expression = arguments.get(index);
+ environment.addVariable(name, type);
+ stream.assignVariable(name, expression, context);
+ index++;
+ }
+ }
+
+ private void cleanupEnvironment(MatchContext context, RutaStream stream) {
+ RutaBlock parent = context.getParent();
+ RutaEnvironment environment = parent.getEnvironment();
+ Set<Entry<String, String>> entrySet = definition.entrySet();
+ for (Entry<String, String> entry : entrySet) {
+ String name = entry.getKey();
+ environment.removeVariable(name);
+ }
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public Map<String, String> getDefinition() {
+ return definition;
+ }
+
+ public List<AbstractRutaCondition> getActions() {
+ return conditions;
+ }
+
+ public List<IRutaExpression> getArguments() {
+ return arguments;
+ }
+
+
+}
Propchange: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/MacroCondition.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/action/MacroActionTest.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/action/MacroActionTest.java?rev=1724465&r1=1724464&r2=1724465&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/action/MacroActionTest.java (original)
+++ uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/action/MacroActionTest.java Wed Jan 13 17:30:09 2016
@@ -28,11 +28,11 @@ public class MacroActionTest {
@Test
- public void testFeature() {
+ public void test() {
String document = "Test";
String script = "INT j;\n";
- script += "ACTION macro(TYPE t, INT i) = MARK(t),ASSIGN(i,1);\n";
- script += "Document{-> macro(T1,j)};\n";
+ script += "ACTION macro(TYPE t, INT inc) = MARK(t),ASSIGN(j,j+inc);\n";
+ script += "Document{-> macro(T1,1)};\n";
script += "Document{(j>0)->T2};\n";
@@ -44,8 +44,8 @@ public class MacroActionTest {
e.printStackTrace();
}
-// RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "Test");
-// RutaTestUtils.assertAnnotationsEquals(cas, 2, 1, "Test");
+ RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "Test");
+ RutaTestUtils.assertAnnotationsEquals(cas, 2, 1, "Test");
cas.release();
}
Added: uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/MacroConditionTest.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/MacroConditionTest.java?rev=1724465&view=auto
==============================================================================
--- uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/MacroConditionTest.java (added)
+++ uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/MacroConditionTest.java Wed Jan 13 17:30:09 2016
@@ -0,0 +1,54 @@
+/*
+ * 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.ruta.condition;
+
+import org.apache.uima.cas.CAS;
+import org.apache.uima.ruta.engine.Ruta;
+import org.apache.uima.ruta.engine.RutaTestUtils;
+import org.junit.Test;
+
+public class MacroConditionTest {
+
+
+ @Test
+ public void test() {
+ String document = "Test";
+ String script = "INT j;\n";
+ script += "CONDITION macro(TYPE t, INT i) = IS(t),(j==i);\n";
+ script += "Document{-> T1, j=1};\n";
+ script += "Document{macro(T1,0)-> T2};\n";
+ script += "Document{macro(T1,1)-> T3};\n";
+
+
+ CAS cas = null;
+ try {
+ cas = RutaTestUtils.getCAS(document);
+ Ruta.apply(cas, script);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "Test");
+ RutaTestUtils.assertAnnotationsEquals(cas, 2, 0);
+ RutaTestUtils.assertAnnotationsEquals(cas, 3, 1, "Test");
+
+ cas.release();
+ }
+}
Propchange: uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/MacroConditionTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: uima/ruta/trunk/ruta-docbook/src/docbook/tools.ruta.language.syntax.xml
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-docbook/src/docbook/tools.ruta.language.syntax.xml?rev=1724465&r1=1724464&r2=1724465&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-docbook/src/docbook/tools.ruta.language.syntax.xml (original)
+++ uima/ruta/trunk/ruta-docbook/src/docbook/tools.ruta.language.syntax.xml Wed Jan 13 17:30:09 2016
@@ -103,7 +103,10 @@ BasicAnnotationType -> ('COLON'| 'SW' |
| 'SPACE' | 'BREAK')
BlockDeclaration -> "BLOCK" "(" Identifier ")" RuleElementWithCA
"{" Statements "}"]]></programlisting>
-
+actionDeclaration -> "ACTION" Identifier "(" VarType Identifier ("," VarType Identifier)*")"
+ "=" Action ( "," Action)* ";"
+conditionDeclaration-> "CONDITION" Identifier "(" VarType Identifier ("," VarType Identifier)*")"
+ "=" Condition ( "," Condition)* ";"
Syntax of statements and rule elements:
<programlisting><![CDATA[SimpleStatement -> SimpleRule | RegExpRule | ConjunctRules
| DocumentActionRule
Modified: uima/ruta/trunk/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/LanguageCheckerVisitor.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/LanguageCheckerVisitor.java?rev=1724465&r1=1724464&r2=1724465&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/LanguageCheckerVisitor.java (original)
+++ uima/ruta/trunk/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/LanguageCheckerVisitor.java Wed Jan 13 17:30:09 2016
@@ -71,6 +71,7 @@ import org.apache.uima.ruta.ide.parser.a
import org.apache.uima.ruta.ide.parser.ast.RutaImportStatement;
import org.apache.uima.ruta.ide.parser.ast.RutaImportTypesStatement;
import org.apache.uima.ruta.ide.parser.ast.RutaListExpression;
+import org.apache.uima.ruta.ide.parser.ast.RutaMacroDeclaration;
import org.apache.uima.ruta.ide.parser.ast.RutaPackageDeclaration;
import org.apache.uima.ruta.ide.parser.ast.RutaRegExpRule;
import org.apache.uima.ruta.ide.parser.ast.RutaRule;
@@ -196,7 +197,7 @@ public class LanguageCheckerVisitor exte
private boolean packageChecked = false;
private Collection<String> currentLabels = new HashSet<>();
-
+
public LanguageCheckerVisitor(IProblemReporter problemReporter, ISourceLineTracker linetracker,
ISourceModule sourceModule, ClassLoader classLoader) {
super();
@@ -221,7 +222,7 @@ public class LanguageCheckerVisitor exte
IPath location = sourceModule.getResource().getLocation();
try {
IPath packagePath = RutaProjectUtils.getPackagePath(location, project);
- if(packagePath != null) {
+ if (packagePath != null) {
packagePathString = packagePath.toPortableString().replaceAll("/", ".");
}
} catch (CoreException e) {
@@ -241,6 +242,26 @@ public class LanguageCheckerVisitor exte
checkPackage(s);
return false;
}
+ if (s instanceof RutaMacroDeclaration) {
+ RutaMacroDeclaration decl = (RutaMacroDeclaration) s;
+ Map<Token, Token> definition = decl.getDefinition();
+ String name = decl.getName();
+ int kind = decl.getKind();
+ if(kind == RutaTypeConstants.RUTA_TYPE_A) {
+ actionExtensions.put(name, null);
+ } else if(kind == RutaTypeConstants.RUTA_TYPE_C) {
+ conditionExtensions.put(name, null);
+ }
+ Set<Entry<Token,Token>> entrySet = definition.entrySet();
+ Map<String, Integer> map = new HashMap<>();
+ for (Entry<Token, Token> entry : entrySet) {
+ String varName = entry.getKey().getText();
+ String varType = entry.getValue().getText();
+ int vt = getType(varType);
+ map.put(varName, vt);
+ }
+ knownLocalVariables.push(map);
+ }
if (s instanceof RutaImportTypesStatement) {
RutaImportTypesStatement stmt = (RutaImportTypesStatement) s;
SimpleReference tsExpr = (SimpleReference) stmt.getExpression();
@@ -288,7 +309,7 @@ public class LanguageCheckerVisitor exte
IPath typeSystemDescriptorPath = RutaProjectUtils.getTypeSystemDescriptorPath(
file.getLocation(), referredProject);
TypeSystemDescription tsDesc = importCompleteTypeSystem(typeSystemDescriptorPath, url);
-
+
List<String> checkDuplicateShortNames = checkOnAmbiguousShortNames(tsDesc);
if (!checkDuplicateShortNames.isEmpty()) {
pr.reportProblem(problemFactory.createDuplicateShortNameInImported(sRef, localPath,
@@ -414,8 +435,8 @@ public class LanguageCheckerVisitor exte
}
}
}
- if(s instanceof RutaRule) {
- collectAllLabels((RutaRule)s);
+ if (s instanceof RutaRule) {
+ collectAllLabels((RutaRule) s);
}
return true;
}
@@ -431,7 +452,7 @@ public class LanguageCheckerVisitor exte
}
private void checkPackage(ASTNode node) {
- if(!StringUtils.equals(packageName, packagePathString) && !packageChecked) {
+ if (!StringUtils.equals(packageName, packagePathString) && !packageChecked) {
pr.reportProblem(problemFactory.createWrongPackageProblem(node));
}
packageChecked = true;
@@ -608,7 +629,7 @@ public class LanguageCheckerVisitor exte
if (isFeatureMatch(name) != null) {
return false;
}
- if(isLabel(name)) {
+ if (isLabel(name)) {
return false;
}
if (name.indexOf(".") != -1) {
@@ -618,8 +639,7 @@ public class LanguageCheckerVisitor exte
return false;
}
}
-
-
+
pr.reportProblem(problemFactory.createTypeProblem(ref, sourceModule));
return false;
}
@@ -637,7 +657,8 @@ public class LanguageCheckerVisitor exte
String[] keywords = RutaKeywordsManager.getKeywords(IRutaKeywords.ACTION);
List<String> asList = Arrays.asList(keywords);
if (!StringUtils.isEmpty(actionName) && !"-".equals(actionName)
- && !asList.contains(actionName) && !implicitString.equals(tma.getName())) {
+ && !asList.contains(actionName) && !implicitString.equals(tma.getName())
+ && !actionExtensions.keySet().contains(actionName)) {
IProblem problem = problemFactory.createUnknownActionProblem(tma);
pr.reportProblem(problem);
}
@@ -720,7 +741,8 @@ public class LanguageCheckerVisitor exte
String[] keywords = RutaKeywordsManager.getKeywords(IRutaKeywords.CONDITION);
List<String> asList = Arrays.asList(keywords);
if (!StringUtils.isEmpty(conditionName) && !"-".equals(conditionName)
- && !asList.contains(conditionName) && !implicitString.equals(cond.getName())) {
+ && !asList.contains(conditionName) && !implicitString.equals(cond.getName())
+ && !conditionExtensions.keySet().contains(cond)) {
IProblem problem = problemFactory.createUnknownConditionProblem(cond);
pr.reportProblem(problem);
}
@@ -750,11 +772,11 @@ public class LanguageCheckerVisitor exte
}
}
}
- if(conditionName.equals("CONTAINS")) {
+ if (conditionName.equals("CONTAINS")) {
List<?> args = cond.getChilds();
boolean valid = checkContainsArguments(args);
}
-
+
}
if (s instanceof RutaFunction) {
RutaFunction f = (RutaFunction) s;
@@ -787,48 +809,48 @@ public class LanguageCheckerVisitor exte
private boolean checkContainsArguments(List<?> args) {
if (args.size() == 1) {
Object arg = args.get(0);
-// if (arg instanceof ITypeExpression) {
- return true;
-// }
+ // if (arg instanceof ITypeExpression) {
+ return true;
+ // }
} else if (args.size() == 2) {
Object arg1 = args.get(0);
Object arg2 = args.get(1);
-// if (arg1 instanceof ListExpression) {
- return true;
-// }
+ // if (arg1 instanceof ListExpression) {
+ return true;
+ // }
} else if (args.size() == 3) {
Object arg1 = args.get(0);
Object arg2 = args.get(1);
Object arg3 = args.get(2);
-// if (arg1 instanceof ITypeExpression && arg2 instanceof INumberExpression
-// && arg3 instanceof INumberExpression) {
- return true;
-// }
+ // if (arg1 instanceof ITypeExpression && arg2 instanceof INumberExpression
+ // && arg3 instanceof INumberExpression) {
+ return true;
+ // }
} else if (args.size() == 4) {
Object arg1 = args.get(0);
Object arg2 = args.get(1);
Object arg3 = args.get(2);
Object arg4 = args.get(3);
-// if (arg1 instanceof ITypeExpression && arg2 instanceof INumberExpression
-// && arg3 instanceof INumberExpression && arg4 instanceof IBooleanExpression) {
- return true;
-// }
+ // if (arg1 instanceof ITypeExpression && arg2 instanceof INumberExpression
+ // && arg3 instanceof INumberExpression && arg4 instanceof IBooleanExpression) {
+ return true;
+ // }
} else if (args.size() == 5) {
Object arg1 = args.get(0);
Object arg2 = args.get(1);
Object arg3 = args.get(2);
Object arg4 = args.get(3);
Object arg5 = args.get(3);
-// if (arg1 instanceof ListExpression && arg3 instanceof INumberExpression
-// && arg4 instanceof INumberExpression && arg5 instanceof IBooleanExpression) {
- return true;
-// }
+ // if (arg1 instanceof ListExpression && arg3 instanceof INumberExpression
+ // && arg4 instanceof INumberExpression && arg5 instanceof IBooleanExpression) {
+ return true;
+ // }
}
return false;
}
private boolean isLabel(String name) {
- return currentLabels.contains(name);
+ return currentLabels.contains(name);
}
private String expand(String shortName) {
@@ -894,13 +916,17 @@ public class LanguageCheckerVisitor exte
if (s instanceof RutaDeclareDeclarationsStatement) {
parentTypeInDeclaration = null;
}
- if(!packageChecked) {
+ if (s instanceof RutaMacroDeclaration) {
+ RutaMacroDeclaration decl = (RutaMacroDeclaration) s;
+ knownLocalVariables.pop();
+ }
+ if (!packageChecked) {
checkPackage(null);
}
- if(s instanceof RutaRule) {
+ if (s instanceof RutaRule) {
currentLabels.clear();
}
-
+
return super.endvisit(s);
}
@@ -1363,10 +1389,10 @@ public class LanguageCheckerVisitor exte
CoreException {
IPath descriptorPath = RutaProjectUtils.getTypeSystemDescriptorPath(sourceModule.getResource()
.getLocation(), sourceModule.getScriptProject().getProject());
- if(descriptorPath == null) {
+ if (descriptorPath == null) {
return null;
}
-
+
TypeSystemDescription typeSysDescr = null;
if (descriptorPath.toFile().exists()) {
typeSysDescr = UIMAFramework.getXMLParser().parseTypeSystemDescription(
@@ -1412,4 +1438,42 @@ public class LanguageCheckerVisitor exte
}
return name;
}
+
+ private int getType(String name) {
+ if (name == null) {
+ return 0;
+ }
+ // TODO reuse field in constants
+ if (name.equals("STRING")) {
+ return RutaTypeConstants.RUTA_TYPE_S;
+ } else if (name.equals("STRINGLIST")) {
+ return RutaTypeConstants.RUTA_TYPE_SL;
+ } else if (name.equals("INT")) {
+ return RutaTypeConstants.RUTA_TYPE_I;
+ } else if (name.equals("INTLIST")) {
+ return RutaTypeConstants.RUTA_TYPE_NL;
+ } else if (name.equals("DOUBLE")) {
+ return RutaTypeConstants.RUTA_TYPE_D;
+ } else if (name.equals("DOUBLELIST")) {
+ return RutaTypeConstants.RUTA_TYPE_NL;
+ } else if (name.equals("FLOAT")) {
+ return RutaTypeConstants.RUTA_TYPE_F;
+ } else if (name.equals("FLOATLIST")) {
+ return RutaTypeConstants.RUTA_TYPE_NL;
+ } else if (name.equals("BOOLEAN")) {
+ return RutaTypeConstants.RUTA_TYPE_B;
+ } else if (name.equals("BOOLEANLIST")) {
+ return RutaTypeConstants.RUTA_TYPE_BL;
+ } else if (name.equals("TYPE")) {
+ return RutaTypeConstants.RUTA_TYPE_AT;
+ } else if (name.equals("TYPELIST")) {
+ return RutaTypeConstants.RUTA_TYPE_TL;
+ } else if (name.equals("ANNOTATION")) {
+ return RutaTypeConstants.RUTA_TYPE_UA;
+ } else if (name.equals("ANNOTATIONLIST")) {
+ return RutaTypeConstants.RUTA_TYPE_UAL;
+ }
+ return 0;
+ }
+
}
Modified: uima/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g?rev=1724465&r1=1724464&r2=1724465&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g (original)
+++ uima/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g Wed Jan 13 17:30:09 2016
@@ -30,6 +30,7 @@ package org.apache.uima.ruta.ide.core.pa
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Stack;
@@ -335,6 +336,8 @@ statement returns [List<Statement> stmts
:
( stmts1 = declaration {stmts.addAll(stmts1);}
| stmtVariable = variableDeclaration {stmts.addAll(stmtVariable);}
+ | stmtCM = macroConditionDeclaration {stmts.add(stmtCM);}
+ | stmtAM = macroActionDeclaration {stmts.add(stmtAM);}
| stmt3 = blockDeclaration {stmts.add(stmt3);}
| (externalBlock)=> stmt4 = externalBlock {stmts.add(stmt4);}
| stmt2 = simpleStatement {stmts.add(stmt2);}
@@ -342,7 +345,42 @@ statement returns [List<Statement> stmts
)
;
-
+
+macroConditionDeclaration returns [Statement stmt = null]
+@init {
+Map<Token,Token> def = new LinkedHashMap<>();
+}
+ :
+ kind = CONDITION name = Identifier
+ LPAREN
+ (argType = varTypeToken argName = Identifier {def.put(argName,argType);}
+ (COMMA argType = varTypeToken argName = Identifier {def.put(argName,argType);})*)?
+ RPAREN ASSIGN_EQUAL cs = conditions SEMI
+ {stmt = StatementFactory.createMacroStatement(kind, name, def, cs);}
+ ;
+
+
+macroActionDeclaration returns [Statement stmt = null]
+@init {
+Map<Token,Token> def = new LinkedHashMap<>();
+}
+ :
+ kind = ACTION name = Identifier
+ LPAREN
+ (argType = varTypeToken argName = Identifier {def.put(argName,argType);}
+ (COMMA argType = varTypeToken argName = Identifier {def.put(argName,argType);})*)?
+ RPAREN ASSIGN_EQUAL as = actions SEMI
+ {stmt = StatementFactory.createMacroStatement(kind, name, def, as);}
+ ;
+
+varTypeToken returns [Token token = null ]
+ :
+ t = (ANNOTATION | ANNOTATIONLIST | StringString | STRINGLIST
+ | BooleanString | BOOLEANLIST | IntString | INTLIST
+ | DoubleString | DOUBLELIST | FloatString | FLOATLIST
+ | TypeString | TYPELIST) {token = t;}
+ ;
+
importStatement returns [Statement stmt = null]
:
im = TypeSystemString
Modified: uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/RutaExtensionManager.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/RutaExtensionManager.java?rev=1724465&r1=1724464&r2=1724465&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/RutaExtensionManager.java (original)
+++ uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/RutaExtensionManager.java Wed Jan 13 17:30:09 2016
@@ -70,7 +70,7 @@ public class RutaExtensionManager {
if (infos == null) {
return new IRutaLanguageExtension[0];
}
- List extensions = new ArrayList();
+ List<Object> extensions = new ArrayList<>();
for (int i = 0; i < infos.length; i++) {
Object object = manager.getInitObject(infos[i]);
if (object instanceof IRutaLanguageExtension) {
@@ -83,7 +83,7 @@ public class RutaExtensionManager {
public ISourceElementRequestVisitorExtension[] getSourceElementRequestoVisitorExtensions() {
IRutaLanguageExtension[] extensions = getExtensions();
- List result = new ArrayList();
+ List<ISourceElementRequestVisitorExtension> result = new ArrayList<>();
for (int i = 0; i < extensions.length; i++) {
ISourceElementRequestVisitorExtension visitorExtension = extensions[i]
.createSourceElementRequestVisitorExtension();
@@ -97,7 +97,7 @@ public class RutaExtensionManager {
public IMixinBuildVisitorExtension[] getMixinVisitorExtensions() {
IRutaLanguageExtension[] extensions = getExtensions();
- List result = new ArrayList();
+ List<IMixinBuildVisitorExtension> result = new ArrayList<>();
for (int i = 0; i < extensions.length; i++) {
IMixinBuildVisitorExtension visitorExtension = extensions[i]
.createMixinBuildVisitorExtension();
@@ -111,7 +111,7 @@ public class RutaExtensionManager {
public IMatchLocatorExtension[] getMatchLocatorExtensions() {
IRutaLanguageExtension[] extensions = getExtensions();
- List result = new ArrayList();
+ List<IMatchLocatorExtension> result = new ArrayList<>();
for (int i = 0; i < extensions.length; i++) {
IMatchLocatorExtension visitorExtension = extensions[i].createMatchLocatorExtension();
if (visitorExtension != null) {
@@ -123,7 +123,7 @@ public class RutaExtensionManager {
public ICompletionExtension[] getCompletionExtensions() {
IRutaLanguageExtension[] extensions = getExtensions();
- List result = new ArrayList();
+ List<ICompletionExtension> result = new ArrayList<>();
for (int i = 0; i < extensions.length; i++) {
ICompletionExtension visitorExtension = extensions[i].createCompletionExtension();
if (visitorExtension != null) {
@@ -135,7 +135,7 @@ public class RutaExtensionManager {
public ISelectionExtension[] getSelectionExtensions() {
IRutaLanguageExtension[] extensions = getExtensions();
- List result = new ArrayList();
+ List<ISelectionExtension> result = new ArrayList<>();
for (int i = 0; i < extensions.length; i++) {
ISelectionExtension visitorExtension = extensions[i].createSelectionExtension();
if (visitorExtension != null) {
Modified: uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/RutaKeywords.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/RutaKeywords.java?rev=1724465&r1=1724464&r2=1724465&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/RutaKeywords.java (original)
+++ uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/RutaKeywords.java Wed Jan 13 17:30:09 2016
@@ -29,7 +29,7 @@ public class RutaKeywords implements IRu
private static String[] declaration = { "WORDLIST", "DECLARE", "BOOLEAN", "PACKAGE", "TYPE",
"TYPESYSTEM", "INT", "DOUBLE", "FLOAT", "STRING", "SCRIPT", "WORDTABLE", "ENGINE", "BLOCK",
"BOOLEANLIST", "INTLIST", "DOUBLELIST", "FLOATLIST", "STRINGLIST", "TYPELIST",
- "UIMAFIT", "IMPORT" , "FROM", "AS", "null", "ANNOTATION", "ANNOTATIONLIST" };
+ "UIMAFIT", "IMPORT" , "FROM", "AS", "null", "ANNOTATION", "ANNOTATIONLIST", "ACTION", "CONDITION" };
private static String[] action = { "DEL", "CALL", "MARK", "MARKSCORE", "COLOR", "LOG", "REPLACE",
"FILLOBJECT", "RETAINTYPE", "SETFEATURE", "ASSIGN", "PUTINLIST", "ATTRIBUTE", "MARKFAST",
Modified: uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaExpressionList.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaExpressionList.java?rev=1724465&r1=1724464&r2=1724465&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaExpressionList.java (original)
+++ uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaExpressionList.java Wed Jan 13 17:30:09 2016
@@ -30,14 +30,14 @@ import org.eclipse.dltk.ast.statements.S
import org.eclipse.dltk.utils.CorePrinter;
public class RutaExpressionList extends Expression {
- private List<Expression> expressions;
+ private List<? extends Expression> expressions;
/**
* Statement with bounds from first to last expression.
*
* @param expressions
*/
- public RutaExpressionList(List<Expression> expressions) {
+ public RutaExpressionList(List<? extends Expression> expressions) {
if (!expressions.isEmpty()) {
// First
Expression first = expressions.get(0);
@@ -69,7 +69,7 @@ public class RutaExpressionList extends
}
}
- public List<Expression> getExpressions() {
+ public List<? extends Expression> getExpressions() {
return this.expressions;
}
@@ -109,7 +109,7 @@ public class RutaExpressionList extends
public void printNode(CorePrinter output) {
if (this.expressions != null) {
output.formatPrintLn("");
- Iterator i = this.expressions.iterator();
+ Iterator<? extends Expression> i = this.expressions.iterator();
while (i.hasNext()) {
ASTNode node = (ASTNode) i.next();
node.printNode(output);
@@ -122,7 +122,7 @@ public class RutaExpressionList extends
public String toString() {
String value = "";
if (this.expressions != null) {
- Iterator i = this.expressions.iterator();
+ Iterator<? extends Expression> i = this.expressions.iterator();
while (i.hasNext()) {
ASTNode node = (ASTNode) i.next();
value += node.toString();
Added: uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaMacroDeclaration.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaMacroDeclaration.java?rev=1724465&view=auto
==============================================================================
--- uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaMacroDeclaration.java (added)
+++ uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaMacroDeclaration.java Wed Jan 13 17:30:09 2016
@@ -0,0 +1,43 @@
+/*
+ * 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.ruta.ide.parser.ast;
+
+import java.util.Map;
+
+import org.antlr.runtime.Token;
+import org.eclipse.dltk.ast.expressions.Expression;
+import org.eclipse.dltk.ast.references.SimpleReference;
+
+public class RutaMacroDeclaration extends RutaVariableDeclaration {
+
+ private final Map<Token, Token> definition;
+
+ public RutaMacroDeclaration(String name, int nameStart, int nameEnd, int declStart, int declEnd,
+ SimpleReference ref, int type, Map<Token, Token> definition, Expression initExpression) {
+ super(name, nameStart, nameEnd, declStart, declEnd, ref, type, initExpression);
+ this.definition = definition;
+ }
+
+ public Map<Token, Token> getDefinition() {
+ return definition;
+ }
+
+
+}
Propchange: uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaMacroDeclaration.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaStatement.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaStatement.java?rev=1724465&r1=1724464&r2=1724465&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaStatement.java (original)
+++ uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaStatement.java Wed Jan 13 17:30:09 2016
@@ -110,7 +110,7 @@ public class RutaStatement extends State
public void printNode(CorePrinter output) {
if (this.expressions != null) {
output.formatPrintLn("");
- Iterator i = this.expressions.iterator();
+ Iterator<Expression> i = this.expressions.iterator();
while (i.hasNext()) {
ASTNode node = (ASTNode) i.next();
node.printNode(output);
@@ -123,7 +123,7 @@ public class RutaStatement extends State
public String toString() {
String value = "";
if (this.expressions != null) {
- Iterator i = this.expressions.iterator();
+ Iterator<Expression> i = this.expressions.iterator();
while (i.hasNext()) {
ASTNode node = (ASTNode) i.next();
value += node.toString();
Modified: uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaTypeConstants.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaTypeConstants.java?rev=1724465&r1=1724464&r2=1724465&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaTypeConstants.java (original)
+++ uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaTypeConstants.java Wed Jan 13 17:30:09 2016
@@ -124,7 +124,7 @@ public final class RutaTypeConstants {
typeStringOfInt.put(RUTA_TYPE_NL, "NUMBERLIST");
typeStringOfInt.put(RUTA_TYPE_SL, "STRINGLIST");
typeStringOfInt.put(RUTA_TYPE_TL, "TYPELIST");
- typeStringOfInt.put(RUTA_TYPE_AT, "ANNOTATION_TYPE");
+ typeStringOfInt.put(RUTA_TYPE_AT, "TYPE");
typeStringOfInt.put(RUTA_TYPE_G, "GENERIC");
}
Modified: uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaUnaryArithmeticExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaUnaryArithmeticExpression.java?rev=1724465&r1=1724464&r2=1724465&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaUnaryArithmeticExpression.java (original)
+++ uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaUnaryArithmeticExpression.java Wed Jan 13 17:30:09 2016
@@ -49,8 +49,8 @@ public class RutaUnaryArithmeticExpressi
@Override
public String getOperator() {
Map<String, Integer> map = RutaExpressionConstants.opIDs;
- for (Iterator iterator = map.keySet().iterator(); iterator.hasNext();) {
- String key = (String) iterator.next();
+ for (Iterator<String> iterator = map.keySet().iterator(); iterator.hasNext();) {
+ String key = iterator.next();
Integer intID = map.get(key);
if (intID.equals(opID)) {
return key;
Modified: uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/StatementFactory.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/StatementFactory.java?rev=1724465&r1=1724464&r2=1724465&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/StatementFactory.java (original)
+++ uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/StatementFactory.java Wed Jan 13 17:30:09 2016
@@ -21,6 +21,7 @@ package org.apache.uima.ruta.ide.parser.
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import org.antlr.runtime.CommonToken;
import org.antlr.runtime.Token;
@@ -273,12 +274,13 @@ public class StatementFactory extends Ab
declBounds[0], declBounds[1], ref, eachTO);
}
- @SuppressWarnings("unchecked")
+ @SuppressWarnings({ "rawtypes" })
public static Statement createDeclareDeclarationsStatement(Token declareToken, List declarations,
ASTNode parent) {
return createDeclareDeclarationsStatement(declareToken, declarations, parent, new ArrayList<RutaFeatureDeclaration>(0));
}
+ @SuppressWarnings({ "unchecked", "rawtypes" })
public static Statement createDeclareDeclarationsStatement(Token declareToken, List declarations,
ASTNode parent, List<RutaFeatureDeclaration> features) {
List<RutaAbstractDeclaration> decls = declarations;
@@ -304,7 +306,7 @@ public class StatementFactory extends Ab
}
- @SuppressWarnings("unchecked")
+ @SuppressWarnings({ "rawtypes", "unchecked" })
public static Statement createDeclarationsStatement(Token declareToken, List declarations,
Expression init) {
List<RutaAbstractDeclaration> decls = declarations;
@@ -325,15 +327,15 @@ public class StatementFactory extends Ab
init, declBounds[0], declBounds[1]);
}
- @SuppressWarnings("unchecked")
+
+ @SuppressWarnings("rawtypes")
public static Statement createDeclarationsStatement(Token declareToken, List declarations) {
return createDeclarationsStatement(declareToken, declarations, null);
}
- @SuppressWarnings("unchecked")
public static Statement createDeclarationsStatement(Token declareToken,
RutaAbstractDeclaration declaration, Expression init) {
- List decl = new ArrayList<RutaAbstractDeclaration>();
+ List<RutaAbstractDeclaration> decl = new ArrayList<>();
return createDeclarationsStatement(declareToken, decl, init);
}
@@ -368,6 +370,19 @@ public class StatementFactory extends Ab
return new ComponentDeclaration(nameBounds[0], nameBounds[0] + text.length(), text);
}
+ public static Statement createMacroStatement(Token kind, Token name, Map<Token, Token> def,
+ List<? extends Expression> elements) {
+ int declBounds[] = getBounds(kind, elements.get(elements.size()-1));
+ int nameBounds[] = getBounds(name);
+ int k = kind.equals("CONDITION") ? RutaTypeConstants.RUTA_TYPE_C : RutaTypeConstants.RUTA_TYPE_A;
+ // FieldDeclaration
+ SimpleReference ref = new RutaVariableReference(nameBounds[0], nameBounds[1], name.getText(),
+ k);
+ RutaExpressionList expr = new RutaExpressionList(elements);
+ return new RutaVariableDeclaration(name.getText(), nameBounds[0], nameBounds[1], declBounds[0],
+ declBounds[1], ref, k, expr);
+ }
+
}