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

Unified Diff: pkg/analyzer/test/src/summary/summary_common.dart

Issue 2963183002: Don't serialize local variables. (Closed)
Patch Set: Rebase after removing ExecutableElement.localVariables Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/analyzer/test/src/summary/summarize_ast_test.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/test/src/summary/summary_common.dart
diff --git a/pkg/analyzer/test/src/summary/summary_common.dart b/pkg/analyzer/test/src/summary/summary_common.dart
index b76f8605963b904ca7a85a73d69107fbcd94f97e..f163716d0b6b66efa51087cccd7a9b6da61670de 100644
--- a/pkg/analyzer/test/src/summary/summary_common.dart
+++ b/pkg/analyzer/test/src/summary/summary_common.dart
@@ -715,6 +715,25 @@ abstract class SummaryTest {
}
/**
+ * Find the parameter with the given [name] in [parameters].
+ */
+ UnlinkedParam findParameter(List<UnlinkedParam> parameters, String name) {
+ UnlinkedParam result;
+ for (UnlinkedParam parameter in parameters) {
+ if (parameter.name == name) {
+ if (result != null) {
+ fail('Duplicate parameter $name');
+ }
+ result = parameter;
+ }
+ }
+ if (result == null) {
+ fail('Parameter $name not found');
+ }
+ return result;
+ }
+
+ /**
* Find the typedef with the given [typedefName] in the summary, and return
* its [UnlinkedTypedef] data structure. If [unit] is not given, the typedef
* is looked for in the defining compilation unit.
@@ -5378,260 +5397,6 @@ foo({int p}) {}
expect(labels, isEmpty);
}
- test_executable_localVariables_catch() {
- String code = r'''
-var v = (
- () { // 1
- try {
- throw 42;
- } on int catch (e, st) { // 2
- print(e);
- print(st);
- } // 3
- } // 4
-);
-''';
- UnlinkedExecutable executable =
- serializeVariableText(code).initializer.localFunctions[0];
- List<UnlinkedVariable> variables = executable.localVariables;
- expect(variables, hasLength(2));
- {
- UnlinkedVariable e = variables.singleWhere((v) => v.name == 'e');
- _assertVariableVisible(code, e, 'on int catch (', '} // 3');
- checkTypeRef(e.type, 'dart:core', 'int');
- }
- {
- UnlinkedVariable st = variables.singleWhere((v) => v.name == 'st');
- _assertVariableVisible(code, st, 'on int catch (', '} // 3');
- }
- }
-
- test_executable_localVariables_catch_noVariables() {
- String code = r'''
-f() {
- try {
- throw 42;
- } on int {}
-}
-''';
- UnlinkedExecutable executable = serializeExecutableText(code);
- List<UnlinkedVariable> variables = executable.localVariables;
- expect(variables, isEmpty);
- }
-
- test_executable_localVariables_empty() {
- UnlinkedExecutable executable = serializeExecutableText(r'''
-f() {
-}
-''');
- expect(executable.localVariables, isEmpty);
- }
-
- test_executable_localVariables_forEachLoop() {
- String code = r'''
-var v = (() {
- f() { // 1
- for (int i in <int>[]) { // 2
- print(i);
- } // 3
- } // 4
-});
-''';
- UnlinkedExecutable executable = serializeVariableText(code)
- .initializer
- .localFunctions[0]
- .localFunctions[0];
- List<UnlinkedVariable> variables = executable.localVariables;
- expect(variables, hasLength(1));
- {
- UnlinkedVariable i = variables.singleWhere((v) => v.name == 'i');
- _assertVariableVisible(code, i, 'for', '} // 3');
- checkTypeRef(i.type, 'dart:core', 'int');
- }
- }
-
- test_executable_localVariables_forEachLoop_outside() {
- String code = r'''
-var v = (() {
- f() { // 1
- int i;
- for (i in <int>[]) {
- print(i);
- }
- } // 4
-});
-''';
- UnlinkedExecutable executable = serializeVariableText(code)
- .initializer
- .localFunctions[0]
- .localFunctions[0];
- List<UnlinkedVariable> variables = executable.localVariables;
- expect(variables, hasLength(1));
- {
- UnlinkedVariable i = variables.singleWhere((v) => v.name == 'i');
- _assertVariableVisible(code, i, '{ // 1', '} // 4');
- checkTypeRef(i.type, 'dart:core', 'int');
- }
- }
-
- test_executable_localVariables_forLoop() {
- String code = r'''
-var v = (() {
- f() { // 1
- for (int i = 0, j = 0; i < 10; i++, j++) { // 2
- print(i);
- } // 3
- } // 4
-});
-''';
- UnlinkedExecutable executable = serializeVariableText(code)
- .initializer
- .localFunctions[0]
- .localFunctions[0];
- List<UnlinkedVariable> variables = executable.localVariables;
- expect(variables, hasLength(2));
- {
- UnlinkedVariable i = variables.singleWhere((v) => v.name == 'i');
- _assertVariableVisible(code, i, 'for', '} // 3');
- checkTypeRef(i.type, 'dart:core', 'int');
- }
- {
- UnlinkedVariable i = variables.singleWhere((v) => v.name == 'j');
- _assertVariableVisible(code, i, 'for', '} // 3');
- checkTypeRef(i.type, 'dart:core', 'int');
- }
- }
-
- test_executable_localVariables_forLoop_noVariables() {
- String code = r'''
-var v = (() {
- f() {
- for (; true;) {}
- }
-});
-''';
- UnlinkedExecutable executable = serializeVariableText(code)
- .initializer
- .localFunctions[0]
- .localFunctions[0];
- List<UnlinkedVariable> variables = executable.localVariables;
- expect(variables, isEmpty);
- }
-
- test_executable_localVariables_inConstructor() {
- String code = r'''
-class C {
- C() {
- int v;
- }
-}
-''';
- UnlinkedExecutable executable =
- findExecutable('', executables: serializeClassText(code).executables);
- List<UnlinkedVariable> variables = executable.localVariables;
- expect(variables, isEmpty);
- }
-
- test_executable_localVariables_inLocalFunctions() {
- String code = r'''
-var v = (() {
- f() {
- f1() { // 1
- int v1 = 1;
- } // 2
- f2() { // 3
- int v1 = 1;
- f3() { // 4
- int v2 = 1;
- } // 5
- } // 6
- } // 7
-});
-''';
- UnlinkedExecutable executable = serializeVariableText(code)
- .initializer
- .localFunctions[0]
- .localFunctions[0];
- List<UnlinkedExecutable> functions = executable.localFunctions;
- expect(functions, hasLength(2));
- // f - f1
- {
- UnlinkedExecutable f1 = functions.singleWhere((v) => v.name == 'f1');
- List<UnlinkedVariable> variables = f1.localVariables;
- expect(variables, hasLength(1));
- // f1 - v1
- UnlinkedVariable v1 = variables.singleWhere((v) => v.name == 'v1');
- _assertVariableVisible(code, v1, '{ // 1', '} // 2');
- checkTypeRef(v1.type, 'dart:core', 'int');
- }
- // f - f2
- {
- UnlinkedExecutable f2 = functions.singleWhere((v) => v.name == 'f2');
- List<UnlinkedVariable> variables2 = f2.localVariables;
- List<UnlinkedExecutable> functions2 = f2.localFunctions;
- expect(variables2, hasLength(1));
- expect(functions2, hasLength(1));
- // f - f2 - v1
- UnlinkedVariable v1 = variables2.singleWhere((v) => v.name == 'v1');
- _assertVariableVisible(code, v1, '{ // 3', '} // 6');
- checkTypeRef(v1.type, 'dart:core', 'int');
- // f - f2 - f3
- UnlinkedExecutable f3 = functions2.singleWhere((v) => v.name == 'f3');
- _assertExecutableVisible(code, f3, '{ // 3', '} // 6');
- List<UnlinkedVariable> variables3 = f3.localVariables;
- List<UnlinkedExecutable> functions3 = f3.localFunctions;
- expect(variables3, hasLength(1));
- expect(functions3, hasLength(0));
- // f - f3 - v2
- UnlinkedVariable v2 = variables3.singleWhere((v) => v.name == 'v2');
- _assertVariableVisible(code, v2, '{ // 4', '} // 5');
- checkTypeRef(v2.type, 'dart:core', 'int');
- }
- }
-
- test_executable_localVariables_inMethod() {
- String code = r'''
-class C {
- m() {
- int v;
- f() {}
- }
-}
-''';
- UnlinkedExecutable executable =
- findExecutable('m', executables: serializeClassText(code).executables);
- expect(executable.localFunctions, isEmpty);
- expect(executable.localVariables, isEmpty);
- }
-
- test_executable_localVariables_inTopLevelFunction() {
- String code = r'''
-f() {
- int v1 = 1;
- {
- int v2 = 2;
- }
- var v3 = 3;
-}
-''';
- UnlinkedExecutable executable = serializeExecutableText(code);
- List<UnlinkedVariable> variables = executable.localVariables;
- expect(variables, isEmpty);
- }
-
- test_executable_localVariables_inTopLevelGetter() {
- String code = r'''
-get g { // 1
- int v;
- f() {}
-} // 2
-''';
- UnlinkedExecutable executable =
- serializeExecutableText(code, executableName: 'g');
- expect(executable.localFunctions, isEmpty);
- expect(executable.localVariables, isEmpty);
- }
-
test_executable_member_function() {
UnlinkedExecutable executable = findExecutable('f',
executables: serializeClassText('class C { f() {} }').executables);
@@ -8712,42 +8477,6 @@ class C {
expect(definingUnit.references[classIndex].containingReference, 0);
}
- test_initializer_executable_with_return_type_from_closure_local() {
- if (skipFullyLinkedData) {
- return;
- }
- // The synthetic executable for `v` has type `() => () => int`, where the
- // `() => int` part refers to the closure declared inside the initializer
- // for v. Note: `v` is mis-typed as `int` to prevent type propagation,
- // which would complicate the test.
- UnlinkedExecutable executable = serializeExecutableText(
- '''
-void f() {
- int u = 0; // force the variable below to have index 1
- int v = () => 0;
-}''',
- allowErrors: true);
- UnlinkedVariable variable = executable.localVariables[1];
- EntityRef closureType =
- getTypeRefForSlot(variable.initializer.inferredReturnTypeSlot);
- checkLinkedTypeRef(closureType, null, '',
- expectedKind: ReferenceKind.function);
- int initializerIndex =
- definingUnit.references[closureType.reference].containingReference;
- checkReferenceIndex(initializerIndex, null, '',
- expectedKind: ReferenceKind.function);
- int variableIndex =
- definingUnit.references[initializerIndex].containingReference;
- checkReferenceIndex(variableIndex, null, 'v',
- expectedKind: ReferenceKind.variable, localIndex: 1);
- int topLevelFunctionIndex =
- definingUnit.references[variableIndex].containingReference;
- checkReferenceIndex(topLevelFunctionIndex, null, 'f',
- expectedKind: ReferenceKind.topLevelFunction);
- expect(
- definingUnit.references[topLevelFunctionIndex].containingReference, 0);
- }
-
test_initializer_executable_with_unimported_return_type() {
addNamedSource('/a.dart', 'import "b.dart"; class C { D d; }');
addNamedSource('/b.dart', 'class D {}');
@@ -9436,13 +9165,7 @@ class C {
var v = (() {
void f<T, U>() {
void g<V, W>() {
- void h<X, Y>() {
- T t;
- U u;
- V v;
- W w;
- X x;
- Y y;
+ void h<X, Y>(T t, U u, V v W w, X x, Y y) {
}
}
}
@@ -9452,14 +9175,14 @@ var v = (() {
expect(executable.localFunctions[0].typeParameters, hasLength(2));
expect(executable.localFunctions[0].localFunctions[0].typeParameters,
hasLength(2));
- List<UnlinkedVariable> localVariables =
- executable.localFunctions[0].localFunctions[0].localVariables;
- checkParamTypeRef(findVariable('t', variables: localVariables).type, 6);
- checkParamTypeRef(findVariable('u', variables: localVariables).type, 5);
- checkParamTypeRef(findVariable('v', variables: localVariables).type, 4);
- checkParamTypeRef(findVariable('w', variables: localVariables).type, 3);
- checkParamTypeRef(findVariable('x', variables: localVariables).type, 2);
- checkParamTypeRef(findVariable('y', variables: localVariables).type, 1);
+ List<UnlinkedParam> parameters =
+ executable.localFunctions[0].localFunctions[0].parameters;
+ checkParamTypeRef(findParameter(parameters, 't').type, 6);
+ checkParamTypeRef(findParameter(parameters, 'u').type, 5);
+ checkParamTypeRef(findParameter(parameters, 'v').type, 4);
+ checkParamTypeRef(findParameter(parameters, 'w').type, 3);
+ checkParamTypeRef(findParameter(parameters, 'x').type, 2);
+ checkParamTypeRef(findParameter(parameters, 'y').type, 1);
}
test_parameter_visibleRange_abstractMethod() {
@@ -9712,32 +9435,6 @@ bool f() => true;
checkLinkedTypeRef(inferredType.syntheticParams[0].type, null, '*bottom*');
}
- test_syntheticFunctionType_genericClosure_inGenericFunction() {
- if (skipFullyLinkedData) {
- return;
- }
- if (!strongMode) {
- // The test below uses generic comment syntax because proper generic
- // method syntax doesn't support generic closures. So it can only run in
- // strong mode.
- // TODO(paulberry): once proper generic method syntax supports generic
- // closures, rewrite the test below without using generic comment syntax,
- // and remove this hack. See dartbug.com/25819
- return;
- }
- UnlinkedVariable variable = serializeExecutableText('''
-void f<T, U>(bool b) {
- final v = b ? /*<V>*/(T t, U u, V v) => 0 : /*<V>*/(T t, U u, V v) => 1;
-}
-''').localVariables[0];
- EntityRef inferredType = getTypeRefForSlot(variable.inferredTypeSlot);
- checkLinkedTypeRef(inferredType.syntheticReturnType, 'dart:core', 'int');
- expect(inferredType.syntheticParams, hasLength(3));
- checkParamTypeRef(inferredType.syntheticParams[0].type, 2);
- checkParamTypeRef(inferredType.syntheticParams[1].type, 1);
- checkLinkedTypeRef(inferredType.syntheticParams[2].type, null, '*bottom*');
- }
-
test_syntheticFunctionType_inGenericClass() {
if (skipFullyLinkedData) {
return;
@@ -9755,22 +9452,6 @@ bool f() => false;
checkParamTypeRef(inferredType.syntheticParams[1].type, 1);
}
- test_syntheticFunctionType_inGenericFunction() {
- if (skipFullyLinkedData) {
- return;
- }
- UnlinkedVariable variable = serializeExecutableText('''
-void f<T, U>(bool b) {
- var v = b ? (T t, U u) => 0 : (T t, U u) => 1;
-}
-''').localVariables[0];
- EntityRef inferredType =
- getTypeRefForSlot(variable.initializer.inferredReturnTypeSlot);
- checkLinkedTypeRef(inferredType.syntheticReturnType, 'dart:core', 'int');
- checkParamTypeRef(inferredType.syntheticParams[0].type, 2);
- checkParamTypeRef(inferredType.syntheticParams[1].type, 1);
- }
-
test_type_arguments_explicit() {
EntityRef typeRef = serializeTypeText('List<int>');
checkTypeRef(typeRef, 'dart:core', 'List',
@@ -10438,7 +10119,6 @@ var v;''';
}
expect(initializer.name, isEmpty);
expect(initializer.localFunctions, isEmpty);
- expect(initializer.localVariables, isEmpty);
}
test_variable_initializer_noInitializer() {
@@ -10470,12 +10150,6 @@ var v;''';
if (includeInformative) {
expect(closure.localFunctions[0].nameOffset, text.indexOf('f1()'));
}
- // closure - v1
- expect(closure.localVariables, hasLength(1));
- expect(closure.localVariables[0].name, 'v1');
- if (includeInformative) {
- expect(closure.localVariables[0].nameOffset, text.indexOf('v1;'));
- }
}
// closure: () { f2() {} var v2; }
{
@@ -10490,12 +10164,6 @@ var v;''';
if (includeInformative) {
expect(closure.localFunctions[0].nameOffset, text.indexOf('f2()'));
}
- // closure - v1
- expect(closure.localVariables, hasLength(1));
- expect(closure.localVariables[0].name, 'v2');
- if (includeInformative) {
- expect(closure.localVariables[0].nameOffset, text.indexOf('v2;'));
- }
}
}
@@ -10635,15 +10303,6 @@ final v = $expr;
expect(codeRange.length, length);
}
- void _assertExecutableVisible(String code, UnlinkedExecutable f,
- String visibleBegin, String visibleEnd) {
- int expectedVisibleOffset = code.indexOf(visibleBegin);
- int expectedVisibleLength =
- code.indexOf(visibleEnd) - expectedVisibleOffset + 1;
- expect(f.visibleOffset, expectedVisibleOffset);
- expect(f.visibleLength, expectedVisibleLength);
- }
-
void _assertParameterVisible(
String code, UnlinkedParam p, String visibleBegin, String visibleEnd) {
int expectedVisibleOffset = code.indexOf(visibleBegin);
@@ -10690,15 +10349,6 @@ final v = $expr;
expectedKind: ReferenceKind.topLevelPropertyAccessor)
]);
}
-
- void _assertVariableVisible(
- String code, UnlinkedVariable v, String visibleBegin, String visibleEnd) {
- int expectedVisibleOffset = code.indexOf(visibleBegin);
- int expectedVisibleLength =
- code.indexOf(visibleEnd) - expectedVisibleOffset + 1;
- expect(v.visibleOffset, expectedVisibleOffset);
- expect(v.visibleLength, expectedVisibleLength);
- }
}
/**
« no previous file with comments | « pkg/analyzer/test/src/summary/summarize_ast_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698