/******************************************************************************* * Copyright (c) 2011 Sierra Wireless 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: * Sierra Wireless - initial API and implementation *******************************************************************************/ package org.eclipse.koneki.ldt.core.internal.ast.models; import java.util.ArrayList; import java.util.List; import org.eclipse.koneki.ldt.core.internal.ast.models.api.ExprTypeRef; import org.eclipse.koneki.ldt.core.internal.ast.models.api.ExternalTypeRef; import org.eclipse.koneki.ldt.core.internal.ast.models.api.FunctionTypeDef; import org.eclipse.koneki.ldt.core.internal.ast.models.api.InternalTypeRef; import org.eclipse.koneki.ldt.core.internal.ast.models.api.Item; import org.eclipse.koneki.ldt.core.internal.ast.models.api.LuaFileAPI; import org.eclipse.koneki.ldt.core.internal.ast.models.api.ModuleTypeRef; import org.eclipse.koneki.ldt.core.internal.ast.models.api.Parameter; import org.eclipse.koneki.ldt.core.internal.ast.models.api.PrimitiveTypeRef; import org.eclipse.koneki.ldt.core.internal.ast.models.api.RecordTypeDef; import org.eclipse.koneki.ldt.core.internal.ast.models.api.Return; import org.eclipse.koneki.ldt.core.internal.ast.models.api.TypeDef; import org.eclipse.koneki.ldt.core.internal.ast.models.api.TypeRef; import org.eclipse.koneki.ldt.core.internal.ast.models.file.Identifier; import org.eclipse.koneki.ldt.core.internal.ast.models.file.LuaExpression; import com.cforcoding.jmd.MarkDown; import com.naef.jnlua.LuaState; import com.naef.jnlua.NamedJavaFunction; public final class APIModelFactory { private APIModelFactory() { } /** * register this java module in the given lua vm */ public static final void registerAPIModelFactory(LuaState l) { NamedJavaFunction[] namedJavaFunctions = createFunctions(); l.register("javaapimodelfactory", namedJavaFunctions); //$NON-NLS-1$ } /* create all factory function which will be available in javaapimodelfactory module */ private static NamedJavaFunction[] createFunctions() { List<NamedJavaFunction> javaFunctions = new ArrayList<NamedJavaFunction>(); javaFunctions.add(newItem()); javaFunctions.add(itemAddOccurrence()); javaFunctions.add(newExternalTypeRef()); javaFunctions.add(newInternalTypeRef()); javaFunctions.add(newModuleTypeRef()); javaFunctions.add(newExprTypeRef()); javaFunctions.add(newPrimitiveTypeRef()); javaFunctions.add(itemSetExpression()); javaFunctions.add(newRecordTypeDef()); javaFunctions.add(recordTypeDefAddField()); javaFunctions.add(newFunctionTypeDef()); javaFunctions.add(functionAddParam()); javaFunctions.add(functionAddReturn()); javaFunctions.add(newReturn()); javaFunctions.add(returnAddTypeRef()); javaFunctions.add(newLuaFileAPI()); javaFunctions.add(fileAPIAddGlobalVar()); javaFunctions.add(fileAPIAddReturn()); javaFunctions.add(fileAPIAddTypeDef()); javaFunctions.add(markdown()); return javaFunctions.toArray(new NamedJavaFunction[javaFunctions.size()]); } private static NamedJavaFunction newItem() { return new NamedJavaFunction() { @Override public int invoke(LuaState l) { String name = l.checkString(1); String documentation = l.checkString(2); int sourceRangeMin = l.checkInteger(3); int sourceRangeMax = l.checkInteger(4); TypeRef type = l.checkJavaObject(5, TypeRef.class, null); Item item = new Item(); item.setName(name); item.setDocumentation(documentation); item.setStart(sourceRangeMin); item.setEnd(sourceRangeMax); if (type != null) item.setType(type); l.pushJavaObject(item); return 1; } @Override public String getName() { return "newitem"; //$NON-NLS-1$ } }; } private static NamedJavaFunction itemAddOccurrence() { return new NamedJavaFunction() { @Override public int invoke(LuaState l) { Item item = l.checkJavaObject(1, Item.class); Identifier identifier = l.checkJavaObject(2, Identifier.class); item.addOccurrence(identifier); return 0; } @Override public String getName() { return "addoccurrence"; //$NON-NLS-1$ } }; } private static NamedJavaFunction newExternalTypeRef() { return new NamedJavaFunction() { @Override public int invoke(LuaState l) { String modulename = l.checkString(1); String typename = l.checkString(2); ExternalTypeRef typeref = new ExternalTypeRef(modulename, typename); l.pushJavaObject(typeref); return 1; } @Override public String getName() { return "newexternaltyperef"; //$NON-NLS-1$ } }; } private static NamedJavaFunction newInternalTypeRef() { return new NamedJavaFunction() { @Override public int invoke(LuaState l) { String typename = l.checkString(1); InternalTypeRef typeref = new InternalTypeRef(typename); l.pushJavaObject(typeref); return 1; } @Override public String getName() { return "newinternaltyperef"; //$NON-NLS-1$ } }; } private static NamedJavaFunction newModuleTypeRef() { return new NamedJavaFunction() { @Override public int invoke(LuaState l) { String typename = l.checkString(1); int returnposition = l.checkInteger(2); ModuleTypeRef typeref = new ModuleTypeRef(typename, returnposition); l.pushJavaObject(typeref); return 1; } @Override public String getName() { return "newmoduletyperef"; //$NON-NLS-1$ } }; } private static NamedJavaFunction newExprTypeRef() { return new NamedJavaFunction() { @Override public int invoke(LuaState l) { int returnposition = l.checkInteger(1); ExprTypeRef typeref = new ExprTypeRef(returnposition); l.pushJavaObject(typeref); return 1; } @Override public String getName() { return "newexprtyperef"; //$NON-NLS-1$ } }; } private static NamedJavaFunction newPrimitiveTypeRef() { return new NamedJavaFunction() { @Override public int invoke(LuaState l) { String typename = l.checkString(1); PrimitiveTypeRef typeref = new PrimitiveTypeRef(typename); l.pushJavaObject(typeref); return 1; } @Override public String getName() { return "newprimitivetyperef"; //$NON-NLS-1$ } }; } private static NamedJavaFunction itemSetExpression() { return new NamedJavaFunction() { @Override public int invoke(LuaState l) { Item item = l.checkJavaObject(1, Item.class); LuaExpression expr = l.checkJavaObject(2, LuaExpression.class); ((ExprTypeRef) item.getType()).setExpression(expr); return 0; } @Override public String getName() { return "setexpression"; //$NON-NLS-1$ } }; } private static NamedJavaFunction newRecordTypeDef() { return new NamedJavaFunction() { @Override public int invoke(LuaState l) { String name = l.checkString(1); String documentation = l.checkString(2); int sourceRangeMin = l.checkInteger(3); int sourceRangeMax = l.checkInteger(4); RecordTypeDef record = new RecordTypeDef(); record.setName(name); record.setDocumentation(documentation); record.setStart(sourceRangeMin); record.setEnd(sourceRangeMax); l.pushJavaObject(record); return 1; } @Override public String getName() { return "newrecordtypedef"; //$NON-NLS-1$ } }; } private static NamedJavaFunction recordTypeDefAddField() { return new NamedJavaFunction() { @Override public int invoke(LuaState l) { RecordTypeDef record = l.checkJavaObject(1, RecordTypeDef.class); Item item = l.checkJavaObject(2, Item.class); record.addField(item); return 0; } @Override public String getName() { return "addfield"; //$NON-NLS-1$ } }; } private static NamedJavaFunction newFunctionTypeDef() { return new NamedJavaFunction() { @Override public int invoke(LuaState l) { l.pushJavaObject(new FunctionTypeDef()); return 1; } @Override public String getName() { return "newfunctiontypedef"; //$NON-NLS-1$ } }; } private static NamedJavaFunction functionAddParam() { return new NamedJavaFunction() { @Override public int invoke(LuaState l) { FunctionTypeDef function = l.checkJavaObject(1, FunctionTypeDef.class); String paramName = l.checkString(2); TypeRef type = l.checkJavaObject(3, TypeRef.class); String description = l.checkString(4); function.addParameter(new Parameter(paramName, type, description)); return 0; } @Override public String getName() { return "addparam"; //$NON-NLS-1$ } }; } private static NamedJavaFunction newReturn() { return new NamedJavaFunction() { @Override public int invoke(LuaState l) { l.pushJavaObject(new Return()); return 1; } @Override public String getName() { return "newreturn"; //$NON-NLS-1$ } }; } private static NamedJavaFunction returnAddTypeRef() { return new NamedJavaFunction() { @Override public int invoke(LuaState l) { Return ret = l.checkJavaObject(1, Return.class); TypeRef typeRef = l.checkJavaObject(2, TypeRef.class); ret.addType(typeRef); return 0; } @Override public String getName() { return "addtype"; //$NON-NLS-1$ } }; } private static NamedJavaFunction functionAddReturn() { return new NamedJavaFunction() { @Override public int invoke(LuaState l) { FunctionTypeDef function = l.checkJavaObject(1, FunctionTypeDef.class); Return ret = l.checkJavaObject(2, Return.class); function.addReturn(ret); return 0; } @Override public String getName() { return "functionaddreturn"; //$NON-NLS-1$ } }; } private static NamedJavaFunction newLuaFileAPI() { return new NamedJavaFunction() { @Override public int invoke(LuaState l) { String documentation = l.checkString(1, null); LuaFileAPI luafileAPI = new LuaFileAPI(); if (documentation != null) luafileAPI.setDocumentation(documentation); l.pushJavaObject(luafileAPI); return 1; } @Override public String getName() { return "newfileapi"; //$NON-NLS-1$ } }; } private static NamedJavaFunction fileAPIAddGlobalVar() { return new NamedJavaFunction() { @Override public int invoke(LuaState l) { LuaFileAPI luaFileAPI = l.checkJavaObject(1, LuaFileAPI.class); Item item = l.checkJavaObject(2, Item.class); luaFileAPI.addGlobalVar(item); return 0; } @Override public String getName() { return "addglobalvar"; //$NON-NLS-1$ } }; } private static NamedJavaFunction fileAPIAddTypeDef() { return new NamedJavaFunction() { @Override public int invoke(LuaState l) { LuaFileAPI luaFileAPI = l.checkJavaObject(1, LuaFileAPI.class); String typeName = l.checkString(2); TypeDef typedef = l.checkJavaObject(3, TypeDef.class); luaFileAPI.addType(typeName, typedef); return 0; } @Override public String getName() { return "addtypedef"; //$NON-NLS-1$ } }; } private static NamedJavaFunction fileAPIAddReturn() { return new NamedJavaFunction() { @Override public int invoke(LuaState l) { LuaFileAPI luaFileAPI = l.checkJavaObject(1, LuaFileAPI.class); Return ret = l.checkJavaObject(2, Return.class); luaFileAPI.addReturns(ret); return 0; } @Override public String getName() { return "fileapiaddreturn"; //$NON-NLS-1$ } }; } private static NamedJavaFunction markdown() { return new NamedJavaFunction() { private MarkDown markdown = new MarkDown(); @Override public int invoke(LuaState l) { String input = l.checkString(1); String result = markdown.transform(input); l.pushString(result); // l.pushString(input); return 1; } @Override public String getName() { return "markdown"; //$NON-NLS-1$ } }; } }