Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support mapping of generic thrown exception types #4813

Merged
merged 4 commits into from
Dec 25, 2024

Conversation

jkschneider
Copy link
Member

What's changed?

Widened the type of JavaType.Method#thrownExceptions to JavaType to support the mapping of generic exceptions.

A method that throws a combination of a generic and non-generic exception looks like this:

interface Test {
   <T extends FileNotFoundException> void throwsGenericException() throws T, InterruptedException;
}

Its JVMS 4.3.4 signature is:

<T:Ljava/io/FileNotFoundException;>()V^TT;^Ljava/lang/InterruptedException;

What's your motivation?

Preparing the way for compile verification as a post-recipe task.

Anything in particular you'd like reviewers to focus on?

Should be LST deserialization compatible, but this is an ABI change and we should release workers and CLI ASAP. Old serialized LSTs will not have mapped generic exceptions correctly. They instead previously mapped the class bound (in the example above java.io.FileNotFoundException.

Checklist

  • I've added unit tests to cover both positive and negative cases

github-actions[bot]

This comment was marked as off-topic.

github-actions[bot]

This comment was marked as off-topic.

@jkschneider jkschneider merged commit 15740e4 into main Dec 25, 2024
2 checks passed
@jkschneider jkschneider deleted the generic-thrown-exception-types branch December 25, 2024 11:24
amishra-u pushed a commit to amishra-u/rewrite that referenced this pull request Dec 28, 2024
knutwannheden added a commit to openrewrite/rewrite-csharp that referenced this pull request Dec 30, 2024
knutwannheden added a commit to openrewrite/rewrite-csharp that referenced this pull request Dec 30, 2024
* Align `JavaType` with recent OpenRewrite changes

See:
 - openrewrite/rewrite#4813
 - openrewrite/rewrite#4814

* Add missing change
timtebeek added a commit that referenced this pull request Dec 31, 2024
* Add lombok support for java-11

* Handle erroneous nodes in open rewrite (#4412)

* Handle erroneous nodes in a tree

* Add visitErroneous to all java parser visitors

* Override the visitVariable to handle erroneous identifier names set by JavacParser

* retain name and suffix for erroneous varDecl

* override the visitVariable to handle error identifiers in all java parser visitors

* Remove sysout

* Update rewrite-java-test/src/test/java/org/openrewrite/java/JavaParserTest.java

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Update rewrite-java-test/src/test/java/org/openrewrite/java/JavaParserTest.java

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* handle errors in method params, variable declarations, fix tests

* Add missing license headers

* fix compilation error

* fix compilation error in Java8ParserVisitor

* Apply code suggestions from bot

* fix cases for statementDelim

* fix block statement template generator to handle adding semicolon

* fix ChangeStaticFieldToMethod recipe

* Record compiler errors from erroneous LST nodes

* Adjustments for comments

* Java 17 parser adjustment alos in 8, 11 and 21

* Add `FindCompileErrorsTest` & move away from deprecated `print()`

---------

Co-authored-by: Jonathan Schnéider <[email protected]>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Tim te Beek <[email protected]>
Co-authored-by: aboyko <[email protected]>

* Make Groovy Parser correctly handle nested parenthesis (#4801)

* WIP

* Format

* Format

* Move grabbing of whitespace and resetting cursor to where it is actually required

* Extra check is not required

* Use toString

* Add `emptyListLiteralWithParentheses` test

* Add `insideFourParenthesesAndEnters` test

* Move list tests all to ListTest

* Add `emptyMapLiteralWithParentheses`

* Review feedback and fix new testcases

* Add `attributeWithParentheses`

* Improve AttributeTest

* Improve AttributeTest

* Improve AttributeTest

* Improve AttributeTest

* Improve AttributeTest

* Review fix new testcases

* Revert edit to testcase

* Add and fix testcase with newline

* Add JavaDoc and move logic regarding whitespace and resetting cursor

---------

Co-authored-by: lingenj <[email protected]>

* suppress javax.json (#4804)

* suppress javax.json

* Update suppressions.xml

* Refactor SpringReference (#4805)

* Separating and clearer naming

* Add license header

* Review feedback

* refactor: Update Gradle wrapper (#4808)

Use this link to re-run the recipe: https://app.moderne.io/recipes/org.openrewrite.gradle.UpdateGradleWrapper?organizationId=T3BlblJld3JpdGU%3D#defaults=W3sibmFtZSI6ImFkZElmTWlzc2luZyIsInZhbHVlIjoiRmFsc2UifV0=

Co-authored-by: Moderne <[email protected]>

* Add recipe to remove Gradle Enterprise and Develocity (#4809)

* Add recipe to remove Gradle Enterprise and Develocity

* Remove left over java plugin

* Add a UsesType precondition to ReplaceConstant

* Allow file scheme in `RemoteArchive` to simplify testing (#4791)

* Allow file scheme in `RemoteArchive` to simplify testing

While it might look a bit controversial, the file scheme can also point to a remote (for instance a mounted network share) file. By allowing the `file://` scheme we can use `RemoteArchive` for those files.

As a useful side effect, this makes testing RemoteArchive handling a lot easier.

* fix test

* Update rewrite-core/src/test/java/org/openrewrite/remote/RemoteArchiveTest.java

Co-authored-by: Sam Snyder <[email protected]>

---------

Co-authored-by: Sam Snyder <[email protected]>

* Try alternative way of determining parenthesis level for `BinaryExpression` when AST doesn't provide `_INSIDE_PARENTHESES_LEVEL` flag (#4807)

* Add a `isClassAvailable` method to the ReflectionUtils (#4810)

* Add a `isClassAvailable` method to the ReflectionUtils

* Add a `isClassAvailable` method to the ReflectionUtils

* Add a `isClassAvailable` method to the ReflectionUtils

* Update rewrite.yml to enforce CompareEnumsWithEqualityOperator

* Correctly map generic return and parameter types in `JavaReflectionTypeMapping` (#4812)

* Polish formatting

* Add more scenarios to JavaTypeGoat for simply typed fields and methods that return exceptions.

* Support mapping of generic thrown exception types (#4813)

* refactor: Enum values should be compared with "==" (#4811)

Use this link to re-run the recipe: https://app.moderne.io/recipes/org.openrewrite.staticanalysis.CompareEnumsWithEqualityOperator?organizationId=T3BlblJld3JpdGU%3D

Co-authored-by: Moderne <[email protected]>

* Keep the names of generic type variables defined by methods. (#4814)

* Make the same performance improvement to parameter names allocations that we previously made to Java 17/21 in #3345.

* Fix Java reflection mapping of generic typed fields. (#4815)

* Revert parenthesis changes (#4818)

* Revert "Try alternative way of determining parenthesis level for `BinaryExpression` when AST doesn't provide `_INSIDE_PARENTHESES_LEVEL` flag (#4807)"

This reverts commit e59e48b.

* Revert "Make Groovy Parser correctly handle nested parenthesis (#4801)"

This reverts commit 91a031a.

* JavaTemplate bug when inserting `final var` into for-each (#4806)

* JavaTemplate bug when inserting `final var` into for-each

* Split variable declarations when they contain stop comment

* Reduce accidental changes between Java 11 and 17 parsers

* Add missing import

---------

Co-authored-by: Udayani Vaka <[email protected]>
Co-authored-by: Jonathan Schnéider <[email protected]>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Tim te Beek <[email protected]>
Co-authored-by: aboyko <[email protected]>
Co-authored-by: Laurens Westerlaken <[email protected]>
Co-authored-by: lingenj <[email protected]>
Co-authored-by: Peter Streef <[email protected]>
Co-authored-by: Shannon Pamperl <[email protected]>
Co-authored-by: Moderne <[email protected]>
Co-authored-by: Sam Snyder <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

1 participant