Commit c11749a3 authored by Daniel Honsel's avatar Daniel Honsel
Browse files

improved performance

parent 984aa344
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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 {}

+1 −1
Original line number Diff line number Diff line
@@ -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:
+36 −25
Original line number Diff line number Diff line
@@ -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;
@@ -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);
		}
@@ -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);
@@ -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()))
@@ -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;
	}
+1 −1
Original line number Diff line number Diff line
@@ -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)
			}
		}
	}
+2 −2
Original line number Diff line number Diff line
@@ -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
			}
@@ -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
			}
		}