src/com/google/javascript/rhino/jstype/NamedType.java
/**
   * Resolves a named type by looking up its first component in the scope, and subsequent components
   * as properties. The scope must have been fully parsed and a symbol table constructed.
   */
Resolves a named type by looking up its first component in the scope, and subsequent components
as properties. The scope must have been fully parsed and a symbol table constructed.
Resolves a named type by looking up its first component in the scope and subsequent components as properties . The scope must have been fully parsed and a symbol table constructed .
private void resolveViaProperties(ErrorReporter reporter) {
    JSType value = lookupViaProperties();
    if (value != null && value.isFunctionType() &&
        (value.isConstructor() || value.isInterface())) {
      FunctionType functionType = value.toMaybeFunctionType();
      setReferencedAndResolvedType(functionType.getInstanceType(), reporter);
    } else if (value != null && value.isNoObjectType()) {
      setReferencedAndResolvedType(
          registry.getNativeObjectType(
              JSTypeNative.NO_OBJECT_TYPE), reporter);
    } else if (value instanceof EnumType) {
      setReferencedAndResolvedType(
          ((EnumType) value).getElementsType(), reporter);
    } else {
       So if the type does resolve to an actual value, but it's not named,
       then don't respect the forward declaration.
      handleUnresolvedType(reporter, value == null || value.isUnknownType());
    }
  }
private void resolveViaProperties ( ErrorReporter reporter ) { JSType value = lookupViaProperties ( ) ; if ( value != null && value . isFunctionType ( ) && ( value . isConstructor ( ) || value . isInterface ( ) ) ) { FunctionType functionType = value . toMaybeFunctionType ( ) ; setReferencedAndResolvedType ( functionType . getInstanceType ( ) , reporter ) ; } else if ( value != null && value . isNoObjectType ( ) ) { setReferencedAndResolvedType ( registry . getNativeObjectType ( JSTypeNative . NO_OBJECT_TYPE ) , reporter ) ; } else if ( value instanceof EnumType ) { setReferencedAndResolvedType ( ( ( EnumType ) value ) . getElementsType ( ) , reporter ) ; } else { handleUnresolvedType ( reporter , value == null || value . isUnknownType ( ) ) ; } }
Resolves a named type by looking up its first component in the scope, and subsequent components
 as properties.
Resolves a named type by looking up its first component in the scope and subsequent components as properties .
// last component of the chain // We've been running into issues where people forward-declare // non-named types. (This is legitimate...our dependency management // code doubles as our forward-declaration code.) // // So if the type does resolve to an actual value, but it's not named, // then don't respect the forward declaration.