-
Notifications
You must be signed in to change notification settings - Fork 129
[jnigen] Propagate Javadoc deprecation messages #3475
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
Merged
liamappelbe
merged 7 commits into
dart-lang:main
from
Siya-05:jnigen-javadoc-deprecation
Jul 24, 2026
Merged
Changes from 3 commits
Commits
Show all changes
7 commits
Select commit
Hold shift + click to select a range
9628007
[jnigen] Propagate Javadoc deprecation messages
Siya-05 ef331b6
Preserve Java @deprecated Javadoc messages
Siya-05 d5833d0
Merge branch 'main' into jnigen-javadoc-deprecation
liamappelbe da329c6
Preserve JavaDoc deprecation messages in generated bindings
Siya-05 f826f64
fix tests
liamappelbe be6827f
format
liamappelbe ce8622a
regen bindings
liamappelbe File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,114 @@ | ||
| // Copyright (c) 2026, the Dart project authors. Please see the AUTHORS file | ||
| // for details. All rights reserved. Use of this source code is governed by a | ||
| // BSD-style license that can be found in the LICENSE file. | ||
|
|
||
| import 'package:jnigen/src/elements/elements.dart'; | ||
| import 'package:test/test.dart'; | ||
|
|
||
| void main() { | ||
| group('JavaDocComment.deprecatedMessage', () { | ||
| test('extracts a single-line message', () { | ||
| final comment = JavaDocComment( | ||
| comment: '@deprecated Use the replacement method instead.', | ||
| ); | ||
|
|
||
| expect( | ||
| comment.deprecatedMessage, | ||
| "'Use the replacement method instead.'", | ||
| ); | ||
| }); | ||
|
|
||
| test('allows description text before the tag', () { | ||
| final comment = JavaDocComment( | ||
| comment: ''' | ||
| This method is retained for compatibility. | ||
|
|
||
| @deprecated Use the replacement method instead. | ||
| ''', | ||
| ); | ||
|
|
||
| expect( | ||
| comment.deprecatedMessage, | ||
| "'Use the replacement method instead.'", | ||
| ); | ||
| }); | ||
|
|
||
| test('extracts a multiline message', () { | ||
| final comment = JavaDocComment( | ||
| comment: ''' | ||
| @deprecated Use the replacement method instead. | ||
| This method will be removed in a future release. | ||
| ''', | ||
| ); | ||
|
|
||
| expect( | ||
| comment.deprecatedMessage, | ||
| r"'Use the replacement method instead.\nThis method will be removed in a future release.'", | ||
| ); | ||
| }); | ||
|
|
||
| test('stops at the next block tag', () { | ||
| final comment = JavaDocComment( | ||
| comment: ''' | ||
| @deprecated Use the replacement method instead. | ||
| This method will be removed soon. | ||
| @return the old result | ||
| ''', | ||
| ); | ||
|
|
||
| expect( | ||
| comment.deprecatedMessage, | ||
| r"'Use the replacement method instead.\nThis method will be removed soon.'", | ||
| ); | ||
| }); | ||
|
|
||
| test('returns null when the tag is absent', () { | ||
| final comment = JavaDocComment( | ||
| comment: 'This is a regular Javadoc comment.', | ||
| ); | ||
|
|
||
| expect(comment.deprecatedMessage, isNull); | ||
| }); | ||
|
|
||
| test('returns null when the message is empty', () { | ||
| final comment = JavaDocComment( | ||
| comment: '@deprecated', | ||
| ); | ||
|
|
||
| expect(comment.deprecatedMessage, isNull); | ||
| }); | ||
|
|
||
| test('escapes apostrophes and dollar signs', () { | ||
| final comment = JavaDocComment( | ||
| comment: r"@deprecated Don't use $oldMethod.", | ||
| ); | ||
|
|
||
| expect( | ||
| comment.deprecatedMessage, | ||
| r"'Don\'t use \$oldMethod.'", | ||
| ); | ||
| }); | ||
|
|
||
| test('escapes backslashes', () { | ||
| final comment = JavaDocComment( | ||
| comment: r'@deprecated Use C:\temp instead.', | ||
| ); | ||
|
|
||
| expect( | ||
| comment.deprecatedMessage, | ||
| r"'Use C:\\temp instead.'", | ||
| ); | ||
| }); | ||
|
|
||
| test('escapes double quotes', () { | ||
| final comment = JavaDocComment( | ||
| comment: '@deprecated Use "newMethod" instead.', | ||
| ); | ||
|
|
||
| expect( | ||
| comment.deprecatedMessage, | ||
| "'Use \\\"newMethod\\\" instead.'", | ||
| ); | ||
| }); | ||
| }); | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We should probably roll our own Dart string escaper, rather than relying on this JSON encoding trick. It's sort of a coincidence that JSON uses mostly the same escape characters as Dart. In fact there are some small differences in the escaping rules that are leading to test failures like this. It'd be better to write (and unit test) a dedicated function for this.
You may also need to regenerate the bindings for that test, to fix this failure. Try tool/regenerate_all_bindings.dart. That tool can be a bit problematic to run, so let me know if you have issues with it (eg errors, or spurious diffs) and I can regerenate the bindings for you on my machine.