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

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

Merged
merged 2 commits into from
Dec 25, 2024

Conversation

jkschneider
Copy link
Member

What's changed?

A new field has been added to JavaType.Method called declaredFormalTypeNames. The phrase "formal type name" is a reference to the grammar of FormalTypeParameters in JVMS 4.3.4.

Previously, we were unable to detect whether a generic type variable name that was used in either a parameter, return type, or a thrown exception declaration in a method declaration was defined by that method or was instead referring to a type variable of the same name defined by an enclosing class. We could determine whether the class or method defined the type variable only when there was no possibility that the method was shadowing the class.

Some examples for when there will and will not be names in this new array of data:

image

What's your motivation?

The last type mapping change that I'm aware of that needs to be made to support compile verification as a post-recipe task.

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

I think we are fine with LST deserialization since this is additive.

Checklist

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

@jkschneider jkschneider added the enhancement New feature or request label Dec 25, 2024
github-actions[bot]

This comment was marked as off-topic.

@jkschneider jkschneider merged commit 6dc9d50 into main Dec 25, 2024
2 checks passed
@jkschneider jkschneider deleted the method-defined-generic-type-variables branch December 25, 2024 15:20
amishra-u pushed a commit to amishra-u/rewrite that referenced this pull request Dec 28, 2024
…rite#4814)

* Make the same performance improvement to parameter names allocations that we previously made to Java 17/21 in openrewrite#3345.
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
enhancement New feature or request
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

1 participant