/*
 * Copyright (c) 2008 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:
 *    Artem Tikhomirov (Borland) - initial API and implementation
 */

import "http://www.eclipse.org/emf/2002/GenModel";
import "http://www.eclipse.org/emf/2002/Ecore";
import "http://www.eclipse.org/gmf/2008/GenModel";

String getNameToken(GenPackage gp) : gp.prefix ;

String fieldName(GenPackage gp) : "instance" + getNameToken(gp) ;

// This is a hack, internal use only
DynamicModelAccess getDMA() : GLOBALVAR DynamicModelAccess ;