13
13
import java .security .Permission ;
14
14
import java .security .Policy ;
15
15
import java .security .ProtectionDomain ;
16
+ import java .util .Collection ;
16
17
import java .util .Collections ;
17
18
import java .util .List ;
18
19
import java .util .Set ;
@@ -29,12 +30,12 @@ public class AgentPolicy {
29
30
private static final Logger LOGGER = Logger .getLogger (AgentPolicy .class .getName ());
30
31
private static volatile Policy policy ;
31
32
private static volatile Set <String > trustedHosts ;
32
- private static volatile BiFunction <Class <?>, Stream <Class <?>>, Boolean > classesThatCanExit ;
33
+ private static volatile BiFunction <Class <?>, Collection <Class <?>>, Boolean > classesThatCanExit ;
33
34
34
35
/**
35
36
* None of the classes is allowed to call {@link System#exit} or {@link Runtime#halt}
36
37
*/
37
- public static final class NoneCanExit implements BiFunction <Class <?>, Stream <Class <?>>, Boolean > {
38
+ public static final class NoneCanExit implements BiFunction <Class <?>, Collection <Class <?>>, Boolean > {
38
39
/**
39
40
* NoneCanExit
40
41
*/
@@ -47,7 +48,7 @@ public NoneCanExit() {}
47
48
* @return is class allowed to call {@link System#exit}, {@link Runtime#halt} or not
48
49
*/
49
50
@ Override
50
- public Boolean apply (Class <?> caller , Stream <Class <?>> chain ) {
51
+ public Boolean apply (Class <?> caller , Collection <Class <?>> chain ) {
51
52
return true ;
52
53
}
53
54
}
@@ -86,7 +87,7 @@ public Boolean apply(Class<?> caller, Stream<Class<?>> chain) {
86
87
/**
87
88
* Any caller in the chain is allowed to call {@link System#exit} or {@link Runtime#halt}
88
89
*/
89
- public static final class AnyCanExit implements BiFunction <Class <?>, Stream <Class <?>>, Boolean > {
90
+ public static final class AnyCanExit implements BiFunction <Class <?>, Collection <Class <?>>, Boolean > {
90
91
private final String [] classesThatCanExit ;
91
92
92
93
/**
@@ -104,15 +105,15 @@ public AnyCanExit(final String[] classesThatCanExit) {
104
105
* @return is class allowed to call {@link System#exit}, {@link Runtime#halt} or not
105
106
*/
106
107
@ Override
107
- public Boolean apply (Class <?> caller , Stream <Class <?>> chain ) {
108
- return chain . anyMatch ( clazz -> {
108
+ public Boolean apply (Class <?> caller , Collection <Class <?>> chain ) {
109
+ for ( final Class <?> clazz : chain ) {
109
110
for (final String classThatCanExit : classesThatCanExit ) {
110
111
if (clazz .getName ().matches (classThatCanExit )) {
111
112
return true ;
112
113
}
113
114
}
114
- return false ;
115
- }) ;
115
+ }
116
+ return false ;
116
117
}
117
118
}
118
119
@@ -135,7 +136,7 @@ public static void setPolicy(Policy policy) {
135
136
public static void setPolicy (
136
137
Policy policy ,
137
138
final Set <String > trustedHosts ,
138
- final BiFunction <Class <?>, Stream <Class <?>>, Boolean > classesThatCanExit
139
+ final BiFunction <Class <?>, Collection <Class <?>>, Boolean > classesThatCanExit
139
140
) {
140
141
if (AgentPolicy .policy == null ) {
141
142
AgentPolicy .policy = policy ;
@@ -187,7 +188,7 @@ public static boolean isTrustedHost(String hostname) {
187
188
* @param chain chain of call classes
188
189
* @return is class allowed to call {@link System#exit}, {@link Runtime#halt} or not
189
190
*/
190
- public static boolean isChainThatCanExit (Class <?> caller , Stream <Class <?>> chain ) {
191
+ public static boolean isChainThatCanExit (Class <?> caller , Collection <Class <?>> chain ) {
191
192
return classesThatCanExit .apply (caller , chain );
192
193
}
193
194
}
0 commit comments