Skip to content

Commit 199cf08

Browse files
authored
fix: Detect combination of Dependency Injection and Functional Interface (#29)
1 parent f471fad commit 199cf08

6 files changed

Lines changed: 30 additions & 5 deletions

File tree

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ spotbugs {
2525

2626
dependencies {
2727
spotbugs("com.github.spotbugs:spotbugs:4.7.3")
28-
spotbugsPlugins("software.amazon.lambda.snapstart:aws-lambda-snapstart-java-rules:0.2.0")
28+
spotbugsPlugins("software.amazon.lambda.snapstart:aws-lambda-snapstart-java-rules:0.2.1")
2929
}
3030
```
3131

@@ -52,7 +52,7 @@ Example:
5252
<plugin>
5353
<groupId>software.amazon.lambda.snapstart</groupId>
5454
<artifactId>aws-lambda-snapstart-java-rules</artifactId>
55-
<version>0.2.0</version>
55+
<version>0.2.1</version>
5656
</plugin>
5757
</plugins>
5858
</configuration>

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
<groupId>software.amazon.lambda.snapstart</groupId>
66
<artifactId>aws-lambda-snapstart-java-rules</artifactId>
7-
<version>0.2.0</version>
7+
<version>0.2.1</version>
88
<name>${project.groupId}:${project.artifactId}</name>
99
<description>AWS Lambda SnapStart SpotBugs Rules</description>
1010
<url>https://github.com/aws/aws-lambda-snapstart-java-rules</url>

src/main/java/software/amazon/lambda/snapstart/ByteCodeIntrospector.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ private static Set<String> setOf(String ... strings) {
5151
};
5252

5353
boolean isLambdaHandler(XClass xClass) {
54-
return implementsLambdaInterface(xClass) ||
54+
return implementsLambdaInterface(xClass) ||
55+
implementsFunctionalInterface(xClass) ||
5556
hasLambdaHandlerMethod(xClass) ||
5657
(hasHandlerInClassName(xClass) && hasHandleRequestMethod(xClass));
5758
}

src/main/java/software/amazon/lambda/snapstart/LambdaHandlerInitedWithRandomValue.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public void visit(JavaClass obj) {
6363
@Override
6464
public boolean shouldVisitCode(Code code) {
6565
boolean shouldVisit = false;
66-
if (isLambdaHandlerClass || implementsFunctionalInterface || isLambdaHandlerField || isLambdaHandlerParentClass) {
66+
if (isLambdaHandlerClass || isLambdaHandlerField || isLambdaHandlerParentClass) {
6767
inStaticInitializer = getMethodName().equals(Const.STATIC_INITIALIZER_NAME);
6868
inInitializer = getMethodName().equals(Const.CONSTRUCTOR_NAME);
6969
database = Global.getAnalysisCache().getDatabase(ReturnValueRandomnessPropertyDatabase.class);

src/test/java/software/amazon/lambda/snapstart/LambdaHandlerInitedWithRandomValueTest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,13 @@ public void testLambdaWithDependencyInjection() {
177177
assertThat(bugCollection, containsExactly(1, snapStartBugMatcher().inClass("MyDependency").atField("random").atLine(6).build()));
178178
}
179179

180+
// Test a Lambda function using Dependency Injection while implementing a Functional Interface
181+
@Test
182+
public void testLambdaWithDependencyInjectionAndFunctionalInterface() {
183+
BugCollection bugCollection = findBugsInClasses("DependencyInjectionFunctionalInterface", "MyDependency");
184+
assertThat(bugCollection, containsExactly(1, snapStartBugMatcher().inClass("MyDependency").atField("random").atLine(6).build()));
185+
}
186+
180187
// TODO fix all tests using this and remove this method eventually!
181188
private static void toBeFixed(Executable e) {
182189
assertThrows(AssertionError.class, e);
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package software.amazon.lambda.snapstart.lambdaexamples;
2+
3+
import java.util.function.Function;
4+
5+
public class DependencyInjectionFunctionalInterface implements Function<String, String> {
6+
7+
private final MyDependency myDependency;
8+
9+
public DependencyInjectionFunctionalInterface(MyDependency myDependency) {
10+
this.myDependency = myDependency;
11+
}
12+
13+
@Override
14+
public String apply(String s) {
15+
return myDependency.toString();
16+
}
17+
}

0 commit comments

Comments
 (0)