| // Copyright (c) 2018, 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. |
| package shaking18; |
| |
| public class Shaking { |
| |
| public static void main(String[] args) { |
| int i = args.length; |
| run(i); |
| } |
| |
| private static void run(int i) { |
| // Three invocations of each method to avoid inlining. |
| Options o = |
| i % 2 == 0 ? getOptions(i % 3) : i % 5 == 0 ? getOptions(i % 7) : getOptions(i % 11); |
| print(make(o, i % 13)); |
| print(make(o, i % 17)); |
| print(make(o, i % 19)); |
| } |
| |
| private static Base make(Options o, int i) { |
| if (o.alwaysFalse) { |
| return new DerivedUnused(); |
| } |
| return o.dummy ? new Derived1() : new Derived2(); |
| } |
| |
| private static Options getOptions(int i) { |
| Options o = new Options(); |
| o.dummy = i % 101 < 23; |
| return o; |
| } |
| |
| private static void print(Base b) { |
| System.out.println(b.getMessage()); |
| } |
| } |