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

Side by Side Diff: pkg/analyzer/test/src/context/context_test.dart

Issue 1633233002: Stop creating duplicate enum members when the element model has already been built (Closed) Base URL: https://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.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
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
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 }
OLDNEW
« pkg/analyzer/lib/src/task/dart.dart ('K') | « pkg/analyzer/lib/src/task/dart.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698