-- @atlcompiler emftvm
-- @nsURI ECORE=http://www.eclipse.org/emf/2002/Ecore
module LazyRuleInheritanceTest;

create OUT : ECORE from IN : ECORE;

lazy abstract rule EModelElement {
	from
		s : ECORE!EModelElement
	to
		t : ECORE!EModelElement
}

lazy abstract rule ENamedElement extends EModelElement {
	from
		s : ECORE!ENamedElement
	to
		t : ECORE!ENamedElement (
			name <- s.name
		)
}

lazy rule EPackage extends ENamedElement {
	from
		s : ECORE!EPackage
	to
		t : ECORE!EPackage (
			nsPrefix <- s.nsPrefix,
			nsURI <- s.nsURI,
			eClassifiers <- s.eClassifiers->collect(c | thisModule.EModelElement(c)),
			eSubpackages <- s.eSubpackages->collect(c | thisModule.EModelElement(c))
		)
}

lazy rule MultiEPackage extends EPackage {
	from
		s : ECORE!EPackage,
		x : OclAny
	to
		t : ECORE!EPackage
	do {
		Sequence{t};
	}
}

lazy abstract rule EClassifier extends ENamedElement {
	from
		s : ECORE!EClassifier
	to
		t : ECORE!EClassifier
}

lazy rule EClass extends EClassifier {
	from
		s : ECORE!EClass
	to
		t : ECORE!EClass (
			"abstract" <- s."abstract"
			
		)
}

endpoint rule map() {
	do {
		for (p in ECORE!EPackage.allInstances()) {
			thisModule.EModelElement(p);
		}
	}
}