/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import java.util.ArrayList; import javax.inject.*; class HoistModeled { @Inject private Provider mProvider; void expensive_get_hoist(int size) { for (int i = 0; i < size; i++) { mProvider.get(); } } void linear_contains_hoist(ArrayList list, Integer el) { int count = 0; for (int i = 0; i < 10; i++) { if (list.contains(el)) { count++; } } } void constant_contains_dont_hoist(Integer el) { boolean contains = false; ArrayList mylist = new ArrayList(); mylist.add(1); for (int i = 0; i < 10; i++) { contains = mylist.contains(el); } } void constant_substring_dont_hoist(String s) { String sub; for (int i = 0; i < 10; i++) { sub = s.substring(2, 10); } } void linear_substring_hoist_FN(String s, ArrayList list, Integer el) { String sub; int length = s.length(); for (int i = 0; i < 10; i++) { sub = s.substring( 2, length - 1); // can't determine statically that 2 <= length-1. So we give unit cost } for (int i = 0; i < 10; i++) { sub = s.substring(1); // ditto } } void call_expensive_hoist(String s, ArrayList list, Integer el) { for (int i = 0; i < 10; i++) { expensive_get_hoist(10); } } void expensive_get_hoist_hoist_me(String s, ArrayList list, Integer el) { String sub; int length = s.length(); for (int i = 0; i < 10; i++) { call_expensive_hoist("ez", list, el); } } void constant_substring_dont_hoist(String s, int x) { String sub; int length = s.length(); int y = -1; for (int i = 0; i < 10; i++) { sub = s.substring(x, y); } } }