/* * Copyright (C) 2015 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ public class Main { public static void main(String[] args) { stringEqualsSame(); stringArgumentNotNull("Foo"); } /// CHECK-START: boolean Main.stringEqualsSame() instruction_simplifier (before) /// CHECK: InvokeStaticOrDirect /// CHECK-START: boolean Main.stringEqualsSame() register (before) /// CHECK: <> IntConstant 1 /// CHECK: Return [<>] /// CHECK-START: boolean Main.stringEqualsSame() register (before) /// CHECK-NOT: InvokeStaticOrDirect public static boolean stringEqualsSame() { return $inline$callStringEquals("obj", "obj"); } /// CHECK-START: boolean Main.stringEqualsNull() register (after) /// CHECK: <> InvokeVirtual /// CHECK: Return [<>] public static boolean stringEqualsNull() { String o = (String)myObject; return $inline$callStringEquals(o, o); } public static boolean $inline$callStringEquals(String a, String b) { return a.equals(b); } /// CHECK-START-X86: boolean Main.stringArgumentNotNull(java.lang.Object) disassembly (after) /// CHECK: InvokeVirtual {{.*\.equals.*}} /// CHECK-NOT: test public static boolean stringArgumentNotNull(Object obj) { obj.getClass(); return "foo".equals(obj); } // Test is very brittle as it depends on the order we emit instructions. /// CHECK-START-X86: boolean Main.stringArgumentIsString() disassembly (after) /// CHECK: InvokeVirtual /// CHECK: test /// CHECK: jz/eq // Check that we don't try to compare the classes. /// CHECK-NOT: mov /// CHECK: cmp public static boolean stringArgumentIsString() { return "foo".equals(myString); } static String myString; static Object myObject; }