Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Provide new remediation metadata #18

Merged
merged 4 commits into from
Apr 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,15 @@ To deserialize a CodeTF file using these objects, simply deserialize with Jackso

## Gradle
```kotlin
implementation("io.codemodder:codetf-java:3.2.1")
implementation("io.codemodder:codetf-java:4.0.0")
```

## Maven
```xml
<dependency>
<groupId>io.codemodder</groupId>
<artifactId>codetf-java</artifactId>
<version>3.2.1</version>
<version>4.0.0</version>
</dependency>
```

Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

<groupId>io.codemodder</groupId>
<artifactId>codetf-java</artifactId>
<version>3.2.1</version>
<version>4.0.0</version>


<name>codetf-java</name>
Expand Down
13 changes: 11 additions & 2 deletions src/main/java/io/codemodder/codetf/CodeTFChange.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,17 @@ public final class CodeTFChange {

private final List<CodeTFParameter> parameters;

private final List<FixedFinding> fixedFindings;

@JsonCreator
public CodeTFChange(
@JsonProperty("lineNumber") final int lineNumber,
@JsonProperty("properties") final Map<String, String> properties,
@JsonProperty("description") final String description,
@JsonProperty("diffSide") final CodeTFDiffSide diffSide,
@JsonProperty("packageActions") final List<CodeTFPackageAction> packageActions,
@JsonProperty("parameters") final List<CodeTFParameter> parameters) {
@JsonProperty("parameters") final List<CodeTFParameter> parameters,
@JsonProperty("findings") final List<FixedFinding> fixedFindings) {

if (lineNumber < 1) {
throw new IllegalArgumentException("line number must be positive");
Expand All @@ -40,6 +43,7 @@ public CodeTFChange(
this.description = CodeTFValidator.optionalString(description);
this.diffSide = Objects.requireNonNull(diffSide);
this.parameters = parameters;
this.fixedFindings = CodeTFValidator.toImmutableCopyOrEmptyOnNull(fixedFindings);
}

public Map<String, String> getProperties() {
Expand All @@ -66,6 +70,10 @@ public List<CodeTFParameter> getParameters() {
return parameters;
}

public List<FixedFinding> getFixedFindings() {
return fixedFindings;
}

@Override
public boolean equals(final Object o) {
if (this == o) return true;
Expand Down Expand Up @@ -140,7 +148,8 @@ public CodeTFChange build() {
updatedDescription != null ? updatedDescription : originalChange.getDescription(),
originalChange.getDiffSide(),
originalChange.getPackageActions(),
originalChange.getParameters());
originalChange.getParameters(),
originalChange.getFixedFindings());
}
}
}
12 changes: 10 additions & 2 deletions src/main/java/io/codemodder/codetf/CodeTFResult.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ public final class CodeTFResult {
private final List<CodeTFReference> references;
private final Map<String, String> properties;
private final List<CodeTFChangesetEntry> changeset;
private final List<UnfixedFinding> unfixedFindings;

@JsonCreator
public CodeTFResult(
Expand All @@ -25,7 +26,8 @@ public CodeTFResult(
@JsonProperty(value = "failedFiles", index = 5) final Set<String> failedFiles,
@JsonProperty(value = "references", index = 6) final List<CodeTFReference> references,
@JsonProperty(value = "properties", index = 7) final Map<String, String> properties,
@JsonProperty(value = "changeset", index = 8) final List<CodeTFChangesetEntry> changeset) {
@JsonProperty(value = "changeset", index = 8) final List<CodeTFChangesetEntry> changeset,
@JsonProperty(value = "unfixed", index = 9) final List<UnfixedFinding> unfixedFindings) {
this.codemod = CodeTFValidator.requireNonBlank(codemod);
this.summary = CodeTFValidator.requireNonBlank(summary);
this.description = CodeTFValidator.requireNonBlank(description);
Expand All @@ -34,6 +36,7 @@ public CodeTFResult(
this.references = CodeTFValidator.toImmutableCopyOrEmptyOnNull(references);
this.properties = CodeTFValidator.toImmutableCopyOrEmptyOnNull(properties);
this.changeset = Objects.requireNonNull(changeset);
this.unfixedFindings = CodeTFValidator.toImmutableCopyOrEmptyOnNull(unfixedFindings);
}

public String getCodemod() {
Expand Down Expand Up @@ -68,6 +71,10 @@ public List<CodeTFChangesetEntry> getChangeset() {
return changeset;
}

public List<UnfixedFinding> getUnfixedFindings() {
return unfixedFindings;
}

/** Create a new CodeTFResult builder based on an existing instance. */
public static Builder basedOn(final CodeTFResult result) {
return new Builder(result);
Expand Down Expand Up @@ -117,7 +124,8 @@ public CodeTFResult build() {
originalResult.getFailedFiles(),
updatedReferences != null ? updatedReferences : originalResult.getReferences(),
originalResult.getProperties(),
originalResult.getChangeset());
originalResult.getChangeset(),
originalResult.unfixedFindings);
}
}
}
24 changes: 11 additions & 13 deletions src/main/java/io/codemodder/codetf/DetectionTool.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,34 +2,32 @@

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;
import java.util.Objects;

/** Metadata about the external tool that generated results consumed by this codemod */
public final class DetectionTool {

private final String name;
private final DetectorRule rule;
private final List<DetectorFinding> findings;

@JsonCreator
public DetectionTool(
@JsonProperty(value = "name", index = 1) String name,
@JsonProperty(value = "rule", index = 2) DetectorRule rule,
@JsonProperty(value = "findings", index = 3) List<DetectorFinding> findings) {
public DetectionTool(@JsonProperty(value = "name", index = 1) String name) {
this.name = Objects.requireNonNull(name);
this.rule = Objects.requireNonNull(rule);
this.findings = CodeTFValidator.toImmutableCopyOrEmptyOnNull(findings);
}

public String getName() {
return name;
}

public DetectorRule getRule() {
return rule;
@Override
public boolean equals(final Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
DetectionTool that = (DetectionTool) o;
return Objects.equals(name, that.name);
}

public List<DetectorFinding> getFindings() {
return findings;
@Override
public int hashCode() {
return Objects.hash(name);
}
}
38 changes: 0 additions & 38 deletions src/main/java/io/codemodder/codetf/DetectorFinding.java

This file was deleted.

16 changes: 16 additions & 0 deletions src/main/java/io/codemodder/codetf/DetectorRule.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

/** Describes the "rule" section of a detection tool. */
public final class DetectorRule {

private final String id;
private final String name;
private final String url;
Expand All @@ -31,4 +32,19 @@ public String getName() {
public String getUrl() {
return url;
}

@Override
public boolean equals(final Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
DetectorRule rule = (DetectorRule) o;
return Objects.equals(id, rule.id)
&& Objects.equals(name, rule.name)
&& Objects.equals(url, rule.url);
}

@Override
public int hashCode() {
return Objects.hash(id, name, url);
}
}
41 changes: 41 additions & 0 deletions src/main/java/io/codemodder/codetf/FixedFinding.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package io.codemodder.codetf;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.Objects;

/** Describes a fixed finding. */
public final class FixedFinding {

private final String id;
private final DetectorRule rule;

@JsonCreator
public FixedFinding(
@JsonProperty(value = "id", index = 1) final String id,
@JsonProperty(value = "rule", index = 2) final DetectorRule rule) {
this.id = CodeTFValidator.requireNonBlank(id);
this.rule = Objects.requireNonNull(rule);
}

public String getId() {
return id;
}

public DetectorRule getRule() {
return rule;
}

@Override
public boolean equals(final Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
FixedFinding that = (FixedFinding) o;
return Objects.equals(id, that.id) && Objects.equals(rule, that.rule);
}

@Override
public int hashCode() {
return Objects.hash(id, rule);
}
}
66 changes: 66 additions & 0 deletions src/main/java/io/codemodder/codetf/UnfixedFinding.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package io.codemodder.codetf;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.Objects;

/** Describes an unfixed finding. */
public final class UnfixedFinding {

private final String id;
private final DetectorRule rule;
private final String path;
private final Integer line;
private final String reason;

@JsonCreator
public UnfixedFinding(
@JsonProperty(value = "id", index = 1) final String id,
@JsonProperty(value = "rule", index = 2) final DetectorRule rule,
@JsonProperty(value = "path", index = 3) final String path,
@JsonProperty(value = "line", index = 4) final Integer line,
@JsonProperty(value = "reason", index = 5) final String reason) {
this.id = CodeTFValidator.requireNonBlank(id);
this.rule = Objects.requireNonNull(rule);
this.path = CodeTFValidator.requireNonBlank(path);
this.line = line;
this.reason = CodeTFValidator.requireNonBlank(reason);
}

public String getId() {
return id;
}

public String getPath() {
return path;
}

public String getReason() {
return reason;
}

public DetectorRule getRule() {
return rule;
}

public Integer getLine() {
return line;
}

@Override
public boolean equals(final Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
UnfixedFinding that = (UnfixedFinding) o;
return Objects.equals(id, that.id)
&& Objects.equals(rule, that.rule)
&& Objects.equals(path, that.path)
&& Objects.equals(line, that.line)
&& Objects.equals(reason, that.reason);
}

@Override
public int hashCode() {
return Objects.hash(id, rule, path, line, reason);
}
}
Loading
Loading