| 274 | } |
| 275 | |
| 276 | void RenderConstructor(const OpSpec& op, const Type& op_class, |
| 277 | SourceWriter* writer) { |
| 278 | Variable operation = |
| 279 | Variable::Create("operation", Type::Class("Operation", "org.tensorflow")); |
| 280 | Method constructor = Method::ConstructorFor(op_class).add_argument(operation); |
| 281 | for (const ArgumentSpec& output : op.outputs()) { |
| 282 | if (output.iterable() && !output.type().wildcard()) { |
| 283 | constructor.add_annotation( |
| 284 | Annotation::Create("SuppressWarnings").attributes("\"unchecked\"")); |
| 285 | break; |
| 286 | } |
| 287 | } |
| 288 | writer->BeginMethod(constructor, PRIVATE) |
| 289 | .Append("super(operation);") |
| 290 | .EndLine(); |
| 291 | if (!op.outputs().empty()) { |
| 292 | writer->Append("int outputIdx = 0;").EndLine(); |
| 293 | for (const ArgumentSpec& output : op.outputs()) { |
| 294 | if (output.iterable()) { |
| 295 | string var_length = output.var().name() + "Length"; |
| 296 | writer->Append("int " + var_length) |
| 297 | .Append(" = operation.outputListLength(\"" + output.op_def_name() + |
| 298 | "\");") |
| 299 | .EndLine() |
| 300 | .Append(output.var().name() + " = Arrays.asList("); |
| 301 | if (!output.type().wildcard()) { |
| 302 | writer->Append("(") |
| 303 | .AppendType(output.var().type().parameters().front()) |
| 304 | .Append("[])"); |
| 305 | } |
| 306 | writer->Append("operation.outputList(outputIdx, " + var_length + "));") |
| 307 | .EndLine() |
| 308 | .Append("outputIdx += " + var_length + ";") |
| 309 | .EndLine(); |
| 310 | } else { |
| 311 | writer |
| 312 | ->Append(output.var().name() + " = operation.output(outputIdx++);") |
| 313 | .EndLine(); |
| 314 | } |
| 315 | } |
| 316 | } |
| 317 | writer->EndMethod(); |
| 318 | } |
| 319 | |
| 320 | void RenderGettersAndSetters(const OpSpec& op, SourceWriter* writer) { |
| 321 | for (const AttributeSpec& attr : op.optional_attributes()) { |
no test coverage detected