OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 import 'dart:async'; | 5 import 'dart:async'; |
6 import 'dart:convert'; | 6 import 'dart:convert'; |
7 | 7 |
8 import 'package:analyzer/dart/ast/ast.dart'; | 8 import 'package:analyzer/dart/ast/ast.dart'; |
9 import 'package:analyzer/dart/element/element.dart'; | 9 import 'package:analyzer/dart/element/element.dart'; |
10 import 'package:analyzer/src/dart/analysis/driver.dart'; | 10 import 'package:analyzer/src/dart/analysis/driver.dart'; |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
106 class A {} // 1 | 106 class A {} // 1 |
107 class B extends A {} // 2 | 107 class B extends A {} // 2 |
108 '''); | 108 '''); |
109 ClassElement elementA = findElement('A'); | 109 ClassElement elementA = findElement('A'); |
110 assertThat(elementA) | 110 assertThat(elementA) |
111 ..isExtendedAt('A {} // 2', false) | 111 ..isExtendedAt('A {} // 2', false) |
112 ..isReferencedAt('A {} // 2', false); | 112 ..isReferencedAt('A {} // 2', false); |
113 } | 113 } |
114 | 114 |
115 test_isExtendedBy_ClassDeclaration_isQualified() async { | 115 test_isExtendedBy_ClassDeclaration_isQualified() async { |
116 provider.newFile( | 116 provider.newFile(_p('$testProject/lib.dart'), ''' |
117 _p('$testProject/lib.dart'), | |
118 ''' | |
119 class A {} | 117 class A {} |
120 '''); | 118 '''); |
121 await _indexTestUnit(''' | 119 await _indexTestUnit(''' |
122 import 'lib.dart' as p; | 120 import 'lib.dart' as p; |
123 class B extends p.A {} // 2 | 121 class B extends p.A {} // 2 |
124 '''); | 122 '''); |
125 ClassElement elementA = importedUnit().getType('A'); | 123 ClassElement elementA = importedUnit().getType('A'); |
126 assertThat(elementA).isExtendedAt('A {} // 2', true); | 124 assertThat(elementA).isExtendedAt('A {} // 2', true); |
127 } | 125 } |
128 | 126 |
(...skipping 12 matching lines...) Expand all Loading... |
141 class B {} | 139 class B {} |
142 class C = A with B; | 140 class C = A with B; |
143 '''); | 141 '''); |
144 ClassElement elementA = findElement('A'); | 142 ClassElement elementA = findElement('A'); |
145 assertThat(elementA) | 143 assertThat(elementA) |
146 ..isExtendedAt('A with', false) | 144 ..isExtendedAt('A with', false) |
147 ..isReferencedAt('A with', false); | 145 ..isReferencedAt('A with', false); |
148 } | 146 } |
149 | 147 |
150 test_isExtendedBy_ClassTypeAlias_isQualified() async { | 148 test_isExtendedBy_ClassTypeAlias_isQualified() async { |
151 provider.newFile( | 149 provider.newFile(_p('$testProject/lib.dart'), ''' |
152 _p('$testProject/lib.dart'), | |
153 ''' | |
154 class A {} | 150 class A {} |
155 '''); | 151 '''); |
156 await _indexTestUnit(''' | 152 await _indexTestUnit(''' |
157 import 'lib.dart' as p; | 153 import 'lib.dart' as p; |
158 class B {} | 154 class B {} |
159 class C = p.A with B; | 155 class C = p.A with B; |
160 '''); | 156 '''); |
161 ClassElement elementA = importedUnit().getType('A'); | 157 ClassElement elementA = importedUnit().getType('A'); |
162 assertThat(elementA) | 158 assertThat(elementA) |
163 ..isExtendedAt('A with', true) | 159 ..isExtendedAt('A with', true) |
164 ..isReferencedAt('A with', true); | 160 ..isReferencedAt('A with', true); |
165 } | 161 } |
166 | 162 |
167 test_isImplementedBy_ClassDeclaration() async { | 163 test_isImplementedBy_ClassDeclaration() async { |
168 await _indexTestUnit(''' | 164 await _indexTestUnit(''' |
169 class A {} // 1 | 165 class A {} // 1 |
170 class B implements A {} // 2 | 166 class B implements A {} // 2 |
171 '''); | 167 '''); |
172 ClassElement elementA = findElement('A'); | 168 ClassElement elementA = findElement('A'); |
173 assertThat(elementA) | 169 assertThat(elementA) |
174 ..isImplementedAt('A {} // 2', false) | 170 ..isImplementedAt('A {} // 2', false) |
175 ..isReferencedAt('A {} // 2', false); | 171 ..isReferencedAt('A {} // 2', false); |
176 } | 172 } |
177 | 173 |
178 test_isImplementedBy_ClassDeclaration_isQualified() async { | 174 test_isImplementedBy_ClassDeclaration_isQualified() async { |
179 provider.newFile( | 175 provider.newFile(_p('$testProject/lib.dart'), ''' |
180 _p('$testProject/lib.dart'), | |
181 ''' | |
182 class A {} | 176 class A {} |
183 '''); | 177 '''); |
184 await _indexTestUnit(''' | 178 await _indexTestUnit(''' |
185 import 'lib.dart' as p; | 179 import 'lib.dart' as p; |
186 class B implements p.A {} // 2 | 180 class B implements p.A {} // 2 |
187 '''); | 181 '''); |
188 ClassElement elementA = importedUnit().getType('A'); | 182 ClassElement elementA = importedUnit().getType('A'); |
189 assertThat(elementA) | 183 assertThat(elementA) |
190 ..isImplementedAt('A {} // 2', true) | 184 ..isImplementedAt('A {} // 2', true) |
191 ..isReferencedAt('A {} // 2', true); | 185 ..isReferencedAt('A {} // 2', true); |
(...skipping 20 matching lines...) Expand all Loading... |
212 field(); // nq | 206 field(); // nq |
213 } | 207 } |
214 }'''); | 208 }'''); |
215 FieldElement field = findElement('field'); | 209 FieldElement field = findElement('field'); |
216 assertThat(field.getter) | 210 assertThat(field.getter) |
217 ..isInvokedAt('field(); // q', true) | 211 ..isInvokedAt('field(); // q', true) |
218 ..isInvokedAt('field(); // nq', false); | 212 ..isInvokedAt('field(); // nq', false); |
219 } | 213 } |
220 | 214 |
221 test_isInvokedBy_FunctionElement() async { | 215 test_isInvokedBy_FunctionElement() async { |
222 provider.newFile( | 216 provider.newFile(_p('$testProject/lib.dart'), ''' |
223 _p('$testProject/lib.dart'), | |
224 ''' | |
225 library lib; | 217 library lib; |
226 foo() {} | 218 foo() {} |
227 '''); | 219 '''); |
228 await _indexTestUnit(''' | 220 await _indexTestUnit(''' |
229 import 'lib.dart'; | 221 import 'lib.dart'; |
230 import 'lib.dart' as pref; | 222 import 'lib.dart' as pref; |
231 main() { | 223 main() { |
232 pref.foo(); // q | 224 pref.foo(); // q |
233 foo(); // nq | 225 foo(); // nq |
234 }'''); | 226 }'''); |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
351 class A {} // 1 | 343 class A {} // 1 |
352 class B extends Object with A {} // 2 | 344 class B extends Object with A {} // 2 |
353 '''); | 345 '''); |
354 ClassElement elementA = findElement('A'); | 346 ClassElement elementA = findElement('A'); |
355 assertThat(elementA) | 347 assertThat(elementA) |
356 ..isMixedInAt('A {} // 2', false) | 348 ..isMixedInAt('A {} // 2', false) |
357 ..isReferencedAt('A {} // 2', false); | 349 ..isReferencedAt('A {} // 2', false); |
358 } | 350 } |
359 | 351 |
360 test_isMixedInBy_ClassDeclaration_isQualified() async { | 352 test_isMixedInBy_ClassDeclaration_isQualified() async { |
361 provider.newFile( | 353 provider.newFile(_p('$testProject/lib.dart'), ''' |
362 _p('$testProject/lib.dart'), | |
363 ''' | |
364 class A {} | 354 class A {} |
365 '''); | 355 '''); |
366 await _indexTestUnit(''' | 356 await _indexTestUnit(''' |
367 import 'lib.dart' as p; | 357 import 'lib.dart' as p; |
368 class B extends Object with p.A {} // 2 | 358 class B extends Object with p.A {} // 2 |
369 '''); | 359 '''); |
370 ClassElement elementA = importedUnit().getType('A'); | 360 ClassElement elementA = importedUnit().getType('A'); |
371 assertThat(elementA).isMixedInAt('A {} // 2', true); | 361 assertThat(elementA).isMixedInAt('A {} // 2', true); |
372 } | 362 } |
373 | 363 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
405 await _indexTestUnit(''' | 395 await _indexTestUnit(''' |
406 class A {} | 396 class A {} |
407 main() { | 397 main() { |
408 A(); // invalid code, but still a reference | 398 A(); // invalid code, but still a reference |
409 }'''); | 399 }'''); |
410 Element element = findElement('A'); | 400 Element element = findElement('A'); |
411 assertThat(element).isReferencedAt('A();', false); | 401 assertThat(element).isReferencedAt('A();', false); |
412 } | 402 } |
413 | 403 |
414 test_isReferencedBy_ClassElement_invocation_isQualified() async { | 404 test_isReferencedBy_ClassElement_invocation_isQualified() async { |
415 provider.newFile( | 405 provider.newFile(_p('$testProject/lib.dart'), ''' |
416 _p('$testProject/lib.dart'), | |
417 ''' | |
418 class A {} | 406 class A {} |
419 '''); | 407 '''); |
420 await _indexTestUnit(''' | 408 await _indexTestUnit(''' |
421 import 'lib.dart' as p; | 409 import 'lib.dart' as p; |
422 main() { | 410 main() { |
423 p.A(); // invalid code, but still a reference | 411 p.A(); // invalid code, but still a reference |
424 }'''); | 412 }'''); |
425 Element element = importedUnit().getType('A'); | 413 Element element = importedUnit().getType('A'); |
426 assertThat(element).isReferencedAt('A();', true); | 414 assertThat(element).isReferencedAt('A();', true); |
427 } | 415 } |
428 | 416 |
429 test_isReferencedBy_ClassTypeAlias() async { | 417 test_isReferencedBy_ClassTypeAlias() async { |
430 await _indexTestUnit(''' | 418 await _indexTestUnit(''' |
431 class A {} | 419 class A {} |
432 class B = Object with A; | 420 class B = Object with A; |
433 main(B p) { | 421 main(B p) { |
434 B v; | 422 B v; |
435 } | 423 } |
436 '''); | 424 '''); |
437 ClassElement element = findElement('B'); | 425 ClassElement element = findElement('B'); |
438 assertThat(element) | 426 assertThat(element) |
439 ..isReferencedAt('B p) {', false) | 427 ..isReferencedAt('B p) {', false) |
440 ..isReferencedAt('B v;', false); | 428 ..isReferencedAt('B v;', false); |
441 } | 429 } |
442 | 430 |
443 test_isReferencedBy_CompilationUnitElement_export() async { | 431 test_isReferencedBy_CompilationUnitElement_export() async { |
444 provider.newFile( | 432 provider.newFile(_p('$testProject/lib.dart'), ''' |
445 _p('$testProject/lib.dart'), | |
446 ''' | |
447 library lib; | 433 library lib; |
448 '''); | 434 '''); |
449 await _indexTestUnit(''' | 435 await _indexTestUnit(''' |
450 export 'lib.dart'; | 436 export 'lib.dart'; |
451 '''); | 437 '''); |
452 LibraryElement element = testLibraryElement.exports[0].exportedLibrary; | 438 LibraryElement element = testLibraryElement.exports[0].exportedLibrary; |
453 assertThat(element)..isReferencedAt("'lib.dart'", true, length: 10); | 439 assertThat(element)..isReferencedAt("'lib.dart'", true, length: 10); |
454 } | 440 } |
455 | 441 |
456 test_isReferencedBy_CompilationUnitElement_import() async { | 442 test_isReferencedBy_CompilationUnitElement_import() async { |
457 provider.newFile( | 443 provider.newFile(_p('$testProject/lib.dart'), ''' |
458 _p('$testProject/lib.dart'), | |
459 ''' | |
460 library lib; | 444 library lib; |
461 '''); | 445 '''); |
462 await _indexTestUnit(''' | 446 await _indexTestUnit(''' |
463 import 'lib.dart'; | 447 import 'lib.dart'; |
464 '''); | 448 '''); |
465 LibraryElement element = testLibraryElement.imports[0].importedLibrary; | 449 LibraryElement element = testLibraryElement.imports[0].importedLibrary; |
466 assertThat(element)..isReferencedAt("'lib.dart'", true, length: 10); | 450 assertThat(element)..isReferencedAt("'lib.dart'", true, length: 10); |
467 } | 451 } |
468 | 452 |
469 test_isReferencedBy_CompilationUnitElement_part() async { | 453 test_isReferencedBy_CompilationUnitElement_part() async { |
470 provider.newFile(_p('$testProject/my_unit.dart'), 'part of my_lib;'); | 454 provider.newFile(_p('$testProject/my_unit.dart'), 'part of my_lib;'); |
471 await _indexTestUnit(''' | 455 await _indexTestUnit(''' |
472 library my_lib; | 456 library my_lib; |
473 part 'my_unit.dart'; | 457 part 'my_unit.dart'; |
474 '''); | 458 '''); |
475 CompilationUnitElement element = testLibraryElement.parts[0]; | 459 CompilationUnitElement element = testLibraryElement.parts[0]; |
476 assertThat(element)..isReferencedAt("'my_unit.dart';", true, length: 14); | 460 assertThat(element)..isReferencedAt("'my_unit.dart';", true, length: 14); |
477 } | 461 } |
478 | 462 |
479 test_isReferencedBy_CompilationUnitElement_part_inPart() async { | 463 test_isReferencedBy_CompilationUnitElement_part_inPart() async { |
480 provider.newFile(_p('$testProject/a.dart'), 'part of lib;'); | 464 provider.newFile(_p('$testProject/a.dart'), 'part of lib;'); |
481 provider.newFile( | 465 provider.newFile(_p('$testProject/b.dart'), ''' |
482 _p('$testProject/b.dart'), | |
483 ''' | |
484 library lib; | 466 library lib; |
485 part 'a.dart'; | 467 part 'a.dart'; |
486 '''); | 468 '''); |
487 await _indexTestUnit(''' | 469 await _indexTestUnit(''' |
488 part 'b.dart'; | 470 part 'b.dart'; |
489 '''); | 471 '''); |
490 // No exception, even though a.dart is a part of b.dart part. | 472 // No exception, even though a.dart is a part of b.dart part. |
491 } | 473 } |
492 | 474 |
493 test_isReferencedBy_ConstructorElement() async { | 475 test_isReferencedBy_ConstructorElement() async { |
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
739 print(foo()); | 721 print(foo()); |
740 } | 722 } |
741 '''); | 723 '''); |
742 FunctionElement element = findElement('foo'); | 724 FunctionElement element = findElement('foo'); |
743 assertThat(element) | 725 assertThat(element) |
744 ..isReferencedAt('foo);', false) | 726 ..isReferencedAt('foo);', false) |
745 ..isInvokedAt('foo());', false); | 727 ..isInvokedAt('foo());', false); |
746 } | 728 } |
747 | 729 |
748 test_isReferencedBy_FunctionElement_with_LibraryElement() async { | 730 test_isReferencedBy_FunctionElement_with_LibraryElement() async { |
749 provider.newFile( | 731 provider.newFile(_p('$testProject/foo.dart'), r''' |
750 _p('$testProject/foo.dart'), | |
751 r''' | |
752 bar() {} | 732 bar() {} |
753 '''); | 733 '''); |
754 await _indexTestUnit(''' | 734 await _indexTestUnit(''' |
755 import "foo.dart"; | 735 import "foo.dart"; |
756 main() { | 736 main() { |
757 bar(); | 737 bar(); |
758 } | 738 } |
759 '''); | 739 '''); |
760 LibraryElement fooLibrary = testLibraryElement.imports[0].importedLibrary; | 740 LibraryElement fooLibrary = testLibraryElement.imports[0].importedLibrary; |
761 assertThat(fooLibrary)..isReferencedAt('"foo.dart";', true, length: 10); | 741 assertThat(fooLibrary)..isReferencedAt('"foo.dart";', true, length: 10); |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
834 int f2({int p}) => 2; | 814 int f2({int p}) => 2; |
835 main(bool b) { | 815 main(bool b) { |
836 var f = b ? f1 : f2; | 816 var f = b ? f1 : f2; |
837 f(p: 0); | 817 f(p: 0); |
838 }'''); | 818 }'''); |
839 // We should not crash because of reference to "p" - a named parameter | 819 // We should not crash because of reference to "p" - a named parameter |
840 // of a synthetic LUB FunctionElement created for "f". | 820 // of a synthetic LUB FunctionElement created for "f". |
841 } | 821 } |
842 | 822 |
843 test_isReferencedBy_TopLevelVariableElement() async { | 823 test_isReferencedBy_TopLevelVariableElement() async { |
844 provider.newFile( | 824 provider.newFile(_p('$testProject/lib.dart'), ''' |
845 _p('$testProject/lib.dart'), | |
846 ''' | |
847 library lib; | 825 library lib; |
848 var V; | 826 var V; |
849 '''); | 827 '''); |
850 await _indexTestUnit(''' | 828 await _indexTestUnit(''' |
851 import 'lib.dart' show V; // imp | 829 import 'lib.dart' show V; // imp |
852 import 'lib.dart' as pref; | 830 import 'lib.dart' as pref; |
853 main() { | 831 main() { |
854 pref.V = 5; // q | 832 pref.V = 5; // q |
855 print(pref.V); // q | 833 print(pref.V); // q |
856 V = 5; // nq | 834 V = 5; // nq |
857 print(V); // nq | 835 print(V); // nq |
858 }'''); | 836 }'''); |
859 TopLevelVariableElement variable = importedUnit().topLevelVariables[0]; | 837 TopLevelVariableElement variable = importedUnit().topLevelVariables[0]; |
860 assertThat(variable)..isReferencedAt('V; // imp', true); | 838 assertThat(variable)..isReferencedAt('V; // imp', true); |
861 assertThat(variable.getter) | 839 assertThat(variable.getter) |
862 ..isReferencedAt('V); // q', true) | 840 ..isReferencedAt('V); // q', true) |
863 ..isReferencedAt('V); // nq', false); | 841 ..isReferencedAt('V); // nq', false); |
864 assertThat(variable.setter) | 842 assertThat(variable.setter) |
865 ..isReferencedAt('V = 5; // q', true) | 843 ..isReferencedAt('V = 5; // q', true) |
866 ..isReferencedAt('V = 5; // nq', false); | 844 ..isReferencedAt('V = 5; // nq', false); |
867 } | 845 } |
868 | 846 |
869 test_isReferencedBy_TopLevelVariableElement_synthetic_hasGetterSetter() async
{ | 847 test_isReferencedBy_TopLevelVariableElement_synthetic_hasGetterSetter() async
{ |
870 provider.newFile( | 848 provider.newFile(_p('$testProject/lib.dart'), ''' |
871 _p('$testProject/lib.dart'), | |
872 ''' | |
873 int get V => 0; | 849 int get V => 0; |
874 void set V(_) {} | 850 void set V(_) {} |
875 '''); | 851 '''); |
876 await _indexTestUnit(''' | 852 await _indexTestUnit(''' |
877 import 'lib.dart' show V; | 853 import 'lib.dart' show V; |
878 '''); | 854 '''); |
879 TopLevelVariableElement element = importedUnit().topLevelVariables[0]; | 855 TopLevelVariableElement element = importedUnit().topLevelVariables[0]; |
880 assertThat(element).isReferencedAt('V;', true); | 856 assertThat(element).isReferencedAt('V;', true); |
881 } | 857 } |
882 | 858 |
883 test_isReferencedBy_TopLevelVariableElement_synthetic_hasSetter() async { | 859 test_isReferencedBy_TopLevelVariableElement_synthetic_hasSetter() async { |
884 provider.newFile( | 860 provider.newFile(_p('$testProject/lib.dart'), ''' |
885 _p('$testProject/lib.dart'), | |
886 ''' | |
887 void set V(_) {} | 861 void set V(_) {} |
888 '''); | 862 '''); |
889 await _indexTestUnit(''' | 863 await _indexTestUnit(''' |
890 import 'lib.dart' show V; | 864 import 'lib.dart' show V; |
891 '''); | 865 '''); |
892 TopLevelVariableElement element = importedUnit().topLevelVariables[0]; | 866 TopLevelVariableElement element = importedUnit().topLevelVariables[0]; |
893 assertThat(element).isReferencedAt('V;', true); | 867 assertThat(element).isReferencedAt('V;', true); |
894 } | 868 } |
895 | 869 |
896 test_isReferencedBy_typeInVariableList() async { | 870 test_isReferencedBy_typeInVariableList() async { |
(...skipping 14 matching lines...) Expand all Loading... |
911 } | 885 } |
912 '''); | 886 '''); |
913 FieldElement element = findElement('field', ElementKind.FIELD); | 887 FieldElement element = findElement('field', ElementKind.FIELD); |
914 assertThat(element) | 888 assertThat(element) |
915 ..isWrittenAt('field})', true) | 889 ..isWrittenAt('field})', true) |
916 ..isWrittenAt('field = 5', true); | 890 ..isWrittenAt('field = 5', true); |
917 } | 891 } |
918 | 892 |
919 test_subtypes_classDeclaration() async { | 893 test_subtypes_classDeclaration() async { |
920 String libP = 'package:test/lib.dart;package:test/lib.dart'; | 894 String libP = 'package:test/lib.dart;package:test/lib.dart'; |
921 provider.newFile( | 895 provider.newFile(_p('$testProject/lib.dart'), ''' |
922 _p('$testProject/lib.dart'), | |
923 ''' | |
924 class A {} | 896 class A {} |
925 class B {} | 897 class B {} |
926 class C {} | 898 class C {} |
927 class D {} | 899 class D {} |
928 class E {} | 900 class E {} |
929 '''); | 901 '''); |
930 await _indexTestUnit(''' | 902 await _indexTestUnit(''' |
931 import 'lib.dart'; | 903 import 'lib.dart'; |
932 | 904 |
933 class X extends A { | 905 class X extends A { |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
970 { | 942 { |
971 AnalysisDriverSubtype Z = | 943 AnalysisDriverSubtype Z = |
972 index.subtypes.singleWhere((t) => t.name == 'Z'); | 944 index.subtypes.singleWhere((t) => t.name == 'Z'); |
973 expect(Z.supertypes, ['$libP;D', '$libP;E']); | 945 expect(Z.supertypes, ['$libP;D', '$libP;E']); |
974 expect(Z.members, ['methodZ']); | 946 expect(Z.members, ['methodZ']); |
975 } | 947 } |
976 } | 948 } |
977 | 949 |
978 test_subtypes_classTypeAlias() async { | 950 test_subtypes_classTypeAlias() async { |
979 String libP = 'package:test/lib.dart;package:test/lib.dart'; | 951 String libP = 'package:test/lib.dart;package:test/lib.dart'; |
980 provider.newFile( | 952 provider.newFile(_p('$testProject/lib.dart'), ''' |
981 _p('$testProject/lib.dart'), | |
982 ''' | |
983 class A {} | 953 class A {} |
984 class B {} | 954 class B {} |
985 class C {} | 955 class C {} |
986 class D {} | 956 class D {} |
987 '''); | 957 '''); |
988 await _indexTestUnit(''' | 958 await _indexTestUnit(''' |
989 import 'lib.dart'; | 959 import 'lib.dart'; |
990 | 960 |
991 class X = A with B, C; | 961 class X = A with B, C; |
992 class Y = A with B implements C, D; | 962 class Y = A with B implements C, D; |
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1360 final bool isQualified; | 1330 final bool isQualified; |
1361 | 1331 |
1362 _Relation(this.kind, this.offset, this.length, this.isQualified); | 1332 _Relation(this.kind, this.offset, this.length, this.isQualified); |
1363 | 1333 |
1364 @override | 1334 @override |
1365 String toString() { | 1335 String toString() { |
1366 return '_Relation{kind: $kind, offset: $offset, length: $length, ' | 1336 return '_Relation{kind: $kind, offset: $offset, length: $length, ' |
1367 'isQualified: $isQualified}lified)'; | 1337 'isQualified: $isQualified}lified)'; |
1368 } | 1338 } |
1369 } | 1339 } |
OLD | NEW |