| Index: pkg/front_end/lib/src/fasta/builder/constructor_reference_builder.dart | 
| diff --git a/pkg/front_end/lib/src/fasta/builder/constructor_reference_builder.dart b/pkg/front_end/lib/src/fasta/builder/constructor_reference_builder.dart | 
| index 24186c39d4e1bb5b74db05eb9b8ec3f1e96bf090..b07316f1dd22138397c2ab90f79fa0b334e95cd0 100644 | 
| --- a/pkg/front_end/lib/src/fasta/builder/constructor_reference_builder.dart | 
| +++ b/pkg/front_end/lib/src/fasta/builder/constructor_reference_builder.dart | 
| @@ -13,7 +13,12 @@ import 'builder.dart' | 
| Scope, | 
| TypeBuilder; | 
|  | 
| -import '../messages.dart' show templateConstructorNotFound, warning; | 
| +import '../messages.dart' | 
| +    show | 
| +        templateClassNotFound, | 
| +        templateConstructorNotFound, | 
| +        templateNotAConstructor, | 
| +        warning; | 
|  | 
| class ConstructorReferenceBuilder extends Builder { | 
| final String name; | 
| @@ -25,6 +30,8 @@ class ConstructorReferenceBuilder extends Builder { | 
|  | 
| Builder target; | 
|  | 
| +  ClassBuilder classBuilder; | 
| + | 
| ConstructorReferenceBuilder(this.name, this.typeArguments, this.suffix, | 
| Builder parent, int charOffset) | 
| : super(parent, charOffset, parent.fileUri); | 
| @@ -32,33 +39,78 @@ class ConstructorReferenceBuilder extends Builder { | 
| String get fullNameForErrors => "$name${suffix == null ? '' : '.$suffix'}"; | 
|  | 
| void resolveIn(Scope scope, LibraryBuilder accessingLibrary) { | 
| +    List<String> identifiers; | 
| int index = name.indexOf("."); | 
| -    Builder builder; | 
| if (index == -1) { | 
| -      builder = scope.lookup(name, charOffset, fileUri); | 
| +      if (suffix == null) { | 
| +        identifiers = <String>[name]; | 
| +      } else { | 
| +        identifiers = <String>[name, suffix]; | 
| +      } | 
| } else { | 
| -      String prefix = name.substring(0, index); | 
| -      String middle = name.substring(index + 1); | 
| -      builder = scope.lookup(prefix, charOffset, fileUri); | 
| -      if (builder is PrefixBuilder) { | 
| +      String first = name.substring(0, index); | 
| +      String second = name.substring(index + 1); | 
| +      if (suffix == null) { | 
| +        identifiers = <String>[first, second]; | 
| +      } else { | 
| +        identifiers = <String>[first, second, suffix]; | 
| +      } | 
| +    } | 
| + | 
| +    Builder builder; | 
| +    bool isConstructor = false; | 
| +    ClassBuilder cls; | 
| +    for (String identifier in identifiers) { | 
| +      isConstructor = false; | 
| +      if (builder == null) { | 
| +        builder = scope.lookup(identifier, charOffset, fileUri); | 
| +        if (builder == null) { | 
| +          warning(templateClassNotFound.withArguments(identifier), charOffset, | 
| +              fileUri); | 
| +          return; | 
| +        } | 
| +      } else if (builder is PrefixBuilder) { | 
| PrefixBuilder prefix = builder; | 
| -        builder = prefix.lookup(middle, charOffset, fileUri); | 
| +        builder = prefix.lookup(identifier, charOffset, fileUri); | 
| +        if (builder == null) { | 
| +          warning(templateClassNotFound.withArguments(identifier), charOffset, | 
| +              fileUri); | 
| +          return; | 
| +        } | 
| } else if (builder is ClassBuilder) { | 
| -        ClassBuilder cls = builder; | 
| +        cls = builder; | 
| builder = cls.findConstructorOrFactory( | 
| -            middle, charOffset, fileUri, accessingLibrary); | 
| -        if (suffix == null) { | 
| -          target = builder; | 
| +            identifier, charOffset, fileUri, accessingLibrary); | 
| +        if (builder == null) { | 
| +          warning(templateConstructorNotFound.withArguments(identifier), | 
| +              charOffset, fileUri); | 
| return; | 
| } | 
| +        isConstructor = true; | 
| +      } else { | 
| +        warning(templateNotAConstructor.withArguments(fullNameForErrors), | 
| +            charOffset, fileUri); | 
| +        return; | 
| } | 
| } | 
| + | 
| if (builder is ClassBuilder) { | 
| -      target = builder.findConstructorOrFactory( | 
| -          suffix ?? "", charOffset, fileUri, accessingLibrary); | 
| +      cls = builder; | 
| +      builder = cls.findConstructorOrFactory( | 
| +          "", charOffset, fileUri, accessingLibrary); | 
| +      if (builder == null) { | 
| +        warning(templateConstructorNotFound.withArguments(fullNameForErrors), | 
| +            charOffset, fileUri); | 
| +        return; | 
| +      } | 
| +      isConstructor = true; | 
| } | 
| -    if (target == null) { | 
| -      warning(templateConstructorNotFound.withArguments(fullNameForErrors), | 
| + | 
| +    if (isConstructor) { | 
| +      target = builder; | 
| +      classBuilder = cls; | 
| +    } else { | 
| +      warning(templateNotAConstructor.withArguments(fullNameForErrors), | 
| charOffset, fileUri); | 
| } | 
| } | 
|  |