Skip to content

Commit 02bd5c5

Browse files
committed
appscan basics
1 parent a2b0865 commit 02bd5c5

File tree

6 files changed

+88
-14
lines changed

6 files changed

+88
-14
lines changed

core-codemods/src/main/java/io/codemodder/codemods/SQLParameterizerCodemod.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,28 +8,26 @@
88
import java.util.Optional;
99
import java.util.stream.Collectors;
1010

11-
/** Parameterizes SQL statements in the java JDBC api. */
11+
/** Parameterizes SQL statements in the JDBC API. */
1212
@Codemod(
1313
id = "pixee:java/sql-parameterizer",
1414
importance = Importance.HIGH,
1515
reviewGuidance = ReviewGuidance.MERGE_AFTER_REVIEW)
1616
public final class SQLParameterizerCodemod extends JavaParserChanger {
1717

18-
private Optional<CodemodChange> onNodeFound(
19-
final CodemodInvocationContext context,
20-
final MethodCallExpr methodCallExpr,
21-
final CompilationUnit cu) {
18+
private Optional<CodemodChange> onNodeFound(final MethodCallExpr methodCallExpr) {
2219
if (new SQLParameterizer(methodCallExpr).checkAndFix()) {
2320
return Optional.of(CodemodChange.from(methodCallExpr.getBegin().get().line));
2421
} else {
2522
return Optional.empty();
2623
}
2724
}
2825

26+
@Override
2927
public List<CodemodChange> visit(
3028
final CodemodInvocationContext context, final CompilationUnit cu) {
3129
return cu.findAll(MethodCallExpr.class).stream()
32-
.flatMap(mce -> onNodeFound(context, mce, cu).stream())
30+
.flatMap(mce -> onNodeFound(mce).stream())
3331
.collect(Collectors.toList());
3432
}
3533
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package io.codemodder.providers.sarif.appscan;
2+
3+
import com.contrastsecurity.sarif.Region;
4+
import com.contrastsecurity.sarif.Result;
5+
import com.contrastsecurity.sarif.SarifSchema210;
6+
import io.codemodder.RuleSarif;
7+
import java.nio.file.Path;
8+
import java.util.HashMap;
9+
import java.util.List;
10+
import java.util.Map;
11+
import java.util.Objects;
12+
13+
/** A {@link RuleSarif} for AppScan results. */
14+
final class AppScanRuleSarif implements RuleSarif {
15+
16+
private final SarifSchema210 sarif;
17+
private final String ruleId;
18+
private final Map<Path, List<Result>> resultsCache;
19+
private final Path repositoryRoot;
20+
21+
public AppScanRuleSarif(
22+
final String ruleId, final SarifSchema210 sarif, final Path repositoryRoot) {
23+
this.sarif = Objects.requireNonNull(sarif);
24+
this.ruleId = Objects.requireNonNull(ruleId);
25+
this.repositoryRoot = repositoryRoot;
26+
this.resultsCache = new HashMap<>();
27+
}
28+
29+
@Override
30+
public List<Region> getRegionsFromResultsByRule(final Path path) {
31+
return List.of();
32+
}
33+
34+
@Override
35+
public List<Result> getResultsByPath(final Path path) {
36+
return List.of();
37+
}
38+
39+
@Override
40+
public SarifSchema210 rawDocument() {
41+
return sarif;
42+
}
43+
44+
@Override
45+
public String getRule() {
46+
return ruleId;
47+
}
48+
49+
@Override
50+
public String getDriver() {
51+
return toolName;
52+
}
53+
54+
static final String toolName = "HCL AppScan Static Analyzer";
55+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package io.codemodder.providers.sarif.appscan;
2+
3+
import com.contrastsecurity.sarif.SarifSchema210;
4+
import io.codemodder.RuleSarif;
5+
import io.codemodder.RuleSarifFactory;
6+
import java.nio.file.Path;
7+
import java.util.Optional;
8+
9+
/** A factory for building {@link AppScanRuleSarif}s. */
10+
public final class AppScanRuleSarifFactory implements RuleSarifFactory {
11+
12+
@Override
13+
public Optional<RuleSarif> build(
14+
String toolName, String rule, SarifSchema210 sarif, Path repositoryRoot) {
15+
if (AppScanRuleSarif.toolName.equals(toolName)) {
16+
return Optional.of(new AppScanRuleSarif(rule, sarif, repositoryRoot));
17+
}
18+
return Optional.empty();
19+
}
20+
}

plugins/codemodder-plugin-codeql/src/main/java/io/codemodder/providers/sarif/codeql/CodeQLModule.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ protected void configure() {
2929
// We can safely ignore this case for now.
3030
final Map<String, RuleSarif> map =
3131
allCodeqlRuleSarifs.stream()
32-
.collect(Collectors.toUnmodifiableMap(rs -> rs.getRule(), rs -> rs));
32+
.collect(Collectors.toUnmodifiableMap(RuleSarif::getRule, rs -> rs));
3333

3434
for (final Class<? extends CodeChanger> codemodType : codemodTypes) {
3535
final Constructor<?>[] constructors = codemodType.getDeclaredConstructors();
@@ -42,11 +42,11 @@ protected void configure() {
4242
.filter(Objects::nonNull)
4343
.findFirst();
4444

45-
if (annotation.isPresent()) {
46-
bind(RuleSarif.class)
47-
.annotatedWith(annotation.get())
48-
.toInstance(map.getOrDefault(annotation.get().ruleId(), RuleSarif.EMPTY));
49-
}
45+
annotation.ifPresent(
46+
providedCodeQLScan ->
47+
bind(RuleSarif.class)
48+
.annotatedWith(providedCodeQLScan)
49+
.toInstance(map.getOrDefault(providedCodeQLScan.ruleId(), RuleSarif.EMPTY)));
5050
}
5151
}
5252
}

plugins/codemodder-plugin-codeql/src/main/java/io/codemodder/providers/sarif/codeql/CodeQLRuleSarif.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ public final class CodeQLRuleSarif implements RuleSarif {
2424
private final Map<Path, List<Result>> resultsCache;
2525
private final Path repositoryRoot;
2626

27-
public CodeQLRuleSarif(final String ruleId, final SarifSchema210 sarif, Path repositoryRoot) {
27+
public CodeQLRuleSarif(
28+
final String ruleId, final SarifSchema210 sarif, final Path repositoryRoot) {
2829
this.sarif = Objects.requireNonNull(sarif);
2930
this.ruleId = Objects.requireNonNull(ruleId);
3031
this.repositoryRoot = repositoryRoot;

plugins/codemodder-plugin-codeql/src/main/java/io/codemodder/providers/sarif/codeql/CodeQLRuleSarifFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import java.util.Optional;
88

99
/** A factory for building {@link CodeQLRuleSarif}s. */
10-
public class CodeQLRuleSarifFactory implements RuleSarifFactory {
10+
public final class CodeQLRuleSarifFactory implements RuleSarifFactory {
1111

1212
@Override
1313
public Optional<RuleSarif> build(

0 commit comments

Comments
 (0)