/** * Emits a type cast for passing an argument to a parameterized type. * * @param type compound type with parameters * @param expr argument expression in type instantiation * @param paramIndex index of argument in argument list */ private static boolean emitTypeCast( StringBuilder buffer, CompoundType type, Expression expr, int paramIndex) { boolean cast = false; Parameter param = type.getParameterAt(paramIndex); TypeInterface paramType = TypeReference.getBaseType(param.getType()); if (paramType instanceof StdIntegerType) { StdIntegerType intType = (StdIntegerType) paramType; switch (intType.getType()) { case DataScriptParserTokenTypes.INT8: buffer.append("(byte)("); cast = true; break; case DataScriptParserTokenTypes.UINT8: case DataScriptParserTokenTypes.INT16: buffer.append("(short)("); cast = true; break; default: // nothing } } return cast; }
private void setParameters(String lhs, TypeInstantiation inst) { CompoundType compound = inst.getBaseType(); Iterable<Expression> arguments = inst.getArguments(); if (arguments != null) { int argIndex = 0; for (Expression arg : arguments) { Parameter param = compound.getParameterAt(argIndex); String setter = AccessorNameEmitter.getSetterName(param); buffer.append(lhs); buffer.append("."); buffer.append(setter); buffer.append("("); boolean cast = emitTypeCast(buffer, compound, arg, argIndex); String javaArg = exprEmitter.emit(arg); buffer.append(javaArg); if (cast) { buffer.append(")"); } buffer.append(");\n "); argIndex++; } } }