@Test
  public void canReferenceExportedTypeReferences() {
    CompilerUtil compiler = createCompiler(path("foo/bar.js"), path("foo/baz.js"));

    compiler.compile(
        createSourceFile(path("foo/bar.js"), "/** @constructor */", "exports.foo = function(){};"),
        createSourceFile(
            path("foo/baz.js"),
            "var bar = require('./bar');",
            "var foo = require('./bar').foo;",
            "/** @type {!bar.foo} */",
            "var a = new bar.foo();",
            "/** @type {!foo} */",
            "var b = new foo();"));

    assertThat(compiler.toSource())
        .startsWith(
            lines(
                "var $jscomp = {};",
                "$jscomp.scope = {};",
                "var module$foo$bar = {};",
                "module$foo$bar.foo = function() {",
                "};",
                "var module$foo$baz = {};",
                "$jscomp.scope.a = new module$foo$bar.foo;",
                "$jscomp.scope.b = new module$foo$bar.foo;"));

    ObjectType scope =
        compiler
            .getCompiler()
            .getTopScope()
            .getVar("$jscomp")
            .getType()
            .findPropertyType("scope")
            .toObjectType();

    assertEquals("module$foo$bar.foo", scope.getPropertyType("a").getDisplayName());
    assertEquals("module$foo$bar.foo", scope.getPropertyType("b").getDisplayName());
  }