emit(";"); emitBreak(); if (!otype.isInterface() || !getTypePropertyNamesToEmit(otype, true).isEmpty()) {
/** * Handle cases #1 and #3 in the class doc. */ private static void attachJSDocInfoToNominalTypeOrShape( ObjectType objType, JSDocInfo docInfo, @Nullable String qName) { if (objType.isConstructor() || objType.isEnumType() || objType.isInterface()) { // Named types. if (objType.hasReferenceName() && objType.getReferenceName().equals(qName)) { objType.setJSDocInfo(docInfo); if (objType.isConstructor() || objType.isInterface()) { JSType.toMaybeFunctionType(objType).getInstanceType().setJSDocInfo(docInfo); } else if (objType instanceof EnumType) { ((EnumType) objType).getElementsType().setJSDocInfo(docInfo); } } } else if (!objType.isNativeObjectType() && objType.isFunctionType()) { // Structural functions. objType.setJSDocInfo(docInfo); } } }
/** Handle cases #1 and #3 in the class doc. */ private static void attachJSDocInfoToNominalTypeOrShape( ObjectType objType, JSDocInfo docInfo, @Nullable String qName) { if (objType.isConstructor() || objType.isInterface()) { if (!isReferenceNameOf(objType, qName)) { return; } objType.setJSDocInfo(docInfo); JSType.toMaybeFunctionType(objType).getInstanceType().setJSDocInfo(docInfo); } else if (objType.isEnumType()) { // Given: `/** @enum {number} */ MyEnum = { FOO: 0 };` // Then: typeOf(MyEnum).referenceName() == "enum{MyEnum}" // Then: typeOf(MyEnum.FOO).referenceName() == "MyEnum" ObjectType elementType = objType.toMaybeEnumType().getElementsType(); if (!isReferenceNameOf(elementType, qName)) { return; } objType.setJSDocInfo(docInfo); elementType.setJSDocInfo(docInfo); } else if (!objType.isNativeObjectType() && objType.isFunctionType()) { // Anonymous function types identified by their parameter and return types. Remember there can // be many unique but equal instances. objType.setJSDocInfo(docInfo); } }
&& !spreadType.isInterface() && !spreadType.isInstanceType()) || spreadType.getSuperClassConstructor() == null) {