com.dragome.compiler.utils.Utils Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of dragome-bytecode-js-compiler Show documentation
Show all versions of dragome-bytecode-js-compiler Show documentation
Dragome SDK module: bytecode to javascript compiler
package com.dragome.compiler.utils;
import java.io.File;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.text.DateFormat;
import java.util.Date;
import java.util.Properties;
import org.apache.bcel.generic.ArrayType;
import org.apache.bcel.generic.BasicType;
import org.apache.bcel.generic.ObjectType;
import org.apache.bcel.generic.Type;
import com.dragome.compiler.DragomeJsCompiler;
import com.dragome.compiler.ast.ASTNode;
import com.dragome.compiler.ast.MethodDeclaration;
public final class Utils
{
private Utils()
{
}
public static String generateExceptionMessage(MethodDeclaration methodDecl, ASTNode node)
{
String msg= null;
if (node != null)
{
int line= methodDecl.getLineNumberCursor().getLineNumber(node);
if (line != -1)
{
msg= "Error near line " + line;
}
}
if (msg == null)
{
msg= "Error";
}
msg+= " in " + methodDecl.getMethodBinding();
return msg;
}
public static RuntimeException generateException(Throwable e, MethodDeclaration methodDecl, ASTNode node)
{
String msg= generateExceptionMessage(methodDecl, node);
DragomeJsCompiler.errorCount++;
Log.getLogger().error(msg);
return new RuntimeException(msg, e);
}
public static String stackTraceToString(Throwable e)
{
StringWriter sw= new StringWriter();
PrintWriter writer= new PrintWriter(sw);
e.printStackTrace(writer);
writer.close();
return sw.getBuffer().toString();
}
public static String currentTimeStamp()
{
return DateFormat.getDateTimeInstance().format(new Date());
}
public static String getSignature(Type type)
{
String signature;
if (type instanceof ArrayType)
{
ArrayType aType= (ArrayType) type;
signature= getSignature(aType.getBasicType());
for (int i= 0; i < aType.getDimensions(); i++)
{
signature+= "[]";
}
}
else if (type instanceof ObjectType)
{
signature= ((ObjectType) type).getClassName();
}
else
{
if (!(type instanceof BasicType))
throw new RuntimeException();
signature= type.toString();
}
return signature;
}
public static String escape(String str)
{
int len= str.length();
StringBuffer buf= new StringBuffer(len + 5);
char[] ch= str.toCharArray();
for (int i= 0; i < len; i++)
{
switch (ch[i])
{
case '\\':
buf.append("\\\\");
break;
case '\n':
buf.append("\\n");
break;
case '\r':
buf.append("\\r");
break;
case '\t':
buf.append("\\t");
break;
case '\b':
buf.append("\\b");
break;
case '"':
buf.append("\\\"");
break;
default:
buf.append(ch[i]);
}
}
return '"' + buf.toString() + '"';
}
public static File resolve(File baseDir, String path)
{
File resolvedFile= new File(path);
if (!resolvedFile.isAbsolute())
{
resolvedFile= new File(baseDir, path);
}
return resolvedFile;
}
}