From 0f46e8230cf566ff4e6de1b187dbb2b26ebbaf10 Mon Sep 17 00:00:00 2001 From: volodya-lombrozo Date: Fri, 11 Oct 2024 15:30:54 +0300 Subject: [PATCH] feat(#752): beautify MaxStackFlow class --- .../jeo/representation/bytecode/DataFlow.java | 47 +++----- .../representation/bytecode/MaxStackFlow.java | 101 ++---------------- 2 files changed, 24 insertions(+), 124 deletions(-) diff --git a/src/main/java/org/eolang/jeo/representation/bytecode/DataFlow.java b/src/main/java/org/eolang/jeo/representation/bytecode/DataFlow.java index f4c899610..2050c3528 100644 --- a/src/main/java/org/eolang/jeo/representation/bytecode/DataFlow.java +++ b/src/main/java/org/eolang/jeo/representation/bytecode/DataFlow.java @@ -23,47 +23,27 @@ */ package org.eolang.jeo.representation.bytecode; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Optional; import java.util.function.Function; import java.util.stream.Collectors; import org.objectweb.asm.Label; -public final class DataFlow> { +public final class DataFlow> { private final InstructionsFlow instructions; - private final List blocks; - private final T initial; - - private final Function generate; - - public DataFlow( - final InstructionsFlow instructions, - final List blocks, - final T initial, - Function generator - ) { - this.instructions = instructions; - this.blocks = blocks; - this.initial = initial; - this.generate = generator; + DataFlow(final InstructionsFlow instr, final List catches) { + this.instructions = instr; + this.blocks = new ArrayList<>(catches); } - // this.blocks.stream() -// .map(BytecodeTryCatchBlock.class::cast) -// .map(BytecodeTryCatchBlock::handlerLabel) -// .map(this.instructions::index) -// .peek(ind -> visited.put(ind, 1)) -// .forEach(worklist::add); - - - public T max() { + public T max(T initial, Function generator) { final Map visited = new HashMap<>(0); final Map worklist = new HashMap<>(0); - worklist.put(0, this.initial); + worklist.put(0, initial); final int total = this.instructions.size(); T current; while (!worklist.isEmpty()) { @@ -83,7 +63,7 @@ public T max() { final BytecodeEntry entry = this.instructions.get(index); if (entry instanceof BytecodeInstruction) { final BytecodeInstruction instruction = BytecodeInstruction.class.cast(entry); - current = current.add(this.generate.apply(instruction)); + current = current.add(generator.apply(instruction)); final T updated = current; if (instruction.isSwitch()) { final List