blob: d096faa577f8f169f24b24f5ca21a7dc2b4b251e [file] [log] [blame]
/*
* Copyright (c) 2010 Artem Tikhomirov and others
*
* 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 (independent) - initial API and implementation
*/
«IMPORT 'http://www.eclipse.org/gmf/2009/GenModel'»
«EXTENSION xpt::GenEditorGenerator»
// Generic types
«DEFINE G(String type) FOR gmfgen::GenCommonBase»«IF self.jdkComplianceLevel() > 4»<«type»>«ELSE»/*[«type»]*/«ENDIF»«ENDDEFINE»
«DEFINE G2(String type1, String type2) FOR gmfgen::GenCommonBase»«IF self.jdkComplianceLevel() > 4»<«type1», «type2»>«ELSE»/*[«type1», «type2»]*/«ENDIF»«ENDDEFINE»
«DEFINE _g2_3(String t, String a, String b, String c) FOR gmfgen::GenCommonBase»«t»«IF self.jdkComplianceLevel() > 4»<«a», «b»<«c»>>«ELSE»/*[«a», «b»[«c»]]*/«ENDIF»«ENDDEFINE»
// e.g. java.util.List<String>
«DEFINE G(String type, String typeArgument) FOR gmfgen::GenCommonBase»«type»«EXPAND G(typeArgument)»«ENDDEFINE»
// e.g. java.util.Map<String, Integer>
«DEFINE G2(String type, String typeArgument1, String typeArgument2) FOR gmfgen::GenCommonBase»«type»«EXPAND G2(typeArgument1, typeArgument2)»«ENDDEFINE»
// java.util.List<String> varName = new Type<TypeArgument>
// note, no constructor parameters, callers should add (); or whatever they think is reasonable
// XXX perhaps, varName should go first, to be consistent with iterate?
«DEFINE newGenericInstance(String varName, String type, String typeArgument) FOR gmfgen::GenCommonBase»«EXPAND G(type, typeArgument «varName» = new «EXPAND G(type, typeArgument)»«ENDDEFINE»
// new HashMap<Object, String>
«DEFINE newGenericInstance2(String varName, String type, String typeArgument1, String typeArgument2) FOR gmfgen::GenCommonBase»«EXPAND G2(type, typeArgument1, typeArgument2 «varName»= new «EXPAND G2(type, typeArgument1, typeArgument2)»«ENDDEFINE»
// new HashMap<Object, List<String>>
«DEFINE newGenericInstance2(String varName, String type, String typeArgument1, String typeArgument2, String typeArgument3) FOR gmfgen::GenCommonBase»«EXPAND _g2_3(type, typeArgument1, typeArgument2, typeArgument3 «varName»= new «EXPAND _g2_3(type, typeArgument1, typeArgument2, typeArgument3)»«ENDDEFINE»
// iterate cycle with explicit iterator variable
// use this one if you need access to iterator (i.e. remove elements) or when there's no java.lang.Iterable source (i.e. some API gives Iterator right away)
«DEFINE iterate(String elementVar, String elementType, String iteratorVar, String iterationSource) FOR gmfgen::GenCommonBase
for EXPAND G('java.util.Iterator', elementType «iteratorVar» = «iterationSource»; «iteratorVar».hasNext();) {
«elementType» «elementVar» = «IF 'Object' <> elementType /*cast to Object is implicit*/ and not (self.jdkComplianceLevel() > 4) /*generics are not used then, should cast. Using 'not greater 4' instead of 'less than 5' to handle null/undefined case correctly*/»(«elementType») «ENDIF»«iteratorVar».next();
«ENDDEFINE»
//
// generates Java5-style iterate cycle (no explicit iterator), if possibl, otherwise uses default iterator name, 'it'
// beware of nested cycles using same 'it' name (relevant for Java 1.4)
«DEFINE iterate(String elementVar, String elementType, String iterable /*java.lang.Iterable*/) FOR gmfgen::GenCommonBase
«IF self.jdkComplianceLevel() > 4
for elementType» «elementVar» : «iterable») {
«ELSE
«EXPAND iterate(elementVar, elementType, 'it', iterable.concat('.iterator()'))-»
«ENDIF
«ENDDEFINE»
«DEFINE emptyList FOR gmfgen::GenCommonBase
«IF self.jdkComplianceLevel() > 4
java.util.Collections.emptyList()«ELSE
java.util.Collections.EMPTY_LIST«ENDIF
«ENDDEFINE»
«DEFINE emptyMap(String genericTypes) FOR gmfgen::GenCommonBase
«IF self.jdkComplianceLevel() > 4
java.util.Collections.<«genericTypes»>emptyMap()«ELSE
java.util.Collections.EMPTY_MAP«ENDIF
«ENDDEFINE»
// when need to cast 1.5-typed variable to be usable in 1.4 code. does nothing for 1.5 and greater. I.e.
// List/*[String]*/ coll = ...
// String aaa = (String) coll.get(0);
// cast to string is needed in 1.4
«DEFINE castTyped(String type) FOR gmfgen::GenCommonBase»«IF not (self.jdkComplianceLevel() > 4)»(«type») «ENDIF»«ENDDEFINE»
// annotations are from Java 5 and above
«DEFINE SuppressWarnings(String warnToken) FOR gmfgen::GenEditorGenerator»«EXPAND SuppressWarnings(warnToken) FOR diagram»«ENDDEFINE»
«DEFINE SuppressWarnings(String warnToken) FOR gmfgen::GenCommonBase
«IF self.jdkComplianceLevel() > 4
@SuppressWarningswarnToken»)
«ENDIF
«ENDDEFINE»
«DEFINE override FOR gmfgen::GenCommonBase
«IF self.jdkComplianceLevel() > 4
@Override
«ENDIF
«ENDDEFINE»
«DEFINE overrideI FOR gmfgen::GenCommonBase
«IF self.jdkComplianceLevel() > 5
@Override
«ENDIF
«ENDDEFINE»