diff --git a/rules/S7185/java/metadata.json b/rules/S7185/java/metadata.json new file mode 100644 index 00000000000..15f02153bbb --- /dev/null +++ b/rules/S7185/java/metadata.json @@ -0,0 +1,24 @@ +{ + "title": "@EventListener methods should have one parameter at most", + "type": "BUG", + "status": "ready", + "remediation": { + "func": "Constant\/Issue", + "constantCost": "5min" + }, + "tags": [ + "spring" + ], + "defaultSeverity": "Major", + "ruleSpecification": "RSPEC-7185", + "sqKey": "S7185", + "scope": "All", + "defaultQualityProfiles": ["Sonar way"], + "quickfix": "unknown", + "code": { + "impacts": { + "RELIABILITY": "HIGH" + }, + "attribute": "LOGICAL" + } +} diff --git a/rules/S7185/java/rule.adoc b/rules/S7185/java/rule.adoc new file mode 100644 index 00000000000..7f613e94bf3 --- /dev/null +++ b/rules/S7185/java/rule.adoc @@ -0,0 +1,38 @@ +== Why is this an issue? + +Spring provides the `@EventListener` annotation as a simpler alternative to implementing the `ApplicationListener` interface for handling events. The `@EventListener` annotation registers a method as an event handler. +This allows to skip the implementation of the `ApplicationListener` interface, making it easier to handle events. + +The `@EventListener` annotation can only be used on methods that have at most one parameter, which should be the specific event that we want to handle. +To listen to several types of events, use the `classes` argument of the `@EventListener` annotation. + +This rule raises an issue on all methods annotated with `@EventListener` that have more than one parameter. + +== How to fix it + +=== Code examples + +==== Noncompliant code example + +[source,java,diff-id=1,diff-type=noncompliant] +---- +@EventListener +void handleEvent(CustomerEvent customerEvent, ExceptionalEvent exceptionalEvent) { // Non compliant, this will cause a runtime error + //... some event handling +} +---- + +==== Compliant solution + +[source,java,diff-id=1,diff-type=compliant] +---- +@EventListener(classes = {CustomerEvent.class, ExceptionalEvent.class}) +void handleEvent(ApplicationEvent event) { // Only one parameter, of the super type `ApplicationEvent` + //... some event handling +} +---- + +== Resources +=== Documentation + +Spring API - https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/event/EventListener.html[@EventListener] diff --git a/rules/S7185/metadata.json b/rules/S7185/metadata.json new file mode 100644 index 00000000000..2c63c085104 --- /dev/null +++ b/rules/S7185/metadata.json @@ -0,0 +1,2 @@ +{ +}