@@ -317,14 +317,22 @@ private static boolean processStatement(SwitchStatement stat, Statement root) {
317317 // Check for non null
318318 if (basicHead != null && basicHead .size () >= 1 && realSelector instanceof VarExprent var && !nullCase ) {
319319 Exprent last = basicHead .get (basicHead .size () - 1 );
320- if (last instanceof InvocationExprent inv && inv .isStatic () && inv .getClassname ().equals ("java/util/Objects" ) && inv .getName ().equals ("requireNonNull" ) && inv .getStringDescriptor ().equals ("(Ljava/lang/Object;)Ljava/lang/Object;" ) && var .equals (inv .getLstParameters ().get (0 ))) {
321- basicHead .remove (basicHead .size () - 1 );
322- // Check for other assignment
323- if (basicHead .size () >= 1 && var .isStack () && !nullCase ) {
324- last = basicHead .get (basicHead .size () - 1 );
325- if (last instanceof AssignmentExprent assignment && assignment .getLeft () instanceof VarExprent assigned && var .equals (assigned )) {
326- if (!var .isVarReferenced (root , assigned )) {
327- realSelector = assignment .getRight ();
320+ AssignmentExprent stackAssignment = null ;
321+ if (last instanceof InvocationExprent inv && inv .isStatic () && inv .getClassname ().equals ("java/util/Objects" ) && inv .getName ().equals ("requireNonNull" ) && inv .getStringDescriptor ().equals ("(Ljava/lang/Object;)Ljava/lang/Object;" )) {
322+ VarExprent requireNonNullStackVar = null ;
323+ if (inv .getLstParameters ().get (0 ) instanceof VarExprent varExprent ) {
324+ requireNonNullStackVar = varExprent ;
325+ }
326+ if (basicHead .size () >= 2 && var .isStack () && !nullCase && basicHead .get (basicHead .size () - 2 ) instanceof AssignmentExprent assignment && assignment .getLeft () instanceof VarExprent assigned && var .equals (assigned ) && !var .isVarReferenced (root , assigned , requireNonNullStackVar )) {
327+ stackAssignment = assignment ;
328+ }
329+ if (var .equals (inv .getLstParameters ().get (0 )) || (inv .getLstParameters ().get (0 ).getExprentUse () & Exprent .MULTIPLE_USES ) != 0 && inv .getLstParameters ().get (0 ).equals (stackAssignment .getRight ())) {
330+ basicHead .remove (basicHead .size () - 1 );
331+ // Check for other assignment
332+ if (basicHead .size () >= 1 && var .isStack () && !nullCase ) {
333+ last = basicHead .get (basicHead .size () - 1 );
334+ if (stackAssignment != null ) {
335+ realSelector = stackAssignment .getRight ();
328336 basicHead .remove (basicHead .size () - 1 );
329337 }
330338 }
0 commit comments