Skip to content

Commit 5e6d2ff

Browse files
committed
dont throw an exception if maven deps cant be found
1 parent 3b5d693 commit 5e6d2ff

File tree

3 files changed

+49
-6
lines changed

3 files changed

+49
-6
lines changed

framework/codemodder-base/src/main/java/io/codemodder/DefaultCodemodExecutor.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import java.util.*;
1616
import java.util.concurrent.*;
1717
import java.util.stream.Collectors;
18+
import java.util.stream.Stream;
1819
import org.jetbrains.annotations.NotNull;
1920
import org.jetbrains.annotations.VisibleForTesting;
2021
import org.slf4j.Logger;
@@ -184,7 +185,14 @@ public CodeTFResult execute(final List<Path> filePaths) {
184185
Collection<DependencyGAV> deps =
185186
projectProviders.stream()
186187
.flatMap(
187-
provider -> provider.getAllDependencies(projectDir, filePath).stream())
188+
provider -> {
189+
try {
190+
return provider.getAllDependencies(projectDir, filePath).stream();
191+
} catch (Exception e) {
192+
log.error("Problem getting dependencies for file {}", filePath, e);
193+
return Stream.empty();
194+
}
195+
})
188196
.toList();
189197

190198
CodemodInvocationContext context =

framework/codemodder-base/src/test/java/io/codemodder/DefaultCodemodExecutorTest.java

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ public DependencyUpdateResult updateDependencies(
146146
}
147147

148148
@Override
149-
public Collection<DependencyGAV> getAllDependencies(Path projectDir, Path file) {
149+
public Collection<DependencyGAV> getAllDependencies(final Path projectDir, final Path file) {
150150
return List.of();
151151
}
152152
}
@@ -158,7 +158,41 @@ void it_generates_single_codemod_codetf() {
158158

159159
// should have just 1 entry because we only scanned javaFile1
160160
List<CodeTFChangesetEntry> changeset = result.getChangeset();
161-
assertThat(changeset.size()).isEqualTo(1);
161+
assertThat(changeset).hasSize(1);
162+
assertThat(changeset.get(0)).satisfies(DefaultCodemodExecutorTest::isJavaFile1ChangedCorrectly);
163+
}
164+
165+
@Test
166+
void it_works_despite_fail_prefetching_all_deps() {
167+
FakeDepsProvider depsProvider =
168+
new FakeDepsProvider() {
169+
@Override
170+
public Collection<DependencyGAV> getAllDependencies(
171+
final Path projectDir, final Path file) {
172+
throw new RuntimeException("failed to prefetch deps");
173+
}
174+
};
175+
176+
executor =
177+
new DefaultCodemodExecutor(
178+
repoDir,
179+
includesEverything,
180+
beforeAfterCodemod,
181+
List.of(depsProvider),
182+
List.of(),
183+
fileCache,
184+
javaParserFacade,
185+
encodingDetector,
186+
-1,
187+
-1,
188+
-1);
189+
190+
CodeTFResult result = executor.execute(List.of(javaFile1));
191+
assertThat(result).satisfies(DefaultCodemodExecutorTest::hasBeforeAfterCodemodMetadata);
192+
193+
// should have just 1 entry because we only scanned javaFile1
194+
List<CodeTFChangesetEntry> changeset = result.getChangeset();
195+
assertThat(changeset).hasSize(1);
162196
assertThat(changeset.get(0)).satisfies(DefaultCodemodExecutorTest::isJavaFile1ChangedCorrectly);
163197
}
164198

@@ -241,7 +275,7 @@ public CodeTFChange onChangeCreated(
241275

242276
// confirm the change was updated by the provider
243277
List<CodeTFChangesetEntry> changeset = result.getChangeset();
244-
assertThat(changeset.size()).isEqualTo(1);
278+
assertThat(changeset).hasSize(1);
245279
CodeTFChangesetEntry entry = changeset.get(0);
246280
assertThat(entry.getChanges().get(0).getDescription()).isEqualTo("hi " + javaFile1.toString());
247281
assertThat(entry.getChanges().get(0).getProperties()).hasSize(1);
@@ -256,7 +290,7 @@ void it_generates_all_files_codemod_codetf() {
256290

257291
// should have 2 entries for both javaFile1 and javaFile3
258292
List<CodeTFChangesetEntry> changeset = result.getChangeset();
259-
assertThat(changeset.size()).isEqualTo(2);
293+
assertThat(changeset).hasSize(2);
260294
assertThat(changeset.get(0)).satisfies(DefaultCodemodExecutorTest::isJavaFile1ChangedCorrectly);
261295
assertThat(changeset.get(1)).satisfies(DefaultCodemodExecutorTest::isJavaFile3ChangedCorrectly);
262296
}

plugins/codemodder-plugin-maven/src/main/java/io/codemodder/plugins/maven/MavenProvider.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,9 @@ public Collection<DependencyGAV> getAllDependencies(final Path projectDir, final
143143

144144
return pomOperator.getAllFoundDependencies();
145145
} catch (Exception e) {
146-
throw new DependencyUpdateException("Failure when retrieving dependencies", e);
146+
LOG.warn("Not all Maven dependencies could be found", e);
147147
}
148+
return Collections.emptyList();
148149
}
149150

150151
private static final Logger LOG = LoggerFactory.getLogger(MavenProvider.class);

0 commit comments

Comments
 (0)