code: public Option<FileHolder> findRootProjectHolder() {
  		Filer filer = processingEnv.getFiler();
  
  		FileObject dummySourceFile;
  		try {
  			dummySourceFile = filer.createResource(StandardLocation.SOURCE_OUTPUT, "com", "dummy" + System.currentTimeMillis());
  		} catch (IOException ignored) {
  			return Option.absent();
  		}
  		String dummySourceFilePath = dummySourceFile.toUri().toString();
  
  		if (dummySourceFilePath.startsWith("file:")) {
  			if (!dummySourceFilePath.startsWith("file://")) {
  				dummySourceFilePath = "file://" + dummySourceFilePath.substring("file:".length());
  			}
  		} else {
  			dummySourceFilePath = "file://" + dummySourceFilePath;
  		}
  
  		URI cleanURI;
  		try {
  			cleanURI = new URI(dummySourceFilePath);
  		} catch (URISyntaxException e) {
  			return Option.absent();
  		}
  		try {
  			File dummyFile = new File(cleanURI);
  			File sourcesGenerationFolder = dummyFile.getParentFile();
  			File projectRoot = sourcesGenerationFolder.getParentFile();
  
  			return Option.of(new FileHolder(dummySourceFilePath, sourcesGenerationFolder, projectRoot));
  		}catch(IllegalArgumentException ex){
  			return Option.absent();
  		}
  	}
docs: We use a dirty trick to find the AndroidManifest.xml file, since it's not
  available in the classpath. The idea is quite simple : create a fake
  class file, retrieve its URI, and start going up in parent folders to
  find the AndroidManifest.xml file. Any better solution will be
  appreciated.