| OLD | NEW |
| 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 summary_resynthesizer; | 5 library summary_resynthesizer; |
| 6 | 6 |
| 7 import 'dart:collection'; | 7 import 'dart:collection'; |
| 8 | 8 |
| 9 import 'package:analyzer/dart/ast/ast.dart'; | 9 import 'package:analyzer/dart/ast/ast.dart'; |
| 10 import 'package:analyzer/dart/ast/standard_ast_factory.dart'; | 10 import 'package:analyzer/dart/ast/standard_ast_factory.dart'; |
| (...skipping 808 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 819 } | 819 } |
| 820 | 820 |
| 821 @override | 821 @override |
| 822 AnalysisContext get context => enclosingElement.context; | 822 AnalysisContext get context => enclosingElement.context; |
| 823 | 823 |
| 824 @override | 824 @override |
| 825 ElementLocation get location => actualElement.location; | 825 ElementLocation get location => actualElement.location; |
| 826 } | 826 } |
| 827 | 827 |
| 828 /** | 828 /** |
| 829 * Local variable element that has been resynthesized from a summary. The | |
| 830 * actual element won't be constructed until it is requested. But properties | |
| 831 * [context] and [enclosingElement] can be used without creating the actual | |
| 832 * element. | |
| 833 */ | |
| 834 class _DeferredLocalVariableElement extends LocalVariableElementHandle { | |
| 835 /** | |
| 836 * The executable element containing this element. | |
| 837 */ | |
| 838 @override | |
| 839 final ExecutableElement enclosingElement; | |
| 840 | |
| 841 /** | |
| 842 * The index of this variable within [ExecutableElement.localVariables]. | |
| 843 */ | |
| 844 final int _localIndex; | |
| 845 | |
| 846 _DeferredLocalVariableElement(this.enclosingElement, this._localIndex) | |
| 847 : super(null, null); | |
| 848 | |
| 849 @override | |
| 850 LocalVariableElement get actualElement => | |
| 851 enclosingElement.localVariables[_localIndex]; | |
| 852 | |
| 853 @override | |
| 854 AnalysisContext get context => enclosingElement.context; | |
| 855 | |
| 856 @override | |
| 857 ElementLocation get location => actualElement.location; | |
| 858 } | |
| 859 | |
| 860 /** | |
| 861 * An instance of [_LibraryResynthesizer] is responsible for resynthesizing the | 829 * An instance of [_LibraryResynthesizer] is responsible for resynthesizing the |
| 862 * elements in a single library from that library's summary. | 830 * elements in a single library from that library's summary. |
| 863 */ | 831 */ |
| 864 class _LibraryResynthesizer { | 832 class _LibraryResynthesizer { |
| 865 /** | 833 /** |
| 866 * The [SummaryResynthesizer] which is being used to obtain summaries. | 834 * The [SummaryResynthesizer] which is being used to obtain summaries. |
| 867 */ | 835 */ |
| 868 final SummaryResynthesizer summaryResynthesizer; | 836 final SummaryResynthesizer summaryResynthesizer; |
| 869 | 837 |
| 870 /** | 838 /** |
| (...skipping 1012 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1883 case ReferenceKind.typedef: | 1851 case ReferenceKind.typedef: |
| 1884 element = new FunctionTypeAliasElementHandle( | 1852 element = new FunctionTypeAliasElementHandle( |
| 1885 summaryResynthesizer, location); | 1853 summaryResynthesizer, location); |
| 1886 isDeclarableType = true; | 1854 isDeclarableType = true; |
| 1887 break; | 1855 break; |
| 1888 case ReferenceKind.genericFunctionTypedef: | 1856 case ReferenceKind.genericFunctionTypedef: |
| 1889 element = new GenericTypeAliasElementHandle( | 1857 element = new GenericTypeAliasElementHandle( |
| 1890 summaryResynthesizer, location); | 1858 summaryResynthesizer, location); |
| 1891 isDeclarableType = true; | 1859 isDeclarableType = true; |
| 1892 break; | 1860 break; |
| 1893 case ReferenceKind.variable: | |
| 1894 Element enclosingElement = enclosingInfo.element; | |
| 1895 if (enclosingElement is ExecutableElement) { | |
| 1896 element = new _DeferredLocalVariableElement( | |
| 1897 enclosingElement, linkedReference.localIndex); | |
| 1898 } else { | |
| 1899 throw new StateError('Unexpected element enclosing variable:' | |
| 1900 ' ${enclosingElement.runtimeType}'); | |
| 1901 } | |
| 1902 break; | |
| 1903 case ReferenceKind.function: | 1861 case ReferenceKind.function: |
| 1904 Element enclosingElement = enclosingInfo.element; | 1862 Element enclosingElement = enclosingInfo.element; |
| 1905 if (enclosingElement is VariableElement) { | 1863 if (enclosingElement is VariableElement) { |
| 1906 element = new _DeferredInitializerElement(enclosingElement); | 1864 element = new _DeferredInitializerElement(enclosingElement); |
| 1907 } else if (enclosingElement is ExecutableElement) { | 1865 } else if (enclosingElement is ExecutableElement) { |
| 1908 element = new _DeferredLocalFunctionElement( | 1866 element = new _DeferredLocalFunctionElement( |
| 1909 enclosingElement, linkedReference.localIndex); | 1867 enclosingElement, linkedReference.localIndex); |
| 1910 } else { | 1868 } else { |
| 1911 throw new StateError('Unexpected element enclosing function:' | 1869 throw new StateError('Unexpected element enclosing function:' |
| 1912 ' ${enclosingElement.runtimeType}'); | 1870 ' ${enclosingElement.runtimeType}'); |
| 1913 } | 1871 } |
| 1914 break; | 1872 break; |
| 1915 case ReferenceKind.prefix: | 1873 case ReferenceKind.prefix: |
| 1916 element = new PrefixElementHandle(summaryResynthesizer, location); | 1874 element = new PrefixElementHandle(summaryResynthesizer, location); |
| 1917 break; | 1875 break; |
| 1876 case ReferenceKind.variable: |
| 1918 case ReferenceKind.unresolved: | 1877 case ReferenceKind.unresolved: |
| 1919 break; | 1878 break; |
| 1920 } | 1879 } |
| 1921 } | 1880 } |
| 1922 result = new _ReferenceInfo(libraryResynthesizer, enclosingInfo, name, | 1881 result = new _ReferenceInfo(libraryResynthesizer, enclosingInfo, name, |
| 1923 isDeclarableType, element, type, numTypeParameters); | 1882 isDeclarableType, element, type, numTypeParameters); |
| 1924 referenceInfos[index] = result; | 1883 referenceInfos[index] = result; |
| 1925 } | 1884 } |
| 1926 return result; | 1885 return result; |
| 1927 } | 1886 } |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2012 static String _getElementIdentifier(String name, ReferenceKind kind) { | 1971 static String _getElementIdentifier(String name, ReferenceKind kind) { |
| 2013 if (kind == ReferenceKind.topLevelPropertyAccessor || | 1972 if (kind == ReferenceKind.topLevelPropertyAccessor || |
| 2014 kind == ReferenceKind.propertyAccessor) { | 1973 kind == ReferenceKind.propertyAccessor) { |
| 2015 if (!name.endsWith('=')) { | 1974 if (!name.endsWith('=')) { |
| 2016 return name + '?'; | 1975 return name + '?'; |
| 2017 } | 1976 } |
| 2018 } | 1977 } |
| 2019 return name; | 1978 return name; |
| 2020 } | 1979 } |
| 2021 } | 1980 } |
| OLD | NEW |