Mercurial > hg > truffle
diff graal/com.oracle.jvmci.service.processor/src/com/oracle/jvmci/service/processor/ServiceProviderProcessor.java @ 21726:22fe59641ba0
require that @ServiceProvider is only used for JVMCI services
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Thu, 04 Jun 2015 16:51:37 +0200 |
parents | 93f282187d90 |
children |
line wrap: on
line diff
--- 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<TypeElement> 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);