Skip to content

Commit

Permalink
Merge pull request #3487 from gwenneg/issue-3486-dynamic-hot-reload-s…
Browse files Browse the repository at this point in the history
…ources-encoding

Use a dynamic sources encoding during a hot reload compilation
  • Loading branch information
gsmet authored Aug 13, 2019
2 parents aff962e + 64a97e2 commit 35a7876
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,8 @@ public ClassLoaderCompiler(ClassLoader classLoader,
classPathElements,
new File(i.getProjectDirectory()),
new File(sourcePath),
new File(i.getClassesPath())));
new File(i.getClassesPath()),
context.getSourceEncoding()));
});
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package io.quarkus.dev;

import java.io.File;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.util.Collections;
import java.util.Set;
Expand All @@ -24,19 +26,22 @@ class Context {
private final File projectDirectory;
private final File sourceDirectory;
private final File outputDirectory;
private final Charset sourceEncoding;

public Context(
String name,
Set<File> classpath,
File projectDirectory,
File sourceDirectory,
File outputDirectory) {
File outputDirectory,
String sourceEncoding) {

this.name = name;
this.classpath = classpath;
this.projectDirectory = projectDirectory;
this.sourceDirectory = sourceDirectory;
this.outputDirectory = outputDirectory;
this.sourceEncoding = sourceEncoding == null ? StandardCharsets.UTF_8 : Charset.forName(sourceEncoding);
}

public String getName() {
Expand All @@ -58,5 +63,9 @@ public File getSourceDirectory() {
public File getOutputDirectory() {
return outputDirectory;
}

public Charset getSourceEncoding() {
return sourceEncoding;
}
}
}
9 changes: 9 additions & 0 deletions core/devmode/src/main/java/io/quarkus/dev/DevModeContext.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ public class DevModeContext implements Serializable {
private final List<ModuleInfo> modules = new ArrayList<>();
private final Map<String, String> systemProperties = new HashMap<>();
private final Map<String, String> buildSystemProperties = new HashMap<>();
private String sourceEncoding;

private final List<File> classesRoots = new ArrayList<>();
private File frameworkClassesDir;
Expand All @@ -45,6 +46,14 @@ public Map<String, String> getBuildSystemProperties() {
return buildSystemProperties;
}

public String getSourceEncoding() {
return sourceEncoding;
}

public void setSourceEncoding(String sourceEncoding) {
this.sourceEncoding = sourceEncoding;
}

public List<File> getClassesRoots() {
return classesRoots;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
Expand Down Expand Up @@ -44,7 +43,7 @@ public void compile(Set<File> filesToCompile, Context context) {
}
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<>();
try (StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null,
StandardCharsets.UTF_8)) {
context.getSourceEncoding())) {

fileManager.setLocation(StandardLocation.CLASS_PATH, context.getClasspath());
fileManager.setLocation(StandardLocation.CLASS_OUTPUT, Collections.singleton(context.getOutputDirectory()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,19 +30,22 @@

import org.gradle.api.GradleException;
import org.gradle.api.Project;
import org.gradle.api.Task;
import org.gradle.api.artifacts.Configuration;
import org.gradle.api.artifacts.Dependency;
import org.gradle.api.artifacts.DependencySet;
import org.gradle.api.artifacts.ProjectDependency;
import org.gradle.api.artifacts.ResolvedDependency;
import org.gradle.api.plugins.Convention;
import org.gradle.api.plugins.JavaPlugin;
import org.gradle.api.plugins.JavaPluginConvention;
import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.InputDirectory;
import org.gradle.api.tasks.Optional;
import org.gradle.api.tasks.SourceSet;
import org.gradle.api.tasks.SourceSetContainer;
import org.gradle.api.tasks.TaskAction;
import org.gradle.api.tasks.compile.JavaCompile;
import org.gradle.api.tasks.options.Option;

import io.quarkus.bootstrap.model.AppArtifact;
Expand Down Expand Up @@ -140,6 +143,7 @@ public void startDev() {
"Does the project have any source files?");
}
DevModeContext context = new DevModeContext();
context.setSourceEncoding(getSourceEncoding());
try {
List<String> args = new ArrayList<>();
args.add(JavaBinFinder.findBin());
Expand Down Expand Up @@ -331,6 +335,14 @@ public void run() {
}
}

private String getSourceEncoding() {
Task javaCompile = getProject().getTasks().getByName(JavaPlugin.COMPILE_JAVA_TASK_NAME);
if (javaCompile != null) {
return ((JavaCompile) javaCompile).getOptions().getEncoding();
}
return null;
}

private void copyOutputToConsole(InputStream is) {
try (InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8);
BufferedReader br = new BufferedReader(isr)) {
Expand Down
9 changes: 9 additions & 0 deletions devtools/maven/src/main/java/io/quarkus/maven/DevMojo.java
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,7 @@ public void execute() throws MojoFailureException, MojoExecutionException {
devModeContext.getSystemProperties().put(e.getKey().toString(), (String) e.getValue());
}
devModeContext.getBuildSystemProperties().putAll((Map) project.getProperties());
devModeContext.setSourceEncoding(getSourceEncoding());

final AppModel appModel;
try {
Expand Down Expand Up @@ -368,6 +369,14 @@ public void run() {
}
}

private String getSourceEncoding() {
Object sourceEncodingProperty = project.getProperties().get("project.build.sourceEncoding");
if (sourceEncodingProperty != null) {
return (String) sourceEncodingProperty;
}
return null;
}

private void addProject(DevModeContext devModeContext, LocalProject localProject) {

String projectDirectory = null;
Expand Down

0 comments on commit 35a7876

Please sign in to comment.