Commit 205ec893 authored by Daniel Honsel's avatar Daniel Honsel
Browse files

improved performance

parent eee967dd
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -76,6 +76,7 @@ public class TTCN3ResourceProvider {
			}
		}
		
		TTCN3StatisticsProvider.getInstance().setParsingCompleted(true);
		System.out.println("Test suite parsed in " + MiscTools.secondsToString(TTCN3StatisticsProvider.getInstance().getParseTime())
				+ " minutes.");
	}
+20 −12
Original line number Diff line number Diff line
@@ -21,12 +21,15 @@ import org.eclipse.xtext.scoping.impl.ImportedNamespaceAwareLocalScopeProvider;
import org.eclipse.xtext.util.Strings;
import org.eclipse.xtext.util.Tuples;

import com.google.common.collect.HashMultimap;
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
import com.google.inject.Inject;

import de.ugoe.cs.swe.tTCN3.ImportDef;
import de.ugoe.cs.swe.tTCN3.TTCN3Module;
import de.ugoe.cs.swe.tTCN3.TTCN3Package;
import de.ugoe.cs.swe.validation.TTCN3StatisticsProvider;

/**
 * A local scope provider that understands module imports.
@@ -39,6 +42,8 @@ public class TTCN3ImportedNamespaceAwareLocalScopeProvider extends ImportedNames
	@Inject
	private IQualifiedNameConverter qualifiedNameConverter;
	
	private Multimap<TTCN3Module, ImportNormalizer> moduleImportNormalizers = HashMultimap.create();

	@Override
	protected IScope getLocalElementsScope(IScope parent, EObject context, EReference reference) {
		final List<ImportNormalizer> namespaceResolvers = Lists.newArrayList();
@@ -48,14 +53,22 @@ public class TTCN3ImportedNamespaceAwareLocalScopeProvider extends ImportedNames
		boolean ignoreCase = isIgnoreCase(reference);

		if (TTCN3Module.class.isAssignableFrom(context.getClass())) {
			namespaceResolvers.addAll(getImportedNamespaceResolvers(context, 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));
			TTCN3Module module = (TTCN3Module) context;
					
			if (TTCN3StatisticsProvider.getInstance().isParsingCompleted() && moduleImportNormalizers.containsKey(module)) {
				namespaceResolvers.addAll(moduleImportNormalizers.get(module));
			} else {
				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 (TTCN3StatisticsProvider.getInstance().isParsingCompleted()) {
					moduleImportNormalizers.putAll(module, namespaceResolvers);
				}
			}
			
			namespaceResolvers.addAll(getImportedNamespaceResolvers(context, ignoreCase));
			
			if (!namespaceResolvers.isEmpty()) {
				if (isRelativeImport() && name != null) {
					ImportNormalizer localNormalizer = doCreateImportNormalizer(name, true, ignoreCase);
@@ -65,11 +78,6 @@ public class TTCN3ImportedNamespaceAwareLocalScopeProvider extends ImportedNames
				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));
		}
		return result;
	}

+9 −0
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ public class TTCN3StatisticsProvider {
	private int countStyle;
	private int countModularization;
	private boolean importsInitialized;
	private boolean parsingCompleted;

	public int getCountNaming() {
		return countNaming;
@@ -242,4 +243,12 @@ public class TTCN3StatisticsProvider {
		return importsInitialized;
	}

	public boolean isParsingCompleted() {
		return parsingCompleted;
	}

	public void setParsingCompleted(boolean parsingCompleted) {
		this.parsingCompleted = parsingCompleted;
	}

}