/* * Copyright (c) 2009 Borland Software Corporation *  * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: *    Alexander Shatalin (Borland) - initial API and implementation */ modeltype gmfgen uses "http://www.eclipse.org/gmf/2009/GenModel";modeltype genmodel uses "http://www.eclipse.org/emf/2002/GenModel"; library SemanticSyncUtils;/* * This file contains a set of qvto queries duplicating corresponding queries  * from same native library and can be important to compile corresponding  * templates in a workspace.  * * This file should NOT be deployed to final .jar - original native library  * implementation (registered via plugin.xml) should be used on execution time. */helper getTypeGenLinksForFeature(gcb : gmfgen::GenCommonBase, genFeature : genmodel::GenFeature, containedLinks : Collection(gmfgen::GenLink)) : Collection(gmfgen::GenLink) {	return null}helper getFeatureGenLinksForFeature(gcb : gmfgen::GenCommonBase, genFeature : genmodel::GenFeature, containedLinks : Collection(gmfgen::GenLink)) : Collection(gmfgen::GenLink) {	return null}helper buildAncestorClosure(elements : Collection(gmfgen::GenCommonBase)) : Collection(gmfgen::GenCommonBase) {	return null}helper getGenNodes(genContainerBase : gmfgen::GenContainerBase, genFeature : genmodel::GenFeature) : Collection(gmfgen::GenNode) {	return null}