/*******************************************************************************
* Copyright © 2012, 2013 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*
*******************************************************************************/
package org.eclipse.edt.gen.javascript.templates;
import org.eclipse.edt.mof.codegen.api.AbstractTemplate;
import org.eclipse.edt.mof.codegen.api.TabbedWriter;
import org.eclipse.edt.mof.egl.IrFactory;
public abstract class JavaScriptTemplate extends AbstractTemplate {
public static final IrFactory factory = IrFactory.INSTANCE;
// for genRuntimeTypeName, uses the following to determine what kind of type name is wanted:
// JavascriptPrimitive gives the java primitive if exists, otherwise the EGL interface name
// JavascriptObject gives the java object if exists, otherwise the EGL interface name
// EGLInterface gives the EGL interface name which could be the object name
// EGLImplementation gives the EGL implementation name even if it is implemented as a java implementation
// JavascriptImplementation gives the java implementation if it exists, otherwise it gives the EGL implementation
public static enum TypeNameKind {
JavascriptPrimitive, JavascriptObject, EGLInterface, EGLImplementation, JavascriptImplementation
}
// Constants that represent all the method names invoked using the dynamic Template.gen() methods
// This allows one to find all references to invocations of the methods being invoked dynamically
public static final String genAccessor = "genAccessor";
public static final String genAdditionalConstructorParams = "genAdditionalConstructorParams";
public static final String genAdditionalSuperConstructorArgs = "genAdditionalSuperConstructorArgs";
public static final String genAnnotations = "genAnnotations";
public static final String genAnnotation = "genAnnotation";
public static final String genAnnotationKey = "genAnnotationKey";
public static final String genArrayAccess = "genArrayAccess";
public static final String genAssignment = "genAssignment";
public static final String genBinaryExpression = "genBinaryExpression";
public static final String genCallbackAccesor = "genCallbackAccesor";
public static final String genCheckNullArgs = "genCheckNullArgs";
public static final String genClassBody = "genClassBody";
public static final String genClassFooter = "genClassFooter";
public static final String genAMDHeader = "genAMDHeader";
public static final String genModuleName = "genModuleName";
public static final String genCSSFile = "genCSSFile";
public static final String genIncludeFile = "genIncludeFile";
public static final String genDependent = "genDependent";
public static final String genIncludeFileDependent = "genIncludeFileDependent";
public static final String genClassHeader = "genClassHeader";
public static final String genClassName = "genClassName";
public static final String genCloneMethod = "genCloneMethod";
public static final String genCloneMethodBody = "genCloneMethodBody";
public static final String genCloneMethods = "genCloneMethods";
public static final String genConstructor = "genConstructor";
public static final String genConstructors = "genConstructors";
public static final String genConstructorOptions = "genConstructorOptions";
public static final String genConversionControlAnnotation = "genConversionControlAnnotation";
public static final String genConversionOperation = "genConversionOperation";
public static final String genDeclaration = "genDeclaration";
public static final String genDeclarationAnnotation = "genDeclarationAnnotation";
public static final String genDeclarationExpression = "genDeclarationExpression";
public static final String genDefaultValue = "genDefaultValue";
public static final String genExpression = "genExpression";
public static final String genTypeBasedExpression = "genTypeBasedExpression";
public static final String genField = "genField";
public static final String genFieldAnnotations = "genFieldAnnotations";
public static final String genFieldInfoTypeName = "genFieldInfoTypeName";
public static final String genFields = "genFields";
public static final String genFunction = "genFunction";
public static final String genFunctionBody = "genFunctionBody";
public static final String genFunctions = "genFunctions";
public static final String genGetFieldSignaturesMethod = "genGetFieldSignaturesMethod";
public static final String genGetter = "genGetter";
public static final String genGetterSetter = "genGetterSetter";
public static final String genGetterSetters = "genGetterSetters";
public static final String genInitialization = "genInitialization";
public static final String genInitialize = "genInitialize";
public static final String genInitializeMethod = "genInitializeMethod";
public static final String genInitializeMethodBody = "genInitializeMethodBody";
public static final String genInitializeMethods = "genInitializeMethods";
public static final String genInitializeStatement = "genInitializeStatement";
public static final String genInstantiation = "genInstantiation";
public static final String genInvocation = "genInvocation";
public static final String genInvocationArguments = "genInvocationArguments";
public static final String genIsaExpression = "genIsaExpression";
public static final String genJsonAnnotations = "genJsonAnnotations";
public static final String genLibrary = "genLibrary";
public static final String genLibraries = "genLibraries";
public static final String genMemberAccess = "genMemberAccess";
public static final String genMemberName = "genMemberName";
public static final String genName = "genName";
public static final String genNewExpression = "genNewExpression";
public static final String genPart = "genPart";
public static final String genPartName = "genPartName";
public static final String genQualifier = "genQualifier";
public static final String genRuntimeTypeName = "genRuntimeTypeName";
public static final String genReturnStatement = "genReturnStatement";
public static final String genSignature = "genSignature";
public static final String genStatement = "genStatement";
public static final String genStatementNoBraces = "genStatementNoBraces";
public static final String genServiceCallbackArgType = "genServiceCallbackArgType";
public static final String genServiceInvocationInParam = "genServiceInvocationInParam";
public static final String genSetEmptyMethod = "genSetEmptyMethod";
public static final String genSetEmptyMethodBody = "genSetEmptyMethodBody";
public static final String genSetEmptyMethods = "genSetEmptyMethods";
public static final String genSetter = "genSetter";
public static final String genStatementBody = "genStatementBody";
public static final String genStatementBodyNoBraces = "genStatementBodyNoBraces";
public static final String genStatementEnd = "genStatementEnd";
public static final String genSubstringAccess = "genSubstringAccess";
public static final String genSuperClass = "genSuperClass";
public static final String genTypeDependentOptions = "genTypeDependentOptions";
public static final String genTypeDependentPatterns = "genTypeDependentPatterns";
public static final String genToString = "genToString";
public static final String genUnaryExpression = "genUnaryExpression";
// constants that allow type based processing. each of these will attempt to find the user provided type based
// method, and if not found, will then end up back in type template and invoked the method name without "typebased"
public static final String genTypeBasedAssignment = "genTypeBasedAssignment";
// constants that allow container based processing. each of these will attempt to find the user provided container based
// method, and if not found, will then end up back in type template and invoked the method name without "containerbased"
public static final String genContainerBasedAccessor = "genContainerBasedAccessor";
public static final String genContainerBasedAccessorArgs = "genContainerBasedAccessorArgs";
public static final String genContainerBasedArrayAccess = "genContainerBasedArrayAccess";
public static final String genContainerBasedAssignment = "genContainerBasedAssignment";
public static final String genContainerBasedMemberAccess = "genContainerBasedMemberAccess";
public static final String genContainerBasedMemberName = "genContainerBasedMemberName";
public static final String genContainerBasedNewExpression = "genContainerBasedNewExpression";
public static final String genContainerBasedInvocation = "genContainerBasedInvocation";
//get functions
public static final String getCallbackFunction = "getCallbackFunction";
public static final String supportsConversion = "supportsConversion";
// these are used by the validation step. preGen is used to preGen individual items within the part being generated.
// preGenPart is invoked by the generator and should not be overridden or used by extending logic
public static final String preGen = "preGen";
public static final String preGenClassBody = "preGenClassBody";
public static final String preGenPart = "preGenPart";
public static final String preGenField = "preGenField";
public static final String preGenFields = "preGenFields";
public static final String preGenFunction = "preGenFunction";
public static final String preGenFunctions = "preGenFunctions";
public static final String preGenUsedPart = "preGenUsedPart";
public static final String preGenUsedParts = "preGenUsedParts";
// some values used as javascript functions
public static final String eze$$value = "eze$$value";
public static final String eze$$signature = "eze$$signature";
public static final String eze$$copy = "eze$$copy";
public static final String eze$$func = "eze$$func";
public static final String caller = "caller";
public static final String eglnamespace = "egl.";
public static String quoted(String unquoted) {
return "\"" + unquoted + "\"";
}
public static String singleQuoted(String unquoted) {
return "'" + unquoted + "'";
}
public static String stripLeadingZeroes(String value) {
String minus = "";
if (value.charAt(0) == '-') {
value = value.substring(1);
minus = "-";
}
while (value.charAt(0) == '0' && value.length() > 1) {
value = value.substring(1);
}
return minus + value;
}
public static void unboxStart(boolean unbox, TabbedWriter out){
if (unbox)
out.print("egl.eglx.lang.EAny.unbox("); //TODO sbg Lookup or use constant
}
public static void unboxEnd(boolean unbox, TabbedWriter out){
if (unbox)
out.print(")");
}
}