nashorn/src/jdk.dynalink/share/classes/jdk/dynalink/linker/GuardedInvocationTransformer.java
author attila
Tue, 24 Nov 2015 10:19:34 +0100
changeset 34447 ec4c069f9436
parent 33339 nashorn/src/jdk.scripting.nashorn/share/classes/jdk/internal/dynalink/linker/GuardedInvocationTransformer.java@334cd3ebfa5e
permissions -rw-r--r--
8141338: Move jdk.internal.dynalink package to jdk.dynalink Reviewed-by: hannesw, sundar
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
24719
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
     1
/*
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
     2
 * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
     4
 *
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    10
 *
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    15
 * accompanied this code).
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    16
 *
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    20
 *
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    23
 * questions.
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    24
 */
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    25
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    26
/*
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    27
 * This file is available under and governed by the GNU General Public
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    28
 * License version 2 only, as published by the Free Software Foundation.
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    29
 * However, the following notice accompanied the original version of this
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    30
 * file, and Oracle licenses the original version of this file under the BSD
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    31
 * license:
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    32
 */
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    33
/*
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    34
   Copyright 2009-2013 Attila Szegedi
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    35
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    36
   Licensed under both the Apache License, Version 2.0 (the "Apache License")
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    37
   and the BSD License (the "BSD License"), with licensee being free to
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    38
   choose either of the two at their discretion.
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    39
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    40
   You may not use this file except in compliance with either the Apache
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    41
   License or the BSD License.
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    42
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    43
   If you choose to use this file in compliance with the Apache License, the
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    44
   following notice applies to you:
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    45
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    46
       You may obtain a copy of the Apache License at
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    47
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    48
           http://www.apache.org/licenses/LICENSE-2.0
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    49
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    50
       Unless required by applicable law or agreed to in writing, software
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    51
       distributed under the License is distributed on an "AS IS" BASIS,
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    52
       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    53
       implied. See the License for the specific language governing
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    54
       permissions and limitations under the License.
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    55
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    56
   If you choose to use this file in compliance with the BSD License, the
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    57
   following notice applies to you:
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    58
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    59
       Redistribution and use in source and binary forms, with or without
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    60
       modification, are permitted provided that the following conditions are
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    61
       met:
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    62
       * Redistributions of source code must retain the above copyright
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    63
         notice, this list of conditions and the following disclaimer.
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    64
       * Redistributions in binary form must reproduce the above copyright
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    65
         notice, this list of conditions and the following disclaimer in the
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    66
         documentation and/or other materials provided with the distribution.
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    67
       * Neither the name of the copyright holder nor the names of
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    68
         contributors may be used to endorse or promote products derived from
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    69
         this software without specific prior written permission.
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    70
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    71
       THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    72
       IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    73
       TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    74
       PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    75
       BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    76
       CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    77
       SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    78
       BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    79
       WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    80
       OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    81
       ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    82
*/
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    83
34447
ec4c069f9436 8141338: Move jdk.internal.dynalink package to jdk.dynalink
attila
parents: 33339
diff changeset
    84
package jdk.dynalink.linker;
24719
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    85
34447
ec4c069f9436 8141338: Move jdk.internal.dynalink package to jdk.dynalink
attila
parents: 33339
diff changeset
    86
import jdk.dynalink.DynamicLinkerFactory;
24719
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    87
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    88
/**
33333
0bad500ce4e0 8139590: Improve Dynalink JavaDoc
attila
parents: 33330
diff changeset
    89
 * Interface for objects that are used to transform one guarded invocation into
0bad500ce4e0 8139590: Improve Dynalink JavaDoc
attila
parents: 33330
diff changeset
    90
 * another one. Typical usage is for implementing
33337
af3fea63e008 8139761: Improve Dynalink class nomenclature and package organization
attila
parents: 33333
diff changeset
    91
 * {@link DynamicLinkerFactory#setPrelinkTransformer(GuardedInvocationTransformer)
af3fea63e008 8139761: Improve Dynalink class nomenclature and package organization
attila
parents: 33333
diff changeset
    92
 * pre-link transformers}.
24719
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    93
 */
33330
35531ae624ef 8139304: Remove elaborate call site descriptor class hierarchy and factory for them. Remove AutoDiscovery, DefaultPrelinkFilter, and BottomGuardingDynamicLinker as they can be inlined into DynamicLinkerFactory. Remove CallerSensitiveDetector as it can be inlined into AbstractJavaLinker. Make ClassMap non-public.
attila
parents: 25865
diff changeset
    94
@FunctionalInterface
33337
af3fea63e008 8139761: Improve Dynalink class nomenclature and package organization
attila
parents: 33333
diff changeset
    95
public interface GuardedInvocationTransformer {
24719
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    96
    /**
33333
0bad500ce4e0 8139590: Improve Dynalink JavaDoc
attila
parents: 33330
diff changeset
    97
     * Given a guarded invocation, return either the same or potentially
0bad500ce4e0 8139590: Improve Dynalink JavaDoc
attila
parents: 33330
diff changeset
    98
     * different guarded invocation.
0bad500ce4e0 8139590: Improve Dynalink JavaDoc
attila
parents: 33330
diff changeset
    99
     * @param inv the original guarded invocation.
0bad500ce4e0 8139590: Improve Dynalink JavaDoc
attila
parents: 33330
diff changeset
   100
     * @param linkRequest the link request for which the invocation was
0bad500ce4e0 8139590: Improve Dynalink JavaDoc
attila
parents: 33330
diff changeset
   101
     * generated (usually by some linker).
0bad500ce4e0 8139590: Improve Dynalink JavaDoc
attila
parents: 33330
diff changeset
   102
     * @param linkerServices the linker services that can be used during
0bad500ce4e0 8139590: Improve Dynalink JavaDoc
attila
parents: 33330
diff changeset
   103
     * creation of a new invocation.
0bad500ce4e0 8139590: Improve Dynalink JavaDoc
attila
parents: 33330
diff changeset
   104
     * @return either the passed guarded invocation or a different one, with
0bad500ce4e0 8139590: Improve Dynalink JavaDoc
attila
parents: 33330
diff changeset
   105
     * the difference usually determined based on information in the link
0bad500ce4e0 8139590: Improve Dynalink JavaDoc
attila
parents: 33330
diff changeset
   106
     * request and the differing invocation created with the assistance of the
0bad500ce4e0 8139590: Improve Dynalink JavaDoc
attila
parents: 33330
diff changeset
   107
     * linker services. Whether or not {@code null} is an accepted return value
0bad500ce4e0 8139590: Improve Dynalink JavaDoc
attila
parents: 33330
diff changeset
   108
     * is dependent on the user of the filter.
33339
334cd3ebfa5e 8139888: Improve Dynalink JavaDoc some more
attila
parents: 33337
diff changeset
   109
     * @throws NullPointerException is allowed to be thrown by implementations
334cd3ebfa5e 8139888: Improve Dynalink JavaDoc some more
attila
parents: 33337
diff changeset
   110
     * if any of the passed arguments is null.
24719
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
   111
     */
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
   112
    public GuardedInvocation filter(GuardedInvocation inv, LinkRequest linkRequest, LinkerServices linkerServices);
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
   113
}