SONARJAVA-5294 Create rule S7185: @eventlistener methods should have one parameter (#4618)
This commit is contained in:
parent
ec2258b717
commit
4c6681ee65
24
rules/S7185/java/metadata.json
Normal file
24
rules/S7185/java/metadata.json
Normal file
@ -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"
|
||||
}
|
||||
}
|
38
rules/S7185/java/rule.adoc
Normal file
38
rules/S7185/java/rule.adoc
Normal file
@ -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]
|
2
rules/S7185/metadata.json
Normal file
2
rules/S7185/metadata.json
Normal file
@ -0,0 +1,2 @@
|
||||
{
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user