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

Unified Diff: compiler/javatests/com/google/dart/compiler/type/TypeAnalyzerCompilerTest.java

Issue 10459070: Infer also field types in classes and top-level (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Use Type.isInferred() Created 8 years, 7 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
Index: compiler/javatests/com/google/dart/compiler/type/TypeAnalyzerCompilerTest.java
diff --git a/compiler/javatests/com/google/dart/compiler/type/TypeAnalyzerCompilerTest.java b/compiler/javatests/com/google/dart/compiler/type/TypeAnalyzerCompilerTest.java
index 3dd29c4410c383474ff91e29fa8c78dacd0e84e3..105f44ecd5720cd24730a6a9dd5518860e95d3c7 100644
--- a/compiler/javatests/com/google/dart/compiler/type/TypeAnalyzerCompilerTest.java
+++ b/compiler/javatests/com/google/dart/compiler/type/TypeAnalyzerCompilerTest.java
@@ -42,7 +42,6 @@ import com.google.dart.compiler.resolver.MethodElement;
import com.google.dart.compiler.resolver.NodeElement;
import com.google.dart.compiler.resolver.ResolverErrorCode;
import com.google.dart.compiler.resolver.TypeErrorCode;
-import com.google.dart.compiler.resolver.VariableElement;
import java.io.Reader;
import java.io.StringReader;
@@ -1222,7 +1221,7 @@ public class TypeAnalyzerCompilerTest extends CompilerTestCase {
// check each "v" type
for (int i = 0; i < expectedList.size(); i++) {
String expectedTypeString = expectedList.get(i);
- assertVariableTypeString(libraryResult, "v" + i, expectedTypeString);
+ assertInferredElementTypeString(libraryResult, "v" + i, expectedTypeString);
}
}
@@ -1233,7 +1232,7 @@ public class TypeAnalyzerCompilerTest extends CompilerTestCase {
" v = false;",
"}",
"");
- assertVariableTypeString(libraryResult, "v", "bool");
+ assertInferredElementTypeString(libraryResult, "v", "bool");
}
public void test_typesPropagation_secondAssign_differentType() throws Exception {
@@ -1243,7 +1242,7 @@ public class TypeAnalyzerCompilerTest extends CompilerTestCase {
" v = 0;",
"}",
"");
- assertVariableTypeString(libraryResult, "v", "<dynamic>");
+ assertInferredElementTypeString(libraryResult, "v", "<dynamic>");
}
public void test_typesPropagation_ifIsType() throws Exception {
@@ -1258,9 +1257,9 @@ public class TypeAnalyzerCompilerTest extends CompilerTestCase {
" var v3 = v;",
"}",
"");
- assertVariableTypeString(libraryResult, "v1", "List<String>");
- assertVariableTypeString(libraryResult, "v2", "Map<int, String>");
- assertVariableTypeString(libraryResult, "v3", "<dynamic>");
+ assertInferredElementTypeString(libraryResult, "v1", "List<String>");
+ assertInferredElementTypeString(libraryResult, "v2", "Map<int, String>");
+ assertInferredElementTypeString(libraryResult, "v3", "<dynamic>");
}
/**
@@ -1282,9 +1281,9 @@ public class TypeAnalyzerCompilerTest extends CompilerTestCase {
" }",
"}",
"");
- assertVariableTypeString(libraryResult, "a1", "int");
- assertVariableTypeString(libraryResult, "a2", "int");
- assertVariableTypeString(libraryResult, "b1", "int");
+ assertInferredElementTypeString(libraryResult, "a1", "int");
+ assertInferredElementTypeString(libraryResult, "a2", "int");
+ assertInferredElementTypeString(libraryResult, "b1", "int");
}
/**
@@ -1299,7 +1298,7 @@ public class TypeAnalyzerCompilerTest extends CompilerTestCase {
" }",
"}",
"");
- assertVariableTypeString(libraryResult, "v1", "<dynamic>");
+ assertInferredElementTypeString(libraryResult, "v1", "<dynamic>");
}
public void test_typesPropagation_ifIsType_negation() throws Exception {
@@ -1316,9 +1315,9 @@ public class TypeAnalyzerCompilerTest extends CompilerTestCase {
" }",
"}",
"");
- assertVariableTypeString(libraryResult, "v1", "<dynamic>");
- assertVariableTypeString(libraryResult, "v2", "<dynamic>");
- assertVariableTypeString(libraryResult, "v3", "String");
+ assertInferredElementTypeString(libraryResult, "v1", "<dynamic>");
+ assertInferredElementTypeString(libraryResult, "v2", "<dynamic>");
+ assertInferredElementTypeString(libraryResult, "v3", "String");
}
public void test_typesPropagation_ifIsType_and() throws Exception {
@@ -1330,8 +1329,8 @@ public class TypeAnalyzerCompilerTest extends CompilerTestCase {
" }",
"}",
"");
- assertVariableTypeString(libraryResult, "a1", "String");
- assertVariableTypeString(libraryResult, "b1", "List<String>");
+ assertInferredElementTypeString(libraryResult, "a1", "String");
+ assertInferredElementTypeString(libraryResult, "b1", "List<String>");
}
public void test_typesPropagation_ifIsType_or() throws Exception {
@@ -1345,8 +1344,8 @@ public class TypeAnalyzerCompilerTest extends CompilerTestCase {
" }",
"}",
"");
- assertVariableTypeString(libraryResult, "v1", "<dynamic>");
- assertVariableTypeString(libraryResult, "v2", "<dynamic>");
+ assertInferredElementTypeString(libraryResult, "v1", "<dynamic>");
+ assertInferredElementTypeString(libraryResult, "v2", "<dynamic>");
}
public void test_typesPropagation_whileIsType() throws Exception {
@@ -1359,8 +1358,8 @@ public class TypeAnalyzerCompilerTest extends CompilerTestCase {
" var v2 = v;",
"}",
"");
- assertVariableTypeString(libraryResult, "v1", "String");
- assertVariableTypeString(libraryResult, "v2", "<dynamic>");
+ assertInferredElementTypeString(libraryResult, "v1", "String");
+ assertInferredElementTypeString(libraryResult, "v2", "<dynamic>");
}
public void test_typesPropagation_forIsType() throws Exception {
@@ -1373,11 +1372,11 @@ public class TypeAnalyzerCompilerTest extends CompilerTestCase {
" var v3 = v;",
"}",
"");
- assertVariableTypeString(libraryResult, "v1", "String");
- assertVariableTypeString(libraryResult, "v2", "String");
- assertVariableTypeString(libraryResult, "v3", "<dynamic>");
+ assertInferredElementTypeString(libraryResult, "v1", "String");
+ assertInferredElementTypeString(libraryResult, "v2", "String");
+ assertInferredElementTypeString(libraryResult, "v3", "<dynamic>");
}
-
+
public void test_typesPropagation_forEach() throws Exception {
AnalyzeLibraryResult libraryResult = analyzeLibrary(
"f(var v) {",
@@ -1387,7 +1386,33 @@ public class TypeAnalyzerCompilerTest extends CompilerTestCase {
" }",
"}",
"");
- assertVariableTypeString(libraryResult, "v1", "String");
+ assertInferredElementTypeString(libraryResult, "v1", "String");
+ }
+
+ public void test_typesPropagation_field_inClass() throws Exception {
+ AnalyzeLibraryResult libraryResult = analyzeLibrary(
+ "// filler filler filler filler filler filler filler filler filler filler",
+ "class A {",
+ " var v1 = 123;",
+ " var v2 = Math.random();",
+ " var v3 = 1 + 2.0;",
+ "}",
+ "");
+ assertInferredElementTypeString(libraryResult, "v1", "int");
+ assertInferredElementTypeString(libraryResult, "v2", "double");
+ assertInferredElementTypeString(libraryResult, "v3", "double");
+ }
+
+ public void test_typesPropagation_field_topLevel() throws Exception {
+ AnalyzeLibraryResult libraryResult = analyzeLibrary(
+ "// filler filler filler filler filler filler filler filler filler filler",
+ "var v1 = 123;",
+ "var v2 = Math.random();",
+ "var v3 = 1 + 2.0;",
+ "");
+ assertInferredElementTypeString(libraryResult, "v1", "int");
+ assertInferredElementTypeString(libraryResult, "v2", "double");
+ assertInferredElementTypeString(libraryResult, "v3", "double");
}
public void test_getType_binaryExpression() throws Exception {
@@ -1411,22 +1436,22 @@ public class TypeAnalyzerCompilerTest extends CompilerTestCase {
" var v16 = 1.0 ~/ 2;",
"}",
"");
- assertVariableTypeString(libraryResult, "v1", "int");
- assertVariableTypeString(libraryResult, "v2", "int");
- assertVariableTypeString(libraryResult, "v3", "int");
- assertVariableTypeString(libraryResult, "v4", "int");
- assertVariableTypeString(libraryResult, "v5", "int");
- assertVariableTypeString(libraryResult, "v6", "double");
- assertVariableTypeString(libraryResult, "v7", "double");
- assertVariableTypeString(libraryResult, "v8", "double");
- assertVariableTypeString(libraryResult, "v9", "double");
- assertVariableTypeString(libraryResult, "v10", "double");
- assertVariableTypeString(libraryResult, "v11", "double");
- assertVariableTypeString(libraryResult, "v12", "double");
- assertVariableTypeString(libraryResult, "v13", "double");
- assertVariableTypeString(libraryResult, "v14", "double");
- assertVariableTypeString(libraryResult, "v15", "double");
- assertVariableTypeString(libraryResult, "v16", "double");
+ assertInferredElementTypeString(libraryResult, "v1", "int");
+ assertInferredElementTypeString(libraryResult, "v2", "int");
+ assertInferredElementTypeString(libraryResult, "v3", "int");
+ assertInferredElementTypeString(libraryResult, "v4", "int");
+ assertInferredElementTypeString(libraryResult, "v5", "int");
+ assertInferredElementTypeString(libraryResult, "v6", "double");
+ assertInferredElementTypeString(libraryResult, "v7", "double");
+ assertInferredElementTypeString(libraryResult, "v8", "double");
+ assertInferredElementTypeString(libraryResult, "v9", "double");
+ assertInferredElementTypeString(libraryResult, "v10", "double");
+ assertInferredElementTypeString(libraryResult, "v11", "double");
+ assertInferredElementTypeString(libraryResult, "v12", "double");
+ assertInferredElementTypeString(libraryResult, "v13", "double");
+ assertInferredElementTypeString(libraryResult, "v14", "double");
+ assertInferredElementTypeString(libraryResult, "v15", "double");
+ assertInferredElementTypeString(libraryResult, "v16", "double");
}
/**
@@ -1479,8 +1504,8 @@ public class TypeAnalyzerCompilerTest extends CompilerTestCase {
"}",
"");
assertErrors(libraryResult.getErrors());
- assertVariableTypeString(libraryResult, "v1", "int");
- assertVariableTypeString(libraryResult, "v2", "bool");
+ assertInferredElementTypeString(libraryResult, "v1", "int");
+ assertInferredElementTypeString(libraryResult, "v2", "bool");
}
public void test_getType_getterInNegation_generic() throws Exception {
@@ -1504,8 +1529,8 @@ public class TypeAnalyzerCompilerTest extends CompilerTestCase {
"}",
"");
assertErrors(libraryResult.getErrors());
- assertVariableTypeString(libraryResult, "v1", "bool");
- assertVariableTypeString(libraryResult, "v2", "bool");
+ assertInferredElementTypeString(libraryResult, "v1", "bool");
+ assertInferredElementTypeString(libraryResult, "v2", "bool");
}
public void test_getType_getterInSwitch() throws Exception {
@@ -1522,31 +1547,36 @@ public class TypeAnalyzerCompilerTest extends CompilerTestCase {
}
/**
- * Asserts that {@link VariableElement} with given name has expected type.
+ * Asserts that {@link Element} with given name has expected type.
*/
- private void assertVariableTypeString(
+ private void assertInferredElementTypeString(
AnalyzeLibraryResult libraryResult,
String variableName,
String expectedType) {
- VariableElement variable = getVariableElement(libraryResult, variableName);
- assertNotNull(variable);
- assertEquals(variable.getName(), expectedType, variable.getType().toString());
+ // find element
+ Element element = getNamedElement(libraryResult, variableName);
+ assertNotNull(element);
+ // check type
+ Type actualType = element.getType();
+ assertEquals(element.getName(), expectedType, actualType.toString());
+ // should be inferred
+ if (TypeKind.of(actualType) != TypeKind.DYNAMIC) {
+ assertTrue("Should be marked as inferred", actualType.isInferred());
+ }
}
/**
- * @return the {@link VariableElement} with given name, may be <code>null</code>.
+ * @return the {@link Element} with given name, may be <code>null</code>.
*/
- private VariableElement getVariableElement(AnalyzeLibraryResult libraryResult, final String name) {
+ private Element getNamedElement(AnalyzeLibraryResult libraryResult, final String name) {
DartUnit unit = libraryResult.getLibraryUnitResult().getUnit(getName());
- final VariableElement[] result = {null};
+ final Element[] result = {null};
unit.accept(new ASTVisitor<Void>() {
@Override
public Void visitIdentifier(DartIdentifier node) {
- if (node.getElement() instanceof VariableElement) {
- VariableElement variableElement = (VariableElement) node.getElement();
- if (variableElement.getName().equals(name)) {
- result[0] = variableElement;
- }
+ Element element = node.getElement();
+ if (element.getName().equals(name)) {
+ result[0] = element;
}
return super.visitIdentifier(node);
}

Powered by Google App Engine
This is Rietveld 408576698