Skip to content

Commit d058af0

Browse files
committed
exclude hosted-only LibGraalService providers from libgraal
1 parent b799e3d commit d058af0

File tree

1 file changed

+21
-1
lines changed

1 file changed

+21
-1
lines changed

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/serviceprovider/GraalServices.java

+21-1
Original file line numberDiff line numberDiff line change
@@ -94,18 +94,38 @@ private static void addProviders(String arch, Class<?> service) {
9494
// Skip provider for another architecture
9595
continue;
9696
}
97+
if (provider.getClass().getAnnotation(LibGraalSupport.HostedOnly.class) != null) {
98+
// Skip hosted-only providers
99+
continue;
100+
}
97101
providers.add(provider);
98102
}
99103
}
100104

105+
/**
106+
* Determines if {@code c} is annotated by {@link LibGraalService}.
107+
*/
108+
static boolean isLibGraalService(Class<?> c) {
109+
if (c != null && c.getAnnotation(LibGraalService.class) != null) {
110+
if (c.getAnnotation(LibGraalSupport.HostedOnly.class) != null) {
111+
throw new GraalError("Class %s cannot be annotated by both %s and %s as they are mutually exclusive)",
112+
c.getName(),
113+
LibGraalService.class.getName(),
114+
LibGraalSupport.HostedOnly.class.getName());
115+
}
116+
return true;
117+
}
118+
return false;
119+
}
120+
101121
static {
102122
LibGraalSupport libgraal = LibGraalSupport.INSTANCE;
103123
if (libgraal != null) {
104124
libgraalServices = new HashMap<>();
105125
String arch = getJVMCIArch();
106126
libgraal.getClassModuleMap().keySet().stream()//
107127
.map(GraalServices::loadClassOrNull)//
108-
.filter(c -> c != null && c.getAnnotation(LibGraalService.class) != null)//
128+
.filter(GraalServices::isLibGraalService)//
109129
.forEach(service -> addProviders(arch, service));
110130
} else {
111131
libgraalServices = null;

0 commit comments

Comments
 (0)