# HG changeset patch # User Doug Simon # Date 1433429497 -7200 # Node ID 22fe59641ba0b4b207f1cca2b09f053b727256ca # Parent edafbaef3059ead3ed7dc66e9022fe2e7ba9eaaf require that @ServiceProvider is only used for JVMCI services diff -r edafbaef3059 -r 22fe59641ba0 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/LoopNodeFactory.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/LoopNodeFactory.java Thu Jun 04 16:50:51 2015 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/LoopNodeFactory.java Thu Jun 04 16:51:37 2015 +0200 @@ -22,9 +22,10 @@ */ package com.oracle.graal.truffle; +import com.oracle.jvmci.service.*; import com.oracle.truffle.api.nodes.*; -public interface LoopNodeFactory extends PrioritizedServiceProvider { +public interface LoopNodeFactory extends PrioritizedServiceProvider, Service { LoopNode create(RepeatingNode repeatingNode); diff -r edafbaef3059 -r 22fe59641ba0 graal/com.oracle.jvmci.service.processor/src/com/oracle/jvmci/service/processor/ServiceProviderProcessor.java --- a/graal/com.oracle.jvmci.service.processor/src/com/oracle/jvmci/service/processor/ServiceProviderProcessor.java Thu Jun 04 16:50:51 2015 +0200 +++ b/graal/com.oracle.jvmci.service.processor/src/com/oracle/jvmci/service/processor/ServiceProviderProcessor.java Thu Jun 04 16:51:37 2015 +0200 @@ -38,6 +38,7 @@ public class ServiceProviderProcessor extends AbstractProcessor { private final Set processed = new HashSet<>(); + private TypeElement baseJVMCIServiceInterface; @Override public SourceVersion getSupportedSourceVersion() { @@ -45,6 +46,11 @@ } private boolean verifyAnnotation(TypeMirror serviceInterface, TypeElement serviceProvider) { + if (!processingEnv.getTypeUtils().isSubtype(serviceInterface, baseJVMCIServiceInterface.asType())) { + String msg = String.format("Service interface class %s doesn't extend JVMCI service interface %s", serviceInterface, baseJVMCIServiceInterface); + processingEnv.getMessager().printMessage(Kind.ERROR, msg, serviceProvider); + return false; + } if (!processingEnv.getTypeUtils().isSubtype(serviceProvider.asType(), serviceInterface)) { String msg = String.format("Service provider class %s doesn't implement service interface %s", serviceProvider.getSimpleName(), serviceInterface); processingEnv.getMessager().printMessage(Kind.ERROR, msg, serviceProvider); @@ -101,6 +107,8 @@ return true; } + baseJVMCIServiceInterface = processingEnv.getElementUtils().getTypeElement("com.oracle.jvmci.service.Service"); + for (Element element : roundEnv.getElementsAnnotatedWith(ServiceProvider.class)) { assert element.getKind().isClass(); processElement((TypeElement) element);