Skip to content

Method decompilation failed: Could not find destination nodes for stat id {If} #543

@nitram84

Description

@nitram84

Vineflower version

vineflower develop/1.12.0 ad2e67c

Describe the bug

This class, compiled with openjdk8, can't be decompiled with vineflower develop/1.12.0 ad2e67c

import java.util.ArrayList;
import java.util.HashSet;

public final class CustomerOrderHistoryManager {

  private static final int GUEST_CHECKOUT = 1;
  private static final int REGISTERED_USER = 2;
  private static final int SUBSCRIPTION_RENEWAL = 3;
  private static final int EXPRESS_DELIVERY = 4;
  private static final int INTERNATIONAL_SHIPPING = 5;

  public void processTransactionDetails(final int status, final ArrayList<OrderData> batch) {
    for (final OrderData transaction : batch) {
      switch (status) {
        case GUEST_CHECKOUT:
        case REGISTERED_USER: {
          final HashSet<ProductItem> items = new HashSet<>();
          for (final ProductItem item : items) {
            updateInventoryLog(item);
          }
          break;
        }
        case SUBSCRIPTION_RENEWAL: {
          for (final ProductItem item : transaction.getPurchasedItems()) {
            updateInventoryLog(item);
          }
        }
        case EXPRESS_DELIVERY:


        case INTERNATIONAL_SHIPPING: {
          for (final ProductItem item : transaction.getPurchasedItems()) {
            updateInventoryLog(item);
          }
        }
      }
    }
  }

  private void updateInventoryLog(final ProductItem item) {}

  static class ProductItem {
  }

  static class OrderData {
    public ProductItem[] getPurchasedItems() {
      return null;
    }
  }
}

Additional information

Stacktrace is:

WARN:           Method processTransactionDetails (ILjava/util/ArrayList;)V in class CustomerOrderHistoryManager couldn't be decompiled.
java.lang.IllegalStateException: Could not find destination nodes for stat id {If}:19 from source 27_foreach_vardef
	at org.jetbrains.java.decompiler.modules.decompiler.flow.FlattenStatementsHelper.setEdges(FlattenStatementsHelper.java:563)
	at org.jetbrains.java.decompiler.modules.decompiler.flow.FlattenStatementsHelper.buildDirectGraph(FlattenStatementsHelper.java:50)
	at org.jetbrains.java.decompiler.modules.decompiler.MergeHelper.isVarUsedBefore(MergeHelper.java:828)
	at org.jetbrains.java.decompiler.modules.decompiler.MergeHelper.matchForEach(MergeHelper.java:674)
	at org.jetbrains.java.decompiler.modules.decompiler.MergeHelper.enhanceLoop(MergeHelper.java:49)
	at org.jetbrains.java.decompiler.modules.decompiler.MergeHelper.enhanceLoopsRec(MergeHelper.java:35)
	at org.jetbrains.java.decompiler.modules.decompiler.MergeHelper.enhanceLoopsRec(MergeHelper.java:30)
	at org.jetbrains.java.decompiler.modules.decompiler.MergeHelper.enhanceLoopsRec(MergeHelper.java:30)
	at org.jetbrains.java.decompiler.modules.decompiler.MergeHelper.enhanceLoops(MergeHelper.java:21)
	at org.jetbrains.java.decompiler.main.rels.MethodProcessor.codeToJava(MethodProcessor.java:273)
	at org.jetbrains.java.decompiler.main.rels.ClassWrapper.init(ClassWrapper.java:77)
	at org.jetbrains.java.decompiler.main.ClassesProcessor.initWrappers(ClassesProcessor.java:556)
	at org.jetbrains.java.decompiler.main.ClassesProcessor.processClass(ClassesProcessor.java:451)
	at org.jetbrains.java.decompiler.main.Fernflower.processClass(Fernflower.java:188)
	at org.jetbrains.java.decompiler.struct.ContextUnit.lambda$save$3(ContextUnit.java:182)
	at java.base/java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1403)
	at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:387)
	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1312)
	at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1843)
	at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1808)
	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:188)

This class can be used in unit tests.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions