src/jdk.dynalink/share/classes/jdk/dynalink/linker/GuardedInvocationTransformer.java
author jlaskey
Thu, 21 Jun 2018 08:58:59 -0300
changeset 50695 36ca515343e0
parent 47216 71c04702a3d5
permissions -rw-r--r--
8203637: Fix Sources 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
50695
36ca515343e0 8203637: Fix Sources
jlaskey
parents: 47216
diff changeset
    36
   Redistribution and use in source and binary forms, with or without
36ca515343e0 8203637: Fix Sources
jlaskey
parents: 47216
diff changeset
    37
   modification, are permitted provided that the following conditions are
36ca515343e0 8203637: Fix Sources
jlaskey
parents: 47216
diff changeset
    38
   met:
36ca515343e0 8203637: Fix Sources
jlaskey
parents: 47216
diff changeset
    39
   * Redistributions of source code must retain the above copyright
36ca515343e0 8203637: Fix Sources
jlaskey
parents: 47216
diff changeset
    40
     notice, this list of conditions and the following disclaimer.
36ca515343e0 8203637: Fix Sources
jlaskey
parents: 47216
diff changeset
    41
   * Redistributions in binary form must reproduce the above copyright
36ca515343e0 8203637: Fix Sources
jlaskey
parents: 47216
diff changeset
    42
     notice, this list of conditions and the following disclaimer in the
36ca515343e0 8203637: Fix Sources
jlaskey
parents: 47216
diff changeset
    43
     documentation and/or other materials provided with the distribution.
36ca515343e0 8203637: Fix Sources
jlaskey
parents: 47216
diff changeset
    44
   * Neither the name of the copyright holder nor the names of
36ca515343e0 8203637: Fix Sources
jlaskey
parents: 47216
diff changeset
    45
     contributors may be used to endorse or promote products derived from
36ca515343e0 8203637: Fix Sources
jlaskey
parents: 47216
diff changeset
    46
     this software without specific prior written permission.
24719
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    47
50695
36ca515343e0 8203637: Fix Sources
jlaskey
parents: 47216
diff changeset
    48
   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
36ca515343e0 8203637: Fix Sources
jlaskey
parents: 47216
diff changeset
    49
   IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
36ca515343e0 8203637: Fix Sources
jlaskey
parents: 47216
diff changeset
    50
   TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
36ca515343e0 8203637: Fix Sources
jlaskey
parents: 47216
diff changeset
    51
   PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER
36ca515343e0 8203637: Fix Sources
jlaskey
parents: 47216
diff changeset
    52
   BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
36ca515343e0 8203637: Fix Sources
jlaskey
parents: 47216
diff changeset
    53
   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
36ca515343e0 8203637: Fix Sources
jlaskey
parents: 47216
diff changeset
    54
   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
36ca515343e0 8203637: Fix Sources
jlaskey
parents: 47216
diff changeset
    55
   BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
36ca515343e0 8203637: Fix Sources
jlaskey
parents: 47216
diff changeset
    56
   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
36ca515343e0 8203637: Fix Sources
jlaskey
parents: 47216
diff changeset
    57
   OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
36ca515343e0 8203637: Fix Sources
jlaskey
parents: 47216
diff changeset
    58
   ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24719
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    59
*/
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    60
34447
ec4c069f9436 8141338: Move jdk.internal.dynalink package to jdk.dynalink
attila
parents: 33339
diff changeset
    61
package jdk.dynalink.linker;
24719
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    62
34447
ec4c069f9436 8141338: Move jdk.internal.dynalink package to jdk.dynalink
attila
parents: 33339
diff changeset
    63
import jdk.dynalink.DynamicLinkerFactory;
24719
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    64
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    65
/**
33333
0bad500ce4e0 8139590: Improve Dynalink JavaDoc
attila
parents: 33330
diff changeset
    66
 * Interface for objects that are used to transform one guarded invocation into
0bad500ce4e0 8139590: Improve Dynalink JavaDoc
attila
parents: 33330
diff changeset
    67
 * another one. Typical usage is for implementing
33337
af3fea63e008 8139761: Improve Dynalink class nomenclature and package organization
attila
parents: 33333
diff changeset
    68
 * {@link DynamicLinkerFactory#setPrelinkTransformer(GuardedInvocationTransformer)
af3fea63e008 8139761: Improve Dynalink class nomenclature and package organization
attila
parents: 33333
diff changeset
    69
 * pre-link transformers}.
24719
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    70
 */
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
    71
@FunctionalInterface
33337
af3fea63e008 8139761: Improve Dynalink class nomenclature and package organization
attila
parents: 33333
diff changeset
    72
public interface GuardedInvocationTransformer {
24719
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    73
    /**
33333
0bad500ce4e0 8139590: Improve Dynalink JavaDoc
attila
parents: 33330
diff changeset
    74
     * Given a guarded invocation, return either the same or potentially
0bad500ce4e0 8139590: Improve Dynalink JavaDoc
attila
parents: 33330
diff changeset
    75
     * different guarded invocation.
0bad500ce4e0 8139590: Improve Dynalink JavaDoc
attila
parents: 33330
diff changeset
    76
     * @param inv the original guarded invocation.
0bad500ce4e0 8139590: Improve Dynalink JavaDoc
attila
parents: 33330
diff changeset
    77
     * @param linkRequest the link request for which the invocation was
0bad500ce4e0 8139590: Improve Dynalink JavaDoc
attila
parents: 33330
diff changeset
    78
     * generated (usually by some linker).
0bad500ce4e0 8139590: Improve Dynalink JavaDoc
attila
parents: 33330
diff changeset
    79
     * @param linkerServices the linker services that can be used during
0bad500ce4e0 8139590: Improve Dynalink JavaDoc
attila
parents: 33330
diff changeset
    80
     * creation of a new invocation.
0bad500ce4e0 8139590: Improve Dynalink JavaDoc
attila
parents: 33330
diff changeset
    81
     * @return either the passed guarded invocation or a different one, with
0bad500ce4e0 8139590: Improve Dynalink JavaDoc
attila
parents: 33330
diff changeset
    82
     * the difference usually determined based on information in the link
0bad500ce4e0 8139590: Improve Dynalink JavaDoc
attila
parents: 33330
diff changeset
    83
     * request and the differing invocation created with the assistance of the
0bad500ce4e0 8139590: Improve Dynalink JavaDoc
attila
parents: 33330
diff changeset
    84
     * linker services. Whether or not {@code null} is an accepted return value
0bad500ce4e0 8139590: Improve Dynalink JavaDoc
attila
parents: 33330
diff changeset
    85
     * is dependent on the user of the filter.
33339
334cd3ebfa5e 8139888: Improve Dynalink JavaDoc some more
attila
parents: 33337
diff changeset
    86
     * @throws NullPointerException is allowed to be thrown by implementations
334cd3ebfa5e 8139888: Improve Dynalink JavaDoc some more
attila
parents: 33337
diff changeset
    87
     * if any of the passed arguments is null.
24719
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    88
     */
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    89
    public GuardedInvocation filter(GuardedInvocation inv, LinkRequest linkRequest, LinkerServices linkerServices);
f726e9d67629 8035820: Optimistic recompilation
attila
parents:
diff changeset
    90
}