From f4a9193de2e533431b61e68c2faed4d33e64608e Mon Sep 17 00:00:00 2001 From: Peter Leschev Date: Tue, 27 Feb 2018 15:31:48 +1100 Subject: [PATCH 1/3] Recreates #4 --- .../CleanDeadDeclarationsVisitorTest.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/test/java/org/walkmod/deadcodecleaner/visitors/CleanDeadDeclarationsVisitorTest.java b/src/test/java/org/walkmod/deadcodecleaner/visitors/CleanDeadDeclarationsVisitorTest.java index 93defd6..d920719 100644 --- a/src/test/java/org/walkmod/deadcodecleaner/visitors/CleanDeadDeclarationsVisitorTest.java +++ b/src/test/java/org/walkmod/deadcodecleaner/visitors/CleanDeadDeclarationsVisitorTest.java @@ -487,4 +487,38 @@ public void testRemoveConditions() throws Exception { Assert.assertFalse(cu.getImports().isEmpty()); } + + @Test + public void testDontRemoveImportsUsedByLambdas() throws Exception { + String externalClass = "package blah;" + + "import java.util.function.Supplier;" + + "public class MyClassThatNeedsToBeImported {" + + "public static Supplier memoize(Supplier delegate) {" + + "return null;" + //Implementation not relevant to testcase + "}" + + "}"; + String code = "package example;" + + "import blah.MyClassThatNeedsToBeImported;" + + "import java.util.function.Supplier;" + + "class MyClass {" + + "Supplier o;" + + "public MyClass() {" + + " this.o = MyClassThatNeedsToBeImported.memoize(this::load)::get;" + + + "load();" + + + "}" + + "private Object load() {" + + "return null;"+ //Implementation not relevant to testcase + "}}"; + + CompilationUnit cu = compile(code, externalClass); + String codeBefore = cu.toString(); + + CleanDeadDeclarationsVisitor visitor = new CleanDeadDeclarationsVisitor(); + cu.accept(visitor, null); + String codeAfter = cu.toString(); + + Assert.assertEquals(codeBefore, codeAfter); + } } From cf972db9cff300649260e5e685a2892d73a1d16c Mon Sep 17 00:00:00 2001 From: Peter Leschev Date: Mon, 5 Mar 2018 12:04:38 +1100 Subject: [PATCH 2/3] Additional testcase for imports used by lambdas being removed by mistake --- .../CleanDeadDeclarationsVisitorTest.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/test/java/org/walkmod/deadcodecleaner/visitors/CleanDeadDeclarationsVisitorTest.java b/src/test/java/org/walkmod/deadcodecleaner/visitors/CleanDeadDeclarationsVisitorTest.java index d920719..244788a 100644 --- a/src/test/java/org/walkmod/deadcodecleaner/visitors/CleanDeadDeclarationsVisitorTest.java +++ b/src/test/java/org/walkmod/deadcodecleaner/visitors/CleanDeadDeclarationsVisitorTest.java @@ -521,4 +521,35 @@ public void testDontRemoveImportsUsedByLambdas() throws Exception { Assert.assertEquals(codeBefore, codeAfter); } + + @Test + public void testDontRemoveImportsUsedByLambdasExample2() throws Exception { + String code = "package example;" + +"import java.util.Collection;" + +"import java.util.Objects;" + +"import static java.util.stream.Collectors.toSet;" + +" public class ExampleGroupPickerSearcher {" + +" public ExampleGroupPickerSearcher() {" + +" final Resolver nameResolver = rawValues ->" + +" rawValues.stream()" + +" .map(this::convertToIndexValue)" + +" .filter(Objects::nonNull)" + +" .collect(toSet());" + +" }" + +" public String convertToIndexValue(final Object rawValue) {" + +" return \"\";" + +" }" + +" public interface Resolver {" + +" Collection resolveNames(Collection rawValues);" + +" }" + +" }"; + CompilationUnit cu = compile(code); + String codeBefore = cu.toString(); + + CleanDeadDeclarationsVisitor visitor = new CleanDeadDeclarationsVisitor(); + cu.accept(visitor, null); + String codeAfter = cu.toString(); + + Assert.assertEquals(codeBefore, codeAfter); + } } From f689df1e06605fd933b4f8169eedaaf4f85f7933 Mon Sep 17 00:00:00 2001 From: Peter Leschev Date: Mon, 5 Mar 2018 15:35:15 +1100 Subject: [PATCH 3/3] Another failing scenario with lambdas --- .../CleanDeadDeclarationsVisitorTest.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/test/java/org/walkmod/deadcodecleaner/visitors/CleanDeadDeclarationsVisitorTest.java b/src/test/java/org/walkmod/deadcodecleaner/visitors/CleanDeadDeclarationsVisitorTest.java index 244788a..687b7d9 100644 --- a/src/test/java/org/walkmod/deadcodecleaner/visitors/CleanDeadDeclarationsVisitorTest.java +++ b/src/test/java/org/walkmod/deadcodecleaner/visitors/CleanDeadDeclarationsVisitorTest.java @@ -552,4 +552,33 @@ public void testDontRemoveImportsUsedByLambdasExample2() throws Exception { Assert.assertEquals(codeBefore, codeAfter); } + + @Test + public void testDontRemoveImportsUsedByLambdasExample3() throws Exception { + String code = "package example;" + +"import java.util.function.Supplier;" + + "public class ExampleDefaultTemplateManager {" + + "public ExampleDefaultTemplateManager() {" + + "ContextFreeReference holderRef = new ContextFreeReference<>(this::initTemplates);" + + "}" + + "private Object initTemplates() {" + + "return null;" + + "}" + + "public class ContextFreeReference implements Supplier {" + + "public ContextFreeReference(Supplier supplier) {" + + "}" + + "public T get() {" + + "return null;" + + "}" + + "}" + + "}"; + CompilationUnit cu = compile(code); + String codeBefore = cu.toString(); + + CleanDeadDeclarationsVisitor visitor = new CleanDeadDeclarationsVisitor(); + cu.accept(visitor, null); + String codeAfter = cu.toString(); + + Assert.assertEquals(codeBefore, codeAfter); + } }