use of org.eclipse.jdt.core.dom.ArrayInitializer in project evosuite by EvoSuite.
the class JUnitCodeGenerator method createCallMethodOrNewInstanceCallStmt.
@SuppressWarnings("unchecked")
private MethodInvocation createCallMethodOrNewInstanceCallStmt(final boolean isConstructorCall, final AST ast, final String varName, final String targetTypeName, final String methodName, final Object[] methodArgs, final org.objectweb.asm.Type[] paramTypes) {
// -- construct getField() call
final MethodInvocation callMethodCall = ast.newMethodInvocation();
if (isConstructorCall) {
callMethodCall.setName(ast.newSimpleName("newInstance"));
} else {
callMethodCall.setName(ast.newSimpleName("callMethod"));
}
StringLiteral stringLiteral = ast.newStringLiteral();
stringLiteral.setLiteralValue(targetTypeName);
// class name
callMethodCall.arguments().add(stringLiteral);
if (!isConstructorCall) {
stringLiteral = ast.newStringLiteral();
stringLiteral.setLiteralValue(methodName);
// method name
callMethodCall.arguments().add(stringLiteral);
if (varName == null) {
// static call -> no receiver
callMethodCall.arguments().add(ast.newNullLiteral());
} else {
// receiver
callMethodCall.arguments().add(ast.newSimpleName(varName));
}
}
// method arguments
ArrayCreation arrCreation = ast.newArrayCreation();
arrCreation.setType(ast.newArrayType(ast.newSimpleType(ast.newSimpleName("Object"))));
ArrayInitializer arrInit = ast.newArrayInitializer();
arrCreation.setInitializer(arrInit);
callMethodCall.arguments().add(arrCreation);
// is either an oid or null
Integer arg;
for (int i = 0; i < methodArgs.length; i++) {
arg = (Integer) methodArgs[i];
if (arg == null) {
arrInit.expressions().add(ast.newNullLiteral());
} else {
arrInit.expressions().add(ast.newSimpleName(this.oidToVarMapping.get(arg)));
}
}
// paramTypes
arrCreation = ast.newArrayCreation();
arrCreation.setType(ast.newArrayType(ast.newSimpleType(ast.newSimpleName("Class"))));
arrInit = ast.newArrayInitializer();
arrCreation.setInitializer(arrInit);
callMethodCall.arguments().add(arrCreation);
org.objectweb.asm.Type type;
for (int i = 0; i < paramTypes.length; i++) {
type = paramTypes[i];
if (type.equals(org.objectweb.asm.Type.BOOLEAN_TYPE)) {
FieldAccess facc = ast.newFieldAccess();
facc.setName(ast.newSimpleName("TYPE"));
facc.setExpression(ast.newSimpleName("Boolean"));
arrInit.expressions().add(facc);
} else if (type.equals(org.objectweb.asm.Type.BYTE_TYPE)) {
FieldAccess facc = ast.newFieldAccess();
facc.setName(ast.newSimpleName("TYPE"));
facc.setExpression(ast.newSimpleName("Byte"));
arrInit.expressions().add(facc);
} else if (type.equals(org.objectweb.asm.Type.CHAR_TYPE)) {
FieldAccess facc = ast.newFieldAccess();
facc.setName(ast.newSimpleName("TYPE"));
facc.setExpression(ast.newSimpleName("Character"));
arrInit.expressions().add(facc);
} else if (type.equals(org.objectweb.asm.Type.DOUBLE_TYPE)) {
FieldAccess facc = ast.newFieldAccess();
facc.setName(ast.newSimpleName("TYPE"));
facc.setExpression(ast.newSimpleName("Double"));
arrInit.expressions().add(facc);
} else if (type.equals(org.objectweb.asm.Type.FLOAT_TYPE)) {
FieldAccess facc = ast.newFieldAccess();
facc.setName(ast.newSimpleName("TYPE"));
facc.setExpression(ast.newSimpleName("Float"));
arrInit.expressions().add(facc);
} else if (type.equals(org.objectweb.asm.Type.INT_TYPE)) {
FieldAccess facc = ast.newFieldAccess();
facc.setName(ast.newSimpleName("TYPE"));
facc.setExpression(ast.newSimpleName("Integer"));
arrInit.expressions().add(facc);
} else if (type.equals(org.objectweb.asm.Type.LONG_TYPE)) {
FieldAccess facc = ast.newFieldAccess();
facc.setName(ast.newSimpleName("TYPE"));
facc.setExpression(ast.newSimpleName("Long"));
arrInit.expressions().add(facc);
} else if (type.equals(org.objectweb.asm.Type.SHORT_TYPE)) {
FieldAccess facc = ast.newFieldAccess();
facc.setName(ast.newSimpleName("TYPE"));
facc.setExpression(ast.newSimpleName("Short"));
arrInit.expressions().add(facc);
} else {
final TypeLiteral clazz = ast.newTypeLiteral();
clazz.setType(ast.newSimpleType(ast.newName(type.getClassName())));
arrInit.expressions().add(clazz);
}
}
return callMethodCall;
}
use of org.eclipse.jdt.core.dom.ArrayInitializer in project evosuite by EvoSuite.
the class TestExtractingVisitor method visit.
/**
* {@inheritDoc}
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public boolean visit(VariableDeclarationStatement variableDeclStmt) {
Class<?> varType = retrieveTypeClass(variableDeclStmt.getType());
if (varType.isPrimitive() || PRIMITIVE_CLASSES.contains(varType)) {
// Can only happen to primitive types and String,
// otherwise it is a constructor call which is handled elsewhere
logger.debug("Variable has not been treated elsewhere...");
VariableDeclarationFragment varDeclFrgmnt = (VariableDeclarationFragment) variableDeclStmt.fragments().get(0);
Expression expression = varDeclFrgmnt.getInitializer();
VariableReference varRef = retrieveVariableReference(expression, null);
varRef.setOriginalCode(variableDeclStmt.toString());
// TODO Use the name here as well?
// String name = varDeclFrgmt.getName().getIdentifier();
// new BoundVariableReferenceImpl(testCase, varType, name);
testCase.addVariable(varDeclFrgmnt.resolveBinding(), varRef);
return true;
}
if (varType.isArray()) {
// if (varType.getComponentType().isPrimitive() ||
// varType.getComponentType().equals(String.class)) {
// ... or to primitive and string arrays
VariableDeclarationFragment varDeclFrgmnt = (VariableDeclarationFragment) variableDeclStmt.fragments().get(0);
Expression expression = varDeclFrgmnt.getInitializer();
if (expression instanceof ArrayInitializer) {
ArrayReference arrayReference = new ValidArrayReference(testCase.getReference(), varType);
ArrayStatement arrayStatement = new ArrayStatement(testCase.getReference(), arrayReference);
arrayReference.setOriginalCode(variableDeclStmt.toString());
testCase.addStatement(arrayStatement);
testCase.addVariable(varDeclFrgmnt.resolveBinding(), arrayReference);
ArrayInitializer arrayInitializer = (ArrayInitializer) expression;
for (int idx = 0; idx < arrayInitializer.expressions().size(); idx++) {
Expression expr = (Expression) arrayInitializer.expressions().get(idx);
VariableReference valueRef;
if (expr instanceof NumberLiteral) {
valueRef = retrieveVariableReference((NumberLiteral) expr, varType.getComponentType());
} else if (expr instanceof PrefixExpression) {
valueRef = retrieveVariableReference((PrefixExpression) expr, varType.getComponentType());
} else {
valueRef = retrieveVariableReference(expr, null);
}
valueRef.setOriginalCode(expr.toString());
VariableReference arrayElementRef = new ArrayIndex(testCase.getReference(), arrayReference, idx);
arrayElementRef.setOriginalCode(expr.toString());
arrayStatement.getVariableReferences().add(arrayElementRef);
AssignmentStatement arrayAssignment = new AssignmentStatement(testCase.getReference(), arrayElementRef, valueRef);
testCase.addStatement(arrayAssignment);
}
// }
return true;
}
if (expression instanceof ArrayCreation) {
ArrayCreation arrayCreation = ((ArrayCreation) expression);
List paramTypes = new ArrayList();
for (int idx = 0; idx < arrayCreation.dimensions().size(); idx++) {
paramTypes.add(int.class);
}
List<VariableReference> lengthsVarRefs = convertParams(arrayCreation.dimensions(), paramTypes);
ArrayReference arrayReference = new ValidArrayReference(testCase.getReference(), varType);
arrayReference.setOriginalCode(variableDeclStmt.toString());
ArrayStatement arrayStatement = new ArrayStatement(testCase.getReference(), arrayReference);
arrayStatement.setLengths(getLengths(variableDeclStmt, lengthsVarRefs));
testCase.addVariable(varDeclFrgmnt.resolveBinding(), arrayStatement.getReturnValue());
testCase.addStatement(arrayStatement);
}
}
return true;
}
Aggregations