Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(454)

Side by Side Diff: pkg/analyzer/lib/src/dart/ast/token.dart

Issue 1686173002: fix #25739, incorrectly expanding a generic comment multiple times (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library analyzer.src.dart.ast.token; 5 library analyzer.src.dart.ast.token;
6 6
7 import 'package:analyzer/dart/ast/token.dart'; 7 import 'package:analyzer/dart/ast/token.dart';
8 import 'package:analyzer/src/generated/java_engine.dart'; 8 import 'package:analyzer/src/generated/java_engine.dart';
9 9
10 /** 10 /**
(...skipping 17 matching lines...) Expand all
28 type == TokenType.STRING_INTERPOLATION_EXPRESSION); 28 type == TokenType.STRING_INTERPOLATION_EXPRESSION);
29 } 29 }
30 30
31 @override 31 @override
32 Token copy() => new BeginToken(type, offset); 32 Token copy() => new BeginToken(type, offset);
33 } 33 }
34 34
35 /** 35 /**
36 * A begin token that is preceded by comments. 36 * A begin token that is preceded by comments.
37 */ 37 */
38 class BeginTokenWithComment extends BeginToken { 38 class BeginTokenWithComment extends BeginToken implements TokenWithComment {
39 /** 39 /**
40 * The first comment in the list of comments that precede this token. 40 * The first comment in the list of comments that precede this token.
41 */ 41 */
42 CommentToken _precedingComment; 42 CommentToken _precedingComment;
43 43
44 /** 44 /**
45 * Initialize a newly created token to have the given [type] at the given 45 * Initialize a newly created token to have the given [type] at the given
46 * [offset] and to be preceded by the comments reachable from the given 46 * [offset] and to be preceded by the comments reachable from the given
47 * [comment]. 47 * [comment].
48 */ 48 */
(...skipping 23 matching lines...) Expand all
72 @override 72 @override
73 Token copy() => 73 Token copy() =>
74 new BeginTokenWithComment(type, offset, copyComments(precedingComments)); 74 new BeginTokenWithComment(type, offset, copyComments(precedingComments));
75 } 75 }
76 76
77 /** 77 /**
78 * A token representing a comment. 78 * A token representing a comment.
79 */ 79 */
80 class CommentToken extends StringToken { 80 class CommentToken extends StringToken {
81 /** 81 /**
82 * The [Token] that contains this comment. 82 * The token that contains this comment.
83 */ 83 */
84 Token parent; 84 TokenWithComment parent;
85 85
86 /** 86 /**
87 * Initialize a newly created token to represent a token of the given [type] 87 * Initialize a newly created token to represent a token of the given [type]
88 * with the given [value] at the given [offset]. 88 * with the given [value] at the given [offset].
89 */ 89 */
90 CommentToken(TokenType type, String value, int offset) 90 CommentToken(TokenType type, String value, int offset)
91 : super(type, value, offset); 91 : super(type, value, offset);
92 92
93 @override 93 @override
94 CommentToken copy() => new CommentToken(type, _value, offset); 94 CommentToken copy() => new CommentToken(type, _value, offset);
95
96 /**
97 * Remove this comment token from the list.
98 *
99 * This is used when we decide to interpret the comment as syntax.
100 */
101 void remove() {
102 if (previous != null) {
103 previous.setNextWithoutSettingPrevious(next);
104 next?.previous = previous;
105 } else {
106 assert(parent.precedingComments == this);
107 parent.precedingComments = next;
108 }
109 }
95 } 110 }
96 111
97 /** 112 /**
98 * A documentation comment token. 113 * A documentation comment token.
99 */ 114 */
100 class DocumentationCommentToken extends CommentToken { 115 class DocumentationCommentToken extends CommentToken {
101 /** 116 /**
102 * The references embedded within the documentation comment. 117 * The references embedded within the documentation comment.
103 * This list will be empty unless this is a documentation comment that has 118 * This list will be empty unless this is a documentation comment that has
104 * references embedded within it. 119 * references embedded within it.
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 @override 157 @override
143 Token copy() => new KeywordToken(keyword, offset); 158 Token copy() => new KeywordToken(keyword, offset);
144 159
145 @override 160 @override
146 Keyword value() => keyword; 161 Keyword value() => keyword;
147 } 162 }
148 163
149 /** 164 /**
150 * A keyword token that is preceded by comments. 165 * A keyword token that is preceded by comments.
151 */ 166 */
152 class KeywordTokenWithComment extends KeywordToken { 167 class KeywordTokenWithComment extends KeywordToken implements TokenWithComment {
153 /** 168 /**
154 * The first comment in the list of comments that precede this token. 169 * The first comment in the list of comments that precede this token.
155 */ 170 */
156 CommentToken _precedingComment; 171 CommentToken _precedingComment;
157 172
158 /** 173 /**
159 * Initialize a newly created token to to represent the given [keyword] at the 174 * Initialize a newly created token to to represent the given [keyword] at the
160 * given [offset] and to be preceded by the comments reachable from the given 175 * given [offset] and to be preceded by the comments reachable from the given
161 * [comment]. 176 * [comment].
162 */ 177 */
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 @override 348 @override
334 Token copy() => new StringToken(type, _value, offset); 349 Token copy() => new StringToken(type, _value, offset);
335 350
336 @override 351 @override
337 String value() => _value; 352 String value() => _value;
338 } 353 }
339 354
340 /** 355 /**
341 * A string token that is preceded by comments. 356 * A string token that is preceded by comments.
342 */ 357 */
343 class StringTokenWithComment extends StringToken { 358 class StringTokenWithComment extends StringToken implements TokenWithComment {
344 /** 359 /**
345 * The first comment in the list of comments that precede this token. 360 * The first comment in the list of comments that precede this token.
346 */ 361 */
347 CommentToken _precedingComment; 362 CommentToken _precedingComment;
348 363
349 /** 364 /**
350 * Initialize a newly created token to have the given [type] at the given 365 * Initialize a newly created token to have the given [type] at the given
351 * [offset] and to be preceded by the comments reachable from the given 366 * [offset] and to be preceded by the comments reachable from the given
352 * [comment]. 367 * [comment].
353 */ 368 */
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
545 CommentToken get precedingComments => _precedingComment; 560 CommentToken get precedingComments => _precedingComment;
546 561
547 void set precedingComments(CommentToken comment) { 562 void set precedingComments(CommentToken comment) {
548 _precedingComment = comment; 563 _precedingComment = comment;
549 _setCommentParent(_precedingComment); 564 _setCommentParent(_precedingComment);
550 } 565 }
551 566
552 @override 567 @override
553 Token copy() => new TokenWithComment(type, offset, precedingComments); 568 Token copy() => new TokenWithComment(type, offset, precedingComments);
554 } 569 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/generated/parser.dart » ('j') | pkg/analyzer/lib/src/generated/parser.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698