| 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 engine.resolver_test; | 5 library engine.resolver_test; |
| 6 | 6 |
| 7 import 'dart:collection'; | 7 import 'dart:collection'; |
| 8 import 'package:analyzer/src/generated/java_core.dart'; | 8 import 'package:analyzer/src/generated/java_core.dart'; |
| 9 import 'package:analyzer/src/generated/java_engine.dart'; | 9 import 'package:analyzer/src/generated/java_engine.dart'; |
| 10 import 'package:analyzer/src/generated/java_engine_io.dart'; | 10 import 'package:analyzer/src/generated/java_engine_io.dart'; |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 81 context.sourceFactory = sourceFactory; | 81 context.sourceFactory = sourceFactory; |
| 82 AnalysisContext coreContext = sdk.context; | 82 AnalysisContext coreContext = sdk.context; |
| 83 // | 83 // |
| 84 // dart:core | 84 // dart:core |
| 85 // | 85 // |
| 86 TestTypeProvider provider = new TestTypeProvider(); | 86 TestTypeProvider provider = new TestTypeProvider(); |
| 87 CompilationUnitElementImpl coreUnit = new CompilationUnitElementImpl("core.d
art"); | 87 CompilationUnitElementImpl coreUnit = new CompilationUnitElementImpl("core.d
art"); |
| 88 Source coreSource = sourceFactory.forUri(DartSdk.DART_CORE); | 88 Source coreSource = sourceFactory.forUri(DartSdk.DART_CORE); |
| 89 coreContext.setContents(coreSource, ""); | 89 coreContext.setContents(coreSource, ""); |
| 90 coreUnit.source = coreSource; | 90 coreUnit.source = coreSource; |
| 91 ClassElementImpl proxyClassElement = ElementFactory.classElement2("_Proxy",
[]); | 91 ClassElementImpl proxyClassElement = ElementFactory.classElement2("_Proxy"); |
| 92 coreUnit.types = <ClassElement> [ | 92 coreUnit.types = <ClassElement> [ |
| 93 provider.boolType.element, | 93 provider.boolType.element, |
| 94 provider.deprecatedType.element, | 94 provider.deprecatedType.element, |
| 95 provider.doubleType.element, | 95 provider.doubleType.element, |
| 96 provider.functionType.element, | 96 provider.functionType.element, |
| 97 provider.intType.element, | 97 provider.intType.element, |
| 98 provider.listType.element, | 98 provider.listType.element, |
| 99 provider.mapType.element, | 99 provider.mapType.element, |
| 100 provider.nullType.element, | 100 provider.nullType.element, |
| 101 provider.numType.element, | 101 provider.numType.element, |
| (...skipping 18 matching lines...) Expand all Loading... |
| 120 // dart:async | 120 // dart:async |
| 121 // | 121 // |
| 122 CompilationUnitElementImpl asyncUnit = new CompilationUnitElementImpl("async
.dart"); | 122 CompilationUnitElementImpl asyncUnit = new CompilationUnitElementImpl("async
.dart"); |
| 123 Source asyncSource = sourceFactory.forUri(DartSdk.DART_ASYNC); | 123 Source asyncSource = sourceFactory.forUri(DartSdk.DART_ASYNC); |
| 124 coreContext.setContents(asyncSource, ""); | 124 coreContext.setContents(asyncSource, ""); |
| 125 asyncUnit.source = asyncSource; | 125 asyncUnit.source = asyncSource; |
| 126 // Future | 126 // Future |
| 127 ClassElementImpl futureElement = ElementFactory.classElement2("Future", ["T"
]); | 127 ClassElementImpl futureElement = ElementFactory.classElement2("Future", ["T"
]); |
| 128 InterfaceType futureType = futureElement.type; | 128 InterfaceType futureType = futureElement.type; |
| 129 // factory Future.value([value]) | 129 // factory Future.value([value]) |
| 130 ConstructorElementImpl futureConstructor = ElementFactory.constructorElement
2(futureElement, "value", []); | 130 ConstructorElementImpl futureConstructor = ElementFactory.constructorElement
2(futureElement, "value"); |
| 131 futureConstructor.parameters = <ParameterElement> [ElementFactory.positional
Parameter2("value", provider.dynamicType)]; | 131 futureConstructor.parameters = <ParameterElement> [ElementFactory.positional
Parameter2("value", provider.dynamicType)]; |
| 132 futureConstructor.factory = true; | 132 futureConstructor.factory = true; |
| 133 (futureConstructor.type as FunctionTypeImpl).typeArguments = futureElement.t
ype.typeArguments; | 133 (futureConstructor.type as FunctionTypeImpl).typeArguments = futureElement.t
ype.typeArguments; |
| 134 futureElement.constructors = <ConstructorElement> [futureConstructor]; | 134 futureElement.constructors = <ConstructorElement> [futureConstructor]; |
| 135 // Future then(onValue(T value), { Function onError }); | 135 // Future then(onValue(T value), { Function onError }); |
| 136 List<ParameterElement> parameters = <ParameterElement> [ElementFactory.requi
redParameter2("value", futureElement.typeParameters[0].type)]; | 136 List<ParameterElement> parameters = <ParameterElement> [ElementFactory.requi
redParameter2("value", futureElement.typeParameters[0].type)]; |
| 137 FunctionTypeAliasElementImpl aliasElement = new FunctionTypeAliasElementImpl
.forNode(null); | 137 FunctionTypeAliasElementImpl aliasElement = new FunctionTypeAliasElementImpl
.forNode(null); |
| 138 aliasElement.synthetic = true; | 138 aliasElement.synthetic = true; |
| 139 aliasElement.shareParameters(parameters); | 139 aliasElement.shareParameters(parameters); |
| 140 aliasElement.returnType = provider.dynamicType; | 140 aliasElement.returnType = provider.dynamicType; |
| 141 FunctionTypeImpl aliasType = new FunctionTypeImpl.con2(aliasElement); | 141 FunctionTypeImpl aliasType = new FunctionTypeImpl.con2(aliasElement); |
| 142 aliasElement.shareTypeParameters(futureElement.typeParameters); | 142 aliasElement.shareTypeParameters(futureElement.typeParameters); |
| 143 aliasType.typeArguments = futureElement.type.typeArguments; | 143 aliasType.typeArguments = futureElement.type.typeArguments; |
| 144 MethodElement thenMethod = ElementFactory.methodElementWithParameters("then"
, futureElement.type.typeArguments, futureType, [ | 144 MethodElement thenMethod = ElementFactory.methodElementWithParameters("then"
, futureElement.type.typeArguments, futureType, [ |
| 145 ElementFactory.requiredParameter2("onValue", aliasType), | 145 ElementFactory.requiredParameter2("onValue", aliasType), |
| 146 ElementFactory.namedParameter2("onError", provider.functionType)]); | 146 ElementFactory.namedParameter2("onError", provider.functionType)]); |
| 147 futureElement.methods = <MethodElement> [thenMethod]; | 147 futureElement.methods = <MethodElement> [thenMethod]; |
| 148 // Completer | 148 // Completer |
| 149 ClassElementImpl completerElement = ElementFactory.classElement2("Completer"
, ["T"]); | 149 ClassElementImpl completerElement = ElementFactory.classElement2("Completer"
, ["T"]); |
| 150 ConstructorElementImpl completerConstructor = ElementFactory.constructorElem
ent2(completerElement, null, []); | 150 ConstructorElementImpl completerConstructor = ElementFactory.constructorElem
ent2(completerElement, null); |
| 151 (completerConstructor.type as FunctionTypeImpl).typeArguments = completerEle
ment.type.typeArguments; | 151 (completerConstructor.type as FunctionTypeImpl).typeArguments = completerEle
ment.type.typeArguments; |
| 152 completerElement.constructors = <ConstructorElement> [completerConstructor]; | 152 completerElement.constructors = <ConstructorElement> [completerConstructor]; |
| 153 asyncUnit.types = <ClassElement> [ | 153 asyncUnit.types = <ClassElement> [ |
| 154 completerElement, | 154 completerElement, |
| 155 futureElement, | 155 futureElement, |
| 156 ElementFactory.classElement2("Stream", ["T"])]; | 156 ElementFactory.classElement2("Stream", ["T"])]; |
| 157 LibraryElementImpl asyncLibrary = new LibraryElementImpl.forNode(coreContext
, AstFactory.libraryIdentifier2(["dart", "async"])); | 157 LibraryElementImpl asyncLibrary = new LibraryElementImpl.forNode(coreContext
, AstFactory.libraryIdentifier2(["dart", "async"])); |
| 158 asyncLibrary.definingCompilationUnit = asyncUnit; | 158 asyncLibrary.definingCompilationUnit = asyncUnit; |
| 159 // | 159 // |
| 160 // dart:html | 160 // dart:html |
| 161 // | 161 // |
| 162 CompilationUnitElementImpl htmlUnit = new CompilationUnitElementImpl("html_d
artium.dart"); | 162 CompilationUnitElementImpl htmlUnit = new CompilationUnitElementImpl("html_d
artium.dart"); |
| 163 Source htmlSource = sourceFactory.forUri(DartSdk.DART_HTML); | 163 Source htmlSource = sourceFactory.forUri(DartSdk.DART_HTML); |
| 164 coreContext.setContents(htmlSource, ""); | 164 coreContext.setContents(htmlSource, ""); |
| 165 htmlUnit.source = htmlSource; | 165 htmlUnit.source = htmlSource; |
| 166 ClassElementImpl elementElement = ElementFactory.classElement2("Element", []
); | 166 ClassElementImpl elementElement = ElementFactory.classElement2("Element"); |
| 167 InterfaceType elementType = elementElement.type; | 167 InterfaceType elementType = elementElement.type; |
| 168 ClassElementImpl canvasElement = ElementFactory.classElement("CanvasElement"
, elementType, []); | 168 ClassElementImpl canvasElement = ElementFactory.classElement("CanvasElement"
, elementType); |
| 169 ClassElementImpl contextElement = ElementFactory.classElement2("CanvasRender
ingContext", []); | 169 ClassElementImpl contextElement = ElementFactory.classElement2("CanvasRender
ingContext"); |
| 170 InterfaceType contextElementType = contextElement.type; | 170 InterfaceType contextElementType = contextElement.type; |
| 171 ClassElementImpl context2dElement = ElementFactory.classElement("CanvasRende
ringContext2D", contextElementType, []); | 171 ClassElementImpl context2dElement = ElementFactory.classElement("CanvasRende
ringContext2D", contextElementType); |
| 172 canvasElement.methods = <MethodElement> [ElementFactory.methodElement("getCo
ntext", contextElementType, [provider.stringType])]; | 172 canvasElement.methods = <MethodElement> [ElementFactory.methodElement("getCo
ntext", contextElementType, [provider.stringType])]; |
| 173 canvasElement.accessors = <PropertyAccessorElement> [ElementFactory.getterEl
ement("context2D", false, context2dElement.type)]; | 173 canvasElement.accessors = <PropertyAccessorElement> [ElementFactory.getterEl
ement("context2D", false, context2dElement.type)]; |
| 174 ClassElementImpl documentElement = ElementFactory.classElement("Document", e
lementType, []); | 174 ClassElementImpl documentElement = ElementFactory.classElement("Document", e
lementType); |
| 175 ClassElementImpl htmlDocumentElement = ElementFactory.classElement("HtmlDocu
ment", documentElement.type, []); | 175 ClassElementImpl htmlDocumentElement = ElementFactory.classElement("HtmlDocu
ment", documentElement.type); |
| 176 htmlDocumentElement.methods = <MethodElement> [ElementFactory.methodElement(
"query", elementType, <DartType> [provider.stringType])]; | 176 htmlDocumentElement.methods = <MethodElement> [ElementFactory.methodElement(
"query", elementType, <DartType> [provider.stringType])]; |
| 177 htmlUnit.types = <ClassElement> [ | 177 htmlUnit.types = <ClassElement> [ |
| 178 ElementFactory.classElement("AnchorElement", elementType, []), | 178 ElementFactory.classElement("AnchorElement", elementType), |
| 179 ElementFactory.classElement("BodyElement", elementType, []), | 179 ElementFactory.classElement("BodyElement", elementType), |
| 180 ElementFactory.classElement("ButtonElement", elementType, []), | 180 ElementFactory.classElement("ButtonElement", elementType), |
| 181 canvasElement, | 181 canvasElement, |
| 182 contextElement, | 182 contextElement, |
| 183 context2dElement, | 183 context2dElement, |
| 184 ElementFactory.classElement("DivElement", elementType, []), | 184 ElementFactory.classElement("DivElement", elementType), |
| 185 documentElement, | 185 documentElement, |
| 186 elementElement, | 186 elementElement, |
| 187 htmlDocumentElement, | 187 htmlDocumentElement, |
| 188 ElementFactory.classElement("InputElement", elementType, []), | 188 ElementFactory.classElement("InputElement", elementType), |
| 189 ElementFactory.classElement("SelectElement", elementType, [])]; | 189 ElementFactory.classElement("SelectElement", elementType)]; |
| 190 htmlUnit.functions = <FunctionElement> [ElementFactory.functionElement3("que
ry", elementElement, <ClassElement> [provider.stringType.element], ClassElementI
mpl.EMPTY_ARRAY)]; | 190 htmlUnit.functions = <FunctionElement> [ElementFactory.functionElement3("que
ry", elementElement, <ClassElement> [provider.stringType.element], ClassElementI
mpl.EMPTY_ARRAY)]; |
| 191 TopLevelVariableElementImpl document = ElementFactory.topLevelVariableElemen
t3("document", false, true, htmlDocumentElement.type); | 191 TopLevelVariableElementImpl document = ElementFactory.topLevelVariableElemen
t3("document", false, true, htmlDocumentElement.type); |
| 192 htmlUnit.topLevelVariables = <TopLevelVariableElement> [document]; | 192 htmlUnit.topLevelVariables = <TopLevelVariableElement> [document]; |
| 193 htmlUnit.accessors = <PropertyAccessorElement> [document.getter]; | 193 htmlUnit.accessors = <PropertyAccessorElement> [document.getter]; |
| 194 LibraryElementImpl htmlLibrary = new LibraryElementImpl.forNode(coreContext,
AstFactory.libraryIdentifier2(["dart", "dom", "html"])); | 194 LibraryElementImpl htmlLibrary = new LibraryElementImpl.forNode(coreContext,
AstFactory.libraryIdentifier2(["dart", "dom", "html"])); |
| 195 htmlLibrary.definingCompilationUnit = htmlUnit; | 195 htmlLibrary.definingCompilationUnit = htmlUnit; |
| 196 // | 196 // |
| 197 // dart:math | 197 // dart:math |
| 198 // | 198 // |
| 199 CompilationUnitElementImpl mathUnit = new CompilationUnitElementImpl("math.d
art"); | 199 CompilationUnitElementImpl mathUnit = new CompilationUnitElementImpl("math.d
art"); |
| 200 Source mathSource = sourceFactory.forUri(_DART_MATH); | 200 Source mathSource = sourceFactory.forUri(_DART_MATH); |
| 201 coreContext.setContents(mathSource, ""); | 201 coreContext.setContents(mathSource, ""); |
| 202 mathUnit.source = mathSource; | 202 mathUnit.source = mathSource; |
| 203 FunctionElement cosElement = ElementFactory.functionElement3("cos", provider
.doubleType.element, <ClassElement> [provider.numType.element], <ClassElement> [
]); | 203 FunctionElement cosElement = ElementFactory.functionElement3("cos", provider
.doubleType.element, <ClassElement>[provider.numType.element], ClassElementImpl.
EMPTY_ARRAY); |
| 204 TopLevelVariableElement ln10Element = ElementFactory.topLevelVariableElement
3("LN10", true, false, provider.doubleType); | 204 TopLevelVariableElement ln10Element = ElementFactory.topLevelVariableElement
3("LN10", true, false, provider.doubleType); |
| 205 TopLevelVariableElement piElement = ElementFactory.topLevelVariableElement3(
"PI", true, false, provider.doubleType); | 205 TopLevelVariableElement piElement = ElementFactory.topLevelVariableElement3(
"PI", true, false, provider.doubleType); |
| 206 ClassElementImpl randomElement = ElementFactory.classElement2("Random", []); | 206 ClassElementImpl randomElement = ElementFactory.classElement2("Random"); |
| 207 randomElement.abstract = true; | 207 randomElement.abstract = true; |
| 208 ConstructorElementImpl randomConstructor = ElementFactory.constructorElement
2(randomElement, null, []); | 208 ConstructorElementImpl randomConstructor = ElementFactory.constructorElement
2(randomElement, null); |
| 209 randomConstructor.factory = true; | 209 randomConstructor.factory = true; |
| 210 ParameterElementImpl seedParam = new ParameterElementImpl("seed", 0); | 210 ParameterElementImpl seedParam = new ParameterElementImpl("seed", 0); |
| 211 seedParam.parameterKind = ParameterKind.POSITIONAL; | 211 seedParam.parameterKind = ParameterKind.POSITIONAL; |
| 212 seedParam.type = provider.intType; | 212 seedParam.type = provider.intType; |
| 213 randomConstructor.parameters = <ParameterElement> [seedParam]; | 213 randomConstructor.parameters = <ParameterElement> [seedParam]; |
| 214 randomElement.constructors = <ConstructorElement> [randomConstructor]; | 214 randomElement.constructors = <ConstructorElement> [randomConstructor]; |
| 215 FunctionElement sinElement = ElementFactory.functionElement3("sin", provider
.doubleType.element, <ClassElement> [provider.numType.element], <ClassElement> [
]); | 215 FunctionElement sinElement = ElementFactory.functionElement3("sin", provider
.doubleType.element, <ClassElement> [provider.numType.element], ClassElementImpl
.EMPTY_ARRAY); |
| 216 FunctionElement sqrtElement = ElementFactory.functionElement3("sqrt", provid
er.doubleType.element, <ClassElement> [provider.numType.element], <ClassElement>
[]); | 216 FunctionElement sqrtElement = ElementFactory.functionElement3("sqrt", provid
er.doubleType.element, <ClassElement> [provider.numType.element], ClassElementIm
pl.EMPTY_ARRAY); |
| 217 mathUnit.accessors = <PropertyAccessorElement> [ln10Element.getter, piElemen
t.getter]; | 217 mathUnit.accessors = <PropertyAccessorElement> [ln10Element.getter, piElemen
t.getter]; |
| 218 mathUnit.functions = <FunctionElement> [cosElement, sinElement, sqrtElement]
; | 218 mathUnit.functions = <FunctionElement> [cosElement, sinElement, sqrtElement]
; |
| 219 mathUnit.topLevelVariables = <TopLevelVariableElement> [ln10Element, piEleme
nt]; | 219 mathUnit.topLevelVariables = <TopLevelVariableElement> [ln10Element, piEleme
nt]; |
| 220 mathUnit.types = <ClassElement> [randomElement]; | 220 mathUnit.types = <ClassElement> [randomElement]; |
| 221 LibraryElementImpl mathLibrary = new LibraryElementImpl.forNode(coreContext,
AstFactory.libraryIdentifier2(["dart", "math"])); | 221 LibraryElementImpl mathLibrary = new LibraryElementImpl.forNode(coreContext,
AstFactory.libraryIdentifier2(["dart", "math"])); |
| 222 mathLibrary.definingCompilationUnit = mathUnit; | 222 mathLibrary.definingCompilationUnit = mathUnit; |
| 223 // | 223 // |
| 224 // Set empty sources for the rest of the libraries. | 224 // Set empty sources for the rest of the libraries. |
| 225 // | 225 // |
| 226 Source source = sourceFactory.forUri(_DART_INTERCEPTORS); | 226 Source source = sourceFactory.forUri(_DART_INTERCEPTORS); |
| (...skipping 832 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1059 return p + p; | 1059 return p + p; |
| 1060 } | 1060 } |
| 1061 }'''; | 1061 }'''; |
| 1062 _assertMethodMatches(true, content, content); | 1062 _assertMethodMatches(true, content, content); |
| 1063 } | 1063 } |
| 1064 | 1064 |
| 1065 void _assertCompilationUnitMatches(bool expectMatch, String oldContent, String
newContent) { | 1065 void _assertCompilationUnitMatches(bool expectMatch, String oldContent, String
newContent) { |
| 1066 Source source = addSource(oldContent); | 1066 Source source = addSource(oldContent); |
| 1067 LibraryElement library = resolve(source); | 1067 LibraryElement library = resolve(source); |
| 1068 CompilationUnit oldUnit = resolveCompilationUnit(source, library); | 1068 CompilationUnit oldUnit = resolveCompilationUnit(source, library); |
| 1069 CompilationUnit newUnit = ParserTestCase.parseCompilationUnit(newContent, []
); | 1069 CompilationUnit newUnit = ParserTestCase.parseCompilationUnit(newContent); |
| 1070 DeclarationMatcher matcher = new DeclarationMatcher(); | 1070 DeclarationMatcher matcher = new DeclarationMatcher(); |
| 1071 expect(matcher.matches(newUnit, oldUnit.element), expectMatch); | 1071 expect(matcher.matches(newUnit, oldUnit.element), expectMatch); |
| 1072 } | 1072 } |
| 1073 | 1073 |
| 1074 void _assertMethodMatches(bool expectMatch, String oldContent, String newConte
nt) { | 1074 void _assertMethodMatches(bool expectMatch, String oldContent, String newConte
nt) { |
| 1075 Source source = addSource(oldContent); | 1075 Source source = addSource(oldContent); |
| 1076 LibraryElement library = resolve(source); | 1076 LibraryElement library = resolve(source); |
| 1077 CompilationUnit oldUnit = resolveCompilationUnit(source, library); | 1077 CompilationUnit oldUnit = resolveCompilationUnit(source, library); |
| 1078 MethodElement element = _getFirstMethod(oldUnit).element as MethodElement; | 1078 MethodElement element = _getFirstMethod(oldUnit).element as MethodElement; |
| 1079 AnalysisContext context = analysisContext; | 1079 AnalysisContext context = analysisContext; |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1138 | 1138 |
| 1139 /** | 1139 /** |
| 1140 * The resolver being used to resolve the test cases. | 1140 * The resolver being used to resolve the test cases. |
| 1141 */ | 1141 */ |
| 1142 ElementResolver _resolver; | 1142 ElementResolver _resolver; |
| 1143 | 1143 |
| 1144 void fail_visitExportDirective_combinators() { | 1144 void fail_visitExportDirective_combinators() { |
| 1145 fail("Not yet tested"); | 1145 fail("Not yet tested"); |
| 1146 // Need to set up the exported library so that the identifier can be resolve
d | 1146 // Need to set up the exported library so that the identifier can be resolve
d |
| 1147 ExportDirective directive = AstFactory.exportDirective2(null, [AstFactory.hi
deCombinator2(["A"])]); | 1147 ExportDirective directive = AstFactory.exportDirective2(null, [AstFactory.hi
deCombinator2(["A"])]); |
| 1148 _resolveNode(directive, []); | 1148 _resolveNode(directive); |
| 1149 _listener.assertNoErrors(); | 1149 _listener.assertNoErrors(); |
| 1150 } | 1150 } |
| 1151 | 1151 |
| 1152 void fail_visitFunctionExpressionInvocation() { | 1152 void fail_visitFunctionExpressionInvocation() { |
| 1153 fail("Not yet tested"); | 1153 fail("Not yet tested"); |
| 1154 _listener.assertNoErrors(); | 1154 _listener.assertNoErrors(); |
| 1155 } | 1155 } |
| 1156 | 1156 |
| 1157 void fail_visitImportDirective_combinators_noPrefix() { | 1157 void fail_visitImportDirective_combinators_noPrefix() { |
| 1158 fail("Not yet tested"); | 1158 fail("Not yet tested"); |
| 1159 // Need to set up the imported library so that the identifier can be resolve
d | 1159 // Need to set up the imported library so that the identifier can be resolve
d |
| 1160 ImportDirective directive = AstFactory.importDirective3(null, null, [AstFact
ory.showCombinator2(["A"])]); | 1160 ImportDirective directive = AstFactory.importDirective3(null, null, [AstFact
ory.showCombinator2(["A"])]); |
| 1161 _resolveNode(directive, []); | 1161 _resolveNode(directive); |
| 1162 _listener.assertNoErrors(); | 1162 _listener.assertNoErrors(); |
| 1163 } | 1163 } |
| 1164 | 1164 |
| 1165 void fail_visitImportDirective_combinators_prefix() { | 1165 void fail_visitImportDirective_combinators_prefix() { |
| 1166 fail("Not yet tested"); | 1166 fail("Not yet tested"); |
| 1167 // Need to set up the imported library so that the identifiers can be resolv
ed | 1167 // Need to set up the imported library so that the identifiers can be resolv
ed |
| 1168 String prefixName = "p"; | 1168 String prefixName = "p"; |
| 1169 _definingLibrary.imports = <ImportElement> [ElementFactory.importFor(null, E
lementFactory.prefix(prefixName), [])]; | 1169 _definingLibrary.imports = <ImportElement> [ElementFactory.importFor(null, E
lementFactory.prefix(prefixName))]; |
| 1170 ImportDirective directive = AstFactory.importDirective3(null, prefixName, [ | 1170 ImportDirective directive = AstFactory.importDirective3(null, prefixName, [ |
| 1171 AstFactory.showCombinator2(["A"]), | 1171 AstFactory.showCombinator2(["A"]), |
| 1172 AstFactory.hideCombinator2(["B"])]); | 1172 AstFactory.hideCombinator2(["B"])]); |
| 1173 _resolveNode(directive, []); | 1173 _resolveNode(directive); |
| 1174 _listener.assertNoErrors(); | 1174 _listener.assertNoErrors(); |
| 1175 } | 1175 } |
| 1176 | 1176 |
| 1177 void fail_visitRedirectingConstructorInvocation() { | 1177 void fail_visitRedirectingConstructorInvocation() { |
| 1178 fail("Not yet tested"); | 1178 fail("Not yet tested"); |
| 1179 _listener.assertNoErrors(); | 1179 _listener.assertNoErrors(); |
| 1180 } | 1180 } |
| 1181 | 1181 |
| 1182 @override | 1182 @override |
| 1183 void setUp() { | 1183 void setUp() { |
| 1184 _listener = new GatheringErrorListener(); | 1184 _listener = new GatheringErrorListener(); |
| 1185 _typeProvider = new TestTypeProvider(); | 1185 _typeProvider = new TestTypeProvider(); |
| 1186 _resolver = _createResolver(); | 1186 _resolver = _createResolver(); |
| 1187 } | 1187 } |
| 1188 | 1188 |
| 1189 void test_lookUpMethodInInterfaces() { | 1189 void test_lookUpMethodInInterfaces() { |
| 1190 InterfaceType intType = _typeProvider.intType; | 1190 InterfaceType intType = _typeProvider.intType; |
| 1191 // | 1191 // |
| 1192 // abstract class A { int operator[](int index); } | 1192 // abstract class A { int operator[](int index); } |
| 1193 // | 1193 // |
| 1194 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1194 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 1195 MethodElement operator = ElementFactory.methodElement("[]", intType, [intTyp
e]); | 1195 MethodElement operator = ElementFactory.methodElement("[]", intType, [intTyp
e]); |
| 1196 classA.methods = <MethodElement> [operator]; | 1196 classA.methods = <MethodElement> [operator]; |
| 1197 // | 1197 // |
| 1198 // class B implements A {} | 1198 // class B implements A {} |
| 1199 // | 1199 // |
| 1200 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 1200 ClassElementImpl classB = ElementFactory.classElement2("B"); |
| 1201 classB.interfaces = <InterfaceType> [classA.type]; | 1201 classB.interfaces = <InterfaceType> [classA.type]; |
| 1202 // | 1202 // |
| 1203 // class C extends Object with B {} | 1203 // class C extends Object with B {} |
| 1204 // | 1204 // |
| 1205 ClassElementImpl classC = ElementFactory.classElement2("C", []); | 1205 ClassElementImpl classC = ElementFactory.classElement2("C"); |
| 1206 classC.mixins = <InterfaceType> [classB.type]; | 1206 classC.mixins = <InterfaceType> [classB.type]; |
| 1207 // | 1207 // |
| 1208 // class D extends C {} | 1208 // class D extends C {} |
| 1209 // | 1209 // |
| 1210 ClassElementImpl classD = ElementFactory.classElement("D", classC.type, []); | 1210 ClassElementImpl classD = ElementFactory.classElement("D", classC.type); |
| 1211 // | 1211 // |
| 1212 // D a; | 1212 // D a; |
| 1213 // a[i]; | 1213 // a[i]; |
| 1214 // | 1214 // |
| 1215 SimpleIdentifier array = AstFactory.identifier3("a"); | 1215 SimpleIdentifier array = AstFactory.identifier3("a"); |
| 1216 array.staticType = classD.type; | 1216 array.staticType = classD.type; |
| 1217 IndexExpression expression = AstFactory.indexExpression(array, AstFactory.id
entifier3("i")); | 1217 IndexExpression expression = AstFactory.indexExpression(array, AstFactory.id
entifier3("i")); |
| 1218 expect(_resolveIndexExpression(expression, []), same(operator)); | 1218 expect(_resolveIndexExpression(expression), same(operator)); |
| 1219 _listener.assertNoErrors(); | 1219 _listener.assertNoErrors(); |
| 1220 } | 1220 } |
| 1221 | 1221 |
| 1222 void test_visitAssignmentExpression_compound() { | 1222 void test_visitAssignmentExpression_compound() { |
| 1223 InterfaceType intType = _typeProvider.intType; | 1223 InterfaceType intType = _typeProvider.intType; |
| 1224 SimpleIdentifier leftHandSide = AstFactory.identifier3("a"); | 1224 SimpleIdentifier leftHandSide = AstFactory.identifier3("a"); |
| 1225 leftHandSide.staticType = intType; | 1225 leftHandSide.staticType = intType; |
| 1226 AssignmentExpression assignment = AstFactory.assignmentExpression(leftHandSi
de, TokenType.PLUS_EQ, AstFactory.integer(1)); | 1226 AssignmentExpression assignment = AstFactory.assignmentExpression(leftHandSi
de, TokenType.PLUS_EQ, AstFactory.integer(1)); |
| 1227 _resolveNode(assignment, []); | 1227 _resolveNode(assignment); |
| 1228 expect(assignment.staticElement, same(getMethod(_typeProvider.numType, "+"))
); | 1228 expect(assignment.staticElement, same(getMethod(_typeProvider.numType, "+"))
); |
| 1229 _listener.assertNoErrors(); | 1229 _listener.assertNoErrors(); |
| 1230 } | 1230 } |
| 1231 | 1231 |
| 1232 void test_visitAssignmentExpression_simple() { | 1232 void test_visitAssignmentExpression_simple() { |
| 1233 AssignmentExpression expression = AstFactory.assignmentExpression(AstFactory
.identifier3("x"), TokenType.EQ, AstFactory.integer(0)); | 1233 AssignmentExpression expression = AstFactory.assignmentExpression(AstFactory
.identifier3("x"), TokenType.EQ, AstFactory.integer(0)); |
| 1234 _resolveNode(expression, []); | 1234 _resolveNode(expression); |
| 1235 expect(expression.staticElement, isNull); | 1235 expect(expression.staticElement, isNull); |
| 1236 _listener.assertNoErrors(); | 1236 _listener.assertNoErrors(); |
| 1237 } | 1237 } |
| 1238 | 1238 |
| 1239 void test_visitBinaryExpression() { | 1239 void test_visitBinaryExpression() { |
| 1240 // num i; | 1240 // num i; |
| 1241 // var j; | 1241 // var j; |
| 1242 // i + j | 1242 // i + j |
| 1243 InterfaceType numType = _typeProvider.numType; | 1243 InterfaceType numType = _typeProvider.numType; |
| 1244 SimpleIdentifier left = AstFactory.identifier3("i"); | 1244 SimpleIdentifier left = AstFactory.identifier3("i"); |
| 1245 left.staticType = numType; | 1245 left.staticType = numType; |
| 1246 BinaryExpression expression = AstFactory.binaryExpression(left, TokenType.PL
US, AstFactory.identifier3("j")); | 1246 BinaryExpression expression = AstFactory.binaryExpression(left, TokenType.PL
US, AstFactory.identifier3("j")); |
| 1247 _resolveNode(expression, []); | 1247 _resolveNode(expression); |
| 1248 expect(expression.staticElement, getMethod(numType, "+")); | 1248 expect(expression.staticElement, getMethod(numType, "+")); |
| 1249 expect(expression.propagatedElement, isNull); | 1249 expect(expression.propagatedElement, isNull); |
| 1250 _listener.assertNoErrors(); | 1250 _listener.assertNoErrors(); |
| 1251 } | 1251 } |
| 1252 | 1252 |
| 1253 void test_visitBinaryExpression_propagatedElement() { | 1253 void test_visitBinaryExpression_propagatedElement() { |
| 1254 // var i = 1; | 1254 // var i = 1; |
| 1255 // var j; | 1255 // var j; |
| 1256 // i + j | 1256 // i + j |
| 1257 InterfaceType numType = _typeProvider.numType; | 1257 InterfaceType numType = _typeProvider.numType; |
| 1258 SimpleIdentifier left = AstFactory.identifier3("i"); | 1258 SimpleIdentifier left = AstFactory.identifier3("i"); |
| 1259 left.propagatedType = numType; | 1259 left.propagatedType = numType; |
| 1260 BinaryExpression expression = AstFactory.binaryExpression(left, TokenType.PL
US, AstFactory.identifier3("j")); | 1260 BinaryExpression expression = AstFactory.binaryExpression(left, TokenType.PL
US, AstFactory.identifier3("j")); |
| 1261 _resolveNode(expression, []); | 1261 _resolveNode(expression); |
| 1262 expect(expression.staticElement, isNull); | 1262 expect(expression.staticElement, isNull); |
| 1263 expect(expression.propagatedElement, getMethod(numType, "+")); | 1263 expect(expression.propagatedElement, getMethod(numType, "+")); |
| 1264 _listener.assertNoErrors(); | 1264 _listener.assertNoErrors(); |
| 1265 } | 1265 } |
| 1266 | 1266 |
| 1267 void test_visitBreakStatement_withLabel() { | 1267 void test_visitBreakStatement_withLabel() { |
| 1268 String label = "loop"; | 1268 String label = "loop"; |
| 1269 LabelElementImpl labelElement = new LabelElementImpl(AstFactory.identifier3(
label), false, false); | 1269 LabelElementImpl labelElement = new LabelElementImpl(AstFactory.identifier3(
label), false, false); |
| 1270 BreakStatement statement = AstFactory.breakStatement2(label); | 1270 BreakStatement statement = AstFactory.breakStatement2(label); |
| 1271 expect(_resolveBreak(statement, labelElement), same(labelElement)); | 1271 expect(_resolveBreak(statement, labelElement), same(labelElement)); |
| 1272 _listener.assertNoErrors(); | 1272 _listener.assertNoErrors(); |
| 1273 } | 1273 } |
| 1274 | 1274 |
| 1275 void test_visitBreakStatement_withoutLabel() { | 1275 void test_visitBreakStatement_withoutLabel() { |
| 1276 BreakStatement statement = AstFactory.breakStatement(); | 1276 BreakStatement statement = AstFactory.breakStatement(); |
| 1277 _resolveStatement(statement, null); | 1277 _resolveStatement(statement, null); |
| 1278 _listener.assertNoErrors(); | 1278 _listener.assertNoErrors(); |
| 1279 } | 1279 } |
| 1280 | 1280 |
| 1281 void test_visitConstructorName_named() { | 1281 void test_visitConstructorName_named() { |
| 1282 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1282 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 1283 String constructorName = "a"; | 1283 String constructorName = "a"; |
| 1284 ConstructorElement constructor = ElementFactory.constructorElement2(classA,
constructorName, []); | 1284 ConstructorElement constructor = ElementFactory.constructorElement2(classA,
constructorName); |
| 1285 classA.constructors = <ConstructorElement> [constructor]; | 1285 classA.constructors = <ConstructorElement> [constructor]; |
| 1286 ConstructorName name = AstFactory.constructorName(AstFactory.typeName(classA
, []), constructorName); | 1286 ConstructorName name = AstFactory.constructorName(AstFactory.typeName(classA
), constructorName); |
| 1287 _resolveNode(name, []); | 1287 _resolveNode(name); |
| 1288 expect(name.staticElement, same(constructor)); | 1288 expect(name.staticElement, same(constructor)); |
| 1289 _listener.assertNoErrors(); | 1289 _listener.assertNoErrors(); |
| 1290 } | 1290 } |
| 1291 | 1291 |
| 1292 void test_visitConstructorName_unnamed() { | 1292 void test_visitConstructorName_unnamed() { |
| 1293 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1293 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 1294 String constructorName = null; | 1294 String constructorName = null; |
| 1295 ConstructorElement constructor = ElementFactory.constructorElement2(classA,
constructorName, []); | 1295 ConstructorElement constructor = ElementFactory.constructorElement2(classA,
constructorName); |
| 1296 classA.constructors = <ConstructorElement> [constructor]; | 1296 classA.constructors = <ConstructorElement> [constructor]; |
| 1297 ConstructorName name = AstFactory.constructorName(AstFactory.typeName(classA
, []), constructorName); | 1297 ConstructorName name = AstFactory.constructorName(AstFactory.typeName(classA
), constructorName); |
| 1298 _resolveNode(name, []); | 1298 _resolveNode(name); |
| 1299 expect(name.staticElement, same(constructor)); | 1299 expect(name.staticElement, same(constructor)); |
| 1300 _listener.assertNoErrors(); | 1300 _listener.assertNoErrors(); |
| 1301 } | 1301 } |
| 1302 | 1302 |
| 1303 void test_visitContinueStatement_withLabel() { | 1303 void test_visitContinueStatement_withLabel() { |
| 1304 String label = "loop"; | 1304 String label = "loop"; |
| 1305 LabelElementImpl labelElement = new LabelElementImpl(AstFactory.identifier3(
label), false, false); | 1305 LabelElementImpl labelElement = new LabelElementImpl(AstFactory.identifier3(
label), false, false); |
| 1306 ContinueStatement statement = AstFactory.continueStatement(label); | 1306 ContinueStatement statement = AstFactory.continueStatement(label); |
| 1307 expect(_resolveContinue(statement, labelElement), same(labelElement)); | 1307 expect(_resolveContinue(statement, labelElement), same(labelElement)); |
| 1308 _listener.assertNoErrors(); | 1308 _listener.assertNoErrors(); |
| 1309 } | 1309 } |
| 1310 | 1310 |
| 1311 void test_visitContinueStatement_withoutLabel() { | 1311 void test_visitContinueStatement_withoutLabel() { |
| 1312 ContinueStatement statement = AstFactory.continueStatement(); | 1312 ContinueStatement statement = AstFactory.continueStatement(); |
| 1313 _resolveStatement(statement, null); | 1313 _resolveStatement(statement, null); |
| 1314 _listener.assertNoErrors(); | 1314 _listener.assertNoErrors(); |
| 1315 } | 1315 } |
| 1316 | 1316 |
| 1317 void test_visitExportDirective_noCombinators() { | 1317 void test_visitExportDirective_noCombinators() { |
| 1318 ExportDirective directive = AstFactory.exportDirective2(null, []); | 1318 ExportDirective directive = AstFactory.exportDirective2(null); |
| 1319 directive.element = ElementFactory.exportFor(ElementFactory.library(_definin
gLibrary.context, "lib"), []); | 1319 directive.element = ElementFactory.exportFor(ElementFactory.library(_definin
gLibrary.context, "lib")); |
| 1320 _resolveNode(directive, []); | 1320 _resolveNode(directive); |
| 1321 _listener.assertNoErrors(); | 1321 _listener.assertNoErrors(); |
| 1322 } | 1322 } |
| 1323 | 1323 |
| 1324 void test_visitFieldFormalParameter() { | 1324 void test_visitFieldFormalParameter() { |
| 1325 String fieldName = "f"; | 1325 String fieldName = "f"; |
| 1326 InterfaceType intType = _typeProvider.intType; | 1326 InterfaceType intType = _typeProvider.intType; |
| 1327 FieldElementImpl fieldElement = ElementFactory.fieldElement(fieldName, false
, false, false, intType); | 1327 FieldElementImpl fieldElement = ElementFactory.fieldElement(fieldName, false
, false, false, intType); |
| 1328 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1328 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 1329 classA.fields = <FieldElement> [fieldElement]; | 1329 classA.fields = <FieldElement> [fieldElement]; |
| 1330 FieldFormalParameter parameter = AstFactory.fieldFormalParameter2(fieldName)
; | 1330 FieldFormalParameter parameter = AstFactory.fieldFormalParameter2(fieldName)
; |
| 1331 FieldFormalParameterElementImpl parameterElement = ElementFactory.fieldForma
lParameter(parameter.identifier); | 1331 FieldFormalParameterElementImpl parameterElement = ElementFactory.fieldForma
lParameter(parameter.identifier); |
| 1332 parameterElement.field = fieldElement; | 1332 parameterElement.field = fieldElement; |
| 1333 parameterElement.type = intType; | 1333 parameterElement.type = intType; |
| 1334 parameter.identifier.staticElement = parameterElement; | 1334 parameter.identifier.staticElement = parameterElement; |
| 1335 _resolveInClass(parameter, classA); | 1335 _resolveInClass(parameter, classA); |
| 1336 expect(parameter.element.type, same(intType)); | 1336 expect(parameter.element.type, same(intType)); |
| 1337 } | 1337 } |
| 1338 | 1338 |
| 1339 void test_visitImportDirective_noCombinators_noPrefix() { | 1339 void test_visitImportDirective_noCombinators_noPrefix() { |
| 1340 ImportDirective directive = AstFactory.importDirective3(null, null, []); | 1340 ImportDirective directive = AstFactory.importDirective3(null, null); |
| 1341 directive.element = ElementFactory.importFor(ElementFactory.library(_definin
gLibrary.context, "lib"), null, []); | 1341 directive.element = ElementFactory.importFor(ElementFactory.library(_definin
gLibrary.context, "lib"), null); |
| 1342 _resolveNode(directive, []); | 1342 _resolveNode(directive); |
| 1343 _listener.assertNoErrors(); | 1343 _listener.assertNoErrors(); |
| 1344 } | 1344 } |
| 1345 | 1345 |
| 1346 void test_visitImportDirective_noCombinators_prefix() { | 1346 void test_visitImportDirective_noCombinators_prefix() { |
| 1347 String prefixName = "p"; | 1347 String prefixName = "p"; |
| 1348 ImportElement importElement = ElementFactory.importFor(ElementFactory.librar
y(_definingLibrary.context, "lib"), ElementFactory.prefix(prefixName), []); | 1348 ImportElement importElement = ElementFactory.importFor(ElementFactory.librar
y(_definingLibrary.context, "lib"), ElementFactory.prefix(prefixName)); |
| 1349 _definingLibrary.imports = <ImportElement> [importElement]; | 1349 _definingLibrary.imports = <ImportElement> [importElement]; |
| 1350 ImportDirective directive = AstFactory.importDirective3(null, prefixName, []
); | 1350 ImportDirective directive = AstFactory.importDirective3(null, prefixName); |
| 1351 directive.element = importElement; | 1351 directive.element = importElement; |
| 1352 _resolveNode(directive, []); | 1352 _resolveNode(directive); |
| 1353 _listener.assertNoErrors(); | 1353 _listener.assertNoErrors(); |
| 1354 } | 1354 } |
| 1355 | 1355 |
| 1356 void test_visitImportDirective_withCombinators() { | 1356 void test_visitImportDirective_withCombinators() { |
| 1357 ShowCombinator combinator = AstFactory.showCombinator2(["A", "B", "C"]); | 1357 ShowCombinator combinator = AstFactory.showCombinator2(["A", "B", "C"]); |
| 1358 ImportDirective directive = AstFactory.importDirective3(null, null, [combina
tor]); | 1358 ImportDirective directive = AstFactory.importDirective3(null, null, [combina
tor]); |
| 1359 LibraryElementImpl library = ElementFactory.library(_definingLibrary.context
, "lib"); | 1359 LibraryElementImpl library = ElementFactory.library(_definingLibrary.context
, "lib"); |
| 1360 TopLevelVariableElementImpl varA = ElementFactory.topLevelVariableElement2("
A"); | 1360 TopLevelVariableElementImpl varA = ElementFactory.topLevelVariableElement2("
A"); |
| 1361 TopLevelVariableElementImpl varB = ElementFactory.topLevelVariableElement2("
B"); | 1361 TopLevelVariableElementImpl varB = ElementFactory.topLevelVariableElement2("
B"); |
| 1362 TopLevelVariableElementImpl varC = ElementFactory.topLevelVariableElement2("
C"); | 1362 TopLevelVariableElementImpl varC = ElementFactory.topLevelVariableElement2("
C"); |
| 1363 CompilationUnitElementImpl unit = library.definingCompilationUnit as Compila
tionUnitElementImpl; | 1363 CompilationUnitElementImpl unit = library.definingCompilationUnit as Compila
tionUnitElementImpl; |
| 1364 unit.accessors = <PropertyAccessorElement> [varA.getter, varA.setter, varB.g
etter, varC.setter]; | 1364 unit.accessors = <PropertyAccessorElement> [varA.getter, varA.setter, varB.g
etter, varC.setter]; |
| 1365 unit.topLevelVariables = <TopLevelVariableElement> [varA, varB, varC]; | 1365 unit.topLevelVariables = <TopLevelVariableElement> [varA, varB, varC]; |
| 1366 directive.element = ElementFactory.importFor(library, null, []); | 1366 directive.element = ElementFactory.importFor(library, null); |
| 1367 _resolveNode(directive, []); | 1367 _resolveNode(directive); |
| 1368 expect(combinator.shownNames[0].staticElement, same(varA)); | 1368 expect(combinator.shownNames[0].staticElement, same(varA)); |
| 1369 expect(combinator.shownNames[1].staticElement, same(varB)); | 1369 expect(combinator.shownNames[1].staticElement, same(varB)); |
| 1370 expect(combinator.shownNames[2].staticElement, same(varC)); | 1370 expect(combinator.shownNames[2].staticElement, same(varC)); |
| 1371 _listener.assertNoErrors(); | 1371 _listener.assertNoErrors(); |
| 1372 } | 1372 } |
| 1373 | 1373 |
| 1374 void test_visitIndexExpression_get() { | 1374 void test_visitIndexExpression_get() { |
| 1375 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1375 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 1376 InterfaceType intType = _typeProvider.intType; | 1376 InterfaceType intType = _typeProvider.intType; |
| 1377 MethodElement getter = ElementFactory.methodElement("[]", intType, [intType]
); | 1377 MethodElement getter = ElementFactory.methodElement("[]", intType, [intType]
); |
| 1378 classA.methods = <MethodElement> [getter]; | 1378 classA.methods = <MethodElement> [getter]; |
| 1379 SimpleIdentifier array = AstFactory.identifier3("a"); | 1379 SimpleIdentifier array = AstFactory.identifier3("a"); |
| 1380 array.staticType = classA.type; | 1380 array.staticType = classA.type; |
| 1381 IndexExpression expression = AstFactory.indexExpression(array, AstFactory.id
entifier3("i")); | 1381 IndexExpression expression = AstFactory.indexExpression(array, AstFactory.id
entifier3("i")); |
| 1382 expect(_resolveIndexExpression(expression, []), same(getter)); | 1382 expect(_resolveIndexExpression(expression), same(getter)); |
| 1383 _listener.assertNoErrors(); | 1383 _listener.assertNoErrors(); |
| 1384 } | 1384 } |
| 1385 | 1385 |
| 1386 void test_visitIndexExpression_set() { | 1386 void test_visitIndexExpression_set() { |
| 1387 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1387 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 1388 InterfaceType intType = _typeProvider.intType; | 1388 InterfaceType intType = _typeProvider.intType; |
| 1389 MethodElement setter = ElementFactory.methodElement("[]=", intType, [intType
]); | 1389 MethodElement setter = ElementFactory.methodElement("[]=", intType, [intType
]); |
| 1390 classA.methods = <MethodElement> [setter]; | 1390 classA.methods = <MethodElement> [setter]; |
| 1391 SimpleIdentifier array = AstFactory.identifier3("a"); | 1391 SimpleIdentifier array = AstFactory.identifier3("a"); |
| 1392 array.staticType = classA.type; | 1392 array.staticType = classA.type; |
| 1393 IndexExpression expression = AstFactory.indexExpression(array, AstFactory.id
entifier3("i")); | 1393 IndexExpression expression = AstFactory.indexExpression(array, AstFactory.id
entifier3("i")); |
| 1394 AstFactory.assignmentExpression(expression, TokenType.EQ, AstFactory.integer
(0)); | 1394 AstFactory.assignmentExpression(expression, TokenType.EQ, AstFactory.integer
(0)); |
| 1395 expect(_resolveIndexExpression(expression, []), same(setter)); | 1395 expect(_resolveIndexExpression(expression), same(setter)); |
| 1396 _listener.assertNoErrors(); | 1396 _listener.assertNoErrors(); |
| 1397 } | 1397 } |
| 1398 | 1398 |
| 1399 void test_visitInstanceCreationExpression_named() { | 1399 void test_visitInstanceCreationExpression_named() { |
| 1400 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1400 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 1401 String constructorName = "a"; | 1401 String constructorName = "a"; |
| 1402 ConstructorElement constructor = ElementFactory.constructorElement2(classA,
constructorName, []); | 1402 ConstructorElement constructor = ElementFactory.constructorElement2(classA,
constructorName); |
| 1403 classA.constructors = <ConstructorElement> [constructor]; | 1403 classA.constructors = <ConstructorElement> [constructor]; |
| 1404 ConstructorName name = AstFactory.constructorName(AstFactory.typeName(classA
, []), constructorName); | 1404 ConstructorName name = AstFactory.constructorName(AstFactory.typeName(classA
), constructorName); |
| 1405 name.staticElement = constructor; | 1405 name.staticElement = constructor; |
| 1406 InstanceCreationExpression creation = AstFactory.instanceCreationExpression(
Keyword.NEW, name, []); | 1406 InstanceCreationExpression creation = AstFactory.instanceCreationExpression(
Keyword.NEW, name); |
| 1407 _resolveNode(creation, []); | 1407 _resolveNode(creation); |
| 1408 expect(creation.staticElement, same(constructor)); | 1408 expect(creation.staticElement, same(constructor)); |
| 1409 _listener.assertNoErrors(); | 1409 _listener.assertNoErrors(); |
| 1410 } | 1410 } |
| 1411 | 1411 |
| 1412 void test_visitInstanceCreationExpression_unnamed() { | 1412 void test_visitInstanceCreationExpression_unnamed() { |
| 1413 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1413 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 1414 String constructorName = null; | 1414 String constructorName = null; |
| 1415 ConstructorElement constructor = ElementFactory.constructorElement2(classA,
constructorName, []); | 1415 ConstructorElement constructor = ElementFactory.constructorElement2(classA,
constructorName); |
| 1416 classA.constructors = <ConstructorElement> [constructor]; | 1416 classA.constructors = <ConstructorElement> [constructor]; |
| 1417 ConstructorName name = AstFactory.constructorName(AstFactory.typeName(classA
, []), constructorName); | 1417 ConstructorName name = AstFactory.constructorName(AstFactory.typeName(classA
), constructorName); |
| 1418 name.staticElement = constructor; | 1418 name.staticElement = constructor; |
| 1419 InstanceCreationExpression creation = AstFactory.instanceCreationExpression(
Keyword.NEW, name, []); | 1419 InstanceCreationExpression creation = AstFactory.instanceCreationExpression(
Keyword.NEW, name); |
| 1420 _resolveNode(creation, []); | 1420 _resolveNode(creation); |
| 1421 expect(creation.staticElement, same(constructor)); | 1421 expect(creation.staticElement, same(constructor)); |
| 1422 _listener.assertNoErrors(); | 1422 _listener.assertNoErrors(); |
| 1423 } | 1423 } |
| 1424 | 1424 |
| 1425 void test_visitInstanceCreationExpression_unnamed_namedParameter() { | 1425 void test_visitInstanceCreationExpression_unnamed_namedParameter() { |
| 1426 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1426 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 1427 String constructorName = null; | 1427 String constructorName = null; |
| 1428 ConstructorElementImpl constructor = ElementFactory.constructorElement2(clas
sA, constructorName, []); | 1428 ConstructorElementImpl constructor = ElementFactory.constructorElement2(clas
sA, constructorName); |
| 1429 String parameterName = "a"; | 1429 String parameterName = "a"; |
| 1430 ParameterElement parameter = ElementFactory.namedParameter(parameterName); | 1430 ParameterElement parameter = ElementFactory.namedParameter(parameterName); |
| 1431 constructor.parameters = <ParameterElement> [parameter]; | 1431 constructor.parameters = <ParameterElement> [parameter]; |
| 1432 classA.constructors = <ConstructorElement> [constructor]; | 1432 classA.constructors = <ConstructorElement> [constructor]; |
| 1433 ConstructorName name = AstFactory.constructorName(AstFactory.typeName(classA
, []), constructorName); | 1433 ConstructorName name = AstFactory.constructorName(AstFactory.typeName(classA
), constructorName); |
| 1434 name.staticElement = constructor; | 1434 name.staticElement = constructor; |
| 1435 InstanceCreationExpression creation = AstFactory.instanceCreationExpression(
Keyword.NEW, name, [AstFactory.namedExpression2(parameterName, AstFactory.intege
r(0))]); | 1435 InstanceCreationExpression creation = AstFactory.instanceCreationExpression(
Keyword.NEW, name, [AstFactory.namedExpression2(parameterName, AstFactory.intege
r(0))]); |
| 1436 _resolveNode(creation, []); | 1436 _resolveNode(creation); |
| 1437 expect(creation.staticElement, same(constructor)); | 1437 expect(creation.staticElement, same(constructor)); |
| 1438 expect((creation.argumentList.arguments[0] as NamedExpression).name.label.st
aticElement, same(parameter)); | 1438 expect((creation.argumentList.arguments[0] as NamedExpression).name.label.st
aticElement, same(parameter)); |
| 1439 _listener.assertNoErrors(); | 1439 _listener.assertNoErrors(); |
| 1440 } | 1440 } |
| 1441 | 1441 |
| 1442 void test_visitMethodInvocation() { | 1442 void test_visitMethodInvocation() { |
| 1443 InterfaceType numType = _typeProvider.numType; | 1443 InterfaceType numType = _typeProvider.numType; |
| 1444 SimpleIdentifier left = AstFactory.identifier3("i"); | 1444 SimpleIdentifier left = AstFactory.identifier3("i"); |
| 1445 left.staticType = numType; | 1445 left.staticType = numType; |
| 1446 String methodName = "abs"; | 1446 String methodName = "abs"; |
| 1447 MethodInvocation invocation = AstFactory.methodInvocation(left, methodName,
[]); | 1447 MethodInvocation invocation = AstFactory.methodInvocation(left, methodName); |
| 1448 _resolveNode(invocation, []); | 1448 _resolveNode(invocation); |
| 1449 expect(invocation.methodName.staticElement, same(getMethod(numType, methodNa
me))); | 1449 expect(invocation.methodName.staticElement, same(getMethod(numType, methodNa
me))); |
| 1450 _listener.assertNoErrors(); | 1450 _listener.assertNoErrors(); |
| 1451 } | 1451 } |
| 1452 | 1452 |
| 1453 void test_visitMethodInvocation_namedParameter() { | 1453 void test_visitMethodInvocation_namedParameter() { |
| 1454 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1454 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 1455 String methodName = "m"; | 1455 String methodName = "m"; |
| 1456 String parameterName = "p"; | 1456 String parameterName = "p"; |
| 1457 MethodElementImpl method = ElementFactory.methodElement(methodName, null, []
); | 1457 MethodElementImpl method = ElementFactory.methodElement(methodName, null); |
| 1458 ParameterElement parameter = ElementFactory.namedParameter(parameterName); | 1458 ParameterElement parameter = ElementFactory.namedParameter(parameterName); |
| 1459 method.parameters = <ParameterElement> [parameter]; | 1459 method.parameters = <ParameterElement> [parameter]; |
| 1460 classA.methods = <MethodElement> [method]; | 1460 classA.methods = <MethodElement> [method]; |
| 1461 SimpleIdentifier left = AstFactory.identifier3("i"); | 1461 SimpleIdentifier left = AstFactory.identifier3("i"); |
| 1462 left.staticType = classA.type; | 1462 left.staticType = classA.type; |
| 1463 MethodInvocation invocation = AstFactory.methodInvocation(left, methodName,
[AstFactory.namedExpression2(parameterName, AstFactory.integer(0))]); | 1463 MethodInvocation invocation = AstFactory.methodInvocation(left, methodName,
[AstFactory.namedExpression2(parameterName, AstFactory.integer(0))]); |
| 1464 _resolveNode(invocation, []); | 1464 _resolveNode(invocation); |
| 1465 expect(invocation.methodName.staticElement, same(method)); | 1465 expect(invocation.methodName.staticElement, same(method)); |
| 1466 expect((invocation.argumentList.arguments[0] as NamedExpression).name.label.
staticElement, same(parameter)); | 1466 expect((invocation.argumentList.arguments[0] as NamedExpression).name.label.
staticElement, same(parameter)); |
| 1467 _listener.assertNoErrors(); | 1467 _listener.assertNoErrors(); |
| 1468 } | 1468 } |
| 1469 | 1469 |
| 1470 void test_visitPostfixExpression() { | 1470 void test_visitPostfixExpression() { |
| 1471 InterfaceType numType = _typeProvider.numType; | 1471 InterfaceType numType = _typeProvider.numType; |
| 1472 SimpleIdentifier operand = AstFactory.identifier3("i"); | 1472 SimpleIdentifier operand = AstFactory.identifier3("i"); |
| 1473 operand.staticType = numType; | 1473 operand.staticType = numType; |
| 1474 PostfixExpression expression = AstFactory.postfixExpression(operand, TokenTy
pe.PLUS_PLUS); | 1474 PostfixExpression expression = AstFactory.postfixExpression(operand, TokenTy
pe.PLUS_PLUS); |
| 1475 _resolveNode(expression, []); | 1475 _resolveNode(expression); |
| 1476 expect(expression.staticElement, getMethod(numType, "+")); | 1476 expect(expression.staticElement, getMethod(numType, "+")); |
| 1477 _listener.assertNoErrors(); | 1477 _listener.assertNoErrors(); |
| 1478 } | 1478 } |
| 1479 | 1479 |
| 1480 void test_visitPrefixedIdentifier_dynamic() { | 1480 void test_visitPrefixedIdentifier_dynamic() { |
| 1481 DartType dynamicType = _typeProvider.dynamicType; | 1481 DartType dynamicType = _typeProvider.dynamicType; |
| 1482 SimpleIdentifier target = AstFactory.identifier3("a"); | 1482 SimpleIdentifier target = AstFactory.identifier3("a"); |
| 1483 VariableElementImpl variable = ElementFactory.localVariableElement(target); | 1483 VariableElementImpl variable = ElementFactory.localVariableElement(target); |
| 1484 variable.type = dynamicType; | 1484 variable.type = dynamicType; |
| 1485 target.staticElement = variable; | 1485 target.staticElement = variable; |
| 1486 target.staticType = dynamicType; | 1486 target.staticType = dynamicType; |
| 1487 PrefixedIdentifier identifier = AstFactory.identifier(target, AstFactory.ide
ntifier3("b")); | 1487 PrefixedIdentifier identifier = AstFactory.identifier(target, AstFactory.ide
ntifier3("b")); |
| 1488 _resolveNode(identifier, []); | 1488 _resolveNode(identifier); |
| 1489 expect(identifier.staticElement, isNull); | 1489 expect(identifier.staticElement, isNull); |
| 1490 expect(identifier.identifier.staticElement, isNull); | 1490 expect(identifier.identifier.staticElement, isNull); |
| 1491 _listener.assertNoErrors(); | 1491 _listener.assertNoErrors(); |
| 1492 } | 1492 } |
| 1493 | 1493 |
| 1494 void test_visitPrefixedIdentifier_nonDynamic() { | 1494 void test_visitPrefixedIdentifier_nonDynamic() { |
| 1495 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1495 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 1496 String getterName = "b"; | 1496 String getterName = "b"; |
| 1497 PropertyAccessorElement getter = ElementFactory.getterElement(getterName, fa
lse, _typeProvider.intType); | 1497 PropertyAccessorElement getter = ElementFactory.getterElement(getterName, fa
lse, _typeProvider.intType); |
| 1498 classA.accessors = <PropertyAccessorElement> [getter]; | 1498 classA.accessors = <PropertyAccessorElement> [getter]; |
| 1499 SimpleIdentifier target = AstFactory.identifier3("a"); | 1499 SimpleIdentifier target = AstFactory.identifier3("a"); |
| 1500 VariableElementImpl variable = ElementFactory.localVariableElement(target); | 1500 VariableElementImpl variable = ElementFactory.localVariableElement(target); |
| 1501 variable.type = classA.type; | 1501 variable.type = classA.type; |
| 1502 target.staticElement = variable; | 1502 target.staticElement = variable; |
| 1503 target.staticType = classA.type; | 1503 target.staticType = classA.type; |
| 1504 PrefixedIdentifier identifier = AstFactory.identifier(target, AstFactory.ide
ntifier3(getterName)); | 1504 PrefixedIdentifier identifier = AstFactory.identifier(target, AstFactory.ide
ntifier3(getterName)); |
| 1505 _resolveNode(identifier, []); | 1505 _resolveNode(identifier); |
| 1506 expect(identifier.staticElement, same(getter)); | 1506 expect(identifier.staticElement, same(getter)); |
| 1507 expect(identifier.identifier.staticElement, same(getter)); | 1507 expect(identifier.identifier.staticElement, same(getter)); |
| 1508 _listener.assertNoErrors(); | 1508 _listener.assertNoErrors(); |
| 1509 } | 1509 } |
| 1510 | 1510 |
| 1511 void test_visitPrefixedIdentifier_staticClassMember_getter() { | 1511 void test_visitPrefixedIdentifier_staticClassMember_getter() { |
| 1512 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1512 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 1513 // set accessors | 1513 // set accessors |
| 1514 String propName = "b"; | 1514 String propName = "b"; |
| 1515 PropertyAccessorElement getter = ElementFactory.getterElement(propName, fals
e, _typeProvider.intType); | 1515 PropertyAccessorElement getter = ElementFactory.getterElement(propName, fals
e, _typeProvider.intType); |
| 1516 PropertyAccessorElement setter = ElementFactory.setterElement(propName, fals
e, _typeProvider.intType); | 1516 PropertyAccessorElement setter = ElementFactory.setterElement(propName, fals
e, _typeProvider.intType); |
| 1517 classA.accessors = <PropertyAccessorElement> [getter, setter]; | 1517 classA.accessors = <PropertyAccessorElement> [getter, setter]; |
| 1518 // prepare "A.m" | 1518 // prepare "A.m" |
| 1519 SimpleIdentifier target = AstFactory.identifier3("A"); | 1519 SimpleIdentifier target = AstFactory.identifier3("A"); |
| 1520 target.staticElement = classA; | 1520 target.staticElement = classA; |
| 1521 target.staticType = classA.type; | 1521 target.staticType = classA.type; |
| 1522 PrefixedIdentifier identifier = AstFactory.identifier(target, AstFactory.ide
ntifier3(propName)); | 1522 PrefixedIdentifier identifier = AstFactory.identifier(target, AstFactory.ide
ntifier3(propName)); |
| 1523 // resolve | 1523 // resolve |
| 1524 _resolveNode(identifier, []); | 1524 _resolveNode(identifier); |
| 1525 expect(identifier.staticElement, same(getter)); | 1525 expect(identifier.staticElement, same(getter)); |
| 1526 expect(identifier.identifier.staticElement, same(getter)); | 1526 expect(identifier.identifier.staticElement, same(getter)); |
| 1527 _listener.assertNoErrors(); | 1527 _listener.assertNoErrors(); |
| 1528 } | 1528 } |
| 1529 | 1529 |
| 1530 void test_visitPrefixedIdentifier_staticClassMember_method() { | 1530 void test_visitPrefixedIdentifier_staticClassMember_method() { |
| 1531 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1531 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 1532 // set accessors | 1532 // set accessors |
| 1533 String propName = "m"; | 1533 String propName = "m"; |
| 1534 PropertyAccessorElement setter = ElementFactory.setterElement(propName, fals
e, _typeProvider.intType); | 1534 PropertyAccessorElement setter = ElementFactory.setterElement(propName, fals
e, _typeProvider.intType); |
| 1535 classA.accessors = <PropertyAccessorElement> [setter]; | 1535 classA.accessors = <PropertyAccessorElement> [setter]; |
| 1536 // set methods | 1536 // set methods |
| 1537 MethodElement method = ElementFactory.methodElement("m", _typeProvider.intTy
pe, []); | 1537 MethodElement method = ElementFactory.methodElement("m", _typeProvider.intTy
pe); |
| 1538 classA.methods = <MethodElement> [method]; | 1538 classA.methods = <MethodElement> [method]; |
| 1539 // prepare "A.m" | 1539 // prepare "A.m" |
| 1540 SimpleIdentifier target = AstFactory.identifier3("A"); | 1540 SimpleIdentifier target = AstFactory.identifier3("A"); |
| 1541 target.staticElement = classA; | 1541 target.staticElement = classA; |
| 1542 target.staticType = classA.type; | 1542 target.staticType = classA.type; |
| 1543 PrefixedIdentifier identifier = AstFactory.identifier(target, AstFactory.ide
ntifier3(propName)); | 1543 PrefixedIdentifier identifier = AstFactory.identifier(target, AstFactory.ide
ntifier3(propName)); |
| 1544 AstFactory.assignmentExpression(identifier, TokenType.EQ, AstFactory.nullLit
eral()); | 1544 AstFactory.assignmentExpression(identifier, TokenType.EQ, AstFactory.nullLit
eral()); |
| 1545 // resolve | 1545 // resolve |
| 1546 _resolveNode(identifier, []); | 1546 _resolveNode(identifier); |
| 1547 expect(identifier.staticElement, same(method)); | 1547 expect(identifier.staticElement, same(method)); |
| 1548 expect(identifier.identifier.staticElement, same(method)); | 1548 expect(identifier.identifier.staticElement, same(method)); |
| 1549 _listener.assertNoErrors(); | 1549 _listener.assertNoErrors(); |
| 1550 } | 1550 } |
| 1551 | 1551 |
| 1552 void test_visitPrefixedIdentifier_staticClassMember_setter() { | 1552 void test_visitPrefixedIdentifier_staticClassMember_setter() { |
| 1553 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1553 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 1554 // set accessors | 1554 // set accessors |
| 1555 String propName = "b"; | 1555 String propName = "b"; |
| 1556 PropertyAccessorElement getter = ElementFactory.getterElement(propName, fals
e, _typeProvider.intType); | 1556 PropertyAccessorElement getter = ElementFactory.getterElement(propName, fals
e, _typeProvider.intType); |
| 1557 PropertyAccessorElement setter = ElementFactory.setterElement(propName, fals
e, _typeProvider.intType); | 1557 PropertyAccessorElement setter = ElementFactory.setterElement(propName, fals
e, _typeProvider.intType); |
| 1558 classA.accessors = <PropertyAccessorElement> [getter, setter]; | 1558 classA.accessors = <PropertyAccessorElement> [getter, setter]; |
| 1559 // prepare "A.b = null" | 1559 // prepare "A.b = null" |
| 1560 SimpleIdentifier target = AstFactory.identifier3("A"); | 1560 SimpleIdentifier target = AstFactory.identifier3("A"); |
| 1561 target.staticElement = classA; | 1561 target.staticElement = classA; |
| 1562 target.staticType = classA.type; | 1562 target.staticType = classA.type; |
| 1563 PrefixedIdentifier identifier = AstFactory.identifier(target, AstFactory.ide
ntifier3(propName)); | 1563 PrefixedIdentifier identifier = AstFactory.identifier(target, AstFactory.ide
ntifier3(propName)); |
| 1564 AstFactory.assignmentExpression(identifier, TokenType.EQ, AstFactory.nullLit
eral()); | 1564 AstFactory.assignmentExpression(identifier, TokenType.EQ, AstFactory.nullLit
eral()); |
| 1565 // resolve | 1565 // resolve |
| 1566 _resolveNode(identifier, []); | 1566 _resolveNode(identifier); |
| 1567 expect(identifier.staticElement, same(setter)); | 1567 expect(identifier.staticElement, same(setter)); |
| 1568 expect(identifier.identifier.staticElement, same(setter)); | 1568 expect(identifier.identifier.staticElement, same(setter)); |
| 1569 _listener.assertNoErrors(); | 1569 _listener.assertNoErrors(); |
| 1570 } | 1570 } |
| 1571 | 1571 |
| 1572 void test_visitPrefixExpression() { | 1572 void test_visitPrefixExpression() { |
| 1573 InterfaceType numType = _typeProvider.numType; | 1573 InterfaceType numType = _typeProvider.numType; |
| 1574 SimpleIdentifier operand = AstFactory.identifier3("i"); | 1574 SimpleIdentifier operand = AstFactory.identifier3("i"); |
| 1575 operand.staticType = numType; | 1575 operand.staticType = numType; |
| 1576 PrefixExpression expression = AstFactory.prefixExpression(TokenType.PLUS_PLU
S, operand); | 1576 PrefixExpression expression = AstFactory.prefixExpression(TokenType.PLUS_PLU
S, operand); |
| 1577 _resolveNode(expression, []); | 1577 _resolveNode(expression); |
| 1578 expect(expression.staticElement, getMethod(numType, "+")); | 1578 expect(expression.staticElement, getMethod(numType, "+")); |
| 1579 _listener.assertNoErrors(); | 1579 _listener.assertNoErrors(); |
| 1580 } | 1580 } |
| 1581 | 1581 |
| 1582 void test_visitPropertyAccess_getter_identifier() { | 1582 void test_visitPropertyAccess_getter_identifier() { |
| 1583 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1583 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 1584 String getterName = "b"; | 1584 String getterName = "b"; |
| 1585 PropertyAccessorElement getter = ElementFactory.getterElement(getterName, fa
lse, _typeProvider.intType); | 1585 PropertyAccessorElement getter = ElementFactory.getterElement(getterName, fa
lse, _typeProvider.intType); |
| 1586 classA.accessors = <PropertyAccessorElement> [getter]; | 1586 classA.accessors = <PropertyAccessorElement> [getter]; |
| 1587 SimpleIdentifier target = AstFactory.identifier3("a"); | 1587 SimpleIdentifier target = AstFactory.identifier3("a"); |
| 1588 target.staticType = classA.type; | 1588 target.staticType = classA.type; |
| 1589 PropertyAccess access = AstFactory.propertyAccess2(target, getterName); | 1589 PropertyAccess access = AstFactory.propertyAccess2(target, getterName); |
| 1590 _resolveNode(access, []); | 1590 _resolveNode(access); |
| 1591 expect(access.propertyName.staticElement, same(getter)); | 1591 expect(access.propertyName.staticElement, same(getter)); |
| 1592 _listener.assertNoErrors(); | 1592 _listener.assertNoErrors(); |
| 1593 } | 1593 } |
| 1594 | 1594 |
| 1595 void test_visitPropertyAccess_getter_super() { | 1595 void test_visitPropertyAccess_getter_super() { |
| 1596 // | 1596 // |
| 1597 // class A { | 1597 // class A { |
| 1598 // int get b; | 1598 // int get b; |
| 1599 // } | 1599 // } |
| 1600 // class B { | 1600 // class B { |
| 1601 // ... super.m ... | 1601 // ... super.m ... |
| 1602 // } | 1602 // } |
| 1603 // | 1603 // |
| 1604 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1604 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 1605 String getterName = "b"; | 1605 String getterName = "b"; |
| 1606 PropertyAccessorElement getter = ElementFactory.getterElement(getterName, fa
lse, _typeProvider.intType); | 1606 PropertyAccessorElement getter = ElementFactory.getterElement(getterName, fa
lse, _typeProvider.intType); |
| 1607 classA.accessors = <PropertyAccessorElement> [getter]; | 1607 classA.accessors = <PropertyAccessorElement> [getter]; |
| 1608 SuperExpression target = AstFactory.superExpression(); | 1608 SuperExpression target = AstFactory.superExpression(); |
| 1609 target.staticType = ElementFactory.classElement("B", classA.type, []).type; | 1609 target.staticType = ElementFactory.classElement("B", classA.type).type; |
| 1610 PropertyAccess access = AstFactory.propertyAccess2(target, getterName); | 1610 PropertyAccess access = AstFactory.propertyAccess2(target, getterName); |
| 1611 AstFactory.methodDeclaration2(null, null, null, null, AstFactory.identifier3
("m"), AstFactory.formalParameterList([]), AstFactory.expressionFunctionBody(acc
ess)); | 1611 AstFactory.methodDeclaration2(null, null, null, null, AstFactory.identifier3
("m"), AstFactory.formalParameterList(), AstFactory.expressionFunctionBody(acces
s)); |
| 1612 _resolveNode(access, []); | 1612 _resolveNode(access); |
| 1613 expect(access.propertyName.staticElement, same(getter)); | 1613 expect(access.propertyName.staticElement, same(getter)); |
| 1614 _listener.assertNoErrors(); | 1614 _listener.assertNoErrors(); |
| 1615 } | 1615 } |
| 1616 | 1616 |
| 1617 void test_visitPropertyAccess_setter_this() { | 1617 void test_visitPropertyAccess_setter_this() { |
| 1618 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1618 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 1619 String setterName = "b"; | 1619 String setterName = "b"; |
| 1620 PropertyAccessorElement setter = ElementFactory.setterElement(setterName, fa
lse, _typeProvider.intType); | 1620 PropertyAccessorElement setter = ElementFactory.setterElement(setterName, fa
lse, _typeProvider.intType); |
| 1621 classA.accessors = <PropertyAccessorElement> [setter]; | 1621 classA.accessors = <PropertyAccessorElement> [setter]; |
| 1622 ThisExpression target = AstFactory.thisExpression(); | 1622 ThisExpression target = AstFactory.thisExpression(); |
| 1623 target.staticType = classA.type; | 1623 target.staticType = classA.type; |
| 1624 PropertyAccess access = AstFactory.propertyAccess2(target, setterName); | 1624 PropertyAccess access = AstFactory.propertyAccess2(target, setterName); |
| 1625 AstFactory.assignmentExpression(access, TokenType.EQ, AstFactory.integer(0))
; | 1625 AstFactory.assignmentExpression(access, TokenType.EQ, AstFactory.integer(0))
; |
| 1626 _resolveNode(access, []); | 1626 _resolveNode(access); |
| 1627 expect(access.propertyName.staticElement, same(setter)); | 1627 expect(access.propertyName.staticElement, same(setter)); |
| 1628 _listener.assertNoErrors(); | 1628 _listener.assertNoErrors(); |
| 1629 } | 1629 } |
| 1630 | 1630 |
| 1631 void test_visitSimpleIdentifier_classScope() { | 1631 void test_visitSimpleIdentifier_classScope() { |
| 1632 InterfaceType doubleType = _typeProvider.doubleType; | 1632 InterfaceType doubleType = _typeProvider.doubleType; |
| 1633 String fieldName = "NAN"; | 1633 String fieldName = "NAN"; |
| 1634 SimpleIdentifier node = AstFactory.identifier3(fieldName); | 1634 SimpleIdentifier node = AstFactory.identifier3(fieldName); |
| 1635 _resolveInClass(node, doubleType.element); | 1635 _resolveInClass(node, doubleType.element); |
| 1636 expect(node.staticElement, getGetter(doubleType, fieldName)); | 1636 expect(node.staticElement, getGetter(doubleType, fieldName)); |
| 1637 _listener.assertNoErrors(); | 1637 _listener.assertNoErrors(); |
| 1638 } | 1638 } |
| 1639 | 1639 |
| 1640 void test_visitSimpleIdentifier_dynamic() { | 1640 void test_visitSimpleIdentifier_dynamic() { |
| 1641 SimpleIdentifier node = AstFactory.identifier3("dynamic"); | 1641 SimpleIdentifier node = AstFactory.identifier3("dynamic"); |
| 1642 _resolveIdentifier(node, []); | 1642 _resolveIdentifier(node); |
| 1643 expect(node.staticElement, same(_typeProvider.dynamicType.element)); | 1643 expect(node.staticElement, same(_typeProvider.dynamicType.element)); |
| 1644 expect(node.staticType, same(_typeProvider.typeType)); | 1644 expect(node.staticType, same(_typeProvider.typeType)); |
| 1645 _listener.assertNoErrors(); | 1645 _listener.assertNoErrors(); |
| 1646 } | 1646 } |
| 1647 | 1647 |
| 1648 void test_visitSimpleIdentifier_lexicalScope() { | 1648 void test_visitSimpleIdentifier_lexicalScope() { |
| 1649 SimpleIdentifier node = AstFactory.identifier3("i"); | 1649 SimpleIdentifier node = AstFactory.identifier3("i"); |
| 1650 VariableElementImpl element = ElementFactory.localVariableElement(node); | 1650 VariableElementImpl element = ElementFactory.localVariableElement(node); |
| 1651 expect(_resolveIdentifier(node, [element]), same(element)); | 1651 expect(_resolveIdentifier(node, [element]), same(element)); |
| 1652 _listener.assertNoErrors(); | 1652 _listener.assertNoErrors(); |
| 1653 } | 1653 } |
| 1654 | 1654 |
| 1655 void test_visitSimpleIdentifier_lexicalScope_field_setter() { | 1655 void test_visitSimpleIdentifier_lexicalScope_field_setter() { |
| 1656 InterfaceType intType = _typeProvider.intType; | 1656 InterfaceType intType = _typeProvider.intType; |
| 1657 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 1657 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 1658 String fieldName = "a"; | 1658 String fieldName = "a"; |
| 1659 FieldElement field = ElementFactory.fieldElement(fieldName, false, false, fa
lse, intType); | 1659 FieldElement field = ElementFactory.fieldElement(fieldName, false, false, fa
lse, intType); |
| 1660 classA.fields = <FieldElement> [field]; | 1660 classA.fields = <FieldElement> [field]; |
| 1661 classA.accessors = <PropertyAccessorElement> [field.getter, field.setter]; | 1661 classA.accessors = <PropertyAccessorElement> [field.getter, field.setter]; |
| 1662 SimpleIdentifier node = AstFactory.identifier3(fieldName); | 1662 SimpleIdentifier node = AstFactory.identifier3(fieldName); |
| 1663 AstFactory.assignmentExpression(node, TokenType.EQ, AstFactory.integer(0)); | 1663 AstFactory.assignmentExpression(node, TokenType.EQ, AstFactory.integer(0)); |
| 1664 _resolveInClass(node, classA); | 1664 _resolveInClass(node, classA); |
| 1665 Element element = node.staticElement; | 1665 Element element = node.staticElement; |
| 1666 EngineTestCase.assertInstanceOf((obj) => obj is PropertyAccessorElement, Pro
pertyAccessorElement, element); | 1666 EngineTestCase.assertInstanceOf((obj) => obj is PropertyAccessorElement, Pro
pertyAccessorElement, element); |
| 1667 expect((element as PropertyAccessorElement).isSetter, isTrue); | 1667 expect((element as PropertyAccessorElement).isSetter, isTrue); |
| 1668 _listener.assertNoErrors(); | 1668 _listener.assertNoErrors(); |
| 1669 } | 1669 } |
| 1670 | 1670 |
| 1671 void test_visitSuperConstructorInvocation() { | 1671 void test_visitSuperConstructorInvocation() { |
| 1672 ClassElementImpl superclass = ElementFactory.classElement2("A", []); | 1672 ClassElementImpl superclass = ElementFactory.classElement2("A"); |
| 1673 ConstructorElementImpl superConstructor = ElementFactory.constructorElement2
(superclass, null, []); | 1673 ConstructorElementImpl superConstructor = ElementFactory.constructorElement2
(superclass, null); |
| 1674 superclass.constructors = <ConstructorElement> [superConstructor]; | 1674 superclass.constructors = <ConstructorElement> [superConstructor]; |
| 1675 ClassElementImpl subclass = ElementFactory.classElement("B", superclass.type
, []); | 1675 ClassElementImpl subclass = ElementFactory.classElement("B", superclass.type
); |
| 1676 ConstructorElementImpl subConstructor = ElementFactory.constructorElement2(s
ubclass, null, []); | 1676 ConstructorElementImpl subConstructor = ElementFactory.constructorElement2(s
ubclass, null); |
| 1677 subclass.constructors = <ConstructorElement> [subConstructor]; | 1677 subclass.constructors = <ConstructorElement> [subConstructor]; |
| 1678 SuperConstructorInvocation invocation = AstFactory.superConstructorInvocatio
n([]); | 1678 SuperConstructorInvocation invocation = AstFactory.superConstructorInvocatio
n(); |
| 1679 _resolveInClass(invocation, subclass); | 1679 _resolveInClass(invocation, subclass); |
| 1680 expect(invocation.staticElement, superConstructor); | 1680 expect(invocation.staticElement, superConstructor); |
| 1681 _listener.assertNoErrors(); | 1681 _listener.assertNoErrors(); |
| 1682 } | 1682 } |
| 1683 | 1683 |
| 1684 void test_visitSuperConstructorInvocation_namedParameter() { | 1684 void test_visitSuperConstructorInvocation_namedParameter() { |
| 1685 ClassElementImpl superclass = ElementFactory.classElement2("A", []); | 1685 ClassElementImpl superclass = ElementFactory.classElement2("A"); |
| 1686 ConstructorElementImpl superConstructor = ElementFactory.constructorElement2
(superclass, null, []); | 1686 ConstructorElementImpl superConstructor = ElementFactory.constructorElement2
(superclass, null); |
| 1687 String parameterName = "p"; | 1687 String parameterName = "p"; |
| 1688 ParameterElement parameter = ElementFactory.namedParameter(parameterName); | 1688 ParameterElement parameter = ElementFactory.namedParameter(parameterName); |
| 1689 superConstructor.parameters = <ParameterElement> [parameter]; | 1689 superConstructor.parameters = <ParameterElement> [parameter]; |
| 1690 superclass.constructors = <ConstructorElement> [superConstructor]; | 1690 superclass.constructors = <ConstructorElement> [superConstructor]; |
| 1691 ClassElementImpl subclass = ElementFactory.classElement("B", superclass.type
, []); | 1691 ClassElementImpl subclass = ElementFactory.classElement("B", superclass.type
); |
| 1692 ConstructorElementImpl subConstructor = ElementFactory.constructorElement2(s
ubclass, null, []); | 1692 ConstructorElementImpl subConstructor = ElementFactory.constructorElement2(s
ubclass, null); |
| 1693 subclass.constructors = <ConstructorElement> [subConstructor]; | 1693 subclass.constructors = <ConstructorElement> [subConstructor]; |
| 1694 SuperConstructorInvocation invocation = AstFactory.superConstructorInvocatio
n([AstFactory.namedExpression2(parameterName, AstFactory.integer(0))]); | 1694 SuperConstructorInvocation invocation = AstFactory.superConstructorInvocatio
n([AstFactory.namedExpression2(parameterName, AstFactory.integer(0))]); |
| 1695 _resolveInClass(invocation, subclass); | 1695 _resolveInClass(invocation, subclass); |
| 1696 expect(invocation.staticElement, superConstructor); | 1696 expect(invocation.staticElement, superConstructor); |
| 1697 expect((invocation.argumentList.arguments[0] as NamedExpression).name.label.
staticElement, same(parameter)); | 1697 expect((invocation.argumentList.arguments[0] as NamedExpression).name.label.
staticElement, same(parameter)); |
| 1698 _listener.assertNoErrors(); | 1698 _listener.assertNoErrors(); |
| 1699 } | 1699 } |
| 1700 | 1700 |
| 1701 /** | 1701 /** |
| 1702 * Create the resolver used by the tests. | 1702 * Create the resolver used by the tests. |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1750 | 1750 |
| 1751 /** | 1751 /** |
| 1752 * Return the element associated with the given identifier after the resolver
has resolved the | 1752 * Return the element associated with the given identifier after the resolver
has resolved the |
| 1753 * identifier. | 1753 * identifier. |
| 1754 * | 1754 * |
| 1755 * @param node the expression to be resolved | 1755 * @param node the expression to be resolved |
| 1756 * @param definedElements the elements that are to be defined in the scope in
which the element is | 1756 * @param definedElements the elements that are to be defined in the scope in
which the element is |
| 1757 * being resolved | 1757 * being resolved |
| 1758 * @return the element to which the expression was resolved | 1758 * @return the element to which the expression was resolved |
| 1759 */ | 1759 */ |
| 1760 Element _resolveIdentifier(Identifier node, List<Element> definedElements) { | 1760 Element _resolveIdentifier(Identifier node, [List<Element> definedElements]) { |
| 1761 _resolveNode(node, definedElements); | 1761 _resolveNode(node, definedElements); |
| 1762 return node.staticElement; | 1762 return node.staticElement; |
| 1763 } | 1763 } |
| 1764 | 1764 |
| 1765 /** | 1765 /** |
| 1766 * Return the element associated with the given identifier after the resolver
has resolved the | 1766 * Return the element associated with the given identifier after the resolver
has resolved the |
| 1767 * identifier. | 1767 * identifier. |
| 1768 * | 1768 * |
| 1769 * @param node the expression to be resolved | 1769 * @param node the expression to be resolved |
| 1770 * @param enclosingClass the element representing the class enclosing the iden
tifier | 1770 * @param enclosingClass the element representing the class enclosing the iden
tifier |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1789 | 1789 |
| 1790 /** | 1790 /** |
| 1791 * Return the element associated with the given expression after the resolver
has resolved the | 1791 * Return the element associated with the given expression after the resolver
has resolved the |
| 1792 * expression. | 1792 * expression. |
| 1793 * | 1793 * |
| 1794 * @param node the expression to be resolved | 1794 * @param node the expression to be resolved |
| 1795 * @param definedElements the elements that are to be defined in the scope in
which the element is | 1795 * @param definedElements the elements that are to be defined in the scope in
which the element is |
| 1796 * being resolved | 1796 * being resolved |
| 1797 * @return the element to which the expression was resolved | 1797 * @return the element to which the expression was resolved |
| 1798 */ | 1798 */ |
| 1799 Element _resolveIndexExpression(IndexExpression node, List<Element> definedEle
ments) { | 1799 Element _resolveIndexExpression(IndexExpression node, [List<Element> definedEl
ements]) { |
| 1800 _resolveNode(node, definedElements); | 1800 _resolveNode(node, definedElements); |
| 1801 return node.staticElement; | 1801 return node.staticElement; |
| 1802 } | 1802 } |
| 1803 | 1803 |
| 1804 /** | 1804 /** |
| 1805 * Return the element associated with the given identifier after the resolver
has resolved the | 1805 * Return the element associated with the given identifier after the resolver
has resolved the |
| 1806 * identifier. | 1806 * identifier. |
| 1807 * | 1807 * |
| 1808 * @param node the expression to be resolved | 1808 * @param node the expression to be resolved |
| 1809 * @param definedElements the elements that are to be defined in the scope in
which the element is | 1809 * @param definedElements the elements that are to be defined in the scope in
which the element is |
| 1810 * being resolved | 1810 * being resolved |
| 1811 * @return the element to which the expression was resolved | 1811 * @return the element to which the expression was resolved |
| 1812 */ | 1812 */ |
| 1813 void _resolveNode(AstNode node, List<Element> definedElements) { | 1813 void _resolveNode(AstNode node, [List<Element> definedElements]) { |
| 1814 try { | 1814 try { |
| 1815 Scope outerScope = _visitor.nameScope_J2DAccessor as Scope; | 1815 Scope outerScope = _visitor.nameScope_J2DAccessor as Scope; |
| 1816 try { | 1816 try { |
| 1817 EnclosedScope innerScope = new EnclosedScope(outerScope); | 1817 EnclosedScope innerScope = new EnclosedScope(outerScope); |
| 1818 for (Element element in definedElements) { | 1818 if (definedElements != null) { |
| 1819 innerScope.define(element); | 1819 for (Element element in definedElements) { |
| 1820 innerScope.define(element); |
| 1821 } |
| 1820 } | 1822 } |
| 1821 _visitor.nameScope_J2DAccessor = innerScope; | 1823 _visitor.nameScope_J2DAccessor = innerScope; |
| 1822 node.accept(_resolver); | 1824 node.accept(_resolver); |
| 1823 } finally { | 1825 } finally { |
| 1824 _visitor.nameScope_J2DAccessor = outerScope; | 1826 _visitor.nameScope_J2DAccessor = outerScope; |
| 1825 } | 1827 } |
| 1826 } catch (exception) { | 1828 } catch (exception) { |
| 1827 throw new IllegalArgumentException("Could not resolve node", exception); | 1829 throw new IllegalArgumentException("Could not resolve node", exception); |
| 1828 } | 1830 } |
| 1829 } | 1831 } |
| (...skipping 1426 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3256 | 3258 |
| 3257 void test_unusedLocalVariable_isRead_usedArgument() { | 3259 void test_unusedLocalVariable_isRead_usedArgument() { |
| 3258 enableUnusedLocalVariable = true; | 3260 enableUnusedLocalVariable = true; |
| 3259 Source source = addSource(r''' | 3261 Source source = addSource(r''' |
| 3260 main() { | 3262 main() { |
| 3261 var v = 1; | 3263 var v = 1; |
| 3262 print(++v); | 3264 print(++v); |
| 3263 } | 3265 } |
| 3264 print(x) {}'''); | 3266 print(x) {}'''); |
| 3265 resolve(source); | 3267 resolve(source); |
| 3266 assertErrors(source, []); | 3268 assertErrors(source); |
| 3267 verify([source]); | 3269 verify([source]); |
| 3268 } | 3270 } |
| 3269 | 3271 |
| 3270 void test_unusedLocalVariable_isRead_usedInvocationTarget() { | 3272 void test_unusedLocalVariable_isRead_usedInvocationTarget() { |
| 3271 enableUnusedLocalVariable = true; | 3273 enableUnusedLocalVariable = true; |
| 3272 Source source = addSource(r''' | 3274 Source source = addSource(r''' |
| 3273 class A { | 3275 class A { |
| 3274 foo() {} | 3276 foo() {} |
| 3275 } | 3277 } |
| 3276 main() { | 3278 main() { |
| 3277 var a = new A(); | 3279 var a = new A(); |
| 3278 a.foo(); | 3280 a.foo(); |
| 3279 } | 3281 } |
| 3280 '''); | 3282 '''); |
| 3281 resolve(source); | 3283 resolve(source); |
| 3282 assertErrors(source, []); | 3284 assertErrors(source); |
| 3283 verify([source]); | 3285 verify([source]); |
| 3284 } | 3286 } |
| 3285 | 3287 |
| 3286 void test_unusedLocalVariable_isInvoked() { | 3288 void test_unusedLocalVariable_isInvoked() { |
| 3287 enableUnusedLocalVariable = true; | 3289 enableUnusedLocalVariable = true; |
| 3288 Source source = addSource(r''' | 3290 Source source = addSource(r''' |
| 3289 typedef Foo(); | 3291 typedef Foo(); |
| 3290 main() { | 3292 main() { |
| 3291 Foo foo; | 3293 Foo foo; |
| 3292 foo(); | 3294 foo(); |
| 3293 }'''); | 3295 }'''); |
| 3294 resolve(source); | 3296 resolve(source); |
| 3295 assertErrors(source, []); | 3297 assertErrors(source); |
| 3296 verify([source]); | 3298 verify([source]); |
| 3297 } | 3299 } |
| 3298 | 3300 |
| 3299 void test_unusedLocalVariable_inCatch_exception() { | 3301 void test_unusedLocalVariable_inCatch_exception() { |
| 3300 enableUnusedLocalVariable = true; | 3302 enableUnusedLocalVariable = true; |
| 3301 Source source = addSource(r''' | 3303 Source source = addSource(r''' |
| 3302 main() { | 3304 main() { |
| 3303 try { | 3305 try { |
| 3304 } catch (exception) { | 3306 } catch (exception) { |
| 3305 } | 3307 } |
| 3306 }'''); | 3308 }'''); |
| 3307 resolve(source); | 3309 resolve(source); |
| 3308 assertErrors(source, []); | 3310 assertErrors(source); |
| 3309 verify([source]); | 3311 verify([source]); |
| 3310 } | 3312 } |
| 3311 | 3313 |
| 3312 void test_unusedLocalVariable_inCatch_stackTrace() { | 3314 void test_unusedLocalVariable_inCatch_stackTrace() { |
| 3313 enableUnusedLocalVariable = true; | 3315 enableUnusedLocalVariable = true; |
| 3314 Source source = addSource(r''' | 3316 Source source = addSource(r''' |
| 3315 main() { | 3317 main() { |
| 3316 try { | 3318 try { |
| 3317 } catch (exception, stackTrace) { | 3319 } catch (exception, stackTrace) { |
| 3318 } | 3320 } |
| 3319 }'''); | 3321 }'''); |
| 3320 resolve(source); | 3322 resolve(source); |
| 3321 assertErrors(source, [HintCode.UNUSED_LOCAL_VARIABLE]); | 3323 assertErrors(source, [HintCode.UNUSED_LOCAL_VARIABLE]); |
| 3322 verify([source]); | 3324 verify([source]); |
| 3323 } | 3325 } |
| 3324 | 3326 |
| 3325 void test_unusedLocalVariable_inCatch_stackTrace_used() { | 3327 void test_unusedLocalVariable_inCatch_stackTrace_used() { |
| 3326 enableUnusedLocalVariable = true; | 3328 enableUnusedLocalVariable = true; |
| 3327 Source source = addSource(r''' | 3329 Source source = addSource(r''' |
| 3328 main() { | 3330 main() { |
| 3329 try { | 3331 try { |
| 3330 } catch (exception, stackTrace) { | 3332 } catch (exception, stackTrace) { |
| 3331 print('exception at $stackTrace'); | 3333 print('exception at $stackTrace'); |
| 3332 } | 3334 } |
| 3333 } | 3335 } |
| 3334 print(x) {}'''); | 3336 print(x) {}'''); |
| 3335 resolve(source); | 3337 resolve(source); |
| 3336 assertErrors(source, []); | 3338 assertErrors(source); |
| 3337 verify([source]); | 3339 verify([source]); |
| 3338 } | 3340 } |
| 3339 | 3341 |
| 3340 void test_useOfVoidResult_assignmentExpression_function() { | 3342 void test_useOfVoidResult_assignmentExpression_function() { |
| 3341 Source source = addSource(r''' | 3343 Source source = addSource(r''' |
| 3342 void f() {} | 3344 void f() {} |
| 3343 class A { | 3345 class A { |
| 3344 n() { | 3346 n() { |
| 3345 var a; | 3347 var a; |
| 3346 a = f(); | 3348 a = f(); |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3476 void setUp() { | 3478 void setUp() { |
| 3477 _typeProvider = new TestTypeProvider(); | 3479 _typeProvider = new TestTypeProvider(); |
| 3478 _inheritanceManager = _createInheritanceManager(); | 3480 _inheritanceManager = _createInheritanceManager(); |
| 3479 InterfaceType objectType = _typeProvider.objectType; | 3481 InterfaceType objectType = _typeProvider.objectType; |
| 3480 _numOfMembersInObject = objectType.methods.length + objectType.accessors.len
gth; | 3482 _numOfMembersInObject = objectType.methods.length + objectType.accessors.len
gth; |
| 3481 } | 3483 } |
| 3482 | 3484 |
| 3483 void test_getMapOfMembersInheritedFromClasses_accessor_extends() { | 3485 void test_getMapOfMembersInheritedFromClasses_accessor_extends() { |
| 3484 // class A { int get g; } | 3486 // class A { int get g; } |
| 3485 // class B extends A {} | 3487 // class B extends A {} |
| 3486 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 3488 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 3487 String getterName = "g"; | 3489 String getterName = "g"; |
| 3488 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, _typeProvider.intType); | 3490 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, _typeProvider.intType); |
| 3489 classA.accessors = <PropertyAccessorElement> [getterG]; | 3491 classA.accessors = <PropertyAccessorElement> [getterG]; |
| 3490 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 3492 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
| 3491 MemberMap mapB = _inheritanceManager.getMapOfMembersInheritedFromClasses(cla
ssB); | 3493 MemberMap mapB = _inheritanceManager.getMapOfMembersInheritedFromClasses(cla
ssB); |
| 3492 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromClasses(cla
ssA); | 3494 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromClasses(cla
ssA); |
| 3493 expect(mapA.size, _numOfMembersInObject); | 3495 expect(mapA.size, _numOfMembersInObject); |
| 3494 expect(mapB.size, _numOfMembersInObject + 1); | 3496 expect(mapB.size, _numOfMembersInObject + 1); |
| 3495 expect(mapB.get(getterName), same(getterG)); | 3497 expect(mapB.get(getterName), same(getterG)); |
| 3496 _assertNoErrors(classA); | 3498 _assertNoErrors(classA); |
| 3497 _assertNoErrors(classB); | 3499 _assertNoErrors(classB); |
| 3498 } | 3500 } |
| 3499 | 3501 |
| 3500 void test_getMapOfMembersInheritedFromClasses_accessor_implements() { | 3502 void test_getMapOfMembersInheritedFromClasses_accessor_implements() { |
| 3501 // class A { int get g; } | 3503 // class A { int get g; } |
| 3502 // class B implements A {} | 3504 // class B implements A {} |
| 3503 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 3505 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 3504 String getterName = "g"; | 3506 String getterName = "g"; |
| 3505 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, _typeProvider.intType); | 3507 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, _typeProvider.intType); |
| 3506 classA.accessors = <PropertyAccessorElement> [getterG]; | 3508 classA.accessors = <PropertyAccessorElement> [getterG]; |
| 3507 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 3509 ClassElementImpl classB = ElementFactory.classElement2("B"); |
| 3508 classB.interfaces = <InterfaceType> [classA.type]; | 3510 classB.interfaces = <InterfaceType> [classA.type]; |
| 3509 MemberMap mapB = _inheritanceManager.getMapOfMembersInheritedFromClasses(cla
ssB); | 3511 MemberMap mapB = _inheritanceManager.getMapOfMembersInheritedFromClasses(cla
ssB); |
| 3510 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromClasses(cla
ssA); | 3512 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromClasses(cla
ssA); |
| 3511 expect(mapA.size, _numOfMembersInObject); | 3513 expect(mapA.size, _numOfMembersInObject); |
| 3512 expect(mapB.size, _numOfMembersInObject); | 3514 expect(mapB.size, _numOfMembersInObject); |
| 3513 expect(mapB.get(getterName), isNull); | 3515 expect(mapB.get(getterName), isNull); |
| 3514 _assertNoErrors(classA); | 3516 _assertNoErrors(classA); |
| 3515 _assertNoErrors(classB); | 3517 _assertNoErrors(classB); |
| 3516 } | 3518 } |
| 3517 | 3519 |
| 3518 void test_getMapOfMembersInheritedFromClasses_accessor_with() { | 3520 void test_getMapOfMembersInheritedFromClasses_accessor_with() { |
| 3519 // class A { int get g; } | 3521 // class A { int get g; } |
| 3520 // class B extends Object with A {} | 3522 // class B extends Object with A {} |
| 3521 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 3523 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 3522 String getterName = "g"; | 3524 String getterName = "g"; |
| 3523 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, _typeProvider.intType); | 3525 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, _typeProvider.intType); |
| 3524 classA.accessors = <PropertyAccessorElement> [getterG]; | 3526 classA.accessors = <PropertyAccessorElement> [getterG]; |
| 3525 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 3527 ClassElementImpl classB = ElementFactory.classElement2("B"); |
| 3526 classB.mixins = <InterfaceType> [classA.type]; | 3528 classB.mixins = <InterfaceType> [classA.type]; |
| 3527 MemberMap mapB = _inheritanceManager.getMapOfMembersInheritedFromClasses(cla
ssB); | 3529 MemberMap mapB = _inheritanceManager.getMapOfMembersInheritedFromClasses(cla
ssB); |
| 3528 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromClasses(cla
ssA); | 3530 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromClasses(cla
ssA); |
| 3529 expect(mapA.size, _numOfMembersInObject); | 3531 expect(mapA.size, _numOfMembersInObject); |
| 3530 expect(mapB.size, _numOfMembersInObject + 1); | 3532 expect(mapB.size, _numOfMembersInObject + 1); |
| 3531 expect(mapB.get(getterName), same(getterG)); | 3533 expect(mapB.get(getterName), same(getterG)); |
| 3532 _assertNoErrors(classA); | 3534 _assertNoErrors(classA); |
| 3533 _assertNoErrors(classB); | 3535 _assertNoErrors(classB); |
| 3534 } | 3536 } |
| 3535 | 3537 |
| 3536 void test_getMapOfMembersInheritedFromClasses_implicitExtends() { | 3538 void test_getMapOfMembersInheritedFromClasses_implicitExtends() { |
| 3537 // class A {} | 3539 // class A {} |
| 3538 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 3540 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 3539 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromClasses(cla
ssA); | 3541 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromClasses(cla
ssA); |
| 3540 expect(mapA.size, _numOfMembersInObject); | 3542 expect(mapA.size, _numOfMembersInObject); |
| 3541 _assertNoErrors(classA); | 3543 _assertNoErrors(classA); |
| 3542 } | 3544 } |
| 3543 | 3545 |
| 3544 void test_getMapOfMembersInheritedFromClasses_method_extends() { | 3546 void test_getMapOfMembersInheritedFromClasses_method_extends() { |
| 3545 // class A { int g(); } | 3547 // class A { int g(); } |
| 3546 // class B extends A {} | 3548 // class B extends A {} |
| 3547 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 3549 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 3548 String methodName = "m"; | 3550 String methodName = "m"; |
| 3549 MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvid
er.intType, []); | 3551 MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvid
er.intType); |
| 3550 classA.methods = <MethodElement> [methodM]; | 3552 classA.methods = <MethodElement> [methodM]; |
| 3551 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 3553 ClassElementImpl classB = ElementFactory.classElement2("B"); |
| 3552 classB.supertype = classA.type; | 3554 classB.supertype = classA.type; |
| 3553 MemberMap mapB = _inheritanceManager.getMapOfMembersInheritedFromClasses(cla
ssB); | 3555 MemberMap mapB = _inheritanceManager.getMapOfMembersInheritedFromClasses(cla
ssB); |
| 3554 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromClasses(cla
ssA); | 3556 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromClasses(cla
ssA); |
| 3555 expect(mapA.size, _numOfMembersInObject); | 3557 expect(mapA.size, _numOfMembersInObject); |
| 3556 expect(mapB.size, _numOfMembersInObject + 1); | 3558 expect(mapB.size, _numOfMembersInObject + 1); |
| 3557 expect(mapB.get(methodName), same(methodM)); | 3559 expect(mapB.get(methodName), same(methodM)); |
| 3558 _assertNoErrors(classA); | 3560 _assertNoErrors(classA); |
| 3559 _assertNoErrors(classB); | 3561 _assertNoErrors(classB); |
| 3560 } | 3562 } |
| 3561 | 3563 |
| 3562 void test_getMapOfMembersInheritedFromClasses_method_implements() { | 3564 void test_getMapOfMembersInheritedFromClasses_method_implements() { |
| 3563 // class A { int g(); } | 3565 // class A { int g(); } |
| 3564 // class B implements A {} | 3566 // class B implements A {} |
| 3565 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 3567 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 3566 String methodName = "m"; | 3568 String methodName = "m"; |
| 3567 MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvid
er.intType, []); | 3569 MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvid
er.intType); |
| 3568 classA.methods = <MethodElement> [methodM]; | 3570 classA.methods = <MethodElement> [methodM]; |
| 3569 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 3571 ClassElementImpl classB = ElementFactory.classElement2("B"); |
| 3570 classB.interfaces = <InterfaceType> [classA.type]; | 3572 classB.interfaces = <InterfaceType> [classA.type]; |
| 3571 MemberMap mapB = _inheritanceManager.getMapOfMembersInheritedFromClasses(cla
ssB); | 3573 MemberMap mapB = _inheritanceManager.getMapOfMembersInheritedFromClasses(cla
ssB); |
| 3572 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromClasses(cla
ssA); | 3574 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromClasses(cla
ssA); |
| 3573 expect(mapA.size, _numOfMembersInObject); | 3575 expect(mapA.size, _numOfMembersInObject); |
| 3574 expect(mapB.size, _numOfMembersInObject); | 3576 expect(mapB.size, _numOfMembersInObject); |
| 3575 expect(mapB.get(methodName), isNull); | 3577 expect(mapB.get(methodName), isNull); |
| 3576 _assertNoErrors(classA); | 3578 _assertNoErrors(classA); |
| 3577 _assertNoErrors(classB); | 3579 _assertNoErrors(classB); |
| 3578 } | 3580 } |
| 3579 | 3581 |
| 3580 void test_getMapOfMembersInheritedFromClasses_method_with() { | 3582 void test_getMapOfMembersInheritedFromClasses_method_with() { |
| 3581 // class A { int g(); } | 3583 // class A { int g(); } |
| 3582 // class B extends Object with A {} | 3584 // class B extends Object with A {} |
| 3583 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 3585 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 3584 String methodName = "m"; | 3586 String methodName = "m"; |
| 3585 MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvid
er.intType, []); | 3587 MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvid
er.intType); |
| 3586 classA.methods = <MethodElement> [methodM]; | 3588 classA.methods = <MethodElement> [methodM]; |
| 3587 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 3589 ClassElementImpl classB = ElementFactory.classElement2("B"); |
| 3588 classB.mixins = <InterfaceType> [classA.type]; | 3590 classB.mixins = <InterfaceType> [classA.type]; |
| 3589 MemberMap mapB = _inheritanceManager.getMapOfMembersInheritedFromClasses(cla
ssB); | 3591 MemberMap mapB = _inheritanceManager.getMapOfMembersInheritedFromClasses(cla
ssB); |
| 3590 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromClasses(cla
ssA); | 3592 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromClasses(cla
ssA); |
| 3591 expect(mapA.size, _numOfMembersInObject); | 3593 expect(mapA.size, _numOfMembersInObject); |
| 3592 expect(mapB.size, _numOfMembersInObject + 1); | 3594 expect(mapB.size, _numOfMembersInObject + 1); |
| 3593 expect(mapB.get(methodName), same(methodM)); | 3595 expect(mapB.get(methodName), same(methodM)); |
| 3594 _assertNoErrors(classA); | 3596 _assertNoErrors(classA); |
| 3595 _assertNoErrors(classB); | 3597 _assertNoErrors(classB); |
| 3596 } | 3598 } |
| 3597 | 3599 |
| 3598 void test_getMapOfMembersInheritedFromInterfaces_accessor_extends() { | 3600 void test_getMapOfMembersInheritedFromInterfaces_accessor_extends() { |
| 3599 // class A { int get g; } | 3601 // class A { int get g; } |
| 3600 // class B extends A {} | 3602 // class B extends A {} |
| 3601 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 3603 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 3602 String getterName = "g"; | 3604 String getterName = "g"; |
| 3603 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, _typeProvider.intType); | 3605 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, _typeProvider.intType); |
| 3604 classA.accessors = <PropertyAccessorElement> [getterG]; | 3606 classA.accessors = <PropertyAccessorElement> [getterG]; |
| 3605 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 3607 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
| 3606 MemberMap mapB = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classB); | 3608 MemberMap mapB = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classB); |
| 3607 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); | 3609 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); |
| 3608 expect(mapA.size, _numOfMembersInObject); | 3610 expect(mapA.size, _numOfMembersInObject); |
| 3609 expect(mapB.size, _numOfMembersInObject + 1); | 3611 expect(mapB.size, _numOfMembersInObject + 1); |
| 3610 expect(mapB.get(getterName), same(getterG)); | 3612 expect(mapB.get(getterName), same(getterG)); |
| 3611 _assertNoErrors(classA); | 3613 _assertNoErrors(classA); |
| 3612 _assertNoErrors(classB); | 3614 _assertNoErrors(classB); |
| 3613 } | 3615 } |
| 3614 | 3616 |
| 3615 void test_getMapOfMembersInheritedFromInterfaces_accessor_implements() { | 3617 void test_getMapOfMembersInheritedFromInterfaces_accessor_implements() { |
| 3616 // class A { int get g; } | 3618 // class A { int get g; } |
| 3617 // class B implements A {} | 3619 // class B implements A {} |
| 3618 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 3620 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 3619 String getterName = "g"; | 3621 String getterName = "g"; |
| 3620 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, _typeProvider.intType); | 3622 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, _typeProvider.intType); |
| 3621 classA.accessors = <PropertyAccessorElement> [getterG]; | 3623 classA.accessors = <PropertyAccessorElement> [getterG]; |
| 3622 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 3624 ClassElementImpl classB = ElementFactory.classElement2("B"); |
| 3623 classB.interfaces = <InterfaceType> [classA.type]; | 3625 classB.interfaces = <InterfaceType> [classA.type]; |
| 3624 MemberMap mapB = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classB); | 3626 MemberMap mapB = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classB); |
| 3625 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); | 3627 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); |
| 3626 expect(mapA.size, _numOfMembersInObject); | 3628 expect(mapA.size, _numOfMembersInObject); |
| 3627 expect(mapB.size, _numOfMembersInObject + 1); | 3629 expect(mapB.size, _numOfMembersInObject + 1); |
| 3628 expect(mapB.get(getterName), same(getterG)); | 3630 expect(mapB.get(getterName), same(getterG)); |
| 3629 _assertNoErrors(classA); | 3631 _assertNoErrors(classA); |
| 3630 _assertNoErrors(classB); | 3632 _assertNoErrors(classB); |
| 3631 } | 3633 } |
| 3632 | 3634 |
| 3633 void test_getMapOfMembersInheritedFromInterfaces_accessor_with() { | 3635 void test_getMapOfMembersInheritedFromInterfaces_accessor_with() { |
| 3634 // class A { int get g; } | 3636 // class A { int get g; } |
| 3635 // class B extends Object with A {} | 3637 // class B extends Object with A {} |
| 3636 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 3638 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 3637 String getterName = "g"; | 3639 String getterName = "g"; |
| 3638 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, _typeProvider.intType); | 3640 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, _typeProvider.intType); |
| 3639 classA.accessors = <PropertyAccessorElement> [getterG]; | 3641 classA.accessors = <PropertyAccessorElement> [getterG]; |
| 3640 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 3642 ClassElementImpl classB = ElementFactory.classElement2("B"); |
| 3641 classB.mixins = <InterfaceType> [classA.type]; | 3643 classB.mixins = <InterfaceType> [classA.type]; |
| 3642 MemberMap mapB = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classB); | 3644 MemberMap mapB = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classB); |
| 3643 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); | 3645 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); |
| 3644 expect(mapA.size, _numOfMembersInObject); | 3646 expect(mapA.size, _numOfMembersInObject); |
| 3645 expect(mapB.size, _numOfMembersInObject + 1); | 3647 expect(mapB.size, _numOfMembersInObject + 1); |
| 3646 expect(mapB.get(getterName), same(getterG)); | 3648 expect(mapB.get(getterName), same(getterG)); |
| 3647 _assertNoErrors(classA); | 3649 _assertNoErrors(classA); |
| 3648 _assertNoErrors(classB); | 3650 _assertNoErrors(classB); |
| 3649 } | 3651 } |
| 3650 | 3652 |
| 3651 void test_getMapOfMembersInheritedFromInterfaces_implicitExtends() { | 3653 void test_getMapOfMembersInheritedFromInterfaces_implicitExtends() { |
| 3652 // class A {} | 3654 // class A {} |
| 3653 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 3655 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 3654 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); | 3656 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); |
| 3655 expect(mapA.size, _numOfMembersInObject); | 3657 expect(mapA.size, _numOfMembersInObject); |
| 3656 _assertNoErrors(classA); | 3658 _assertNoErrors(classA); |
| 3657 } | 3659 } |
| 3658 | 3660 |
| 3659 void test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance
_getter_method() { | 3661 void test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance
_getter_method() { |
| 3660 // class I1 { int m(); } | 3662 // class I1 { int m(); } |
| 3661 // class I2 { int get m; } | 3663 // class I2 { int get m; } |
| 3662 // class A implements I2, I1 {} | 3664 // class A implements I2, I1 {} |
| 3663 ClassElementImpl classI1 = ElementFactory.classElement2("I1", []); | 3665 ClassElementImpl classI1 = ElementFactory.classElement2("I1"); |
| 3664 String methodName = "m"; | 3666 String methodName = "m"; |
| 3665 MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvid
er.intType, []); | 3667 MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvid
er.intType); |
| 3666 classI1.methods = <MethodElement> [methodM]; | 3668 classI1.methods = <MethodElement> [methodM]; |
| 3667 ClassElementImpl classI2 = ElementFactory.classElement2("I2", []); | 3669 ClassElementImpl classI2 = ElementFactory.classElement2("I2"); |
| 3668 PropertyAccessorElement getter = ElementFactory.getterElement(methodName, fa
lse, _typeProvider.intType); | 3670 PropertyAccessorElement getter = ElementFactory.getterElement(methodName, fa
lse, _typeProvider.intType); |
| 3669 classI2.accessors = <PropertyAccessorElement> [getter]; | 3671 classI2.accessors = <PropertyAccessorElement> [getter]; |
| 3670 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 3672 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 3671 classA.interfaces = <InterfaceType> [classI2.type, classI1.type]; | 3673 classA.interfaces = <InterfaceType> [classI2.type, classI1.type]; |
| 3672 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); | 3674 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); |
| 3673 expect(mapA.size, _numOfMembersInObject); | 3675 expect(mapA.size, _numOfMembersInObject); |
| 3674 expect(mapA.get(methodName), isNull); | 3676 expect(mapA.get(methodName), isNull); |
| 3675 _assertErrors(classA, [StaticWarningCode.INCONSISTENT_METHOD_INHERITANCE_GET
TER_AND_METHOD]); | 3677 _assertErrors(classA, [StaticWarningCode.INCONSISTENT_METHOD_INHERITANCE_GET
TER_AND_METHOD]); |
| 3676 } | 3678 } |
| 3677 | 3679 |
| 3678 void test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance
_int_str() { | 3680 void test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance
_int_str() { |
| 3679 // class I1 { int m(); } | 3681 // class I1 { int m(); } |
| 3680 // class I2 { String m(); } | 3682 // class I2 { String m(); } |
| 3681 // class A implements I1, I2 {} | 3683 // class A implements I1, I2 {} |
| 3682 ClassElementImpl classI1 = ElementFactory.classElement2("I1", []); | 3684 ClassElementImpl classI1 = ElementFactory.classElement2("I1"); |
| 3683 String methodName = "m"; | 3685 String methodName = "m"; |
| 3684 MethodElement methodM1 = ElementFactory.methodElement(methodName, null, [_ty
peProvider.intType]); | 3686 MethodElement methodM1 = ElementFactory.methodElement(methodName, null, [_ty
peProvider.intType]); |
| 3685 classI1.methods = <MethodElement> [methodM1]; | 3687 classI1.methods = <MethodElement> [methodM1]; |
| 3686 ClassElementImpl classI2 = ElementFactory.classElement2("I2", []); | 3688 ClassElementImpl classI2 = ElementFactory.classElement2("I2"); |
| 3687 MethodElement methodM2 = ElementFactory.methodElement(methodName, null, [_ty
peProvider.stringType]); | 3689 MethodElement methodM2 = ElementFactory.methodElement(methodName, null, [_ty
peProvider.stringType]); |
| 3688 classI2.methods = <MethodElement> [methodM2]; | 3690 classI2.methods = <MethodElement> [methodM2]; |
| 3689 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 3691 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 3690 classA.interfaces = <InterfaceType> [classI1.type, classI2.type]; | 3692 classA.interfaces = <InterfaceType> [classI1.type, classI2.type]; |
| 3691 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); | 3693 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); |
| 3692 expect(mapA.size, _numOfMembersInObject); | 3694 expect(mapA.size, _numOfMembersInObject); |
| 3693 expect(mapA.get(methodName), isNull); | 3695 expect(mapA.get(methodName), isNull); |
| 3694 _assertErrors(classA, [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE
]); | 3696 _assertErrors(classA, [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE
]); |
| 3695 } | 3697 } |
| 3696 | 3698 |
| 3697 void test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance
_method_getter() { | 3699 void test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance
_method_getter() { |
| 3698 // class I1 { int m(); } | 3700 // class I1 { int m(); } |
| 3699 // class I2 { int get m; } | 3701 // class I2 { int get m; } |
| 3700 // class A implements I1, I2 {} | 3702 // class A implements I1, I2 {} |
| 3701 ClassElementImpl classI1 = ElementFactory.classElement2("I1", []); | 3703 ClassElementImpl classI1 = ElementFactory.classElement2("I1"); |
| 3702 String methodName = "m"; | 3704 String methodName = "m"; |
| 3703 MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvid
er.intType, []); | 3705 MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvid
er.intType); |
| 3704 classI1.methods = <MethodElement> [methodM]; | 3706 classI1.methods = <MethodElement> [methodM]; |
| 3705 ClassElementImpl classI2 = ElementFactory.classElement2("I2", []); | 3707 ClassElementImpl classI2 = ElementFactory.classElement2("I2"); |
| 3706 PropertyAccessorElement getter = ElementFactory.getterElement(methodName, fa
lse, _typeProvider.intType); | 3708 PropertyAccessorElement getter = ElementFactory.getterElement(methodName, fa
lse, _typeProvider.intType); |
| 3707 classI2.accessors = <PropertyAccessorElement> [getter]; | 3709 classI2.accessors = <PropertyAccessorElement> [getter]; |
| 3708 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 3710 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 3709 classA.interfaces = <InterfaceType> [classI1.type, classI2.type]; | 3711 classA.interfaces = <InterfaceType> [classI1.type, classI2.type]; |
| 3710 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); | 3712 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); |
| 3711 expect(mapA.size, _numOfMembersInObject); | 3713 expect(mapA.size, _numOfMembersInObject); |
| 3712 expect(mapA.get(methodName), isNull); | 3714 expect(mapA.get(methodName), isNull); |
| 3713 _assertErrors(classA, [StaticWarningCode.INCONSISTENT_METHOD_INHERITANCE_GET
TER_AND_METHOD]); | 3715 _assertErrors(classA, [StaticWarningCode.INCONSISTENT_METHOD_INHERITANCE_GET
TER_AND_METHOD]); |
| 3714 } | 3716 } |
| 3715 | 3717 |
| 3716 void test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance
_numOfRequiredParams() { | 3718 void test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance
_numOfRequiredParams() { |
| 3717 // class I1 { dynamic m(int, [int]); } | 3719 // class I1 { dynamic m(int, [int]); } |
| 3718 // class I2 { dynamic m(int, int, int); } | 3720 // class I2 { dynamic m(int, int, int); } |
| 3719 // class A implements I1, I2 {} | 3721 // class A implements I1, I2 {} |
| 3720 ClassElementImpl classI1 = ElementFactory.classElement2("I1", []); | 3722 ClassElementImpl classI1 = ElementFactory.classElement2("I1"); |
| 3721 String methodName = "m"; | 3723 String methodName = "m"; |
| 3722 MethodElementImpl methodM1 = ElementFactory.methodElement(methodName, _typeP
rovider.dynamicType, []); | 3724 MethodElementImpl methodM1 = ElementFactory.methodElement(methodName, _typeP
rovider.dynamicType); |
| 3723 ParameterElementImpl parameter1 = new ParameterElementImpl.forNode(AstFactor
y.identifier3("a1")); | 3725 ParameterElementImpl parameter1 = new ParameterElementImpl.forNode(AstFactor
y.identifier3("a1")); |
| 3724 parameter1.type = _typeProvider.intType; | 3726 parameter1.type = _typeProvider.intType; |
| 3725 parameter1.parameterKind = ParameterKind.REQUIRED; | 3727 parameter1.parameterKind = ParameterKind.REQUIRED; |
| 3726 ParameterElementImpl parameter2 = new ParameterElementImpl.forNode(AstFactor
y.identifier3("a2")); | 3728 ParameterElementImpl parameter2 = new ParameterElementImpl.forNode(AstFactor
y.identifier3("a2")); |
| 3727 parameter2.type = _typeProvider.intType; | 3729 parameter2.type = _typeProvider.intType; |
| 3728 parameter2.parameterKind = ParameterKind.POSITIONAL; | 3730 parameter2.parameterKind = ParameterKind.POSITIONAL; |
| 3729 methodM1.parameters = <ParameterElement> [parameter1, parameter2]; | 3731 methodM1.parameters = <ParameterElement> [parameter1, parameter2]; |
| 3730 classI1.methods = <MethodElement> [methodM1]; | 3732 classI1.methods = <MethodElement> [methodM1]; |
| 3731 ClassElementImpl classI2 = ElementFactory.classElement2("I2", []); | 3733 ClassElementImpl classI2 = ElementFactory.classElement2("I2"); |
| 3732 MethodElementImpl methodM2 = ElementFactory.methodElement(methodName, _typeP
rovider.dynamicType, []); | 3734 MethodElementImpl methodM2 = ElementFactory.methodElement(methodName, _typeP
rovider.dynamicType); |
| 3733 ParameterElementImpl parameter3 = new ParameterElementImpl.forNode(AstFactor
y.identifier3("a3")); | 3735 ParameterElementImpl parameter3 = new ParameterElementImpl.forNode(AstFactor
y.identifier3("a3")); |
| 3734 parameter3.type = _typeProvider.intType; | 3736 parameter3.type = _typeProvider.intType; |
| 3735 parameter3.parameterKind = ParameterKind.REQUIRED; | 3737 parameter3.parameterKind = ParameterKind.REQUIRED; |
| 3736 ParameterElementImpl parameter4 = new ParameterElementImpl.forNode(AstFactor
y.identifier3("a4")); | 3738 ParameterElementImpl parameter4 = new ParameterElementImpl.forNode(AstFactor
y.identifier3("a4")); |
| 3737 parameter4.type = _typeProvider.intType; | 3739 parameter4.type = _typeProvider.intType; |
| 3738 parameter4.parameterKind = ParameterKind.REQUIRED; | 3740 parameter4.parameterKind = ParameterKind.REQUIRED; |
| 3739 ParameterElementImpl parameter5 = new ParameterElementImpl.forNode(AstFactor
y.identifier3("a5")); | 3741 ParameterElementImpl parameter5 = new ParameterElementImpl.forNode(AstFactor
y.identifier3("a5")); |
| 3740 parameter5.type = _typeProvider.intType; | 3742 parameter5.type = _typeProvider.intType; |
| 3741 parameter5.parameterKind = ParameterKind.REQUIRED; | 3743 parameter5.parameterKind = ParameterKind.REQUIRED; |
| 3742 methodM2.parameters = <ParameterElement> [parameter3, parameter4, parameter5
]; | 3744 methodM2.parameters = <ParameterElement> [parameter3, parameter4, parameter5
]; |
| 3743 classI2.methods = <MethodElement> [methodM2]; | 3745 classI2.methods = <MethodElement> [methodM2]; |
| 3744 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 3746 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 3745 classA.interfaces = <InterfaceType> [classI1.type, classI2.type]; | 3747 classA.interfaces = <InterfaceType> [classI1.type, classI2.type]; |
| 3746 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); | 3748 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); |
| 3747 expect(mapA.size, _numOfMembersInObject); | 3749 expect(mapA.size, _numOfMembersInObject); |
| 3748 expect(mapA.get(methodName), isNull); | 3750 expect(mapA.get(methodName), isNull); |
| 3749 _assertErrors(classA, [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE
]); | 3751 _assertErrors(classA, [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE
]); |
| 3750 } | 3752 } |
| 3751 | 3753 |
| 3752 void test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance
_str_int() { | 3754 void test_getMapOfMembersInheritedFromInterfaces_inconsistentMethodInheritance
_str_int() { |
| 3753 // class I1 { int m(); } | 3755 // class I1 { int m(); } |
| 3754 // class I2 { String m(); } | 3756 // class I2 { String m(); } |
| 3755 // class A implements I2, I1 {} | 3757 // class A implements I2, I1 {} |
| 3756 ClassElementImpl classI1 = ElementFactory.classElement2("I1", []); | 3758 ClassElementImpl classI1 = ElementFactory.classElement2("I1"); |
| 3757 String methodName = "m"; | 3759 String methodName = "m"; |
| 3758 MethodElement methodM1 = ElementFactory.methodElement(methodName, null, [_ty
peProvider.stringType]); | 3760 MethodElement methodM1 = ElementFactory.methodElement(methodName, null, [_ty
peProvider.stringType]); |
| 3759 classI1.methods = <MethodElement> [methodM1]; | 3761 classI1.methods = <MethodElement> [methodM1]; |
| 3760 ClassElementImpl classI2 = ElementFactory.classElement2("I2", []); | 3762 ClassElementImpl classI2 = ElementFactory.classElement2("I2"); |
| 3761 MethodElement methodM2 = ElementFactory.methodElement(methodName, null, [_ty
peProvider.intType]); | 3763 MethodElement methodM2 = ElementFactory.methodElement(methodName, null, [_ty
peProvider.intType]); |
| 3762 classI2.methods = <MethodElement> [methodM2]; | 3764 classI2.methods = <MethodElement> [methodM2]; |
| 3763 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 3765 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 3764 classA.interfaces = <InterfaceType> [classI2.type, classI1.type]; | 3766 classA.interfaces = <InterfaceType> [classI2.type, classI1.type]; |
| 3765 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); | 3767 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); |
| 3766 expect(mapA.size, _numOfMembersInObject); | 3768 expect(mapA.size, _numOfMembersInObject); |
| 3767 expect(mapA.get(methodName), isNull); | 3769 expect(mapA.get(methodName), isNull); |
| 3768 _assertErrors(classA, [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE
]); | 3770 _assertErrors(classA, [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE
]); |
| 3769 } | 3771 } |
| 3770 | 3772 |
| 3771 void test_getMapOfMembersInheritedFromInterfaces_method_extends() { | 3773 void test_getMapOfMembersInheritedFromInterfaces_method_extends() { |
| 3772 // class A { int g(); } | 3774 // class A { int g(); } |
| 3773 // class B extends A {} | 3775 // class B extends A {} |
| 3774 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 3776 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 3775 String methodName = "m"; | 3777 String methodName = "m"; |
| 3776 MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvid
er.intType, []); | 3778 MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvid
er.intType); |
| 3777 classA.methods = <MethodElement> [methodM]; | 3779 classA.methods = <MethodElement> [methodM]; |
| 3778 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 3780 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
| 3779 MemberMap mapB = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classB); | 3781 MemberMap mapB = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classB); |
| 3780 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); | 3782 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); |
| 3781 expect(mapA.size, _numOfMembersInObject); | 3783 expect(mapA.size, _numOfMembersInObject); |
| 3782 expect(mapB.size, _numOfMembersInObject + 1); | 3784 expect(mapB.size, _numOfMembersInObject + 1); |
| 3783 expect(mapB.get(methodName), same(methodM)); | 3785 expect(mapB.get(methodName), same(methodM)); |
| 3784 _assertNoErrors(classA); | 3786 _assertNoErrors(classA); |
| 3785 _assertNoErrors(classB); | 3787 _assertNoErrors(classB); |
| 3786 } | 3788 } |
| 3787 | 3789 |
| 3788 void test_getMapOfMembersInheritedFromInterfaces_method_implements() { | 3790 void test_getMapOfMembersInheritedFromInterfaces_method_implements() { |
| 3789 // class A { int g(); } | 3791 // class A { int g(); } |
| 3790 // class B implements A {} | 3792 // class B implements A {} |
| 3791 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 3793 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 3792 String methodName = "m"; | 3794 String methodName = "m"; |
| 3793 MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvid
er.intType, []); | 3795 MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvid
er.intType); |
| 3794 classA.methods = <MethodElement> [methodM]; | 3796 classA.methods = <MethodElement> [methodM]; |
| 3795 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 3797 ClassElementImpl classB = ElementFactory.classElement2("B"); |
| 3796 classB.interfaces = <InterfaceType> [classA.type]; | 3798 classB.interfaces = <InterfaceType> [classA.type]; |
| 3797 MemberMap mapB = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classB); | 3799 MemberMap mapB = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classB); |
| 3798 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); | 3800 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); |
| 3799 expect(mapA.size, _numOfMembersInObject); | 3801 expect(mapA.size, _numOfMembersInObject); |
| 3800 expect(mapB.size, _numOfMembersInObject + 1); | 3802 expect(mapB.size, _numOfMembersInObject + 1); |
| 3801 expect(mapB.get(methodName), same(methodM)); | 3803 expect(mapB.get(methodName), same(methodM)); |
| 3802 _assertNoErrors(classA); | 3804 _assertNoErrors(classA); |
| 3803 _assertNoErrors(classB); | 3805 _assertNoErrors(classB); |
| 3804 } | 3806 } |
| 3805 | 3807 |
| 3806 void test_getMapOfMembersInheritedFromInterfaces_method_with() { | 3808 void test_getMapOfMembersInheritedFromInterfaces_method_with() { |
| 3807 // class A { int g(); } | 3809 // class A { int g(); } |
| 3808 // class B extends Object with A {} | 3810 // class B extends Object with A {} |
| 3809 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 3811 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 3810 String methodName = "m"; | 3812 String methodName = "m"; |
| 3811 MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvid
er.intType, []); | 3813 MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvid
er.intType); |
| 3812 classA.methods = <MethodElement> [methodM]; | 3814 classA.methods = <MethodElement> [methodM]; |
| 3813 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 3815 ClassElementImpl classB = ElementFactory.classElement2("B"); |
| 3814 classB.mixins = <InterfaceType> [classA.type]; | 3816 classB.mixins = <InterfaceType> [classA.type]; |
| 3815 MemberMap mapB = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classB); | 3817 MemberMap mapB = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classB); |
| 3816 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); | 3818 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); |
| 3817 expect(mapA.size, _numOfMembersInObject); | 3819 expect(mapA.size, _numOfMembersInObject); |
| 3818 expect(mapB.size, _numOfMembersInObject + 1); | 3820 expect(mapB.size, _numOfMembersInObject + 1); |
| 3819 expect(mapB.get(methodName), same(methodM)); | 3821 expect(mapB.get(methodName), same(methodM)); |
| 3820 _assertNoErrors(classA); | 3822 _assertNoErrors(classA); |
| 3821 _assertNoErrors(classB); | 3823 _assertNoErrors(classB); |
| 3822 } | 3824 } |
| 3823 | 3825 |
| 3824 void test_getMapOfMembersInheritedFromInterfaces_union_differentNames() { | 3826 void test_getMapOfMembersInheritedFromInterfaces_union_differentNames() { |
| 3825 // class I1 { int m1(); } | 3827 // class I1 { int m1(); } |
| 3826 // class I2 { int m2(); } | 3828 // class I2 { int m2(); } |
| 3827 // class A implements I1, I2 {} | 3829 // class A implements I1, I2 {} |
| 3828 ClassElementImpl classI1 = ElementFactory.classElement2("I1", []); | 3830 ClassElementImpl classI1 = ElementFactory.classElement2("I1"); |
| 3829 String methodName1 = "m1"; | 3831 String methodName1 = "m1"; |
| 3830 MethodElement methodM1 = ElementFactory.methodElement(methodName1, _typeProv
ider.intType, []); | 3832 MethodElement methodM1 = ElementFactory.methodElement(methodName1, _typeProv
ider.intType); |
| 3831 classI1.methods = <MethodElement> [methodM1]; | 3833 classI1.methods = <MethodElement> [methodM1]; |
| 3832 ClassElementImpl classI2 = ElementFactory.classElement2("I2", []); | 3834 ClassElementImpl classI2 = ElementFactory.classElement2("I2"); |
| 3833 String methodName2 = "m2"; | 3835 String methodName2 = "m2"; |
| 3834 MethodElement methodM2 = ElementFactory.methodElement(methodName2, _typeProv
ider.intType, []); | 3836 MethodElement methodM2 = ElementFactory.methodElement(methodName2, _typeProv
ider.intType); |
| 3835 classI2.methods = <MethodElement> [methodM2]; | 3837 classI2.methods = <MethodElement> [methodM2]; |
| 3836 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 3838 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 3837 classA.interfaces = <InterfaceType> [classI1.type, classI2.type]; | 3839 classA.interfaces = <InterfaceType> [classI1.type, classI2.type]; |
| 3838 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); | 3840 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); |
| 3839 expect(mapA.size, _numOfMembersInObject + 2); | 3841 expect(mapA.size, _numOfMembersInObject + 2); |
| 3840 expect(mapA.get(methodName1), same(methodM1)); | 3842 expect(mapA.get(methodName1), same(methodM1)); |
| 3841 expect(mapA.get(methodName2), same(methodM2)); | 3843 expect(mapA.get(methodName2), same(methodM2)); |
| 3842 _assertNoErrors(classA); | 3844 _assertNoErrors(classA); |
| 3843 } | 3845 } |
| 3844 | 3846 |
| 3845 void test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_2_gett
ers() { | 3847 void test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_2_gett
ers() { |
| 3846 // class I1 { int get g; } | 3848 // class I1 { int get g; } |
| 3847 // class I2 { num get g; } | 3849 // class I2 { num get g; } |
| 3848 // class A implements I1, I2 {} | 3850 // class A implements I1, I2 {} |
| 3849 ClassElementImpl classI1 = ElementFactory.classElement2("I1", []); | 3851 ClassElementImpl classI1 = ElementFactory.classElement2("I1"); |
| 3850 String accessorName = "g"; | 3852 String accessorName = "g"; |
| 3851 PropertyAccessorElement getter1 = ElementFactory.getterElement(accessorName,
false, _typeProvider.intType); | 3853 PropertyAccessorElement getter1 = ElementFactory.getterElement(accessorName,
false, _typeProvider.intType); |
| 3852 classI1.accessors = <PropertyAccessorElement> [getter1]; | 3854 classI1.accessors = <PropertyAccessorElement> [getter1]; |
| 3853 ClassElementImpl classI2 = ElementFactory.classElement2("I2", []); | 3855 ClassElementImpl classI2 = ElementFactory.classElement2("I2"); |
| 3854 PropertyAccessorElement getter2 = ElementFactory.getterElement(accessorName,
false, _typeProvider.numType); | 3856 PropertyAccessorElement getter2 = ElementFactory.getterElement(accessorName,
false, _typeProvider.numType); |
| 3855 classI2.accessors = <PropertyAccessorElement> [getter2]; | 3857 classI2.accessors = <PropertyAccessorElement> [getter2]; |
| 3856 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 3858 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 3857 classA.interfaces = <InterfaceType> [classI1.type, classI2.type]; | 3859 classA.interfaces = <InterfaceType> [classI1.type, classI2.type]; |
| 3858 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); | 3860 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); |
| 3859 expect(mapA.size, _numOfMembersInObject + 1); | 3861 expect(mapA.size, _numOfMembersInObject + 1); |
| 3860 PropertyAccessorElement syntheticAccessor = ElementFactory.getterElement(acc
essorName, false, _typeProvider.dynamicType); | 3862 PropertyAccessorElement syntheticAccessor = ElementFactory.getterElement(acc
essorName, false, _typeProvider.dynamicType); |
| 3861 expect(mapA.get(accessorName).type, syntheticAccessor.type); | 3863 expect(mapA.get(accessorName).type, syntheticAccessor.type); |
| 3862 _assertNoErrors(classA); | 3864 _assertNoErrors(classA); |
| 3863 } | 3865 } |
| 3864 | 3866 |
| 3865 void test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_2_meth
ods() { | 3867 void test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_2_meth
ods() { |
| 3866 // class I1 { dynamic m(int); } | 3868 // class I1 { dynamic m(int); } |
| 3867 // class I2 { dynamic m(num); } | 3869 // class I2 { dynamic m(num); } |
| 3868 // class A implements I1, I2 {} | 3870 // class A implements I1, I2 {} |
| 3869 ClassElementImpl classI1 = ElementFactory.classElement2("I1", []); | 3871 ClassElementImpl classI1 = ElementFactory.classElement2("I1"); |
| 3870 String methodName = "m"; | 3872 String methodName = "m"; |
| 3871 MethodElementImpl methodM1 = ElementFactory.methodElement(methodName, _typeP
rovider.dynamicType, []); | 3873 MethodElementImpl methodM1 = ElementFactory.methodElement(methodName, _typeP
rovider.dynamicType); |
| 3872 ParameterElementImpl parameter1 = new ParameterElementImpl.forNode(AstFactor
y.identifier3("a0")); | 3874 ParameterElementImpl parameter1 = new ParameterElementImpl.forNode(AstFactor
y.identifier3("a0")); |
| 3873 parameter1.type = _typeProvider.intType; | 3875 parameter1.type = _typeProvider.intType; |
| 3874 parameter1.parameterKind = ParameterKind.REQUIRED; | 3876 parameter1.parameterKind = ParameterKind.REQUIRED; |
| 3875 methodM1.parameters = <ParameterElement> [parameter1]; | 3877 methodM1.parameters = <ParameterElement> [parameter1]; |
| 3876 classI1.methods = <MethodElement> [methodM1]; | 3878 classI1.methods = <MethodElement> [methodM1]; |
| 3877 ClassElementImpl classI2 = ElementFactory.classElement2("I2", []); | 3879 ClassElementImpl classI2 = ElementFactory.classElement2("I2"); |
| 3878 MethodElementImpl methodM2 = ElementFactory.methodElement(methodName, _typeP
rovider.dynamicType, []); | 3880 MethodElementImpl methodM2 = ElementFactory.methodElement(methodName, _typeP
rovider.dynamicType); |
| 3879 ParameterElementImpl parameter2 = new ParameterElementImpl.forNode(AstFactor
y.identifier3("a0")); | 3881 ParameterElementImpl parameter2 = new ParameterElementImpl.forNode(AstFactor
y.identifier3("a0")); |
| 3880 parameter2.type = _typeProvider.numType; | 3882 parameter2.type = _typeProvider.numType; |
| 3881 parameter2.parameterKind = ParameterKind.REQUIRED; | 3883 parameter2.parameterKind = ParameterKind.REQUIRED; |
| 3882 methodM2.parameters = <ParameterElement> [parameter2]; | 3884 methodM2.parameters = <ParameterElement> [parameter2]; |
| 3883 classI2.methods = <MethodElement> [methodM2]; | 3885 classI2.methods = <MethodElement> [methodM2]; |
| 3884 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 3886 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 3885 classA.interfaces = <InterfaceType> [classI1.type, classI2.type]; | 3887 classA.interfaces = <InterfaceType> [classI1.type, classI2.type]; |
| 3886 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); | 3888 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); |
| 3887 expect(mapA.size, _numOfMembersInObject + 1); | 3889 expect(mapA.size, _numOfMembersInObject + 1); |
| 3888 MethodElement syntheticMethod = ElementFactory.methodElement(methodName, _ty
peProvider.dynamicType, [_typeProvider.dynamicType]); | 3890 MethodElement syntheticMethod = ElementFactory.methodElement(methodName, _ty
peProvider.dynamicType, [_typeProvider.dynamicType]); |
| 3889 expect(mapA.get(methodName).type, syntheticMethod.type); | 3891 expect(mapA.get(methodName).type, syntheticMethod.type); |
| 3890 _assertNoErrors(classA); | 3892 _assertNoErrors(classA); |
| 3891 } | 3893 } |
| 3892 | 3894 |
| 3893 void test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_2_sett
ers() { | 3895 void test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_2_sett
ers() { |
| 3894 // class I1 { set s(int); } | 3896 // class I1 { set s(int); } |
| 3895 // class I2 { set s(num); } | 3897 // class I2 { set s(num); } |
| 3896 // class A implements I1, I2 {} | 3898 // class A implements I1, I2 {} |
| 3897 ClassElementImpl classI1 = ElementFactory.classElement2("I1", []); | 3899 ClassElementImpl classI1 = ElementFactory.classElement2("I1"); |
| 3898 String accessorName = "s"; | 3900 String accessorName = "s"; |
| 3899 PropertyAccessorElement setter1 = ElementFactory.setterElement(accessorName,
false, _typeProvider.intType); | 3901 PropertyAccessorElement setter1 = ElementFactory.setterElement(accessorName,
false, _typeProvider.intType); |
| 3900 classI1.accessors = <PropertyAccessorElement> [setter1]; | 3902 classI1.accessors = <PropertyAccessorElement> [setter1]; |
| 3901 ClassElementImpl classI2 = ElementFactory.classElement2("I2", []); | 3903 ClassElementImpl classI2 = ElementFactory.classElement2("I2"); |
| 3902 PropertyAccessorElement setter2 = ElementFactory.setterElement(accessorName,
false, _typeProvider.numType); | 3904 PropertyAccessorElement setter2 = ElementFactory.setterElement(accessorName,
false, _typeProvider.numType); |
| 3903 classI2.accessors = <PropertyAccessorElement> [setter2]; | 3905 classI2.accessors = <PropertyAccessorElement> [setter2]; |
| 3904 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 3906 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 3905 classA.interfaces = <InterfaceType> [classI1.type, classI2.type]; | 3907 classA.interfaces = <InterfaceType> [classI1.type, classI2.type]; |
| 3906 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); | 3908 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); |
| 3907 expect(mapA.size, _numOfMembersInObject + 1); | 3909 expect(mapA.size, _numOfMembersInObject + 1); |
| 3908 PropertyAccessorElementImpl syntheticAccessor = ElementFactory.setterElement
(accessorName, false, _typeProvider.dynamicType); | 3910 PropertyAccessorElementImpl syntheticAccessor = ElementFactory.setterElement
(accessorName, false, _typeProvider.dynamicType); |
| 3909 syntheticAccessor.returnType = _typeProvider.dynamicType; | 3911 syntheticAccessor.returnType = _typeProvider.dynamicType; |
| 3910 expect(mapA.get("$accessorName=").type, syntheticAccessor.type); | 3912 expect(mapA.get("$accessorName=").type, syntheticAccessor.type); |
| 3911 _assertNoErrors(classA); | 3913 _assertNoErrors(classA); |
| 3912 } | 3914 } |
| 3913 | 3915 |
| 3914 void test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_3_gett
ers() { | 3916 void test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_3_gett
ers() { |
| 3915 // class A {} | 3917 // class A {} |
| 3916 // class B extends A {} | 3918 // class B extends A {} |
| 3917 // class C extends B {} | 3919 // class C extends B {} |
| 3918 // class I1 { A get g; } | 3920 // class I1 { A get g; } |
| 3919 // class I2 { B get g; } | 3921 // class I2 { B get g; } |
| 3920 // class I3 { C get g; } | 3922 // class I3 { C get g; } |
| 3921 // class D implements I1, I2, I3 {} | 3923 // class D implements I1, I2, I3 {} |
| 3922 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 3924 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 3923 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 3925 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
| 3924 ClassElementImpl classC = ElementFactory.classElement("C", classB.type, []); | 3926 ClassElementImpl classC = ElementFactory.classElement("C", classB.type); |
| 3925 ClassElementImpl classI1 = ElementFactory.classElement2("I1", []); | 3927 ClassElementImpl classI1 = ElementFactory.classElement2("I1"); |
| 3926 String accessorName = "g"; | 3928 String accessorName = "g"; |
| 3927 PropertyAccessorElement getter1 = ElementFactory.getterElement(accessorName,
false, classA.type); | 3929 PropertyAccessorElement getter1 = ElementFactory.getterElement(accessorName,
false, classA.type); |
| 3928 classI1.accessors = <PropertyAccessorElement> [getter1]; | 3930 classI1.accessors = <PropertyAccessorElement> [getter1]; |
| 3929 ClassElementImpl classI2 = ElementFactory.classElement2("I2", []); | 3931 ClassElementImpl classI2 = ElementFactory.classElement2("I2"); |
| 3930 PropertyAccessorElement getter2 = ElementFactory.getterElement(accessorName,
false, classB.type); | 3932 PropertyAccessorElement getter2 = ElementFactory.getterElement(accessorName,
false, classB.type); |
| 3931 classI2.accessors = <PropertyAccessorElement> [getter2]; | 3933 classI2.accessors = <PropertyAccessorElement> [getter2]; |
| 3932 ClassElementImpl classI3 = ElementFactory.classElement2("I3", []); | 3934 ClassElementImpl classI3 = ElementFactory.classElement2("I3"); |
| 3933 PropertyAccessorElement getter3 = ElementFactory.getterElement(accessorName,
false, classC.type); | 3935 PropertyAccessorElement getter3 = ElementFactory.getterElement(accessorName,
false, classC.type); |
| 3934 classI3.accessors = <PropertyAccessorElement> [getter3]; | 3936 classI3.accessors = <PropertyAccessorElement> [getter3]; |
| 3935 ClassElementImpl classD = ElementFactory.classElement2("D", []); | 3937 ClassElementImpl classD = ElementFactory.classElement2("D"); |
| 3936 classD.interfaces = <InterfaceType> [classI1.type, classI2.type, classI3.typ
e]; | 3938 classD.interfaces = <InterfaceType> [classI1.type, classI2.type, classI3.typ
e]; |
| 3937 MemberMap mapD = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classD); | 3939 MemberMap mapD = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classD); |
| 3938 expect(mapD.size, _numOfMembersInObject + 1); | 3940 expect(mapD.size, _numOfMembersInObject + 1); |
| 3939 PropertyAccessorElement syntheticAccessor = ElementFactory.getterElement(acc
essorName, false, _typeProvider.dynamicType); | 3941 PropertyAccessorElement syntheticAccessor = ElementFactory.getterElement(acc
essorName, false, _typeProvider.dynamicType); |
| 3940 expect(mapD.get(accessorName).type, syntheticAccessor.type); | 3942 expect(mapD.get(accessorName).type, syntheticAccessor.type); |
| 3941 _assertNoErrors(classD); | 3943 _assertNoErrors(classD); |
| 3942 } | 3944 } |
| 3943 | 3945 |
| 3944 void test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_3_meth
ods() { | 3946 void test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_3_meth
ods() { |
| 3945 // class A {} | 3947 // class A {} |
| 3946 // class B extends A {} | 3948 // class B extends A {} |
| 3947 // class C extends B {} | 3949 // class C extends B {} |
| 3948 // class I1 { dynamic m(A a); } | 3950 // class I1 { dynamic m(A a); } |
| 3949 // class I2 { dynamic m(B b); } | 3951 // class I2 { dynamic m(B b); } |
| 3950 // class I3 { dynamic m(C c); } | 3952 // class I3 { dynamic m(C c); } |
| 3951 // class D implements I1, I2, I3 {} | 3953 // class D implements I1, I2, I3 {} |
| 3952 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 3954 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 3953 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 3955 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
| 3954 ClassElementImpl classC = ElementFactory.classElement("C", classB.type, []); | 3956 ClassElementImpl classC = ElementFactory.classElement("C", classB.type); |
| 3955 ClassElementImpl classI1 = ElementFactory.classElement2("I1", []); | 3957 ClassElementImpl classI1 = ElementFactory.classElement2("I1"); |
| 3956 String methodName = "m"; | 3958 String methodName = "m"; |
| 3957 MethodElementImpl methodM1 = ElementFactory.methodElement(methodName, _typeP
rovider.dynamicType, []); | 3959 MethodElementImpl methodM1 = ElementFactory.methodElement(methodName, _typeP
rovider.dynamicType); |
| 3958 ParameterElementImpl parameter1 = new ParameterElementImpl.forNode(AstFactor
y.identifier3("a0")); | 3960 ParameterElementImpl parameter1 = new ParameterElementImpl.forNode(AstFactor
y.identifier3("a0")); |
| 3959 parameter1.type = classA.type; | 3961 parameter1.type = classA.type; |
| 3960 parameter1.parameterKind = ParameterKind.REQUIRED; | 3962 parameter1.parameterKind = ParameterKind.REQUIRED; |
| 3961 methodM1.parameters = <ParameterElement> [parameter1]; | 3963 methodM1.parameters = <ParameterElement> [parameter1]; |
| 3962 classI1.methods = <MethodElement> [methodM1]; | 3964 classI1.methods = <MethodElement> [methodM1]; |
| 3963 ClassElementImpl classI2 = ElementFactory.classElement2("I2", []); | 3965 ClassElementImpl classI2 = ElementFactory.classElement2("I2"); |
| 3964 MethodElementImpl methodM2 = ElementFactory.methodElement(methodName, _typeP
rovider.dynamicType, []); | 3966 MethodElementImpl methodM2 = ElementFactory.methodElement(methodName, _typeP
rovider.dynamicType); |
| 3965 ParameterElementImpl parameter2 = new ParameterElementImpl.forNode(AstFactor
y.identifier3("a0")); | 3967 ParameterElementImpl parameter2 = new ParameterElementImpl.forNode(AstFactor
y.identifier3("a0")); |
| 3966 parameter2.type = classB.type; | 3968 parameter2.type = classB.type; |
| 3967 parameter2.parameterKind = ParameterKind.REQUIRED; | 3969 parameter2.parameterKind = ParameterKind.REQUIRED; |
| 3968 methodM2.parameters = <ParameterElement> [parameter2]; | 3970 methodM2.parameters = <ParameterElement> [parameter2]; |
| 3969 classI2.methods = <MethodElement> [methodM2]; | 3971 classI2.methods = <MethodElement> [methodM2]; |
| 3970 ClassElementImpl classI3 = ElementFactory.classElement2("I3", []); | 3972 ClassElementImpl classI3 = ElementFactory.classElement2("I3"); |
| 3971 MethodElementImpl methodM3 = ElementFactory.methodElement(methodName, _typeP
rovider.dynamicType, []); | 3973 MethodElementImpl methodM3 = ElementFactory.methodElement(methodName, _typeP
rovider.dynamicType); |
| 3972 ParameterElementImpl parameter3 = new ParameterElementImpl.forNode(AstFactor
y.identifier3("a0")); | 3974 ParameterElementImpl parameter3 = new ParameterElementImpl.forNode(AstFactor
y.identifier3("a0")); |
| 3973 parameter3.type = classC.type; | 3975 parameter3.type = classC.type; |
| 3974 parameter3.parameterKind = ParameterKind.REQUIRED; | 3976 parameter3.parameterKind = ParameterKind.REQUIRED; |
| 3975 methodM3.parameters = <ParameterElement> [parameter3]; | 3977 methodM3.parameters = <ParameterElement> [parameter3]; |
| 3976 classI3.methods = <MethodElement> [methodM3]; | 3978 classI3.methods = <MethodElement> [methodM3]; |
| 3977 ClassElementImpl classD = ElementFactory.classElement2("D", []); | 3979 ClassElementImpl classD = ElementFactory.classElement2("D"); |
| 3978 classD.interfaces = <InterfaceType> [classI1.type, classI2.type, classI3.typ
e]; | 3980 classD.interfaces = <InterfaceType> [classI1.type, classI2.type, classI3.typ
e]; |
| 3979 MemberMap mapD = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classD); | 3981 MemberMap mapD = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classD); |
| 3980 expect(mapD.size, _numOfMembersInObject + 1); | 3982 expect(mapD.size, _numOfMembersInObject + 1); |
| 3981 MethodElement syntheticMethod = ElementFactory.methodElement(methodName, _ty
peProvider.dynamicType, [_typeProvider.dynamicType]); | 3983 MethodElement syntheticMethod = ElementFactory.methodElement(methodName, _ty
peProvider.dynamicType, [_typeProvider.dynamicType]); |
| 3982 expect(mapD.get(methodName).type, syntheticMethod.type); | 3984 expect(mapD.get(methodName).type, syntheticMethod.type); |
| 3983 _assertNoErrors(classD); | 3985 _assertNoErrors(classD); |
| 3984 } | 3986 } |
| 3985 | 3987 |
| 3986 void test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_3_sett
ers() { | 3988 void test_getMapOfMembersInheritedFromInterfaces_union_multipleSubtypes_3_sett
ers() { |
| 3987 // class A {} | 3989 // class A {} |
| 3988 // class B extends A {} | 3990 // class B extends A {} |
| 3989 // class C extends B {} | 3991 // class C extends B {} |
| 3990 // class I1 { set s(A); } | 3992 // class I1 { set s(A); } |
| 3991 // class I2 { set s(B); } | 3993 // class I2 { set s(B); } |
| 3992 // class I3 { set s(C); } | 3994 // class I3 { set s(C); } |
| 3993 // class D implements I1, I2, I3 {} | 3995 // class D implements I1, I2, I3 {} |
| 3994 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 3996 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 3995 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 3997 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
| 3996 ClassElementImpl classC = ElementFactory.classElement("C", classB.type, []); | 3998 ClassElementImpl classC = ElementFactory.classElement("C", classB.type); |
| 3997 ClassElementImpl classI1 = ElementFactory.classElement2("I1", []); | 3999 ClassElementImpl classI1 = ElementFactory.classElement2("I1"); |
| 3998 String accessorName = "s"; | 4000 String accessorName = "s"; |
| 3999 PropertyAccessorElement setter1 = ElementFactory.setterElement(accessorName,
false, classA.type); | 4001 PropertyAccessorElement setter1 = ElementFactory.setterElement(accessorName,
false, classA.type); |
| 4000 classI1.accessors = <PropertyAccessorElement> [setter1]; | 4002 classI1.accessors = <PropertyAccessorElement> [setter1]; |
| 4001 ClassElementImpl classI2 = ElementFactory.classElement2("I2", []); | 4003 ClassElementImpl classI2 = ElementFactory.classElement2("I2"); |
| 4002 PropertyAccessorElement setter2 = ElementFactory.setterElement(accessorName,
false, classB.type); | 4004 PropertyAccessorElement setter2 = ElementFactory.setterElement(accessorName,
false, classB.type); |
| 4003 classI2.accessors = <PropertyAccessorElement> [setter2]; | 4005 classI2.accessors = <PropertyAccessorElement> [setter2]; |
| 4004 ClassElementImpl classI3 = ElementFactory.classElement2("I3", []); | 4006 ClassElementImpl classI3 = ElementFactory.classElement2("I3"); |
| 4005 PropertyAccessorElement setter3 = ElementFactory.setterElement(accessorName,
false, classC.type); | 4007 PropertyAccessorElement setter3 = ElementFactory.setterElement(accessorName,
false, classC.type); |
| 4006 classI3.accessors = <PropertyAccessorElement> [setter3]; | 4008 classI3.accessors = <PropertyAccessorElement> [setter3]; |
| 4007 ClassElementImpl classD = ElementFactory.classElement2("D", []); | 4009 ClassElementImpl classD = ElementFactory.classElement2("D"); |
| 4008 classD.interfaces = <InterfaceType> [classI1.type, classI2.type, classI3.typ
e]; | 4010 classD.interfaces = <InterfaceType> [classI1.type, classI2.type, classI3.typ
e]; |
| 4009 MemberMap mapD = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classD); | 4011 MemberMap mapD = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classD); |
| 4010 expect(mapD.size, _numOfMembersInObject + 1); | 4012 expect(mapD.size, _numOfMembersInObject + 1); |
| 4011 PropertyAccessorElementImpl syntheticAccessor = ElementFactory.setterElement
(accessorName, false, _typeProvider.dynamicType); | 4013 PropertyAccessorElementImpl syntheticAccessor = ElementFactory.setterElement
(accessorName, false, _typeProvider.dynamicType); |
| 4012 syntheticAccessor.returnType = _typeProvider.dynamicType; | 4014 syntheticAccessor.returnType = _typeProvider.dynamicType; |
| 4013 expect(mapD.get("$accessorName=").type, syntheticAccessor.type); | 4015 expect(mapD.get("$accessorName=").type, syntheticAccessor.type); |
| 4014 _assertNoErrors(classD); | 4016 _assertNoErrors(classD); |
| 4015 } | 4017 } |
| 4016 | 4018 |
| 4017 void test_getMapOfMembersInheritedFromInterfaces_union_oneSubtype_2_methods()
{ | 4019 void test_getMapOfMembersInheritedFromInterfaces_union_oneSubtype_2_methods()
{ |
| 4018 // class I1 { int m(); } | 4020 // class I1 { int m(); } |
| 4019 // class I2 { int m([int]); } | 4021 // class I2 { int m([int]); } |
| 4020 // class A implements I1, I2 {} | 4022 // class A implements I1, I2 {} |
| 4021 ClassElementImpl classI1 = ElementFactory.classElement2("I1", []); | 4023 ClassElementImpl classI1 = ElementFactory.classElement2("I1"); |
| 4022 String methodName = "m"; | 4024 String methodName = "m"; |
| 4023 MethodElement methodM1 = ElementFactory.methodElement(methodName, _typeProvi
der.intType, []); | 4025 MethodElement methodM1 = ElementFactory.methodElement(methodName, _typeProvi
der.intType); |
| 4024 classI1.methods = <MethodElement> [methodM1]; | 4026 classI1.methods = <MethodElement> [methodM1]; |
| 4025 ClassElementImpl classI2 = ElementFactory.classElement2("I2", []); | 4027 ClassElementImpl classI2 = ElementFactory.classElement2("I2"); |
| 4026 MethodElementImpl methodM2 = ElementFactory.methodElement(methodName, _typeP
rovider.intType, []); | 4028 MethodElementImpl methodM2 = ElementFactory.methodElement(methodName, _typeP
rovider.intType); |
| 4027 ParameterElementImpl parameter1 = new ParameterElementImpl.forNode(AstFactor
y.identifier3("a1")); | 4029 ParameterElementImpl parameter1 = new ParameterElementImpl.forNode(AstFactor
y.identifier3("a1")); |
| 4028 parameter1.type = _typeProvider.intType; | 4030 parameter1.type = _typeProvider.intType; |
| 4029 parameter1.parameterKind = ParameterKind.POSITIONAL; | 4031 parameter1.parameterKind = ParameterKind.POSITIONAL; |
| 4030 methodM2.parameters = <ParameterElement> [parameter1]; | 4032 methodM2.parameters = <ParameterElement> [parameter1]; |
| 4031 classI2.methods = <MethodElement> [methodM2]; | 4033 classI2.methods = <MethodElement> [methodM2]; |
| 4032 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 4034 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 4033 classA.interfaces = <InterfaceType> [classI1.type, classI2.type]; | 4035 classA.interfaces = <InterfaceType> [classI1.type, classI2.type]; |
| 4034 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); | 4036 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); |
| 4035 expect(mapA.size, _numOfMembersInObject + 1); | 4037 expect(mapA.size, _numOfMembersInObject + 1); |
| 4036 expect(mapA.get(methodName), same(methodM2)); | 4038 expect(mapA.get(methodName), same(methodM2)); |
| 4037 _assertNoErrors(classA); | 4039 _assertNoErrors(classA); |
| 4038 } | 4040 } |
| 4039 | 4041 |
| 4040 void test_getMapOfMembersInheritedFromInterfaces_union_oneSubtype_3_methods()
{ | 4042 void test_getMapOfMembersInheritedFromInterfaces_union_oneSubtype_3_methods()
{ |
| 4041 // class I1 { int m(); } | 4043 // class I1 { int m(); } |
| 4042 // class I2 { int m([int]); } | 4044 // class I2 { int m([int]); } |
| 4043 // class I3 { int m([int, int]); } | 4045 // class I3 { int m([int, int]); } |
| 4044 // class A implements I1, I2, I3 {} | 4046 // class A implements I1, I2, I3 {} |
| 4045 ClassElementImpl classI1 = ElementFactory.classElement2("I1", []); | 4047 ClassElementImpl classI1 = ElementFactory.classElement2("I1"); |
| 4046 String methodName = "m"; | 4048 String methodName = "m"; |
| 4047 MethodElementImpl methodM1 = ElementFactory.methodElement(methodName, _typeP
rovider.intType, []); | 4049 MethodElementImpl methodM1 = ElementFactory.methodElement(methodName, _typeP
rovider.intType); |
| 4048 classI1.methods = <MethodElement> [methodM1]; | 4050 classI1.methods = <MethodElement> [methodM1]; |
| 4049 ClassElementImpl classI2 = ElementFactory.classElement2("I2", []); | 4051 ClassElementImpl classI2 = ElementFactory.classElement2("I2"); |
| 4050 MethodElementImpl methodM2 = ElementFactory.methodElement(methodName, _typeP
rovider.intType, []); | 4052 MethodElementImpl methodM2 = ElementFactory.methodElement(methodName, _typeP
rovider.intType); |
| 4051 ParameterElementImpl parameter1 = new ParameterElementImpl.forNode(AstFactor
y.identifier3("a1")); | 4053 ParameterElementImpl parameter1 = new ParameterElementImpl.forNode(AstFactor
y.identifier3("a1")); |
| 4052 parameter1.type = _typeProvider.intType; | 4054 parameter1.type = _typeProvider.intType; |
| 4053 parameter1.parameterKind = ParameterKind.POSITIONAL; | 4055 parameter1.parameterKind = ParameterKind.POSITIONAL; |
| 4054 methodM1.parameters = <ParameterElement> [parameter1]; | 4056 methodM1.parameters = <ParameterElement> [parameter1]; |
| 4055 classI2.methods = <MethodElement> [methodM2]; | 4057 classI2.methods = <MethodElement> [methodM2]; |
| 4056 ClassElementImpl classI3 = ElementFactory.classElement2("I3", []); | 4058 ClassElementImpl classI3 = ElementFactory.classElement2("I3"); |
| 4057 MethodElementImpl methodM3 = ElementFactory.methodElement(methodName, _typeP
rovider.intType, []); | 4059 MethodElementImpl methodM3 = ElementFactory.methodElement(methodName, _typeP
rovider.intType); |
| 4058 ParameterElementImpl parameter2 = new ParameterElementImpl.forNode(AstFactor
y.identifier3("a2")); | 4060 ParameterElementImpl parameter2 = new ParameterElementImpl.forNode(AstFactor
y.identifier3("a2")); |
| 4059 parameter2.type = _typeProvider.intType; | 4061 parameter2.type = _typeProvider.intType; |
| 4060 parameter2.parameterKind = ParameterKind.POSITIONAL; | 4062 parameter2.parameterKind = ParameterKind.POSITIONAL; |
| 4061 ParameterElementImpl parameter3 = new ParameterElementImpl.forNode(AstFactor
y.identifier3("a3")); | 4063 ParameterElementImpl parameter3 = new ParameterElementImpl.forNode(AstFactor
y.identifier3("a3")); |
| 4062 parameter3.type = _typeProvider.intType; | 4064 parameter3.type = _typeProvider.intType; |
| 4063 parameter3.parameterKind = ParameterKind.POSITIONAL; | 4065 parameter3.parameterKind = ParameterKind.POSITIONAL; |
| 4064 methodM3.parameters = <ParameterElement> [parameter2, parameter3]; | 4066 methodM3.parameters = <ParameterElement> [parameter2, parameter3]; |
| 4065 classI3.methods = <MethodElement> [methodM3]; | 4067 classI3.methods = <MethodElement> [methodM3]; |
| 4066 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 4068 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 4067 classA.interfaces = <InterfaceType> [classI1.type, classI2.type, classI3.typ
e]; | 4069 classA.interfaces = <InterfaceType> [classI1.type, classI2.type, classI3.typ
e]; |
| 4068 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); | 4070 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); |
| 4069 expect(mapA.size, _numOfMembersInObject + 1); | 4071 expect(mapA.size, _numOfMembersInObject + 1); |
| 4070 expect(mapA.get(methodName), same(methodM3)); | 4072 expect(mapA.get(methodName), same(methodM3)); |
| 4071 _assertNoErrors(classA); | 4073 _assertNoErrors(classA); |
| 4072 } | 4074 } |
| 4073 | 4075 |
| 4074 void test_getMapOfMembersInheritedFromInterfaces_union_oneSubtype_4_methods()
{ | 4076 void test_getMapOfMembersInheritedFromInterfaces_union_oneSubtype_4_methods()
{ |
| 4075 // class I1 { int m(); } | 4077 // class I1 { int m(); } |
| 4076 // class I2 { int m(); } | 4078 // class I2 { int m(); } |
| 4077 // class I3 { int m([int]); } | 4079 // class I3 { int m([int]); } |
| 4078 // class I4 { int m([int, int]); } | 4080 // class I4 { int m([int, int]); } |
| 4079 // class A implements I1, I2, I3, I4 {} | 4081 // class A implements I1, I2, I3, I4 {} |
| 4080 ClassElementImpl classI1 = ElementFactory.classElement2("I1", []); | 4082 ClassElementImpl classI1 = ElementFactory.classElement2("I1"); |
| 4081 String methodName = "m"; | 4083 String methodName = "m"; |
| 4082 MethodElement methodM1 = ElementFactory.methodElement(methodName, _typeProvi
der.intType, []); | 4084 MethodElement methodM1 = ElementFactory.methodElement(methodName, _typeProvi
der.intType); |
| 4083 classI1.methods = <MethodElement> [methodM1]; | 4085 classI1.methods = <MethodElement> [methodM1]; |
| 4084 ClassElementImpl classI2 = ElementFactory.classElement2("I2", []); | 4086 ClassElementImpl classI2 = ElementFactory.classElement2("I2"); |
| 4085 MethodElement methodM2 = ElementFactory.methodElement(methodName, _typeProvi
der.intType, []); | 4087 MethodElement methodM2 = ElementFactory.methodElement(methodName, _typeProvi
der.intType); |
| 4086 classI2.methods = <MethodElement> [methodM2]; | 4088 classI2.methods = <MethodElement> [methodM2]; |
| 4087 ClassElementImpl classI3 = ElementFactory.classElement2("I3", []); | 4089 ClassElementImpl classI3 = ElementFactory.classElement2("I3"); |
| 4088 MethodElementImpl methodM3 = ElementFactory.methodElement(methodName, _typeP
rovider.intType, []); | 4090 MethodElementImpl methodM3 = ElementFactory.methodElement(methodName, _typeP
rovider.intType); |
| 4089 ParameterElementImpl parameter1 = new ParameterElementImpl.forNode(AstFactor
y.identifier3("a1")); | 4091 ParameterElementImpl parameter1 = new ParameterElementImpl.forNode(AstFactor
y.identifier3("a1")); |
| 4090 parameter1.type = _typeProvider.intType; | 4092 parameter1.type = _typeProvider.intType; |
| 4091 parameter1.parameterKind = ParameterKind.POSITIONAL; | 4093 parameter1.parameterKind = ParameterKind.POSITIONAL; |
| 4092 methodM3.parameters = <ParameterElement> [parameter1]; | 4094 methodM3.parameters = <ParameterElement> [parameter1]; |
| 4093 classI3.methods = <MethodElement> [methodM3]; | 4095 classI3.methods = <MethodElement> [methodM3]; |
| 4094 ClassElementImpl classI4 = ElementFactory.classElement2("I4", []); | 4096 ClassElementImpl classI4 = ElementFactory.classElement2("I4"); |
| 4095 MethodElementImpl methodM4 = ElementFactory.methodElement(methodName, _typeP
rovider.intType, []); | 4097 MethodElementImpl methodM4 = ElementFactory.methodElement(methodName, _typeP
rovider.intType); |
| 4096 ParameterElementImpl parameter2 = new ParameterElementImpl.forNode(AstFactor
y.identifier3("a2")); | 4098 ParameterElementImpl parameter2 = new ParameterElementImpl.forNode(AstFactor
y.identifier3("a2")); |
| 4097 parameter2.type = _typeProvider.intType; | 4099 parameter2.type = _typeProvider.intType; |
| 4098 parameter2.parameterKind = ParameterKind.POSITIONAL; | 4100 parameter2.parameterKind = ParameterKind.POSITIONAL; |
| 4099 ParameterElementImpl parameter3 = new ParameterElementImpl.forNode(AstFactor
y.identifier3("a3")); | 4101 ParameterElementImpl parameter3 = new ParameterElementImpl.forNode(AstFactor
y.identifier3("a3")); |
| 4100 parameter3.type = _typeProvider.intType; | 4102 parameter3.type = _typeProvider.intType; |
| 4101 parameter3.parameterKind = ParameterKind.POSITIONAL; | 4103 parameter3.parameterKind = ParameterKind.POSITIONAL; |
| 4102 methodM4.parameters = <ParameterElement> [parameter2, parameter3]; | 4104 methodM4.parameters = <ParameterElement> [parameter2, parameter3]; |
| 4103 classI4.methods = <MethodElement> [methodM4]; | 4105 classI4.methods = <MethodElement> [methodM4]; |
| 4104 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 4106 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 4105 classA.interfaces = <InterfaceType> [classI1.type, classI2.type, classI3.typ
e, classI4.type]; | 4107 classA.interfaces = <InterfaceType> [classI1.type, classI2.type, classI3.typ
e, classI4.type]; |
| 4106 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); | 4108 MemberMap mapA = _inheritanceManager.getMapOfMembersInheritedFromInterfaces(
classA); |
| 4107 expect(mapA.size, _numOfMembersInObject + 1); | 4109 expect(mapA.size, _numOfMembersInObject + 1); |
| 4108 expect(mapA.get(methodName), same(methodM4)); | 4110 expect(mapA.get(methodName), same(methodM4)); |
| 4109 _assertNoErrors(classA); | 4111 _assertNoErrors(classA); |
| 4110 } | 4112 } |
| 4111 | 4113 |
| 4112 void test_lookupInheritance_interface_getter() { | 4114 void test_lookupInheritance_interface_getter() { |
| 4113 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 4115 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 4114 String getterName = "g"; | 4116 String getterName = "g"; |
| 4115 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, _typeProvider.intType); | 4117 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, _typeProvider.intType); |
| 4116 classA.accessors = <PropertyAccessorElement> [getterG]; | 4118 classA.accessors = <PropertyAccessorElement> [getterG]; |
| 4117 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 4119 ClassElementImpl classB = ElementFactory.classElement2("B"); |
| 4118 classB.interfaces = <InterfaceType> [classA.type]; | 4120 classB.interfaces = <InterfaceType> [classA.type]; |
| 4119 expect(_inheritanceManager.lookupInheritance(classB, getterName), same(gette
rG)); | 4121 expect(_inheritanceManager.lookupInheritance(classB, getterName), same(gette
rG)); |
| 4120 _assertNoErrors(classA); | 4122 _assertNoErrors(classA); |
| 4121 _assertNoErrors(classB); | 4123 _assertNoErrors(classB); |
| 4122 } | 4124 } |
| 4123 | 4125 |
| 4124 void test_lookupInheritance_interface_method() { | 4126 void test_lookupInheritance_interface_method() { |
| 4125 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 4127 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 4126 String methodName = "m"; | 4128 String methodName = "m"; |
| 4127 MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvid
er.intType, []); | 4129 MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvid
er.intType); |
| 4128 classA.methods = <MethodElement> [methodM]; | 4130 classA.methods = <MethodElement> [methodM]; |
| 4129 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 4131 ClassElementImpl classB = ElementFactory.classElement2("B"); |
| 4130 classB.interfaces = <InterfaceType> [classA.type]; | 4132 classB.interfaces = <InterfaceType> [classA.type]; |
| 4131 expect(_inheritanceManager.lookupInheritance(classB, methodName), same(metho
dM)); | 4133 expect(_inheritanceManager.lookupInheritance(classB, methodName), same(metho
dM)); |
| 4132 _assertNoErrors(classA); | 4134 _assertNoErrors(classA); |
| 4133 _assertNoErrors(classB); | 4135 _assertNoErrors(classB); |
| 4134 } | 4136 } |
| 4135 | 4137 |
| 4136 void test_lookupInheritance_interface_setter() { | 4138 void test_lookupInheritance_interface_setter() { |
| 4137 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 4139 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 4138 String setterName = "s"; | 4140 String setterName = "s"; |
| 4139 PropertyAccessorElement setterS = ElementFactory.setterElement(setterName, f
alse, _typeProvider.intType); | 4141 PropertyAccessorElement setterS = ElementFactory.setterElement(setterName, f
alse, _typeProvider.intType); |
| 4140 classA.accessors = <PropertyAccessorElement> [setterS]; | 4142 classA.accessors = <PropertyAccessorElement> [setterS]; |
| 4141 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 4143 ClassElementImpl classB = ElementFactory.classElement2("B"); |
| 4142 classB.interfaces = <InterfaceType> [classA.type]; | 4144 classB.interfaces = <InterfaceType> [classA.type]; |
| 4143 expect(_inheritanceManager.lookupInheritance(classB, "$setterName="), same(s
etterS)); | 4145 expect(_inheritanceManager.lookupInheritance(classB, "$setterName="), same(s
etterS)); |
| 4144 _assertNoErrors(classA); | 4146 _assertNoErrors(classA); |
| 4145 _assertNoErrors(classB); | 4147 _assertNoErrors(classB); |
| 4146 } | 4148 } |
| 4147 | 4149 |
| 4148 void test_lookupInheritance_interface_staticMember() { | 4150 void test_lookupInheritance_interface_staticMember() { |
| 4149 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 4151 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 4150 String methodName = "m"; | 4152 String methodName = "m"; |
| 4151 MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvid
er.intType, []); | 4153 MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvid
er.intType); |
| 4152 (methodM as MethodElementImpl).static = true; | 4154 (methodM as MethodElementImpl).static = true; |
| 4153 classA.methods = <MethodElement> [methodM]; | 4155 classA.methods = <MethodElement> [methodM]; |
| 4154 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 4156 ClassElementImpl classB = ElementFactory.classElement2("B"); |
| 4155 classB.interfaces = <InterfaceType> [classA.type]; | 4157 classB.interfaces = <InterfaceType> [classA.type]; |
| 4156 expect(_inheritanceManager.lookupInheritance(classB, methodName), isNull); | 4158 expect(_inheritanceManager.lookupInheritance(classB, methodName), isNull); |
| 4157 _assertNoErrors(classA); | 4159 _assertNoErrors(classA); |
| 4158 _assertNoErrors(classB); | 4160 _assertNoErrors(classB); |
| 4159 } | 4161 } |
| 4160 | 4162 |
| 4161 void test_lookupInheritance_interfaces_infiniteLoop() { | 4163 void test_lookupInheritance_interfaces_infiniteLoop() { |
| 4162 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 4164 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 4163 classA.interfaces = <InterfaceType> [classA.type]; | 4165 classA.interfaces = <InterfaceType> [classA.type]; |
| 4164 expect(_inheritanceManager.lookupInheritance(classA, "name"), isNull); | 4166 expect(_inheritanceManager.lookupInheritance(classA, "name"), isNull); |
| 4165 _assertNoErrors(classA); | 4167 _assertNoErrors(classA); |
| 4166 } | 4168 } |
| 4167 | 4169 |
| 4168 void test_lookupInheritance_interfaces_infiniteLoop2() { | 4170 void test_lookupInheritance_interfaces_infiniteLoop2() { |
| 4169 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 4171 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 4170 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 4172 ClassElementImpl classB = ElementFactory.classElement2("B"); |
| 4171 classA.interfaces = <InterfaceType> [classB.type]; | 4173 classA.interfaces = <InterfaceType> [classB.type]; |
| 4172 classB.interfaces = <InterfaceType> [classA.type]; | 4174 classB.interfaces = <InterfaceType> [classA.type]; |
| 4173 expect(_inheritanceManager.lookupInheritance(classA, "name"), isNull); | 4175 expect(_inheritanceManager.lookupInheritance(classA, "name"), isNull); |
| 4174 _assertNoErrors(classA); | 4176 _assertNoErrors(classA); |
| 4175 _assertNoErrors(classB); | 4177 _assertNoErrors(classB); |
| 4176 } | 4178 } |
| 4177 | 4179 |
| 4178 void test_lookupInheritance_interfaces_union2() { | 4180 void test_lookupInheritance_interfaces_union2() { |
| 4179 ClassElementImpl classI1 = ElementFactory.classElement2("I1", []); | 4181 ClassElementImpl classI1 = ElementFactory.classElement2("I1"); |
| 4180 String methodName1 = "m1"; | 4182 String methodName1 = "m1"; |
| 4181 MethodElement methodM1 = ElementFactory.methodElement(methodName1, _typeProv
ider.intType, []); | 4183 MethodElement methodM1 = ElementFactory.methodElement(methodName1, _typeProv
ider.intType); |
| 4182 classI1.methods = <MethodElement> [methodM1]; | 4184 classI1.methods = <MethodElement> [methodM1]; |
| 4183 ClassElementImpl classI2 = ElementFactory.classElement2("I2", []); | 4185 ClassElementImpl classI2 = ElementFactory.classElement2("I2"); |
| 4184 String methodName2 = "m2"; | 4186 String methodName2 = "m2"; |
| 4185 MethodElement methodM2 = ElementFactory.methodElement(methodName2, _typeProv
ider.intType, []); | 4187 MethodElement methodM2 = ElementFactory.methodElement(methodName2, _typeProv
ider.intType); |
| 4186 classI2.methods = <MethodElement> [methodM2]; | 4188 classI2.methods = <MethodElement> [methodM2]; |
| 4187 classI2.interfaces = <InterfaceType> [classI1.type]; | 4189 classI2.interfaces = <InterfaceType> [classI1.type]; |
| 4188 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 4190 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 4189 classA.interfaces = <InterfaceType> [classI2.type]; | 4191 classA.interfaces = <InterfaceType> [classI2.type]; |
| 4190 expect(_inheritanceManager.lookupInheritance(classA, methodName1), same(meth
odM1)); | 4192 expect(_inheritanceManager.lookupInheritance(classA, methodName1), same(meth
odM1)); |
| 4191 expect(_inheritanceManager.lookupInheritance(classA, methodName2), same(meth
odM2)); | 4193 expect(_inheritanceManager.lookupInheritance(classA, methodName2), same(meth
odM2)); |
| 4192 _assertNoErrors(classI1); | 4194 _assertNoErrors(classI1); |
| 4193 _assertNoErrors(classI2); | 4195 _assertNoErrors(classI2); |
| 4194 _assertNoErrors(classA); | 4196 _assertNoErrors(classA); |
| 4195 } | 4197 } |
| 4196 | 4198 |
| 4197 void test_lookupInheritance_mixin_getter() { | 4199 void test_lookupInheritance_mixin_getter() { |
| 4198 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 4200 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 4199 String getterName = "g"; | 4201 String getterName = "g"; |
| 4200 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, _typeProvider.intType); | 4202 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, _typeProvider.intType); |
| 4201 classA.accessors = <PropertyAccessorElement> [getterG]; | 4203 classA.accessors = <PropertyAccessorElement> [getterG]; |
| 4202 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 4204 ClassElementImpl classB = ElementFactory.classElement2("B"); |
| 4203 classB.mixins = <InterfaceType> [classA.type]; | 4205 classB.mixins = <InterfaceType> [classA.type]; |
| 4204 expect(_inheritanceManager.lookupInheritance(classB, getterName), same(gette
rG)); | 4206 expect(_inheritanceManager.lookupInheritance(classB, getterName), same(gette
rG)); |
| 4205 _assertNoErrors(classA); | 4207 _assertNoErrors(classA); |
| 4206 _assertNoErrors(classB); | 4208 _assertNoErrors(classB); |
| 4207 } | 4209 } |
| 4208 | 4210 |
| 4209 void test_lookupInheritance_mixin_method() { | 4211 void test_lookupInheritance_mixin_method() { |
| 4210 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 4212 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 4211 String methodName = "m"; | 4213 String methodName = "m"; |
| 4212 MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvid
er.intType, []); | 4214 MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvid
er.intType); |
| 4213 classA.methods = <MethodElement> [methodM]; | 4215 classA.methods = <MethodElement> [methodM]; |
| 4214 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 4216 ClassElementImpl classB = ElementFactory.classElement2("B"); |
| 4215 classB.mixins = <InterfaceType> [classA.type]; | 4217 classB.mixins = <InterfaceType> [classA.type]; |
| 4216 expect(_inheritanceManager.lookupInheritance(classB, methodName), same(metho
dM)); | 4218 expect(_inheritanceManager.lookupInheritance(classB, methodName), same(metho
dM)); |
| 4217 _assertNoErrors(classA); | 4219 _assertNoErrors(classA); |
| 4218 _assertNoErrors(classB); | 4220 _assertNoErrors(classB); |
| 4219 } | 4221 } |
| 4220 | 4222 |
| 4221 void test_lookupInheritance_mixin_setter() { | 4223 void test_lookupInheritance_mixin_setter() { |
| 4222 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 4224 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 4223 String setterName = "s"; | 4225 String setterName = "s"; |
| 4224 PropertyAccessorElement setterS = ElementFactory.setterElement(setterName, f
alse, _typeProvider.intType); | 4226 PropertyAccessorElement setterS = ElementFactory.setterElement(setterName, f
alse, _typeProvider.intType); |
| 4225 classA.accessors = <PropertyAccessorElement> [setterS]; | 4227 classA.accessors = <PropertyAccessorElement> [setterS]; |
| 4226 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 4228 ClassElementImpl classB = ElementFactory.classElement2("B"); |
| 4227 classB.mixins = <InterfaceType> [classA.type]; | 4229 classB.mixins = <InterfaceType> [classA.type]; |
| 4228 expect(_inheritanceManager.lookupInheritance(classB, "$setterName="), same(s
etterS)); | 4230 expect(_inheritanceManager.lookupInheritance(classB, "$setterName="), same(s
etterS)); |
| 4229 _assertNoErrors(classA); | 4231 _assertNoErrors(classA); |
| 4230 _assertNoErrors(classB); | 4232 _assertNoErrors(classB); |
| 4231 } | 4233 } |
| 4232 | 4234 |
| 4233 void test_lookupInheritance_mixin_staticMember() { | 4235 void test_lookupInheritance_mixin_staticMember() { |
| 4234 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 4236 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 4235 String methodName = "m"; | 4237 String methodName = "m"; |
| 4236 MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvid
er.intType, []); | 4238 MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvid
er.intType); |
| 4237 (methodM as MethodElementImpl).static = true; | 4239 (methodM as MethodElementImpl).static = true; |
| 4238 classA.methods = <MethodElement> [methodM]; | 4240 classA.methods = <MethodElement> [methodM]; |
| 4239 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 4241 ClassElementImpl classB = ElementFactory.classElement2("B"); |
| 4240 classB.mixins = <InterfaceType> [classA.type]; | 4242 classB.mixins = <InterfaceType> [classA.type]; |
| 4241 expect(_inheritanceManager.lookupInheritance(classB, methodName), isNull); | 4243 expect(_inheritanceManager.lookupInheritance(classB, methodName), isNull); |
| 4242 _assertNoErrors(classA); | 4244 _assertNoErrors(classA); |
| 4243 _assertNoErrors(classB); | 4245 _assertNoErrors(classB); |
| 4244 } | 4246 } |
| 4245 | 4247 |
| 4246 void test_lookupInheritance_noMember() { | 4248 void test_lookupInheritance_noMember() { |
| 4247 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 4249 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 4248 expect(_inheritanceManager.lookupInheritance(classA, "a"), isNull); | 4250 expect(_inheritanceManager.lookupInheritance(classA, "a"), isNull); |
| 4249 _assertNoErrors(classA); | 4251 _assertNoErrors(classA); |
| 4250 } | 4252 } |
| 4251 | 4253 |
| 4252 void test_lookupInheritance_superclass_getter() { | 4254 void test_lookupInheritance_superclass_getter() { |
| 4253 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 4255 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 4254 String getterName = "g"; | 4256 String getterName = "g"; |
| 4255 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, _typeProvider.intType); | 4257 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, _typeProvider.intType); |
| 4256 classA.accessors = <PropertyAccessorElement> [getterG]; | 4258 classA.accessors = <PropertyAccessorElement> [getterG]; |
| 4257 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 4259 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
| 4258 expect(_inheritanceManager.lookupInheritance(classB, getterName), same(gette
rG)); | 4260 expect(_inheritanceManager.lookupInheritance(classB, getterName), same(gette
rG)); |
| 4259 _assertNoErrors(classA); | 4261 _assertNoErrors(classA); |
| 4260 _assertNoErrors(classB); | 4262 _assertNoErrors(classB); |
| 4261 } | 4263 } |
| 4262 | 4264 |
| 4263 void test_lookupInheritance_superclass_infiniteLoop() { | 4265 void test_lookupInheritance_superclass_infiniteLoop() { |
| 4264 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 4266 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 4265 classA.supertype = classA.type; | 4267 classA.supertype = classA.type; |
| 4266 expect(_inheritanceManager.lookupInheritance(classA, "name"), isNull); | 4268 expect(_inheritanceManager.lookupInheritance(classA, "name"), isNull); |
| 4267 _assertNoErrors(classA); | 4269 _assertNoErrors(classA); |
| 4268 } | 4270 } |
| 4269 | 4271 |
| 4270 void test_lookupInheritance_superclass_infiniteLoop2() { | 4272 void test_lookupInheritance_superclass_infiniteLoop2() { |
| 4271 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 4273 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 4272 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 4274 ClassElementImpl classB = ElementFactory.classElement2("B"); |
| 4273 classA.supertype = classB.type; | 4275 classA.supertype = classB.type; |
| 4274 classB.supertype = classA.type; | 4276 classB.supertype = classA.type; |
| 4275 expect(_inheritanceManager.lookupInheritance(classA, "name"), isNull); | 4277 expect(_inheritanceManager.lookupInheritance(classA, "name"), isNull); |
| 4276 _assertNoErrors(classA); | 4278 _assertNoErrors(classA); |
| 4277 _assertNoErrors(classB); | 4279 _assertNoErrors(classB); |
| 4278 } | 4280 } |
| 4279 | 4281 |
| 4280 void test_lookupInheritance_superclass_method() { | 4282 void test_lookupInheritance_superclass_method() { |
| 4281 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 4283 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 4282 String methodName = "m"; | 4284 String methodName = "m"; |
| 4283 MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvid
er.intType, []); | 4285 MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvid
er.intType); |
| 4284 classA.methods = <MethodElement> [methodM]; | 4286 classA.methods = <MethodElement> [methodM]; |
| 4285 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 4287 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
| 4286 expect(_inheritanceManager.lookupInheritance(classB, methodName), same(metho
dM)); | 4288 expect(_inheritanceManager.lookupInheritance(classB, methodName), same(metho
dM)); |
| 4287 _assertNoErrors(classA); | 4289 _assertNoErrors(classA); |
| 4288 _assertNoErrors(classB); | 4290 _assertNoErrors(classB); |
| 4289 } | 4291 } |
| 4290 | 4292 |
| 4291 void test_lookupInheritance_superclass_setter() { | 4293 void test_lookupInheritance_superclass_setter() { |
| 4292 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 4294 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 4293 String setterName = "s"; | 4295 String setterName = "s"; |
| 4294 PropertyAccessorElement setterS = ElementFactory.setterElement(setterName, f
alse, _typeProvider.intType); | 4296 PropertyAccessorElement setterS = ElementFactory.setterElement(setterName, f
alse, _typeProvider.intType); |
| 4295 classA.accessors = <PropertyAccessorElement> [setterS]; | 4297 classA.accessors = <PropertyAccessorElement> [setterS]; |
| 4296 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 4298 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
| 4297 expect(_inheritanceManager.lookupInheritance(classB, "$setterName="), same(s
etterS)); | 4299 expect(_inheritanceManager.lookupInheritance(classB, "$setterName="), same(s
etterS)); |
| 4298 _assertNoErrors(classA); | 4300 _assertNoErrors(classA); |
| 4299 _assertNoErrors(classB); | 4301 _assertNoErrors(classB); |
| 4300 } | 4302 } |
| 4301 | 4303 |
| 4302 void test_lookupInheritance_superclass_staticMember() { | 4304 void test_lookupInheritance_superclass_staticMember() { |
| 4303 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 4305 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 4304 String methodName = "m"; | 4306 String methodName = "m"; |
| 4305 MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvid
er.intType, []); | 4307 MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvid
er.intType); |
| 4306 (methodM as MethodElementImpl).static = true; | 4308 (methodM as MethodElementImpl).static = true; |
| 4307 classA.methods = <MethodElement> [methodM]; | 4309 classA.methods = <MethodElement> [methodM]; |
| 4308 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 4310 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
| 4309 expect(_inheritanceManager.lookupInheritance(classB, methodName), isNull); | 4311 expect(_inheritanceManager.lookupInheritance(classB, methodName), isNull); |
| 4310 _assertNoErrors(classA); | 4312 _assertNoErrors(classA); |
| 4311 _assertNoErrors(classB); | 4313 _assertNoErrors(classB); |
| 4312 } | 4314 } |
| 4313 | 4315 |
| 4314 void test_lookupMember_getter() { | 4316 void test_lookupMember_getter() { |
| 4315 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 4317 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 4316 String getterName = "g"; | 4318 String getterName = "g"; |
| 4317 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, _typeProvider.intType); | 4319 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, f
alse, _typeProvider.intType); |
| 4318 classA.accessors = <PropertyAccessorElement> [getterG]; | 4320 classA.accessors = <PropertyAccessorElement> [getterG]; |
| 4319 expect(_inheritanceManager.lookupMember(classA, getterName), same(getterG)); | 4321 expect(_inheritanceManager.lookupMember(classA, getterName), same(getterG)); |
| 4320 _assertNoErrors(classA); | 4322 _assertNoErrors(classA); |
| 4321 } | 4323 } |
| 4322 | 4324 |
| 4323 void test_lookupMember_getter_static() { | 4325 void test_lookupMember_getter_static() { |
| 4324 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 4326 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 4325 String getterName = "g"; | 4327 String getterName = "g"; |
| 4326 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, t
rue, _typeProvider.intType); | 4328 PropertyAccessorElement getterG = ElementFactory.getterElement(getterName, t
rue, _typeProvider.intType); |
| 4327 classA.accessors = <PropertyAccessorElement> [getterG]; | 4329 classA.accessors = <PropertyAccessorElement> [getterG]; |
| 4328 expect(_inheritanceManager.lookupMember(classA, getterName), isNull); | 4330 expect(_inheritanceManager.lookupMember(classA, getterName), isNull); |
| 4329 _assertNoErrors(classA); | 4331 _assertNoErrors(classA); |
| 4330 } | 4332 } |
| 4331 | 4333 |
| 4332 void test_lookupMember_method() { | 4334 void test_lookupMember_method() { |
| 4333 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 4335 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 4334 String methodName = "m"; | 4336 String methodName = "m"; |
| 4335 MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvid
er.intType, []); | 4337 MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvid
er.intType); |
| 4336 classA.methods = <MethodElement> [methodM]; | 4338 classA.methods = <MethodElement> [methodM]; |
| 4337 expect(_inheritanceManager.lookupMember(classA, methodName), same(methodM)); | 4339 expect(_inheritanceManager.lookupMember(classA, methodName), same(methodM)); |
| 4338 _assertNoErrors(classA); | 4340 _assertNoErrors(classA); |
| 4339 } | 4341 } |
| 4340 | 4342 |
| 4341 void test_lookupMember_method_static() { | 4343 void test_lookupMember_method_static() { |
| 4342 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 4344 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 4343 String methodName = "m"; | 4345 String methodName = "m"; |
| 4344 MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvid
er.intType, []); | 4346 MethodElement methodM = ElementFactory.methodElement(methodName, _typeProvid
er.intType); |
| 4345 (methodM as MethodElementImpl).static = true; | 4347 (methodM as MethodElementImpl).static = true; |
| 4346 classA.methods = <MethodElement> [methodM]; | 4348 classA.methods = <MethodElement> [methodM]; |
| 4347 expect(_inheritanceManager.lookupMember(classA, methodName), isNull); | 4349 expect(_inheritanceManager.lookupMember(classA, methodName), isNull); |
| 4348 _assertNoErrors(classA); | 4350 _assertNoErrors(classA); |
| 4349 } | 4351 } |
| 4350 | 4352 |
| 4351 void test_lookupMember_noMember() { | 4353 void test_lookupMember_noMember() { |
| 4352 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 4354 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 4353 expect(_inheritanceManager.lookupMember(classA, "a"), isNull); | 4355 expect(_inheritanceManager.lookupMember(classA, "a"), isNull); |
| 4354 _assertNoErrors(classA); | 4356 _assertNoErrors(classA); |
| 4355 } | 4357 } |
| 4356 | 4358 |
| 4357 void test_lookupMember_setter() { | 4359 void test_lookupMember_setter() { |
| 4358 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 4360 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 4359 String setterName = "s"; | 4361 String setterName = "s"; |
| 4360 PropertyAccessorElement setterS = ElementFactory.setterElement(setterName, f
alse, _typeProvider.intType); | 4362 PropertyAccessorElement setterS = ElementFactory.setterElement(setterName, f
alse, _typeProvider.intType); |
| 4361 classA.accessors = <PropertyAccessorElement> [setterS]; | 4363 classA.accessors = <PropertyAccessorElement> [setterS]; |
| 4362 expect(_inheritanceManager.lookupMember(classA, "$setterName="), same(setter
S)); | 4364 expect(_inheritanceManager.lookupMember(classA, "$setterName="), same(setter
S)); |
| 4363 _assertNoErrors(classA); | 4365 _assertNoErrors(classA); |
| 4364 } | 4366 } |
| 4365 | 4367 |
| 4366 void test_lookupMember_setter_static() { | 4368 void test_lookupMember_setter_static() { |
| 4367 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 4369 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 4368 String setterName = "s"; | 4370 String setterName = "s"; |
| 4369 PropertyAccessorElement setterS = ElementFactory.setterElement(setterName, t
rue, _typeProvider.intType); | 4371 PropertyAccessorElement setterS = ElementFactory.setterElement(setterName, t
rue, _typeProvider.intType); |
| 4370 classA.accessors = <PropertyAccessorElement> [setterS]; | 4372 classA.accessors = <PropertyAccessorElement> [setterS]; |
| 4371 expect(_inheritanceManager.lookupMember(classA, setterName), isNull); | 4373 expect(_inheritanceManager.lookupMember(classA, setterName), isNull); |
| 4372 _assertNoErrors(classA); | 4374 _assertNoErrors(classA); |
| 4373 } | 4375 } |
| 4374 | 4376 |
| 4375 void test_lookupOverrides_noParentClasses() { | 4377 void test_lookupOverrides_noParentClasses() { |
| 4376 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 4378 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 4377 String methodName = "m"; | 4379 String methodName = "m"; |
| 4378 MethodElementImpl methodM = ElementFactory.methodElement(methodName, _typePr
ovider.intType, []); | 4380 MethodElementImpl methodM = ElementFactory.methodElement(methodName, _typePr
ovider.intType); |
| 4379 classA.methods = <MethodElement> [methodM]; | 4381 classA.methods = <MethodElement> [methodM]; |
| 4380 expect(_inheritanceManager.lookupOverrides(classA, methodName), hasLength(0)
); | 4382 expect(_inheritanceManager.lookupOverrides(classA, methodName), hasLength(0)
); |
| 4381 _assertNoErrors(classA); | 4383 _assertNoErrors(classA); |
| 4382 } | 4384 } |
| 4383 | 4385 |
| 4384 void test_lookupOverrides_overrideBaseClass() { | 4386 void test_lookupOverrides_overrideBaseClass() { |
| 4385 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 4387 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 4386 String methodName = "m"; | 4388 String methodName = "m"; |
| 4387 MethodElementImpl methodMinA = ElementFactory.methodElement(methodName, _typ
eProvider.intType, []); | 4389 MethodElementImpl methodMinA = ElementFactory.methodElement(methodName, _typ
eProvider.intType); |
| 4388 classA.methods = <MethodElement> [methodMinA]; | 4390 classA.methods = <MethodElement> [methodMinA]; |
| 4389 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 4391 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
| 4390 MethodElementImpl methodMinB = ElementFactory.methodElement(methodName, _typ
eProvider.intType, []); | 4392 MethodElementImpl methodMinB = ElementFactory.methodElement(methodName, _typ
eProvider.intType); |
| 4391 classB.methods = <MethodElement> [methodMinB]; | 4393 classB.methods = <MethodElement> [methodMinB]; |
| 4392 List<ExecutableElement> overrides = _inheritanceManager.lookupOverrides(clas
sB, methodName); | 4394 List<ExecutableElement> overrides = _inheritanceManager.lookupOverrides(clas
sB, methodName); |
| 4393 expect(overrides, unorderedEquals([methodMinA])); | 4395 expect(overrides, unorderedEquals([methodMinA])); |
| 4394 _assertNoErrors(classA); | 4396 _assertNoErrors(classA); |
| 4395 _assertNoErrors(classB); | 4397 _assertNoErrors(classB); |
| 4396 } | 4398 } |
| 4397 | 4399 |
| 4398 void test_lookupOverrides_overrideInterface() { | 4400 void test_lookupOverrides_overrideInterface() { |
| 4399 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 4401 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 4400 String methodName = "m"; | 4402 String methodName = "m"; |
| 4401 MethodElementImpl methodMinA = ElementFactory.methodElement(methodName, _typ
eProvider.intType, []); | 4403 MethodElementImpl methodMinA = ElementFactory.methodElement(methodName, _typ
eProvider.intType); |
| 4402 classA.methods = <MethodElement> [methodMinA]; | 4404 classA.methods = <MethodElement> [methodMinA]; |
| 4403 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 4405 ClassElementImpl classB = ElementFactory.classElement2("B"); |
| 4404 classB.interfaces = <InterfaceType> [classA.type]; | 4406 classB.interfaces = <InterfaceType> [classA.type]; |
| 4405 MethodElementImpl methodMinB = ElementFactory.methodElement(methodName, _typ
eProvider.intType, []); | 4407 MethodElementImpl methodMinB = ElementFactory.methodElement(methodName, _typ
eProvider.intType); |
| 4406 classB.methods = <MethodElement> [methodMinB]; | 4408 classB.methods = <MethodElement> [methodMinB]; |
| 4407 List<ExecutableElement> overrides = _inheritanceManager.lookupOverrides(clas
sB, methodName); | 4409 List<ExecutableElement> overrides = _inheritanceManager.lookupOverrides(clas
sB, methodName); |
| 4408 expect(overrides, unorderedEquals([methodMinA])); | 4410 expect(overrides, unorderedEquals([methodMinA])); |
| 4409 _assertNoErrors(classA); | 4411 _assertNoErrors(classA); |
| 4410 _assertNoErrors(classB); | 4412 _assertNoErrors(classB); |
| 4411 } | 4413 } |
| 4412 | 4414 |
| 4413 void test_lookupOverrides_overrideTwoInterfaces() { | 4415 void test_lookupOverrides_overrideTwoInterfaces() { |
| 4414 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 4416 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 4415 String methodName = "m"; | 4417 String methodName = "m"; |
| 4416 MethodElementImpl methodMinA = ElementFactory.methodElement(methodName, _typ
eProvider.intType, []); | 4418 MethodElementImpl methodMinA = ElementFactory.methodElement(methodName, _typ
eProvider.intType); |
| 4417 classA.methods = <MethodElement> [methodMinA]; | 4419 classA.methods = <MethodElement> [methodMinA]; |
| 4418 ClassElementImpl classB = ElementFactory.classElement2("B", []); | 4420 ClassElementImpl classB = ElementFactory.classElement2("B"); |
| 4419 MethodElementImpl methodMinB = ElementFactory.methodElement(methodName, _typ
eProvider.doubleType, []); | 4421 MethodElementImpl methodMinB = ElementFactory.methodElement(methodName, _typ
eProvider.doubleType); |
| 4420 classB.methods = <MethodElement> [methodMinB]; | 4422 classB.methods = <MethodElement> [methodMinB]; |
| 4421 ClassElementImpl classC = ElementFactory.classElement2("C", []); | 4423 ClassElementImpl classC = ElementFactory.classElement2("C"); |
| 4422 classC.interfaces = <InterfaceType> [classA.type, classB.type]; | 4424 classC.interfaces = <InterfaceType> [classA.type, classB.type]; |
| 4423 MethodElementImpl methodMinC = ElementFactory.methodElement(methodName, _typ
eProvider.numType, []); | 4425 MethodElementImpl methodMinC = ElementFactory.methodElement(methodName, _typ
eProvider.numType); |
| 4424 classC.methods = <MethodElement> [methodMinC]; | 4426 classC.methods = <MethodElement> [methodMinC]; |
| 4425 List<ExecutableElement> overrides = _inheritanceManager.lookupOverrides(clas
sC, methodName); | 4427 List<ExecutableElement> overrides = _inheritanceManager.lookupOverrides(clas
sC, methodName); |
| 4426 expect(overrides, unorderedEquals([methodMinA, methodMinB])); | 4428 expect(overrides, unorderedEquals([methodMinA, methodMinB])); |
| 4427 _assertNoErrors(classA); | 4429 _assertNoErrors(classA); |
| 4428 _assertNoErrors(classB); | 4430 _assertNoErrors(classB); |
| 4429 _assertNoErrors(classC); | 4431 _assertNoErrors(classC); |
| 4430 } | 4432 } |
| 4431 | 4433 |
| 4432 void _assertErrors(ClassElement classElt, List<ErrorCode> expectedErrorCodes)
{ | 4434 void _assertErrors(ClassElement classElt, [List<ErrorCode> expectedErrorCodes
= ErrorCode.EMPTY_LIST]) { |
| 4433 GatheringErrorListener errorListener = new GatheringErrorListener(); | 4435 GatheringErrorListener errorListener = new GatheringErrorListener(); |
| 4434 HashSet<AnalysisError> actualErrors = _inheritanceManager.getErrors(classElt
); | 4436 HashSet<AnalysisError> actualErrors = _inheritanceManager.getErrors(classElt
); |
| 4435 if (actualErrors != null) { | 4437 if (actualErrors != null) { |
| 4436 for (AnalysisError error in actualErrors) { | 4438 for (AnalysisError error in actualErrors) { |
| 4437 errorListener.onError(error); | 4439 errorListener.onError(error); |
| 4438 } | 4440 } |
| 4439 } | 4441 } |
| 4440 errorListener.assertErrorsWithCodes(expectedErrorCodes); | 4442 errorListener.assertErrorsWithCodes(expectedErrorCodes); |
| 4441 } | 4443 } |
| 4442 | 4444 |
| 4443 void _assertNoErrors(ClassElement classElt) { | 4445 void _assertNoErrors(ClassElement classElt) { |
| 4444 _assertErrors(classElt, []); | 4446 _assertErrors(classElt); |
| 4445 } | 4447 } |
| 4446 | 4448 |
| 4447 /** | 4449 /** |
| 4448 * Create the inheritance manager used by the tests. | 4450 * Create the inheritance manager used by the tests. |
| 4449 * | 4451 * |
| 4450 * @return the inheritance manager that was created | 4452 * @return the inheritance manager that was created |
| 4451 */ | 4453 */ |
| 4452 InheritanceManager _createInheritanceManager() { | 4454 InheritanceManager _createInheritanceManager() { |
| 4453 AnalysisContextImpl context = AnalysisContextFactory.contextWithCore(); | 4455 AnalysisContextImpl context = AnalysisContextFactory.contextWithCore(); |
| 4454 FileBasedSource source = new FileBasedSource.con1(FileUtilities2.createFile(
"/test.dart")); | 4456 FileBasedSource source = new FileBasedSource.con1(FileUtilities2.createFile(
"/test.dart")); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 4479 Source librarySource = addSource("/lib.dart", r''' | 4481 Source librarySource = addSource("/lib.dart", r''' |
| 4480 library lib; | 4482 library lib; |
| 4481 part 'first.dart'; | 4483 part 'first.dart'; |
| 4482 part 'second.dart';'''); | 4484 part 'second.dart';'''); |
| 4483 addSource("/first.dart", r''' | 4485 addSource("/first.dart", r''' |
| 4484 part of lib; | 4486 part of lib; |
| 4485 int get V => 0;'''); | 4487 int get V => 0;'''); |
| 4486 addSource("/second.dart", r''' | 4488 addSource("/second.dart", r''' |
| 4487 part of lib; | 4489 part of lib; |
| 4488 void set V(int v) {}'''); | 4490 void set V(int v) {}'''); |
| 4489 LibraryElement element = _buildLibrary(librarySource, []); | 4491 LibraryElement element = _buildLibrary(librarySource); |
| 4490 expect(element, isNotNull); | 4492 expect(element, isNotNull); |
| 4491 List<CompilationUnitElement> sourcedUnits = element.parts; | 4493 List<CompilationUnitElement> sourcedUnits = element.parts; |
| 4492 expect(sourcedUnits, hasLength(2)); | 4494 expect(sourcedUnits, hasLength(2)); |
| 4493 List<PropertyAccessorElement> firstAccessors = sourcedUnits[0].accessors; | 4495 List<PropertyAccessorElement> firstAccessors = sourcedUnits[0].accessors; |
| 4494 expect(firstAccessors, hasLength(1)); | 4496 expect(firstAccessors, hasLength(1)); |
| 4495 List<PropertyAccessorElement> secondAccessors = sourcedUnits[1].accessors; | 4497 List<PropertyAccessorElement> secondAccessors = sourcedUnits[1].accessors; |
| 4496 expect(secondAccessors, hasLength(1)); | 4498 expect(secondAccessors, hasLength(1)); |
| 4497 expect(secondAccessors[0].variable, same(firstAccessors[0].variable)); | 4499 expect(secondAccessors[0].variable, same(firstAccessors[0].variable)); |
| 4498 } | 4500 } |
| 4499 | 4501 |
| 4500 void test_empty() { | 4502 void test_empty() { |
| 4501 Source librarySource = addSource("/lib.dart", "library lib;"); | 4503 Source librarySource = addSource("/lib.dart", "library lib;"); |
| 4502 LibraryElement element = _buildLibrary(librarySource, []); | 4504 LibraryElement element = _buildLibrary(librarySource); |
| 4503 expect(element, isNotNull); | 4505 expect(element, isNotNull); |
| 4504 expect(element.name, "lib"); | 4506 expect(element.name, "lib"); |
| 4505 expect(element.entryPoint, isNull); | 4507 expect(element.entryPoint, isNull); |
| 4506 expect(element.importedLibraries, hasLength(0)); | 4508 expect(element.importedLibraries, hasLength(0)); |
| 4507 expect(element.imports, hasLength(0)); | 4509 expect(element.imports, hasLength(0)); |
| 4508 expect(element.library, same(element)); | 4510 expect(element.library, same(element)); |
| 4509 expect(element.prefixes, hasLength(0)); | 4511 expect(element.prefixes, hasLength(0)); |
| 4510 expect(element.parts, hasLength(0)); | 4512 expect(element.parts, hasLength(0)); |
| 4511 CompilationUnitElement unit = element.definingCompilationUnit; | 4513 CompilationUnitElement unit = element.definingCompilationUnit; |
| 4512 expect(unit, isNotNull); | 4514 expect(unit, isNotNull); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 4542 part 'first.dart'; | 4544 part 'first.dart'; |
| 4543 part 'second.dart'; | 4545 part 'second.dart'; |
| 4544 | 4546 |
| 4545 class A {}'''); | 4547 class A {}'''); |
| 4546 addSource("/first.dart", r''' | 4548 addSource("/first.dart", r''' |
| 4547 part of lib; | 4549 part of lib; |
| 4548 class B {}'''); | 4550 class B {}'''); |
| 4549 addSource("/second.dart", r''' | 4551 addSource("/second.dart", r''' |
| 4550 part of lib; | 4552 part of lib; |
| 4551 class C {}'''); | 4553 class C {}'''); |
| 4552 LibraryElement element = _buildLibrary(librarySource, []); | 4554 LibraryElement element = _buildLibrary(librarySource); |
| 4553 expect(element, isNotNull); | 4555 expect(element, isNotNull); |
| 4554 List<CompilationUnitElement> sourcedUnits = element.parts; | 4556 List<CompilationUnitElement> sourcedUnits = element.parts; |
| 4555 expect(sourcedUnits, hasLength(2)); | 4557 expect(sourcedUnits, hasLength(2)); |
| 4556 _assertTypes(element.definingCompilationUnit, ["A"]); | 4558 _assertTypes(element.definingCompilationUnit, ["A"]); |
| 4557 if (sourcedUnits[0].name == "first.dart") { | 4559 if (sourcedUnits[0].name == "first.dart") { |
| 4558 _assertTypes(sourcedUnits[0], ["B"]); | 4560 _assertTypes(sourcedUnits[0], ["B"]); |
| 4559 _assertTypes(sourcedUnits[1], ["C"]); | 4561 _assertTypes(sourcedUnits[1], ["C"]); |
| 4560 } else { | 4562 } else { |
| 4561 _assertTypes(sourcedUnits[0], ["C"]); | 4563 _assertTypes(sourcedUnits[0], ["C"]); |
| 4562 _assertTypes(sourcedUnits[1], ["B"]); | 4564 _assertTypes(sourcedUnits[1], ["B"]); |
| 4563 } | 4565 } |
| 4564 } | 4566 } |
| 4565 | 4567 |
| 4566 void test_singleFile() { | 4568 void test_singleFile() { |
| 4567 Source librarySource = addSource("/lib.dart", r''' | 4569 Source librarySource = addSource("/lib.dart", r''' |
| 4568 library lib; | 4570 library lib; |
| 4569 | 4571 |
| 4570 class A {}'''); | 4572 class A {}'''); |
| 4571 LibraryElement element = _buildLibrary(librarySource, []); | 4573 LibraryElement element = _buildLibrary(librarySource); |
| 4572 expect(element, isNotNull); | 4574 expect(element, isNotNull); |
| 4573 _assertTypes(element.definingCompilationUnit, ["A"]); | 4575 _assertTypes(element.definingCompilationUnit, ["A"]); |
| 4574 } | 4576 } |
| 4575 | 4577 |
| 4576 /** | 4578 /** |
| 4577 * Add a source file to the content provider. The file path should be absolute
. | 4579 * Add a source file to the content provider. The file path should be absolute
. |
| 4578 * | 4580 * |
| 4579 * @param filePath the path of the file being added | 4581 * @param filePath the path of the file being added |
| 4580 * @param contents the contents to be returned by the content provider for the
specified file | 4582 * @param contents the contents to be returned by the content provider for the
specified file |
| 4581 * @return the source object representing the added file | 4583 * @return the source object representing the added file |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4619 | 4621 |
| 4620 /** | 4622 /** |
| 4621 * Build the element model for the library whose defining compilation unit has
the given source. | 4623 * Build the element model for the library whose defining compilation unit has
the given source. |
| 4622 * | 4624 * |
| 4623 * @param librarySource the source of the defining compilation unit for the li
brary | 4625 * @param librarySource the source of the defining compilation unit for the li
brary |
| 4624 * @param expectedErrorCodes the errors that are expected to be found while bu
ilding the element | 4626 * @param expectedErrorCodes the errors that are expected to be found while bu
ilding the element |
| 4625 * model | 4627 * model |
| 4626 * @return the element model that was built for the library | 4628 * @return the element model that was built for the library |
| 4627 * @throws Exception if the element model could not be built | 4629 * @throws Exception if the element model could not be built |
| 4628 */ | 4630 */ |
| 4629 LibraryElement _buildLibrary(Source librarySource, List<ErrorCode> expectedErr
orCodes) { | 4631 LibraryElement _buildLibrary(Source librarySource, [List<ErrorCode> expectedEr
rorCodes = ErrorCode.EMPTY_LIST]) { |
| 4630 LibraryResolver resolver = new LibraryResolver(_context); | 4632 LibraryResolver resolver = new LibraryResolver(_context); |
| 4631 LibraryElementBuilder builder = new LibraryElementBuilder(resolver.analysisC
ontext, resolver.errorListener); | 4633 LibraryElementBuilder builder = new LibraryElementBuilder(resolver.analysisC
ontext, resolver.errorListener); |
| 4632 Library library = resolver.createLibrary(librarySource); | 4634 Library library = resolver.createLibrary(librarySource); |
| 4633 LibraryElement element = builder.buildLibrary(library); | 4635 LibraryElement element = builder.buildLibrary(library); |
| 4634 GatheringErrorListener listener = new GatheringErrorListener(); | 4636 GatheringErrorListener listener = new GatheringErrorListener(); |
| 4635 listener.addAll2(resolver.errorListener); | 4637 listener.addAll2(resolver.errorListener); |
| 4636 listener.assertErrorsWithCodes(expectedErrorCodes); | 4638 listener.assertErrorsWithCodes(expectedErrorCodes); |
| 4637 return element; | 4639 return element; |
| 4638 } | 4640 } |
| 4639 } | 4641 } |
| 4640 | 4642 |
| 4641 class LibraryImportScopeTest extends ResolverTestCase { | 4643 class LibraryImportScopeTest extends ResolverTestCase { |
| 4642 void test_conflictingImports() { | 4644 void test_conflictingImports() { |
| 4643 AnalysisContext context = new AnalysisContextImpl(); | 4645 AnalysisContext context = new AnalysisContextImpl(); |
| 4644 context.sourceFactory = new SourceFactory([]); | 4646 context.sourceFactory = new SourceFactory([]); |
| 4645 String typeNameA = "A"; | 4647 String typeNameA = "A"; |
| 4646 String typeNameB = "B"; | 4648 String typeNameB = "B"; |
| 4647 String typeNameC = "C"; | 4649 String typeNameC = "C"; |
| 4648 ClassElement typeA = ElementFactory.classElement2(typeNameA, []); | 4650 ClassElement typeA = ElementFactory.classElement2(typeNameA); |
| 4649 ClassElement typeB1 = ElementFactory.classElement2(typeNameB, []); | 4651 ClassElement typeB1 = ElementFactory.classElement2(typeNameB); |
| 4650 ClassElement typeB2 = ElementFactory.classElement2(typeNameB, []); | 4652 ClassElement typeB2 = ElementFactory.classElement2(typeNameB); |
| 4651 ClassElement typeC = ElementFactory.classElement2(typeNameC, []); | 4653 ClassElement typeC = ElementFactory.classElement2(typeNameC); |
| 4652 LibraryElement importedLibrary1 = createTestLibrary(context, "imported1", []
); | 4654 LibraryElement importedLibrary1 = createTestLibrary(context, "imported1"); |
| 4653 (importedLibrary1.definingCompilationUnit as CompilationUnitElementImpl).typ
es = <ClassElement> [typeA, typeB1]; | 4655 (importedLibrary1.definingCompilationUnit as CompilationUnitElementImpl).typ
es = <ClassElement> [typeA, typeB1]; |
| 4654 ImportElementImpl import1 = ElementFactory.importFor(importedLibrary1, null,
[]); | 4656 ImportElementImpl import1 = ElementFactory.importFor(importedLibrary1, null)
; |
| 4655 LibraryElement importedLibrary2 = createTestLibrary(context, "imported2", []
); | 4657 LibraryElement importedLibrary2 = createTestLibrary(context, "imported2"); |
| 4656 (importedLibrary2.definingCompilationUnit as CompilationUnitElementImpl).typ
es = <ClassElement> [typeB2, typeC]; | 4658 (importedLibrary2.definingCompilationUnit as CompilationUnitElementImpl).typ
es = <ClassElement> [typeB2, typeC]; |
| 4657 ImportElementImpl import2 = ElementFactory.importFor(importedLibrary2, null,
[]); | 4659 ImportElementImpl import2 = ElementFactory.importFor(importedLibrary2, null)
; |
| 4658 LibraryElementImpl importingLibrary = createTestLibrary(context, "importing"
, []); | 4660 LibraryElementImpl importingLibrary = createTestLibrary(context, "importing"
); |
| 4659 importingLibrary.imports = <ImportElement> [import1, import2]; | 4661 importingLibrary.imports = <ImportElement> [import1, import2]; |
| 4660 { | 4662 { |
| 4661 GatheringErrorListener errorListener = new GatheringErrorListener(); | 4663 GatheringErrorListener errorListener = new GatheringErrorListener(); |
| 4662 Scope scope = new LibraryImportScope(importingLibrary, errorListener); | 4664 Scope scope = new LibraryImportScope(importingLibrary, errorListener); |
| 4663 expect(scope.lookup(AstFactory.identifier3(typeNameA), importingLibrary),
typeA); | 4665 expect(scope.lookup(AstFactory.identifier3(typeNameA), importingLibrary),
typeA); |
| 4664 errorListener.assertNoErrors(); | 4666 errorListener.assertNoErrors(); |
| 4665 expect(scope.lookup(AstFactory.identifier3(typeNameC), importingLibrary),
typeC); | 4667 expect(scope.lookup(AstFactory.identifier3(typeNameC), importingLibrary),
typeC); |
| 4666 errorListener.assertNoErrors(); | 4668 errorListener.assertNoErrors(); |
| 4667 Element element = scope.lookup(AstFactory.identifier3(typeNameB), importin
gLibrary); | 4669 Element element = scope.lookup(AstFactory.identifier3(typeNameB), importin
gLibrary); |
| 4668 errorListener.assertErrorsWithCodes([StaticWarningCode.AMBIGUOUS_IMPORT]); | 4670 errorListener.assertErrorsWithCodes([StaticWarningCode.AMBIGUOUS_IMPORT]); |
| 4669 EngineTestCase.assertInstanceOf((obj) => obj is MultiplyDefinedElement, Mu
ltiplyDefinedElement, element); | 4671 EngineTestCase.assertInstanceOf((obj) => obj is MultiplyDefinedElement, Mu
ltiplyDefinedElement, element); |
| 4670 List<Element> conflictingElements = (element as MultiplyDefinedElement).co
nflictingElements; | 4672 List<Element> conflictingElements = (element as MultiplyDefinedElement).co
nflictingElements; |
| 4671 expect(conflictingElements, hasLength(2)); | 4673 expect(conflictingElements, hasLength(2)); |
| 4672 if (identical(conflictingElements[0], typeB1)) { | 4674 if (identical(conflictingElements[0], typeB1)) { |
| 4673 expect(conflictingElements[1], same(typeB2)); | 4675 expect(conflictingElements[1], same(typeB2)); |
| 4674 } else if (identical(conflictingElements[0], typeB2)) { | 4676 } else if (identical(conflictingElements[0], typeB2)) { |
| 4675 expect(conflictingElements[1], same(typeB1)); | 4677 expect(conflictingElements[1], same(typeB1)); |
| 4676 } else { | 4678 } else { |
| 4677 expect(conflictingElements[0], same(typeB1)); | 4679 expect(conflictingElements[0], same(typeB1)); |
| 4678 } | 4680 } |
| 4679 } | 4681 } |
| 4680 { | 4682 { |
| 4681 GatheringErrorListener errorListener = new GatheringErrorListener(); | 4683 GatheringErrorListener errorListener = new GatheringErrorListener(); |
| 4682 Scope scope = new LibraryImportScope(importingLibrary, errorListener); | 4684 Scope scope = new LibraryImportScope(importingLibrary, errorListener); |
| 4683 Identifier identifier = AstFactory.identifier3(typeNameB); | 4685 Identifier identifier = AstFactory.identifier3(typeNameB); |
| 4684 AstFactory.methodDeclaration(null, AstFactory.typeName3(identifier, []), n
ull, null, AstFactory.identifier3("foo"), null); | 4686 AstFactory.methodDeclaration(null, AstFactory.typeName3(identifier), null,
null, AstFactory.identifier3("foo"), null); |
| 4685 Element element = scope.lookup(identifier, importingLibrary); | 4687 Element element = scope.lookup(identifier, importingLibrary); |
| 4686 errorListener.assertErrorsWithCodes([StaticWarningCode.AMBIGUOUS_IMPORT]); | 4688 errorListener.assertErrorsWithCodes([StaticWarningCode.AMBIGUOUS_IMPORT]); |
| 4687 EngineTestCase.assertInstanceOf((obj) => obj is MultiplyDefinedElement, Mu
ltiplyDefinedElement, element); | 4689 EngineTestCase.assertInstanceOf((obj) => obj is MultiplyDefinedElement, Mu
ltiplyDefinedElement, element); |
| 4688 } | 4690 } |
| 4689 } | 4691 } |
| 4690 | 4692 |
| 4691 void test_creation_empty() { | 4693 void test_creation_empty() { |
| 4692 LibraryElement definingLibrary = createDefaultTestLibrary(); | 4694 LibraryElement definingLibrary = createDefaultTestLibrary(); |
| 4693 GatheringErrorListener errorListener = new GatheringErrorListener(); | 4695 GatheringErrorListener errorListener = new GatheringErrorListener(); |
| 4694 new LibraryImportScope(definingLibrary, errorListener); | 4696 new LibraryImportScope(definingLibrary, errorListener); |
| 4695 } | 4697 } |
| 4696 | 4698 |
| 4697 void test_creation_nonEmpty() { | 4699 void test_creation_nonEmpty() { |
| 4698 AnalysisContext context = new AnalysisContextImpl(); | 4700 AnalysisContext context = new AnalysisContextImpl(); |
| 4699 context.sourceFactory = new SourceFactory([]); | 4701 context.sourceFactory = new SourceFactory([]); |
| 4700 String importedTypeName = "A"; | 4702 String importedTypeName = "A"; |
| 4701 ClassElement importedType = new ClassElementImpl.forNode(AstFactory.identifi
er3(importedTypeName)); | 4703 ClassElement importedType = new ClassElementImpl.forNode(AstFactory.identifi
er3(importedTypeName)); |
| 4702 LibraryElement importedLibrary = createTestLibrary(context, "imported", []); | 4704 LibraryElement importedLibrary = createTestLibrary(context, "imported"); |
| 4703 (importedLibrary.definingCompilationUnit as CompilationUnitElementImpl).type
s = <ClassElement> [importedType]; | 4705 (importedLibrary.definingCompilationUnit as CompilationUnitElementImpl).type
s = <ClassElement> [importedType]; |
| 4704 LibraryElementImpl definingLibrary = createTestLibrary(context, "importing",
[]); | 4706 LibraryElementImpl definingLibrary = createTestLibrary(context, "importing")
; |
| 4705 ImportElementImpl importElement = new ImportElementImpl(0); | 4707 ImportElementImpl importElement = new ImportElementImpl(0); |
| 4706 importElement.importedLibrary = importedLibrary; | 4708 importElement.importedLibrary = importedLibrary; |
| 4707 definingLibrary.imports = <ImportElement> [importElement]; | 4709 definingLibrary.imports = <ImportElement> [importElement]; |
| 4708 GatheringErrorListener errorListener = new GatheringErrorListener(); | 4710 GatheringErrorListener errorListener = new GatheringErrorListener(); |
| 4709 Scope scope = new LibraryImportScope(definingLibrary, errorListener); | 4711 Scope scope = new LibraryImportScope(definingLibrary, errorListener); |
| 4710 expect(scope.lookup(AstFactory.identifier3(importedTypeName), definingLibrar
y), importedType); | 4712 expect(scope.lookup(AstFactory.identifier3(importedTypeName), definingLibrar
y), importedType); |
| 4711 } | 4713 } |
| 4712 | 4714 |
| 4713 void test_getErrorListener() { | 4715 void test_getErrorListener() { |
| 4714 LibraryElement definingLibrary = createDefaultTestLibrary(); | 4716 LibraryElement definingLibrary = createDefaultTestLibrary(); |
| 4715 GatheringErrorListener errorListener = new GatheringErrorListener(); | 4717 GatheringErrorListener errorListener = new GatheringErrorListener(); |
| 4716 LibraryImportScope scope = new LibraryImportScope(definingLibrary, errorList
ener); | 4718 LibraryImportScope scope = new LibraryImportScope(definingLibrary, errorList
ener); |
| 4717 expect(scope.errorListener, errorListener); | 4719 expect(scope.errorListener, errorListener); |
| 4718 } | 4720 } |
| 4719 | 4721 |
| 4720 void test_nonConflictingImports_fromSdk() { | 4722 void test_nonConflictingImports_fromSdk() { |
| 4721 AnalysisContext context = AnalysisContextFactory.contextWithCore(); | 4723 AnalysisContext context = AnalysisContextFactory.contextWithCore(); |
| 4722 String typeName = "List"; | 4724 String typeName = "List"; |
| 4723 ClassElement type = ElementFactory.classElement2(typeName, []); | 4725 ClassElement type = ElementFactory.classElement2(typeName); |
| 4724 LibraryElement importedLibrary = createTestLibrary(context, "lib", []); | 4726 LibraryElement importedLibrary = createTestLibrary(context, "lib"); |
| 4725 (importedLibrary.definingCompilationUnit as CompilationUnitElementImpl).type
s = <ClassElement> [type]; | 4727 (importedLibrary.definingCompilationUnit as CompilationUnitElementImpl).type
s = <ClassElement> [type]; |
| 4726 ImportElementImpl importCore = ElementFactory.importFor(context.getLibraryEl
ement(context.sourceFactory.forUri("dart:core")), null, []); | 4728 ImportElementImpl importCore = ElementFactory.importFor(context.getLibraryEl
ement(context.sourceFactory.forUri("dart:core")), null); |
| 4727 ImportElementImpl importLib = ElementFactory.importFor(importedLibrary, null
, []); | 4729 ImportElementImpl importLib = ElementFactory.importFor(importedLibrary, null
); |
| 4728 LibraryElementImpl importingLibrary = createTestLibrary(context, "importing"
, []); | 4730 LibraryElementImpl importingLibrary = createTestLibrary(context, "importing"
); |
| 4729 importingLibrary.imports = <ImportElement> [importCore, importLib]; | 4731 importingLibrary.imports = <ImportElement> [importCore, importLib]; |
| 4730 GatheringErrorListener errorListener = new GatheringErrorListener(); | 4732 GatheringErrorListener errorListener = new GatheringErrorListener(); |
| 4731 Scope scope = new LibraryImportScope(importingLibrary, errorListener); | 4733 Scope scope = new LibraryImportScope(importingLibrary, errorListener); |
| 4732 expect(scope.lookup(AstFactory.identifier3(typeName), importingLibrary), typ
e); | 4734 expect(scope.lookup(AstFactory.identifier3(typeName), importingLibrary), typ
e); |
| 4733 errorListener.assertErrorsWithCodes([StaticWarningCode.CONFLICTING_DART_IMPO
RT]); | 4735 errorListener.assertErrorsWithCodes([StaticWarningCode.CONFLICTING_DART_IMPO
RT]); |
| 4734 } | 4736 } |
| 4735 | 4737 |
| 4736 void test_nonConflictingImports_sameElement() { | 4738 void test_nonConflictingImports_sameElement() { |
| 4737 AnalysisContext context = new AnalysisContextImpl(); | 4739 AnalysisContext context = new AnalysisContextImpl(); |
| 4738 context.sourceFactory = new SourceFactory([]); | 4740 context.sourceFactory = new SourceFactory([]); |
| 4739 String typeNameA = "A"; | 4741 String typeNameA = "A"; |
| 4740 String typeNameB = "B"; | 4742 String typeNameB = "B"; |
| 4741 ClassElement typeA = ElementFactory.classElement2(typeNameA, []); | 4743 ClassElement typeA = ElementFactory.classElement2(typeNameA); |
| 4742 ClassElement typeB = ElementFactory.classElement2(typeNameB, []); | 4744 ClassElement typeB = ElementFactory.classElement2(typeNameB); |
| 4743 LibraryElement importedLibrary = createTestLibrary(context, "imported", []); | 4745 LibraryElement importedLibrary = createTestLibrary(context, "imported"); |
| 4744 (importedLibrary.definingCompilationUnit as CompilationUnitElementImpl).type
s = <ClassElement> [typeA, typeB]; | 4746 (importedLibrary.definingCompilationUnit as CompilationUnitElementImpl).type
s = <ClassElement> [typeA, typeB]; |
| 4745 ImportElementImpl import1 = ElementFactory.importFor(importedLibrary, null,
[]); | 4747 ImportElementImpl import1 = ElementFactory.importFor(importedLibrary, null); |
| 4746 ImportElementImpl import2 = ElementFactory.importFor(importedLibrary, null,
[]); | 4748 ImportElementImpl import2 = ElementFactory.importFor(importedLibrary, null); |
| 4747 LibraryElementImpl importingLibrary = createTestLibrary(context, "importing"
, []); | 4749 LibraryElementImpl importingLibrary = createTestLibrary(context, "importing"
); |
| 4748 importingLibrary.imports = <ImportElement> [import1, import2]; | 4750 importingLibrary.imports = <ImportElement> [import1, import2]; |
| 4749 GatheringErrorListener errorListener = new GatheringErrorListener(); | 4751 GatheringErrorListener errorListener = new GatheringErrorListener(); |
| 4750 Scope scope = new LibraryImportScope(importingLibrary, errorListener); | 4752 Scope scope = new LibraryImportScope(importingLibrary, errorListener); |
| 4751 expect(scope.lookup(AstFactory.identifier3(typeNameA), importingLibrary), ty
peA); | 4753 expect(scope.lookup(AstFactory.identifier3(typeNameA), importingLibrary), ty
peA); |
| 4752 errorListener.assertNoErrors(); | 4754 errorListener.assertNoErrors(); |
| 4753 expect(scope.lookup(AstFactory.identifier3(typeNameB), importingLibrary), ty
peB); | 4755 expect(scope.lookup(AstFactory.identifier3(typeNameB), importingLibrary), ty
peB); |
| 4754 errorListener.assertNoErrors(); | 4756 errorListener.assertNoErrors(); |
| 4755 } | 4757 } |
| 4756 | 4758 |
| 4757 void test_prefixedAndNonPrefixed() { | 4759 void test_prefixedAndNonPrefixed() { |
| 4758 AnalysisContext context = new AnalysisContextImpl(); | 4760 AnalysisContext context = new AnalysisContextImpl(); |
| 4759 context.sourceFactory = new SourceFactory([]); | 4761 context.sourceFactory = new SourceFactory([]); |
| 4760 String typeName = "C"; | 4762 String typeName = "C"; |
| 4761 String prefixName = "p"; | 4763 String prefixName = "p"; |
| 4762 ClassElement prefixedType = ElementFactory.classElement2(typeName, []); | 4764 ClassElement prefixedType = ElementFactory.classElement2(typeName); |
| 4763 ClassElement nonPrefixedType = ElementFactory.classElement2(typeName, []); | 4765 ClassElement nonPrefixedType = ElementFactory.classElement2(typeName); |
| 4764 LibraryElement prefixedLibrary = createTestLibrary(context, "import.prefixed
", []); | 4766 LibraryElement prefixedLibrary = createTestLibrary(context, "import.prefixed
"); |
| 4765 (prefixedLibrary.definingCompilationUnit as CompilationUnitElementImpl).type
s = <ClassElement> [prefixedType]; | 4767 (prefixedLibrary.definingCompilationUnit as CompilationUnitElementImpl).type
s = <ClassElement> [prefixedType]; |
| 4766 ImportElementImpl prefixedImport = ElementFactory.importFor(prefixedLibrary,
ElementFactory.prefix(prefixName), []); | 4768 ImportElementImpl prefixedImport = ElementFactory.importFor(prefixedLibrary,
ElementFactory.prefix(prefixName)); |
| 4767 LibraryElement nonPrefixedLibrary = createTestLibrary(context, "import.nonPr
efixed", []); | 4769 LibraryElement nonPrefixedLibrary = createTestLibrary(context, "import.nonPr
efixed"); |
| 4768 (nonPrefixedLibrary.definingCompilationUnit as CompilationUnitElementImpl).t
ypes = <ClassElement> [nonPrefixedType]; | 4770 (nonPrefixedLibrary.definingCompilationUnit as CompilationUnitElementImpl).t
ypes = <ClassElement> [nonPrefixedType]; |
| 4769 ImportElementImpl nonPrefixedImport = ElementFactory.importFor(nonPrefixedLi
brary, null, []); | 4771 ImportElementImpl nonPrefixedImport = ElementFactory.importFor(nonPrefixedLi
brary, null); |
| 4770 LibraryElementImpl importingLibrary = createTestLibrary(context, "importing"
, []); | 4772 LibraryElementImpl importingLibrary = createTestLibrary(context, "importing"
); |
| 4771 importingLibrary.imports = <ImportElement> [prefixedImport, nonPrefixedImpor
t]; | 4773 importingLibrary.imports = <ImportElement> [prefixedImport, nonPrefixedImpor
t]; |
| 4772 GatheringErrorListener errorListener = new GatheringErrorListener(); | 4774 GatheringErrorListener errorListener = new GatheringErrorListener(); |
| 4773 Scope scope = new LibraryImportScope(importingLibrary, errorListener); | 4775 Scope scope = new LibraryImportScope(importingLibrary, errorListener); |
| 4774 Element prefixedElement = scope.lookup(AstFactory.identifier5(prefixName, ty
peName), importingLibrary); | 4776 Element prefixedElement = scope.lookup(AstFactory.identifier5(prefixName, ty
peName), importingLibrary); |
| 4775 errorListener.assertNoErrors(); | 4777 errorListener.assertNoErrors(); |
| 4776 expect(prefixedElement, same(prefixedType)); | 4778 expect(prefixedElement, same(prefixedType)); |
| 4777 Element nonPrefixedElement = scope.lookup(AstFactory.identifier3(typeName),
importingLibrary); | 4779 Element nonPrefixedElement = scope.lookup(AstFactory.identifier3(typeName),
importingLibrary); |
| 4778 errorListener.assertNoErrors(); | 4780 errorListener.assertNoErrors(); |
| 4779 expect(nonPrefixedElement, same(nonPrefixedType)); | 4781 expect(nonPrefixedElement, same(nonPrefixedType)); |
| 4780 } | 4782 } |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4870 LibraryElement definingLibrary = createDefaultTestLibrary(); | 4872 LibraryElement definingLibrary = createDefaultTestLibrary(); |
| 4871 GatheringErrorListener errorListener = new GatheringErrorListener(); | 4873 GatheringErrorListener errorListener = new GatheringErrorListener(); |
| 4872 new LibraryScope(definingLibrary, errorListener); | 4874 new LibraryScope(definingLibrary, errorListener); |
| 4873 } | 4875 } |
| 4874 | 4876 |
| 4875 void test_creation_nonEmpty() { | 4877 void test_creation_nonEmpty() { |
| 4876 AnalysisContext context = new AnalysisContextImpl(); | 4878 AnalysisContext context = new AnalysisContextImpl(); |
| 4877 context.sourceFactory = new SourceFactory([]); | 4879 context.sourceFactory = new SourceFactory([]); |
| 4878 String importedTypeName = "A"; | 4880 String importedTypeName = "A"; |
| 4879 ClassElement importedType = new ClassElementImpl.forNode(AstFactory.identifi
er3(importedTypeName)); | 4881 ClassElement importedType = new ClassElementImpl.forNode(AstFactory.identifi
er3(importedTypeName)); |
| 4880 LibraryElement importedLibrary = createTestLibrary(context, "imported", []); | 4882 LibraryElement importedLibrary = createTestLibrary(context, "imported"); |
| 4881 (importedLibrary.definingCompilationUnit as CompilationUnitElementImpl).type
s = <ClassElement> [importedType]; | 4883 (importedLibrary.definingCompilationUnit as CompilationUnitElementImpl).type
s = <ClassElement> [importedType]; |
| 4882 LibraryElementImpl definingLibrary = createTestLibrary(context, "importing",
[]); | 4884 LibraryElementImpl definingLibrary = createTestLibrary(context, "importing")
; |
| 4883 ImportElementImpl importElement = new ImportElementImpl(0); | 4885 ImportElementImpl importElement = new ImportElementImpl(0); |
| 4884 importElement.importedLibrary = importedLibrary; | 4886 importElement.importedLibrary = importedLibrary; |
| 4885 definingLibrary.imports = <ImportElement> [importElement]; | 4887 definingLibrary.imports = <ImportElement> [importElement]; |
| 4886 GatheringErrorListener errorListener = new GatheringErrorListener(); | 4888 GatheringErrorListener errorListener = new GatheringErrorListener(); |
| 4887 Scope scope = new LibraryScope(definingLibrary, errorListener); | 4889 Scope scope = new LibraryScope(definingLibrary, errorListener); |
| 4888 expect(scope.lookup(AstFactory.identifier3(importedTypeName), definingLibrar
y), importedType); | 4890 expect(scope.lookup(AstFactory.identifier3(importedTypeName), definingLibrar
y), importedType); |
| 4889 } | 4891 } |
| 4890 | 4892 |
| 4891 void test_getErrorListener() { | 4893 void test_getErrorListener() { |
| 4892 LibraryElement definingLibrary = createDefaultTestLibrary(); | 4894 LibraryElement definingLibrary = createDefaultTestLibrary(); |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5006 /** | 5008 /** |
| 5007 * The null type. | 5009 * The null type. |
| 5008 */ | 5010 */ |
| 5009 InterfaceType _nullType; | 5011 InterfaceType _nullType; |
| 5010 | 5012 |
| 5011 void setUp() { | 5013 void setUp() { |
| 5012 _nullType = new TestTypeProvider().nullType; | 5014 _nullType = new TestTypeProvider().nullType; |
| 5013 } | 5015 } |
| 5014 | 5016 |
| 5015 void test_MemberMap_copyConstructor() { | 5017 void test_MemberMap_copyConstructor() { |
| 5016 MethodElement m1 = ElementFactory.methodElement("m1", _nullType, []); | 5018 MethodElement m1 = ElementFactory.methodElement("m1", _nullType); |
| 5017 MethodElement m2 = ElementFactory.methodElement("m2", _nullType, []); | 5019 MethodElement m2 = ElementFactory.methodElement("m2", _nullType); |
| 5018 MethodElement m3 = ElementFactory.methodElement("m3", _nullType, []); | 5020 MethodElement m3 = ElementFactory.methodElement("m3", _nullType); |
| 5019 MemberMap map = new MemberMap(); | 5021 MemberMap map = new MemberMap(); |
| 5020 map.put(m1.name, m1); | 5022 map.put(m1.name, m1); |
| 5021 map.put(m2.name, m2); | 5023 map.put(m2.name, m2); |
| 5022 map.put(m3.name, m3); | 5024 map.put(m3.name, m3); |
| 5023 MemberMap copy = new MemberMap.con2(map); | 5025 MemberMap copy = new MemberMap.con2(map); |
| 5024 expect(copy.size, map.size); | 5026 expect(copy.size, map.size); |
| 5025 expect(copy.get(m1.name), m1); | 5027 expect(copy.get(m1.name), m1); |
| 5026 expect(copy.get(m2.name), m2); | 5028 expect(copy.get(m2.name), m2); |
| 5027 expect(copy.get(m3.name), m3); | 5029 expect(copy.get(m3.name), m3); |
| 5028 } | 5030 } |
| 5029 | 5031 |
| 5030 void test_MemberMap_override() { | 5032 void test_MemberMap_override() { |
| 5031 MethodElement m1 = ElementFactory.methodElement("m", _nullType, []); | 5033 MethodElement m1 = ElementFactory.methodElement("m", _nullType); |
| 5032 MethodElement m2 = ElementFactory.methodElement("m", _nullType, []); | 5034 MethodElement m2 = ElementFactory.methodElement("m", _nullType); |
| 5033 MemberMap map = new MemberMap(); | 5035 MemberMap map = new MemberMap(); |
| 5034 map.put(m1.name, m1); | 5036 map.put(m1.name, m1); |
| 5035 map.put(m2.name, m2); | 5037 map.put(m2.name, m2); |
| 5036 expect(map.size, 1); | 5038 expect(map.size, 1); |
| 5037 expect(map.get("m"), m2); | 5039 expect(map.get("m"), m2); |
| 5038 } | 5040 } |
| 5039 | 5041 |
| 5040 void test_MemberMap_put() { | 5042 void test_MemberMap_put() { |
| 5041 MethodElement m1 = ElementFactory.methodElement("m1", _nullType, []); | 5043 MethodElement m1 = ElementFactory.methodElement("m1", _nullType); |
| 5042 MemberMap map = new MemberMap(); | 5044 MemberMap map = new MemberMap(); |
| 5043 expect(map.size, 0); | 5045 expect(map.size, 0); |
| 5044 map.put(m1.name, m1); | 5046 map.put(m1.name, m1); |
| 5045 expect(map.size, 1); | 5047 expect(map.size, 1); |
| 5046 expect(map.get("m1"), m1); | 5048 expect(map.get("m1"), m1); |
| 5047 } | 5049 } |
| 5048 } | 5050 } |
| 5049 | 5051 |
| 5050 class NonHintCodeTest extends ResolverTestCase { | 5052 class NonHintCodeTest extends ResolverTestCase { |
| 5051 void test_deadCode_deadBlock_conditionalElse_debugConst() { | 5053 void test_deadCode_deadBlock_conditionalElse_debugConst() { |
| (...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5265 } | 5267 } |
| 5266 | 5268 |
| 5267 void test_importDeferredLibraryWithLoadFunction() { | 5269 void test_importDeferredLibraryWithLoadFunction() { |
| 5268 resolveWithAndWithoutExperimental(<String> [ | 5270 resolveWithAndWithoutExperimental(<String> [ |
| 5269 r''' | 5271 r''' |
| 5270 library lib1; | 5272 library lib1; |
| 5271 f() {}''', | 5273 f() {}''', |
| 5272 r''' | 5274 r''' |
| 5273 library root; | 5275 library root; |
| 5274 import 'lib1.dart' deferred as lib1; | 5276 import 'lib1.dart' deferred as lib1; |
| 5275 main() { lib1.f(); }'''], <ErrorCode> [ParserErrorCode.DEFERRED_IMPORTS_NOT_SUPP
ORTED], <ErrorCode> []); | 5277 main() { lib1.f(); }'''], <ErrorCode>[ParserErrorCode.DEFERRED_IMPORTS_NOT_SUPPO
RTED], ErrorCode.EMPTY_LIST); |
| 5276 } | 5278 } |
| 5277 | 5279 |
| 5278 void test_issue20904BuggyTypePromotionAtIfJoin_1() { | 5280 void test_issue20904BuggyTypePromotionAtIfJoin_1() { |
| 5279 // https://code.google.com/p/dart/issues/detail?id=20904 | 5281 // https://code.google.com/p/dart/issues/detail?id=20904 |
| 5280 Source source = addSource(r''' | 5282 Source source = addSource(r''' |
| 5281 f(var message, var dynamic_) { | 5283 f(var message, var dynamic_) { |
| 5282 if (message is Function) { | 5284 if (message is Function) { |
| 5283 message = dynamic_; | 5285 message = dynamic_; |
| 5284 } | 5286 } |
| 5285 int s = message; | 5287 int s = message; |
| (...skipping 508 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5794 Source source = addSource(r''' | 5796 Source source = addSource(r''' |
| 5795 library L; | 5797 library L; |
| 5796 @A() | 5798 @A() |
| 5797 import 'lib1.dart';'''); | 5799 import 'lib1.dart';'''); |
| 5798 Source source2 = addNamedSource("/lib1.dart", r''' | 5800 Source source2 = addNamedSource("/lib1.dart", r''' |
| 5799 library lib1; | 5801 library lib1; |
| 5800 class A { | 5802 class A { |
| 5801 const A() {} | 5803 const A() {} |
| 5802 }'''); | 5804 }'''); |
| 5803 resolve(source); | 5805 resolve(source); |
| 5804 assertErrors(source, []); | 5806 assertErrors(source); |
| 5805 verify([source, source2]); | 5807 verify([source, source2]); |
| 5806 } | 5808 } |
| 5807 | 5809 |
| 5808 void test_unusedImport_as_equalPrefixes() { | 5810 void test_unusedImport_as_equalPrefixes() { |
| 5809 // 18818 | 5811 // 18818 |
| 5810 Source source = addSource(r''' | 5812 Source source = addSource(r''' |
| 5811 library L; | 5813 library L; |
| 5812 import 'lib1.dart' as one; | 5814 import 'lib1.dart' as one; |
| 5813 import 'lib2.dart' as one; | 5815 import 'lib2.dart' as one; |
| 5814 one.A a; | 5816 one.A a; |
| 5815 one.B b;'''); | 5817 one.B b;'''); |
| 5816 Source source2 = addNamedSource("/lib1.dart", r''' | 5818 Source source2 = addNamedSource("/lib1.dart", r''' |
| 5817 library lib1; | 5819 library lib1; |
| 5818 class A {}'''); | 5820 class A {}'''); |
| 5819 Source source3 = addNamedSource("/lib2.dart", r''' | 5821 Source source3 = addNamedSource("/lib2.dart", r''' |
| 5820 library lib2; | 5822 library lib2; |
| 5821 class B {}'''); | 5823 class B {}'''); |
| 5822 resolve(source); | 5824 resolve(source); |
| 5823 assertErrors(source, []); | 5825 assertErrors(source); |
| 5824 assertNoErrors(source2); | 5826 assertNoErrors(source2); |
| 5825 assertNoErrors(source3); | 5827 assertNoErrors(source3); |
| 5826 verify([source, source2, source3]); | 5828 verify([source, source2, source3]); |
| 5827 } | 5829 } |
| 5828 | 5830 |
| 5829 void test_unusedImport_core_library() { | 5831 void test_unusedImport_core_library() { |
| 5830 Source source = addSource(r''' | 5832 Source source = addSource(r''' |
| 5831 library L; | 5833 library L; |
| 5832 import 'dart:core';'''); | 5834 import 'dart:core';'''); |
| 5833 resolve(source); | 5835 resolve(source); |
| (...skipping 534 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6368 * Assert that the number of errors reported against the given source matches
the number of errors | 6370 * Assert that the number of errors reported against the given source matches
the number of errors |
| 6369 * that are given and that they have the expected error codes. The order in wh
ich the errors were | 6371 * that are given and that they have the expected error codes. The order in wh
ich the errors were |
| 6370 * gathered is ignored. | 6372 * gathered is ignored. |
| 6371 * | 6373 * |
| 6372 * @param source the source against which the errors should have been reported | 6374 * @param source the source against which the errors should have been reported |
| 6373 * @param expectedErrorCodes the error codes of the errors that should have be
en reported | 6375 * @param expectedErrorCodes the error codes of the errors that should have be
en reported |
| 6374 * @throws AnalysisException if the reported errors could not be computed | 6376 * @throws AnalysisException if the reported errors could not be computed |
| 6375 * @throws AssertionFailedError if a different number of errors have been repo
rted than were | 6377 * @throws AssertionFailedError if a different number of errors have been repo
rted than were |
| 6376 * expected | 6378 * expected |
| 6377 */ | 6379 */ |
| 6378 void assertErrors(Source source, List<ErrorCode> expectedErrorCodes) { | 6380 void assertErrors(Source source, [List<ErrorCode> expectedErrorCodes = ErrorCo
de.EMPTY_LIST]) { |
| 6379 GatheringErrorListener errorListener = new GatheringErrorListener(); | 6381 GatheringErrorListener errorListener = new GatheringErrorListener(); |
| 6380 for (AnalysisError error in analysisContext2.computeErrors(source)) { | 6382 for (AnalysisError error in analysisContext2.computeErrors(source)) { |
| 6381 if (error.errorCode == HintCode.UNUSED_LOCAL_VARIABLE && | 6383 if (error.errorCode == HintCode.UNUSED_LOCAL_VARIABLE && |
| 6382 !enableUnusedLocalVariable) { | 6384 !enableUnusedLocalVariable) { |
| 6383 continue; | 6385 continue; |
| 6384 } | 6386 } |
| 6385 errorListener.onError(error); | 6387 errorListener.onError(error); |
| 6386 } | 6388 } |
| 6387 errorListener.assertErrorsWithCodes(expectedErrorCodes); | 6389 errorListener.assertErrorsWithCodes(expectedErrorCodes); |
| 6388 } | 6390 } |
| 6389 | 6391 |
| 6390 /** | 6392 /** |
| 6391 * Assert that no errors have been reported against the given source. | 6393 * Assert that no errors have been reported against the given source. |
| 6392 * | 6394 * |
| 6393 * @param source the source against which no errors should have been reported | 6395 * @param source the source against which no errors should have been reported |
| 6394 * @throws AnalysisException if the reported errors could not be computed | 6396 * @throws AnalysisException if the reported errors could not be computed |
| 6395 * @throws AssertionFailedError if any errors have been reported | 6397 * @throws AssertionFailedError if any errors have been reported |
| 6396 */ | 6398 */ |
| 6397 void assertNoErrors(Source source) { | 6399 void assertNoErrors(Source source) { |
| 6398 assertErrors(source, []); | 6400 assertErrors(source); |
| 6399 } | 6401 } |
| 6400 | 6402 |
| 6401 /** | 6403 /** |
| 6402 * Cache the source file content in the source factory but don't add the sourc
e to the analysis | 6404 * Cache the source file content in the source factory but don't add the sourc
e to the analysis |
| 6403 * context. The file path should be absolute. | 6405 * context. The file path should be absolute. |
| 6404 * | 6406 * |
| 6405 * @param filePath the path of the file being cached | 6407 * @param filePath the path of the file being cached |
| 6406 * @param contents the contents to be returned by the content provider for the
specified file | 6408 * @param contents the contents to be returned by the content provider for the
specified file |
| 6407 * @return the source object representing the cached file | 6409 * @return the source object representing the cached file |
| 6408 */ | 6410 */ |
| 6409 Source cacheSource(String filePath, String contents) { | 6411 Source cacheSource(String filePath, String contents) { |
| 6410 Source source = new FileBasedSource.con1(FileUtilities2.createFile(filePath)
); | 6412 Source source = new FileBasedSource.con1(FileUtilities2.createFile(filePath)
); |
| 6411 analysisContext2.setContents(source, contents); | 6413 analysisContext2.setContents(source, contents); |
| 6412 return source; | 6414 return source; |
| 6413 } | 6415 } |
| 6414 | 6416 |
| 6415 /** | 6417 /** |
| 6416 * Create a library element that represents a library named `"test"` containin
g a single | 6418 * Create a library element that represents a library named `"test"` containin
g a single |
| 6417 * empty compilation unit. | 6419 * empty compilation unit. |
| 6418 * | 6420 * |
| 6419 * @return the library element that was created | 6421 * @return the library element that was created |
| 6420 */ | 6422 */ |
| 6421 LibraryElementImpl createDefaultTestLibrary() => createTestLibrary(new Analysi
sContextImpl(), "test", []); | 6423 LibraryElementImpl createDefaultTestLibrary() => createTestLibrary(new Analysi
sContextImpl(), "test"); |
| 6422 | 6424 |
| 6423 /** | 6425 /** |
| 6424 * Create a library element that represents a library with the given name cont
aining a single | 6426 * Create a library element that represents a library with the given name cont
aining a single |
| 6425 * empty compilation unit. | 6427 * empty compilation unit. |
| 6426 * | 6428 * |
| 6427 * @param libraryName the name of the library to be created | 6429 * @param libraryName the name of the library to be created |
| 6428 * @return the library element that was created | 6430 * @return the library element that was created |
| 6429 */ | 6431 */ |
| 6430 LibraryElementImpl createTestLibrary(AnalysisContext context, String libraryNa
me, List<String> typeNames) { | 6432 LibraryElementImpl createTestLibrary(AnalysisContext context, String libraryNa
me, [List<String> typeNames]) { |
| 6431 int count = typeNames.length; | 6433 List<CompilationUnitElement> sourcedCompilationUnits; |
| 6432 List<CompilationUnitElementImpl> sourcedCompilationUnits = new List<Compilat
ionUnitElementImpl>(count); | 6434 if (typeNames == null) { |
| 6433 for (int i = 0; i < count; i++) { | 6435 sourcedCompilationUnits = CompilationUnitElementImpl.EMPTY_ARRAY; |
| 6434 String typeName = typeNames[i]; | 6436 } else { |
| 6435 ClassElementImpl type = new ClassElementImpl.forNode(AstFactory.identifier
3(typeName)); | 6437 int count = typeNames.length; |
| 6436 String fileName = "$typeName.dart"; | 6438 sourcedCompilationUnits = new List<CompilationUnitElement>(count); |
| 6437 CompilationUnitElementImpl compilationUnit = new CompilationUnitElementImp
l(fileName); | 6439 for (int i = 0; i < count; i++) { |
| 6438 compilationUnit.source = _createNamedSource(fileName); | 6440 String typeName = typeNames[i]; |
| 6439 compilationUnit.types = <ClassElement> [type]; | 6441 ClassElementImpl type = new ClassElementImpl.forNode(AstFactory.identifi
er3(typeName)); |
| 6440 sourcedCompilationUnits[i] = compilationUnit; | 6442 String fileName = "$typeName.dart"; |
| 6443 CompilationUnitElementImpl compilationUnit = new CompilationUnitElementI
mpl(fileName); |
| 6444 compilationUnit.source = _createNamedSource(fileName); |
| 6445 compilationUnit.types = <ClassElement> [type]; |
| 6446 sourcedCompilationUnits[i] = compilationUnit; |
| 6447 } |
| 6441 } | 6448 } |
| 6442 String fileName = "$libraryName.dart"; | 6449 String fileName = "$libraryName.dart"; |
| 6443 CompilationUnitElementImpl compilationUnit = new CompilationUnitElementImpl(
fileName); | 6450 CompilationUnitElementImpl compilationUnit = new CompilationUnitElementImpl(
fileName); |
| 6444 compilationUnit.source = _createNamedSource(fileName); | 6451 compilationUnit.source = _createNamedSource(fileName); |
| 6445 LibraryElementImpl library = new LibraryElementImpl.forNode(context, AstFact
ory.libraryIdentifier2([libraryName])); | 6452 LibraryElementImpl library = new LibraryElementImpl.forNode(context, AstFact
ory.libraryIdentifier2([libraryName])); |
| 6446 library.definingCompilationUnit = compilationUnit; | 6453 library.definingCompilationUnit = compilationUnit; |
| 6447 library.parts = sourcedCompilationUnits; | 6454 library.parts = sourcedCompilationUnits; |
| 6448 return library; | 6455 return library; |
| 6449 } | 6456 } |
| 6450 | 6457 |
| (...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6700 ScopeBuilder.scopeFor(AstFactory.compilationUnit(), listener); | 6707 ScopeBuilder.scopeFor(AstFactory.compilationUnit(), listener); |
| 6701 fail("Expected AnalysisException"); | 6708 fail("Expected AnalysisException"); |
| 6702 } on AnalysisException catch (exception) { | 6709 } on AnalysisException catch (exception) { |
| 6703 // Expected | 6710 // Expected |
| 6704 } | 6711 } |
| 6705 } | 6712 } |
| 6706 | 6713 |
| 6707 ClassDeclaration _createResolvedClassDeclaration() { | 6714 ClassDeclaration _createResolvedClassDeclaration() { |
| 6708 CompilationUnit unit = _createResolvedCompilationUnit(); | 6715 CompilationUnit unit = _createResolvedCompilationUnit(); |
| 6709 String className = "C"; | 6716 String className = "C"; |
| 6710 ClassDeclaration classNode = AstFactory.classDeclaration(null, className, As
tFactory.typeParameterList([]), null, null, null, []); | 6717 ClassDeclaration classNode = AstFactory.classDeclaration(null, className, As
tFactory.typeParameterList(), null, null, null); |
| 6711 unit.declarations.add(classNode); | 6718 unit.declarations.add(classNode); |
| 6712 ClassElement classElement = ElementFactory.classElement2(className, []); | 6719 ClassElement classElement = ElementFactory.classElement2(className); |
| 6713 classNode.name.staticElement = classElement; | 6720 classNode.name.staticElement = classElement; |
| 6714 (unit.element as CompilationUnitElementImpl).types = <ClassElement> [classEl
ement]; | 6721 (unit.element as CompilationUnitElementImpl).types = <ClassElement> [classEl
ement]; |
| 6715 return classNode; | 6722 return classNode; |
| 6716 } | 6723 } |
| 6717 | 6724 |
| 6718 ClassTypeAlias _createResolvedClassTypeAlias() { | 6725 ClassTypeAlias _createResolvedClassTypeAlias() { |
| 6719 CompilationUnit unit = _createResolvedCompilationUnit(); | 6726 CompilationUnit unit = _createResolvedCompilationUnit(); |
| 6720 String className = "C"; | 6727 String className = "C"; |
| 6721 ClassTypeAlias classNode = AstFactory.classTypeAlias(className, AstFactory.t
ypeParameterList([]), null, null, null, null); | 6728 ClassTypeAlias classNode = AstFactory.classTypeAlias(className, AstFactory.t
ypeParameterList(), null, null, null, null); |
| 6722 unit.declarations.add(classNode); | 6729 unit.declarations.add(classNode); |
| 6723 ClassElement classElement = ElementFactory.classElement2(className, []); | 6730 ClassElement classElement = ElementFactory.classElement2(className); |
| 6724 classNode.name.staticElement = classElement; | 6731 classNode.name.staticElement = classElement; |
| 6725 (unit.element as CompilationUnitElementImpl).types = <ClassElement> [classEl
ement]; | 6732 (unit.element as CompilationUnitElementImpl).types = <ClassElement> [classEl
ement]; |
| 6726 return classNode; | 6733 return classNode; |
| 6727 } | 6734 } |
| 6728 | 6735 |
| 6729 CompilationUnit _createResolvedCompilationUnit() { | 6736 CompilationUnit _createResolvedCompilationUnit() { |
| 6730 CompilationUnit unit = AstFactory.compilationUnit(); | 6737 CompilationUnit unit = AstFactory.compilationUnit(); |
| 6731 LibraryElementImpl library = ElementFactory.library(AnalysisContextFactory.c
ontextWithCore(), "lib"); | 6738 LibraryElementImpl library = ElementFactory.library(AnalysisContextFactory.c
ontextWithCore(), "lib"); |
| 6732 unit.element = library.definingCompilationUnit; | 6739 unit.element = library.definingCompilationUnit; |
| 6733 return unit; | 6740 return unit; |
| 6734 } | 6741 } |
| 6735 | 6742 |
| 6736 ConstructorDeclaration _createResolvedConstructorDeclaration() { | 6743 ConstructorDeclaration _createResolvedConstructorDeclaration() { |
| 6737 ClassDeclaration classNode = _createResolvedClassDeclaration(); | 6744 ClassDeclaration classNode = _createResolvedClassDeclaration(); |
| 6738 String constructorName = "f"; | 6745 String constructorName = "f"; |
| 6739 ConstructorDeclaration constructorNode = AstFactory.constructorDeclaration(A
stFactory.identifier3(constructorName), null, AstFactory.formalParameterList([])
, null); | 6746 ConstructorDeclaration constructorNode = AstFactory.constructorDeclaration(A
stFactory.identifier3(constructorName), null, AstFactory.formalParameterList(),
null); |
| 6740 classNode.members.add(constructorNode); | 6747 classNode.members.add(constructorNode); |
| 6741 ConstructorElement constructorElement = ElementFactory.constructorElement2(c
lassNode.element, null, []); | 6748 ConstructorElement constructorElement = ElementFactory.constructorElement2(c
lassNode.element, null); |
| 6742 constructorNode.element = constructorElement; | 6749 constructorNode.element = constructorElement; |
| 6743 (classNode.element as ClassElementImpl).constructors = <ConstructorElement>
[constructorElement]; | 6750 (classNode.element as ClassElementImpl).constructors = <ConstructorElement>
[constructorElement]; |
| 6744 return constructorNode; | 6751 return constructorNode; |
| 6745 } | 6752 } |
| 6746 | 6753 |
| 6747 FunctionDeclaration _createResolvedFunctionDeclaration() { | 6754 FunctionDeclaration _createResolvedFunctionDeclaration() { |
| 6748 CompilationUnit unit = _createResolvedCompilationUnit(); | 6755 CompilationUnit unit = _createResolvedCompilationUnit(); |
| 6749 String functionName = "f"; | 6756 String functionName = "f"; |
| 6750 FunctionDeclaration functionNode = AstFactory.functionDeclaration(null, null
, functionName, AstFactory.functionExpression()); | 6757 FunctionDeclaration functionNode = AstFactory.functionDeclaration(null, null
, functionName, AstFactory.functionExpression()); |
| 6751 unit.declarations.add(functionNode); | 6758 unit.declarations.add(functionNode); |
| 6752 FunctionElement functionElement = ElementFactory.functionElement(functionNam
e); | 6759 FunctionElement functionElement = ElementFactory.functionElement(functionNam
e); |
| 6753 functionNode.name.staticElement = functionElement; | 6760 functionNode.name.staticElement = functionElement; |
| 6754 (unit.element as CompilationUnitElementImpl).functions = <FunctionElement> [
functionElement]; | 6761 (unit.element as CompilationUnitElementImpl).functions = <FunctionElement> [
functionElement]; |
| 6755 return functionNode; | 6762 return functionNode; |
| 6756 } | 6763 } |
| 6757 | 6764 |
| 6758 FunctionTypeAlias _createResolvedFunctionTypeAlias() { | 6765 FunctionTypeAlias _createResolvedFunctionTypeAlias() { |
| 6759 CompilationUnit unit = _createResolvedCompilationUnit(); | 6766 CompilationUnit unit = _createResolvedCompilationUnit(); |
| 6760 FunctionTypeAlias aliasNode = AstFactory.typeAlias(AstFactory.typeName4("A",
[]), "F", AstFactory.typeParameterList([]), AstFactory.formalParameterList([]))
; | 6767 FunctionTypeAlias aliasNode = AstFactory.typeAlias(AstFactory.typeName4("A")
, "F", AstFactory.typeParameterList(), AstFactory.formalParameterList()); |
| 6761 unit.declarations.add(aliasNode); | 6768 unit.declarations.add(aliasNode); |
| 6762 SimpleIdentifier aliasName = aliasNode.name; | 6769 SimpleIdentifier aliasName = aliasNode.name; |
| 6763 FunctionTypeAliasElement aliasElement = new FunctionTypeAliasElementImpl.for
Node(aliasName); | 6770 FunctionTypeAliasElement aliasElement = new FunctionTypeAliasElementImpl.for
Node(aliasName); |
| 6764 aliasName.staticElement = aliasElement; | 6771 aliasName.staticElement = aliasElement; |
| 6765 (unit.element as CompilationUnitElementImpl).typeAliases = <FunctionTypeAlia
sElement> [aliasElement]; | 6772 (unit.element as CompilationUnitElementImpl).typeAliases = <FunctionTypeAlia
sElement> [aliasElement]; |
| 6766 return aliasNode; | 6773 return aliasNode; |
| 6767 } | 6774 } |
| 6768 | 6775 |
| 6769 MethodDeclaration _createResolvedMethodDeclaration() { | 6776 MethodDeclaration _createResolvedMethodDeclaration() { |
| 6770 ClassDeclaration classNode = _createResolvedClassDeclaration(); | 6777 ClassDeclaration classNode = _createResolvedClassDeclaration(); |
| 6771 String methodName = "f"; | 6778 String methodName = "f"; |
| 6772 MethodDeclaration methodNode = AstFactory.methodDeclaration(null, null, null
, null, AstFactory.identifier3(methodName), AstFactory.formalParameterList([])); | 6779 MethodDeclaration methodNode = AstFactory.methodDeclaration(null, null, null
, null, AstFactory.identifier3(methodName), AstFactory.formalParameterList()); |
| 6773 classNode.members.add(methodNode); | 6780 classNode.members.add(methodNode); |
| 6774 MethodElement methodElement = ElementFactory.methodElement(methodName, null,
[]); | 6781 MethodElement methodElement = ElementFactory.methodElement(methodName, null)
; |
| 6775 methodNode.name.staticElement = methodElement; | 6782 methodNode.name.staticElement = methodElement; |
| 6776 (classNode.element as ClassElementImpl).methods = <MethodElement> [methodEle
ment]; | 6783 (classNode.element as ClassElementImpl).methods = <MethodElement> [methodEle
ment]; |
| 6777 return methodNode; | 6784 return methodNode; |
| 6778 } | 6785 } |
| 6779 } | 6786 } |
| 6780 | 6787 |
| 6781 class ScopeTest extends ResolverTestCase { | 6788 class ScopeTest extends ResolverTestCase { |
| 6782 void test_define_duplicate() { | 6789 void test_define_duplicate() { |
| 6783 GatheringErrorListener errorListener = new GatheringErrorListener(); | 6790 GatheringErrorListener errorListener = new GatheringErrorListener(); |
| 6784 ScopeTest_TestScope scope = new ScopeTest_TestScope(errorListener); | 6791 ScopeTest_TestScope scope = new ScopeTest_TestScope(errorListener); |
| (...skipping 1145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7930 void test_visitAdjacentStrings() { | 7937 void test_visitAdjacentStrings() { |
| 7931 // "a" "b" | 7938 // "a" "b" |
| 7932 Expression node = AstFactory.adjacentStrings([_resolvedString("a"), _resolve
dString("b")]); | 7939 Expression node = AstFactory.adjacentStrings([_resolvedString("a"), _resolve
dString("b")]); |
| 7933 expect(_analyze(node), same(_typeProvider.stringType)); | 7940 expect(_analyze(node), same(_typeProvider.stringType)); |
| 7934 _listener.assertNoErrors(); | 7941 _listener.assertNoErrors(); |
| 7935 } | 7942 } |
| 7936 | 7943 |
| 7937 void test_visitAsExpression() { | 7944 void test_visitAsExpression() { |
| 7938 // class A { ... this as B ... } | 7945 // class A { ... this as B ... } |
| 7939 // class B extends A {} | 7946 // class B extends A {} |
| 7940 ClassElement superclass = ElementFactory.classElement2("A", []); | 7947 ClassElement superclass = ElementFactory.classElement2("A"); |
| 7941 InterfaceType superclassType = superclass.type; | 7948 InterfaceType superclassType = superclass.type; |
| 7942 ClassElement subclass = ElementFactory.classElement("B", superclassType, [])
; | 7949 ClassElement subclass = ElementFactory.classElement("B", superclassType); |
| 7943 Expression node = AstFactory.asExpression(AstFactory.thisExpression(), AstFa
ctory.typeName(subclass, [])); | 7950 Expression node = AstFactory.asExpression(AstFactory.thisExpression(), AstFa
ctory.typeName(subclass)); |
| 7944 expect(_analyze3(node, superclassType), same(subclass.type)); | 7951 expect(_analyze3(node, superclassType), same(subclass.type)); |
| 7945 _listener.assertNoErrors(); | 7952 _listener.assertNoErrors(); |
| 7946 } | 7953 } |
| 7947 | 7954 |
| 7948 void test_visitAssignmentExpression_compound() { | 7955 void test_visitAssignmentExpression_compound() { |
| 7949 // i += 1 | 7956 // i += 1 |
| 7950 InterfaceType numType = _typeProvider.numType; | 7957 InterfaceType numType = _typeProvider.numType; |
| 7951 SimpleIdentifier identifier = _resolvedVariable(_typeProvider.intType, "i"); | 7958 SimpleIdentifier identifier = _resolvedVariable(_typeProvider.intType, "i"); |
| 7952 AssignmentExpression node = AstFactory.assignmentExpression(identifier, Toke
nType.PLUS_EQ, _resolvedInteger(1)); | 7959 AssignmentExpression node = AstFactory.assignmentExpression(identifier, Toke
nType.PLUS_EQ, _resolvedInteger(1)); |
| 7953 MethodElement plusMethod = getMethod(numType, "+"); | 7960 MethodElement plusMethod = getMethod(numType, "+"); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8014 node.staticElement = getMethod(_typeProvider.numType, "/"); | 8021 node.staticElement = getMethod(_typeProvider.numType, "/"); |
| 8015 expect(_analyze(node), same(_typeProvider.doubleType)); | 8022 expect(_analyze(node), same(_typeProvider.doubleType)); |
| 8016 _listener.assertNoErrors(); | 8023 _listener.assertNoErrors(); |
| 8017 } | 8024 } |
| 8018 | 8025 |
| 8019 void test_visitBinaryExpression_star_notSpecial() { | 8026 void test_visitBinaryExpression_star_notSpecial() { |
| 8020 // class A { | 8027 // class A { |
| 8021 // A operator *(double value); | 8028 // A operator *(double value); |
| 8022 // } | 8029 // } |
| 8023 // (a as A) * 2.0 | 8030 // (a as A) * 2.0 |
| 8024 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 8031 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 8025 InterfaceType typeA = classA.type; | 8032 InterfaceType typeA = classA.type; |
| 8026 MethodElement operator = ElementFactory.methodElement("*", typeA, [_typeProv
ider.doubleType]); | 8033 MethodElement operator = ElementFactory.methodElement("*", typeA, [_typeProv
ider.doubleType]); |
| 8027 classA.methods = <MethodElement> [operator]; | 8034 classA.methods = <MethodElement> [operator]; |
| 8028 BinaryExpression node = AstFactory.binaryExpression(AstFactory.asExpression(
AstFactory.identifier3("a"), AstFactory.typeName(classA, [])), TokenType.PLUS, _
resolvedDouble(2.0)); | 8035 BinaryExpression node = AstFactory.binaryExpression(AstFactory.asExpression(
AstFactory.identifier3("a"), AstFactory.typeName(classA)), TokenType.PLUS, _reso
lvedDouble(2.0)); |
| 8029 node.staticElement = operator; | 8036 node.staticElement = operator; |
| 8030 expect(_analyze(node), same(typeA)); | 8037 expect(_analyze(node), same(typeA)); |
| 8031 _listener.assertNoErrors(); | 8038 _listener.assertNoErrors(); |
| 8032 } | 8039 } |
| 8033 | 8040 |
| 8034 void test_visitBinaryExpression_starID() { | 8041 void test_visitBinaryExpression_starID() { |
| 8035 // 1 * 2.0 | 8042 // 1 * 2.0 |
| 8036 BinaryExpression node = AstFactory.binaryExpression(_resolvedInteger(1), Tok
enType.PLUS, _resolvedDouble(2.0)); | 8043 BinaryExpression node = AstFactory.binaryExpression(_resolvedInteger(1), Tok
enType.PLUS, _resolvedDouble(2.0)); |
| 8037 node.staticElement = getMethod(_typeProvider.numType, "*"); | 8044 node.staticElement = getMethod(_typeProvider.numType, "*"); |
| 8038 expect(_analyze(node), same(_typeProvider.doubleType)); | 8045 expect(_analyze(node), same(_typeProvider.doubleType)); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8081 _listener.assertNoErrors(); | 8088 _listener.assertNoErrors(); |
| 8082 } | 8089 } |
| 8083 | 8090 |
| 8084 void test_visitFunctionExpression_named_block() { | 8091 void test_visitFunctionExpression_named_block() { |
| 8085 // ({p1 : 0, p2 : 0}) {} | 8092 // ({p1 : 0, p2 : 0}) {} |
| 8086 DartType dynamicType = _typeProvider.dynamicType; | 8093 DartType dynamicType = _typeProvider.dynamicType; |
| 8087 FormalParameter p1 = AstFactory.namedFormalParameter(AstFactory.simpleFormal
Parameter3("p1"), _resolvedInteger(0)); | 8094 FormalParameter p1 = AstFactory.namedFormalParameter(AstFactory.simpleFormal
Parameter3("p1"), _resolvedInteger(0)); |
| 8088 _setType(p1, dynamicType); | 8095 _setType(p1, dynamicType); |
| 8089 FormalParameter p2 = AstFactory.namedFormalParameter(AstFactory.simpleFormal
Parameter3("p2"), _resolvedInteger(0)); | 8096 FormalParameter p2 = AstFactory.namedFormalParameter(AstFactory.simpleFormal
Parameter3("p2"), _resolvedInteger(0)); |
| 8090 _setType(p2, dynamicType); | 8097 _setType(p2, dynamicType); |
| 8091 FunctionExpression node = _resolvedFunctionExpression(AstFactory.formalParam
eterList([p1, p2]), AstFactory.blockFunctionBody2([])); | 8098 FunctionExpression node = _resolvedFunctionExpression(AstFactory.formalParam
eterList([p1, p2]), AstFactory.blockFunctionBody2()); |
| 8092 _analyze5(p1); | 8099 _analyze5(p1); |
| 8093 _analyze5(p2); | 8100 _analyze5(p2); |
| 8094 DartType resultType = _analyze(node); | 8101 DartType resultType = _analyze(node); |
| 8095 Map<String, DartType> expectedNamedTypes = new HashMap<String, DartType>(); | 8102 Map<String, DartType> expectedNamedTypes = new HashMap<String, DartType>(); |
| 8096 expectedNamedTypes["p1"] = dynamicType; | 8103 expectedNamedTypes["p1"] = dynamicType; |
| 8097 expectedNamedTypes["p2"] = dynamicType; | 8104 expectedNamedTypes["p2"] = dynamicType; |
| 8098 _assertFunctionType(dynamicType, null, null, expectedNamedTypes, resultType)
; | 8105 _assertFunctionType(dynamicType, null, null, expectedNamedTypes, resultType)
; |
| 8099 _listener.assertNoErrors(); | 8106 _listener.assertNoErrors(); |
| 8100 } | 8107 } |
| 8101 | 8108 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 8113 _listener.assertNoErrors(); | 8120 _listener.assertNoErrors(); |
| 8114 } | 8121 } |
| 8115 | 8122 |
| 8116 void test_visitFunctionExpression_normal_block() { | 8123 void test_visitFunctionExpression_normal_block() { |
| 8117 // (p1, p2) {} | 8124 // (p1, p2) {} |
| 8118 DartType dynamicType = _typeProvider.dynamicType; | 8125 DartType dynamicType = _typeProvider.dynamicType; |
| 8119 FormalParameter p1 = AstFactory.simpleFormalParameter3("p1"); | 8126 FormalParameter p1 = AstFactory.simpleFormalParameter3("p1"); |
| 8120 _setType(p1, dynamicType); | 8127 _setType(p1, dynamicType); |
| 8121 FormalParameter p2 = AstFactory.simpleFormalParameter3("p2"); | 8128 FormalParameter p2 = AstFactory.simpleFormalParameter3("p2"); |
| 8122 _setType(p2, dynamicType); | 8129 _setType(p2, dynamicType); |
| 8123 FunctionExpression node = _resolvedFunctionExpression(AstFactory.formalParam
eterList([p1, p2]), AstFactory.blockFunctionBody2([])); | 8130 FunctionExpression node = _resolvedFunctionExpression(AstFactory.formalParam
eterList([p1, p2]), AstFactory.blockFunctionBody2()); |
| 8124 _analyze5(p1); | 8131 _analyze5(p1); |
| 8125 _analyze5(p2); | 8132 _analyze5(p2); |
| 8126 DartType resultType = _analyze(node); | 8133 DartType resultType = _analyze(node); |
| 8127 _assertFunctionType(dynamicType, <DartType> [dynamicType, dynamicType], null
, null, resultType); | 8134 _assertFunctionType(dynamicType, <DartType> [dynamicType, dynamicType], null
, null, resultType); |
| 8128 _listener.assertNoErrors(); | 8135 _listener.assertNoErrors(); |
| 8129 } | 8136 } |
| 8130 | 8137 |
| 8131 void test_visitFunctionExpression_normal_expression() { | 8138 void test_visitFunctionExpression_normal_expression() { |
| 8132 // (p1, p2) -> 0 | 8139 // (p1, p2) -> 0 |
| 8133 DartType dynamicType = _typeProvider.dynamicType; | 8140 DartType dynamicType = _typeProvider.dynamicType; |
| 8134 FormalParameter p = AstFactory.simpleFormalParameter3("p"); | 8141 FormalParameter p = AstFactory.simpleFormalParameter3("p"); |
| 8135 _setType(p, dynamicType); | 8142 _setType(p, dynamicType); |
| 8136 FunctionExpression node = _resolvedFunctionExpression(AstFactory.formalParam
eterList([p]), AstFactory.expressionFunctionBody(_resolvedInteger(0))); | 8143 FunctionExpression node = _resolvedFunctionExpression(AstFactory.formalParam
eterList([p]), AstFactory.expressionFunctionBody(_resolvedInteger(0))); |
| 8137 _analyze5(p); | 8144 _analyze5(p); |
| 8138 DartType resultType = _analyze(node); | 8145 DartType resultType = _analyze(node); |
| 8139 _assertFunctionType(_typeProvider.intType, <DartType> [dynamicType], null, n
ull, resultType); | 8146 _assertFunctionType(_typeProvider.intType, <DartType> [dynamicType], null, n
ull, resultType); |
| 8140 _listener.assertNoErrors(); | 8147 _listener.assertNoErrors(); |
| 8141 } | 8148 } |
| 8142 | 8149 |
| 8143 void test_visitFunctionExpression_normalAndNamed_block() { | 8150 void test_visitFunctionExpression_normalAndNamed_block() { |
| 8144 // (p1, {p2 : 0}) {} | 8151 // (p1, {p2 : 0}) {} |
| 8145 DartType dynamicType = _typeProvider.dynamicType; | 8152 DartType dynamicType = _typeProvider.dynamicType; |
| 8146 FormalParameter p1 = AstFactory.simpleFormalParameter3("p1"); | 8153 FormalParameter p1 = AstFactory.simpleFormalParameter3("p1"); |
| 8147 _setType(p1, dynamicType); | 8154 _setType(p1, dynamicType); |
| 8148 FormalParameter p2 = AstFactory.namedFormalParameter(AstFactory.simpleFormal
Parameter3("p2"), _resolvedInteger(0)); | 8155 FormalParameter p2 = AstFactory.namedFormalParameter(AstFactory.simpleFormal
Parameter3("p2"), _resolvedInteger(0)); |
| 8149 _setType(p2, dynamicType); | 8156 _setType(p2, dynamicType); |
| 8150 FunctionExpression node = _resolvedFunctionExpression(AstFactory.formalParam
eterList([p1, p2]), AstFactory.blockFunctionBody2([])); | 8157 FunctionExpression node = _resolvedFunctionExpression(AstFactory.formalParam
eterList([p1, p2]), AstFactory.blockFunctionBody2()); |
| 8151 _analyze5(p2); | 8158 _analyze5(p2); |
| 8152 DartType resultType = _analyze(node); | 8159 DartType resultType = _analyze(node); |
| 8153 Map<String, DartType> expectedNamedTypes = new HashMap<String, DartType>(); | 8160 Map<String, DartType> expectedNamedTypes = new HashMap<String, DartType>(); |
| 8154 expectedNamedTypes["p2"] = dynamicType; | 8161 expectedNamedTypes["p2"] = dynamicType; |
| 8155 _assertFunctionType(dynamicType, <DartType> [dynamicType], null, expectedNam
edTypes, resultType); | 8162 _assertFunctionType(dynamicType, <DartType> [dynamicType], null, expectedNam
edTypes, resultType); |
| 8156 _listener.assertNoErrors(); | 8163 _listener.assertNoErrors(); |
| 8157 } | 8164 } |
| 8158 | 8165 |
| 8159 void test_visitFunctionExpression_normalAndNamed_expression() { | 8166 void test_visitFunctionExpression_normalAndNamed_expression() { |
| 8160 // (p1, {p2 : 0}) -> 0 | 8167 // (p1, {p2 : 0}) -> 0 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 8172 _listener.assertNoErrors(); | 8179 _listener.assertNoErrors(); |
| 8173 } | 8180 } |
| 8174 | 8181 |
| 8175 void test_visitFunctionExpression_normalAndPositional_block() { | 8182 void test_visitFunctionExpression_normalAndPositional_block() { |
| 8176 // (p1, [p2 = 0]) {} | 8183 // (p1, [p2 = 0]) {} |
| 8177 DartType dynamicType = _typeProvider.dynamicType; | 8184 DartType dynamicType = _typeProvider.dynamicType; |
| 8178 FormalParameter p1 = AstFactory.simpleFormalParameter3("p1"); | 8185 FormalParameter p1 = AstFactory.simpleFormalParameter3("p1"); |
| 8179 _setType(p1, dynamicType); | 8186 _setType(p1, dynamicType); |
| 8180 FormalParameter p2 = AstFactory.positionalFormalParameter(AstFactory.simpleF
ormalParameter3("p2"), _resolvedInteger(0)); | 8187 FormalParameter p2 = AstFactory.positionalFormalParameter(AstFactory.simpleF
ormalParameter3("p2"), _resolvedInteger(0)); |
| 8181 _setType(p2, dynamicType); | 8188 _setType(p2, dynamicType); |
| 8182 FunctionExpression node = _resolvedFunctionExpression(AstFactory.formalParam
eterList([p1, p2]), AstFactory.blockFunctionBody2([])); | 8189 FunctionExpression node = _resolvedFunctionExpression(AstFactory.formalParam
eterList([p1, p2]), AstFactory.blockFunctionBody2()); |
| 8183 _analyze5(p1); | 8190 _analyze5(p1); |
| 8184 _analyze5(p2); | 8191 _analyze5(p2); |
| 8185 DartType resultType = _analyze(node); | 8192 DartType resultType = _analyze(node); |
| 8186 _assertFunctionType(dynamicType, <DartType> [dynamicType], <DartType> [dynam
icType], null, resultType); | 8193 _assertFunctionType(dynamicType, <DartType> [dynamicType], <DartType> [dynam
icType], null, resultType); |
| 8187 _listener.assertNoErrors(); | 8194 _listener.assertNoErrors(); |
| 8188 } | 8195 } |
| 8189 | 8196 |
| 8190 void test_visitFunctionExpression_normalAndPositional_expression() { | 8197 void test_visitFunctionExpression_normalAndPositional_expression() { |
| 8191 // (p1, [p2 = 0]) -> 0 | 8198 // (p1, [p2 = 0]) -> 0 |
| 8192 DartType dynamicType = _typeProvider.dynamicType; | 8199 DartType dynamicType = _typeProvider.dynamicType; |
| 8193 FormalParameter p1 = AstFactory.simpleFormalParameter3("p1"); | 8200 FormalParameter p1 = AstFactory.simpleFormalParameter3("p1"); |
| 8194 _setType(p1, dynamicType); | 8201 _setType(p1, dynamicType); |
| 8195 FormalParameter p2 = AstFactory.positionalFormalParameter(AstFactory.simpleF
ormalParameter3("p2"), _resolvedInteger(0)); | 8202 FormalParameter p2 = AstFactory.positionalFormalParameter(AstFactory.simpleF
ormalParameter3("p2"), _resolvedInteger(0)); |
| 8196 _setType(p2, dynamicType); | 8203 _setType(p2, dynamicType); |
| 8197 FunctionExpression node = _resolvedFunctionExpression(AstFactory.formalParam
eterList([p1, p2]), AstFactory.expressionFunctionBody(_resolvedInteger(0))); | 8204 FunctionExpression node = _resolvedFunctionExpression(AstFactory.formalParam
eterList([p1, p2]), AstFactory.expressionFunctionBody(_resolvedInteger(0))); |
| 8198 _analyze5(p1); | 8205 _analyze5(p1); |
| 8199 _analyze5(p2); | 8206 _analyze5(p2); |
| 8200 DartType resultType = _analyze(node); | 8207 DartType resultType = _analyze(node); |
| 8201 _assertFunctionType(_typeProvider.intType, <DartType> [dynamicType], <DartTy
pe> [dynamicType], null, resultType); | 8208 _assertFunctionType(_typeProvider.intType, <DartType> [dynamicType], <DartTy
pe> [dynamicType], null, resultType); |
| 8202 _listener.assertNoErrors(); | 8209 _listener.assertNoErrors(); |
| 8203 } | 8210 } |
| 8204 | 8211 |
| 8205 void test_visitFunctionExpression_positional_block() { | 8212 void test_visitFunctionExpression_positional_block() { |
| 8206 // ([p1 = 0, p2 = 0]) {} | 8213 // ([p1 = 0, p2 = 0]) {} |
| 8207 DartType dynamicType = _typeProvider.dynamicType; | 8214 DartType dynamicType = _typeProvider.dynamicType; |
| 8208 FormalParameter p1 = AstFactory.positionalFormalParameter(AstFactory.simpleF
ormalParameter3("p1"), _resolvedInteger(0)); | 8215 FormalParameter p1 = AstFactory.positionalFormalParameter(AstFactory.simpleF
ormalParameter3("p1"), _resolvedInteger(0)); |
| 8209 _setType(p1, dynamicType); | 8216 _setType(p1, dynamicType); |
| 8210 FormalParameter p2 = AstFactory.positionalFormalParameter(AstFactory.simpleF
ormalParameter3("p2"), _resolvedInteger(0)); | 8217 FormalParameter p2 = AstFactory.positionalFormalParameter(AstFactory.simpleF
ormalParameter3("p2"), _resolvedInteger(0)); |
| 8211 _setType(p2, dynamicType); | 8218 _setType(p2, dynamicType); |
| 8212 FunctionExpression node = _resolvedFunctionExpression(AstFactory.formalParam
eterList([p1, p2]), AstFactory.blockFunctionBody2([])); | 8219 FunctionExpression node = _resolvedFunctionExpression(AstFactory.formalParam
eterList([p1, p2]), AstFactory.blockFunctionBody2()); |
| 8213 _analyze5(p1); | 8220 _analyze5(p1); |
| 8214 _analyze5(p2); | 8221 _analyze5(p2); |
| 8215 DartType resultType = _analyze(node); | 8222 DartType resultType = _analyze(node); |
| 8216 _assertFunctionType(dynamicType, null, <DartType> [dynamicType, dynamicType]
, null, resultType); | 8223 _assertFunctionType(dynamicType, null, <DartType> [dynamicType, dynamicType]
, null, resultType); |
| 8217 _listener.assertNoErrors(); | 8224 _listener.assertNoErrors(); |
| 8218 } | 8225 } |
| 8219 | 8226 |
| 8220 void test_visitFunctionExpression_positional_expression() { | 8227 void test_visitFunctionExpression_positional_expression() { |
| 8221 // ([p1 = 0, p2 = 0]) -> 0 | 8228 // ([p1 = 0, p2 = 0]) -> 0 |
| 8222 DartType dynamicType = _typeProvider.dynamicType; | 8229 DartType dynamicType = _typeProvider.dynamicType; |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8291 indexExpression.staticElement = indexMethod; | 8298 indexExpression.staticElement = indexMethod; |
| 8292 // list[0] should be in a setter context | 8299 // list[0] should be in a setter context |
| 8293 AstFactory.assignmentExpression(indexExpression, TokenType.EQ, AstFactory.in
teger(0)); | 8300 AstFactory.assignmentExpression(indexExpression, TokenType.EQ, AstFactory.in
teger(0)); |
| 8294 // analyze and assert result of the index expression | 8301 // analyze and assert result of the index expression |
| 8295 expect(_analyze(indexExpression), same(intType)); | 8302 expect(_analyze(indexExpression), same(intType)); |
| 8296 _listener.assertNoErrors(); | 8303 _listener.assertNoErrors(); |
| 8297 } | 8304 } |
| 8298 | 8305 |
| 8299 void test_visitInstanceCreationExpression_named() { | 8306 void test_visitInstanceCreationExpression_named() { |
| 8300 // new C.m() | 8307 // new C.m() |
| 8301 ClassElementImpl classElement = ElementFactory.classElement2("C", []); | 8308 ClassElementImpl classElement = ElementFactory.classElement2("C"); |
| 8302 String constructorName = "m"; | 8309 String constructorName = "m"; |
| 8303 ConstructorElementImpl constructor = ElementFactory.constructorElement2(clas
sElement, constructorName, []); | 8310 ConstructorElementImpl constructor = ElementFactory.constructorElement2(clas
sElement, constructorName); |
| 8304 constructor.returnType = classElement.type; | 8311 constructor.returnType = classElement.type; |
| 8305 FunctionTypeImpl constructorType = new FunctionTypeImpl.con1(constructor); | 8312 FunctionTypeImpl constructorType = new FunctionTypeImpl.con1(constructor); |
| 8306 constructor.type = constructorType; | 8313 constructor.type = constructorType; |
| 8307 classElement.constructors = <ConstructorElement> [constructor]; | 8314 classElement.constructors = <ConstructorElement> [constructor]; |
| 8308 InstanceCreationExpression node = AstFactory.instanceCreationExpression2(nul
l, AstFactory.typeName(classElement, []), [AstFactory.identifier3(constructorNam
e)]); | 8315 InstanceCreationExpression node = AstFactory.instanceCreationExpression2(nul
l, AstFactory.typeName(classElement), [AstFactory.identifier3(constructorName)])
; |
| 8309 node.staticElement = constructor; | 8316 node.staticElement = constructor; |
| 8310 expect(_analyze(node), same(classElement.type)); | 8317 expect(_analyze(node), same(classElement.type)); |
| 8311 _listener.assertNoErrors(); | 8318 _listener.assertNoErrors(); |
| 8312 } | 8319 } |
| 8313 | 8320 |
| 8314 void test_visitInstanceCreationExpression_typeParameters() { | 8321 void test_visitInstanceCreationExpression_typeParameters() { |
| 8315 // new C<I>() | 8322 // new C<I>() |
| 8316 ClassElementImpl elementC = ElementFactory.classElement2("C", ["E"]); | 8323 ClassElementImpl elementC = ElementFactory.classElement2("C", ["E"]); |
| 8317 ClassElementImpl elementI = ElementFactory.classElement2("I", []); | 8324 ClassElementImpl elementI = ElementFactory.classElement2("I"); |
| 8318 ConstructorElementImpl constructor = ElementFactory.constructorElement2(elem
entC, null, []); | 8325 ConstructorElementImpl constructor = ElementFactory.constructorElement2(elem
entC, null); |
| 8319 elementC.constructors = <ConstructorElement> [constructor]; | 8326 elementC.constructors = <ConstructorElement> [constructor]; |
| 8320 constructor.returnType = elementC.type; | 8327 constructor.returnType = elementC.type; |
| 8321 FunctionTypeImpl constructorType = new FunctionTypeImpl.con1(constructor); | 8328 FunctionTypeImpl constructorType = new FunctionTypeImpl.con1(constructor); |
| 8322 constructor.type = constructorType; | 8329 constructor.type = constructorType; |
| 8323 TypeName typeName = AstFactory.typeName(elementC, [AstFactory.typeName(eleme
ntI, [])]); | 8330 TypeName typeName = AstFactory.typeName(elementC, [AstFactory.typeName(eleme
ntI)]); |
| 8324 typeName.type = elementC.type.substitute4(<DartType> [elementI.type]); | 8331 typeName.type = elementC.type.substitute4(<DartType> [elementI.type]); |
| 8325 InstanceCreationExpression node = AstFactory.instanceCreationExpression2(nul
l, typeName, []); | 8332 InstanceCreationExpression node = AstFactory.instanceCreationExpression2(nul
l, typeName); |
| 8326 node.staticElement = constructor; | 8333 node.staticElement = constructor; |
| 8327 InterfaceType interfaceType = _analyze(node) as InterfaceType; | 8334 InterfaceType interfaceType = _analyze(node) as InterfaceType; |
| 8328 List<DartType> typeArgs = interfaceType.typeArguments; | 8335 List<DartType> typeArgs = interfaceType.typeArguments; |
| 8329 expect(typeArgs.length, 1); | 8336 expect(typeArgs.length, 1); |
| 8330 expect(typeArgs[0], elementI.type); | 8337 expect(typeArgs[0], elementI.type); |
| 8331 _listener.assertNoErrors(); | 8338 _listener.assertNoErrors(); |
| 8332 } | 8339 } |
| 8333 | 8340 |
| 8334 void test_visitInstanceCreationExpression_unnamed() { | 8341 void test_visitInstanceCreationExpression_unnamed() { |
| 8335 // new C() | 8342 // new C() |
| 8336 ClassElementImpl classElement = ElementFactory.classElement2("C", []); | 8343 ClassElementImpl classElement = ElementFactory.classElement2("C"); |
| 8337 ConstructorElementImpl constructor = ElementFactory.constructorElement2(clas
sElement, null, []); | 8344 ConstructorElementImpl constructor = ElementFactory.constructorElement2(clas
sElement, null); |
| 8338 constructor.returnType = classElement.type; | 8345 constructor.returnType = classElement.type; |
| 8339 FunctionTypeImpl constructorType = new FunctionTypeImpl.con1(constructor); | 8346 FunctionTypeImpl constructorType = new FunctionTypeImpl.con1(constructor); |
| 8340 constructor.type = constructorType; | 8347 constructor.type = constructorType; |
| 8341 classElement.constructors = <ConstructorElement> [constructor]; | 8348 classElement.constructors = <ConstructorElement> [constructor]; |
| 8342 InstanceCreationExpression node = AstFactory.instanceCreationExpression2(nul
l, AstFactory.typeName(classElement, []), []); | 8349 InstanceCreationExpression node = AstFactory.instanceCreationExpression2(nul
l, AstFactory.typeName(classElement)); |
| 8343 node.staticElement = constructor; | 8350 node.staticElement = constructor; |
| 8344 expect(_analyze(node), same(classElement.type)); | 8351 expect(_analyze(node), same(classElement.type)); |
| 8345 _listener.assertNoErrors(); | 8352 _listener.assertNoErrors(); |
| 8346 } | 8353 } |
| 8347 | 8354 |
| 8348 void test_visitIntegerLiteral() { | 8355 void test_visitIntegerLiteral() { |
| 8349 // 42 | 8356 // 42 |
| 8350 Expression node = _resolvedInteger(42); | 8357 Expression node = _resolvedInteger(42); |
| 8351 expect(_analyze(node), same(_typeProvider.intType)); | 8358 expect(_analyze(node), same(_typeProvider.intType)); |
| 8352 _listener.assertNoErrors(); | 8359 _listener.assertNoErrors(); |
| 8353 } | 8360 } |
| 8354 | 8361 |
| 8355 void test_visitIsExpression_negated() { | 8362 void test_visitIsExpression_negated() { |
| 8356 // a is! String | 8363 // a is! String |
| 8357 Expression node = AstFactory.isExpression(_resolvedString("a"), true, AstFac
tory.typeName4("String", [])); | 8364 Expression node = AstFactory.isExpression(_resolvedString("a"), true, AstFac
tory.typeName4("String")); |
| 8358 expect(_analyze(node), same(_typeProvider.boolType)); | 8365 expect(_analyze(node), same(_typeProvider.boolType)); |
| 8359 _listener.assertNoErrors(); | 8366 _listener.assertNoErrors(); |
| 8360 } | 8367 } |
| 8361 | 8368 |
| 8362 void test_visitIsExpression_notNegated() { | 8369 void test_visitIsExpression_notNegated() { |
| 8363 // a is String | 8370 // a is String |
| 8364 Expression node = AstFactory.isExpression(_resolvedString("a"), false, AstFa
ctory.typeName4("String", [])); | 8371 Expression node = AstFactory.isExpression(_resolvedString("a"), false, AstFa
ctory.typeName4("String")); |
| 8365 expect(_analyze(node), same(_typeProvider.boolType)); | 8372 expect(_analyze(node), same(_typeProvider.boolType)); |
| 8366 _listener.assertNoErrors(); | 8373 _listener.assertNoErrors(); |
| 8367 } | 8374 } |
| 8368 | 8375 |
| 8369 void test_visitListLiteral_empty() { | 8376 void test_visitListLiteral_empty() { |
| 8370 // [] | 8377 // [] |
| 8371 Expression node = AstFactory.listLiteral([]); | 8378 Expression node = AstFactory.listLiteral(); |
| 8372 DartType resultType = _analyze(node); | 8379 DartType resultType = _analyze(node); |
| 8373 _assertType2(_typeProvider.listType.substitute4(<DartType> [_typeProvider.dy
namicType]), resultType); | 8380 _assertType2(_typeProvider.listType.substitute4(<DartType> [_typeProvider.dy
namicType]), resultType); |
| 8374 _listener.assertNoErrors(); | 8381 _listener.assertNoErrors(); |
| 8375 } | 8382 } |
| 8376 | 8383 |
| 8377 void test_visitListLiteral_nonEmpty() { | 8384 void test_visitListLiteral_nonEmpty() { |
| 8378 // [0] | 8385 // [0] |
| 8379 Expression node = AstFactory.listLiteral([_resolvedInteger(0)]); | 8386 Expression node = AstFactory.listLiteral([_resolvedInteger(0)]); |
| 8380 DartType resultType = _analyze(node); | 8387 DartType resultType = _analyze(node); |
| 8381 _assertType2(_typeProvider.listType.substitute4(<DartType> [_typeProvider.dy
namicType]), resultType); | 8388 _assertType2(_typeProvider.listType.substitute4(<DartType> [_typeProvider.dy
namicType]), resultType); |
| 8382 _listener.assertNoErrors(); | 8389 _listener.assertNoErrors(); |
| 8383 } | 8390 } |
| 8384 | 8391 |
| 8385 void test_visitMapLiteral_empty() { | 8392 void test_visitMapLiteral_empty() { |
| 8386 // {} | 8393 // {} |
| 8387 Expression node = AstFactory.mapLiteral2([]); | 8394 Expression node = AstFactory.mapLiteral2(); |
| 8388 DartType resultType = _analyze(node); | 8395 DartType resultType = _analyze(node); |
| 8389 _assertType2(_typeProvider.mapType.substitute4(<DartType> [_typeProvider.dyn
amicType, _typeProvider.dynamicType]), resultType); | 8396 _assertType2(_typeProvider.mapType.substitute4(<DartType> [_typeProvider.dyn
amicType, _typeProvider.dynamicType]), resultType); |
| 8390 _listener.assertNoErrors(); | 8397 _listener.assertNoErrors(); |
| 8391 } | 8398 } |
| 8392 | 8399 |
| 8393 void test_visitMapLiteral_nonEmpty() { | 8400 void test_visitMapLiteral_nonEmpty() { |
| 8394 // {"k" : 0} | 8401 // {"k" : 0} |
| 8395 Expression node = AstFactory.mapLiteral2([AstFactory.mapLiteralEntry("k", _r
esolvedInteger(0))]); | 8402 Expression node = AstFactory.mapLiteral2([AstFactory.mapLiteralEntry("k", _r
esolvedInteger(0))]); |
| 8396 DartType resultType = _analyze(node); | 8403 DartType resultType = _analyze(node); |
| 8397 _assertType2(_typeProvider.mapType.substitute4(<DartType> [_typeProvider.dyn
amicType, _typeProvider.dynamicType]), resultType); | 8404 _assertType2(_typeProvider.mapType.substitute4(<DartType> [_typeProvider.dyn
amicType, _typeProvider.dynamicType]), resultType); |
| 8398 _listener.assertNoErrors(); | 8405 _listener.assertNoErrors(); |
| 8399 } | 8406 } |
| 8400 | 8407 |
| 8401 void test_visitMethodInvocation_then() { | 8408 void test_visitMethodInvocation_then() { |
| 8402 // then() | 8409 // then() |
| 8403 Expression node = AstFactory.methodInvocation(null, "then", []); | 8410 Expression node = AstFactory.methodInvocation(null, "then"); |
| 8404 _analyze(node); | 8411 _analyze(node); |
| 8405 _listener.assertNoErrors(); | 8412 _listener.assertNoErrors(); |
| 8406 } | 8413 } |
| 8407 | 8414 |
| 8408 void test_visitNamedExpression() { | 8415 void test_visitNamedExpression() { |
| 8409 // n: a | 8416 // n: a |
| 8410 Expression node = AstFactory.namedExpression2("n", _resolvedString("a")); | 8417 Expression node = AstFactory.namedExpression2("n", _resolvedString("a")); |
| 8411 expect(_analyze(node), same(_typeProvider.stringType)); | 8418 expect(_analyze(node), same(_typeProvider.stringType)); |
| 8412 _listener.assertNoErrors(); | 8419 _listener.assertNoErrors(); |
| 8413 } | 8420 } |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8578 Expression node = AstFactory.string([ | 8585 Expression node = AstFactory.string([ |
| 8579 AstFactory.interpolationString("a", "a"), | 8586 AstFactory.interpolationString("a", "a"), |
| 8580 AstFactory.interpolationExpression(_resolvedString("b")), | 8587 AstFactory.interpolationExpression(_resolvedString("b")), |
| 8581 AstFactory.interpolationString("c", "c")]); | 8588 AstFactory.interpolationString("c", "c")]); |
| 8582 expect(_analyze(node), same(_typeProvider.stringType)); | 8589 expect(_analyze(node), same(_typeProvider.stringType)); |
| 8583 _listener.assertNoErrors(); | 8590 _listener.assertNoErrors(); |
| 8584 } | 8591 } |
| 8585 | 8592 |
| 8586 void test_visitSuperExpression() { | 8593 void test_visitSuperExpression() { |
| 8587 // super | 8594 // super |
| 8588 InterfaceType superType = ElementFactory.classElement2("A", []).type; | 8595 InterfaceType superType = ElementFactory.classElement2("A").type; |
| 8589 InterfaceType thisType = ElementFactory.classElement("B", superType, []).typ
e; | 8596 InterfaceType thisType = ElementFactory.classElement("B", superType).type; |
| 8590 Expression node = AstFactory.superExpression(); | 8597 Expression node = AstFactory.superExpression(); |
| 8591 expect(_analyze3(node, thisType), same(thisType)); | 8598 expect(_analyze3(node, thisType), same(thisType)); |
| 8592 _listener.assertNoErrors(); | 8599 _listener.assertNoErrors(); |
| 8593 } | 8600 } |
| 8594 | 8601 |
| 8595 void test_visitSymbolLiteral() { | 8602 void test_visitSymbolLiteral() { |
| 8596 expect(_analyze(AstFactory.symbolLiteral(["a"])), same(_typeProvider.symbolT
ype)); | 8603 expect(_analyze(AstFactory.symbolLiteral(["a"])), same(_typeProvider.symbolT
ype)); |
| 8597 } | 8604 } |
| 8598 | 8605 |
| 8599 void test_visitThisExpression() { | 8606 void test_visitThisExpression() { |
| 8600 // this | 8607 // this |
| 8601 InterfaceType thisType = ElementFactory.classElement("B", ElementFactory.cla
ssElement2("A", []).type, []).type; | 8608 InterfaceType thisType = ElementFactory.classElement("B", ElementFactory.cla
ssElement2("A").type).type; |
| 8602 Expression node = AstFactory.thisExpression(); | 8609 Expression node = AstFactory.thisExpression(); |
| 8603 expect(_analyze3(node, thisType), same(thisType)); | 8610 expect(_analyze3(node, thisType), same(thisType)); |
| 8604 _listener.assertNoErrors(); | 8611 _listener.assertNoErrors(); |
| 8605 } | 8612 } |
| 8606 | 8613 |
| 8607 void test_visitThrowExpression_withoutValue() { | 8614 void test_visitThrowExpression_withoutValue() { |
| 8608 // throw | 8615 // throw |
| 8609 Expression node = AstFactory.throwExpression(); | 8616 Expression node = AstFactory.throwExpression(); |
| 8610 expect(_analyze(node), same(_typeProvider.bottomType)); | 8617 expect(_analyze(node), same(_typeProvider.bottomType)); |
| 8611 _listener.assertNoErrors(); | 8618 _listener.assertNoErrors(); |
| (...skipping 703 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9315 /** | 9322 /** |
| 9316 * The compilation unit element containing all of the types setup in each test
. | 9323 * The compilation unit element containing all of the types setup in each test
. |
| 9317 */ | 9324 */ |
| 9318 CompilationUnitElementImpl _definingCompilationUnit; | 9325 CompilationUnitElementImpl _definingCompilationUnit; |
| 9319 | 9326 |
| 9320 void test_computeAllSubtypes_infiniteLoop() { | 9327 void test_computeAllSubtypes_infiniteLoop() { |
| 9321 // | 9328 // |
| 9322 // class A extends B | 9329 // class A extends B |
| 9323 // class B extends A | 9330 // class B extends A |
| 9324 // | 9331 // |
| 9325 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 9332 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 9326 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 9333 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
| 9327 classA.supertype = classB.type; | 9334 classA.supertype = classB.type; |
| 9328 _definingCompilationUnit.types = <ClassElement> [classA, classB]; | 9335 _definingCompilationUnit.types = <ClassElement> [classA, classB]; |
| 9329 HashSet<ClassElement> subtypesOfA = _subtypeManager.computeAllSubtypes(class
A); | 9336 HashSet<ClassElement> subtypesOfA = _subtypeManager.computeAllSubtypes(class
A); |
| 9330 List<ClassElement> arraySubtypesOfA = new List.from(subtypesOfA); | 9337 List<ClassElement> arraySubtypesOfA = new List.from(subtypesOfA); |
| 9331 expect(subtypesOfA, hasLength(2)); | 9338 expect(subtypesOfA, hasLength(2)); |
| 9332 expect(arraySubtypesOfA, unorderedEquals([classA, classB])); | 9339 expect(arraySubtypesOfA, unorderedEquals([classA, classB])); |
| 9333 } | 9340 } |
| 9334 | 9341 |
| 9335 void test_computeAllSubtypes_manyRecursiveSubtypes() { | 9342 void test_computeAllSubtypes_manyRecursiveSubtypes() { |
| 9336 // | 9343 // |
| 9337 // class A | 9344 // class A |
| 9338 // class B extends A | 9345 // class B extends A |
| 9339 // class C extends B | 9346 // class C extends B |
| 9340 // class D extends B | 9347 // class D extends B |
| 9341 // class E extends B | 9348 // class E extends B |
| 9342 // | 9349 // |
| 9343 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 9350 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 9344 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 9351 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
| 9345 ClassElementImpl classC = ElementFactory.classElement("C", classB.type, []); | 9352 ClassElementImpl classC = ElementFactory.classElement("C", classB.type); |
| 9346 ClassElementImpl classD = ElementFactory.classElement("D", classB.type, []); | 9353 ClassElementImpl classD = ElementFactory.classElement("D", classB.type); |
| 9347 ClassElementImpl classE = ElementFactory.classElement("E", classB.type, []); | 9354 ClassElementImpl classE = ElementFactory.classElement("E", classB.type); |
| 9348 _definingCompilationUnit.types = <ClassElement> [classA, classB, classC, cla
ssD, classE]; | 9355 _definingCompilationUnit.types = <ClassElement> [classA, classB, classC, cla
ssD, classE]; |
| 9349 HashSet<ClassElement> subtypesOfA = _subtypeManager.computeAllSubtypes(class
A); | 9356 HashSet<ClassElement> subtypesOfA = _subtypeManager.computeAllSubtypes(class
A); |
| 9350 List<ClassElement> arraySubtypesOfA = new List.from(subtypesOfA); | 9357 List<ClassElement> arraySubtypesOfA = new List.from(subtypesOfA); |
| 9351 HashSet<ClassElement> subtypesOfB = _subtypeManager.computeAllSubtypes(class
B); | 9358 HashSet<ClassElement> subtypesOfB = _subtypeManager.computeAllSubtypes(class
B); |
| 9352 List<ClassElement> arraySubtypesOfB = new List.from(subtypesOfB); | 9359 List<ClassElement> arraySubtypesOfB = new List.from(subtypesOfB); |
| 9353 expect(subtypesOfA, hasLength(4)); | 9360 expect(subtypesOfA, hasLength(4)); |
| 9354 expect(arraySubtypesOfA, unorderedEquals([classB, classC, classD, classE])); | 9361 expect(arraySubtypesOfA, unorderedEquals([classB, classC, classD, classE])); |
| 9355 expect(subtypesOfB, hasLength(3)); | 9362 expect(subtypesOfB, hasLength(3)); |
| 9356 expect(arraySubtypesOfB, unorderedEquals([classC, classD, classE])); | 9363 expect(arraySubtypesOfB, unorderedEquals([classC, classD, classE])); |
| 9357 } | 9364 } |
| 9358 | 9365 |
| 9359 void test_computeAllSubtypes_noSubtypes() { | 9366 void test_computeAllSubtypes_noSubtypes() { |
| 9360 // | 9367 // |
| 9361 // class A | 9368 // class A |
| 9362 // | 9369 // |
| 9363 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 9370 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 9364 _definingCompilationUnit.types = <ClassElement> [classA]; | 9371 _definingCompilationUnit.types = <ClassElement> [classA]; |
| 9365 HashSet<ClassElement> subtypesOfA = _subtypeManager.computeAllSubtypes(class
A); | 9372 HashSet<ClassElement> subtypesOfA = _subtypeManager.computeAllSubtypes(class
A); |
| 9366 expect(subtypesOfA, hasLength(0)); | 9373 expect(subtypesOfA, hasLength(0)); |
| 9367 } | 9374 } |
| 9368 | 9375 |
| 9369 void test_computeAllSubtypes_oneSubtype() { | 9376 void test_computeAllSubtypes_oneSubtype() { |
| 9370 // | 9377 // |
| 9371 // class A | 9378 // class A |
| 9372 // class B extends A | 9379 // class B extends A |
| 9373 // | 9380 // |
| 9374 ClassElementImpl classA = ElementFactory.classElement2("A", []); | 9381 ClassElementImpl classA = ElementFactory.classElement2("A"); |
| 9375 ClassElementImpl classB = ElementFactory.classElement("B", classA.type, []); | 9382 ClassElementImpl classB = ElementFactory.classElement("B", classA.type); |
| 9376 _definingCompilationUnit.types = <ClassElement> [classA, classB]; | 9383 _definingCompilationUnit.types = <ClassElement> [classA, classB]; |
| 9377 HashSet<ClassElement> subtypesOfA = _subtypeManager.computeAllSubtypes(class
A); | 9384 HashSet<ClassElement> subtypesOfA = _subtypeManager.computeAllSubtypes(class
A); |
| 9378 List<ClassElement> arraySubtypesOfA = new List.from(subtypesOfA); | 9385 List<ClassElement> arraySubtypesOfA = new List.from(subtypesOfA); |
| 9379 expect(subtypesOfA, hasLength(1)); | 9386 expect(subtypesOfA, hasLength(1)); |
| 9380 expect(arraySubtypesOfA, unorderedEquals([classB])); | 9387 expect(arraySubtypesOfA, unorderedEquals([classB])); |
| 9381 } | 9388 } |
| 9382 | 9389 |
| 9383 @override | 9390 @override |
| 9384 void setUp() { | 9391 void setUp() { |
| 9385 super.setUp(); | 9392 super.setUp(); |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9489 InterfaceType _typeType; | 9496 InterfaceType _typeType; |
| 9490 | 9497 |
| 9491 /** | 9498 /** |
| 9492 * The type representing typenames that can't be resolved. | 9499 * The type representing typenames that can't be resolved. |
| 9493 */ | 9500 */ |
| 9494 DartType _undefinedType; | 9501 DartType _undefinedType; |
| 9495 | 9502 |
| 9496 @override | 9503 @override |
| 9497 InterfaceType get boolType { | 9504 InterfaceType get boolType { |
| 9498 if (_boolType == null) { | 9505 if (_boolType == null) { |
| 9499 ClassElementImpl boolElement = ElementFactory.classElement2("bool", []); | 9506 ClassElementImpl boolElement = ElementFactory.classElement2("bool"); |
| 9500 _boolType = boolElement.type; | 9507 _boolType = boolElement.type; |
| 9501 ConstructorElementImpl fromEnvironment = ElementFactory.constructorElement
(boolElement, "fromEnvironment", true, []); | 9508 ConstructorElementImpl fromEnvironment = ElementFactory.constructorElement
(boolElement, "fromEnvironment", true); |
| 9502 fromEnvironment.parameters = <ParameterElement> [ | 9509 fromEnvironment.parameters = <ParameterElement> [ |
| 9503 ElementFactory.requiredParameter2("name", stringType), | 9510 ElementFactory.requiredParameter2("name", stringType), |
| 9504 ElementFactory.namedParameter2("defaultValue", _boolType)]; | 9511 ElementFactory.namedParameter2("defaultValue", _boolType)]; |
| 9505 fromEnvironment.factory = true; | 9512 fromEnvironment.factory = true; |
| 9506 boolElement.constructors = <ConstructorElement> [fromEnvironment]; | 9513 boolElement.constructors = <ConstructorElement> [fromEnvironment]; |
| 9507 } | 9514 } |
| 9508 return _boolType; | 9515 return _boolType; |
| 9509 } | 9516 } |
| 9510 | 9517 |
| 9511 @override | 9518 @override |
| 9512 DartType get bottomType { | 9519 DartType get bottomType { |
| 9513 if (_bottomType == null) { | 9520 if (_bottomType == null) { |
| 9514 _bottomType = BottomTypeImpl.instance; | 9521 _bottomType = BottomTypeImpl.instance; |
| 9515 } | 9522 } |
| 9516 return _bottomType; | 9523 return _bottomType; |
| 9517 } | 9524 } |
| 9518 | 9525 |
| 9519 @override | 9526 @override |
| 9520 InterfaceType get deprecatedType { | 9527 InterfaceType get deprecatedType { |
| 9521 if (_deprecatedType == null) { | 9528 if (_deprecatedType == null) { |
| 9522 ClassElementImpl deprecatedElement = ElementFactory.classElement2("Depreca
ted", []); | 9529 ClassElementImpl deprecatedElement = ElementFactory.classElement2("Depreca
ted"); |
| 9523 deprecatedElement.constructors = <ConstructorElement> [ElementFactory.cons
tructorElement(deprecatedElement, null, true, [stringType])]; | 9530 deprecatedElement.constructors = <ConstructorElement> [ElementFactory.cons
tructorElement(deprecatedElement, null, true, [stringType])]; |
| 9524 _deprecatedType = deprecatedElement.type; | 9531 _deprecatedType = deprecatedElement.type; |
| 9525 } | 9532 } |
| 9526 return _deprecatedType; | 9533 return _deprecatedType; |
| 9527 } | 9534 } |
| 9528 | 9535 |
| 9529 @override | 9536 @override |
| 9530 InterfaceType get doubleType { | 9537 InterfaceType get doubleType { |
| 9531 if (_doubleType == null) { | 9538 if (_doubleType == null) { |
| 9532 _initializeNumericTypes(); | 9539 _initializeNumericTypes(); |
| 9533 } | 9540 } |
| 9534 return _doubleType; | 9541 return _doubleType; |
| 9535 } | 9542 } |
| 9536 | 9543 |
| 9537 @override | 9544 @override |
| 9538 DartType get dynamicType { | 9545 DartType get dynamicType { |
| 9539 if (_dynamicType == null) { | 9546 if (_dynamicType == null) { |
| 9540 _dynamicType = DynamicTypeImpl.instance; | 9547 _dynamicType = DynamicTypeImpl.instance; |
| 9541 } | 9548 } |
| 9542 return _dynamicType; | 9549 return _dynamicType; |
| 9543 } | 9550 } |
| 9544 | 9551 |
| 9545 @override | 9552 @override |
| 9546 InterfaceType get functionType { | 9553 InterfaceType get functionType { |
| 9547 if (_functionType == null) { | 9554 if (_functionType == null) { |
| 9548 _functionType = ElementFactory.classElement2("Function", []).type; | 9555 _functionType = ElementFactory.classElement2("Function").type; |
| 9549 } | 9556 } |
| 9550 return _functionType; | 9557 return _functionType; |
| 9551 } | 9558 } |
| 9552 | 9559 |
| 9553 @override | 9560 @override |
| 9554 InterfaceType get intType { | 9561 InterfaceType get intType { |
| 9555 if (_intType == null) { | 9562 if (_intType == null) { |
| 9556 _initializeNumericTypes(); | 9563 _initializeNumericTypes(); |
| 9557 } | 9564 } |
| 9558 return _intType; | 9565 return _intType; |
| (...skipping 20 matching lines...) Expand all Loading... |
| 9579 iteratorElement.accessors = <PropertyAccessorElement> [ElementFactory.gett
erElement("current", false, eType)]; | 9586 iteratorElement.accessors = <PropertyAccessorElement> [ElementFactory.gett
erElement("current", false, eType)]; |
| 9580 _propagateTypeArguments(iteratorElement); | 9587 _propagateTypeArguments(iteratorElement); |
| 9581 } | 9588 } |
| 9582 return _iteratorType; | 9589 return _iteratorType; |
| 9583 } | 9590 } |
| 9584 | 9591 |
| 9585 @override | 9592 @override |
| 9586 InterfaceType get listType { | 9593 InterfaceType get listType { |
| 9587 if (_listType == null) { | 9594 if (_listType == null) { |
| 9588 ClassElementImpl listElement = ElementFactory.classElement2("List", ["E"])
; | 9595 ClassElementImpl listElement = ElementFactory.classElement2("List", ["E"])
; |
| 9589 listElement.constructors = <ConstructorElement> [ElementFactory.constructo
rElement2(listElement, null, [])]; | 9596 listElement.constructors = <ConstructorElement> [ElementFactory.constructo
rElement2(listElement, null)]; |
| 9590 _listType = listElement.type; | 9597 _listType = listElement.type; |
| 9591 DartType eType = listElement.typeParameters[0].type; | 9598 DartType eType = listElement.typeParameters[0].type; |
| 9592 InterfaceType iterableType = this.iterableType.substitute4(<DartType> [eTy
pe]); | 9599 InterfaceType iterableType = this.iterableType.substitute4(<DartType> [eTy
pe]); |
| 9593 listElement.interfaces = <InterfaceType> [iterableType]; | 9600 listElement.interfaces = <InterfaceType> [iterableType]; |
| 9594 listElement.accessors = <PropertyAccessorElement> [ElementFactory.getterEl
ement("length", false, intType)]; | 9601 listElement.accessors = <PropertyAccessorElement> [ElementFactory.getterEl
ement("length", false, intType)]; |
| 9595 listElement.methods = <MethodElement> [ | 9602 listElement.methods = <MethodElement> [ |
| 9596 ElementFactory.methodElement("[]", eType, [intType]), | 9603 ElementFactory.methodElement("[]", eType, [intType]), |
| 9597 ElementFactory.methodElement("[]=", VoidTypeImpl.instance, [intType, e
Type]), | 9604 ElementFactory.methodElement("[]=", VoidTypeImpl.instance, [intType, e
Type]), |
| 9598 ElementFactory.methodElement("add", VoidTypeImpl.instance, [eType])]; | 9605 ElementFactory.methodElement("add", VoidTypeImpl.instance, [eType])]; |
| 9599 _propagateTypeArguments(listElement); | 9606 _propagateTypeArguments(listElement); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 9613 ElementFactory.methodElement("[]", vType, [objectType]), | 9620 ElementFactory.methodElement("[]", vType, [objectType]), |
| 9614 ElementFactory.methodElement("[]=", VoidTypeImpl.instance, [kType, vTy
pe])]; | 9621 ElementFactory.methodElement("[]=", VoidTypeImpl.instance, [kType, vTy
pe])]; |
| 9615 _propagateTypeArguments(mapElement); | 9622 _propagateTypeArguments(mapElement); |
| 9616 } | 9623 } |
| 9617 return _mapType; | 9624 return _mapType; |
| 9618 } | 9625 } |
| 9619 | 9626 |
| 9620 @override | 9627 @override |
| 9621 InterfaceType get nullType { | 9628 InterfaceType get nullType { |
| 9622 if (_nullType == null) { | 9629 if (_nullType == null) { |
| 9623 _nullType = ElementFactory.classElement2("Null", []).type; | 9630 _nullType = ElementFactory.classElement2("Null").type; |
| 9624 } | 9631 } |
| 9625 return _nullType; | 9632 return _nullType; |
| 9626 } | 9633 } |
| 9627 | 9634 |
| 9628 @override | 9635 @override |
| 9629 InterfaceType get numType { | 9636 InterfaceType get numType { |
| 9630 if (_numType == null) { | 9637 if (_numType == null) { |
| 9631 _initializeNumericTypes(); | 9638 _initializeNumericTypes(); |
| 9632 } | 9639 } |
| 9633 return _numType; | 9640 return _numType; |
| 9634 } | 9641 } |
| 9635 | 9642 |
| 9636 @override | 9643 @override |
| 9637 InterfaceType get objectType { | 9644 InterfaceType get objectType { |
| 9638 if (_objectType == null) { | 9645 if (_objectType == null) { |
| 9639 ClassElementImpl objectElement = ElementFactory.object; | 9646 ClassElementImpl objectElement = ElementFactory.object; |
| 9640 _objectType = objectElement.type; | 9647 _objectType = objectElement.type; |
| 9641 objectElement.constructors = <ConstructorElement> [ElementFactory.construc
torElement2(objectElement, null, [])]; | 9648 objectElement.constructors = <ConstructorElement> [ElementFactory.construc
torElement2(objectElement, null)]; |
| 9642 objectElement.methods = <MethodElement> [ | 9649 objectElement.methods = <MethodElement> [ |
| 9643 ElementFactory.methodElement("toString", stringType, []), | 9650 ElementFactory.methodElement("toString", stringType), |
| 9644 ElementFactory.methodElement("==", boolType, [_objectType]), | 9651 ElementFactory.methodElement("==", boolType, [_objectType]), |
| 9645 ElementFactory.methodElement("noSuchMethod", dynamicType, [dynamicType
])]; | 9652 ElementFactory.methodElement("noSuchMethod", dynamicType, [dynamicType
])]; |
| 9646 objectElement.accessors = <PropertyAccessorElement> [ | 9653 objectElement.accessors = <PropertyAccessorElement> [ |
| 9647 ElementFactory.getterElement("hashCode", false, intType), | 9654 ElementFactory.getterElement("hashCode", false, intType), |
| 9648 ElementFactory.getterElement("runtimeType", false, typeType)]; | 9655 ElementFactory.getterElement("runtimeType", false, typeType)]; |
| 9649 } | 9656 } |
| 9650 return _objectType; | 9657 return _objectType; |
| 9651 } | 9658 } |
| 9652 | 9659 |
| 9653 @override | 9660 @override |
| 9654 InterfaceType get stackTraceType { | 9661 InterfaceType get stackTraceType { |
| 9655 if (_stackTraceType == null) { | 9662 if (_stackTraceType == null) { |
| 9656 _stackTraceType = ElementFactory.classElement2("StackTrace", []).type; | 9663 _stackTraceType = ElementFactory.classElement2("StackTrace").type; |
| 9657 } | 9664 } |
| 9658 return _stackTraceType; | 9665 return _stackTraceType; |
| 9659 } | 9666 } |
| 9660 | 9667 |
| 9661 @override | 9668 @override |
| 9662 InterfaceType get stringType { | 9669 InterfaceType get stringType { |
| 9663 if (_stringType == null) { | 9670 if (_stringType == null) { |
| 9664 _stringType = ElementFactory.classElement2("String", []).type; | 9671 _stringType = ElementFactory.classElement2("String").type; |
| 9665 ClassElementImpl stringElement = _stringType.element as ClassElementImpl; | 9672 ClassElementImpl stringElement = _stringType.element as ClassElementImpl; |
| 9666 stringElement.accessors = <PropertyAccessorElement> [ | 9673 stringElement.accessors = <PropertyAccessorElement> [ |
| 9667 ElementFactory.getterElement("isEmpty", false, boolType), | 9674 ElementFactory.getterElement("isEmpty", false, boolType), |
| 9668 ElementFactory.getterElement("length", false, intType), | 9675 ElementFactory.getterElement("length", false, intType), |
| 9669 ElementFactory.getterElement("codeUnits", false, listType.substitute4(
<DartType> [intType]))]; | 9676 ElementFactory.getterElement("codeUnits", false, listType.substitute4(
<DartType> [intType]))]; |
| 9670 stringElement.methods = <MethodElement> [ | 9677 stringElement.methods = <MethodElement> [ |
| 9671 ElementFactory.methodElement("+", _stringType, [_stringType]), | 9678 ElementFactory.methodElement("+", _stringType, [_stringType]), |
| 9672 ElementFactory.methodElement("toLowerCase", _stringType, []), | 9679 ElementFactory.methodElement("toLowerCase", _stringType), |
| 9673 ElementFactory.methodElement("toUpperCase", _stringType, [])]; | 9680 ElementFactory.methodElement("toUpperCase", _stringType)]; |
| 9674 ConstructorElementImpl fromEnvironment = ElementFactory.constructorElement
(stringElement, "fromEnvironment", true, []); | 9681 ConstructorElementImpl fromEnvironment = ElementFactory.constructorElement
(stringElement, "fromEnvironment", true); |
| 9675 fromEnvironment.parameters = <ParameterElement> [ | 9682 fromEnvironment.parameters = <ParameterElement> [ |
| 9676 ElementFactory.requiredParameter2("name", stringType), | 9683 ElementFactory.requiredParameter2("name", stringType), |
| 9677 ElementFactory.namedParameter2("defaultValue", _stringType)]; | 9684 ElementFactory.namedParameter2("defaultValue", _stringType)]; |
| 9678 fromEnvironment.factory = true; | 9685 fromEnvironment.factory = true; |
| 9679 stringElement.constructors = <ConstructorElement> [fromEnvironment]; | 9686 stringElement.constructors = <ConstructorElement> [fromEnvironment]; |
| 9680 } | 9687 } |
| 9681 return _stringType; | 9688 return _stringType; |
| 9682 } | 9689 } |
| 9683 | 9690 |
| 9684 @override | 9691 @override |
| 9685 InterfaceType get symbolType { | 9692 InterfaceType get symbolType { |
| 9686 if (_symbolType == null) { | 9693 if (_symbolType == null) { |
| 9687 ClassElementImpl symbolClass = ElementFactory.classElement2("Symbol", []); | 9694 ClassElementImpl symbolClass = ElementFactory.classElement2("Symbol"); |
| 9688 ConstructorElementImpl constructor = ElementFactory.constructorElement(sym
bolClass, null, true, [stringType]); | 9695 ConstructorElementImpl constructor = ElementFactory.constructorElement(sym
bolClass, null, true, [stringType]); |
| 9689 constructor.factory = true; | 9696 constructor.factory = true; |
| 9690 symbolClass.constructors = <ConstructorElement> [constructor]; | 9697 symbolClass.constructors = <ConstructorElement> [constructor]; |
| 9691 _symbolType = symbolClass.type; | 9698 _symbolType = symbolClass.type; |
| 9692 } | 9699 } |
| 9693 return _symbolType; | 9700 return _symbolType; |
| 9694 } | 9701 } |
| 9695 | 9702 |
| 9696 @override | 9703 @override |
| 9697 InterfaceType get typeType { | 9704 InterfaceType get typeType { |
| 9698 if (_typeType == null) { | 9705 if (_typeType == null) { |
| 9699 _typeType = ElementFactory.classElement2("Type", []).type; | 9706 _typeType = ElementFactory.classElement2("Type").type; |
| 9700 } | 9707 } |
| 9701 return _typeType; | 9708 return _typeType; |
| 9702 } | 9709 } |
| 9703 | 9710 |
| 9704 @override | 9711 @override |
| 9705 DartType get undefinedType { | 9712 DartType get undefinedType { |
| 9706 if (_undefinedType == null) { | 9713 if (_undefinedType == null) { |
| 9707 _undefinedType = UndefinedTypeImpl.instance; | 9714 _undefinedType = UndefinedTypeImpl.instance; |
| 9708 } | 9715 } |
| 9709 return _undefinedType; | 9716 return _undefinedType; |
| 9710 } | 9717 } |
| 9711 | 9718 |
| 9712 /** | 9719 /** |
| 9713 * Initialize the numeric types. They are created as a group so that we can (a
) create the right | 9720 * Initialize the numeric types. They are created as a group so that we can (a
) create the right |
| 9714 * hierarchy and (b) add members to them. | 9721 * hierarchy and (b) add members to them. |
| 9715 */ | 9722 */ |
| 9716 void _initializeNumericTypes() { | 9723 void _initializeNumericTypes() { |
| 9717 // | 9724 // |
| 9718 // Create the type hierarchy. | 9725 // Create the type hierarchy. |
| 9719 // | 9726 // |
| 9720 ClassElementImpl numElement = ElementFactory.classElement2("num", []); | 9727 ClassElementImpl numElement = ElementFactory.classElement2("num"); |
| 9721 _numType = numElement.type; | 9728 _numType = numElement.type; |
| 9722 ClassElementImpl intElement = ElementFactory.classElement("int", _numType, [
]); | 9729 ClassElementImpl intElement = ElementFactory.classElement("int", _numType); |
| 9723 _intType = intElement.type; | 9730 _intType = intElement.type; |
| 9724 ClassElementImpl doubleElement = ElementFactory.classElement("double", _numT
ype, []); | 9731 ClassElementImpl doubleElement = ElementFactory.classElement("double", _numT
ype); |
| 9725 _doubleType = doubleElement.type; | 9732 _doubleType = doubleElement.type; |
| 9726 // | 9733 // |
| 9727 // Force the referenced types to be cached. | 9734 // Force the referenced types to be cached. |
| 9728 // | 9735 // |
| 9729 objectType; | 9736 objectType; |
| 9730 boolType; | 9737 boolType; |
| 9731 stringType; | 9738 stringType; |
| 9732 // | 9739 // |
| 9733 // Add the methods. | 9740 // Add the methods. |
| 9734 // | 9741 // |
| 9735 numElement.methods = <MethodElement> [ | 9742 numElement.methods = <MethodElement> [ |
| 9736 ElementFactory.methodElement("+", _numType, [_numType]), | 9743 ElementFactory.methodElement("+", _numType, [_numType]), |
| 9737 ElementFactory.methodElement("-", _numType, [_numType]), | 9744 ElementFactory.methodElement("-", _numType, [_numType]), |
| 9738 ElementFactory.methodElement("*", _numType, [_numType]), | 9745 ElementFactory.methodElement("*", _numType, [_numType]), |
| 9739 ElementFactory.methodElement("%", _numType, [_numType]), | 9746 ElementFactory.methodElement("%", _numType, [_numType]), |
| 9740 ElementFactory.methodElement("/", _doubleType, [_numType]), | 9747 ElementFactory.methodElement("/", _doubleType, [_numType]), |
| 9741 ElementFactory.methodElement("~/", _numType, [_numType]), | 9748 ElementFactory.methodElement("~/", _numType, [_numType]), |
| 9742 ElementFactory.methodElement("-", _numType, []), | 9749 ElementFactory.methodElement("-", _numType), |
| 9743 ElementFactory.methodElement("remainder", _numType, [_numType]), | 9750 ElementFactory.methodElement("remainder", _numType, [_numType]), |
| 9744 ElementFactory.methodElement("<", _boolType, [_numType]), | 9751 ElementFactory.methodElement("<", _boolType, [_numType]), |
| 9745 ElementFactory.methodElement("<=", _boolType, [_numType]), | 9752 ElementFactory.methodElement("<=", _boolType, [_numType]), |
| 9746 ElementFactory.methodElement(">", _boolType, [_numType]), | 9753 ElementFactory.methodElement(">", _boolType, [_numType]), |
| 9747 ElementFactory.methodElement(">=", _boolType, [_numType]), | 9754 ElementFactory.methodElement(">=", _boolType, [_numType]), |
| 9748 ElementFactory.methodElement("==", _boolType, [_objectType]), | 9755 ElementFactory.methodElement("==", _boolType, [_objectType]), |
| 9749 ElementFactory.methodElement("isNaN", _boolType, []), | 9756 ElementFactory.methodElement("isNaN", _boolType), |
| 9750 ElementFactory.methodElement("isNegative", _boolType, []), | 9757 ElementFactory.methodElement("isNegative", _boolType), |
| 9751 ElementFactory.methodElement("isInfinite", _boolType, []), | 9758 ElementFactory.methodElement("isInfinite", _boolType), |
| 9752 ElementFactory.methodElement("abs", _numType, []), | 9759 ElementFactory.methodElement("abs", _numType), |
| 9753 ElementFactory.methodElement("floor", _numType, []), | 9760 ElementFactory.methodElement("floor", _numType), |
| 9754 ElementFactory.methodElement("ceil", _numType, []), | 9761 ElementFactory.methodElement("ceil", _numType), |
| 9755 ElementFactory.methodElement("round", _numType, []), | 9762 ElementFactory.methodElement("round", _numType), |
| 9756 ElementFactory.methodElement("truncate", _numType, []), | 9763 ElementFactory.methodElement("truncate", _numType), |
| 9757 ElementFactory.methodElement("toInt", _intType, []), | 9764 ElementFactory.methodElement("toInt", _intType), |
| 9758 ElementFactory.methodElement("toDouble", _doubleType, []), | 9765 ElementFactory.methodElement("toDouble", _doubleType), |
| 9759 ElementFactory.methodElement("toStringAsFixed", _stringType, [_intType])
, | 9766 ElementFactory.methodElement("toStringAsFixed", _stringType, [_intType])
, |
| 9760 ElementFactory.methodElement("toStringAsExponential", _stringType, [_int
Type]), | 9767 ElementFactory.methodElement("toStringAsExponential", _stringType, [_int
Type]), |
| 9761 ElementFactory.methodElement("toStringAsPrecision", _stringType, [_intTy
pe]), | 9768 ElementFactory.methodElement("toStringAsPrecision", _stringType, [_intTy
pe]), |
| 9762 ElementFactory.methodElement("toRadixString", _stringType, [_intType])]; | 9769 ElementFactory.methodElement("toRadixString", _stringType, [_intType])]; |
| 9763 intElement.methods = <MethodElement> [ | 9770 intElement.methods = <MethodElement> [ |
| 9764 ElementFactory.methodElement("&", _intType, [_intType]), | 9771 ElementFactory.methodElement("&", _intType, [_intType]), |
| 9765 ElementFactory.methodElement("|", _intType, [_intType]), | 9772 ElementFactory.methodElement("|", _intType, [_intType]), |
| 9766 ElementFactory.methodElement("^", _intType, [_intType]), | 9773 ElementFactory.methodElement("^", _intType, [_intType]), |
| 9767 ElementFactory.methodElement("~", _intType, []), | 9774 ElementFactory.methodElement("~", _intType), |
| 9768 ElementFactory.methodElement("<<", _intType, [_intType]), | 9775 ElementFactory.methodElement("<<", _intType, [_intType]), |
| 9769 ElementFactory.methodElement(">>", _intType, [_intType]), | 9776 ElementFactory.methodElement(">>", _intType, [_intType]), |
| 9770 ElementFactory.methodElement("-", _intType, []), | 9777 ElementFactory.methodElement("-", _intType), |
| 9771 ElementFactory.methodElement("abs", _intType, []), | 9778 ElementFactory.methodElement("abs", _intType), |
| 9772 ElementFactory.methodElement("round", _intType, []), | 9779 ElementFactory.methodElement("round", _intType), |
| 9773 ElementFactory.methodElement("floor", _intType, []), | 9780 ElementFactory.methodElement("floor", _intType), |
| 9774 ElementFactory.methodElement("ceil", _intType, []), | 9781 ElementFactory.methodElement("ceil", _intType), |
| 9775 ElementFactory.methodElement("truncate", _intType, []), | 9782 ElementFactory.methodElement("truncate", _intType), |
| 9776 ElementFactory.methodElement("toString", _stringType, [])]; | 9783 ElementFactory.methodElement("toString", _stringType)]; |
| 9777 ConstructorElementImpl fromEnvironment = ElementFactory.constructorElement(i
ntElement, "fromEnvironment", true, []); | 9784 ConstructorElementImpl fromEnvironment = ElementFactory.constructorElement(i
ntElement, "fromEnvironment", true); |
| 9778 fromEnvironment.parameters = <ParameterElement> [ | 9785 fromEnvironment.parameters = <ParameterElement> [ |
| 9779 ElementFactory.requiredParameter2("name", stringType), | 9786 ElementFactory.requiredParameter2("name", stringType), |
| 9780 ElementFactory.namedParameter2("defaultValue", _intType)]; | 9787 ElementFactory.namedParameter2("defaultValue", _intType)]; |
| 9781 fromEnvironment.factory = true; | 9788 fromEnvironment.factory = true; |
| 9782 intElement.constructors = <ConstructorElement> [fromEnvironment]; | 9789 intElement.constructors = <ConstructorElement> [fromEnvironment]; |
| 9783 List<FieldElement> fields = <FieldElement> [ | 9790 List<FieldElement> fields = <FieldElement> [ |
| 9784 ElementFactory.fieldElement("NAN", true, false, true, _doubleType), | 9791 ElementFactory.fieldElement("NAN", true, false, true, _doubleType), |
| 9785 ElementFactory.fieldElement("INFINITY", true, false, true, _doubleType), | 9792 ElementFactory.fieldElement("INFINITY", true, false, true, _doubleType), |
| 9786 ElementFactory.fieldElement("NEGATIVE_INFINITY", true, false, true, _dou
bleType), | 9793 ElementFactory.fieldElement("NEGATIVE_INFINITY", true, false, true, _dou
bleType), |
| 9787 ElementFactory.fieldElement("MIN_POSITIVE", true, false, true, _doubleTy
pe), | 9794 ElementFactory.fieldElement("MIN_POSITIVE", true, false, true, _doubleTy
pe), |
| 9788 ElementFactory.fieldElement("MAX_FINITE", true, false, true, _doubleType
)]; | 9795 ElementFactory.fieldElement("MAX_FINITE", true, false, true, _doubleType
)]; |
| 9789 doubleElement.fields = fields; | 9796 doubleElement.fields = fields; |
| 9790 int fieldCount = fields.length; | 9797 int fieldCount = fields.length; |
| 9791 List<PropertyAccessorElement> accessors = new List<PropertyAccessorElement>(
fieldCount); | 9798 List<PropertyAccessorElement> accessors = new List<PropertyAccessorElement>(
fieldCount); |
| 9792 for (int i = 0; i < fieldCount; i++) { | 9799 for (int i = 0; i < fieldCount; i++) { |
| 9793 accessors[i] = fields[i].getter; | 9800 accessors[i] = fields[i].getter; |
| 9794 } | 9801 } |
| 9795 doubleElement.accessors = accessors; | 9802 doubleElement.accessors = accessors; |
| 9796 doubleElement.methods = <MethodElement> [ | 9803 doubleElement.methods = <MethodElement> [ |
| 9797 ElementFactory.methodElement("remainder", _doubleType, [_numType]), | 9804 ElementFactory.methodElement("remainder", _doubleType, [_numType]), |
| 9798 ElementFactory.methodElement("+", _doubleType, [_numType]), | 9805 ElementFactory.methodElement("+", _doubleType, [_numType]), |
| 9799 ElementFactory.methodElement("-", _doubleType, [_numType]), | 9806 ElementFactory.methodElement("-", _doubleType, [_numType]), |
| 9800 ElementFactory.methodElement("*", _doubleType, [_numType]), | 9807 ElementFactory.methodElement("*", _doubleType, [_numType]), |
| 9801 ElementFactory.methodElement("%", _doubleType, [_numType]), | 9808 ElementFactory.methodElement("%", _doubleType, [_numType]), |
| 9802 ElementFactory.methodElement("/", _doubleType, [_numType]), | 9809 ElementFactory.methodElement("/", _doubleType, [_numType]), |
| 9803 ElementFactory.methodElement("~/", _doubleType, [_numType]), | 9810 ElementFactory.methodElement("~/", _doubleType, [_numType]), |
| 9804 ElementFactory.methodElement("-", _doubleType, []), | 9811 ElementFactory.methodElement("-", _doubleType), |
| 9805 ElementFactory.methodElement("abs", _doubleType, []), | 9812 ElementFactory.methodElement("abs", _doubleType), |
| 9806 ElementFactory.methodElement("round", _doubleType, []), | 9813 ElementFactory.methodElement("round", _doubleType), |
| 9807 ElementFactory.methodElement("floor", _doubleType, []), | 9814 ElementFactory.methodElement("floor", _doubleType), |
| 9808 ElementFactory.methodElement("ceil", _doubleType, []), | 9815 ElementFactory.methodElement("ceil", _doubleType), |
| 9809 ElementFactory.methodElement("truncate", _doubleType, []), | 9816 ElementFactory.methodElement("truncate", _doubleType), |
| 9810 ElementFactory.methodElement("toString", _stringType, [])]; | 9817 ElementFactory.methodElement("toString", _stringType)]; |
| 9811 } | 9818 } |
| 9812 | 9819 |
| 9813 /** | 9820 /** |
| 9814 * Given a class element representing a class with type parameters, propagate
those type | 9821 * Given a class element representing a class with type parameters, propagate
those type |
| 9815 * parameters to all of the accessors, methods and constructors defined for th
e class. | 9822 * parameters to all of the accessors, methods and constructors defined for th
e class. |
| 9816 * | 9823 * |
| 9817 * @param classElement the element representing the class with type parameters | 9824 * @param classElement the element representing the class with type parameters |
| 9818 */ | 9825 */ |
| 9819 void _propagateTypeArguments(ClassElementImpl classElement) { | 9826 void _propagateTypeArguments(ClassElementImpl classElement) { |
| 9820 List<DartType> typeArguments = TypeParameterTypeImpl.getTypes(classElement.t
ypeParameters); | 9827 List<DartType> typeArguments = TypeParameterTypeImpl.getTypes(classElement.t
ypeParameters); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9866 manager.exitScope(); | 9873 manager.exitScope(); |
| 9867 fail("Expected IllegalStateException"); | 9874 fail("Expected IllegalStateException"); |
| 9868 } on IllegalStateException catch (exception) { | 9875 } on IllegalStateException catch (exception) { |
| 9869 // Expected | 9876 // Expected |
| 9870 } | 9877 } |
| 9871 } | 9878 } |
| 9872 | 9879 |
| 9873 void test_getType_enclosedOverride() { | 9880 void test_getType_enclosedOverride() { |
| 9874 TypeOverrideManager manager = new TypeOverrideManager(); | 9881 TypeOverrideManager manager = new TypeOverrideManager(); |
| 9875 LocalVariableElementImpl element = ElementFactory.localVariableElement2("v")
; | 9882 LocalVariableElementImpl element = ElementFactory.localVariableElement2("v")
; |
| 9876 InterfaceType type = ElementFactory.classElement2("C", []).type; | 9883 InterfaceType type = ElementFactory.classElement2("C").type; |
| 9877 manager.enterScope(); | 9884 manager.enterScope(); |
| 9878 manager.setType(element, type); | 9885 manager.setType(element, type); |
| 9879 manager.enterScope(); | 9886 manager.enterScope(); |
| 9880 expect(manager.getType(element), same(type)); | 9887 expect(manager.getType(element), same(type)); |
| 9881 } | 9888 } |
| 9882 | 9889 |
| 9883 void test_getType_immediateOverride() { | 9890 void test_getType_immediateOverride() { |
| 9884 TypeOverrideManager manager = new TypeOverrideManager(); | 9891 TypeOverrideManager manager = new TypeOverrideManager(); |
| 9885 LocalVariableElementImpl element = ElementFactory.localVariableElement2("v")
; | 9892 LocalVariableElementImpl element = ElementFactory.localVariableElement2("v")
; |
| 9886 InterfaceType type = ElementFactory.classElement2("C", []).type; | 9893 InterfaceType type = ElementFactory.classElement2("C").type; |
| 9887 manager.enterScope(); | 9894 manager.enterScope(); |
| 9888 manager.setType(element, type); | 9895 manager.setType(element, type); |
| 9889 expect(manager.getType(element), same(type)); | 9896 expect(manager.getType(element), same(type)); |
| 9890 } | 9897 } |
| 9891 | 9898 |
| 9892 void test_getType_noOverride() { | 9899 void test_getType_noOverride() { |
| 9893 TypeOverrideManager manager = new TypeOverrideManager(); | 9900 TypeOverrideManager manager = new TypeOverrideManager(); |
| 9894 manager.enterScope(); | 9901 manager.enterScope(); |
| 9895 expect(manager.getType(ElementFactory.localVariableElement2("v")), isNull); | 9902 expect(manager.getType(ElementFactory.localVariableElement2("v")), isNull); |
| 9896 } | 9903 } |
| (...skipping 1305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11202 } | 11209 } |
| 11203 } | 11210 } |
| 11204 | 11211 |
| 11205 class TypeProviderImplTest extends EngineTestCase { | 11212 class TypeProviderImplTest extends EngineTestCase { |
| 11206 void test_creation() { | 11213 void test_creation() { |
| 11207 // | 11214 // |
| 11208 // Create a mock library element with the types expected to be in dart:core.
We cannot use | 11215 // Create a mock library element with the types expected to be in dart:core.
We cannot use |
| 11209 // either ElementFactory or TestTypeProvider (which uses ElementFactory) bec
ause we side-effect | 11216 // either ElementFactory or TestTypeProvider (which uses ElementFactory) bec
ause we side-effect |
| 11210 // the elements in ways that would break other tests. | 11217 // the elements in ways that would break other tests. |
| 11211 // | 11218 // |
| 11212 InterfaceType objectType = _classElement("Object", null, []).type; | 11219 InterfaceType objectType = _classElement("Object", null).type; |
| 11213 InterfaceType boolType = _classElement("bool", objectType, []).type; | 11220 InterfaceType boolType = _classElement("bool", objectType).type; |
| 11214 InterfaceType numType = _classElement("num", objectType, []).type; | 11221 InterfaceType numType = _classElement("num", objectType).type; |
| 11215 InterfaceType doubleType = _classElement("double", numType, []).type; | 11222 InterfaceType doubleType = _classElement("double", numType).type; |
| 11216 InterfaceType functionType = _classElement("Function", objectType, []).type; | 11223 InterfaceType functionType = _classElement("Function", objectType).type; |
| 11217 InterfaceType intType = _classElement("int", numType, []).type; | 11224 InterfaceType intType = _classElement("int", numType).type; |
| 11218 InterfaceType listType = _classElement("List", objectType, ["E"]).type; | 11225 InterfaceType listType = _classElement("List", objectType, ["E"]).type; |
| 11219 InterfaceType mapType = _classElement("Map", objectType, ["K", "V"]).type; | 11226 InterfaceType mapType = _classElement("Map", objectType, ["K", "V"]).type; |
| 11220 InterfaceType stackTraceType = _classElement("StackTrace", objectType, []).t
ype; | 11227 InterfaceType stackTraceType = _classElement("StackTrace", objectType).type; |
| 11221 InterfaceType stringType = _classElement("String", objectType, []).type; | 11228 InterfaceType stringType = _classElement("String", objectType).type; |
| 11222 InterfaceType symbolType = _classElement("Symbol", objectType, []).type; | 11229 InterfaceType symbolType = _classElement("Symbol", objectType).type; |
| 11223 InterfaceType typeType = _classElement("Type", objectType, []).type; | 11230 InterfaceType typeType = _classElement("Type", objectType).type; |
| 11224 CompilationUnitElementImpl coreUnit = new CompilationUnitElementImpl("core.d
art"); | 11231 CompilationUnitElementImpl coreUnit = new CompilationUnitElementImpl("core.d
art"); |
| 11225 coreUnit.types = <ClassElement> [ | 11232 coreUnit.types = <ClassElement> [ |
| 11226 boolType.element, | 11233 boolType.element, |
| 11227 doubleType.element, | 11234 doubleType.element, |
| 11228 functionType.element, | 11235 functionType.element, |
| 11229 intType.element, | 11236 intType.element, |
| 11230 listType.element, | 11237 listType.element, |
| 11231 mapType.element, | 11238 mapType.element, |
| 11232 objectType.element, | 11239 objectType.element, |
| 11233 stackTraceType.element, | 11240 stackTraceType.element, |
| (...skipping 14 matching lines...) Expand all Loading... |
| 11248 expect(provider.intType, same(intType)); | 11255 expect(provider.intType, same(intType)); |
| 11249 expect(provider.listType, same(listType)); | 11256 expect(provider.listType, same(listType)); |
| 11250 expect(provider.mapType, same(mapType)); | 11257 expect(provider.mapType, same(mapType)); |
| 11251 expect(provider.objectType, same(objectType)); | 11258 expect(provider.objectType, same(objectType)); |
| 11252 expect(provider.stackTraceType, same(stackTraceType)); | 11259 expect(provider.stackTraceType, same(stackTraceType)); |
| 11253 expect(provider.stringType, same(stringType)); | 11260 expect(provider.stringType, same(stringType)); |
| 11254 expect(provider.symbolType, same(symbolType)); | 11261 expect(provider.symbolType, same(symbolType)); |
| 11255 expect(provider.typeType, same(typeType)); | 11262 expect(provider.typeType, same(typeType)); |
| 11256 } | 11263 } |
| 11257 | 11264 |
| 11258 ClassElement _classElement(String typeName, InterfaceType superclassType, List
<String> parameterNames) { | 11265 ClassElement _classElement(String typeName, InterfaceType superclassType, [Lis
t<String> parameterNames]) { |
| 11259 ClassElementImpl element = new ClassElementImpl.forNode(AstFactory.identifie
r3(typeName)); | 11266 ClassElementImpl element = new ClassElementImpl.forNode(AstFactory.identifie
r3(typeName)); |
| 11260 element.supertype = superclassType; | 11267 element.supertype = superclassType; |
| 11261 InterfaceTypeImpl type = new InterfaceTypeImpl.con1(element); | 11268 InterfaceTypeImpl type = new InterfaceTypeImpl.con1(element); |
| 11262 element.type = type; | 11269 element.type = type; |
| 11263 int count = parameterNames.length; | 11270 if (parameterNames != null) { |
| 11264 if (count > 0) { | 11271 int count = parameterNames.length; |
| 11265 List<TypeParameterElementImpl> typeParameters = new List<TypeParameterElem
entImpl>(count); | 11272 if (count > 0) { |
| 11266 List<TypeParameterTypeImpl> typeArguments = new List<TypeParameterTypeImpl
>(count); | 11273 List<TypeParameterElementImpl> typeParameters = new List<TypeParameterEl
ementImpl>(count); |
| 11267 for (int i = 0; i < count; i++) { | 11274 List<TypeParameterTypeImpl> typeArguments = new List<TypeParameterTypeIm
pl>(count); |
| 11268 TypeParameterElementImpl typeParameter = new TypeParameterElementImpl.fo
rNode(AstFactory.identifier3(parameterNames[i])); | 11275 for (int i = 0; i < count; i++) { |
| 11269 typeParameters[i] = typeParameter; | 11276 TypeParameterElementImpl typeParameter = new TypeParameterElementImpl.
forNode(AstFactory.identifier3(parameterNames[i])); |
| 11270 typeArguments[i] = new TypeParameterTypeImpl(typeParameter); | 11277 typeParameters[i] = typeParameter; |
| 11271 typeParameter.type = typeArguments[i]; | 11278 typeArguments[i] = new TypeParameterTypeImpl(typeParameter); |
| 11279 typeParameter.type = typeArguments[i]; |
| 11280 } |
| 11281 element.typeParameters = typeParameters; |
| 11282 type.typeArguments = typeArguments; |
| 11272 } | 11283 } |
| 11273 element.typeParameters = typeParameters; | |
| 11274 type.typeArguments = typeArguments; | |
| 11275 } | 11284 } |
| 11276 return element; | 11285 return element; |
| 11277 } | 11286 } |
| 11278 } | 11287 } |
| 11279 | 11288 |
| 11280 class TypeResolverVisitorTest extends EngineTestCase { | 11289 class TypeResolverVisitorTest extends EngineTestCase { |
| 11281 /** | 11290 /** |
| 11282 * The error listener to which errors will be reported. | 11291 * The error listener to which errors will be reported. |
| 11283 */ | 11292 */ |
| 11284 GatheringErrorListener _listener; | 11293 GatheringErrorListener _listener; |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11324 _listener.assertNoErrors(); | 11333 _listener.assertNoErrors(); |
| 11325 } | 11334 } |
| 11326 | 11335 |
| 11327 void fail_visitMethodDeclaration() { | 11336 void fail_visitMethodDeclaration() { |
| 11328 fail("Not yet tested"); | 11337 fail("Not yet tested"); |
| 11329 _listener.assertNoErrors(); | 11338 _listener.assertNoErrors(); |
| 11330 } | 11339 } |
| 11331 | 11340 |
| 11332 void fail_visitVariableDeclaration() { | 11341 void fail_visitVariableDeclaration() { |
| 11333 fail("Not yet tested"); | 11342 fail("Not yet tested"); |
| 11334 ClassElement type = ElementFactory.classElement2("A", []); | 11343 ClassElement type = ElementFactory.classElement2("A"); |
| 11335 VariableDeclaration node = AstFactory.variableDeclaration("a"); | 11344 VariableDeclaration node = AstFactory.variableDeclaration("a"); |
| 11336 AstFactory.variableDeclarationList(null, AstFactory.typeName(type, []), [nod
e]); | 11345 AstFactory.variableDeclarationList(null, AstFactory.typeName(type), [node]); |
| 11337 //resolve(node); | 11346 //resolve(node); |
| 11338 expect(node.name.staticType, same(type.type)); | 11347 expect(node.name.staticType, same(type.type)); |
| 11339 _listener.assertNoErrors(); | 11348 _listener.assertNoErrors(); |
| 11340 } | 11349 } |
| 11341 | 11350 |
| 11342 @override | 11351 @override |
| 11343 void setUp() { | 11352 void setUp() { |
| 11344 _listener = new GatheringErrorListener(); | 11353 _listener = new GatheringErrorListener(); |
| 11345 SourceFactory factory = new SourceFactory([new FileUriResolver()]); | 11354 SourceFactory factory = new SourceFactory([new FileUriResolver()]); |
| 11346 AnalysisContextImpl context = new AnalysisContextImpl(); | 11355 AnalysisContextImpl context = new AnalysisContextImpl(); |
| 11347 context.sourceFactory = factory; | 11356 context.sourceFactory = factory; |
| 11348 Source librarySource = new FileBasedSource.con1(FileUtilities2.createFile("/
lib.dart")); | 11357 Source librarySource = new FileBasedSource.con1(FileUtilities2.createFile("/
lib.dart")); |
| 11349 _library = new Library(context, _listener, librarySource); | 11358 _library = new Library(context, _listener, librarySource); |
| 11350 LibraryElementImpl element = new LibraryElementImpl.forNode(context, AstFact
ory.libraryIdentifier2(["lib"])); | 11359 LibraryElementImpl element = new LibraryElementImpl.forNode(context, AstFact
ory.libraryIdentifier2(["lib"])); |
| 11351 element.definingCompilationUnit = new CompilationUnitElementImpl("lib.dart")
; | 11360 element.definingCompilationUnit = new CompilationUnitElementImpl("lib.dart")
; |
| 11352 _library.libraryElement = element; | 11361 _library.libraryElement = element; |
| 11353 _typeProvider = new TestTypeProvider(); | 11362 _typeProvider = new TestTypeProvider(); |
| 11354 _visitor = new TypeResolverVisitor.con1(_library, librarySource, _typeProvid
er); | 11363 _visitor = new TypeResolverVisitor.con1(_library, librarySource, _typeProvid
er); |
| 11355 _implicitConstructorBuilder = new ImplicitConstructorBuilder.con1(_library,
librarySource, _typeProvider); | 11364 _implicitConstructorBuilder = new ImplicitConstructorBuilder.con1(_library,
librarySource, _typeProvider); |
| 11356 } | 11365 } |
| 11357 | 11366 |
| 11358 void test_visitCatchClause_exception() { | 11367 void test_visitCatchClause_exception() { |
| 11359 // catch (e) | 11368 // catch (e) |
| 11360 CatchClause clause = AstFactory.catchClause("e", []); | 11369 CatchClause clause = AstFactory.catchClause("e"); |
| 11361 SimpleIdentifier exceptionParameter = clause.exceptionParameter; | 11370 SimpleIdentifier exceptionParameter = clause.exceptionParameter; |
| 11362 exceptionParameter.staticElement = new LocalVariableElementImpl.forNode(exce
ptionParameter); | 11371 exceptionParameter.staticElement = new LocalVariableElementImpl.forNode(exce
ptionParameter); |
| 11363 _resolveCatchClause(clause, _typeProvider.dynamicType, null, []); | 11372 _resolveCatchClause(clause, _typeProvider.dynamicType, null); |
| 11364 _listener.assertNoErrors(); | 11373 _listener.assertNoErrors(); |
| 11365 } | 11374 } |
| 11366 | 11375 |
| 11367 void test_visitCatchClause_exception_stackTrace() { | 11376 void test_visitCatchClause_exception_stackTrace() { |
| 11368 // catch (e, s) | 11377 // catch (e, s) |
| 11369 CatchClause clause = AstFactory.catchClause2("e", "s", []); | 11378 CatchClause clause = AstFactory.catchClause2("e", "s"); |
| 11370 SimpleIdentifier exceptionParameter = clause.exceptionParameter; | 11379 SimpleIdentifier exceptionParameter = clause.exceptionParameter; |
| 11371 exceptionParameter.staticElement = new LocalVariableElementImpl.forNode(exce
ptionParameter); | 11380 exceptionParameter.staticElement = new LocalVariableElementImpl.forNode(exce
ptionParameter); |
| 11372 SimpleIdentifier stackTraceParameter = clause.stackTraceParameter; | 11381 SimpleIdentifier stackTraceParameter = clause.stackTraceParameter; |
| 11373 stackTraceParameter.staticElement = new LocalVariableElementImpl.forNode(sta
ckTraceParameter); | 11382 stackTraceParameter.staticElement = new LocalVariableElementImpl.forNode(sta
ckTraceParameter); |
| 11374 _resolveCatchClause(clause, _typeProvider.dynamicType, _typeProvider.stackTr
aceType, []); | 11383 _resolveCatchClause(clause, _typeProvider.dynamicType, _typeProvider.stackTr
aceType); |
| 11375 _listener.assertNoErrors(); | 11384 _listener.assertNoErrors(); |
| 11376 } | 11385 } |
| 11377 | 11386 |
| 11378 void test_visitCatchClause_on_exception() { | 11387 void test_visitCatchClause_on_exception() { |
| 11379 // on E catch (e) | 11388 // on E catch (e) |
| 11380 ClassElement exceptionElement = ElementFactory.classElement2("E", []); | 11389 ClassElement exceptionElement = ElementFactory.classElement2("E"); |
| 11381 TypeName exceptionType = AstFactory.typeName(exceptionElement, []); | 11390 TypeName exceptionType = AstFactory.typeName(exceptionElement); |
| 11382 CatchClause clause = AstFactory.catchClause4(exceptionType, "e", []); | 11391 CatchClause clause = AstFactory.catchClause4(exceptionType, "e"); |
| 11383 SimpleIdentifier exceptionParameter = clause.exceptionParameter; | 11392 SimpleIdentifier exceptionParameter = clause.exceptionParameter; |
| 11384 exceptionParameter.staticElement = new LocalVariableElementImpl.forNode(exce
ptionParameter); | 11393 exceptionParameter.staticElement = new LocalVariableElementImpl.forNode(exce
ptionParameter); |
| 11385 _resolveCatchClause(clause, exceptionElement.type, null, [exceptionElement])
; | 11394 _resolveCatchClause(clause, exceptionElement.type, null, [exceptionElement])
; |
| 11386 _listener.assertNoErrors(); | 11395 _listener.assertNoErrors(); |
| 11387 } | 11396 } |
| 11388 | 11397 |
| 11389 void test_visitCatchClause_on_exception_stackTrace() { | 11398 void test_visitCatchClause_on_exception_stackTrace() { |
| 11390 // on E catch (e, s) | 11399 // on E catch (e, s) |
| 11391 ClassElement exceptionElement = ElementFactory.classElement2("E", []); | 11400 ClassElement exceptionElement = ElementFactory.classElement2("E"); |
| 11392 TypeName exceptionType = AstFactory.typeName(exceptionElement, []); | 11401 TypeName exceptionType = AstFactory.typeName(exceptionElement); |
| 11393 (exceptionType.name as SimpleIdentifier).staticElement = exceptionElement; | 11402 (exceptionType.name as SimpleIdentifier).staticElement = exceptionElement; |
| 11394 CatchClause clause = AstFactory.catchClause5(exceptionType, "e", "s", []); | 11403 CatchClause clause = AstFactory.catchClause5(exceptionType, "e", "s"); |
| 11395 SimpleIdentifier exceptionParameter = clause.exceptionParameter; | 11404 SimpleIdentifier exceptionParameter = clause.exceptionParameter; |
| 11396 exceptionParameter.staticElement = new LocalVariableElementImpl.forNode(exce
ptionParameter); | 11405 exceptionParameter.staticElement = new LocalVariableElementImpl.forNode(exce
ptionParameter); |
| 11397 SimpleIdentifier stackTraceParameter = clause.stackTraceParameter; | 11406 SimpleIdentifier stackTraceParameter = clause.stackTraceParameter; |
| 11398 stackTraceParameter.staticElement = new LocalVariableElementImpl.forNode(sta
ckTraceParameter); | 11407 stackTraceParameter.staticElement = new LocalVariableElementImpl.forNode(sta
ckTraceParameter); |
| 11399 _resolveCatchClause(clause, exceptionElement.type, _typeProvider.stackTraceT
ype, [exceptionElement]); | 11408 _resolveCatchClause(clause, exceptionElement.type, _typeProvider.stackTraceT
ype, [exceptionElement]); |
| 11400 _listener.assertNoErrors(); | 11409 _listener.assertNoErrors(); |
| 11401 } | 11410 } |
| 11402 | 11411 |
| 11403 void test_visitClassDeclaration() { | 11412 void test_visitClassDeclaration() { |
| 11404 // class A extends B with C implements D {} | 11413 // class A extends B with C implements D {} |
| 11405 // class B {} | 11414 // class B {} |
| 11406 // class C {} | 11415 // class C {} |
| 11407 // class D {} | 11416 // class D {} |
| 11408 ClassElement elementA = ElementFactory.classElement2("A", []); | 11417 ClassElement elementA = ElementFactory.classElement2("A"); |
| 11409 ClassElement elementB = ElementFactory.classElement2("B", []); | 11418 ClassElement elementB = ElementFactory.classElement2("B"); |
| 11410 ClassElement elementC = ElementFactory.classElement2("C", []); | 11419 ClassElement elementC = ElementFactory.classElement2("C"); |
| 11411 ClassElement elementD = ElementFactory.classElement2("D", []); | 11420 ClassElement elementD = ElementFactory.classElement2("D"); |
| 11412 ExtendsClause extendsClause = AstFactory.extendsClause(AstFactory.typeName(e
lementB, [])); | 11421 ExtendsClause extendsClause = AstFactory.extendsClause(AstFactory.typeName(e
lementB)); |
| 11413 WithClause withClause = AstFactory.withClause([AstFactory.typeName(elementC,
[])]); | 11422 WithClause withClause = AstFactory.withClause([AstFactory.typeName(elementC)
]); |
| 11414 ImplementsClause implementsClause = AstFactory.implementsClause([AstFactory.
typeName(elementD, [])]); | 11423 ImplementsClause implementsClause = AstFactory.implementsClause([AstFactory.
typeName(elementD)]); |
| 11415 ClassDeclaration declaration = AstFactory.classDeclaration(null, "A", null,
extendsClause, withClause, implementsClause, []); | 11424 ClassDeclaration declaration = AstFactory.classDeclaration(null, "A", null,
extendsClause, withClause, implementsClause); |
| 11416 declaration.name.staticElement = elementA; | 11425 declaration.name.staticElement = elementA; |
| 11417 _resolveNode(declaration, [elementA, elementB, elementC, elementD]); | 11426 _resolveNode(declaration, [elementA, elementB, elementC, elementD]); |
| 11418 expect(elementA.supertype, same(elementB.type)); | 11427 expect(elementA.supertype, same(elementB.type)); |
| 11419 List<InterfaceType> mixins = elementA.mixins; | 11428 List<InterfaceType> mixins = elementA.mixins; |
| 11420 expect(mixins, hasLength(1)); | 11429 expect(mixins, hasLength(1)); |
| 11421 expect(mixins[0], same(elementC.type)); | 11430 expect(mixins[0], same(elementC.type)); |
| 11422 List<InterfaceType> interfaces = elementA.interfaces; | 11431 List<InterfaceType> interfaces = elementA.interfaces; |
| 11423 expect(interfaces, hasLength(1)); | 11432 expect(interfaces, hasLength(1)); |
| 11424 expect(interfaces[0], same(elementD.type)); | 11433 expect(interfaces[0], same(elementD.type)); |
| 11425 _listener.assertNoErrors(); | 11434 _listener.assertNoErrors(); |
| 11426 } | 11435 } |
| 11427 | 11436 |
| 11428 void test_visitClassDeclaration_instanceMemberCollidesWithClass() { | 11437 void test_visitClassDeclaration_instanceMemberCollidesWithClass() { |
| 11429 // class A {} | 11438 // class A {} |
| 11430 // class B extends A { | 11439 // class B extends A { |
| 11431 // void A() {} | 11440 // void A() {} |
| 11432 // } | 11441 // } |
| 11433 ClassElementImpl elementA = ElementFactory.classElement2("A", []); | 11442 ClassElementImpl elementA = ElementFactory.classElement2("A"); |
| 11434 ClassElementImpl elementB = ElementFactory.classElement2("B", []); | 11443 ClassElementImpl elementB = ElementFactory.classElement2("B"); |
| 11435 elementB.methods = <MethodElement> [ElementFactory.methodElement("A", VoidTy
peImpl.instance, [])]; | 11444 elementB.methods = <MethodElement> [ElementFactory.methodElement("A", VoidTy
peImpl.instance)]; |
| 11436 ExtendsClause extendsClause = AstFactory.extendsClause(AstFactory.typeName(e
lementA, [])); | 11445 ExtendsClause extendsClause = AstFactory.extendsClause(AstFactory.typeName(e
lementA)); |
| 11437 ClassDeclaration declaration = AstFactory.classDeclaration(null, "B", null,
extendsClause, null, null, []); | 11446 ClassDeclaration declaration = AstFactory.classDeclaration(null, "B", null,
extendsClause, null, null); |
| 11438 declaration.name.staticElement = elementB; | 11447 declaration.name.staticElement = elementB; |
| 11439 _resolveNode(declaration, [elementA, elementB]); | 11448 _resolveNode(declaration, [elementA, elementB]); |
| 11440 expect(elementB.supertype, same(elementA.type)); | 11449 expect(elementB.supertype, same(elementA.type)); |
| 11441 _listener.assertNoErrors(); | 11450 _listener.assertNoErrors(); |
| 11442 } | 11451 } |
| 11443 | 11452 |
| 11444 void test_visitClassTypeAlias() { | 11453 void test_visitClassTypeAlias() { |
| 11445 // class A = B with C implements D; | 11454 // class A = B with C implements D; |
| 11446 ClassElement elementA = ElementFactory.classElement2("A", []); | 11455 ClassElement elementA = ElementFactory.classElement2("A"); |
| 11447 ClassElement elementB = ElementFactory.classElement2("B", []); | 11456 ClassElement elementB = ElementFactory.classElement2("B"); |
| 11448 ClassElement elementC = ElementFactory.classElement2("C", []); | 11457 ClassElement elementC = ElementFactory.classElement2("C"); |
| 11449 ClassElement elementD = ElementFactory.classElement2("D", []); | 11458 ClassElement elementD = ElementFactory.classElement2("D"); |
| 11450 WithClause withClause = AstFactory.withClause([AstFactory.typeName(elementC,
[])]); | 11459 WithClause withClause = AstFactory.withClause([AstFactory.typeName(elementC)
]); |
| 11451 ImplementsClause implementsClause = AstFactory.implementsClause([AstFactory.
typeName(elementD, [])]); | 11460 ImplementsClause implementsClause = AstFactory.implementsClause([AstFactory.
typeName(elementD)]); |
| 11452 ClassTypeAlias alias = AstFactory.classTypeAlias("A", null, null, AstFactory
.typeName(elementB, []), withClause, implementsClause); | 11461 ClassTypeAlias alias = AstFactory.classTypeAlias("A", null, null, AstFactory
.typeName(elementB), withClause, implementsClause); |
| 11453 alias.name.staticElement = elementA; | 11462 alias.name.staticElement = elementA; |
| 11454 _resolveNode(alias, [elementA, elementB, elementC, elementD]); | 11463 _resolveNode(alias, [elementA, elementB, elementC, elementD]); |
| 11455 expect(elementA.supertype, same(elementB.type)); | 11464 expect(elementA.supertype, same(elementB.type)); |
| 11456 List<InterfaceType> mixins = elementA.mixins; | 11465 List<InterfaceType> mixins = elementA.mixins; |
| 11457 expect(mixins, hasLength(1)); | 11466 expect(mixins, hasLength(1)); |
| 11458 expect(mixins[0], same(elementC.type)); | 11467 expect(mixins[0], same(elementC.type)); |
| 11459 List<InterfaceType> interfaces = elementA.interfaces; | 11468 List<InterfaceType> interfaces = elementA.interfaces; |
| 11460 expect(interfaces, hasLength(1)); | 11469 expect(interfaces, hasLength(1)); |
| 11461 expect(interfaces[0], same(elementD.type)); | 11470 expect(interfaces[0], same(elementD.type)); |
| 11462 _listener.assertNoErrors(); | 11471 _listener.assertNoErrors(); |
| 11463 } | 11472 } |
| 11464 | 11473 |
| 11465 void test_visitFieldFormalParameter_functionType() { | 11474 void test_visitFieldFormalParameter_functionType() { |
| 11466 InterfaceType intType = _typeProvider.intType; | 11475 InterfaceType intType = _typeProvider.intType; |
| 11467 TypeName intTypeName = AstFactory.typeName4("int", []); | 11476 TypeName intTypeName = AstFactory.typeName4("int"); |
| 11468 String innerParameterName = "a"; | 11477 String innerParameterName = "a"; |
| 11469 SimpleFormalParameter parameter = AstFactory.simpleFormalParameter3(innerPar
ameterName); | 11478 SimpleFormalParameter parameter = AstFactory.simpleFormalParameter3(innerPar
ameterName); |
| 11470 parameter.identifier.staticElement = ElementFactory.requiredParameter(innerP
arameterName); | 11479 parameter.identifier.staticElement = ElementFactory.requiredParameter(innerP
arameterName); |
| 11471 String outerParameterName = "p"; | 11480 String outerParameterName = "p"; |
| 11472 FormalParameter node = AstFactory.fieldFormalParameter(null, intTypeName, ou
terParameterName, AstFactory.formalParameterList([parameter])); | 11481 FormalParameter node = AstFactory.fieldFormalParameter(null, intTypeName, ou
terParameterName, AstFactory.formalParameterList([parameter])); |
| 11473 node.identifier.staticElement = ElementFactory.requiredParameter(outerParame
terName); | 11482 node.identifier.staticElement = ElementFactory.requiredParameter(outerParame
terName); |
| 11474 DartType parameterType = _resolveFormalParameter(node, [intType.element]); | 11483 DartType parameterType = _resolveFormalParameter(node, [intType.element]); |
| 11475 EngineTestCase.assertInstanceOf((obj) => obj is FunctionType, FunctionType,
parameterType); | 11484 EngineTestCase.assertInstanceOf((obj) => obj is FunctionType, FunctionType,
parameterType); |
| 11476 FunctionType functionType = parameterType as FunctionType; | 11485 FunctionType functionType = parameterType as FunctionType; |
| 11477 expect(functionType.returnType, same(intType)); | 11486 expect(functionType.returnType, same(intType)); |
| 11478 expect(functionType.parameters, hasLength(1)); | 11487 expect(functionType.parameters, hasLength(1)); |
| 11479 _listener.assertNoErrors(); | 11488 _listener.assertNoErrors(); |
| 11480 } | 11489 } |
| 11481 | 11490 |
| 11482 void test_visitFieldFormalParameter_noType() { | 11491 void test_visitFieldFormalParameter_noType() { |
| 11483 String parameterName = "p"; | 11492 String parameterName = "p"; |
| 11484 FormalParameter node = AstFactory.fieldFormalParameter(Keyword.VAR, null, pa
rameterName); | 11493 FormalParameter node = AstFactory.fieldFormalParameter(Keyword.VAR, null, pa
rameterName); |
| 11485 node.identifier.staticElement = ElementFactory.requiredParameter(parameterNa
me); | 11494 node.identifier.staticElement = ElementFactory.requiredParameter(parameterNa
me); |
| 11486 expect(_resolveFormalParameter(node, []), same(_typeProvider.dynamicType)); | 11495 expect(_resolveFormalParameter(node), same(_typeProvider.dynamicType)); |
| 11487 _listener.assertNoErrors(); | 11496 _listener.assertNoErrors(); |
| 11488 } | 11497 } |
| 11489 | 11498 |
| 11490 void test_visitFieldFormalParameter_type() { | 11499 void test_visitFieldFormalParameter_type() { |
| 11491 InterfaceType intType = _typeProvider.intType; | 11500 InterfaceType intType = _typeProvider.intType; |
| 11492 TypeName intTypeName = AstFactory.typeName4("int", []); | 11501 TypeName intTypeName = AstFactory.typeName4("int"); |
| 11493 String parameterName = "p"; | 11502 String parameterName = "p"; |
| 11494 FormalParameter node = AstFactory.fieldFormalParameter(null, intTypeName, pa
rameterName); | 11503 FormalParameter node = AstFactory.fieldFormalParameter(null, intTypeName, pa
rameterName); |
| 11495 node.identifier.staticElement = ElementFactory.requiredParameter(parameterNa
me); | 11504 node.identifier.staticElement = ElementFactory.requiredParameter(parameterNa
me); |
| 11496 expect(_resolveFormalParameter(node, [intType.element]), same(intType)); | 11505 expect(_resolveFormalParameter(node, [intType.element]), same(intType)); |
| 11497 _listener.assertNoErrors(); | 11506 _listener.assertNoErrors(); |
| 11498 } | 11507 } |
| 11499 | 11508 |
| 11500 void test_visitSimpleFormalParameter_noType() { | 11509 void test_visitSimpleFormalParameter_noType() { |
| 11501 // p | 11510 // p |
| 11502 FormalParameter node = AstFactory.simpleFormalParameter3("p"); | 11511 FormalParameter node = AstFactory.simpleFormalParameter3("p"); |
| 11503 node.identifier.staticElement = new ParameterElementImpl.forNode(AstFactory.
identifier3("p")); | 11512 node.identifier.staticElement = new ParameterElementImpl.forNode(AstFactory.
identifier3("p")); |
| 11504 expect(_resolveFormalParameter(node, []), same(_typeProvider.dynamicType)); | 11513 expect(_resolveFormalParameter(node), same(_typeProvider.dynamicType)); |
| 11505 _listener.assertNoErrors(); | 11514 _listener.assertNoErrors(); |
| 11506 } | 11515 } |
| 11507 | 11516 |
| 11508 void test_visitSimpleFormalParameter_type() { | 11517 void test_visitSimpleFormalParameter_type() { |
| 11509 // int p | 11518 // int p |
| 11510 InterfaceType intType = _typeProvider.intType; | 11519 InterfaceType intType = _typeProvider.intType; |
| 11511 ClassElement intElement = intType.element; | 11520 ClassElement intElement = intType.element; |
| 11512 FormalParameter node = AstFactory.simpleFormalParameter4(AstFactory.typeName
(intElement, []), "p"); | 11521 FormalParameter node = AstFactory.simpleFormalParameter4(AstFactory.typeName
(intElement), "p"); |
| 11513 SimpleIdentifier identifier = node.identifier; | 11522 SimpleIdentifier identifier = node.identifier; |
| 11514 ParameterElementImpl element = new ParameterElementImpl.forNode(identifier); | 11523 ParameterElementImpl element = new ParameterElementImpl.forNode(identifier); |
| 11515 identifier.staticElement = element; | 11524 identifier.staticElement = element; |
| 11516 expect(_resolveFormalParameter(node, [intElement]), same(intType)); | 11525 expect(_resolveFormalParameter(node, [intElement]), same(intType)); |
| 11517 _listener.assertNoErrors(); | 11526 _listener.assertNoErrors(); |
| 11518 } | 11527 } |
| 11519 | 11528 |
| 11520 void test_visitTypeName_noParameters_noArguments() { | 11529 void test_visitTypeName_noParameters_noArguments() { |
| 11521 ClassElement classA = ElementFactory.classElement2("A", []); | 11530 ClassElement classA = ElementFactory.classElement2("A"); |
| 11522 TypeName typeName = AstFactory.typeName(classA, []); | 11531 TypeName typeName = AstFactory.typeName(classA); |
| 11523 typeName.type = null; | 11532 typeName.type = null; |
| 11524 _resolveNode(typeName, [classA]); | 11533 _resolveNode(typeName, [classA]); |
| 11525 expect(typeName.type, same(classA.type)); | 11534 expect(typeName.type, same(classA.type)); |
| 11526 _listener.assertNoErrors(); | 11535 _listener.assertNoErrors(); |
| 11527 } | 11536 } |
| 11528 | 11537 |
| 11529 void test_visitTypeName_parameters_arguments() { | 11538 void test_visitTypeName_parameters_arguments() { |
| 11530 ClassElement classA = ElementFactory.classElement2("A", ["E"]); | 11539 ClassElement classA = ElementFactory.classElement2("A", ["E"]); |
| 11531 ClassElement classB = ElementFactory.classElement2("B", []); | 11540 ClassElement classB = ElementFactory.classElement2("B"); |
| 11532 TypeName typeName = AstFactory.typeName(classA, [AstFactory.typeName(classB,
[])]); | 11541 TypeName typeName = AstFactory.typeName(classA, [AstFactory.typeName(classB)
]); |
| 11533 typeName.type = null; | 11542 typeName.type = null; |
| 11534 _resolveNode(typeName, [classA, classB]); | 11543 _resolveNode(typeName, [classA, classB]); |
| 11535 InterfaceType resultType = typeName.type as InterfaceType; | 11544 InterfaceType resultType = typeName.type as InterfaceType; |
| 11536 expect(resultType.element, same(classA)); | 11545 expect(resultType.element, same(classA)); |
| 11537 List<DartType> resultArguments = resultType.typeArguments; | 11546 List<DartType> resultArguments = resultType.typeArguments; |
| 11538 expect(resultArguments, hasLength(1)); | 11547 expect(resultArguments, hasLength(1)); |
| 11539 expect(resultArguments[0], same(classB.type)); | 11548 expect(resultArguments[0], same(classB.type)); |
| 11540 _listener.assertNoErrors(); | 11549 _listener.assertNoErrors(); |
| 11541 } | 11550 } |
| 11542 | 11551 |
| 11543 void test_visitTypeName_parameters_noArguments() { | 11552 void test_visitTypeName_parameters_noArguments() { |
| 11544 ClassElement classA = ElementFactory.classElement2("A", ["E"]); | 11553 ClassElement classA = ElementFactory.classElement2("A", ["E"]); |
| 11545 TypeName typeName = AstFactory.typeName(classA, []); | 11554 TypeName typeName = AstFactory.typeName(classA); |
| 11546 typeName.type = null; | 11555 typeName.type = null; |
| 11547 _resolveNode(typeName, [classA]); | 11556 _resolveNode(typeName, [classA]); |
| 11548 InterfaceType resultType = typeName.type as InterfaceType; | 11557 InterfaceType resultType = typeName.type as InterfaceType; |
| 11549 expect(resultType.element, same(classA)); | 11558 expect(resultType.element, same(classA)); |
| 11550 List<DartType> resultArguments = resultType.typeArguments; | 11559 List<DartType> resultArguments = resultType.typeArguments; |
| 11551 expect(resultArguments, hasLength(1)); | 11560 expect(resultArguments, hasLength(1)); |
| 11552 expect(resultArguments[0], same(DynamicTypeImpl.instance)); | 11561 expect(resultArguments[0], same(DynamicTypeImpl.instance)); |
| 11553 _listener.assertNoErrors(); | 11562 _listener.assertNoErrors(); |
| 11554 } | 11563 } |
| 11555 | 11564 |
| 11556 void test_visitTypeName_void() { | 11565 void test_visitTypeName_void() { |
| 11557 ClassElement classA = ElementFactory.classElement2("A", []); | 11566 ClassElement classA = ElementFactory.classElement2("A"); |
| 11558 TypeName typeName = AstFactory.typeName4("void", []); | 11567 TypeName typeName = AstFactory.typeName4("void"); |
| 11559 _resolveNode(typeName, [classA]); | 11568 _resolveNode(typeName, [classA]); |
| 11560 expect(typeName.type, same(VoidTypeImpl.instance)); | 11569 expect(typeName.type, same(VoidTypeImpl.instance)); |
| 11561 _listener.assertNoErrors(); | 11570 _listener.assertNoErrors(); |
| 11562 } | 11571 } |
| 11563 | 11572 |
| 11564 /** | 11573 /** |
| 11565 * Analyze the given catch clause and assert that the types of the parameters
have been set to the | 11574 * Analyze the given catch clause and assert that the types of the parameters
have been set to the |
| 11566 * given types. The types can be null if the catch clause does not have the co
rresponding | 11575 * given types. The types can be null if the catch clause does not have the co
rresponding |
| 11567 * parameter. | 11576 * parameter. |
| 11568 * | 11577 * |
| 11569 * @param node the catch clause to be analyzed | 11578 * @param node the catch clause to be analyzed |
| 11570 * @param exceptionType the expected type of the exception parameter | 11579 * @param exceptionType the expected type of the exception parameter |
| 11571 * @param stackTraceType the expected type of the stack trace parameter | 11580 * @param stackTraceType the expected type of the stack trace parameter |
| 11572 * @param definedElements the elements that are to be defined in the scope in
which the element is | 11581 * @param definedElements the elements that are to be defined in the scope in
which the element is |
| 11573 * being resolved | 11582 * being resolved |
| 11574 */ | 11583 */ |
| 11575 void _resolveCatchClause(CatchClause node, DartType exceptionType, InterfaceTy
pe stackTraceType, List<Element> definedElements) { | 11584 void _resolveCatchClause(CatchClause node, DartType exceptionType, InterfaceTy
pe stackTraceType, [List<Element> definedElements]) { |
| 11576 _resolveNode(node, definedElements); | 11585 _resolveNode(node, definedElements); |
| 11577 SimpleIdentifier exceptionParameter = node.exceptionParameter; | 11586 SimpleIdentifier exceptionParameter = node.exceptionParameter; |
| 11578 if (exceptionParameter != null) { | 11587 if (exceptionParameter != null) { |
| 11579 expect(exceptionParameter.staticType, same(exceptionType)); | 11588 expect(exceptionParameter.staticType, same(exceptionType)); |
| 11580 } | 11589 } |
| 11581 SimpleIdentifier stackTraceParameter = node.stackTraceParameter; | 11590 SimpleIdentifier stackTraceParameter = node.stackTraceParameter; |
| 11582 if (stackTraceParameter != null) { | 11591 if (stackTraceParameter != null) { |
| 11583 expect(stackTraceParameter.staticType, same(stackTraceType)); | 11592 expect(stackTraceParameter.staticType, same(stackTraceType)); |
| 11584 } | 11593 } |
| 11585 } | 11594 } |
| 11586 | 11595 |
| 11587 /** | 11596 /** |
| 11588 * Return the type associated with the given parameter after the static type a
nalyzer has computed | 11597 * Return the type associated with the given parameter after the static type a
nalyzer has computed |
| 11589 * a type for it. | 11598 * a type for it. |
| 11590 * | 11599 * |
| 11591 * @param node the parameter with which the type is associated | 11600 * @param node the parameter with which the type is associated |
| 11592 * @param definedElements the elements that are to be defined in the scope in
which the element is | 11601 * @param definedElements the elements that are to be defined in the scope in
which the element is |
| 11593 * being resolved | 11602 * being resolved |
| 11594 * @return the type associated with the parameter | 11603 * @return the type associated with the parameter |
| 11595 */ | 11604 */ |
| 11596 DartType _resolveFormalParameter(FormalParameter node, List<Element> definedEl
ements) { | 11605 DartType _resolveFormalParameter(FormalParameter node, [List<Element> definedE
lements]) { |
| 11597 _resolveNode(node, definedElements); | 11606 _resolveNode(node, definedElements); |
| 11598 return (node.identifier.staticElement as ParameterElement).type; | 11607 return (node.identifier.staticElement as ParameterElement).type; |
| 11599 } | 11608 } |
| 11600 | 11609 |
| 11601 /** | 11610 /** |
| 11602 * Return the element associated with the given identifier after the resolver
has resolved the | 11611 * Return the element associated with the given identifier after the resolver
has resolved the |
| 11603 * identifier. | 11612 * identifier. |
| 11604 * | 11613 * |
| 11605 * @param node the expression to be resolved | 11614 * @param node the expression to be resolved |
| 11606 * @param definedElements the elements that are to be defined in the scope in
which the element is | 11615 * @param definedElements the elements that are to be defined in the scope in
which the element is |
| 11607 * being resolved | 11616 * being resolved |
| 11608 * @return the element to which the expression was resolved | 11617 * @return the element to which the expression was resolved |
| 11609 */ | 11618 */ |
| 11610 void _resolveNode(AstNode node, List<Element> definedElements) { | 11619 void _resolveNode(AstNode node, [List<Element> definedElements]) { |
| 11611 for (Element element in definedElements) { | 11620 if (definedElements != null) { |
| 11612 _library.libraryScope.define(element); | 11621 for (Element element in definedElements) { |
| 11622 _library.libraryScope.define(element); |
| 11623 } |
| 11613 } | 11624 } |
| 11614 node.accept(_visitor); | 11625 node.accept(_visitor); |
| 11615 node.accept(_implicitConstructorBuilder); | 11626 node.accept(_implicitConstructorBuilder); |
| 11616 } | 11627 } |
| 11617 } | 11628 } |
| 11618 | 11629 |
| 11619 main() { | 11630 main() { |
| 11620 groupSep = ' | '; | 11631 groupSep = ' | '; |
| 11621 runReflectiveTests(AnalysisDeltaTest); | 11632 runReflectiveTests(AnalysisDeltaTest); |
| 11622 runReflectiveTests(ChangeSetTest); | 11633 runReflectiveTests(ChangeSetTest); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 11641 runReflectiveTests(TypeResolverVisitorTest); | 11652 runReflectiveTests(TypeResolverVisitorTest); |
| 11642 runReflectiveTests(CheckedModeCompileTimeErrorCodeTest); | 11653 runReflectiveTests(CheckedModeCompileTimeErrorCodeTest); |
| 11643 runReflectiveTests(ErrorResolverTest); | 11654 runReflectiveTests(ErrorResolverTest); |
| 11644 runReflectiveTests(HintCodeTest); | 11655 runReflectiveTests(HintCodeTest); |
| 11645 runReflectiveTests(MemberMapTest); | 11656 runReflectiveTests(MemberMapTest); |
| 11646 runReflectiveTests(NonHintCodeTest); | 11657 runReflectiveTests(NonHintCodeTest); |
| 11647 runReflectiveTests(SimpleResolverTest); | 11658 runReflectiveTests(SimpleResolverTest); |
| 11648 runReflectiveTests(StrictModeTest); | 11659 runReflectiveTests(StrictModeTest); |
| 11649 runReflectiveTests(TypePropagationTest); | 11660 runReflectiveTests(TypePropagationTest); |
| 11650 } | 11661 } |
| OLD | NEW |