Commit 7fc10d62 authored by Daniel Honsel's avatar Daniel Honsel
Browse files

reference ports defined in inherited components

parent 9c37f12c
Loading
Loading
Loading
Loading
+16 −17
Original line number Diff line number Diff line
@@ -54,7 +54,6 @@ class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider {
		scopeFor(inner)
	}

	
	def IScope scope_PortOrAny_ref(PortOrAny spec, EReference ref) {
		val altstep = spec.findDesiredParent(typeof(AltstepDef)) as AltstepDef
		val inner = newArrayList
@@ -62,17 +61,17 @@ class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider {
		if (altstep.spec != null) {
			componentScopePorts(altstep.spec.component, inner)
		}
		
		scopeFor(inner)
	}

	// TODO: use this for other types (constDef, singleVar, template)
	// TODO: treat extended components
	def private void componentScopePorts(ComponentDef component, ArrayList<EObject> list) {
		for (ComponentDefList l : component.defs.filter[it.element.port != null]) {
			for (PortElement e : l.element.port.instances) {
				list.add(e)
			}
		}
		for (ComponentDef e : component.extends) {
			componentScopePorts(e, list)
		}
	}
}
+21 −16
Original line number Diff line number Diff line
package de.ugoe.cs.swe.validation

import de.ugoe.cs.swe.tTCN3.AltstepDef
import de.ugoe.cs.swe.tTCN3.AltstepLocalDef
import de.ugoe.cs.swe.tTCN3.AltstepLocalDefList
import de.ugoe.cs.swe.tTCN3.ComponentDef
import de.ugoe.cs.swe.tTCN3.ComponentDefList
import de.ugoe.cs.swe.tTCN3.ConstDef
import de.ugoe.cs.swe.tTCN3.ConstList
import de.ugoe.cs.swe.tTCN3.ControlStatementOrDefList
import de.ugoe.cs.swe.tTCN3.ForStatement
import de.ugoe.cs.swe.tTCN3.FormalTemplatePar
import de.ugoe.cs.swe.tTCN3.FormalValuePar
import de.ugoe.cs.swe.tTCN3.FunctionDef
import de.ugoe.cs.swe.tTCN3.FunctionDefList
import de.ugoe.cs.swe.tTCN3.FunctionFormalPar
import de.ugoe.cs.swe.tTCN3.FunctionFormalParList
import de.ugoe.cs.swe.tTCN3.Initial
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.RefValue
import de.ugoe.cs.swe.tTCN3.SingleConstDef
import de.ugoe.cs.swe.tTCN3.SingleVarInstance
import de.ugoe.cs.swe.tTCN3.StatementBlock
import de.ugoe.cs.swe.tTCN3.StructDefBody
import de.ugoe.cs.swe.tTCN3.StructFieldDef
import de.ugoe.cs.swe.tTCN3.TTCN3Module
import de.ugoe.cs.swe.tTCN3.TTCN3Package
import de.ugoe.cs.swe.tTCN3.VarList
import org.eclipse.emf.ecore.EObject
import org.eclipse.xtext.validation.Check
import de.ugoe.cs.swe.tTCN3.FormalValuePar
import de.ugoe.cs.swe.tTCN3.ModuleControlPart
import de.ugoe.cs.swe.tTCN3.ControlStatementOrDefList
import de.ugoe.cs.swe.tTCN3.ComponentDef
import de.ugoe.cs.swe.tTCN3.ComponentDefList
import de.ugoe.cs.swe.tTCN3.TemplateOrValueFormalParList
import de.ugoe.cs.swe.tTCN3.TemplateOrValueFormalPar
import de.ugoe.cs.swe.tTCN3.TemplateOrValueFormalParList
import de.ugoe.cs.swe.tTCN3.TestcaseDef
import de.ugoe.cs.swe.tTCN3.VarList
import org.eclipse.emf.ecore.EObject
import org.eclipse.emf.ecore.EStructuralFeature
import de.ugoe.cs.swe.tTCN3.StructFieldDef
import org.eclipse.xtext.validation.Check

import static extension de.ugoe.cs.swe.common.TTCN3ScopeHelper.*
import de.ugoe.cs.swe.tTCN3.impl.SingleConstDefImpl
import de.ugoe.cs.swe.tTCN3.impl.RefValueImpl
import de.ugoe.cs.swe.tTCN3.StructDefBody
import de.ugoe.cs.swe.tTCN3.AltstepDef
import de.ugoe.cs.swe.tTCN3.AltstepLocalDef
import de.ugoe.cs.swe.tTCN3.AltstepLocalDefList

class TTCN3Validator extends AbstractTTCN3Validator {

@@ -54,6 +54,11 @@ class TTCN3Validator extends AbstractTTCN3Validator {
		variable.isNameClashInHierarchy
	}

	@Check
	def checkUniqueNameNestedVariable(FormalTemplatePar variable) {
		variable.isNameClashInHierarchy
	}

	@Check
	def checkUniqueNameStructFieldDef(StructFieldDef field) {
		// find name clashes with module variables