Loading de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/GenerateTTCN3.mwe2 +2 −1 Original line number Diff line number Diff line Loading @@ -96,6 +96,7 @@ Workflow { // scoping and exporting API fragment = de.ugoe.cs.swe.scoping.TTCN3ImportNamespaceScopingFragment auto-inject {} //fragment = scoping.ImportNamespacesScopingFragment auto-inject {} fragment = exporting.QualifiedNamesFragment auto-inject {} fragment = builder.BuilderIntegrationFragment auto-inject {} Loading de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/TTCN3.xtext +1 −1 Original line number Diff line number Diff line Loading @@ -62,7 +62,7 @@ ExtConstDef: EXTKEYWORD CONSTKEYWORD type=Type id=IdentifierList; ImportDef: IMPORTKEYWORD FROMKEYWORD moduleNamespace=IDENTIFIER spec=LanguageSpec? RECURSIVEKEYWORD? (all=AllWithExcepts | IMPORTKEYWORD FROMKEYWORD name=IDENTIFIER spec=LanguageSpec? RECURSIVEKEYWORD? (all=AllWithExcepts | LBRACKET importSpec=ImportSpec RBRACKET); AllWithExcepts: Loading de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/scoping/TTCN3ImportedNamespaceAwareLocalScopeProvider.java +36 −25 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ import static java.util.Collections.singletonList; import java.util.List; import org.eclipse.emf.common.notify.Notifier; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EReference; import org.eclipse.emf.ecore.EStructuralFeature; Loading Loading @@ -53,28 +54,33 @@ public class TTCN3ImportedNamespaceAwareLocalScopeProvider extends ImportedNames if (TTCN3Module.class.isAssignableFrom(context.getClass())) { namespaceResolvers.addAll(getImportedNamespaceResolvers(context, ignoreCase)); namespaceResolvers.addAll(namespaceResolverForType(context, ignoreCase, GroupDef.class, true)); namespaceResolvers.addAll(namespaceResolverForType(context, ignoreCase, Enumeration.class, false)); namespaceResolvers.addAll(namespaceResolverForType(context, ignoreCase, TTCN3Module.class, true)); namespaceResolvers.addAll(namespaceResolverForImportedType((TTCN3Module) context, parent, ignoreCase)); namespaceResolvers.addAll(namespaceResolverForType(context, ignoreCase, TTCN3Package.eINSTANCE.getGroupDef(), true, allDescriptions)); namespaceResolvers.addAll(namespaceResolverForType(context, ignoreCase, TTCN3Package.eINSTANCE.getEnumeration(), false, allDescriptions)); namespaceResolvers.addAll(namespaceResolverForType(context, ignoreCase, TTCN3Package.eINSTANCE.getTTCN3Module(), true, allDescriptions)); namespaceResolvers.addAll(namespaceResolverForImportedType((TTCN3Module) context, parent, ignoreCase, allDescriptions)); if (!namespaceResolvers.isEmpty()) { if (isRelativeImport() && name != null) { ImportNormalizer localNormalizer = doCreateImportNormalizer(name, true, ignoreCase); result = createImportScope(result, singletonList(localNormalizer), allDescriptions, reference.getEReferenceType(), isIgnoreCase(reference)); result = createImportScope(result, singletonList(localNormalizer), allDescriptions, reference.getEReferenceType(), isIgnoreCase(reference)); } result = createImportScope(result, namespaceResolvers, null, reference.getEReferenceType(), isIgnoreCase(reference)); } } if (name != null) { ImportNormalizer localNormalizer = doCreateImportNormalizer(name, true, ignoreCase); result = createImportScope(result, singletonList(localNormalizer), allDescriptions, reference.getEReferenceType(), isIgnoreCase(reference)); result = createImportScope(result, singletonList(localNormalizer), allDescriptions, reference.getEReferenceType(), isIgnoreCase(reference)); } return result; } @Override protected String getImportedNamespace(EObject object) { EStructuralFeature feature = object.eClass().getEStructuralFeature("moduleNamespace"); EStructuralFeature feature = object.eClass().getEStructuralFeature("name"); if (feature != null && String.class.equals(feature.getEType().getInstanceClass())) { return (String) object.eGet(feature); } Loading @@ -85,9 +91,10 @@ public class TTCN3ImportedNamespaceAwareLocalScopeProvider extends ImportedNames protected List<ImportNormalizer> internalGetImportedNamespaceResolvers(EObject context, boolean ignoreCase) { List<ImportNormalizer> importedNamespaceResolvers = Lists.newArrayList(); if (TTCN3Module.class.isAssignableFrom(context.getClass())) { List<ImportDef> eContents = EcoreUtil2.getAllContentsOfType(context, ImportDef.class); for (EObject imp : eContents) { String value = getImportedNamespace(imp); ISelectable allDescriptions = getAllDescriptions(context.eResource()); for (IEObjectDescription d : allDescriptions.getExportedObjectsByType(TTCN3Package.eINSTANCE.getImportDef())) { String value = getImportedNamespace(d.getEObjectOrProxy()); ImportNormalizer resolver = createImportedNamespaceResolver(value, ignoreCase); if (resolver != null) importedNamespaceResolvers.add(resolver); Loading Loading @@ -119,24 +126,27 @@ public class TTCN3ImportedNamespaceAwareLocalScopeProvider extends ImportedNames return doCreateImportNormalizer(namespace, wildcard, ignoreCase); } protected <T extends EObject> List<ImportNormalizer> namespaceResolverForType(EObject context, boolean ignoreCase, Class<T> type, boolean wildcard) { protected <T extends EObject> List<ImportNormalizer> namespaceResolverForType(EObject context, boolean ignoreCase, EClass type, boolean wildcard, final ISelectable allDescriptions) { List<ImportNormalizer> normalizers = Lists.newArrayList(); List<T> eContents = EcoreUtil2.getAllContentsOfType(context, type); for (EObject imp : eContents) { QualifiedName qn = qualifiedNameProvider.getFullyQualifiedName(imp); ImportNormalizer resolver = createImportedNamespaceResolver(qn, ignoreCase, wildcard); for (IEObjectDescription d : allDescriptions.getExportedObjectsByType(type)) { ImportNormalizer resolver = createImportedNamespaceResolver(d.getQualifiedName(), ignoreCase, wildcard); if (resolver != null) normalizers.add(resolver); } return normalizers; } protected <T extends EObject> List<ImportNormalizer> namespaceResolverForImportedType(final TTCN3Module context, final IScope scope, boolean ignoreCase) { protected <T extends EObject> List<ImportNormalizer> namespaceResolverForImportedType(final TTCN3Module context, final IScope scope, boolean ignoreCase, final ISelectable allDescriptions) { List<ImportNormalizer> normalizers = Lists.newArrayList(); List<String> imports = getImports(context); List<String> imports = getImports(allDescriptions); for (IEObjectDescription e : scope.getAllElements()) { if (!e.getQualifiedName().getFirstSegment().equals(context.getName()) && imports.contains(e.getQualifiedName().getFirstSegment())) { if (!e.getQualifiedName().getFirstSegment().equals(context.getName()) && imports.contains(e.getQualifiedName().getFirstSegment())) { if (EcoreUtil2.isAssignableFrom(TTCN3Package.eINSTANCE.getGroupDef(), e.getEClass())) normalizers.add(doCreateImportNormalizer(e.getQualifiedName(), true, ignoreCase)); if (EcoreUtil2.isAssignableFrom(TTCN3Package.eINSTANCE.getEnumDefNamed(), e.getEClass())) Loading Loading @@ -176,10 +186,11 @@ public class TTCN3ImportedNamespaceAwareLocalScopeProvider extends ImportedNames return normalizers; } protected List<String> getImports(final TTCN3Module module) { protected List<String> getImports(final ISelectable allDescriptions) { List<String> list = Lists.newArrayList(); for (ImportDef i: EcoreUtil2.getAllContentsOfType(module, ImportDef.class)) { list.add(i.getModuleNamespace()); for (IEObjectDescription d : allDescriptions.getExportedObjectsByType(TTCN3Package.eINSTANCE.getImportDef())) { list.add(((ImportDef) d.getEObjectOrProxy()).getName()); } return list; } Loading de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/validation/MiscFeatureValidator.xtend +1 −1 Original line number Diff line number Diff line Loading @@ -28,7 +28,7 @@ class MiscFeatureValidator extends AbstractDeclarativeValidator { activeProfile.featureListImportingModuleNames || activeProfile.featureListImportingModuleFileNames) { for (i : module.getAllContentsOfType(ImportDef)) { TTCN3StatisticsProvider.getInstance().addImport(module.name, i.moduleNamespace) TTCN3StatisticsProvider.getInstance().addImport(module.name, i.name) } } } Loading de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/validation/ModularizationValidator.xtend +2 −2 Original line number Diff line number Diff line Loading @@ -169,7 +169,7 @@ class ModularizationValidator extends AbstractDeclarativeValidator { var libCommonReferenceFound = false; for (i : module.getAllContentsOfType(ImportDef)) { typesAndValuesImportsLibNamesMatcher = typesAndValuesImportsLibNamesPattern.matcher(i.moduleNamespace) typesAndValuesImportsLibNamesMatcher = typesAndValuesImportsLibNamesPattern.matcher(i.name) if (typesAndValuesImportsLibNamesMatcher.matches()) { libCommonReferenceFound = true } Loading Loading @@ -203,7 +203,7 @@ class ModularizationValidator extends AbstractDeclarativeValidator { var libCommonReferenceFound = false; for (i : module.getAllContentsOfType(ImportDef)) { if (i.moduleNamespace.contains("LibCommon_Sync")) { if (i.name.contains("LibCommon_Sync")) { libCommonReferenceFound = true } } Loading Loading
de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/GenerateTTCN3.mwe2 +2 −1 Original line number Diff line number Diff line Loading @@ -96,6 +96,7 @@ Workflow { // scoping and exporting API fragment = de.ugoe.cs.swe.scoping.TTCN3ImportNamespaceScopingFragment auto-inject {} //fragment = scoping.ImportNamespacesScopingFragment auto-inject {} fragment = exporting.QualifiedNamesFragment auto-inject {} fragment = builder.BuilderIntegrationFragment auto-inject {} Loading
de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/TTCN3.xtext +1 −1 Original line number Diff line number Diff line Loading @@ -62,7 +62,7 @@ ExtConstDef: EXTKEYWORD CONSTKEYWORD type=Type id=IdentifierList; ImportDef: IMPORTKEYWORD FROMKEYWORD moduleNamespace=IDENTIFIER spec=LanguageSpec? RECURSIVEKEYWORD? (all=AllWithExcepts | IMPORTKEYWORD FROMKEYWORD name=IDENTIFIER spec=LanguageSpec? RECURSIVEKEYWORD? (all=AllWithExcepts | LBRACKET importSpec=ImportSpec RBRACKET); AllWithExcepts: Loading
de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/scoping/TTCN3ImportedNamespaceAwareLocalScopeProvider.java +36 −25 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ import static java.util.Collections.singletonList; import java.util.List; import org.eclipse.emf.common.notify.Notifier; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EReference; import org.eclipse.emf.ecore.EStructuralFeature; Loading Loading @@ -53,28 +54,33 @@ public class TTCN3ImportedNamespaceAwareLocalScopeProvider extends ImportedNames if (TTCN3Module.class.isAssignableFrom(context.getClass())) { namespaceResolvers.addAll(getImportedNamespaceResolvers(context, ignoreCase)); namespaceResolvers.addAll(namespaceResolverForType(context, ignoreCase, GroupDef.class, true)); namespaceResolvers.addAll(namespaceResolverForType(context, ignoreCase, Enumeration.class, false)); namespaceResolvers.addAll(namespaceResolverForType(context, ignoreCase, TTCN3Module.class, true)); namespaceResolvers.addAll(namespaceResolverForImportedType((TTCN3Module) context, parent, ignoreCase)); namespaceResolvers.addAll(namespaceResolverForType(context, ignoreCase, TTCN3Package.eINSTANCE.getGroupDef(), true, allDescriptions)); namespaceResolvers.addAll(namespaceResolverForType(context, ignoreCase, TTCN3Package.eINSTANCE.getEnumeration(), false, allDescriptions)); namespaceResolvers.addAll(namespaceResolverForType(context, ignoreCase, TTCN3Package.eINSTANCE.getTTCN3Module(), true, allDescriptions)); namespaceResolvers.addAll(namespaceResolverForImportedType((TTCN3Module) context, parent, ignoreCase, allDescriptions)); if (!namespaceResolvers.isEmpty()) { if (isRelativeImport() && name != null) { ImportNormalizer localNormalizer = doCreateImportNormalizer(name, true, ignoreCase); result = createImportScope(result, singletonList(localNormalizer), allDescriptions, reference.getEReferenceType(), isIgnoreCase(reference)); result = createImportScope(result, singletonList(localNormalizer), allDescriptions, reference.getEReferenceType(), isIgnoreCase(reference)); } result = createImportScope(result, namespaceResolvers, null, reference.getEReferenceType(), isIgnoreCase(reference)); } } if (name != null) { ImportNormalizer localNormalizer = doCreateImportNormalizer(name, true, ignoreCase); result = createImportScope(result, singletonList(localNormalizer), allDescriptions, reference.getEReferenceType(), isIgnoreCase(reference)); result = createImportScope(result, singletonList(localNormalizer), allDescriptions, reference.getEReferenceType(), isIgnoreCase(reference)); } return result; } @Override protected String getImportedNamespace(EObject object) { EStructuralFeature feature = object.eClass().getEStructuralFeature("moduleNamespace"); EStructuralFeature feature = object.eClass().getEStructuralFeature("name"); if (feature != null && String.class.equals(feature.getEType().getInstanceClass())) { return (String) object.eGet(feature); } Loading @@ -85,9 +91,10 @@ public class TTCN3ImportedNamespaceAwareLocalScopeProvider extends ImportedNames protected List<ImportNormalizer> internalGetImportedNamespaceResolvers(EObject context, boolean ignoreCase) { List<ImportNormalizer> importedNamespaceResolvers = Lists.newArrayList(); if (TTCN3Module.class.isAssignableFrom(context.getClass())) { List<ImportDef> eContents = EcoreUtil2.getAllContentsOfType(context, ImportDef.class); for (EObject imp : eContents) { String value = getImportedNamespace(imp); ISelectable allDescriptions = getAllDescriptions(context.eResource()); for (IEObjectDescription d : allDescriptions.getExportedObjectsByType(TTCN3Package.eINSTANCE.getImportDef())) { String value = getImportedNamespace(d.getEObjectOrProxy()); ImportNormalizer resolver = createImportedNamespaceResolver(value, ignoreCase); if (resolver != null) importedNamespaceResolvers.add(resolver); Loading Loading @@ -119,24 +126,27 @@ public class TTCN3ImportedNamespaceAwareLocalScopeProvider extends ImportedNames return doCreateImportNormalizer(namespace, wildcard, ignoreCase); } protected <T extends EObject> List<ImportNormalizer> namespaceResolverForType(EObject context, boolean ignoreCase, Class<T> type, boolean wildcard) { protected <T extends EObject> List<ImportNormalizer> namespaceResolverForType(EObject context, boolean ignoreCase, EClass type, boolean wildcard, final ISelectable allDescriptions) { List<ImportNormalizer> normalizers = Lists.newArrayList(); List<T> eContents = EcoreUtil2.getAllContentsOfType(context, type); for (EObject imp : eContents) { QualifiedName qn = qualifiedNameProvider.getFullyQualifiedName(imp); ImportNormalizer resolver = createImportedNamespaceResolver(qn, ignoreCase, wildcard); for (IEObjectDescription d : allDescriptions.getExportedObjectsByType(type)) { ImportNormalizer resolver = createImportedNamespaceResolver(d.getQualifiedName(), ignoreCase, wildcard); if (resolver != null) normalizers.add(resolver); } return normalizers; } protected <T extends EObject> List<ImportNormalizer> namespaceResolverForImportedType(final TTCN3Module context, final IScope scope, boolean ignoreCase) { protected <T extends EObject> List<ImportNormalizer> namespaceResolverForImportedType(final TTCN3Module context, final IScope scope, boolean ignoreCase, final ISelectable allDescriptions) { List<ImportNormalizer> normalizers = Lists.newArrayList(); List<String> imports = getImports(context); List<String> imports = getImports(allDescriptions); for (IEObjectDescription e : scope.getAllElements()) { if (!e.getQualifiedName().getFirstSegment().equals(context.getName()) && imports.contains(e.getQualifiedName().getFirstSegment())) { if (!e.getQualifiedName().getFirstSegment().equals(context.getName()) && imports.contains(e.getQualifiedName().getFirstSegment())) { if (EcoreUtil2.isAssignableFrom(TTCN3Package.eINSTANCE.getGroupDef(), e.getEClass())) normalizers.add(doCreateImportNormalizer(e.getQualifiedName(), true, ignoreCase)); if (EcoreUtil2.isAssignableFrom(TTCN3Package.eINSTANCE.getEnumDefNamed(), e.getEClass())) Loading Loading @@ -176,10 +186,11 @@ public class TTCN3ImportedNamespaceAwareLocalScopeProvider extends ImportedNames return normalizers; } protected List<String> getImports(final TTCN3Module module) { protected List<String> getImports(final ISelectable allDescriptions) { List<String> list = Lists.newArrayList(); for (ImportDef i: EcoreUtil2.getAllContentsOfType(module, ImportDef.class)) { list.add(i.getModuleNamespace()); for (IEObjectDescription d : allDescriptions.getExportedObjectsByType(TTCN3Package.eINSTANCE.getImportDef())) { list.add(((ImportDef) d.getEObjectOrProxy()).getName()); } return list; } Loading
de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/validation/MiscFeatureValidator.xtend +1 −1 Original line number Diff line number Diff line Loading @@ -28,7 +28,7 @@ class MiscFeatureValidator extends AbstractDeclarativeValidator { activeProfile.featureListImportingModuleNames || activeProfile.featureListImportingModuleFileNames) { for (i : module.getAllContentsOfType(ImportDef)) { TTCN3StatisticsProvider.getInstance().addImport(module.name, i.moduleNamespace) TTCN3StatisticsProvider.getInstance().addImport(module.name, i.name) } } } Loading
de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/validation/ModularizationValidator.xtend +2 −2 Original line number Diff line number Diff line Loading @@ -169,7 +169,7 @@ class ModularizationValidator extends AbstractDeclarativeValidator { var libCommonReferenceFound = false; for (i : module.getAllContentsOfType(ImportDef)) { typesAndValuesImportsLibNamesMatcher = typesAndValuesImportsLibNamesPattern.matcher(i.moduleNamespace) typesAndValuesImportsLibNamesMatcher = typesAndValuesImportsLibNamesPattern.matcher(i.name) if (typesAndValuesImportsLibNamesMatcher.matches()) { libCommonReferenceFound = true } Loading Loading @@ -203,7 +203,7 @@ class ModularizationValidator extends AbstractDeclarativeValidator { var libCommonReferenceFound = false; for (i : module.getAllContentsOfType(ImportDef)) { if (i.moduleNamespace.contains("LibCommon_Sync")) { if (i.name.contains("LibCommon_Sync")) { libCommonReferenceFound = true } } Loading