Commit 441c2948 authored by Daniel Honsel's avatar Daniel Honsel
Browse files

first steps towards imports

parent 473e3696
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -15,7 +15,8 @@ Require-Bundle: de.ugoe.cs.swe.TTCN3;visibility:=reexport,
 org.antlr.runtime,
 org.eclipse.xtext.common.types.ui,
 org.eclipse.xtext.ui.codetemplates.ui,
 org.eclipse.compare
 org.eclipse.compare,
 org.eclipse.xtext.xbase.lib
Import-Package: org.apache.log4j,
 org.eclipse.xtext.xbase.lib
Bundle-RequiredExecutionEnvironment: J2SE-1.5
+2 −1
Original line number Diff line number Diff line
@@ -17,7 +17,8 @@ Require-Bundle: org.eclipse.xtext;visibility:=reexport,
 org.eclipse.emf.common,
 org.antlr.runtime,
 org.eclipse.xtext.common.types,
 org.objectweb.asm;bundle-version="[5.0.1,6.0.0)";resolution:=optional
 org.objectweb.asm;bundle-version="[5.0.1,6.0.0)";resolution:=optional,
 org.eclipse.xtext.xbase.lib
Import-Package: org.apache.log4j,
 org.eclipse.xtext.xbase.lib
Bundle-RequiredExecutionEnvironment: J2SE-1.5
+2 −1
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@ module de.ugoe.cs.swe.GenerateTTCN3
import org.eclipse.emf.mwe.utils.*
import org.eclipse.xtext.generator.*
import org.eclipse.xtext.ui.generator.*
import de.ugoe.cs.swe.scoping.TTCN3ImportNamespaceScopingFragment

var grammarURI = "classpath:/de/ugoe/cs/swe/TTCN3.xtext"
var fileExtensions = "ttcn3"
@@ -83,7 +84,7 @@ Workflow {
			// fragment = exporting.SimpleNamesFragment auto-inject {}

			// scoping and exporting API
			fragment = scoping.ImportNamespacesScopingFragment auto-inject {}
			fragment = TTCN3ImportNamespaceScopingFragment auto-inject {}
			fragment = exporting.QualifiedNamesFragment auto-inject {}
			fragment = builder.BuilderIntegrationFragment auto-inject {}

+49 −47
Original line number Diff line number Diff line
@@ -12,7 +12,7 @@ ConstDef:
	CONSTKEYWORD type=Type defs=ConstList;

Type:
	pre=PredefinedType | ref=[ReferencedType|IDENTIFIER];
	pre=PredefinedType | ref=[ReferencedType|QualifiedIdentifier];

ArrayDef:
	(SQUAREOPEN expr+=SingleExpression (RANGEOP range+=SingleExpression)? SQUARECLOSE)+;
@@ -62,11 +62,8 @@ ExtConstDef:
	EXTKEYWORD CONSTKEYWORD type=Type id=IdentifierList;

ImportDef:
	IMPORTKEYWORD importFrom=ImportFromSpec (all=AllWithExcepts | LBRACKET importSpec=ImportSpec RBRACKET);

	// TODO: fix import
ImportFromSpec:
	FROMKEYWORD id=IDENTIFIER spec=LanguageSpec? RECURSIVEKEYWORD?;
	IMPORTKEYWORD FROMKEYWORD importedModule=IDENTIFIER spec=LanguageSpec? RECURSIVEKEYWORD? (all=AllWithExcepts |
	LBRACKET importSpec=ImportSpec RBRACKET);

AllWithExcepts:
	{AllWithExcepts} ALLKEYWORD def=ExceptsDef?;
@@ -83,74 +80,75 @@ ExceptElement:
	| modulePar=ExceptModuleParSpec;

IdentifierListOrAll:
	IdentifierList | ALLKEYWORD;
	idList=IdentifierList | all=ALLKEYWORD;

ExceptGroupSpec:
	GROUPKEYWORD (QualifiedIdentifierList | ALLKEYWORD);
	GROUPKEYWORD (idList=QualifiedIdentifierList | all=ALLKEYWORD);

ExceptTypeDefSpec:
	TYPEDEFKEYWORD IdentifierListOrAll;
	TYPEDEFKEYWORD idOrAll=IdentifierListOrAll;

ExceptTemplateSpec:
	TEMPLATEKEYWORD IdentifierListOrAll;
	TEMPLATEKEYWORD idOrAll=IdentifierListOrAll;

ExceptConstSpec:
	CONSTKEYWORD IdentifierListOrAll;
	CONSTKEYWORD idOrAll=IdentifierListOrAll;

ExceptTestcaseSpec:
	TESTCASEKEYWORD IdentifierListOrAll;
	TESTCASEKEYWORD idOrAll=IdentifierListOrAll;

ExceptAltstepSpec:
	ALTSTEPKEYWORD IdentifierListOrAll;
	ALTSTEPKEYWORD idOrAll=IdentifierListOrAll;

ExceptFunctionSpec:
	FUNCTIONKEYWORD IdentifierListOrAll;
	FUNCTIONKEYWORD idOrAll=IdentifierListOrAll;

ExceptSignatureSpec:
	SIGNATUREKEYWORD IdentifierListOrAll;
	SIGNATUREKEYWORD idOrAll=IdentifierListOrAll;

ExceptModuleParSpec:
	MODULEPARKEYWORD IdentifierListOrAll;
	MODULEPARKEYWORD idOrAll=IdentifierListOrAll;

ImportSpec:
	{ImportSpec} (element+=ImportElement SEMICOLON?)*;

ImportElement:
	{ImportElement} (spec=ImportGroupSpec | ImportTypeDefSpec | ImportTemplateSpec | ImportConstSpec | ImportTestcaseSpec
	| ImportAltstepSpec | ImportFunctionSpec | ImportSignatureSpec | ImportModuleParSpec | ImportImportSpec);
	(group=ImportGroupSpec | type=ImportTypeDefSpec | template=ImportTemplateSpec | const=ImportConstSpec |
	testcase=ImportTestcaseSpec | altstep=ImportAltstepSpec | function=ImportFunctionSpec | signature=ImportSignatureSpec
	| modulePar=ImportModuleParSpec | importSpec=ImportImportSpec);

ImportGroupSpec:
	GROUPKEYWORD (groupRef=GroupRefListWithExcept | group=AllGroupsWithExcept);

IdentifierListOrAllWithExcept:
	IdentifierList | AllWithExcept;
	idList=IdentifierList | all=AllWithExcept;

AllWithExcept:
	ALLKEYWORD (EXCEPTKEYWORD IdentifierList)?;
	{AllWithExcept} ALLKEYWORD (EXCEPTKEYWORD idList=IdentifierList)?;

ImportTypeDefSpec:
	TYPEDEFKEYWORD IdentifierListOrAllWithExcept;
	TYPEDEFKEYWORD idOrAll=IdentifierListOrAllWithExcept;

ImportTemplateSpec:
	TEMPLATEKEYWORD IdentifierListOrAllWithExcept;
	TEMPLATEKEYWORD idOrAll=IdentifierListOrAllWithExcept;

ImportConstSpec:
	CONSTKEYWORD IdentifierListOrAllWithExcept;
	CONSTKEYWORD idOrAll=IdentifierListOrAllWithExcept;

ImportAltstepSpec:
	ALTSTEPKEYWORD IdentifierListOrAllWithExcept;
	ALTSTEPKEYWORD idOrAll=IdentifierListOrAllWithExcept;

ImportTestcaseSpec:
	TESTCASEKEYWORD IdentifierListOrAllWithExcept;
	TESTCASEKEYWORD idOrAll=IdentifierListOrAllWithExcept;

ImportFunctionSpec:
	FUNCTIONKEYWORD IdentifierListOrAllWithExcept;
	FUNCTIONKEYWORD idOrAll=IdentifierListOrAllWithExcept;

ImportSignatureSpec:
	SIGNATUREKEYWORD IdentifierListOrAllWithExcept;
	SIGNATUREKEYWORD idOrAll=IdentifierListOrAllWithExcept;

ImportModuleParSpec:
	MODULEPARKEYWORD IdentifierListOrAllWithExcept;
	MODULEPARKEYWORD idOrAll=IdentifierListOrAllWithExcept;

ImportImportSpec:
	IMPORTKEYWORD ALLKEYWORD;
@@ -162,7 +160,7 @@ QualifiedIdentifierWithExcept:
	{QualifiedIdentifierWithExcept} id=QualifiedIdentifier def=ExceptsDef?;

AllGroupsWithExcept:
	ALLKEYWORD (EXCEPTKEYWORD QualifiedIdentifierList)?;
	{AllGroupsWithExcept} ALLKEYWORD (EXCEPTKEYWORD idList=QualifiedIdentifierList)?;

AltstepDef:
	ALTSTEPKEYWORD name=IDENTIFIER LPAREN params=FunctionFormalParList? RPAREN spec=RunsOnSpec? LBRACKET
@@ -980,17 +978,19 @@ WithAttribList returns ecore::EString:
MultiWithAttrib returns ecore::EString:
	(SingleWithAttrib SEMICOLON?)*;

	// TODO: fix this!
SingleWithAttrib returns ecore::EString:
	AttribKeyword OVERRIDEKEYWORD? AttribQualifier? FREE_TEXT;
	AttribKeyword OVERRIDEKEYWORD? /*AttribQualifier?*/ FREE_TEXT;

AttribKeyword returns ecore::EString:
	ENCODEKEYWORD | VARIANTKEYWORD | DISPLAYKEYWORD | EXTENSIONKEYWORD | OPTIONALKEYWORD;

AttribQualifier returns ecore::EString:
	LPAREN DefOrFieldRefList RPAREN;
	// TODO: fix this!
//AttribQualifier returns ecore::EString:
//	LPAREN DefOrFieldRefList RPAREN;

IdentifierList returns ecore::EString:
	IDENTIFIER (COMMA IDENTIFIER)*;
IdentifierList:
	ids+=IDENTIFIER (COMMA ids+=IDENTIFIER)*;

ExtendedIdentifier returns ecore::EString hidden():
	IDENTIFIER (DOT IDENTIFIER)?;
@@ -998,8 +998,8 @@ ExtendedIdentifier returns ecore::EString hidden():
QualifiedIdentifier returns ecore::EString hidden():
	IDENTIFIER (DOT IDENTIFIER)*;

QualifiedIdentifierList returns ecore::EString:
	QualifiedIdentifier (COMMA QualifiedIdentifier)*;
QualifiedIdentifierList:
	qids+=QualifiedIdentifier (COMMA qids+=QualifiedIdentifier)*;

SingleConstDef:
	name=IDENTIFIER array=ArrayDef? assign=ASSIGNMENTCHAR expr=ConstantExpression;
@@ -1049,7 +1049,7 @@ Value:
	PredefinedValue | ReferencedValue;

ReferencedValue:
	ref=[RefValue|IDENTIFIER] fieldRefs+=ExtendedFieldReference*;
	ref=[RefValue|QualifiedIdentifier] fieldRefs+=ExtendedFieldReference*;

RefValue:
	SingleConstDef | ModuleParameter | SingleVarInstance | FieldReference | FormalTemplatePar | SingleTempVarInstance |
@@ -1108,18 +1108,20 @@ UnaryExpression returns SingleExpression:
Primary returns SingleExpression:
	OpCall | Value | LPAREN SingleExpression RPAREN;

DefOrFieldRefList returns ecore::EString:
	DefOrFieldRef (COMMA DefOrFieldRef)*;
	// TODO: fix this!
//DefOrFieldRefList returns ecore::EString:
//	DefOrFieldRef (COMMA DefOrFieldRef)*;

// TODO: ( ( FieldReference | SQUAREOPEN MINUS SQUARECLOSE ) [ ExtendedFieldReference ] )
// TODO: improve references
DefOrFieldRef returns ecore::EString:
	QualifiedIdentifier | AllRef;

AllRef returns ecore::EString:
	GROUPKEYWORD ALLKEYWORD (EXCEPTKEYWORD LBRACKET QualifiedIdentifierList RBRACKET)? | (TYPEDEFKEYWORD |
	TEMPLATEKEYWORD | CONSTKEYWORD | ALTSTEPKEYWORD | TESTCASEKEYWORD | FUNCTIONKEYWORD | SIGNATUREKEYWORD |
	MODULEPARKEYWORD) ALLKEYWORD (EXCEPTKEYWORD LBRACKET IdentifierList RBRACKET)?;
//DefOrFieldRef returns ecore::EString:
//	QualifiedIdentifier | AllRef;

// TODO: fix this!
//AllRef returns ecore::EString:
//	GROUPKEYWORD ALLKEYWORD (EXCEPTKEYWORD LBRACKET QualifiedIdentifierList RBRACKET)? | (TYPEDEFKEYWORD |
//	TEMPLATEKEYWORD | CONSTKEYWORD | ALTSTEPKEYWORD | TESTCASEKEYWORD | FUNCTIONKEYWORD | SIGNATUREKEYWORD |
//	MODULEPARKEYWORD) ALLKEYWORD (EXCEPTKEYWORD LBRACKET IdentifierList RBRACKET)?;

// TODO: improve references
// StructFieldRef | ArrayOrBitRef | ParRef;
+20 −1
Original line number Diff line number Diff line
@@ -47,6 +47,8 @@ import de.ugoe.cs.swe.tTCN3.UnionDefNamed
import de.ugoe.cs.swe.tTCN3.VarList
import java.util.ArrayList
import org.eclipse.emf.ecore.EObject
import de.ugoe.cs.swe.tTCN3.GroupDef
import de.ugoe.cs.swe.tTCN3.TTCN3Module

class TTCN3ScopeHelper {

@@ -340,4 +342,21 @@ class TTCN3ScopeHelper {
		}
	}
	
	def static void scopeAllGroups(EObject object, ArrayList<EObject> list) {
		val module = object.findDesiredParent(typeof(TTCN3Module)) as TTCN3Module
		if (module.defs != null) {
			module.defs.scopeGroups(list, true)
		}
	}
	
	def static void scopeGroups(ModuleDefinitionsList md, ArrayList<EObject> list, boolean hierarchy) {
		for (ModuleDefinition g : md.definitions.filter[it.def instanceof GroupDef]) {
			val GroupDef group = g.def as GroupDef
			list.add(group)
			if (hierarchy && group.list != null) {
				group.list.scopeGroups(list, hierarchy)
			}
		}		
	}	
	
}
Loading