Skip to content

Commit

Permalink
make encoding property compatible with configuration cache (#54)
Browse files Browse the repository at this point in the history
Signed-off-by: Andreas Schmid <service@aaschmid.de>
  • Loading branch information
aaschmid committed Mar 27, 2021
1 parent 19e6628 commit 2816c63
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 25 deletions.
28 changes: 19 additions & 9 deletions src/main/java/de/aaschmid/gradle/plugins/cpd/Cpd.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,16 @@
import org.gradle.api.file.FileCollection;
import org.gradle.api.file.FileTree;
import org.gradle.api.model.ObjectFactory;
import org.gradle.api.provider.ProviderFactory;
import org.gradle.api.reporting.Reporting;
import org.gradle.api.reporting.SingleFileReport;
import org.gradle.api.tasks.CacheableTask;
import org.gradle.api.tasks.Classpath;
import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.InputFiles;
import org.gradle.api.tasks.Internal;
import org.gradle.api.tasks.Nested;
import org.gradle.api.tasks.Optional;
import org.gradle.api.tasks.PathSensitive;
import org.gradle.api.tasks.PathSensitivity;
import org.gradle.api.tasks.SkipWhenEmpty;
Expand Down Expand Up @@ -70,6 +73,7 @@
@CacheableTask
public class Cpd extends SourceTask implements VerificationTask, Reporting<CpdReports> {

private final ProviderFactory providerFactory;
private final WorkerExecutor workerExecutor;
private final CpdReports reports;

Expand All @@ -87,7 +91,8 @@ public class Cpd extends SourceTask implements VerificationTask, Reporting<CpdRe
private String skipBlocksPattern;

@Inject
public Cpd(ObjectFactory objectFactory, WorkerExecutor workerExecutor) {
public Cpd(ObjectFactory objectFactory, ProviderFactory providerFactory, WorkerExecutor workerExecutor) {
this.providerFactory = providerFactory;
this.reports = objectFactory.newInstance(CpdReportsImpl.class, this);
this.workerExecutor = workerExecutor;
}
Expand All @@ -102,9 +107,6 @@ public void run() {
}

private void checkTaskState() {
if (getEncoding() == null) {
throw new InvalidUserDataException(String.format("Task '%s' requires 'encoding' but was: %s.", getName(), getEncoding()));
}
if (getMinimumTokenCount() <= 0) {
throw new InvalidUserDataException(String.format("Task '%s' requires 'minimumTokenCount' to be greater than zero.", getName()));
}
Expand All @@ -115,7 +117,7 @@ private void checkTaskState() {

private Action<CpdWorkParameters> getCpdWorkParameters() {
return parameters -> {
parameters.getEncoding().set(getEncoding());
parameters.getEncoding().set(getEncodingOrFallback());
parameters.getIgnoreAnnotations().set(getIgnoreAnnotations());
parameters.getIgnoreFailures().set(getIgnoreFailures());
parameters.getIgnoreIdentifiers().set(getIgnoreIdentifiers());
Expand Down Expand Up @@ -163,13 +165,20 @@ private List<Report> createReportParameters(CpdReports reports) {
}

// VisibleForTesting
String getXmlRendererEncoding(CpdXmlFileReport report) {
String encoding = report.getEncoding();
@Internal
String getEncodingOrFallback() {
String encoding = getEncoding();
if (encoding == null) {
encoding = getEncoding();
encoding = providerFactory.systemProperty("file.encoding").get();
}
return encoding;
}

// VisibleForTesting
String getXmlRendererEncoding(CpdXmlFileReport report) {
String encoding = report.getEncoding();
if (encoding == null) {
encoding = System.getProperty("file.encoding");
return getEncodingOrFallback();
}
return encoding;
}
Expand Down Expand Up @@ -209,6 +218,7 @@ public CpdReports reports(Action<? super CpdReports> action) {
* @return the charset encoding
*/
@Input
@Optional
public String getEncoding() {
return encoding;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
*/
public class CpdExtension extends CodeQualityExtension {

private String encoding = System.getProperty("file.encoding");
private String encoding;
private boolean ignoreAnnotations = false;
private boolean ignoreIdentifiers = false;
private boolean ignoreLiterals = false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ void CpdPlugin_shouldApplyRequiredReportingBasePlugin(Project project) {

@Test
void CpdPlugin_shouldCreateAndConfigureCpdExtension(CpdExtension cpd) {
assertThat(cpd.getEncoding()).isEqualTo(System.getProperty("file.encoding"));
assertThat(cpd.getEncoding()).isNull();
assertThat(cpd.isIgnoreAnnotations()).isFalse();
assertThat(cpd.isIgnoreIdentifiers()).isFalse();
assertThat(cpd.isIgnoreFailures()).isFalse();
Expand Down Expand Up @@ -80,7 +80,8 @@ void CpdPlugin_shouldCreateAndConfigureCpdCheckTaskWithCorrectDefaultValues(Proj
assertThat(t.getDescription()).isEqualTo("Run CPD analysis for all sources");
assertThat(t.getGroup()).isNull();

assertThat(t.getEncoding()).isEqualTo(System.getProperty("file.encoding"));
assertThat(t.getEncoding()).isNull();
assertThat(t.getEncodingOrFallback()).isEqualTo(System.getProperty("file.encoding"));
assertThat(t.getIgnoreAnnotations()).isFalse();
assertThat(t.getIgnoreFailures()).isFalse();
assertThat(t.getIgnoreIdentifiers()).isFalse();
Expand Down Expand Up @@ -116,7 +117,8 @@ void CpdPlugin_shouldConfigureProperDefaultsForAdditionalCpdTask(Project project
assertThat(t.getDescription()).isNull();
assertThat(t.getGroup()).isNull();

assertThat(t.getEncoding()).isEqualTo(System.getProperty("file.encoding"));
assertThat(t.getEncoding()).isNull();
assertThat(t.getEncodingOrFallback()).isEqualTo(System.getProperty("file.encoding"));
assertThat(t.getIgnoreAnnotations()).isFalse();
assertThat(t.getIgnoreFailures()).isFalse();
assertThat(t.getIgnoreIdentifiers()).isFalse();
Expand Down
12 changes: 0 additions & 12 deletions src/test/java/de/aaschmid/gradle/plugins/cpd/CpdTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -195,18 +195,6 @@ void Cpd_shouldHaveCorrectTaskOutputs(Project project, TaskProvider<Cpd> cpdChec
);
}

@Test
void Cpd_shouldThrowInvalidUserDataExceptionIfEncodingIsNull(TaskProvider<Cpd> cpdCheck) {
// Given:
cpdCheck.configure(task -> task.setEncoding(null));
Cpd actual = cpdCheck.get();

// Expect:
assertThatThrownBy(() -> actual.getActions().forEach(a -> a.execute(actual)))
.isInstanceOf(InvalidUserDataException.class)
.hasMessage("Task 'cpdCheck' requires 'encoding' but was: null.");
}

@Test
void Cpd_shouldThrowInvalidUserDataExceptionIfMinimumTokenCountIsMinusOne(TaskProvider<Cpd> cpdCheck) {
// Given:
Expand Down

0 comments on commit 2816c63

Please sign in to comment.