LinkRequest.java revision 1551:f3b883bec2d0
1164190Sjkoshy/* 2164190Sjkoshy * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. 3164190Sjkoshy * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4164190Sjkoshy * 5164190Sjkoshy * This code is free software; you can redistribute it and/or modify it 6164190Sjkoshy * under the terms of the GNU General Public License version 2 only, as 7164190Sjkoshy * published by the Free Software Foundation. Oracle designates this 8164190Sjkoshy * particular file as subject to the "Classpath" exception as provided 9164190Sjkoshy * by Oracle in the LICENSE file that accompanied this code. 10164190Sjkoshy * 11164190Sjkoshy * This code is distributed in the hope that it will be useful, but WITHOUT 12164190Sjkoshy * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13164190Sjkoshy * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14164190Sjkoshy * version 2 for more details (a copy is included in the LICENSE file that 15164190Sjkoshy * accompanied this code). 16164190Sjkoshy * 17164190Sjkoshy * You should have received a copy of the GNU General Public License version 18164190Sjkoshy * 2 along with this work; if not, write to the Free Software Foundation, 19164190Sjkoshy * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20164190Sjkoshy * 21164190Sjkoshy * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22164190Sjkoshy * or visit www.oracle.com if you need additional information or have any 23164190Sjkoshy * questions. 24164190Sjkoshy */ 25164190Sjkoshy 26164190Sjkoshy/* 27164190Sjkoshy * This file is available under and governed by the GNU General Public 28164190Sjkoshy * License version 2 only, as published by the Free Software Foundation. 29164190Sjkoshy * However, the following notice accompanied the original version of this 30164190Sjkoshy * file, and Oracle licenses the original version of this file under the BSD 31164190Sjkoshy * license: 32164190Sjkoshy */ 33164190Sjkoshy/* 34164190Sjkoshy Copyright 2009-2013 Attila Szegedi 35164190Sjkoshy 36164190Sjkoshy Licensed under both the Apache License, Version 2.0 (the "Apache License") 37164190Sjkoshy and the BSD License (the "BSD License"), with licensee being free to 38164190Sjkoshy choose either of the two at their discretion. 39164190Sjkoshy 40164190Sjkoshy You may not use this file except in compliance with either the Apache 41164190Sjkoshy License or the BSD License. 42164190Sjkoshy 43164190Sjkoshy If you choose to use this file in compliance with the Apache License, the 44164190Sjkoshy following notice applies to you: 45164190Sjkoshy 46164190Sjkoshy You may obtain a copy of the Apache License at 47164190Sjkoshy 48164190Sjkoshy http://www.apache.org/licenses/LICENSE-2.0 49164190Sjkoshy 50164190Sjkoshy Unless required by applicable law or agreed to in writing, software 51164190Sjkoshy distributed under the License is distributed on an "AS IS" BASIS, 52164190Sjkoshy WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 53164190Sjkoshy implied. See the License for the specific language governing 54210332Skaiw permissions and limitations under the License. 55210332Skaiw 56210332Skaiw If you choose to use this file in compliance with the BSD License, the 57210332Skaiw following notice applies to you: 58164190Sjkoshy 59164190Sjkoshy Redistribution and use in source and binary forms, with or without 60164190Sjkoshy modification, are permitted provided that the following conditions are 61164190Sjkoshy met: 62164190Sjkoshy * Redistributions of source code must retain the above copyright 63164190Sjkoshy notice, this list of conditions and the following disclaimer. 64164190Sjkoshy * Redistributions in binary form must reproduce the above copyright 65164190Sjkoshy notice, this list of conditions and the following disclaimer in the 66164190Sjkoshy documentation and/or other materials provided with the distribution. 67164190Sjkoshy * Neither the name of the copyright holder nor the names of 68164190Sjkoshy contributors may be used to endorse or promote products derived from 69165316Sjkoshy this software without specific prior written permission. 70164190Sjkoshy 71164190Sjkoshy THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 72164190Sjkoshy IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 73164190Sjkoshy TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 74164190Sjkoshy PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER 75165316Sjkoshy BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 76164190Sjkoshy CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 77164190Sjkoshy SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 78164190Sjkoshy BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 79164190Sjkoshy WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 80165316Sjkoshy OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 81164190Sjkoshy ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 82164190Sjkoshy*/ 83164190Sjkoshy 84164190Sjkoshypackage jdk.dynalink.linker; 85164190Sjkoshy 86164190Sjkoshyimport jdk.dynalink.CallSiteDescriptor; 87164190Sjkoshyimport jdk.dynalink.DynamicLinker; 88164190Sjkoshyimport jdk.dynalink.DynamicLinkerFactory; 89164190Sjkoshy 90164190Sjkoshy/** 91165316Sjkoshy * Represents a request to link a particular invocation at a particular call 92164190Sjkoshy * site. Instances of these requests will be constructed and passed to all 93164190Sjkoshy * {@link GuardingDynamicLinker} objects managed by the {@link DynamicLinker} 94164190Sjkoshy * that is trying to link the call site. 95164190Sjkoshy */ 96164190Sjkoshypublic interface LinkRequest { 97164190Sjkoshy /** 98164190Sjkoshy * Returns the call site descriptor for the call site being linked. 99210332Skaiw * 100210332Skaiw * @return the call site descriptor for the call site being linked. 101210332Skaiw */ 102210332Skaiw public CallSiteDescriptor getCallSiteDescriptor(); 103164190Sjkoshy 104164190Sjkoshy /** 105164190Sjkoshy * Returns the arguments for the invocation being linked. The returned array 106164190Sjkoshy * must be a clone; modifications to it must not affect the arguments in 107164190Sjkoshy * this request. 108164190Sjkoshy * 109164190Sjkoshy * @return the arguments for the invocation being linked. 110164190Sjkoshy */ 111164190Sjkoshy public Object[] getArguments(); 112164190Sjkoshy 113164190Sjkoshy /** 114164190Sjkoshy * Returns the first argument for the invocation being linked; this is 115164190Sjkoshy * typically the receiver object. This is a shorthand for 116164190Sjkoshy * {@code getArguments()[0]} that also avoids the cloning of the arguments 117164190Sjkoshy * array. 118164190Sjkoshy * 119164190Sjkoshy * @return the receiver object. 120165316Sjkoshy */ 121164190Sjkoshy public Object getReceiver(); 122164190Sjkoshy 123164190Sjkoshy /** 124164190Sjkoshy * Returns true if the call site is considered unstable, that is, it has been relinked more times than was 125164190Sjkoshy * specified in {@link DynamicLinkerFactory#setUnstableRelinkThreshold(int)}. Linkers should use this as a 126165316Sjkoshy * hint to prefer producing linkage that is more stable (its guard fails less frequently), even if that assumption 127164190Sjkoshy * causes a less effective version of an operation to be linked. This is just a hint, though, and linkers are 128164190Sjkoshy * allowed to ignore this property. 129164190Sjkoshy * @return true if the call site is considered unstable. 130164190Sjkoshy */ 131165316Sjkoshy public boolean isCallSiteUnstable(); 132179240Sjb 133164190Sjkoshy /** 134164190Sjkoshy * Returns a request identical to this one with call site descriptor and arguments replaced with the ones specified. 135164190Sjkoshy * 136164190Sjkoshy * @param callSiteDescriptor the new call site descriptor 137164190Sjkoshy * @param arguments the new arguments 138164190Sjkoshy * @return a new request identical to this one, except with the call site descriptor and arguments replaced with the 139164190Sjkoshy * specified ones. 140164190Sjkoshy */ 141164190Sjkoshy public LinkRequest replaceArguments(CallSiteDescriptor callSiteDescriptor, Object... arguments); 142165316Sjkoshy} 143164190Sjkoshy