| // Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| // This code is not run directly. It needs to be compiled to dex code. |
| // 'throwing.dex' is what is run. |
| |
| package throwing; |
| |
| import java.util.ArrayList; |
| import java.util.LinkedList; |
| import java.util.List; |
| |
| /** |
| * This class' logic is completely bogus. The only purpose is to be recursive to avoid inlining |
| * and terminate. |
| */ |
| public class RenamedClass { |
| public List list = new ArrayList(); |
| |
| public List getList() { |
| if (list == null) { // always false |
| setList(getList()); |
| } |
| return list; |
| } |
| |
| public void setList(List list) { |
| if (list == null) { |
| setList(new LinkedList()); |
| } else { |
| this.list = list; |
| } |
| } |
| |
| // Another method with the same signature as getList |
| public void swap(List list) { |
| List before = getList(); |
| setList(list); |
| if (before == null) { // always false |
| swap(list); |
| } |
| } |
| |
| static RenamedClass create() { |
| RenamedClass theClass = new RenamedClass(); |
| theClass.setList(new LinkedList()); |
| return theClass; |
| } |
| |
| void takeThingsForASpin(int value) { |
| if (value == 42) { |
| swap(new LinkedList<>()); |
| setList(getList()); |
| } else { |
| takeThingsForASpin(42); |
| } |
| } |
| } |