|  | // 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()); | 
|  | } | 
|  | } |