package org.robolectric.annotation.processing.generator;
import org.robolectric.annotation.processing.RobolectricModel;
import javax.annotation.processing.Filer;
import javax.annotation.processing.Messager;
import javax.annotation.processing.ProcessingEnvironment;
import javax.tools.Diagnostic;
import javax.tools.FileObject;
import javax.tools.StandardLocation;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
/**
* Generator that creates the service loader metadata for a shadow package.
*/
public class ServiceLoaderGenerator extends Generator {
private final Filer filer;
private final Messager messager;
private final String shadowPackage;
public ServiceLoaderGenerator(ProcessingEnvironment environment, String shadowPackage) {
this.filer = environment.getFiler();
this.messager = environment.getMessager();
this.shadowPackage = shadowPackage;
}
@Override
public void generate() {
final String fileName = "org.robolectric.internal.ShadowProvider";
try {
FileObject file = filer.createResource(StandardLocation.CLASS_OUTPUT, "", "META-INF/services/" + fileName);
PrintWriter pw = new PrintWriter(new OutputStreamWriter(file.openOutputStream(), "UTF-8"));
pw.println(shadowPackage + '.' + GEN_CLASS);
pw.close();
} catch (IOException e) {
messager.printMessage(Diagnostic.Kind.ERROR, "Failed to write service loader metadata file: " + e);
throw new RuntimeException(e);
}
}
}