Commit 0a2ee189 authored by Philip Makedonski's avatar Philip Makedonski
Browse files

+ reference resolution refinements

parent ec983d0f
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -85,6 +85,8 @@ import org.eclipse.xtext.EcoreUtil2
import de.ugoe.cs.swe.tTCN3.SingleValueSpec
import de.ugoe.cs.swe.tTCN3.PortReceiveOp
import de.ugoe.cs.swe.tTCN3.Value
import org.eclipse.xtext.nodemodel.util.NodeModelUtils
import de.ugoe.cs.swe.tTCN3.Assignment

//TODO: switch to TTCN3LocalScopeProvider as base class?
class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider {
@@ -99,7 +101,9 @@ class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider {
	private def Iterable<EObject> scopeFieldReferences(FieldReference fieldRef) {
		if (fieldRef instanceof StructFieldDef) {
			if (fieldRef.type !== null && fieldRef.type.ref !== null) {
				fieldRef.type.ref.scopeReferencedFields
				//TODO: why does it not work with default output? should all the others be adapted as well?!
				var fields = fieldRef.type.ref.scopeReferencedFields
				return fields
			} else if (fieldRef.nestedType !== null) {
				if (fieldRef.nestedType !== null) {
					val nType = fieldRef.nestedType.findUsedType
@@ -210,6 +214,7 @@ class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider {
		val cField = field.findDesiredParent(FieldConstExpressionSpec)
		val sField = field.findDesiredParent(FieldSpec)
		val constDef = field.findDesiredParent(ConstDef)
		val assignment = field.findDesiredParent(Assignment)
		val hasArrayAsParent = field.findDesiredParent(ArrayExpression) !== null
		var ArrayList<EObject> list = newArrayList
		var nestedFields = newArrayList
@@ -248,6 +253,10 @@ class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider {
			} else if (variable.listType !== null && variable.listType.ref !== null) {
				list.addAll(variable.listType.ref.scopeReferencedFields)
			}
		} else if (assignment !== null) {
			var ref = assignment.ref.ref
			var elements = ref.head.directElements
			list.addAll(elements)
		}

		// TODO: search for a more sophisticated condition