2828import org .openrewrite .java .tree .JavaType ;
2929import org .openrewrite .java .tree .TypeTree ;
3030
31- import java .util .ArrayList ;
3231import java .util .List ;
3332
33+ import static java .util .Objects .requireNonNull ;
34+
3435public class UseVarForGenericMethodInvocations extends Recipe {
3536 @ Override
3637 public String getDisplayName () {
@@ -103,8 +104,7 @@ private J.MethodInvocation makeNestedGenericsExplicit(J.MethodInvocation mi, J.V
103104 return mi ;
104105 }
105106
106- J .ParameterizedType leftType = (J .ParameterizedType ) vd .getTypeExpression ();
107- List <Expression > leftTypeParams = leftType .getTypeParameters ();
107+ List <Expression > leftTypeParams = ((J .ParameterizedType ) vd .getTypeExpression ()).getTypeParameters ();
108108 if (leftTypeParams == null || leftTypeParams .isEmpty ()) {
109109 return mi ;
110110 }
@@ -113,41 +113,29 @@ private J.MethodInvocation makeNestedGenericsExplicit(J.MethodInvocation mi, J.V
113113 return mi .withArguments (ListUtils .map (mi .getArguments (), arg -> {
114114 if (arg instanceof J .NewClass ) {
115115 J .NewClass newClass = (J .NewClass ) arg ;
116- List <JavaType > rightTypeParams = extractJavaTypes (newClass );
117116 // Check if using diamond operator (rightTypeParams is empty)
118- if (rightTypeParams != null && rightTypeParams . isEmpty () && newClass .getClazz () instanceof J . ParameterizedType ) {
117+ if (! hasTypeParams ( newClass .getClazz ()) ) {
119118 // Copy type parameters from left side to right side
120119 J .ParameterizedType rightType = (J .ParameterizedType ) newClass .getClazz ();
121- return newClass .withClazz (
122- rightType .withTypeParameters (leftTypeParams )
123- );
120+ return newClass .withClazz (requireNonNull (rightType ).withTypeParameters (leftTypeParams ));
124121 }
125122 }
126123 return arg ;
127124 }));
128125 }
129126
130- /**
131- * Extract JavaTypes from a NewClass expression's type parameters.
132- *
133- * @return null if not a parameterized type, or an empty list for diamond operator.
134- */
135- private @ Nullable List <JavaType > extractJavaTypes (J .NewClass newClass ) {
136- TypeTree clazz = newClass .getClazz ();
127+ private static boolean hasTypeParams (@ Nullable TypeTree clazz ) {
137128 if (clazz instanceof J .ParameterizedType ) {
138129 List <Expression > typeParameters = ((J .ParameterizedType ) clazz ).getTypeParameters ();
139- List <JavaType > params = new ArrayList <>();
140130 if (typeParameters != null ) {
141131 for (Expression curType : typeParameters ) {
142- JavaType type = curType .getType ();
143- if (type != null ) {
144- params .add (type );
132+ if (curType .getType () != null ) {
133+ return true ;
145134 }
146135 }
147136 }
148- return params ;
149137 }
150- return null ;
138+ return false ;
151139 }
152140
153141 private static boolean allArgumentsEmpty (J .MethodInvocation invocation ) {
0 commit comments