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

Unified Diff: dart/compiler/javatests/com/google/dart/compiler/resolver/ResolverTest.java

Issue 20722006: Removed compiler/ directory from repository (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 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
Index: dart/compiler/javatests/com/google/dart/compiler/resolver/ResolverTest.java
diff --git a/dart/compiler/javatests/com/google/dart/compiler/resolver/ResolverTest.java b/dart/compiler/javatests/com/google/dart/compiler/resolver/ResolverTest.java
deleted file mode 100644
index 29826f4e7f2ad775b119272abf44655cddd7d1eb..0000000000000000000000000000000000000000
--- a/dart/compiler/javatests/com/google/dart/compiler/resolver/ResolverTest.java
+++ /dev/null
@@ -1,1439 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-package com.google.dart.compiler.resolver;
-
-import com.google.common.base.Joiner;
-import com.google.dart.compiler.DartCompilationError;
-import com.google.dart.compiler.ErrorCode;
-import com.google.dart.compiler.ast.DartClass;
-import com.google.dart.compiler.common.ErrorExpectation;
-import com.google.dart.compiler.type.DynamicType;
-import com.google.dart.compiler.type.InterfaceType;
-import com.google.dart.compiler.type.Type;
-import com.google.dart.compiler.type.Types;
-
-import static com.google.dart.compiler.common.ErrorExpectation.errEx;
-
-import junit.framework.Assert;
-
-import java.util.List;
-
-/**
- * Basic tests of the resolver.
- */
-public class ResolverTest extends ResolverTestCase {
- private final DartClass object = makeClass("Object", null);
- private final DartClass array = makeClass("Array", makeType("Object"), "E");
- private final DartClass growableArray = makeClass("GrowableArray", makeType("Array", "S"), "S");
- private final Types types = Types.getInstance(null);
-
- private ClassElement findElementOrFail(Scope libScope, String elementName) {
- Element element = libScope.findElement(libScope.getLibrary(), elementName);
- assertEquals(ElementKind.CLASS, ElementKind.of(element));
- return (ClassElement) element;
- }
-
- public void testToString() {
- Assert.assertEquals("class Object {\n}", object.toString().trim());
- Assert.assertEquals("class Array<E> extends Object {\n}", array.toString().trim());
- }
-
- public void testResolve() {
- Scope libScope = resolve(makeUnit(object, array, growableArray), getContext());
- LibraryElement library = libScope.getLibrary();
- ClassElement objectElement = (ClassElement) libScope.findElement(library, "Object");
- Assert.assertNotNull(objectElement);
- ClassElement arrayElement = (ClassElement) libScope.findElement(library, "Array");
- Assert.assertNotNull(arrayElement);
- ClassElement growableArrayElement = (ClassElement) libScope.findElement(library,
- "GrowableArray");
- Assert.assertNotNull(growableArrayElement);
-
- Type objectType = objectElement.getType();
- Type arrayType = arrayElement.getType();
- Type growableArrayType = growableArrayElement.getType();
- Assert.assertNotNull(objectType);
- Assert.assertNotNull(arrayType);
- Assert.assertNotNull(growableArrayType);
-
- Assert.assertTrue(types.isSubtype(arrayType, objectType));
- Assert.assertFalse(types.isSubtype(objectType, arrayType));
-
- Assert.assertTrue(types.isSubtype(growableArrayType, objectType));
-
- // GrowableArray<S> is not a subtype of Array<E> because S and E aren't
- // related.
- Assert.assertFalse(types.isSubtype(growableArrayType, arrayType));
- Assert.assertFalse(types.isSubtype(objectType, growableArrayType));
- Assert.assertFalse(types.isSubtype(arrayType, growableArrayType));
- }
-
- /**
- * class A {}
- * class B extends A {}
- * class C extends A {}
- * class E extends C {}
- * class D extends C {}
- */
- @SuppressWarnings("unused")
- public void testGetSubtypes() {
- DartClass a = makeClass("A", makeType("Object"));
- DartClass b = makeClass("B", makeType("A"));
- DartClass c = makeClass("C", makeType("A"));
- DartClass e = makeClass("E", makeType("C"));
- DartClass d = makeClass("D", makeType("C"));
-
- Scope libScope = resolve(makeUnit(object, a, b, c, d, e), getContext());
-
- ClassElement elementA = findElementOrFail(libScope, "A");
- ClassElement elementB = findElementOrFail(libScope, "B");
- ClassElement elementC = findElementOrFail(libScope, "C");
- ClassElement elementD = findElementOrFail(libScope, "D");
- ClassElement elementE = findElementOrFail(libScope, "E");
- }
-
- /**
- * interface IA extends ID default B {}
- * interface IB extends IA {}
- * interface IC extends IA, IB {}
- * interface ID extends IB {}
- * class A extends IA {}
- * class B {}
- */
- @SuppressWarnings("unused")
- public void testGetSubtypesWithInterfaceCycles() {
- DartClass ia = makeInterface("IA", makeTypes("ID"), makeDefault("B"));
- DartClass ib = makeInterface("IB", makeTypes("IA"), null);
- DartClass ic = makeInterface("IC", makeTypes("IA", "IB"), null);
- DartClass id = makeInterface("ID", makeTypes("IB"), null);
-
- DartClass a = makeClass("A", null, makeTypes("IA"));
- DartClass b = makeClass("B", null);
-
- Scope libScope = resolve(makeUnit(object, ia, ib, ic, id, a, b), getContext());
- ErrorCode[] expected = {
- ResolverErrorCode.CYCLIC_CLASS,
- ResolverErrorCode.CYCLIC_CLASS,
- ResolverErrorCode.CYCLIC_CLASS,
- ResolverErrorCode.CYCLIC_CLASS,
- ResolverErrorCode.CYCLIC_CLASS,
- };
- checkExpectedErrors(expected);
-
- ClassElement elementIA = findElementOrFail(libScope, "IA");
- ClassElement elementIB = findElementOrFail(libScope, "IB");
- ClassElement elementIC = findElementOrFail(libScope, "IC");
- ClassElement elementID = findElementOrFail(libScope, "ID");
- ClassElement elementA = findElementOrFail(libScope, "A");
- ClassElement elementB = findElementOrFail(libScope, "B");
-
- assert(elementIA.getDefaultClass().getElement().getName().equals("B"));
- }
-
- /**
- * interface IA extends IB {}
- * interface IB extends IA {}
- */
- @SuppressWarnings("unused")
- public void testGetSubtypesWithSimpleInterfaceCycle() {
- DartClass ia = makeInterface("IA", makeTypes("IB"), null);
- DartClass ib = makeInterface("IB", makeTypes("IA"), null);
-
-
- Scope libScope = resolve(makeUnit(object, ia, ib), getContext());
- ErrorCode[] expected = {
- ResolverErrorCode.CYCLIC_CLASS,
- ResolverErrorCode.CYCLIC_CLASS,
- };
- checkExpectedErrors(expected);
-
- ClassElement elementIA = findElementOrFail(libScope, "IA");
- ClassElement elementIB = findElementOrFail(libScope, "IB");
- }
-
- /**
- * class A<T> {}
- * class B extends A<C> {}
- * class C {}
- */
- @SuppressWarnings("unused")
- public void testGetSubtypesWithParemeterizedSupertypes() {
- DartClass a = makeClass("A", null, "T");
- DartClass b = makeClass("B", makeType("A", "C"));
- DartClass c = makeClass("C", null);
-
- Scope libScope = resolve(makeUnit(object, a, b, c), getContext());
-
- ClassElement elementA = findElementOrFail(libScope, "A");
- ClassElement elementB = findElementOrFail(libScope, "B");
- ClassElement elementC = findElementOrFail(libScope, "C");
-
- }
-
- public void testDuplicatedInterfaces() {
- // The analyzer used to catch inheriting from two different variations of the same interface
- // but the spec mentions no such error
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class int {}",
- "class bool {}",
- "abstract class I<X> {",
- "}",
- "class A extends C implements I<int> {}",
- "class B extends C implements I<bool> {}",
- "class C implements I<int> {}"));
- }
-
- public void testImplicitDefaultConstructor() {
- // Check that the implicit constructor is resolved correctly
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class B {}",
- "class C { main() { new B(); } }"));
-
- /*
- * We should check for signature mismatch but that is a TypeAnalyzer issue.
- */
- }
-
- public void testImplicitDefaultConstructor_WithConstCtor() {
- // Check that we generate an error if the implicit constructor would violate const.
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class B { const B() {} }",
- "class C extends B {}",
- "class D { main() { new C(); } }"),
- ResolverErrorCode.CONST_CONSTRUCTOR_CANNOT_HAVE_BODY);
- }
-
- public void testImplicitSuperCall_ImplicitCtor() {
- // Check that we can properly resolve the super ctor that exists.
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class B { B() {} }",
- "class C extends B {}",
- "class D { main() { new C(); } }"));
- }
-
- public void testImplicitSuperCall_OnExistingCtor() {
- // Check that we can properly resolve the super ctor that exists.
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class B { B() {} }",
- "class C extends B { C(){} }",
- "class D { main() { new C(); } }"));
- }
-
- public void testImplicitSuperCall_NonExistentSuper() {
- // Check that we generate an error if the implicit constructor would call a non-existent super.
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class B { B(Object o) {} }",
- "class C extends B {}",
- "class D { main() { new C(); } }"),
- ResolverErrorCode.CANNOT_RESOLVE_IMPLICIT_CALL_TO_SUPER_CONSTRUCTOR);
- }
-
- public void testImplicitSuperCall_NonExistentSuper2() {
- // Check that we generate an error if the implicit constructor would call a non-existent super.
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class B { B.foo() {} }",
- "class C extends B {}",
- "class D { main() { new C(); } }"),
- ResolverErrorCode.CANNOT_RESOLVE_IMPLICIT_CALL_TO_SUPER_CONSTRUCTOR);
- }
-
- public void testCyclicSupertype() {
-
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class int {}",
- "class bool {}",
- "class Cyclic extends Cyclic {",
- "}",
- "class A extends B {",
- "}",
- "class B extends A {",
- "}",
- "class C implements C {",
- "}"),
- ResolverErrorCode.CYCLIC_CLASS,
- ResolverErrorCode.CYCLIC_CLASS,
- ResolverErrorCode.CYCLIC_CLASS,
- ResolverErrorCode.CYCLIC_CLASS
- );
- }
-
- public void test_constFactory() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class A {",
- " const factory A() { }",
- "}"),
- errEx(ResolverErrorCode.FACTORY_CANNOT_BE_CONST, 3, 17, 1));
- }
-
- public void testBadGenerativeConstructor1() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object { }",
- "class B { }",
- "class A {",
- " var val; ",
- " B.foo() : this.val = 1;",
- "}"),
- ResolverErrorCode.CANNOT_DECLARE_NON_FACTORY_CONSTRUCTOR);
- }
-
- public void testBadGenerativeConstructor2() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object { }",
- "class A {",
- " var val; ",
- " A.foo.bar() : this.val = 1;",
- "}"),
- ResolverErrorCode.TOO_MANY_QUALIFIERS_FOR_METHOD);
- }
-
- public void testGenerativeConstructor() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class A {",
- " var val; ",
- " A.foo(arg) : this.val = arg;",
- "}"));
- }
-
- /**
- * Test that a class may implement the implied interface of another class and that interfaces may
- * extend the implied interface of a class.
- */
- @SuppressWarnings("unused")
- public void testImpliedInterfaces() throws Exception {
- DartClass a = makeClass("A", null);
- DartClass b = makeClass("B", null, makeTypes("A"));
- DartClass ia = makeInterface("IA", makeTypes("B"), null);
- Scope libScope = resolve(makeUnit(object, a, b, ia), getContext());
- ErrorCode[] expected = {};
- checkExpectedErrors(expected);
-
- ClassElement elementA = findElementOrFail(libScope, "A");
- ClassElement elementB = findElementOrFail(libScope, "B");
- ClassElement elementIA = findElementOrFail(libScope, "IA");
- List<InterfaceType> superTypes = elementB.getAllSupertypes();
- assertEquals(2, superTypes.size()); // Object and A
- superTypes = elementIA.getAllSupertypes();
- assertEquals(3, superTypes.size()); // Object, A, and B
- }
-
- public void testUnresolvedSuper() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class Foo {",
- " foo() { super.foo(); }",
- "}"));
- }
-
- /**
- * Tests for the 'new' keyword
- */
- public void testNewExpression1() {
- // A very ordinary new expression is OK
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class Foo {",
- " Foo create() {",
- " return new Foo();",
- " }",
- "}"));
- }
-
- public void testNewExpression2() {
- // A new expression with generic type argument is OK
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class Foo<T> {",
- " Foo<T> create() {",
- " return new Foo<T>();",
- " }",
- "}"));
- }
-
- public void testNewExpression3() {
- // Trying new on a variable name shouldn't work.
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class Foo {",
- " var Bar;",
- " create() { return new Bar();}",
- "}"),
- TypeErrorCode.NOT_A_TYPE);
- }
-
- public void testNewExpression4() {
- // New expression tied to an unbound type variable is not allowed.
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class Foo<T> {",
- " T create() {",
- " return new T();",
- " }",
- "}"),
- ResolverErrorCode.NEW_EXPRESSION_CANT_USE_TYPE_VAR);
- }
-
- public void testConstExpression4() {
- // New expression tied to an unbound type variable is not allowed.
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class Foo<T> {",
- " T create() {",
- " return const T();",
- " }",
- "}"),
- ResolverErrorCode.CONST_EXPRESSION_CANT_USE_TYPE_VAR);
- }
-
- public void testNewExpression5() {
- // More cowbell. (Foo<T> isn't a type yet)
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class Foo<T> { }",
- "class B {",
- " foo() { return new Foo<T>(); }",
- "}"),
- TypeErrorCode.NO_SUCH_TYPE);
- }
-
- public void test_noSuchType_field() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class MyClass {",
- " Unknown field;",
- "}"),
- TypeErrorCode.NO_SUCH_TYPE);
- }
-
- public void test_variableStatement_noSuchType() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class MyClass {",
- " foo() {",
- " Unknown bar;",
- " }",
- "}"),
- TypeErrorCode.NO_SUCH_TYPE);
- }
-
- public void test_variableStatement_noSuchType_typeArgument() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class Foo<T> {}",
- "class MyClass {",
- " bar() {",
- " Foo<Unknown> foo;",
- " }",
- "}"),
- TypeErrorCode.NO_SUCH_TYPE);
- }
-
- public void test_variableStatement_wrongTypeArgumentsNumber() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class Foo<T> {}",
- "class MyClass {",
- " bar() {",
- " Foo<Object, Object> foo;",
- " }",
- "}"),
- TypeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS);
- }
-
- public void test_variableStatement_typeArgumentsForNonGeneric() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class Foo {}",
- "class MyClass {",
- " bar() {",
- " Foo<Object> foo;",
- " }",
- "}"),
- TypeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS);
- }
-
- public void test_variableStatement_typeArgumentsForDynamic() throws Exception {
- resolveAndTest(
- Joiner.on("\n").join(
- "class Object {}",
- "class MyClass {",
- " bar() {",
- " dynamic<Object> v1;",
- " }",
- "}"),
- TypeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS);
- }
-
- public void test_noSuchType_classExtends() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class MyClass extends Unknown {",
- "}"),
- ResolverErrorCode.NO_SUCH_TYPE);
- }
-
- public void test_noSuchType_classExtendsTypeVariable() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class MyClass<E> extends E {",
- "}"),
- ResolverErrorCode.NOT_A_CLASS);
- }
-
- public void test_noSuchType_superClass_typeArgument() throws Exception {
- String source =
- Joiner.on("\n").join(
- "class Object {}",
- "class Base<T> {}",
- "class MyClass extends Base<Unknown> {",
- "}");
- List<DartCompilationError> errors = resolveAndTest(source, ResolverErrorCode.NO_SUCH_TYPE);
- assertEquals(1, errors.size());
- {
- DartCompilationError error = errors.get(0);
- assertEquals(3, error.getLineNumber());
- assertEquals(28, error.getColumnNumber());
- assertEquals("Unknown".length(), error.getLength());
- assertEquals(source.indexOf("Unknown"), error.getStartPosition());
- }
- }
-
- public void test_noSuchType_superInterface_typeArgument() throws Exception {
- String source =
- Joiner.on("\n").join(
- "class Object {}",
- "abstract class Base<T> {}",
- "class MyClass implements Base<Unknown> {",
- "}");
- List<DartCompilationError> errors = resolveAndTest(source, ResolverErrorCode.NO_SUCH_TYPE);
- assertEquals(1, errors.size());
- {
- DartCompilationError error = errors.get(0);
- assertEquals(3, error.getLineNumber());
- assertEquals(31, error.getColumnNumber());
- assertEquals("Unknown".length(), error.getLength());
- assertEquals(source.indexOf("Unknown"), error.getStartPosition());
- }
- }
-
- public void test_noSuchType_methodParameterType() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class MyClass {",
- " Object foo(Unknown p) {",
- " return null;",
- " }",
- "}"),
- TypeErrorCode.NO_SUCH_TYPE);
- }
-
- public void test_noSuchType_methodParameterType_noQualifier() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class MyClass {",
- " Object foo(lib.Unknown p) {",
- " return null;",
- " }",
- "}"),
- TypeErrorCode.NO_SUCH_TYPE);
- }
-
- public void test_noSuchType_returnType() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class MyClass {",
- " Unknown foo() {",
- " return null;",
- " }",
- "}"),
- TypeErrorCode.NO_SUCH_TYPE);
- }
-
- public void test_noSuchType_inExpression() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class MyClass {",
- " foo() {",
- " var bar;",
- " if (bar is Bar) {",
- " }",
- " }",
- "}"),
- TypeErrorCode.NO_SUCH_TYPE);
- }
-
- public void test_noSuchType_inCatch() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class MyClass {",
- " foo() {",
- " try {",
- " } on Unknown catch (e) {",
- " }",
- " }",
- "}"),
- TypeErrorCode.NO_SUCH_TYPE);
- }
-
- public void test_const_array() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class int {}",
- "class MyClass<E> {",
- " var a1 = <int>[];",
- " var a2 = <E>[];",
- " var a3 = const <int>[];",
- " var a4 = const <E>[];",
- "}"),
- ErrorExpectation.errEx(ResolverErrorCode.CONST_ARRAY_WITH_TYPE_VARIABLE, 7, 19, 1));
- }
-
- public void test_const_map() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class String {}",
- "class int {}",
- "class MyClass<E> {",
- " var a1 = <int>{};",
- " var a2 = <E>{};",
- " var a3 = const <int>{};",
- " var a4 = const <E>{};",
- "}"),
- ErrorExpectation.errEx(ResolverErrorCode.CONST_MAP_WITH_TYPE_VARIABLE, 8, 19, 1));
- }
-
- public void test_multipleLabels() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class MyClass<E> {",
- " foo() {",
- " a: b: while (true) { break a; } // ok",
- " a: b: while (true) { break b; } // ok",
- " a: b: while (true) { break c; } // error, no such label",
- " }",
- "}"),
- ErrorExpectation.errEx(ResolverErrorCode.CANNOT_RESOLVE_LABEL, 6, 32, 1));
- }
-
- public void test_multipleLabelsSwitch() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "foo() {",
- " switch(1) {",
- " a: case (0): break;",
- " a: case (1): break;",
- " }",
- "}"),
- ErrorExpectation.errEx(ResolverErrorCode.DUPLICATE_LABEL_IN_SWITCH_STATEMENT, 5, 3, 2));
- }
-
- public void test_breakInSwitch() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "foo() {",
- " switch(1) {",
- " a: case 0:",
- " break a;",
- " }",
- "}"),
- ErrorExpectation.errEx(ResolverErrorCode.BREAK_LABEL_RESOLVES_TO_CASE_OR_DEFAULT, 5, 14, 1));
- }
-
- public void test_continueInSwitch1() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "foo() {",
- " switch(1) {",
- " a: case 0:",
- " continue a;",
- " }",
- "}"));
- }
-
- public void test_continueInSwitch2() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "foo() {",
- " switch(1) {",
- " case 0:",
- " continue a;",
- " a: case 1:",
- " break;",
- " }",
- "}"));
- }
-
- public void test_continueInSwitch3() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "foo() {",
- " a: switch(1) {",
- " case 0:",
- " continue a;",
- " }",
- "}"),
- ErrorExpectation.errEx(ResolverErrorCode.CONTINUE_LABEL_RESOLVES_TO_SWITCH, 5, 17, 1));
- }
-
- public void test_new_noSuchType() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class MyClass {",
- " foo() {",
- " new Unknown();",
- " }",
- "}"),
- TypeErrorCode.NO_SUCH_TYPE);
- }
-
- public void test_new_noSuchType_typeArgument() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class Foo<T> {}",
- "class MyClass {",
- " foo() {",
- " new Foo<T>();",
- " }",
- "}"),
- TypeErrorCode.NO_SUCH_TYPE);
- }
-
- public void test_new_wrongTypeArgumentsNumber() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class Foo<T> {}",
- "class MyClass {",
- " foo() {",
- " new Foo<Object, Object>();",
- " }",
- "}"),
- ResolverErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS);
- }
-
- public void test_noSuchType_mapLiteral_typeArgument() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class String {}",
- "class MyClass {",
- " foo() {",
- " var map = <T>{};",
- " }",
- "}"),
- ResolverErrorCode.NO_SUCH_TYPE);
- }
-
- public void test_noSuchType_mapLiteral_num_type_args() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class int {}",
- "class String {}",
- "class MyClass {",
- " foo() {",
- " var map0 = {};",
- " var map1 = <int>{'foo': 1};",
- " var map2 = <String, int>{'foo' : 1};",
- " var map3 = <String, int, int>{'foo' : 1};",
- " }",
- "}"),
-// ResolverErrorCode.DEPRECATED_MAP_LITERAL_SYNTAX,
- ResolverErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS);
- }
-
- public void test_noSuchType_arrayLiteral_typeArgument() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class MyClass {",
- " foo() {",
- " var map = <T>[null];",
- " }",
- "}"),
- ResolverErrorCode.NO_SUCH_TYPE);
- }
-
- /**
- * When {@link SupertypeResolver} can not find "UnknownA", it uses {@link DynamicType}, which
- * returns {@link DynamicElement}. By itself, this is OK. However when we later try to resolve
- * second unknown type "UnknownB", we expect in {@link Elements#findElement()} specific
- * {@link ClassElement} implementation and {@link DynamicElement} is not valid.
- */
- public void test_classExtendsUnknown_fieldUnknownType() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class MyClass extends UnknownA {",
- " UnknownB field;",
- "}"),
- ResolverErrorCode.NO_SUCH_TYPE,
- TypeErrorCode.NO_SUCH_TYPE);
- }
-
- public void test_cascadeWithTypeVariable() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class C<T> {",
- " test() {",
- " this..T;",
- " }",
- "}"),
- ResolverErrorCode.TYPE_VARIABLE_NOT_ALLOWED_IN_IDENTIFIER);
- }
-
- public void test_cascade_complex() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class Spline {",
- " Spline a() {",
- " return this;",
- " }",
- " Line b() {",
- " return null;",
- " }",
- " Spline f() {",
- " Line x = new Line();",
- " x.h()..a()..b().g();",
- " }",
- "}",
- "class Line {",
- " Line g() {",
- " return this;",
- " }",
- " Spline h() {",
- " return null;",
- " }",
- "}"
- ));
- }
-
- /**
- * When {@link SupertypeResolver} can not find "UnknownA", it uses {@link DynamicType}, which
- * returns {@link DynamicElement}. By itself, this is OK. However when we later try to resolve
- * super() constructor invocation, this should not cause exception.
- */
- public void test_classExtendsUnknown_callSuperConstructor() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class MyClass extends UnknownA {",
- " MyClass() : super() {",
- " }",
- "}"),
- ResolverErrorCode.NO_SUCH_TYPE);
- }
-
- public void test_typedefUsedAsExpression() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "typedef f();",
- "main() {",
- " try {",
- " 0.25 - f;",
- " } catch(e) {}",
- "}"));
- }
-
- public void test_classUsedAsExpression() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "main() {",
- " 0.25 - Object;",
- "}"));
- }
-
- public void test_typeVariableUsedAsExpression() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class A<B> {",
- " var field = B;",
- " f() {",
- " process(x);",
- " }",
- "}",
- "process(x) {}",
- ""));
- }
-
- public void test_shadowType_withVariable() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class Foo<T> {}",
- "class Param {}",
- "class MyClass {",
- " foo() {",
- " var Param;",
- " new Foo<Param>();",
- " }",
- "}"),
- TypeErrorCode.NOT_A_TYPE);
- }
-
- public void test_operatorIs_withFunctionAlias() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class int {}",
- "typedef dynamic F1<T>(dynamic x, T y);",
- "class MyClass {",
- " main() {",
- " F1<int> f1 = (Object o, int i) => null;",
- " if (f1 is F1<int>) {",
- " }",
- " }",
- "}"));
- }
-
- public void testTypeVariableInStatic() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class A<T> {",
- " static foo() { new T(); }", // can't ref type variable in method
- " static bar() { T variable = 1; }",
- "}"),
- errEx(ResolverErrorCode.TYPE_VARIABLE_IN_STATIC_CONTEXT, 3, 22 , 1),
- errEx(ResolverErrorCode.TYPE_VARIABLE_IN_STATIC_CONTEXT, 4, 18, 1));
- }
-
- public void testConstClass() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class int {}",
- "class GoodBase {",
- " const GoodBase() : foo = 1;",
- " final foo;",
- "}",
- "class BadBase {",
- " BadBase() {}",
- " var foo;",
- "}", // line 10
- "class Bad {",
- " const Bad() : bar = 1;",
- " var bar;", // error: non-final field in const class
- "}",
- "class BadSub1 extends BadBase {",
- " const BadSub1() : super(), bar = 1;", // error2: inherits non-final field, super !const
- " final bar;",
- "}",
- "class BadSub2 extends GoodBase {",
- " const BadSub2() : super(), bar = 1;", // line 20
- " var bar;", // error: non-final field in constant class
- "}",
- "class GoodSub1 extends GoodBase {",
- " const GoodSub1() : super(), bar = 1;",
- " final bar;",
- "}",
- "class GoodSub2 extends GoodBase {",
- " const GoodSub2() : super();",
- " static int bar;", // OK, non-final but it is static
- "}"),
- errEx(ResolverErrorCode.CONST_CLASS_WITH_NONFINAL_FIELDS, 13, 7, 3),
- errEx(ResolverErrorCode.CONST_CONSTRUCTOR_MUST_CALL_CONST_SUPER, 16, 9, 7),
- errEx(ResolverErrorCode.CONST_CLASS_WITH_INHERITED_NONFINAL_FIELDS, 9, 7, 3),
- errEx(ResolverErrorCode.CONST_CLASS_WITH_NONFINAL_FIELDS, 21, 7, 3));
- }
-
- public void testFinalInit1() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class int {}",
- "final f1 = 1;",
- "final f2;", // error
- "class A {",
- " final f3 = 1;",
- " final f4;", // should be initialized in constructor
- " static final f5 = 1;",
- " static final f6;", // error
- " method() {",
- " final f7 = 1;",
- " final f8;", // error
- " }",
- "}"),
- errEx(ResolverErrorCode.TOPLEVEL_FINAL_REQUIRES_VALUE, 4, 7 , 2),
- errEx(ResolverErrorCode.STATIC_FINAL_REQUIRES_VALUE, 9, 16, 2),
- errEx(ResolverErrorCode.CONSTANTS_MUST_BE_INITIALIZED, 12, 11, 2),
- errEx(ResolverErrorCode.FINAL_FIELD_MUST_BE_INITIALIZED, 7, 9, 2));
- }
-
- public void testFinalInit2() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class C {",
- " final a;",
- " C() {}", // explicit constructor does not initialize
- "}"),
- errEx(ResolverErrorCode.FINAL_FIELD_MUST_BE_INITIALIZED, 3, 9, 1));
- }
-
- public void testFinalInit3() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class C {",
- " final a;", // implicit constructor does not initialize
- "}"),
- errEx(ResolverErrorCode.FINAL_FIELD_MUST_BE_INITIALIZED, 3, 9, 1));
- }
-
- public void testFinalInit4() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class C {",
- " final a;",
- " C(this.a);", // no error if initialized in initializer list
- "}"));
- }
-
- public void testFinalInit5() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class C {",
- " final a;",
- " C() : this.named(1);", // no error on redirect
- " C.named(this.a) {}",
- "}"));
- }
-
- public void testFinalInit7() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class C {",
- " final a = 1;",
- "}"));
- }
-
- public void testFinalInit8() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class C {",
- " final a;",
- " C() : this.a = 1;",
- "}"));
- }
-
- public void test_const_requiresValue() {
- resolveAndTest(Joiner.on("\n").join(
- "// filler filler filler filler filler filler filler filler filler filler",
- "class Object {}",
- "class int {}",
- "const f;",
- ""),
- errEx(ResolverErrorCode.CONST_REQUIRES_VALUE, 4, 7, 1));
- }
-
- public void test_const_requiresConstValue() {
- resolveAndTestCtConstExpectErrors(Joiner.on("\n").join(
- "class Object {}",
- "f() {",
- " const id = 1.toString();",
- "}"),
- errEx(ResolverErrorCode.EXPECTED_CONSTANT_EXPRESSION, 3, 14, 12));
- }
-
- public void test_const_undefinedClass() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "main() {",
- " const A();",
- "}"),
- errEx(ResolverErrorCode.NO_SUCH_TYPE_CONST, 3, 8, 1));
- }
-
- public void testNoGetterOrSetter() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "get getter1 {}",
- "set setter1(arg) {}",
- "class A {",
- " static get getter2 {}",
- " static set setter2(arg) {}",
- " get getter3 {}",
- " set setter3(arg) {}",
- "}",
- "method() {",
- " var result;",
- " result = getter1;",
- " getter1 = 1;",
- " result = setter1;",
- " setter1 = 1;",
- " result = A.getter2;",
- " A.getter2 = 1;",
- " result = A.setter2;",
- " A.setter2 = 1;",
- " var instance = new A();",
- " result = instance.getter3;",
- " instance.getter3 = 1;",
- " result = instance.setter3;",
- " instance.setter3 = 1;",
- "}"),
- errEx(ResolverErrorCode.FIELD_DOES_NOT_HAVE_A_SETTER, 13, 3, 7),
- errEx(ResolverErrorCode.FIELD_DOES_NOT_HAVE_A_GETTER, 14, 12, 7),
- errEx(ResolverErrorCode.FIELD_DOES_NOT_HAVE_A_SETTER, 17, 5, 7),
- errEx(ResolverErrorCode.FIELD_DOES_NOT_HAVE_A_GETTER, 18, 14, 7));
- }
-
- public void testErrorInUnqualifiedInvocation1() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class int {}",
- "class Foo {",
- " Foo() {}",
- "}",
- "method() {",
- " Foo();",
- "}"),
- errEx(ResolverErrorCode.DID_YOU_MEAN_NEW, 7, 2, 5));
- }
-
- public void testErrorInUnqualifiedInvocation2() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class int {}",
- "class Foo {}",
- "method() {",
- " Foo();",
- "}"),
- errEx(ResolverErrorCode.DID_YOU_MEAN_NEW, 5, 2, 5));
- }
-
- public void testErrorInUnqualifiedInvocation3() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class int {}",
- "class Foo<T> {",
- " method() {",
- " T();",
- " }",
- "}"),
- errEx(ResolverErrorCode.DID_YOU_MEAN_NEW, 5, 4, 3));
- }
-
-
- public void testErrorInUnqualifiedInvocation4() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class int {}",
- "typedef int foo();",
- "method() {",
- " foo();",
- "}"),
- errEx(ResolverErrorCode.CANNOT_CALL_FUNCTION_TYPE_ALIAS, 5, 2, 5));
- }
-
- public void testErrorInUnqualifiedInvocation5() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class int {}",
- "method() {",
- " outer: for(int i = 0; i < 1; i++) {",
- " outer();",
- " }",
- "}"),
- errEx(ResolverErrorCode.CANNOT_RESOLVE_METHOD, 5, 5, 5));
- }
-
- public void testUndercoreInNamedParameterMethodDefinition() {
- // TODO(scheglov)
- // Language change 4288 adds new syntax for optional named parameters.
- // However before "remove old optional parameter syntax" we have to support old syntax too.
- // And this conflicts with "_" handling in optional named parameters.
- //
- // http://code.google.com/p/dart/issues/detail?id=4539
- // requested to disable this
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "method({_foo}) {}",
- "class Foo {",
- " var _bar;",
- " //Foo({this._bar}){}",
- " method({_foo}){}",
- "}"),
- errEx(ResolverErrorCode.NAMED_PARAMETERS_CANNOT_START_WITH_UNDER, 2, 9, 4),
-// errEx(ResolverErrorCode.NAMED_PARAMETERS_CANNOT_START_WITH_UNDER, 5, 8, 9),
- errEx(ResolverErrorCode.NAMED_PARAMETERS_CANNOT_START_WITH_UNDER, 6, 11, 4));
- }
-
- public void testUndercoreInOptionalParameterMethodDefinition() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "method([_foo]) {}",
- "typedef myFuncType([_foo]);",
- "class Foo {",
- " var _bar;",
- " method([_foo]){}",
- "}"),
- errEx(ResolverErrorCode.OPTIONAL_PARAMETERS_CANNOT_START_WITH_UNDER, 2, 9, 4),
- errEx(ResolverErrorCode.OPTIONAL_PARAMETERS_CANNOT_START_WITH_UNDER, 6, 11, 4),
- errEx(ResolverErrorCode.OPTIONAL_PARAMETERS_CANNOT_START_WITH_UNDER, 3, 21, 4));
- }
-
- public void testUndercoreInNamedParameterFunctionDefinition() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "func({_foo}) {}"),
- errEx(ResolverErrorCode.NAMED_PARAMETERS_CANNOT_START_WITH_UNDER, 2, 7, 4));
- }
-
- public void testUndercoreInNamedParameterFunctionAlias() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "typedef Object func({_foo});"),
- errEx(ResolverErrorCode.NAMED_PARAMETERS_CANNOT_START_WITH_UNDER, 2, 22, 4));
- }
-
- /**
- * "this" is not accessible to initializers, so invocation of instance method is error.
- * <p>
- * http://code.google.com/p/dart/issues/detail?id=2477
- */
- public void test_callInstanceMethod_fromInitializer() throws Exception {
- resolveAndTest(
- Joiner.on("\n").join(
- "// filler filler filler filler filler filler filler filler filler filler",
- "class Object {}",
- "class A {",
- " var x;",
- " A() : x = foo() {}",
- " foo() {}",
- "}",
- ""),
- errEx(ResolverErrorCode.INSTANCE_METHOD_FROM_INITIALIZER, 5, 13, 5));
- }
-
- /**
- * "this" is not accessible to initializers, so reference of instance method is error.
- * <p>
- * http://code.google.com/p/dart/issues/detail?id=2477
- */
- public void test_referenceInstanceMethod_fromInitializer() throws Exception {
- resolveAndTest(
- Joiner.on("\n").join(
- "// filler filler filler filler filler filler filler filler filler filler",
- "class Object {}",
- "class A {",
- " var x;",
- " A() : x = foo {}",
- " foo() {}",
- "}",
- ""),
- errEx(ResolverErrorCode.INSTANCE_METHOD_FROM_INITIALIZER, 5, 13, 3));
- }
-
- public void test_redirectConstructor() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class int {}",
- "int topLevel() {}",
- "class A {",
- " method() {}",
- "}",
- "class C {",
- " C(arg){}",
- " C.named1() : this(topLevel());", // ok
- " C.named2() : this(method());", // error, not a static method
- " C.named3() : this(new A().method());", // ok
- " method() {}",
- "}"),
- errEx(ResolverErrorCode.INSTANCE_METHOD_FROM_REDIRECT, 10, 21, 8));
- }
-
- public void test_unresolvedRedirectConstructor() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class A {",
- " A() : this.named();",
- "}"),
- errEx(ResolverErrorCode.CANNOT_RESOLVE_CONSTRUCTOR, 3, 9, 12));
- }
-
- public void test_unresolvedSuperConstructor() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class A {",
- " A() : super.named() {}",
- "}"),
- errEx(ResolverErrorCode.CANNOT_RESOLVE_SUPER_CONSTRUCTOR, 3, 9, 13));
- }
-
- public void test_unresolvedFieldInInitializer() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class A {",
- " const A() : this.field = 1;",
- "}"),
- errEx(ResolverErrorCode.CANNOT_RESOLVE_FIELD, 3, 20, 5));
- }
-
- public void test_illegalConstructorModifiers() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class A {",
- " static A() {}",
- " static A.named() {}",
- "}"),
- errEx(ResolverErrorCode.CONSTRUCTOR_CANNOT_BE_STATIC, 3, 10, 1),
- errEx(ResolverErrorCode.CONSTRUCTOR_CANNOT_BE_STATIC, 4, 10, 7));
- }
-
- public void test_illegalConstructorReturnType() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class int {}",
- "class A {",
- " void A();",
- " void A.named();",
- "}",
- "class B {",
- " int B();",
- " int B.named();",
- "}"),
- errEx(ResolverErrorCode.CONSTRUCTOR_CANNOT_HAVE_RETURN_TYPE, 4, 3, 4),
- errEx(ResolverErrorCode.CONSTRUCTOR_CANNOT_HAVE_RETURN_TYPE, 5, 3, 4),
- errEx(ResolverErrorCode.CONSTRUCTOR_CANNOT_HAVE_RETURN_TYPE, 8, 3, 3),
- errEx(ResolverErrorCode.CONSTRUCTOR_CANNOT_HAVE_RETURN_TYPE, 9, 3, 3));
- }
-
- public void test_fieldAccessInInitializer() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class A {",
- " var f1;",
- " var f2;",
- " A() : this.f2 = f1;",
- "}"),
- errEx(ResolverErrorCode.CANNOT_ACCESS_FIELD_IN_INIT, 5, 19, 2));
- }
-
- public void test_cannotBeResolved() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class A {",
- " static var field = B;",
- " }",
- "method() {",
- " A.noField = 1;",
- "}"),
- errEx(TypeErrorCode.CANNOT_BE_RESOLVED, 3, 22, 1),
- errEx(TypeErrorCode.CANNOT_BE_RESOLVED, 6, 5, 7));
- }
-
- public void test_invokeTypeAlias() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "typedef Object func();",
- "method() {",
- " func();",
- "}"),
- errEx(ResolverErrorCode.CANNOT_CALL_FUNCTION_TYPE_ALIAS, 4, 3, 6));
- }
-
- public void test_initializerErrors() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class A { }",
- "class B<T> {",
- " method() { }",
- " B(arg) : A = 1, ",
- " method = 2,",
- " arg = 3,",
- " T = 4 {}",
- "}"),
- errEx(ResolverErrorCode.EXPECTED_FIELD_NOT_CLASS, 5, 12, 1),
- errEx(ResolverErrorCode.EXPECTED_FIELD_NOT_METHOD, 6, 12, 6),
- errEx(ResolverErrorCode.EXPECTED_FIELD_NOT_PARAMETER, 7, 12, 3),
- errEx(ResolverErrorCode.EXPECTED_FIELD_NOT_TYPE_VAR, 8, 12, 1));
- }
-
- public void test_illegalAccessFromStatic() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class C {",
- " var f;",
- " m() {}",
- " static method () {",
- " f = 1;",
- " m();",
- " var func = m;",
- " }",
- "}"),
- errEx(ResolverErrorCode.ILLEGAL_FIELD_ACCESS_FROM_STATIC, 6, 5, 1),
- errEx(ResolverErrorCode.INSTANCE_METHOD_FROM_STATIC, 7, 5, 3),
- errEx(ResolverErrorCode.ILLEGAL_METHOD_ACCESS_FROM_STATIC, 8, 16, 1));
- }
-
- public void test_invalidGenerativeConstructorReturn() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class C {",
- " C() { return 5 + 7; }",
- "}"),
- errEx(ResolverErrorCode.INVALID_RETURN_IN_CONSTRUCTOR, 3, 9, 13));
- }
-
- public void test_isAClass() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "method () {",
- " var a = Object;",
- "}"));
- }
-
- public void test_isAnInstanceMethod() {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class C {",
- " method() {}",
- "}",
- "method () {",
- " var a = C.method();",
- "}"),
- errEx(ResolverErrorCode.IS_AN_INSTANCE_METHOD, 6, 13, 6));
- }
-
- public void test_staticAccess() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class C {",
- " var field;",
- " method() {}",
- "}",
- "method() {",
- " C.method = 1;",
- " C.field();",
- " var a = C.field;",
- "}"),
- errEx(ResolverErrorCode.NOT_A_STATIC_METHOD, 7, 5, 6),
- errEx(ResolverErrorCode.CANNOT_ASSIGN_TO_METHOD, 7, 3, 8),
- errEx(ResolverErrorCode.IS_AN_INSTANCE_FIELD, 8, 5, 5),
- errEx(ResolverErrorCode.NOT_A_STATIC_FIELD, 9, 13, 5));
- }
-
- public void test_redirectedConstructor() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class A {",
- " A() : this.named1();",
- " A.named1() : this.named2();",
- " A.named2() : this.named1();",
- "}"),
- errEx(ResolverErrorCode.REDIRECTED_CONSTRUCTOR_CYCLE, 3, 3, 20),
- errEx(ResolverErrorCode.REDIRECTED_CONSTRUCTOR_CYCLE, 4, 3, 27),
- errEx(ResolverErrorCode.REDIRECTED_CONSTRUCTOR_CYCLE, 5, 3, 27));
- }
-
- public void test_tooFewArgumentsInImplicitSuper() throws Exception {
- resolveAndTest(Joiner.on("\n").join(
- "class Object {}",
- "class A {",
- " A(arg) {}",
- "}",
- "class B extends A {",
- " B() { }",
- "}"),
- errEx(ResolverErrorCode.TOO_FEW_ARGUMENTS_IN_IMPLICIT_SUPER, 6, 3, 7));
- }
-}

Powered by Google App Engine
This is Rietveld 408576698