Issue 5255. Override setter-only field with instance variable
http://code.google.com/p/dart/issues/detail?id=5255 R=brianwilkerson@google.com BUG= Review URL: https://codereview.chromium.org//10986033 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@12880 260f80e4-7a28-3924-810f-c04153c831b5
This commit is contained in:
@@ -3133,6 +3133,7 @@ public class TypeAnalyzer implements DartCompilationPhase {
|
||||
overridden.addAll(superMembers.removeAll(name));
|
||||
} else {
|
||||
overridden.addAll(superMembers.removeAll(name));
|
||||
overridden.addAll(superMembers.removeAll("setter " + name));
|
||||
}
|
||||
// check override
|
||||
for (Element superElement : overridden) {
|
||||
|
||||
@@ -5110,6 +5110,43 @@ public class TypeAnalyzerCompilerTest extends CompilerTestCase {
|
||||
assertClassMembers(superElements, "field A.foo");
|
||||
}
|
||||
}
|
||||
|
||||
public void test_getOverridden_field_withGetter() throws Exception {
|
||||
analyzeLibrary(
|
||||
"// filler filler filler filler filler filler filler filler filler filler",
|
||||
"class A {",
|
||||
" var foo;",
|
||||
"}",
|
||||
"class B extends A {",
|
||||
" get foo => 0;",
|
||||
" set foo(x) {}",
|
||||
"}",
|
||||
"");
|
||||
// getter
|
||||
{
|
||||
DartMethodDefinition node = findNode(DartMethodDefinition.class, "get foo");
|
||||
Set<Element> superElements = node.getElement().getOverridden();
|
||||
assertClassMembers(superElements, "field A.foo");
|
||||
}
|
||||
}
|
||||
|
||||
public void test_getOverridden_field_withSetter() throws Exception {
|
||||
analyzeLibrary(
|
||||
"// filler filler filler filler filler filler filler filler filler filler",
|
||||
"class A {",
|
||||
" var foo;",
|
||||
"}",
|
||||
"class B extends A {",
|
||||
" set foo(x) {}",
|
||||
"}",
|
||||
"");
|
||||
// setter
|
||||
{
|
||||
DartMethodDefinition node = findNode(DartMethodDefinition.class, "set foo");
|
||||
Set<Element> superElements = node.getElement().getOverridden();
|
||||
assertClassMembers(superElements, "field A.foo");
|
||||
}
|
||||
}
|
||||
|
||||
public void test_getOverridden_getterSetter_withField() throws Exception {
|
||||
analyzeLibrary(
|
||||
@@ -5126,6 +5163,51 @@ public class TypeAnalyzerCompilerTest extends CompilerTestCase {
|
||||
Set<Element> superElements = node.getElement().getOverridden();
|
||||
assertClassMembers(superElements, "field A.foo");
|
||||
}
|
||||
|
||||
public void test_getOverridden_getter_withField() throws Exception {
|
||||
analyzeLibrary(
|
||||
"// filler filler filler filler filler filler filler filler filler filler",
|
||||
"class A {",
|
||||
" get foo => 0;",
|
||||
"}",
|
||||
"class B extends A {",
|
||||
" var foo = 42;",
|
||||
"}",
|
||||
"");
|
||||
DartField node = findNode(DartField.class, "foo = 42");
|
||||
Set<Element> superElements = node.getElement().getOverridden();
|
||||
assertClassMembers(superElements, "field A.foo");
|
||||
}
|
||||
|
||||
public void test_getOverridden_setter_withField() throws Exception {
|
||||
analyzeLibrary(
|
||||
"// filler filler filler filler filler filler filler filler filler filler",
|
||||
"class A {",
|
||||
" set foo(x) {}",
|
||||
"}",
|
||||
"class B extends A {",
|
||||
" var foo = 42;",
|
||||
"}",
|
||||
"");
|
||||
DartField node = findNode(DartField.class, "foo = 42");
|
||||
Set<Element> superElements = node.getElement().getOverridden();
|
||||
assertClassMembers(superElements, "field A.setter foo");
|
||||
}
|
||||
|
||||
public void test_getOverridden_setter_withSetter() throws Exception {
|
||||
analyzeLibrary(
|
||||
"// filler filler filler filler filler filler filler filler filler filler",
|
||||
"class A {",
|
||||
" set foo(x) {} // A",
|
||||
"}",
|
||||
"class B extends A {",
|
||||
" set foo(x) {} // B",
|
||||
"}",
|
||||
"");
|
||||
DartField node = findNode(DartField.class, "set foo(x) {} // B");
|
||||
Set<Element> superElements = node.getElement().getOverridden();
|
||||
assertClassMembers(superElements, "field A.setter foo");
|
||||
}
|
||||
|
||||
private static void assertClassMembers(Set<Element> superElements, String... expectedNames) {
|
||||
Set<String> superNames = Sets.newHashSet();
|
||||
|
||||
Reference in New Issue
Block a user