Skip to content
This repository has been archived by the owner on Feb 26, 2023. It is now read-only.

Commit

Permalink
Merge pull request #1749 from WonderCsabo/1746_generatedSourceEncoding
Browse files Browse the repository at this point in the history
Better generated source encoding support
  • Loading branch information
WonderCsabo committed Apr 13, 2016
2 parents fbfb2e5 + 3c89f0f commit de142c6
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 8 deletions.
Expand Up @@ -229,7 +229,7 @@ private ModelProcessor.ProcessResult processAnnotations(AnnotationElements valid
private void generateSources(ModelProcessor.ProcessResult processResult) throws IOException {
timeStats.start("Generate Sources");
LOGGER.info("Number of files generated by AndroidAnnotations: {}", processResult.codeModel.countArtifacts());
CodeModelGenerator modelGenerator = new CodeModelGenerator(processingEnv.getFiler(), coreVersion);
CodeModelGenerator modelGenerator = new CodeModelGenerator(processingEnv.getFiler(), coreVersion, androidAnnotationsEnv.getOptionValue(CodeModelGenerator.OPTION_ENCODING));
modelGenerator.generate(processResult);
timeStats.stop("Generate Sources");
}
Expand Down
Expand Up @@ -25,6 +25,7 @@
import org.androidannotations.Option;
import org.androidannotations.helper.ModelConstants;
import org.androidannotations.holder.BaseGeneratedClassHolder;
import org.androidannotations.internal.generation.CodeModelGenerator;
import org.androidannotations.internal.helper.AndroidManifestFinder;
import org.androidannotations.internal.rclass.ProjectRClassFinder;
import org.androidannotations.logger.LoggerContext;
Expand All @@ -46,6 +47,7 @@ public Options(ProcessingEnvironment processingEnvironment) {
addSupportedOption(LoggerContext.OPTION_LOG_APPENDER_CONSOLE);
addSupportedOption(LoggerContext.OPTION_LOG_APPENDER_FILE);
addSupportedOption(BaseGeneratedClassHolder.OPTION_GENERATE_FINAL_CLASSES);
addSupportedOption(CodeModelGenerator.OPTION_ENCODING);
}

public void addAllSupportedOptions(List<Option> options) {
Expand Down
Expand Up @@ -16,31 +16,55 @@
package org.androidannotations.internal.generation;

import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.charset.UnsupportedCharsetException;

import javax.annotation.processing.Filer;

import org.androidannotations.Option;
import org.androidannotations.internal.process.ModelProcessor;
import org.androidannotations.logger.Logger;
import org.androidannotations.logger.LoggerFactory;

import com.helger.jcodemodel.writer.PrologCodeWriter;

public class CodeModelGenerator {

public static final Option OPTION_ENCODING = new Option("encoding", "UTF-8");

private static final Logger LOGGER = LoggerFactory.getLogger(CodeModelGenerator.class);

private final Filer filer;
private final String header;
private final String encoding;

public CodeModelGenerator(Filer filer, String aaVersion) {
public CodeModelGenerator(Filer filer, String aaVersion, String encoding) {
this.filer = filer;
this.header = "DO NOT EDIT THIS FILE.\n"
+ "Generated using AndroidAnnotations " + aaVersion + ".\n\n"
+ "You can create a larger work that contains this file and distribute that work under terms of your choice.\n";
this.encoding = encoding;
}

public void generate(ModelProcessor.ProcessResult processResult) throws IOException {
Charset charset = getCharset();

SourceCodeWriter sourceCodeWriter = new SourceCodeWriter(filer, processResult.originatingElements);
SourceCodeWriter sourceCodeWriter = new SourceCodeWriter(filer, processResult.originatingElements, charset);

PrologCodeWriter prologCodeWriter = new PrologCodeWriter(sourceCodeWriter, header);

processResult.codeModel.build(prologCodeWriter, new ResourceCodeWriter(filer));
processResult.codeModel.build(prologCodeWriter, new ResourceCodeWriter(filer, charset));
}

private Charset getCharset() {
try {
return Charset.forName(encoding);
} catch (UnsupportedCharsetException exception) {
Charset defaultCharset = Charset.defaultCharset();

LOGGER.warn("The requested charset ({}) is not available, falling back to platform default ({}).", encoding, defaultCharset);

return defaultCharset;
}
}
}
Expand Up @@ -17,6 +17,7 @@

import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.Charset;

import javax.annotation.processing.Filer;
import javax.tools.FileObject;
Expand All @@ -29,8 +30,8 @@ public class ResourceCodeWriter extends AbstractCodeWriter {

private final Filer filer;

public ResourceCodeWriter(Filer filer) {
super(null);
public ResourceCodeWriter(Filer filer, Charset charset) {
super(charset);
this.filer = filer;
}

Expand Down
Expand Up @@ -17,6 +17,7 @@

import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.Charset;

import javax.annotation.processing.Filer;
import javax.annotation.processing.FilerException;
Expand Down Expand Up @@ -44,8 +45,8 @@ public void write(int arg0) throws IOException {
}
}

public SourceCodeWriter(Filer filer, OriginatingElements originatingElements) {
super(null);
public SourceCodeWriter(Filer filer, OriginatingElements originatingElements, Charset charset) {
super(charset);
this.filer = filer;
this.originatingElements = originatingElements;
}
Expand Down

0 comments on commit de142c6

Please sign in to comment.