Loading de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/TTCN3.xtext +20 −21 Original line number Diff line number Diff line Loading @@ -190,8 +190,8 @@ SystemSpec: SYSTEMKEYWORD component=[ComponentDef|IDENTIFIER]; SignatureDef: SIGNATUREKEYWORD name=IDENTIFIER LPAREN paramList=SignatureFormalParList? RPAREN (return=ReturnType | NOBLOCKKEYWORD)? sprec=ExceptionSpec?; SIGNATUREKEYWORD name=IDENTIFIER LPAREN paramList=SignatureFormalParList? RPAREN (return=ReturnType | NOBLOCKKEYWORD)? sprec=ExceptionSpec?; ExceptionSpec: EXCEPTIONKEYWORD LPAREN TypeList RPAREN; Loading Loading @@ -422,7 +422,7 @@ ArrayIdentifierRefAssignment: name=IDENTIFIER ASSIGNMENTCHAR value=ArrayIdentifierRef; FunctionActualPar: ArrayIdentifierRef | InLineTemplate | ComponentRef | {FunctionActualPar} MINUS; idRef=ArrayIdentifierRef | template=InLineTemplate | component=ComponentRef | {FunctionActualPar} MINUS; ComponentRef: {ComponentRef} (ref=ComponentOrDefaultReference | SYSTEMKEYWORD | SELFOP | MTCKEYWORD); Loading @@ -439,29 +439,26 @@ TestcaseActualParList: (templAssign+=TemplateInstanceAssignment (COMMA templAssign+=TemplateInstanceAssignment)*); TimerStatements: StartTimerStatement; start=StartTimerStatement | stop=StopTimerStatement | timeout=TimeoutStatement; // TODO: references TimeoutStatement: => (TimerRefOrAny DOT TIMEOUTKEYWORD); ref=TimerRefOrAny DOT TIMEOUTKEYWORD; //TODO: references StartTimerStatement: => (ArrayIdentifierRef DOT STARTKEYWORD) (LPAREN expr=Expression RPAREN)? | StopTimerStatement; ref=[SingleVarInstance|IDENTIFIER] arryRefs+=ArrayOrBitRef* DOT STARTKEYWORD (LPAREN expr=Expression RPAREN)?; StopTimerStatement: => (TimerRefOrAll DOT STOPKEYWORD) | TimeoutStatement; ref=TimerRefOrAll DOT STOPKEYWORD; TimerRefOrAny: name=ArrayIdentifierRef | {TimerRefOrAny} ANYKEYWORD timer=TIMERKEYWORD; ref=[SingleVarInstance|IDENTIFIER] | {TimerRefOrAny} ANYKEYWORD timer=TIMERKEYWORD; //TODO: references TimerRefOrAll: name=ArrayIdentifierRef | {TimerRefOrAll} ALLKEYWORD timer=TIMERKEYWORD; ref=[SingleVarInstance|IDENTIFIER] | {TimerRefOrAll} ALLKEYWORD timer=TIMERKEYWORD; //TODO: references ArrayIdentifierRef: name=IDENTIFIER refs+=ArrayOrBitRef*; name=IDENTIFIER arryRefs+=ArrayOrBitRef*; BasicStatements: LogStatement | StatementBlock | LoopConstruct | ConditionalConstruct | SelectCaseConstruct | Assignment; Loading Loading @@ -620,7 +617,7 @@ FunctionLocalInst: variable=VarInstance | timer=TimerInstance; TimerInstance: TIMERKEYWORD VarList; TIMERKEYWORD list=VarList; VarInstance: VARKEYWORD ((listType=Type list=VarList) | ((TEMPLATEKEYWORD | resTemplate=RestrictedTemplate) type=Type Loading Loading @@ -1014,7 +1011,8 @@ ArrayElementExpressionList: expr+=NotUsedOrExpression (COMMA expr+=NotUsedOrExpression)*; FieldExpressionSpec: (fieldRef=[FieldReference|IDENTIFIER] | type=PredefinedType | array=ArrayOrBitRef) ASSIGNMENTCHAR expr=NotUsedOrExpression; (fieldRef=[FieldReference|IDENTIFIER] | type=PredefinedType | array=ArrayOrBitRef) ASSIGNMENTCHAR expr=NotUsedOrExpression; NotUsedOrExpression: Expression | {NotUsedOrExpression} MINUS; Loading @@ -1029,7 +1027,8 @@ FieldConstExpressionList: LBRACKET specs+=FieldConstExpressionSpec (COMMA specs+=FieldConstExpressionSpec)* RBRACKET; FieldConstExpressionSpec: (fieldRef=[FieldReference|IDENTIFIER] | type=PredefinedType | array=ArrayOrBitRef) ASSIGNMENTCHAR constExpr=ConstantExpression; (fieldRef=[FieldReference|IDENTIFIER] | type=PredefinedType | array=ArrayOrBitRef) ASSIGNMENTCHAR constExpr=ConstantExpression; ArrayConstExpression: {ArrayConstExpression} LBRACKET list=ArrayElementConstExpressionList? RBRACKET; Loading de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/common/TTCN3ScopeHelper.xtend +32 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import de.ugoe.cs.swe.tTCN3.ModuleParameter import de.ugoe.cs.swe.tTCN3.ModulePar import de.ugoe.cs.swe.tTCN3.RecordOfDefNamed import de.ugoe.cs.swe.tTCN3.SetOfDefNamed import de.ugoe.cs.swe.tTCN3.AltstepDef class TTCN3ScopeHelper { Loading Loading @@ -205,4 +206,35 @@ class TTCN3ScopeHelper { } } } def static void scopeAltstepExtendedDefList(RefValue variable, AltstepDef altstep, ArrayList<EObject> list) { if (altstep.spec != null) { componentScopeValueRefs(altstep.spec.component, list) } } def private static void componentScopeValueRefs(ComponentDef component, ArrayList<EObject> list) { // TODO: template parameters l.element.variable.tempList for (ComponentDefList l : component.defs.filter[it.element.variable != null]) { if (l.element.variable.list != null) { for (SingleVarInstance v : l.element.variable.list.variables) { list.add(v) } } } for (ComponentDefList l : component.defs.filter[it.element.timer != null]) { for (SingleVarInstance v : l.element.timer.list.variables) { list.add(v) } } for (ComponentDefList l : component.defs.filter[it.element.const != null]) { for (SingleConstDef v : l.element.const.defs.list) { list.add(v) } } for (ComponentDef e : component.extends) { componentScopeValueRefs(e, list) } } } de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/scoping/TTCN3ScopeProvider.xtend +11 −12 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ import de.ugoe.cs.swe.tTCN3.AltstepDef import de.ugoe.cs.swe.tTCN3.AltstepLocalDefList import de.ugoe.cs.swe.tTCN3.ComponentDef import de.ugoe.cs.swe.tTCN3.ComponentDefList import de.ugoe.cs.swe.tTCN3.EnumDefNamed import de.ugoe.cs.swe.tTCN3.FieldSpec import de.ugoe.cs.swe.tTCN3.ForStatement import de.ugoe.cs.swe.tTCN3.FunctionDef Loading @@ -15,12 +16,19 @@ import de.ugoe.cs.swe.tTCN3.ModuleDefinitionsList import de.ugoe.cs.swe.tTCN3.PortElement import de.ugoe.cs.swe.tTCN3.PortOrAny import de.ugoe.cs.swe.tTCN3.RecordDefNamed import de.ugoe.cs.swe.tTCN3.RecordOfDefNamed import de.ugoe.cs.swe.tTCN3.RefValue import de.ugoe.cs.swe.tTCN3.ReferencedType import de.ugoe.cs.swe.tTCN3.SetDefNamed import de.ugoe.cs.swe.tTCN3.SetOfDefNamed import de.ugoe.cs.swe.tTCN3.SignatureDef import de.ugoe.cs.swe.tTCN3.StatementBlock import de.ugoe.cs.swe.tTCN3.StructuredTypeDef import de.ugoe.cs.swe.tTCN3.TTCN3Module import de.ugoe.cs.swe.tTCN3.TemplateDef import de.ugoe.cs.swe.tTCN3.TestcaseDef import de.ugoe.cs.swe.tTCN3.TypeDef import de.ugoe.cs.swe.tTCN3.UnionDefNamed import java.util.ArrayList import org.eclipse.emf.ecore.EObject import org.eclipse.emf.ecore.EReference Loading @@ -30,16 +38,6 @@ import org.eclipse.xtext.scoping.impl.AbstractDeclarativeScopeProvider import static org.eclipse.xtext.scoping.Scopes.* import static extension de.ugoe.cs.swe.common.TTCN3ScopeHelper.* import de.ugoe.cs.swe.tTCN3.ReferencedType import de.ugoe.cs.swe.tTCN3.StructuredTypeDef import de.ugoe.cs.swe.tTCN3.SubTypeDef import de.ugoe.cs.swe.tTCN3.SetDefNamed import de.ugoe.cs.swe.tTCN3.UnionDefNamed import de.ugoe.cs.swe.tTCN3.RecordOfDefNamed import de.ugoe.cs.swe.tTCN3.SetOfDefNamed import de.ugoe.cs.swe.tTCN3.EnumDefNamed import de.ugoe.cs.swe.tTCN3.FormalValuePar import de.ugoe.cs.swe.tTCN3.SignatureDef class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider { Loading @@ -66,6 +64,7 @@ class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider { variable.scopeTemplateOrValueFormalParList(parent.parList, list) } else if (parent instanceof AltstepDef) { if(parent.params != null) variable.scopeFunctionParameterValue(parent.params, list) variable.scopeAltstepExtendedDefList(parent, list) } else if (parent instanceof AltstepLocalDefList) { variable.scopeAltstepLocalDefList(parent, list) } else if (parent instanceof GroupDef) { Loading Loading
de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/TTCN3.xtext +20 −21 Original line number Diff line number Diff line Loading @@ -190,8 +190,8 @@ SystemSpec: SYSTEMKEYWORD component=[ComponentDef|IDENTIFIER]; SignatureDef: SIGNATUREKEYWORD name=IDENTIFIER LPAREN paramList=SignatureFormalParList? RPAREN (return=ReturnType | NOBLOCKKEYWORD)? sprec=ExceptionSpec?; SIGNATUREKEYWORD name=IDENTIFIER LPAREN paramList=SignatureFormalParList? RPAREN (return=ReturnType | NOBLOCKKEYWORD)? sprec=ExceptionSpec?; ExceptionSpec: EXCEPTIONKEYWORD LPAREN TypeList RPAREN; Loading Loading @@ -422,7 +422,7 @@ ArrayIdentifierRefAssignment: name=IDENTIFIER ASSIGNMENTCHAR value=ArrayIdentifierRef; FunctionActualPar: ArrayIdentifierRef | InLineTemplate | ComponentRef | {FunctionActualPar} MINUS; idRef=ArrayIdentifierRef | template=InLineTemplate | component=ComponentRef | {FunctionActualPar} MINUS; ComponentRef: {ComponentRef} (ref=ComponentOrDefaultReference | SYSTEMKEYWORD | SELFOP | MTCKEYWORD); Loading @@ -439,29 +439,26 @@ TestcaseActualParList: (templAssign+=TemplateInstanceAssignment (COMMA templAssign+=TemplateInstanceAssignment)*); TimerStatements: StartTimerStatement; start=StartTimerStatement | stop=StopTimerStatement | timeout=TimeoutStatement; // TODO: references TimeoutStatement: => (TimerRefOrAny DOT TIMEOUTKEYWORD); ref=TimerRefOrAny DOT TIMEOUTKEYWORD; //TODO: references StartTimerStatement: => (ArrayIdentifierRef DOT STARTKEYWORD) (LPAREN expr=Expression RPAREN)? | StopTimerStatement; ref=[SingleVarInstance|IDENTIFIER] arryRefs+=ArrayOrBitRef* DOT STARTKEYWORD (LPAREN expr=Expression RPAREN)?; StopTimerStatement: => (TimerRefOrAll DOT STOPKEYWORD) | TimeoutStatement; ref=TimerRefOrAll DOT STOPKEYWORD; TimerRefOrAny: name=ArrayIdentifierRef | {TimerRefOrAny} ANYKEYWORD timer=TIMERKEYWORD; ref=[SingleVarInstance|IDENTIFIER] | {TimerRefOrAny} ANYKEYWORD timer=TIMERKEYWORD; //TODO: references TimerRefOrAll: name=ArrayIdentifierRef | {TimerRefOrAll} ALLKEYWORD timer=TIMERKEYWORD; ref=[SingleVarInstance|IDENTIFIER] | {TimerRefOrAll} ALLKEYWORD timer=TIMERKEYWORD; //TODO: references ArrayIdentifierRef: name=IDENTIFIER refs+=ArrayOrBitRef*; name=IDENTIFIER arryRefs+=ArrayOrBitRef*; BasicStatements: LogStatement | StatementBlock | LoopConstruct | ConditionalConstruct | SelectCaseConstruct | Assignment; Loading Loading @@ -620,7 +617,7 @@ FunctionLocalInst: variable=VarInstance | timer=TimerInstance; TimerInstance: TIMERKEYWORD VarList; TIMERKEYWORD list=VarList; VarInstance: VARKEYWORD ((listType=Type list=VarList) | ((TEMPLATEKEYWORD | resTemplate=RestrictedTemplate) type=Type Loading Loading @@ -1014,7 +1011,8 @@ ArrayElementExpressionList: expr+=NotUsedOrExpression (COMMA expr+=NotUsedOrExpression)*; FieldExpressionSpec: (fieldRef=[FieldReference|IDENTIFIER] | type=PredefinedType | array=ArrayOrBitRef) ASSIGNMENTCHAR expr=NotUsedOrExpression; (fieldRef=[FieldReference|IDENTIFIER] | type=PredefinedType | array=ArrayOrBitRef) ASSIGNMENTCHAR expr=NotUsedOrExpression; NotUsedOrExpression: Expression | {NotUsedOrExpression} MINUS; Loading @@ -1029,7 +1027,8 @@ FieldConstExpressionList: LBRACKET specs+=FieldConstExpressionSpec (COMMA specs+=FieldConstExpressionSpec)* RBRACKET; FieldConstExpressionSpec: (fieldRef=[FieldReference|IDENTIFIER] | type=PredefinedType | array=ArrayOrBitRef) ASSIGNMENTCHAR constExpr=ConstantExpression; (fieldRef=[FieldReference|IDENTIFIER] | type=PredefinedType | array=ArrayOrBitRef) ASSIGNMENTCHAR constExpr=ConstantExpression; ArrayConstExpression: {ArrayConstExpression} LBRACKET list=ArrayElementConstExpressionList? RBRACKET; Loading
de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/common/TTCN3ScopeHelper.xtend +32 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import de.ugoe.cs.swe.tTCN3.ModuleParameter import de.ugoe.cs.swe.tTCN3.ModulePar import de.ugoe.cs.swe.tTCN3.RecordOfDefNamed import de.ugoe.cs.swe.tTCN3.SetOfDefNamed import de.ugoe.cs.swe.tTCN3.AltstepDef class TTCN3ScopeHelper { Loading Loading @@ -205,4 +206,35 @@ class TTCN3ScopeHelper { } } } def static void scopeAltstepExtendedDefList(RefValue variable, AltstepDef altstep, ArrayList<EObject> list) { if (altstep.spec != null) { componentScopeValueRefs(altstep.spec.component, list) } } def private static void componentScopeValueRefs(ComponentDef component, ArrayList<EObject> list) { // TODO: template parameters l.element.variable.tempList for (ComponentDefList l : component.defs.filter[it.element.variable != null]) { if (l.element.variable.list != null) { for (SingleVarInstance v : l.element.variable.list.variables) { list.add(v) } } } for (ComponentDefList l : component.defs.filter[it.element.timer != null]) { for (SingleVarInstance v : l.element.timer.list.variables) { list.add(v) } } for (ComponentDefList l : component.defs.filter[it.element.const != null]) { for (SingleConstDef v : l.element.const.defs.list) { list.add(v) } } for (ComponentDef e : component.extends) { componentScopeValueRefs(e, list) } } }
de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/scoping/TTCN3ScopeProvider.xtend +11 −12 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ import de.ugoe.cs.swe.tTCN3.AltstepDef import de.ugoe.cs.swe.tTCN3.AltstepLocalDefList import de.ugoe.cs.swe.tTCN3.ComponentDef import de.ugoe.cs.swe.tTCN3.ComponentDefList import de.ugoe.cs.swe.tTCN3.EnumDefNamed import de.ugoe.cs.swe.tTCN3.FieldSpec import de.ugoe.cs.swe.tTCN3.ForStatement import de.ugoe.cs.swe.tTCN3.FunctionDef Loading @@ -15,12 +16,19 @@ import de.ugoe.cs.swe.tTCN3.ModuleDefinitionsList import de.ugoe.cs.swe.tTCN3.PortElement import de.ugoe.cs.swe.tTCN3.PortOrAny import de.ugoe.cs.swe.tTCN3.RecordDefNamed import de.ugoe.cs.swe.tTCN3.RecordOfDefNamed import de.ugoe.cs.swe.tTCN3.RefValue import de.ugoe.cs.swe.tTCN3.ReferencedType import de.ugoe.cs.swe.tTCN3.SetDefNamed import de.ugoe.cs.swe.tTCN3.SetOfDefNamed import de.ugoe.cs.swe.tTCN3.SignatureDef import de.ugoe.cs.swe.tTCN3.StatementBlock import de.ugoe.cs.swe.tTCN3.StructuredTypeDef import de.ugoe.cs.swe.tTCN3.TTCN3Module import de.ugoe.cs.swe.tTCN3.TemplateDef import de.ugoe.cs.swe.tTCN3.TestcaseDef import de.ugoe.cs.swe.tTCN3.TypeDef import de.ugoe.cs.swe.tTCN3.UnionDefNamed import java.util.ArrayList import org.eclipse.emf.ecore.EObject import org.eclipse.emf.ecore.EReference Loading @@ -30,16 +38,6 @@ import org.eclipse.xtext.scoping.impl.AbstractDeclarativeScopeProvider import static org.eclipse.xtext.scoping.Scopes.* import static extension de.ugoe.cs.swe.common.TTCN3ScopeHelper.* import de.ugoe.cs.swe.tTCN3.ReferencedType import de.ugoe.cs.swe.tTCN3.StructuredTypeDef import de.ugoe.cs.swe.tTCN3.SubTypeDef import de.ugoe.cs.swe.tTCN3.SetDefNamed import de.ugoe.cs.swe.tTCN3.UnionDefNamed import de.ugoe.cs.swe.tTCN3.RecordOfDefNamed import de.ugoe.cs.swe.tTCN3.SetOfDefNamed import de.ugoe.cs.swe.tTCN3.EnumDefNamed import de.ugoe.cs.swe.tTCN3.FormalValuePar import de.ugoe.cs.swe.tTCN3.SignatureDef class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider { Loading @@ -66,6 +64,7 @@ class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider { variable.scopeTemplateOrValueFormalParList(parent.parList, list) } else if (parent instanceof AltstepDef) { if(parent.params != null) variable.scopeFunctionParameterValue(parent.params, list) variable.scopeAltstepExtendedDefList(parent, list) } else if (parent instanceof AltstepLocalDefList) { variable.scopeAltstepLocalDefList(parent, list) } else if (parent instanceof GroupDef) { Loading