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

Unified Diff: sdk/lib/_internal/compiler/implementation/resolution/members.dart

Issue 14907008: Remove support for interface in dart2js. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Rebased Created 7 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: sdk/lib/_internal/compiler/implementation/resolution/members.dart
diff --git a/sdk/lib/_internal/compiler/implementation/resolution/members.dart b/sdk/lib/_internal/compiler/implementation/resolution/members.dart
index 156066f97739f72c0694acfe4a2c775636f94275..49cd0f9b640050980c9730123a300f76a2a54580 100644
--- a/sdk/lib/_internal/compiler/implementation/resolution/members.dart
+++ b/sdk/lib/_internal/compiler/implementation/resolution/members.dart
@@ -302,7 +302,6 @@ class ResolverTask extends CompilerTask {
if (tree.returnType != null) {
error(tree, MessageKind.CONSTRUCTOR_WITH_RETURN_TYPE);
}
- resolveConstructorImplementation(element, tree);
}
ResolverVisitor visitor = visitorFor(element);
visitor.useElement(tree, element);
@@ -359,67 +358,6 @@ class ResolverTask extends CompilerTask {
}
}
- void resolveConstructorImplementation(FunctionElement constructor,
- FunctionExpression node) {
- if (!identical(constructor.defaultImplementation, constructor)) return;
- ClassElement intrface = constructor.getEnclosingClass();
- if (!intrface.isInterface()) return;
- DartType defaultType = intrface.defaultClass;
- if (defaultType == null) {
- error(node, MessageKind.NO_DEFAULT_CLASS,
- {'interfaceName': intrface.name});
- }
- ClassElement defaultClass = defaultType.element;
- defaultClass.ensureResolved(compiler);
- assert(defaultClass.resolutionState == STATE_DONE);
- assert(defaultClass.supertypeLoadState == STATE_DONE);
- if (defaultClass.isInterface()) {
- error(node, MessageKind.CANNOT_INSTANTIATE_INTERFACE,
- {'interfaceName': defaultClass.name});
- }
- // We have now established the following:
- // [intrface] is an interface, let's say "MyInterface".
- // [defaultClass] is a class, let's say "MyClass".
-
- Selector selector;
- // If the default class implements the interface then we must use the
- // default class' name. Otherwise we look for a factory with the name
- // of the interface.
- if (defaultClass.implementsInterface(intrface)) {
- var constructorNameString = constructor.name.slowToString();
- // Create selector based on constructor.name but where interface
- // is replaced with default class name.
- // TODO(ahe): Don't use string manipulations here.
- int classNameSeparatorIndex = constructorNameString.indexOf('\$');
- if (classNameSeparatorIndex < 0) {
- selector = new Selector.callDefaultConstructor(
- defaultClass.getLibrary());
- } else {
- selector = new Selector.callConstructor(
- new SourceString(
- constructorNameString.substring(classNameSeparatorIndex + 1)),
- defaultClass.getLibrary());
- }
- constructor.defaultImplementation =
- defaultClass.lookupConstructor(selector);
- } else {
- selector =
- new Selector.callConstructor(constructor.name,
- defaultClass.getLibrary());
- constructor.defaultImplementation =
- defaultClass.lookupFactoryConstructor(selector);
- }
- if (constructor.defaultImplementation == null) {
- // We failed to find a constructor named either
- // "MyInterface.name" or "MyClass.name".
- // TODO(aprelev@gmail.com): Use constructorNameForDiagnostics in
- // the error message below.
- error(node,
- MessageKind.CANNOT_FIND_CONSTRUCTOR2,
- {'constructorName': selector.name, 'className': defaultClass.name});
- }
- }
-
TreeElements resolveField(VariableElement element) {
Node tree = element.parseNode(compiler);
if(element.modifiers.isStatic() && element.variables.isTopLevel()) {
@@ -568,7 +506,6 @@ class ResolverTask extends CompilerTask {
element.computeType(compiler);
// Copy class hiearchy from origin.
element.supertype = element.origin.supertype;
- element.defaultClass = element.origin.defaultClass;
element.interfaces = element.origin.interfaces;
element.allSupertypes = element.origin.allSupertypes;
// Stepwise assignment to ensure invariant.
@@ -2576,24 +2513,8 @@ class ResolverVisitor extends MappingVisitor<Element> {
warnArgumentMismatch(node.send, constructor);
compiler.backend.registerThrowNoSuchMethod(mapping);
}
- compiler.withCurrentElement(constructor, () {
- FunctionElement target = constructor;
- if (constructor.isForwardingConstructor) {
- target = constructor.targetConstructor;
- }
- FunctionExpression tree = target.parseNode(compiler);
- compiler.resolver.resolveConstructorImplementation(constructor, tree);
- });
- if (constructor.defaultImplementation != constructor) {
- // Support for deprecated interface support.
- // TODO(ngeoffray): Remove once we remove such support.
- world.registerStaticUse(constructor.declaration);
- world.registerInstantiatedClass(
- constructor.getEnclosingClass().declaration, mapping);
- constructor = constructor.defaultImplementation;
- }
- // [constructor.defaultImplementation] might be the implementation element
+ // [constructor] might be the implementation element
// and only declaration elements may be registered.
world.registerStaticUse(constructor.declaration);
ClassElement cls = constructor.getEnclosingClass();
@@ -3243,9 +3164,6 @@ class ClassResolverVisitor extends TypeDefinitionVisitor {
element.interfaces = resolveInterfaces(node.interfaces, node.superclass);
calculateAllSupertypes(element);
- if (node.defaultClause != null) {
- element.defaultClass = visit(node.defaultClause);
- }
element.addDefaultConstructorIfNeeded(compiler);
return element.computeType(compiler);
}
@@ -3379,62 +3297,11 @@ class ClassResolverVisitor extends TypeDefinitionVisitor {
return mixin;
}
- // TODO(johnniwinther): Remove when default class is no longer supported.
- DartType visitTypeAnnotation(TypeAnnotation node) {
- return visit(node.typeName);
- }
-
DartType resolveType(TypeAnnotation node) {
// TODO(johnniwinther): Report errors/warnings on resolution failures.
return typeResolver.resolveTypeAnnotation(this, node);
}
- // TODO(johnniwinther): Remove when default class is no longer supported.
- DartType visitIdentifier(Identifier node) {
- Element element = scope.lookup(node.source);
- if (element == null) {
- error(node, MessageKind.CANNOT_RESOLVE_TYPE, {'typeName': node});
- return null;
- } else if (!element.impliesType() && !element.isTypeVariable()) {
- error(node, MessageKind.NOT_A_TYPE, {'node': node});
- return null;
- } else {
- if (element.isTypeVariable()) {
- TypeVariableElement variableElement = element;
- return variableElement.type;
- } else if (element.isTypedef()) {
- compiler.unimplemented('visitIdentifier for typedefs', node: node);
- } else {
- // TODO(ngeoffray): Use type variables.
- return element.computeType(compiler);
- }
- }
- return null;
- }
-
- // TODO(johnniwinther): Remove when default class is no longer supported.
- DartType visitSend(Send node) {
- Identifier prefix = node.receiver.asIdentifier();
- if (prefix == null) {
- error(node.receiver, MessageKind.NOT_A_PREFIX, {'node': node.receiver});
- return null;
- }
- Element element = scope.lookup(prefix.source);
- if (element == null || !identical(element.kind, ElementKind.PREFIX)) {
- error(node.receiver, MessageKind.NOT_A_PREFIX, {'node': node.receiver});
- return null;
- }
- PrefixElement prefixElement = element;
- Identifier selector = node.selector.asIdentifier();
- var e = prefixElement.lookupLocalMember(selector.source);
- if (e == null || !e.impliesType()) {
- error(node.selector, MessageKind.CANNOT_RESOLVE_TYPE,
- {'typeName': node.selector});
- return null;
- }
- return e.computeType(compiler);
- }
-
DartType resolveSupertype(ClassElement cls, TypeAnnotation superclass) {
DartType supertype = typeResolver.resolveTypeAnnotation(
this, superclass, onFailure: error);
@@ -3966,13 +3833,6 @@ class ConstructorResolver extends CommonResolverVisitor<Element> {
if (!Elements.isUnresolved(e) && e.isClass()) {
ClassElement cls = e;
cls.ensureResolved(compiler);
- if (cls.isInterface() && (cls.defaultClass == null)) {
- // TODO(ahe): Remove this check and error message when we
- // don't have interfaces anymore.
- error(diagnosticNode,
- MessageKind.CANNOT_INSTANTIATE_INTERFACE,
- {'interfaceName': cls.name});
- }
// The unnamed constructor may not exist, so [e] may become unresolved.
e = lookupConstructor(cls, diagnosticNode, const SourceString(''));
}
@@ -4002,11 +3862,6 @@ class ConstructorResolver extends CommonResolverVisitor<Element> {
if (identical(e.kind, ElementKind.CLASS)) {
ClassElement cls = e;
cls.ensureResolved(compiler);
- if (cls.isInterface() && (cls.defaultClass == null)) {
- error(node.receiver,
- MessageKind.CANNOT_INSTANTIATE_INTERFACE,
- {'interfaceName': cls.name});
- }
return lookupConstructor(cls, name, name.source);
} else if (identical(e.kind, ElementKind.PREFIX)) {
PrefixElement prefix = e;

Powered by Google App Engine
This is Rietveld 408576698