Commit 03b87cc1 authored by Daniel Honsel's avatar Daniel Honsel
Browse files

fixed value scope of extended components

parent 66719eb3
Loading
Loading
Loading
Loading
+36 −13
Original line number Diff line number Diff line
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;
import org.eclipse.xtext.naming.QualifiedName;

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

import de.ugoe.cs.swe.tTCN3.FormalPortPar;
import de.ugoe.cs.swe.tTCN3.FormalTemplatePar;
import de.ugoe.cs.swe.tTCN3.FormalTimerPar;
import de.ugoe.cs.swe.tTCN3.FormalValuePar;
import de.ugoe.cs.swe.tTCN3.GroupDef;
import de.ugoe.cs.swe.tTCN3.RefValue;
import de.ugoe.cs.swe.tTCN3.TTCN3Module;

/**
 * 
@@ -36,4 +45,18 @@ public class TTCN3DeclarativeQualifiedNameProvider extends DefaultDeclarativeQua
	protected QualifiedName qualifiedName(FormalPortPar ele) {
		return converter.toQualifiedName(ele.getName());
	}

	protected QualifiedName qualifiedName(RefValue ele) {
		List<String> groupNames = Lists.newArrayList();
		GroupDef group = EcoreUtil2.getContainerOfType(ele, GroupDef.class);
		groupNames.add(ele.getName());
		while (group != null) {
			groupNames.add(group.getName());
			group = EcoreUtil2.getContainerOfType(group.eContainer(), GroupDef.class);
		}
		TTCN3Module module = EcoreUtil2.getContainerOfType(ele, TTCN3Module.class);
		groupNames.add(module.getName());
		Collections.reverse(groupNames);
		return QualifiedName.create(groupNames);
	}
}
+7 −1
Original line number Diff line number Diff line
@@ -55,6 +55,12 @@ class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider {
		scopeFor(inner, template.polymorphicFindScopeForClassName(ref))
	}
	
	def IScope scope_ReferencedValue_ref(ComponentDef component, EReference ref) {
		val inner = newArrayList
		component.componentScopeValueRefs(inner, false, true)
		scopeFor(inner, component.polymorphicFindScopeForClassName(ref))
	}	
	
	def IScope scope_FieldSpec_ref(FieldSpec spec, EReference ref) {
		val template = spec.findDesiredParent(TemplateDef)
		val variable = spec.findDesiredParent(VarInstance)