1313
1414package io .openliberty .tools .intellij .lsp4jakarta .lsp4ij .cdi ;
1515
16- import java .util .ArrayList ;
17- import java .util .List ;
18- import java .util .Set ;
19- import java .util .TreeSet ;
16+ import java .util .*;
2017import java .util .stream .Stream ;
2118
2219import com .intellij .psi .*;
3027
3128import static io .openliberty .tools .intellij .lsp4jakarta .lsp4ij .JDTUtils .getSimpleName ;
3229import static io .openliberty .tools .intellij .lsp4jakarta .lsp4ij .cdi .ManagedBeanConstants .*;
30+ import static org .eclipse .lsp4jakarta .jdt .internal .cdi .Constants .INVALID_INITIALIZER_PARAMS_FQ ;
3331
3432public class ManagedBeanDiagnosticsCollector extends AbstractDiagnosticsCollector {
3533
@@ -234,7 +232,7 @@ else if (INJECT_FQ_NAME.equals(annotation))
234232 if (isManagedBean ) {
235233 boolean isClassGeneric = type .getTypeParameters ().length != 0 ;
236234 boolean isDependent = managedBeanAnnotations .stream ()
237- .anyMatch (annotation -> DEPENDENT_FQ_NAME .equals (annotation ));
235+ .anyMatch (annotation -> DEPENDENT_FQ_NAME .equals (annotation ));
238236
239237 if (isClassGeneric && !isDependent ) {
240238 diagnostics .add (createDiagnostic (type , unit , Messages .getMessage ("ManagedBeanGenericType" ),
@@ -313,6 +311,8 @@ else if (INJECT_FQ_NAME.equals(annotation))
313311
314312 private void invalidParamsCheck (PsiJavaFile unit , List <Diagnostic > diagnostics , PsiClass type , String target ,
315313 String diagnosticCode ) {
314+ Set <String > paramScopesSet ;
315+ boolean mutuallyExclusive = false ;
316316 for (PsiMethod method : type .getMethods ()) {
317317 PsiAnnotation targetAnnotation = null ;
318318
@@ -335,20 +335,29 @@ private void invalidParamsCheck(PsiJavaFile unit, List<Diagnostic> diagnostics,
335335 for (String annotation : paramScopes ) {
336336 invalidAnnotations .add ("@" + getSimpleName (annotation ));
337337 }
338+ paramScopesSet = new LinkedHashSet <>(paramScopes );
339+ if (paramScopesSet .size () == INVALID_INITIALIZER_PARAMS_FQ .length && paramScopesSet .equals (Set .of (INVALID_INITIALIZER_PARAMS_FQ ))) {
340+ mutuallyExclusive = true ;
341+ diagnosticCode = DIAGNOSTIC_INJECT_MULTIPLE_METHOD_PARAM ;
342+ }
338343 }
339344
340345 if (!invalidAnnotations .isEmpty ()) {
341346 String label = PRODUCES_FQ_NAME .equals (target ) ?
342347 createInvalidProducesLabel (invalidAnnotations ) :
343- createInvalidInjectLabel (invalidAnnotations );
348+ createInvalidInjectLabel (invalidAnnotations , mutuallyExclusive );
344349 diagnostics .add (createDiagnostic (method , unit , label , diagnosticCode , null , DiagnosticSeverity .Error ));
345350 }
346351
347352 }
348353 }
349354
350- private String createInvalidInjectLabel (Set <String > invalidAnnotations ) {
351- return Messages .getMessage ("ManagedBeanInvalidInject" , String .join (", " , invalidAnnotations )); // assuming comma delimited list is ok
355+ private String createInvalidInjectLabel (Set <String > invalidAnnotations , boolean mutuallyExclusive ) {
356+ if (mutuallyExclusive ) {
357+ return Messages .getMessage ("ManagedBeanInvalidInject" , String .join (", " , invalidAnnotations )); // assuming comma delimited list is ok
358+ } else {
359+ return Messages .getMessage ("ManagedBeanInvalidInject" , String .join (", " , invalidAnnotations )); // assuming comma delimited list is ok
360+ }
352361 }
353362
354363 private String createInvalidProducesLabel (Set <String > invalidAnnotations ) {
0 commit comments