| OLD | NEW |
| 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.test.src.context.context_test; | 5 library analyzer.test.src.context.context_test; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 import 'dart:collection'; |
| 8 | 9 |
| 9 import 'package:analyzer/dart/ast/ast.dart'; | 10 import 'package:analyzer/dart/ast/ast.dart'; |
| 10 import 'package:analyzer/dart/element/element.dart'; | 11 import 'package:analyzer/dart/element/element.dart'; |
| 11 import 'package:analyzer/dart/element/type.dart'; | 12 import 'package:analyzer/dart/element/type.dart'; |
| 13 import 'package:analyzer/dart/element/visitor.dart'; |
| 12 import 'package:analyzer/file_system/memory_file_system.dart'; | 14 import 'package:analyzer/file_system/memory_file_system.dart'; |
| 13 import 'package:analyzer/source/package_map_resolver.dart'; | 15 import 'package:analyzer/source/package_map_resolver.dart'; |
| 14 import 'package:analyzer/src/cancelable_future.dart'; | 16 import 'package:analyzer/src/cancelable_future.dart'; |
| 15 import 'package:analyzer/src/context/cache.dart'; | 17 import 'package:analyzer/src/context/cache.dart'; |
| 16 import 'package:analyzer/src/context/context.dart'; | 18 import 'package:analyzer/src/context/context.dart'; |
| 17 import 'package:analyzer/src/generated/engine.dart'; | 19 import 'package:analyzer/src/generated/engine.dart'; |
| 18 import 'package:analyzer/src/generated/error.dart'; | 20 import 'package:analyzer/src/generated/error.dart'; |
| 19 import 'package:analyzer/src/generated/java_engine.dart'; | 21 import 'package:analyzer/src/generated/java_engine.dart'; |
| 20 import 'package:analyzer/src/generated/resolver.dart'; | 22 import 'package:analyzer/src/generated/resolver.dart'; |
| 21 import 'package:analyzer/src/generated/scanner.dart'; | 23 import 'package:analyzer/src/generated/scanner.dart'; |
| (...skipping 1973 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1995 sdkResolver, | 1997 sdkResolver, |
| 1996 resourceResolver, | 1998 resourceResolver, |
| 1997 new PackageMapUriResolver(resourceProvider, { | 1999 new PackageMapUriResolver(resourceProvider, { |
| 1998 'crypto': [resourceProvider.getFolder('/pkgs/crypto-2/lib')] | 2000 'crypto': [resourceProvider.getFolder('/pkgs/crypto-2/lib')] |
| 1999 }) | 2001 }) |
| 2000 ]); | 2002 ]); |
| 2001 _analyzeAll_assertFinished(); | 2003 _analyzeAll_assertFinished(); |
| 2002 _assertNoExceptions(); | 2004 _assertNoExceptions(); |
| 2003 } | 2005 } |
| 2004 | 2006 |
| 2007 void test_resolveCompilationUnit_existingElementModel() { |
| 2008 Source source = addSource( |
| 2009 '/test.dart', |
| 2010 r''' |
| 2011 library test; |
| 2012 |
| 2013 String topLevelVariable; |
| 2014 int get topLevelGetter => 0; |
| 2015 void set topLevelSetter(int value) {} |
| 2016 String topLevelFunction(int i) => ''; |
| 2017 |
| 2018 typedef String FunctionTypeAlias(int i); |
| 2019 |
| 2020 enum EnumeratedType {Invalid, Valid} |
| 2021 |
| 2022 class ClassOne { |
| 2023 int instanceField; |
| 2024 static int staticField; |
| 2025 |
| 2026 ClassOne(); |
| 2027 ClassOne.named(); |
| 2028 |
| 2029 int get instanceGetter => 0; |
| 2030 static String get staticGetter => ''; |
| 2031 |
| 2032 void set instanceSetter(int value) {} |
| 2033 static void set staticSetter(int value) {} |
| 2034 |
| 2035 int instanceMethod(int first, [int second = 0]) { |
| 2036 int localVariable; |
| 2037 int localFunction(String s) {} |
| 2038 } |
| 2039 static String staticMethod(int first, {int second: 0}) => ''; |
| 2040 } |
| 2041 |
| 2042 class ClassTwo { |
| 2043 // Implicit no-argument constructor |
| 2044 } |
| 2045 '''); |
| 2046 context.resolveCompilationUnit2(source, source); |
| 2047 LibraryElement firstElement = context.computeLibraryElement(source); |
| 2048 _ElementGatherer gatherer = new _ElementGatherer(); |
| 2049 firstElement.accept(gatherer); |
| 2050 |
| 2051 CacheEntry entry = |
| 2052 context.analysisCache.get(new LibrarySpecificUnit(source, source)); |
| 2053 entry.setState(RESOLVED_UNIT1, CacheState.FLUSHED); |
| 2054 entry.setState(RESOLVED_UNIT2, CacheState.FLUSHED); |
| 2055 entry.setState(RESOLVED_UNIT3, CacheState.FLUSHED); |
| 2056 entry.setState(RESOLVED_UNIT4, CacheState.FLUSHED); |
| 2057 entry.setState(RESOLVED_UNIT5, CacheState.FLUSHED); |
| 2058 entry.setState(RESOLVED_UNIT6, CacheState.FLUSHED); |
| 2059 entry.setState(RESOLVED_UNIT7, CacheState.FLUSHED); |
| 2060 entry.setState(RESOLVED_UNIT8, CacheState.FLUSHED); |
| 2061 entry.setState(RESOLVED_UNIT9, CacheState.FLUSHED); |
| 2062 entry.setState(RESOLVED_UNIT10, CacheState.FLUSHED); |
| 2063 entry.setState(RESOLVED_UNIT11, CacheState.FLUSHED); |
| 2064 entry.setState(RESOLVED_UNIT, CacheState.FLUSHED); |
| 2065 |
| 2066 context.resolveCompilationUnit2(source, source); |
| 2067 LibraryElement secondElement = context.computeLibraryElement(source); |
| 2068 _ElementComparer comparer = new _ElementComparer(gatherer.elements); |
| 2069 secondElement.accept(comparer); |
| 2070 comparer.expectNoDifferences(); |
| 2071 } |
| 2072 |
| 2005 void test_resolveCompilationUnit_import_relative() { | 2073 void test_resolveCompilationUnit_import_relative() { |
| 2006 Source sourceA = | 2074 Source sourceA = |
| 2007 addSource("/libA.dart", "library libA; import 'libB.dart'; class A{}"); | 2075 addSource("/libA.dart", "library libA; import 'libB.dart'; class A{}"); |
| 2008 addSource("/libB.dart", "library libB; class B{}"); | 2076 addSource("/libB.dart", "library libB; class B{}"); |
| 2009 CompilationUnit compilationUnit = | 2077 CompilationUnit compilationUnit = |
| 2010 context.resolveCompilationUnit2(sourceA, sourceA); | 2078 context.resolveCompilationUnit2(sourceA, sourceA); |
| 2011 expect(compilationUnit, isNotNull); | 2079 expect(compilationUnit, isNotNull); |
| 2012 LibraryElement library = compilationUnit.element.library; | 2080 LibraryElement library = compilationUnit.element.library; |
| 2013 List<LibraryElement> importedLibraries = library.importedLibraries; | 2081 List<LibraryElement> importedLibraries = library.importedLibraries; |
| 2014 assertNamedElements(importedLibraries, ["dart.core", "libB"]); | 2082 assertNamedElements(importedLibraries, ["dart.core", "libB"]); |
| (...skipping 709 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2724 int get modificationStamp => stamp; | 2792 int get modificationStamp => stamp; |
| 2725 } | 2793 } |
| 2726 | 2794 |
| 2727 class _AnalysisContextImplTest_test_applyChanges_removeContainer | 2795 class _AnalysisContextImplTest_test_applyChanges_removeContainer |
| 2728 implements SourceContainer { | 2796 implements SourceContainer { |
| 2729 Source libB; | 2797 Source libB; |
| 2730 _AnalysisContextImplTest_test_applyChanges_removeContainer(this.libB); | 2798 _AnalysisContextImplTest_test_applyChanges_removeContainer(this.libB); |
| 2731 @override | 2799 @override |
| 2732 bool contains(Source source) => source == libB; | 2800 bool contains(Source source) => source == libB; |
| 2733 } | 2801 } |
| 2802 |
| 2803 /** |
| 2804 * A visitor that can be used to compare all of the elements in an element model |
| 2805 * with a previously created map of elements. The class [ElementGatherer] can be |
| 2806 * used to create the map of elements. |
| 2807 */ |
| 2808 class _ElementComparer extends GeneralizingElementVisitor { |
| 2809 /** |
| 2810 * The previously created map of elements. |
| 2811 */ |
| 2812 final Map<Element, Element> previousElements; |
| 2813 |
| 2814 /** |
| 2815 * The number of elements that were found to have been overwritten. |
| 2816 */ |
| 2817 int overwrittenCount = 0; |
| 2818 |
| 2819 /** |
| 2820 * A buffer to which a description of the overwritten elements will be written
. |
| 2821 */ |
| 2822 final StringBuffer buffer = new StringBuffer(); |
| 2823 |
| 2824 /** |
| 2825 * Initialize a newly created visitor. |
| 2826 */ |
| 2827 _ElementComparer(this.previousElements); |
| 2828 |
| 2829 /** |
| 2830 * Expect that no differences were found, causing the test to fail if that |
| 2831 * wasn't the case. |
| 2832 */ |
| 2833 void expectNoDifferences() { |
| 2834 if (overwrittenCount > 0) { |
| 2835 fail('Found $overwrittenCount overwritten elements.$buffer'); |
| 2836 } |
| 2837 } |
| 2838 |
| 2839 @override |
| 2840 void visitElement(Element element) { |
| 2841 Element previousElement = previousElements[element]; |
| 2842 if (!identical(previousElement, element)) { |
| 2843 if (overwrittenCount == 0) { |
| 2844 buffer.writeln(); |
| 2845 } |
| 2846 overwrittenCount++; |
| 2847 buffer.writeln('Overwritten element:'); |
| 2848 Element currentElement = element; |
| 2849 while (currentElement != null) { |
| 2850 buffer.write(' '); |
| 2851 buffer.writeln(currentElement.toString()); |
| 2852 currentElement = currentElement.enclosingElement; |
| 2853 } |
| 2854 } |
| 2855 super.visitElement(element); |
| 2856 } |
| 2857 } |
| 2858 |
| 2859 /** |
| 2860 * A visitor that can be used to collect all of the elements in an element |
| 2861 * model. |
| 2862 */ |
| 2863 class _ElementGatherer extends GeneralizingElementVisitor { |
| 2864 /** |
| 2865 * The map in which the elements are collected. The value of each key is the |
| 2866 * key itself. |
| 2867 */ |
| 2868 Map<Element, Element> elements = new HashMap<Element, Element>(); |
| 2869 |
| 2870 /** |
| 2871 * Initialize the visitor. |
| 2872 */ |
| 2873 _ElementGatherer(); |
| 2874 |
| 2875 @override |
| 2876 void visitElement(Element element) { |
| 2877 elements[element] = element; |
| 2878 super.visitElement(element); |
| 2879 } |
| 2880 } |
| OLD | NEW |