| /* |
| * Copyright 2014 Google Inc. |
| * |
| * 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. |
| */ |
| package com.google.gwt.dev.jjs.optimized; |
| |
| import com.google.gwt.junit.DoNotRunWith; |
| import com.google.gwt.junit.Platform; |
| |
| import jsinterop.annotations.JsOverlay; |
| import jsinterop.annotations.JsPackage; |
| import jsinterop.annotations.JsType; |
| |
| /** |
| * Tests for JsOverlay methods are inlined by the Java optimization passes.. |
| */ |
| @DoNotRunWith(Platform.Devel) |
| public class JsOverlayMethodOptimizationTest extends OptimizationTestBase { |
| |
| @JsType(isNative = true, namespace = JsPackage.GLOBAL, name = "Object") |
| private static class NativeType { |
| private native int nativeMethod(); |
| |
| @JsOverlay |
| final boolean contains(String s1, String s2) { |
| return s1.contains(s2); |
| } |
| |
| @JsOverlay |
| final int alwaysCallNative() { |
| // NativeType.contains should get inlined by Java passes so the code below should be |
| // statically evaluated to return "this". |
| return contains("1234","1") ? this.nativeMethod() : 0; |
| } |
| } |
| |
| public static int callAlwaysCallNative(NativeType obj) { |
| return obj.alwaysCallNative(); |
| } |
| |
| private static native String getGeneratedFunctionDefinition() /*-{ |
| return function() { |
| @JsOverlayMethodOptimizationTest::callAlwaysCallNative(*)({}); |
| }.toString(); |
| }-*/; |
| |
| /** |
| * Tests whether JsOverlay is inlined by the Java optimization passes rather than being just |
| * devirtualized. |
| */ |
| public void testJsOverlayIsInlined() throws Exception { |
| String functionDef = getGeneratedFunctionDefinition(); |
| assertFunctionMatches(functionDef, "({}.nativeMethod())"); |
| } |
| } |