| Index: frog/leg/scanner/class_element_parser.dart
|
| diff --git a/frog/leg/scanner/class_element_parser.dart b/frog/leg/scanner/class_element_parser.dart
|
| index 9cb27f9a59d2b9aa979ef6afba01a510f1562f5a..88a580dba8373f9555482b43b4c40ccd7e02715e 100644
|
| --- a/frog/leg/scanner/class_element_parser.dart
|
| +++ b/frog/leg/scanner/class_element_parser.dart
|
| @@ -38,26 +38,41 @@ class MemberListener extends NodeListener {
|
| [Element this.enclosingElement = null])
|
| : super(canceler, logger);
|
|
|
| - bool isConstructor(Identifier name) {
|
| - return enclosingElement !== null &&
|
| - enclosingElement.kind == ElementKind.CLASS &&
|
| - enclosingElement.name == name.source;
|
| + bool isConstructorName(Node nameNode) {
|
| + if (enclosingElement === null ||
|
| + enclosingElement.kind != ElementKind.CLASS) {
|
| + return false;
|
| + }
|
| + SourceString name;
|
| + if (nameNode.asIdentifier() != null) {
|
| + name = nameNode.asIdentifier().source;
|
| + } else {
|
| + Send send = nameNode.asSend();
|
| + name = send.receiver.asIdentifier().source;
|
| + }
|
| + return enclosingElement.name == name;
|
| }
|
|
|
| void endMethod(Token beginToken, Token endToken) {
|
| super.endMethod(beginToken, endToken);
|
| FunctionExpression method = popNode();
|
| pushNode(null);
|
| - Expression qualified = method.name;
|
| - Identifier name = qualified.asIdentifier();
|
| - if (name === null) {
|
| - canceler.cancel('qualified names are not implemented', node: qualified);
|
| + bool isConstructor = isConstructorName(method.name);
|
| + SourceString name;
|
| + if (method.name.asSend() != null) {
|
| + Identifier receiver = method.name.asSend().receiver.asIdentifier();
|
| + Identifier selector = method.name.asSend().selector.asIdentifier();
|
| + SourceString className = receiver.source;
|
| + SourceString constructorName = selector.source;
|
| + name = new SourceString('$className.$constructorName');
|
| + } else {
|
| + name = method.name.asIdentifier().source;
|
| }
|
| - ElementKind kind = isConstructor(name) ?
|
| + ElementKind kind = isConstructor ?
|
| ElementKind.GENERATIVE_CONSTRUCTOR :
|
| ElementKind.FUNCTION;
|
| Element memberElement =
|
| - new PartialFunctionElement(name.source, beginToken, endToken,
|
| + new PartialFunctionElement(name, beginToken, endToken,
|
| kind, method.modifiers, enclosingElement);
|
| enclosingElement.addMember(memberElement);
|
| }
|
|
|