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

fixed minor bug and some cleanup

parent 03b87cc1
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -3,7 +3,6 @@ package de.ugoe.cs.swe.common;
import java.util.Collections;
import java.util.List;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.EcoreUtil2;
import org.eclipse.xtext.naming.DefaultDeclarativeQualifiedNameProvider;
import org.eclipse.xtext.naming.IQualifiedNameConverter;
+8 −21
Original line number Diff line number Diff line
@@ -5,21 +5,15 @@ 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;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.xtext.EcoreUtil2;
import org.eclipse.xtext.naming.IQualifiedNameConverter;
import org.eclipse.xtext.naming.IQualifiedNameProvider;
import org.eclipse.xtext.naming.QualifiedName;
import org.eclipse.xtext.resource.IEObjectDescription;
import org.eclipse.xtext.resource.IResourceDescription;
import org.eclipse.xtext.resource.IResourceDescriptions;
import org.eclipse.xtext.resource.ISelectable;
import org.eclipse.xtext.resource.impl.ResourceDescriptionsProvider;
import org.eclipse.xtext.scoping.IGlobalScopeProvider;
import org.eclipse.xtext.scoping.IScope;
import org.eclipse.xtext.scoping.impl.ImportNormalizer;
import org.eclipse.xtext.scoping.impl.ImportedNamespaceAwareLocalScopeProvider;
@@ -29,17 +23,11 @@ import org.eclipse.xtext.util.Tuples;
import com.google.common.collect.Lists;
import com.google.inject.Inject;

import de.ugoe.cs.swe.tTCN3.AltstepDef;
import de.ugoe.cs.swe.tTCN3.EnumDef;
import de.ugoe.cs.swe.tTCN3.EnumDefNamed;
import de.ugoe.cs.swe.tTCN3.FunctionDef;
import de.ugoe.cs.swe.tTCN3.Enumeration;
import de.ugoe.cs.swe.tTCN3.GroupDef;
import de.ugoe.cs.swe.tTCN3.ImportDef;
import de.ugoe.cs.swe.tTCN3.PortElement;
import de.ugoe.cs.swe.tTCN3.SingleVarInstance;
import de.ugoe.cs.swe.tTCN3.TTCN3Module;
import de.ugoe.cs.swe.tTCN3.TTCN3Package;
import de.ugoe.cs.swe.tTCN3.TestcaseDef;

/**
 * A local scope provider that understands module imports.
@@ -65,10 +53,9 @@ public class TTCN3ImportedNamespaceAwareLocalScopeProvider extends ImportedNames

		if (TTCN3Module.class.isAssignableFrom(context.getClass())) {
			namespaceResolvers.addAll(getImportedNamespaceResolvers(context, ignoreCase));
			namespaceResolvers.addAll(namespaceResolverForType(context, ignoreCase, GroupDef.class));
			namespaceResolvers.addAll(namespaceResolverForType(context, ignoreCase, EnumDef.class));
			namespaceResolvers.addAll(namespaceResolverForType(context, ignoreCase, EnumDefNamed.class));
			namespaceResolvers.addAll(namespaceResolverForType(context, ignoreCase, TTCN3Module.class));
			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));
			if (!namespaceResolvers.isEmpty()) {
				if (isRelativeImport() && name != null) {
@@ -125,19 +112,19 @@ public class TTCN3ImportedNamespaceAwareLocalScopeProvider extends ImportedNames
		return Tuples.create(TTCN3ImportedNamespaceAwareLocalScopeProvider.class, context, reference);
	}

	protected ImportNormalizer createImportedNamespaceResolver(QualifiedName namespace, boolean ignoreCase) {
	protected ImportNormalizer createImportedNamespaceResolver(QualifiedName namespace, boolean ignoreCase, boolean wildcard) {
		if (namespace.isEmpty() || namespace.getSegmentCount() < 1)
			return null;

		return doCreateImportNormalizer(namespace, true, ignoreCase);
		return doCreateImportNormalizer(namespace, wildcard, ignoreCase);
	}

	protected <T extends EObject> List<ImportNormalizer> namespaceResolverForType(EObject context, boolean ignoreCase, Class<T> type) {
	protected <T extends EObject> List<ImportNormalizer> namespaceResolverForType(EObject context, boolean ignoreCase, Class<T> type, boolean wildcard) {
		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);
			ImportNormalizer resolver = createImportedNamespaceResolver(qn, ignoreCase, wildcard);
			if (resolver != null)
				normalizers.add(resolver);
		}
+1 −19
Original line number Diff line number Diff line
package de.ugoe.cs.swe.scoping

import de.ugoe.cs.swe.tTCN3.AltstepDef

import de.ugoe.cs.swe.tTCN3.AltstepLocalDef
import de.ugoe.cs.swe.tTCN3.BaseTemplate
import de.ugoe.cs.swe.tTCN3.ComponentDef
import de.ugoe.cs.swe.tTCN3.ComponentDefList
import de.ugoe.cs.swe.tTCN3.ControlStatementOrDefList
import de.ugoe.cs.swe.tTCN3.ExtendedFieldReference
import de.ugoe.cs.swe.tTCN3.FieldExpressionSpec
import de.ugoe.cs.swe.tTCN3.FieldSpec
import de.ugoe.cs.swe.tTCN3.ForStatement
import de.ugoe.cs.swe.tTCN3.FormalTimerPar
import de.ugoe.cs.swe.tTCN3.FormalValuePar
import de.ugoe.cs.swe.tTCN3.FunctionDef
import de.ugoe.cs.swe.tTCN3.GroupDef
import de.ugoe.cs.swe.tTCN3.Initial
import de.ugoe.cs.swe.tTCN3.ModuleControlBody
import de.ugoe.cs.swe.tTCN3.ModuleControlPart
import de.ugoe.cs.swe.tTCN3.ModuleDefinition
import de.ugoe.cs.swe.tTCN3.ModuleDefinitionsList
import de.ugoe.cs.swe.tTCN3.ModuleParDef
import de.ugoe.cs.swe.tTCN3.PortInstance
import de.ugoe.cs.swe.tTCN3.PortOrAny
import de.ugoe.cs.swe.tTCN3.PortRef
import de.ugoe.cs.swe.tTCN3.ReferencedType
import de.ugoe.cs.swe.tTCN3.ReferencedValue
import de.ugoe.cs.swe.tTCN3.SendStatement
import de.ugoe.cs.swe.tTCN3.SingleTempVarInstance
import de.ugoe.cs.swe.tTCN3.SingleVarInstance
import de.ugoe.cs.swe.tTCN3.StatementBlock
import de.ugoe.cs.swe.tTCN3.StructFieldDef
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.TimerRefOrAny
import de.ugoe.cs.swe.tTCN3.Type
import de.ugoe.cs.swe.tTCN3.TypeDef
import de.ugoe.cs.swe.tTCN3.VarInstance
import org.eclipse.emf.ecore.EReference
import org.eclipse.xtext.scoping.IScope
@@ -45,7 +28,6 @@ import static org.eclipse.xtext.scoping.Scopes.*

import static extension de.ugoe.cs.swe.common.TTCN3ScopeHelper.*
import static extension org.eclipse.xtext.EcoreUtil2.*
import de.ugoe.cs.swe.tTCN3.FormalTimerPar

class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider {