Skip to content

Commit 201477d

Browse files
JohannisKgithub-actions[bot]timtebeek
authored
Inflater deflater autoclosable (#843)
* initial implementation * implementation * Update src/main/java/org/openrewrite/java/migrate/util/MigrateInflaterDeflaterToAutoCloseable.java Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * Update src/main/java/org/openrewrite/java/migrate/util/MigrateInflaterDeflaterToAutoCloseable.java Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * fixed imports * fixed imports diff --git c/src/main/java/org/openrewrite/java/migrate/util/MigrateInflaterDeflaterToAutoCloseable.java i/src/main/java/org/openrewrite/java/migrate/util/MigrateInflaterDeflaterToAutoCloseable.java index 57cada2..28a2ad0 100644 --- c/src/main/java/org/openrewrite/java/migrate/util/MigrateInflaterDeflaterToAutoCloseable.java +++ i/src/main/java/org/openrewrite/java/migrate/util/MigrateInflaterDeflaterToAutoCloseable.java @@ -17,11 +17,7 @@ package org.openrewrite.java.migrate.util; import lombok.EqualsAndHashCode; import lombok.Value; -import org.openrewrite.ExecutionContext; -import org.openrewrite.Preconditions; import org.openrewrite.Recipe; -import org.openrewrite.TreeVisitor; -import org.openrewrite.java.JavaIsoVisitor; import org.openrewrite.java.MethodMatcher; import org.openrewrite.java.search.UsesJavaVersion; import org.openrewrite.java.search.UsesType; * Use a declarative recipe instead * Rename declarative recipe as we only call close for now --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Tim te Beek <tim@moderne.io>
1 parent 7e53332 commit 201477d

File tree

2 files changed

+355
-0
lines changed

2 files changed

+355
-0
lines changed

src/main/resources/META-INF/rewrite/java-version-25.yml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,30 @@ recipeList:
2828
- org.openrewrite.java.migrate.UpgradeToJava21
2929
- org.openrewrite.java.migrate.UpgradeBuildToJava25
3030
- org.openrewrite.java.migrate.lang.MigrateProcessWaitForDuration
31+
- org.openrewrite.java.migrate.util.MigrateInflaterDeflaterToClose
3132
- org.openrewrite.java.migrate.AccessController
3233
- org.openrewrite.java.migrate.RemoveSecurityPolicy
3334
- org.openrewrite.java.migrate.RemoveSecurityManager
3435
- org.openrewrite.java.migrate.SystemGetSecurityManagerToNull
3536

3637
---
3738
type: specs.openrewrite.org/v1beta/recipe
39+
name: org.openrewrite.java.migrate.util.MigrateInflaterDeflaterToClose
40+
displayName: Replace `Inflater` and `Deflater` `end()` calls with `close()`
41+
description: >-
42+
Replace `end()` method calls with `close()` method calls for `Inflater` and `Deflater` classes in Java 25+, as they now implement AutoCloseable.
43+
preconditions:
44+
- org.openrewrite.java.search.HasJavaVersion:
45+
version: "[25,)"
46+
recipeList:
47+
- org.openrewrite.java.ChangeMethodName:
48+
methodPattern: java.util.zip.Deflater end()
49+
newMethodName: close
50+
- org.openrewrite.java.ChangeMethodName:
51+
methodPattern: java.util.zip.Inflater end()
52+
newMethodName: close
53+
---
54+
type: specs.openrewrite.org/v1beta/recipe
3855
name: org.openrewrite.java.migrate.UpgradeBuildToJava25
3956
displayName: Upgrade build to Java 25
4057
description: Updates build files to use Java 25 as the target/source.
Lines changed: 338 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,338 @@
1+
/*
2+
* Copyright 2025 the original author or authors.
3+
* <p>
4+
* Licensed under the Moderne Source Available License (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
* <p>
8+
* https://docs.moderne.io/licensing/moderne-source-available-license
9+
* <p>
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package org.openrewrite.java.migrate.util;
17+
18+
import org.junit.jupiter.api.Test;
19+
import org.openrewrite.DocumentExample;
20+
import org.openrewrite.java.JavaParser;
21+
import org.openrewrite.test.RecipeSpec;
22+
import org.openrewrite.test.RewriteTest;
23+
24+
import static org.openrewrite.java.Assertions.java;
25+
import static org.openrewrite.java.Assertions.javaVersion;
26+
27+
class MigrateInflaterDeflaterToAutoCloseableTest implements RewriteTest {
28+
29+
@Override
30+
public void defaults(RecipeSpec spec) {
31+
spec
32+
.recipeFromResources("org.openrewrite.java.migrate.util.MigrateInflaterDeflaterToClose")
33+
.parser(JavaParser.fromJavaVersion())
34+
.allSources(s -> s.markers(javaVersion(25)));
35+
}
36+
37+
@DocumentExample
38+
@Test
39+
void migrateInflaterEndInTryFinally() {
40+
rewriteRun(
41+
//language=java
42+
java(
43+
"""
44+
import java.util.zip.Inflater;
45+
46+
class Test {
47+
public void test(byte[] arg) {
48+
Inflater inflater = new Inflater();
49+
try {
50+
inflater.inflate(arg);
51+
} finally {
52+
inflater.end();
53+
}
54+
}
55+
}
56+
""",
57+
"""
58+
import java.util.zip.Inflater;
59+
60+
class Test {
61+
public void test(byte[] arg) {
62+
Inflater inflater = new Inflater();
63+
try {
64+
inflater.inflate(arg);
65+
} finally {
66+
inflater.close();
67+
}
68+
}
69+
}
70+
"""
71+
)
72+
);
73+
}
74+
75+
@Test
76+
void migrateDeflaterEndInTryFinally() {
77+
rewriteRun(
78+
//language=java
79+
java(
80+
"""
81+
import java.util.zip.Deflater;
82+
83+
class Test {
84+
public void test(byte[] arg) {
85+
Deflater deflater = new Deflater();
86+
try {
87+
deflater.setInput(arg);
88+
deflater.finish();
89+
} finally {
90+
deflater.end();
91+
}
92+
}
93+
}
94+
""",
95+
"""
96+
import java.util.zip.Deflater;
97+
98+
class Test {
99+
public void test(byte[] arg) {
100+
Deflater deflater = new Deflater();
101+
try {
102+
deflater.setInput(arg);
103+
deflater.finish();
104+
} finally {
105+
deflater.close();
106+
}
107+
}
108+
}
109+
"""
110+
)
111+
);
112+
}
113+
114+
@Test
115+
void migrateInflaterEndDirectCall() {
116+
rewriteRun(
117+
//language=java
118+
java(
119+
"""
120+
import java.nio.ByteBuffer;
121+
import java.util.zip.DataFormatException;
122+
import java.util.zip.Inflater;
123+
124+
class Test {
125+
public void test(ByteBuffer arg) throws DataFormatException {
126+
Inflater inflater = new Inflater();
127+
inflater.inflate(arg);
128+
inflater.end();
129+
}
130+
}
131+
""",
132+
"""
133+
import java.nio.ByteBuffer;
134+
import java.util.zip.DataFormatException;
135+
import java.util.zip.Inflater;
136+
137+
class Test {
138+
public void test(ByteBuffer arg) throws DataFormatException {
139+
Inflater inflater = new Inflater();
140+
inflater.inflate(arg);
141+
inflater.close();
142+
}
143+
}
144+
"""
145+
)
146+
);
147+
}
148+
149+
@Test
150+
void migrateDeflaterEndDirectCall() {
151+
rewriteRun(
152+
//language=java
153+
java(
154+
"""
155+
import java.nio.ByteBuffer;
156+
import java.util.zip.DataFormatException;
157+
import java.util.zip.Deflater;
158+
159+
class Test {
160+
public void test(ByteBuffer arg) throws DataFormatException {
161+
Deflater deflater = new Deflater();
162+
deflater.deflate(arg);
163+
deflater.end();
164+
}
165+
}
166+
""",
167+
"""
168+
import java.nio.ByteBuffer;
169+
import java.util.zip.DataFormatException;
170+
import java.util.zip.Deflater;
171+
172+
class Test {
173+
public void test(ByteBuffer arg) throws DataFormatException {
174+
Deflater deflater = new Deflater();
175+
deflater.deflate(arg);
176+
deflater.close();
177+
}
178+
}
179+
"""
180+
)
181+
);
182+
}
183+
184+
@Test
185+
void migrateBothInflaterAndDeflaterEnd() {
186+
rewriteRun(
187+
//language=java
188+
java(
189+
"""
190+
import java.nio.ByteBuffer;
191+
import java.util.zip.DataFormatException;
192+
import java.util.zip.Deflater;
193+
import java.util.zip.Inflater;
194+
195+
class Test {
196+
public void test(ByteBuffer arg) {
197+
Deflater deflater = new Deflater();
198+
Inflater inflater = new Inflater();
199+
try {
200+
deflater.deflate(arg);
201+
inflater.inflate(arg);
202+
} catch (DataFormatException e) {
203+
throw new RuntimeException(e);
204+
} finally {
205+
deflater.end();
206+
inflater.end();
207+
}
208+
}
209+
}
210+
""",
211+
"""
212+
import java.nio.ByteBuffer;
213+
import java.util.zip.DataFormatException;
214+
import java.util.zip.Deflater;
215+
import java.util.zip.Inflater;
216+
217+
class Test {
218+
public void test(ByteBuffer arg) {
219+
Deflater deflater = new Deflater();
220+
Inflater inflater = new Inflater();
221+
try {
222+
deflater.deflate(arg);
223+
inflater.inflate(arg);
224+
} catch (DataFormatException e) {
225+
throw new RuntimeException(e);
226+
} finally {
227+
deflater.close();
228+
inflater.close();
229+
}
230+
}
231+
}
232+
"""
233+
)
234+
);
235+
}
236+
237+
@Test
238+
void migrateCustomInflaterEndCall() {
239+
rewriteRun(
240+
//language=java
241+
java(
242+
"""
243+
import java.util.zip.Inflater;
244+
245+
class CustomInflater extends Inflater {
246+
void customMethod() {
247+
}
248+
}
249+
250+
class Test {
251+
public void test() {
252+
CustomInflater inflater = new CustomInflater();
253+
inflater.customMethod();
254+
inflater.end();
255+
}
256+
}
257+
""",
258+
"""
259+
import java.util.zip.Inflater;
260+
261+
class CustomInflater extends Inflater {
262+
void customMethod() {
263+
}
264+
}
265+
266+
class Test {
267+
public void test() {
268+
CustomInflater inflater = new CustomInflater();
269+
inflater.customMethod();
270+
inflater.close();
271+
}
272+
}
273+
"""
274+
)
275+
);
276+
}
277+
278+
@Test
279+
void migrateCustomDeflaterEndCall() {
280+
rewriteRun(
281+
//language=java
282+
java(
283+
"""
284+
import java.util.zip.Deflater;
285+
286+
class CustomDeflater extends Deflater {
287+
void customMethod() {
288+
}
289+
}
290+
291+
class Test {
292+
public void test() {
293+
CustomDeflater deflater = new CustomDeflater();
294+
deflater.customMethod();
295+
deflater.end();
296+
}
297+
}
298+
""",
299+
"""
300+
import java.util.zip.Deflater;
301+
302+
class CustomDeflater extends Deflater {
303+
void customMethod() {
304+
}
305+
}
306+
307+
class Test {
308+
public void test() {
309+
CustomDeflater deflater = new CustomDeflater();
310+
deflater.customMethod();
311+
deflater.close();
312+
}
313+
}
314+
"""
315+
)
316+
);
317+
}
318+
319+
@Test
320+
void noChangeOnJava24() {
321+
rewriteRun(
322+
spec -> spec.allSources(s -> s.markers(javaVersion(24))),
323+
//language=java
324+
java(
325+
"""
326+
import java.util.zip.Inflater;
327+
328+
class Test {
329+
void test() {
330+
Inflater inflater = new Inflater();
331+
inflater.end();
332+
}
333+
}
334+
"""
335+
)
336+
);
337+
}
338+
}

0 commit comments

Comments
 (0)