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

Side by Side Diff: pkg/analyzer/test/src/summary/summary_test.dart

Issue 1523093003: Move summary references into UnlinkedUnit and PrelinkedUnit. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years 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) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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.test.src.summary.summary_test; 5 library analyzer.test.src.summary.summary_test;
6 6
7 import 'package:analyzer/dart/element/element.dart'; 7 import 'package:analyzer/dart/element/element.dart';
8 import 'package:analyzer/src/generated/engine.dart'; 8 import 'package:analyzer/src/generated/engine.dart';
9 import 'package:analyzer/src/generated/java_engine_io.dart'; 9 import 'package:analyzer/src/generated/java_engine_io.dart';
10 import 'package:analyzer/src/generated/source.dart'; 10 import 'package:analyzer/src/generated/source.dart';
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 53
54 @override 54 @override
55 void serializeLibraryText(String text, {bool allowErrors: false}) { 55 void serializeLibraryText(String text, {bool allowErrors: false}) {
56 Source source = addSource(text); 56 Source source = addSource(text);
57 LibraryElement library = resolve2(source); 57 LibraryElement library = resolve2(source);
58 if (!allowErrors) { 58 if (!allowErrors) {
59 assertNoErrors(source); 59 assertNoErrors(source);
60 } 60 }
61 serializeLibraryElement(library); 61 serializeLibraryElement(library);
62 expect(definingUnit.unlinked.imports.length, lib.importDependencies.length); 62 expect(definingUnit.unlinked.imports.length, lib.importDependencies.length);
63 expect(unlinked.references.length, lib.references.length); 63 for (PrelinkedUnit unit in lib.units) {
64 expect(unit.unlinked.references.length, unit.references.length);
65 }
64 } 66 }
65 67
66 @override 68 @override
67 void setUp() { 69 void setUp() {
68 super.setUp(); 70 super.setUp();
69 AnalysisOptionsImpl options = new AnalysisOptionsImpl(); 71 AnalysisOptionsImpl options = new AnalysisOptionsImpl();
70 options.enableGenericMethods = true; 72 options.enableGenericMethods = true;
71 resetWithOptions(options); 73 resetWithOptions(options);
72 } 74 }
73 75
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 expect(typeRef.typeArguments, isEmpty); 202 expect(typeRef.typeArguments, isEmpty);
201 expect(typeRef.paramReference, deBruijnIndex); 203 expect(typeRef.paramReference, deBruijnIndex);
202 } 204 }
203 205
204 /** 206 /**
205 * Verify that the given [typeRef] represents a reference to a type declared 207 * Verify that the given [typeRef] represents a reference to a type declared
206 * in a file reachable via [absoluteUri] and [relativeUri], having name 208 * in a file reachable via [absoluteUri] and [relativeUri], having name
207 * [expectedName]. If [expectedPrefix] is supplied, verify that the type is 209 * [expectedName]. If [expectedPrefix] is supplied, verify that the type is
208 * reached via the given prefix. If [allowTypeParameters] is true, allow the 210 * reached via the given prefix. If [allowTypeParameters] is true, allow the
209 * type reference to supply type parameters. [expectedKind] is the kind of 211 * type reference to supply type parameters. [expectedKind] is the kind of
210 * object referenced. 212 * object referenced. [sourceUnit] is the compilation unit within which the
213 * [typeRef] appears; if not specified it is assumed to be the defining
214 * compilation unit. [expectedTargetUnit] is the index of the compilation
215 * unit in which the target of the [typeRef] is expected to appear; if not
216 * specified it is assumed to be the defining compilation unit.
211 */ 217 */
212 void checkTypeRef(UnlinkedTypeRef typeRef, String absoluteUri, 218 void checkTypeRef(UnlinkedTypeRef typeRef, String absoluteUri,
213 String relativeUri, String expectedName, 219 String relativeUri, String expectedName,
214 {String expectedPrefix, 220 {String expectedPrefix,
215 bool allowTypeParameters: false, 221 bool allowTypeParameters: false,
216 PrelinkedReferenceKind expectedKind: PrelinkedReferenceKind.classOrEnum, 222 PrelinkedReferenceKind expectedKind: PrelinkedReferenceKind.classOrEnum,
217 int expectedUnit: 0}) { 223 int expectedTargetUnit: 0,
224 PrelinkedUnit sourceUnit}) {
225 sourceUnit ??= definingUnit;
218 expect(typeRef, new isInstanceOf<UnlinkedTypeRef>()); 226 expect(typeRef, new isInstanceOf<UnlinkedTypeRef>());
219 expect(typeRef.paramReference, 0); 227 expect(typeRef.paramReference, 0);
220 int index = typeRef.reference; 228 int index = typeRef.reference;
221 UnlinkedReference reference = unlinked.references[index]; 229 UnlinkedReference reference = sourceUnit.unlinked.references[index];
222 PrelinkedReference referenceResolution = lib.references[index]; 230 PrelinkedReference referenceResolution = sourceUnit.references[index];
223 if (absoluteUri == null) { 231 if (absoluteUri == null) {
224 expect(referenceResolution.dependency, 0); 232 expect(referenceResolution.dependency, 0);
225 } else { 233 } else {
226 checkDependency(referenceResolution.dependency, absoluteUri, relativeUri); 234 checkDependency(referenceResolution.dependency, absoluteUri, relativeUri);
227 } 235 }
228 if (!allowTypeParameters) { 236 if (!allowTypeParameters) {
229 expect(typeRef.typeArguments, isEmpty); 237 expect(typeRef.typeArguments, isEmpty);
230 } 238 }
231 if (expectedName == null) { 239 if (expectedName == null) {
232 expect(reference.name, isEmpty); 240 expect(reference.name, isEmpty);
233 } else { 241 } else {
234 expect(reference.name, expectedName); 242 expect(reference.name, expectedName);
235 } 243 }
236 if (checkAstDerivedData) { 244 if (checkAstDerivedData) {
237 if (expectedPrefix == null) { 245 if (expectedPrefix == null) {
238 expect(reference.prefix, 0); 246 expect(reference.prefix, 0);
239 expect(unlinked.prefixes[reference.prefix].name, isEmpty); 247 expect(unlinked.prefixes[reference.prefix].name, isEmpty);
240 } else { 248 } else {
241 expect(reference.prefix, isNot(0)); 249 expect(reference.prefix, isNot(0));
242 expect(unlinked.prefixes[reference.prefix].name, expectedPrefix); 250 expect(unlinked.prefixes[reference.prefix].name, expectedPrefix);
243 } 251 }
244 } 252 }
245 expect(referenceResolution.kind, expectedKind); 253 expect(referenceResolution.kind, expectedKind);
246 expect(referenceResolution.unit, expectedUnit); 254 expect(referenceResolution.unit, expectedTargetUnit);
247 } 255 }
248 256
249 /** 257 /**
250 * Verify that the given [typeRef] represents a reference to an unresolved 258 * Verify that the given [typeRef] represents a reference to an unresolved
251 * type. 259 * type.
252 */ 260 */
253 void checkUnresolvedTypeRef( 261 void checkUnresolvedTypeRef(
254 UnlinkedTypeRef typeRef, String expectedPrefix, String expectedName) { 262 UnlinkedTypeRef typeRef, String expectedPrefix, String expectedName) {
255 // When serializing from the element model, unresolved type refs lose their 263 // When serializing from the element model, unresolved type refs lose their
256 // name. 264 // name.
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
444 452
445 /** 453 /**
446 * Serialize a type declaration using the given [text] as a type name, and 454 * Serialize a type declaration using the given [text] as a type name, and
447 * return a summary of the corresponding [UnlinkedTypeRef]. If the type 455 * return a summary of the corresponding [UnlinkedTypeRef]. If the type
448 * declaration needs to refer to types that are not available in core, those 456 * declaration needs to refer to types that are not available in core, those
449 * types may be declared in [otherDeclarations]. 457 * types may be declared in [otherDeclarations].
450 */ 458 */
451 UnlinkedTypeRef serializeTypeText(String text, 459 UnlinkedTypeRef serializeTypeText(String text,
452 {String otherDeclarations: '', bool allowErrors: false}) { 460 {String otherDeclarations: '', bool allowErrors: false}) {
453 return serializeVariableText('$otherDeclarations\n$text v;', 461 return serializeVariableText('$otherDeclarations\n$text v;',
454 allowErrors: allowErrors) 462 allowErrors: allowErrors).type;
455 .type;
456 } 463 }
457 464
458 /** 465 /**
459 * Serialize the given library [text] and return the summary of the variable 466 * Serialize the given library [text] and return the summary of the variable
460 * with the given [variableName]. 467 * with the given [variableName].
461 */ 468 */
462 UnlinkedVariable serializeVariableText(String text, 469 UnlinkedVariable serializeVariableText(String text,
463 {String variableName: 'v', bool allowErrors: false}) { 470 {String variableName: 'v', bool allowErrors: false}) {
464 serializeLibraryText(text, allowErrors: allowErrors); 471 serializeLibraryText(text, allowErrors: allowErrors);
465 return findVariable(variableName, failIfAbsent: true); 472 return findVariable(variableName, failIfAbsent: true);
(...skipping 1229 matching lines...) Expand 10 before | Expand all | Expand 10 after
1695 allowTypeParameters: true); 1702 allowTypeParameters: true);
1696 expect(typeRef.typeArguments, hasLength(2)); 1703 expect(typeRef.typeArguments, hasLength(2));
1697 checkTypeRef(typeRef.typeArguments[0], 'dart:core', 'dart:core', 'int'); 1704 checkTypeRef(typeRef.typeArguments[0], 'dart:core', 'dart:core', 'int');
1698 checkTypeRef(typeRef.typeArguments[1], 'dart:core', 'dart:core', 'Object'); 1705 checkTypeRef(typeRef.typeArguments[1], 'dart:core', 'dart:core', 'Object');
1699 } 1706 }
1700 1707
1701 test_type_dynamic() { 1708 test_type_dynamic() {
1702 checkDynamicTypeRef(serializeTypeText('dynamic')); 1709 checkDynamicTypeRef(serializeTypeText('dynamic'));
1703 } 1710 }
1704 1711
1712 test_type_reference_from_part() {
1713 addNamedSource('/a.dart', 'part of foo; C v;');
1714 serializeLibraryText('library foo; part "a.dart"; class C {}');
1715 checkTypeRef(
1716 findVariable('v', variables: lib.units[1].unlinked.variables).type,
1717 null,
1718 null,
1719 'C',
1720 expectedKind: PrelinkedReferenceKind.classOrEnum,
1721 sourceUnit: lib.units[1]);
1722 }
1723
1705 test_type_reference_to_class_argument() { 1724 test_type_reference_to_class_argument() {
1706 UnlinkedClass cls = serializeClassText('class C<T, U> { T t; U u; }'); 1725 UnlinkedClass cls = serializeClassText('class C<T, U> { T t; U u; }');
1707 { 1726 {
1708 UnlinkedTypeRef typeRef = 1727 UnlinkedTypeRef typeRef =
1709 findVariable('t', variables: cls.fields, failIfAbsent: true).type; 1728 findVariable('t', variables: cls.fields, failIfAbsent: true).type;
1710 checkParamTypeRef(typeRef, 2); 1729 checkParamTypeRef(typeRef, 2);
1711 } 1730 }
1712 { 1731 {
1713 UnlinkedTypeRef typeRef = 1732 UnlinkedTypeRef typeRef =
1714 findVariable('u', variables: cls.fields, failIfAbsent: true).type; 1733 findVariable('u', variables: cls.fields, failIfAbsent: true).type;
(...skipping 21 matching lines...) Expand all
1736 1755
1737 test_type_reference_to_imported_part() { 1756 test_type_reference_to_imported_part() {
1738 addNamedSource('/a.dart', 'library my.lib; part "b.dart";'); 1757 addNamedSource('/a.dart', 'library my.lib; part "b.dart";');
1739 addNamedSource('/b.dart', 'part of my.lib; class C {}'); 1758 addNamedSource('/b.dart', 'part of my.lib; class C {}');
1740 checkTypeRef( 1759 checkTypeRef(
1741 serializeTypeText('C', 1760 serializeTypeText('C',
1742 otherDeclarations: 'library my.lib; import "a.dart";'), 1761 otherDeclarations: 'library my.lib; import "a.dart";'),
1743 absUri('/a.dart'), 1762 absUri('/a.dart'),
1744 'a.dart', 1763 'a.dart',
1745 'C', 1764 'C',
1746 expectedUnit: 1); 1765 expectedTargetUnit: 1);
1747 } 1766 }
1748 1767
1749 test_type_reference_to_imported_part_with_prefix() { 1768 test_type_reference_to_imported_part_with_prefix() {
1750 addNamedSource('/a.dart', 'library my.lib; part "b.dart";'); 1769 addNamedSource('/a.dart', 'library my.lib; part "b.dart";');
1751 addNamedSource('/b.dart', 'part of my.lib; class C {}'); 1770 addNamedSource('/b.dart', 'part of my.lib; class C {}');
1752 checkTypeRef( 1771 checkTypeRef(
1753 serializeTypeText('p.C', 1772 serializeTypeText('p.C',
1754 otherDeclarations: 'library my.lib; import "a.dart" as p;'), 1773 otherDeclarations: 'library my.lib; import "a.dart" as p;'),
1755 absUri('/a.dart'), 1774 absUri('/a.dart'),
1756 'a.dart', 1775 'a.dart',
1757 'C', 1776 'C',
1758 expectedPrefix: 'p', 1777 expectedPrefix: 'p',
1759 expectedUnit: 1); 1778 expectedTargetUnit: 1);
1760 } 1779 }
1761 1780
1762 test_type_reference_to_internal_class() { 1781 test_type_reference_to_internal_class() {
1763 checkTypeRef(serializeTypeText('C', otherDeclarations: 'class C {}'), null, 1782 checkTypeRef(serializeTypeText('C', otherDeclarations: 'class C {}'), null,
1764 null, 'C'); 1783 null, 'C');
1765 } 1784 }
1766 1785
1767 test_type_reference_to_internal_class_alias() { 1786 test_type_reference_to_internal_class_alias() {
1768 checkTypeRef( 1787 checkTypeRef(
1769 serializeTypeText('C', 1788 serializeTypeText('C',
1770 otherDeclarations: 'class C = D with E; class D {} class E {}'), 1789 otherDeclarations: 'class C = D with E; class D {} class E {}'),
1771 null, 1790 null,
1772 null, 1791 null,
1773 'C'); 1792 'C');
1774 } 1793 }
1775 1794
1776 test_type_reference_to_internal_enum() { 1795 test_type_reference_to_internal_enum() {
1777 checkTypeRef(serializeTypeText('E', otherDeclarations: 'enum E { value }'), 1796 checkTypeRef(serializeTypeText('E', otherDeclarations: 'enum E { value }'),
1778 null, null, 'E'); 1797 null, null, 'E');
1779 } 1798 }
1780 1799
1781 test_type_reference_to_local_part() { 1800 test_type_reference_to_local_part() {
1782 addNamedSource('/a.dart', 'part of my.lib; class C {}'); 1801 addNamedSource('/a.dart', 'part of my.lib; class C {}');
1783 checkTypeRef( 1802 checkTypeRef(
1784 serializeTypeText('C', 1803 serializeTypeText('C',
1785 otherDeclarations: 'library my.lib; part "a.dart";'), 1804 otherDeclarations: 'library my.lib; part "a.dart";'),
1786 null, 1805 null,
1787 null, 1806 null,
1788 'C', 1807 'C',
1789 expectedUnit: 1); 1808 expectedTargetUnit: 1);
1790 } 1809 }
1791 1810
1792 test_type_reference_to_nonexistent_file_via_prefix() { 1811 test_type_reference_to_nonexistent_file_via_prefix() {
1793 UnlinkedTypeRef typeRef = serializeTypeText('p.C', 1812 UnlinkedTypeRef typeRef = serializeTypeText('p.C',
1794 otherDeclarations: 'import "foo.dart" as p;', allowErrors: true); 1813 otherDeclarations: 'import "foo.dart" as p;', allowErrors: true);
1795 checkUnresolvedTypeRef(typeRef, 'p', 'C'); 1814 checkUnresolvedTypeRef(typeRef, 'p', 'C');
1796 } 1815 }
1797 1816
1817 test_type_reference_to_part() {
1818 addNamedSource('/a.dart', 'part of foo; class C {}');
1819 checkTypeRef(
1820 serializeTypeText('C',
1821 otherDeclarations: 'library foo; part "a.dart";'),
1822 null,
1823 null,
1824 'C',
1825 expectedKind: PrelinkedReferenceKind.classOrEnum,
1826 expectedTargetUnit: 1);
1827 }
1828
1798 test_type_reference_to_typedef() { 1829 test_type_reference_to_typedef() {
1799 checkTypeRef(serializeTypeText('F', otherDeclarations: 'typedef void F();'), 1830 checkTypeRef(serializeTypeText('F', otherDeclarations: 'typedef void F();'),
1800 null, null, 'F', 1831 null, null, 'F',
1801 expectedKind: PrelinkedReferenceKind.typedef); 1832 expectedKind: PrelinkedReferenceKind.typedef);
1802 } 1833 }
1803 1834
1804 test_type_unit_counts_unreferenced_units() { 1835 test_type_unit_counts_unreferenced_units() {
1805 addNamedSource('/a.dart', 'library a; part "b.dart"; part "c.dart";'); 1836 addNamedSource('/a.dart', 'library a; part "b.dart"; part "c.dart";');
1806 addNamedSource('/b.dart', 'part of a;'); 1837 addNamedSource('/b.dart', 'part of a;');
1807 addNamedSource('/c.dart', 'part of a; class C {}'); 1838 addNamedSource('/c.dart', 'part of a; class C {}');
1808 UnlinkedTypeRef typeRef = 1839 UnlinkedTypeRef typeRef =
1809 serializeTypeText('C', otherDeclarations: 'import "a.dart";'); 1840 serializeTypeText('C', otherDeclarations: 'import "a.dart";');
1810 // The referenced unit should be 2, since unit 0 is a.dart and unit 1 is 1841 // The referenced unit should be 2, since unit 0 is a.dart and unit 1 is
1811 // b.dart. a.dart and b.dart are counted even though nothing is imported 1842 // b.dart. a.dart and b.dart are counted even though nothing is imported
1812 // from them. 1843 // from them.
1813 checkTypeRef(typeRef, absUri('/a.dart'), 'a.dart', 'C', expectedUnit: 2); 1844 checkTypeRef(typeRef, absUri('/a.dart'), 'a.dart', 'C',
1845 expectedTargetUnit: 2);
1814 } 1846 }
1815 1847
1816 test_type_unresolved() { 1848 test_type_unresolved() {
1817 UnlinkedTypeRef typeRef = serializeTypeText('Foo', allowErrors: true); 1849 UnlinkedTypeRef typeRef = serializeTypeText('Foo', allowErrors: true);
1818 checkUnresolvedTypeRef(typeRef, null, 'Foo'); 1850 checkUnresolvedTypeRef(typeRef, null, 'Foo');
1819 } 1851 }
1820 1852
1821 test_typedef_name() { 1853 test_typedef_name() {
1822 UnlinkedTypedef type = serializeTypedefText('typedef F();'); 1854 UnlinkedTypedef type = serializeTypedefText('typedef F();');
1823 expect(type.name, 'F'); 1855 expect(type.name, 'F');
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
1936 serializeClassText('class C { static int i; }').fields[0]; 1968 serializeClassText('class C { static int i; }').fields[0];
1937 expect(variable.isStatic, isTrue); 1969 expect(variable.isStatic, isTrue);
1938 } 1970 }
1939 1971
1940 test_variable_type() { 1972 test_variable_type() {
1941 UnlinkedVariable variable = 1973 UnlinkedVariable variable =
1942 serializeVariableText('int i;', variableName: 'i'); 1974 serializeVariableText('int i;', variableName: 'i');
1943 checkTypeRef(variable.type, 'dart:core', 'dart:core', 'int'); 1975 checkTypeRef(variable.type, 'dart:core', 'dart:core', 'int');
1944 } 1976 }
1945 } 1977 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/summary/summarize_elements.dart ('k') | pkg/analyzer/tool/summary/idl.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698