Mercurial > hg > truffle
comparison 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 |
comparison
equal
deleted
inserted
replaced
21725:edafbaef3059 | 21726:22fe59641ba0 |
---|---|
36 | 36 |
37 @SupportedAnnotationTypes("com.oracle.jvmci.service.ServiceProvider") | 37 @SupportedAnnotationTypes("com.oracle.jvmci.service.ServiceProvider") |
38 public class ServiceProviderProcessor extends AbstractProcessor { | 38 public class ServiceProviderProcessor extends AbstractProcessor { |
39 | 39 |
40 private final Set<TypeElement> processed = new HashSet<>(); | 40 private final Set<TypeElement> processed = new HashSet<>(); |
41 private TypeElement baseJVMCIServiceInterface; | |
41 | 42 |
42 @Override | 43 @Override |
43 public SourceVersion getSupportedSourceVersion() { | 44 public SourceVersion getSupportedSourceVersion() { |
44 return SourceVersion.latest(); | 45 return SourceVersion.latest(); |
45 } | 46 } |
46 | 47 |
47 private boolean verifyAnnotation(TypeMirror serviceInterface, TypeElement serviceProvider) { | 48 private boolean verifyAnnotation(TypeMirror serviceInterface, TypeElement serviceProvider) { |
49 if (!processingEnv.getTypeUtils().isSubtype(serviceInterface, baseJVMCIServiceInterface.asType())) { | |
50 String msg = String.format("Service interface class %s doesn't extend JVMCI service interface %s", serviceInterface, baseJVMCIServiceInterface); | |
51 processingEnv.getMessager().printMessage(Kind.ERROR, msg, serviceProvider); | |
52 return false; | |
53 } | |
48 if (!processingEnv.getTypeUtils().isSubtype(serviceProvider.asType(), serviceInterface)) { | 54 if (!processingEnv.getTypeUtils().isSubtype(serviceProvider.asType(), serviceInterface)) { |
49 String msg = String.format("Service provider class %s doesn't implement service interface %s", serviceProvider.getSimpleName(), serviceInterface); | 55 String msg = String.format("Service provider class %s doesn't implement service interface %s", serviceProvider.getSimpleName(), serviceInterface); |
50 processingEnv.getMessager().printMessage(Kind.ERROR, msg, serviceProvider); | 56 processingEnv.getMessager().printMessage(Kind.ERROR, msg, serviceProvider); |
51 return false; | 57 return false; |
52 } | 58 } |
99 public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) { | 105 public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) { |
100 if (roundEnv.processingOver()) { | 106 if (roundEnv.processingOver()) { |
101 return true; | 107 return true; |
102 } | 108 } |
103 | 109 |
110 baseJVMCIServiceInterface = processingEnv.getElementUtils().getTypeElement("com.oracle.jvmci.service.Service"); | |
111 | |
104 for (Element element : roundEnv.getElementsAnnotatedWith(ServiceProvider.class)) { | 112 for (Element element : roundEnv.getElementsAnnotatedWith(ServiceProvider.class)) { |
105 assert element.getKind().isClass(); | 113 assert element.getKind().isClass(); |
106 processElement((TypeElement) element); | 114 processElement((TypeElement) element); |
107 } | 115 } |
108 | 116 |