author | jlaskey |
Thu, 21 Jun 2018 08:58:59 -0300 | |
changeset 50695 | 36ca515343e0 |
parent 47216 | 71c04702a3d5 |
permissions | -rw-r--r-- |
16234
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
1 |
/* |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
2 |
* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
3 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
4 |
* |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
5 |
* This code is free software; you can redistribute it and/or modify it |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
6 |
* under the terms of the GNU General Public License version 2 only, as |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
7 |
* published by the Free Software Foundation. Oracle designates this |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
8 |
* particular file as subject to the "Classpath" exception as provided |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
9 |
* by Oracle in the LICENSE file that accompanied this code. |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
10 |
* |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
11 |
* This code is distributed in the hope that it will be useful, but WITHOUT |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
12 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
13 |
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
14 |
* version 2 for more details (a copy is included in the LICENSE file that |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
15 |
* accompanied this code). |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
16 |
* |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
17 |
* You should have received a copy of the GNU General Public License version |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
18 |
* 2 along with this work; if not, write to the Free Software Foundation, |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
19 |
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
20 |
* |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
21 |
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
22 |
* or visit www.oracle.com if you need additional information or have any |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
23 |
* questions. |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
24 |
*/ |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
25 |
|
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
26 |
/* |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
27 |
* This file is available under and governed by the GNU General Public |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
28 |
* License version 2 only, as published by the Free Software Foundation. |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
29 |
* However, the following notice accompanied the original version of this |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
30 |
* file, and Oracle licenses the original version of this file under the BSD |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
31 |
* license: |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
32 |
*/ |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
33 |
/* |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
34 |
Copyright 2009-2013 Attila Szegedi |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
35 |
|
50695 | 36 |
Redistribution and use in source and binary forms, with or without |
37 |
modification, are permitted provided that the following conditions are |
|
38 |
met: |
|
39 |
* Redistributions of source code must retain the above copyright |
|
40 |
notice, this list of conditions and the following disclaimer. |
|
41 |
* Redistributions in binary form must reproduce the above copyright |
|
42 |
notice, this list of conditions and the following disclaimer in the |
|
43 |
documentation and/or other materials provided with the distribution. |
|
44 |
* Neither the name of the copyright holder nor the names of |
|
45 |
contributors may be used to endorse or promote products derived from |
|
46 |
this software without specific prior written permission. |
|
16234
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
47 |
|
50695 | 48 |
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS |
49 |
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED |
|
50 |
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A |
|
51 |
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER |
|
52 |
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
|
53 |
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
|
54 |
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR |
|
55 |
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
|
56 |
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR |
|
57 |
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF |
|
58 |
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
16234
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
59 |
*/ |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
60 |
|
34447
ec4c069f9436
8141338: Move jdk.internal.dynalink package to jdk.dynalink
attila
parents:
33335
diff
changeset
|
61 |
package jdk.dynalink; |
16234
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
62 |
|
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
63 |
import java.lang.invoke.MethodHandle; |
33335
a46c85103868
8139756: Eliminate GuardedTypeConversion, DynamicLinker.getCurrentLinkRequest and its associated permission
attila
parents:
33331
diff
changeset
|
64 |
import java.lang.invoke.MethodHandles; |
36686
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
65 |
import java.lang.invoke.MethodHandles.Lookup; |
16234
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
66 |
import java.lang.invoke.MethodType; |
36686
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
67 |
import java.util.Objects; |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
68 |
import java.util.function.Supplier; |
34447
ec4c069f9436
8141338: Move jdk.internal.dynalink package to jdk.dynalink
attila
parents:
33335
diff
changeset
|
69 |
import jdk.dynalink.linker.ConversionComparator.Comparison; |
ec4c069f9436
8141338: Move jdk.internal.dynalink package to jdk.dynalink
attila
parents:
33335
diff
changeset
|
70 |
import jdk.dynalink.linker.GuardedInvocation; |
ec4c069f9436
8141338: Move jdk.internal.dynalink package to jdk.dynalink
attila
parents:
33335
diff
changeset
|
71 |
import jdk.dynalink.linker.GuardingDynamicLinker; |
ec4c069f9436
8141338: Move jdk.internal.dynalink package to jdk.dynalink
attila
parents:
33335
diff
changeset
|
72 |
import jdk.dynalink.linker.LinkRequest; |
ec4c069f9436
8141338: Move jdk.internal.dynalink package to jdk.dynalink
attila
parents:
33335
diff
changeset
|
73 |
import jdk.dynalink.linker.LinkerServices; |
ec4c069f9436
8141338: Move jdk.internal.dynalink package to jdk.dynalink
attila
parents:
33335
diff
changeset
|
74 |
import jdk.dynalink.linker.MethodHandleTransformer; |
16234
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
75 |
|
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
76 |
/** |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
77 |
* Default implementation of the {@link LinkerServices} interface. |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
78 |
*/ |
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:
33007
diff
changeset
|
79 |
final class LinkerServicesImpl implements LinkerServices { |
36686
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
80 |
private static final ThreadLocal<SecureLookupSupplier> threadLookupSupplier = new ThreadLocal<>(); |
22669 | 81 |
|
16234
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
82 |
private final TypeConverterFactory typeConverterFactory; |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
83 |
private final GuardingDynamicLinker topLevelLinker; |
28881
0008daeef352
8072596: Arrays.asList results in ClassCastException with a JS array
attila
parents:
25865
diff
changeset
|
84 |
private final MethodHandleTransformer internalObjectsFilter; |
16234
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
85 |
|
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
86 |
/** |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
87 |
* Creates a new linker services object. |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
88 |
* |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
89 |
* @param typeConverterFactory the type converter factory exposed by the services. |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
90 |
* @param topLevelLinker the top level linker used by the services. |
28881
0008daeef352
8072596: Arrays.asList results in ClassCastException with a JS array
attila
parents:
25865
diff
changeset
|
91 |
* @param internalObjectsFilter a method handle transformer that is supposed to act as the implementation of this |
0008daeef352
8072596: Arrays.asList results in ClassCastException with a JS array
attila
parents:
25865
diff
changeset
|
92 |
* services' {@link #filterInternalObjects(java.lang.invoke.MethodHandle)} method. |
16234
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
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:
33007
diff
changeset
|
94 |
LinkerServicesImpl(final TypeConverterFactory typeConverterFactory, |
28881
0008daeef352
8072596: Arrays.asList results in ClassCastException with a JS array
attila
parents:
25865
diff
changeset
|
95 |
final GuardingDynamicLinker topLevelLinker, final MethodHandleTransformer internalObjectsFilter) { |
16234
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
96 |
this.typeConverterFactory = typeConverterFactory; |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
97 |
this.topLevelLinker = topLevelLinker; |
28881
0008daeef352
8072596: Arrays.asList results in ClassCastException with a JS array
attila
parents:
25865
diff
changeset
|
98 |
this.internalObjectsFilter = internalObjectsFilter; |
16234
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
99 |
} |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
100 |
|
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
101 |
@Override |
24778
2ff5d7041566
8044638: Tidy up Nashorn codebase for code standards
attila
parents:
24719
diff
changeset
|
102 |
public boolean canConvert(final Class<?> from, final Class<?> to) { |
16234
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
103 |
return typeConverterFactory.canConvert(from, to); |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
104 |
} |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
105 |
|
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
106 |
@Override |
24778
2ff5d7041566
8044638: Tidy up Nashorn codebase for code standards
attila
parents:
24719
diff
changeset
|
107 |
public MethodHandle asType(final MethodHandle handle, final MethodType fromType) { |
16234
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
108 |
return typeConverterFactory.asType(handle, fromType); |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
109 |
} |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
110 |
|
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
111 |
@Override |
24778
2ff5d7041566
8044638: Tidy up Nashorn codebase for code standards
attila
parents:
24719
diff
changeset
|
112 |
public MethodHandle getTypeConverter(final Class<?> sourceType, final Class<?> targetType) { |
16234
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
113 |
return typeConverterFactory.getTypeConverter(sourceType, targetType); |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
114 |
} |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
115 |
|
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
116 |
@Override |
24778
2ff5d7041566
8044638: Tidy up Nashorn codebase for code standards
attila
parents:
24719
diff
changeset
|
117 |
public Comparison compareConversion(final Class<?> sourceType, final Class<?> targetType1, final Class<?> targetType2) { |
16234
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
118 |
return typeConverterFactory.compareConversion(sourceType, targetType1, targetType2); |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
119 |
} |
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
120 |
|
36686
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
121 |
/** |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
122 |
* Used to marshal a checked exception out of Supplier.get() in getGuardedInvocation. |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
123 |
*/ |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
124 |
private static class LinkerException extends RuntimeException { |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
125 |
private static final long serialVersionUID = 1L; |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
126 |
|
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
127 |
public LinkerException(final Exception cause) { |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
128 |
super(null, cause, true, false); |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
129 |
} |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
130 |
} |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
131 |
|
16234
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
132 |
@Override |
24778
2ff5d7041566
8044638: Tidy up Nashorn codebase for code standards
attila
parents:
24719
diff
changeset
|
133 |
public GuardedInvocation getGuardedInvocation(final LinkRequest linkRequest) throws Exception { |
22669 | 134 |
try { |
36686
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
135 |
return getWithLookupInternal(() -> { |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
136 |
try { |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
137 |
return topLevelLinker.getGuardedInvocation(linkRequest, this); |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
138 |
} catch (final RuntimeException e) { |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
139 |
throw e; |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
140 |
} catch (final Exception e) { |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
141 |
throw new LinkerException(e); |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
142 |
} |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
143 |
}, linkRequest.getCallSiteDescriptor()); |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
144 |
} catch (final LinkerException e) { |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
145 |
throw (Exception)e.getCause(); |
22669 | 146 |
} |
147 |
} |
|
148 |
||
28881
0008daeef352
8072596: Arrays.asList results in ClassCastException with a JS array
attila
parents:
25865
diff
changeset
|
149 |
@Override |
0008daeef352
8072596: Arrays.asList results in ClassCastException with a JS array
attila
parents:
25865
diff
changeset
|
150 |
public MethodHandle filterInternalObjects(final MethodHandle target) { |
0008daeef352
8072596: Arrays.asList results in ClassCastException with a JS array
attila
parents:
25865
diff
changeset
|
151 |
return internalObjectsFilter != null ? internalObjectsFilter.transform(target) : target; |
0008daeef352
8072596: Arrays.asList results in ClassCastException with a JS array
attila
parents:
25865
diff
changeset
|
152 |
} |
0008daeef352
8072596: Arrays.asList results in ClassCastException with a JS array
attila
parents:
25865
diff
changeset
|
153 |
|
36686
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
154 |
@Override |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
155 |
public <T> T getWithLookup(final Supplier<T> operation, final SecureLookupSupplier lookupSupplier) { |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
156 |
return getWithLookupInternal( |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
157 |
Objects.requireNonNull(operation, "action"), |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
158 |
Objects.requireNonNull(lookupSupplier, "lookupSupplier")); |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
159 |
} |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
160 |
|
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
161 |
private static <T> T getWithLookupInternal(final Supplier<T> operation, final SecureLookupSupplier lookupSupplier) { |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
162 |
final SecureLookupSupplier prevLookupSupplier = threadLookupSupplier.get(); |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
163 |
final boolean differ = prevLookupSupplier != lookupSupplier; |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
164 |
if (differ) { |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
165 |
threadLookupSupplier.set(lookupSupplier); |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
166 |
} |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
167 |
try { |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
168 |
return operation.get(); |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
169 |
} finally { |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
170 |
if (differ) { |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
171 |
threadLookupSupplier.set(prevLookupSupplier); |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
172 |
} |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
173 |
} |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
174 |
} |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
175 |
|
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
176 |
static Lookup getCurrentLookup() { |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
177 |
final SecureLookupSupplier lookupSupplier = threadLookupSupplier.get(); |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
178 |
if (lookupSupplier != null) { |
a351eacd4c42
8150218: Autoconversion SAM adapters sometimes don't get privileges
attila
parents:
34447
diff
changeset
|
179 |
return lookupSupplier.getLookup(); |
22669 | 180 |
} |
33335
a46c85103868
8139756: Eliminate GuardedTypeConversion, DynamicLinker.getCurrentLinkRequest and its associated permission
attila
parents:
33331
diff
changeset
|
181 |
return MethodHandles.publicLookup(); |
16234
86cb162cec6c
8008085: Integrate Dynalink source code into Nashorn codebase
attila
parents:
diff
changeset
|
182 |
} |
16245
6a1c6c8bc113
8008371: Fix Dynalink compiler warnings and whitespace
attila
parents:
16234
diff
changeset
|
183 |
} |