/******************************************************************************* * 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.Item; import org.eclipse.koneki.ldt.core.internal.ast.models.common.LuaASTNode; import org.eclipse.koneki.ldt.core.internal.ast.models.file.Block; import org.eclipse.koneki.ldt.core.internal.ast.models.file.Call; import org.eclipse.koneki.ldt.core.internal.ast.models.file.Identifier; import org.eclipse.koneki.ldt.core.internal.ast.models.file.Index; import org.eclipse.koneki.ldt.core.internal.ast.models.file.Invoke; import org.eclipse.koneki.ldt.core.internal.ast.models.file.LocalVar; import org.eclipse.koneki.ldt.core.internal.ast.models.file.LuaExpression; import org.eclipse.koneki.ldt.core.internal.ast.models.file.LuaInternalContent; import com.naef.jnlua.LuaState; import com.naef.jnlua.NamedJavaFunction; public final class InternalModelFactory { private InternalModelFactory() { } /** * register this java module in the given lua vm */ public static final void registerInternalModelFactory(LuaState l) { NamedJavaFunction[] namedJavaFunctions = createFunctions(); l.register("javainternalmodelfactory", namedJavaFunctions); //$NON-NLS-1$ } /* create all factory function which will be available in javainternalmodelfactory module */ private static NamedJavaFunction[] createFunctions() { List<NamedJavaFunction> javaFunctions = new ArrayList<NamedJavaFunction>(); javaFunctions.add(newInternalContent()); javaFunctions.add(newIdentifier()); javaFunctions.add(newIndex()); javaFunctions.add(newCall()); javaFunctions.add(newInvoke()); javaFunctions.add(newBlock()); javaFunctions.add(newLocalVar()); javaFunctions.add(blockAddContent()); javaFunctions.add(blockAddLocalVar()); javaFunctions.add(intenalContentAddUnknownGlobalVar()); return javaFunctions.toArray(new NamedJavaFunction[javaFunctions.size()]); } private static NamedJavaFunction newInternalContent() { return new NamedJavaFunction() { @Override public int invoke(LuaState l) { Block block = l.checkJavaObject(1, Block.class); LuaInternalContent content = new LuaInternalContent(); content.setContent(block); l.pushJavaObject(content); return 1; } @Override public String getName() { return "newinternalmodel"; //$NON-NLS-1$ } }; } private static NamedJavaFunction newIdentifier() { return new NamedJavaFunction() { @Override public int invoke(LuaState l) { int sourceRangeMin = l.checkInteger(1); int sourceRangeMax = l.checkInteger(2); Identifier identifier = new Identifier(); identifier.setStart(sourceRangeMin); identifier.setEnd(sourceRangeMax); l.pushJavaObject(identifier); return 1; } @Override public String getName() { return "newidentifier"; //$NON-NLS-1$ } }; } private static NamedJavaFunction newIndex() { return new NamedJavaFunction() { @Override public int invoke(LuaState l) { int sourceRangeMin = l.checkInteger(1); int sourceRangeMax = l.checkInteger(2); LuaExpression left = l.checkJavaObject(3, LuaExpression.class); String right = l.checkString(4); Index index = new Index(); index.setStart(sourceRangeMin); index.setEnd(sourceRangeMax); index.setLeft(left); index.setRight(right); l.pushJavaObject(index); return 1; } @Override public String getName() { return "newindex"; //$NON-NLS-1$ } }; } private static NamedJavaFunction newCall() { return new NamedJavaFunction() { @Override public int invoke(LuaState l) { int sourceRangeMin = l.checkInteger(1); int sourceRangeMax = l.checkInteger(2); LuaExpression function = l.checkJavaObject(3, LuaExpression.class); Call call = new Call(); call.setStart(sourceRangeMin); call.setEnd(sourceRangeMax); call.setFunction(function); l.pushJavaObject(call); return 1; } @Override public String getName() { return "newcall"; //$NON-NLS-1$ } }; } private static NamedJavaFunction newInvoke() { return new NamedJavaFunction() { @Override public int invoke(LuaState l) { int sourceRangeMin = l.checkInteger(1); int sourceRangeMax = l.checkInteger(2); String functionName = l.checkString(3); LuaExpression record = l.checkJavaObject(4, LuaExpression.class); Invoke invoke = new Invoke(); invoke.setStart(sourceRangeMin); invoke.setEnd(sourceRangeMax); invoke.setFunctionName(functionName); invoke.setRecord(record); l.pushJavaObject(invoke); return 1; } @Override public String getName() { return "newinvoke"; //$NON-NLS-1$ } }; } private static NamedJavaFunction newBlock() { return new NamedJavaFunction() { @Override public int invoke(LuaState l) { int sourceRangeMin = l.checkInteger(1); int sourceRangeMax = l.checkInteger(2); Block block = new Block(); block.setStart(sourceRangeMin); block.setEnd(sourceRangeMax); l.pushJavaObject(block); return 1; } @Override public String getName() { return "newblock"; //$NON-NLS-1$ } }; } private static NamedJavaFunction blockAddContent() { return new NamedJavaFunction() { @Override public int invoke(LuaState l) { Block block = l.checkJavaObject(1, Block.class); LuaASTNode node = l.checkJavaObject(2, LuaASTNode.class); block.addContent(node); return 0; } @Override public String getName() { return "addcontent"; //$NON-NLS-1$ } }; } private static NamedJavaFunction newLocalVar() { return new NamedJavaFunction() { @Override public int invoke(LuaState l) { Item item = l.checkJavaObject(1, Item.class); int sourceRangeMin = l.checkInteger(2); int sourceRangeMax = l.checkInteger(3); LocalVar localVar = new LocalVar(item, sourceRangeMin, sourceRangeMax); l.pushJavaObject(localVar); return 1; } @Override public String getName() { return "newlocalvar"; //$NON-NLS-1$ } }; } private static NamedJavaFunction blockAddLocalVar() { return new NamedJavaFunction() { @Override public int invoke(LuaState l) { Block block = l.checkJavaObject(1, Block.class); LocalVar var = l.checkJavaObject(2, LocalVar.class); block.addLocalVar(var); return 0; } @Override public String getName() { return "addlocalvar"; //$NON-NLS-1$ } }; } private static NamedJavaFunction intenalContentAddUnknownGlobalVar() { return new NamedJavaFunction() { @Override public int invoke(LuaState l) { LuaInternalContent internalContent = l.checkJavaObject(1, LuaInternalContent.class); Item item = l.checkJavaObject(2, Item.class); internalContent.addUnknownGlobalVar(item); return 0; } @Override public String getName() { return "addunknownglobalvar"; //$NON-NLS-1$ } }; } }