2020import org .openrewrite .java .JavaIsoVisitor ;
2121import org .openrewrite .java .ReplaceStringLiteralWithConstant ;
2222import org .openrewrite .java .tree .J ;
23- import org .openrewrite .maven .search .DependencyInsight ;
2423
2524import java .util .Arrays ;
2625import java .util .List ;
2726import java .util .concurrent .atomic .AtomicBoolean ;
2827
28+ import static org .openrewrite .java .spring .http .ReplaceStringLiteralsWithHttpHeadersConstants .declaresSpringWebDependency ;
29+
2930public class ReplaceStringLiteralsWithMediaTypeConstants extends ScanningRecipe <AtomicBoolean > {
3031
31- private static final List <String > HEADERS = Arrays .asList (
32- "ACCEPT" ,
33- "ACCEPT_CHARSET" ,
34- "ACCEPT_ENCODING" ,
35- "ACCEPT_LANGUAGE" ,
36- "ACCEPT_PATCH" ,
37- "ACCEPT_RANGES" ,
38- "ACCESS_CONTROL_ALLOW_CREDENTIALS" ,
39- "ACCESS_CONTROL_ALLOW_HEADERS" ,
40- "ACCESS_CONTROL_ALLOW_METHODS" ,
41- "ACCESS_CONTROL_ALLOW_ORIGIN" ,
42- "ACCESS_CONTROL_EXPOSE_HEADERS" ,
43- "ACCESS_CONTROL_MAX_AGE" ,
44- "ACCESS_CONTROL_REQUEST_HEADERS" ,
45- "ACCESS_CONTROL_REQUEST_METHOD" ,
46- "AGE" ,
47- "ALLOW" ,
48- "AUTHORIZATION" ,
49- "CACHE_CONTROL" ,
50- "CONNECTION" ,
51- "CONTENT_ENCODING" ,
52- "CONTENT_DISPOSITION" ,
53- "CONTENT_LANGUAGE" ,
54- "CONTENT_LENGTH" ,
55- "CONTENT_LOCATION" ,
56- "CONTENT_RANGE" ,
57- "CONTENT_TYPE" ,
58- "COOKIE" ,
59- "DATE" ,
60- "ETAG" ,
61- "EXPECT" ,
62- "EXPIRES" ,
63- "FROM" ,
64- "HOST" ,
65- "IF_MATCH" ,
66- "IF_MODIFIED_SINCE" ,
67- "IF_NONE_MATCH" ,
68- "IF_RANGE" ,
69- "IF_UNMODIFIED_SINCE" ,
70- "LAST_MODIFIED" ,
71- "LINK" ,
72- "LOCATION" ,
73- "MAX_FORWARDS" ,
74- "ORIGIN" ,
75- "PRAGMA" ,
76- "PROXY_AUTHENTICATE" ,
77- "PROXY_AUTHORIZATION" ,
78- "RANGE" ,
79- "REFERER" ,
80- "RETRY_AFTER" ,
81- "SERVER" ,
82- "SET_COOKIE" ,
83- "SET_COOKIE2" ,
84- "TE" ,
85- "TRAILER" ,
86- "TRANSFER_ENCODING" ,
87- "UPGRADE" ,
88- "USER_AGENT" ,
89- "VARY" ,
90- "VIA" ,
91- "WARNING" ,
92- "WWW_AUTHENTICATE" );
32+ private static final List <String > MEDIA_TYPES = Arrays .asList (
33+ "ALL_VALUE" ,
34+ "APPLICATION_ATOM_XML_VALUE" ,
35+ "APPLICATION_CBOR_VALUE" ,
36+ "APPLICATION_FORM_URLENCODED_VALUE" ,
37+ "APPLICATION_GRAPHQL_VALUE" ,
38+ "APPLICATION_GRAPHQL_RESPONSE_VALUE" ,
39+ "APPLICATION_JSON_VALUE" ,
40+ "APPLICATION_JSON_UTF8_VALUE" ,
41+ "APPLICATION_OCTET_STREAM_VALUE" ,
42+ "APPLICATION_PDF_VALUE" ,
43+ "APPLICATION_PROBLEM_JSON_VALUE" ,
44+ "APPLICATION_PROBLEM_JSON_UTF8_VALUE" ,
45+ "APPLICATION_PROBLEM_XML_VALUE" ,
46+ "APPLICATION_PROTOBUF_VALUE" ,
47+ "APPLICATION_RSS_XML_VALUE" ,
48+ "APPLICATION_NDJSON_VALUE" ,
49+ "APPLICATION_STREAM_JSON_VALUE" ,
50+ "APPLICATION_XHTML_XML_VALUE" ,
51+ "APPLICATION_XML_VALUE" ,
52+ "IMAGE_GIF_VALUE" ,
53+ "IMAGE_JPEG_VALUE" ,
54+ "IMAGE_PNG_VALUE" ,
55+ "MULTIPART_FORM_DATA_VALUE" ,
56+ "MULTIPART_MIXED_VALUE" ,
57+ "MULTIPART_RELATED_VALUE" ,
58+ "TEXT_EVENT_STREAM_VALUE" ,
59+ "TEXT_HTML_VALUE" ,
60+ "TEXT_MARKDOWN_VALUE" ,
61+ "TEXT_PLAIN_VALUE" ,
62+ "TEXT_XML_VALUE" );
9363
9464 @ Override
9565 public String getDisplayName () {
96- return "Replace String literals with `HttpHeaders ` constants" ;
66+ return "Replace String literals with `MediaType ` constants" ;
9767 }
9868
9969 @ Override
10070 public String getDescription () {
101- return "Replace String literals with `org.springframework.http.HttpHeaders ` constants." ;
71+ return "Replace String literals with `org.springframework.http.MediaType ` constants." ;
10272 }
10373
10474 @ Override
@@ -125,20 +95,15 @@ public TreeVisitor<?, ExecutionContext> getVisitor(AtomicBoolean acc) {
12595 @ Override
12696 public J preVisit (J tree , ExecutionContext ctx ) {
12797 stopAfterPreVisit ();
128- for (String header : HEADERS ) {
129- doAfterVisit (new ReplaceStringLiteralWithConstant ("org.springframework.http.HttpHeaders." + header ).getVisitor ());
98+ for (String mediaType : MEDIA_TYPES ) {
99+ try {
100+ doAfterVisit (new ReplaceStringLiteralWithConstant ("org.springframework.http.MediaType." + mediaType ).getVisitor ());
101+ } catch (IllegalArgumentException ignore ) {
102+ // this is typically a NoSuchFieldException when an older version of Spring is used
103+ }
130104 }
131105 return tree ;
132106 }
133107 });
134108 }
135-
136- static boolean declaresSpringWebDependency (SourceFile sourceFile , ExecutionContext ctx ) {
137- TreeVisitor <?, ExecutionContext > visitor = new DependencyInsight ("org.springframework" , "spring-web" , "compile" , null , null ).getVisitor ();
138- if (visitor .isAcceptable (sourceFile , ctx ) && visitor .visit (sourceFile , ctx ) != sourceFile ) {
139- return true ;
140- }
141- visitor = new org .openrewrite .gradle .search .DependencyInsight ("org.springframework" , "spring-web" , "compileClasspath" , null ).getVisitor ();
142- return visitor .isAcceptable (sourceFile , ctx ) && visitor .visit (sourceFile , ctx ) != sourceFile ;
143- }
144109}
0 commit comments