Revision: 29864
          http://sourceforge.net/p/bibdesk/svn/29864
Author:   hofman
Date:     2025-11-21 10:14:27 +0000 (Fri, 21 Nov 2025)
Log Message:
-----------
add some lightweight generics to model classes

Modified Paths:
--------------
    trunk/bibdesk/BDSKBookmark.h
    trunk/bibdesk/BDSKComplexString.h
    trunk/bibdesk/BDSKCondition.h
    trunk/bibdesk/BDSKDBLPGroupServer.h
    trunk/bibdesk/BDSKEntrezGroupServer.h
    trunk/bibdesk/BDSKExternalGroup.h
    trunk/bibdesk/BDSKFieldCollection.h
    trunk/bibdesk/BDSKFieldCollection.m
    trunk/bibdesk/BDSKFilter.h
    trunk/bibdesk/BDSKGroup.h
    trunk/bibdesk/BDSKGroupsArray.h
    trunk/bibdesk/BDSKLastImportGroup.h
    trunk/bibdesk/BDSKParentGroup.h
    trunk/bibdesk/BDSKPreferenceRecord.h
    trunk/bibdesk/BDSKPreviewItem.h
    trunk/bibdesk/BDSKPublicationsArray.h
    trunk/bibdesk/BDSKSRUGroupServer.h
    trunk/bibdesk/BDSKScriptHook.h
    trunk/bibdesk/BDSKSearchBookmark.h
    trunk/bibdesk/BDSKSearchGroup.h
    trunk/bibdesk/BDSKServerInfo.h
    trunk/bibdesk/BDSKStaticGroup.h
    trunk/bibdesk/BDSKTemplate.h
    trunk/bibdesk/BDSKTemplateObjectProxy.h
    trunk/bibdesk/BDSKTemplateTag.h
    trunk/bibdesk/BDSKToken.h
    trunk/bibdesk/BDSKTreeNode.h
    trunk/bibdesk/BDSKTreeNode.m
    trunk/bibdesk/BDSKTypeTemplate.h
    trunk/bibdesk/BDSKWebGroup.h
    trunk/bibdesk/BDSKZoomGroupServer.h
    trunk/bibdesk/BibAuthor.h
    trunk/bibdesk/BibItem.h

Modified: trunk/bibdesk/BDSKBookmark.h
===================================================================
--- trunk/bibdesk/BDSKBookmark.h        2025-11-20 22:42:15 UTC (rev 29863)
+++ trunk/bibdesk/BDSKBookmark.h        2025-11-21 10:14:27 UTC (rev 29864)
@@ -51,13 +51,13 @@
 }
 
 - (nullable instancetype)initWithURL:(NSURL *)aURL name:(nullable NSString 
*)aName;
-- (nullable instancetype)initFolderWithChildren:(NSArray *)aChildren 
name:(nullable NSString *)aName;
+- (nullable instancetype)initFolderWithChildren:(NSArray<BDSKBookmark *> 
*)aChildren name:(nullable NSString *)aName;
 - (nullable instancetype)initFolderWithName:(nullable NSString *)aName;
-- (nullable instancetype)initRootWithChildrenDictionaries:(nullable NSArray 
*)dictionaries;
+- (nullable instancetype)initRootWithChildrenDictionaries:(nullable 
NSArray<NSDictionary<NSString *, id> *> *)dictionaries;
 - (nullable instancetype)initSeparator;
-- (nullable instancetype)initWithDictionary:(NSDictionary *)dictionary;
+- (nullable instancetype)initWithDictionary:(NSDictionary<NSString *, id> 
*)dictionary;
 
-@property (nonatomic, readonly) NSDictionary *dictionaryValue;
+@property (nonatomic, readonly) NSDictionary<NSString *, id> *dictionaryValue;
 
 @property (nonatomic, readonly) BDSKBookmarkType bookmarkType;
 
@@ -70,16 +70,16 @@
 
 @property (nonatomic) BOOL menuNeedsUpdate;
 
-- (nullable NSArray *)children;
+- (nullable NSArray<BDSKBookmark *> *)children;
 - (NSUInteger)countOfChildren;
 - (BDSKBookmark *)objectInChildrenAtIndex:(NSUInteger)idx;
 - (void)insertObject:(BDSKBookmark *)child inChildrenAtIndex:(NSUInteger)idx;
-- (void)insertChildren:(NSArray *)newChildren atIndexes:(NSIndexSet *)indexes;
+- (void)insertChildren:(NSArray<BDSKBookmark *> *)newChildren 
atIndexes:(NSIndexSet *)indexes;
 - (void)removeObjectFromChildrenAtIndex:(NSUInteger)idx;
 - (void)removeChildrenAtIndexes:(NSIndexSet *)indexes;
 
 - (BOOL)isDescendantOf:(BDSKBookmark *)bookmark;
-- (BOOL)isDescendantOfArray:(NSArray *)bookmarks;
+- (BOOL)isDescendantOfArray:(NSArray<BDSKBookmark *> *)bookmarks;
 
 @end
 

Modified: trunk/bibdesk/BDSKComplexString.h
===================================================================
--- trunk/bibdesk/BDSKComplexString.h   2025-11-20 22:42:15 UTC (rev 29863)
+++ trunk/bibdesk/BDSKComplexString.h   2025-11-21 10:14:27 UTC (rev 29864)
@@ -41,7 +41,7 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@class BDSKMacroResolver;
+@class BDSKMacroResolver, BDSKStringNode;
 
 /* This is a category on NSString containing the API for complex strings. */
 
@@ -57,7 +57,7 @@
     @param             macroResolver The macro resolver used to resolve macros 
in the complex string.
     @result     - 
 */
-+ (instancetype)stringWithNodes:(NSArray *)nodesArray  macroResolver:(nullable 
BDSKMacroResolver *)macroResolver;
++ (instancetype)stringWithNodes:(NSArray<BDSKStringNode *> *)nodesArray  
macroResolver:(nullable BDSKMacroResolver *)macroResolver;
 
 /*!
     @method     stringWithBibTeXString:macroResolver:error:
@@ -79,7 +79,7 @@
     @param             macroResolver The macro resolver used to resolve macros 
in the complex string.
     @result     -
 */
-- (instancetype)initWithNodes:(NSArray *)nodesArray macroResolver:(nullable 
BDSKMacroResolver *)theMacroResolver;
+- (instancetype)initWithNodes:(NSArray<BDSKStringNode *> *)nodesArray 
macroResolver:(nullable BDSKMacroResolver *)theMacroResolver;
 
 /*!
     @method     initWithBibTeXString:macroResolver:error:
@@ -114,7 +114,7 @@
     @discussion (description)
     @result     -
 */
-@property (nonatomic, readonly) NSArray *nodes;
+@property (nonatomic, readonly) NSArray<BDSKStringNode *> *nodes;
 
 /*!
     @method     isEqualAsComplexString:

Modified: trunk/bibdesk/BDSKCondition.h
===================================================================
--- trunk/bibdesk/BDSKCondition.h       2025-11-20 22:42:15 UTC (rev 29863)
+++ trunk/bibdesk/BDSKCondition.h       2025-11-21 10:14:27 UTC (rev 29864)
@@ -120,9 +120,9 @@
 
 - (instancetype)init NS_DESIGNATED_INITIALIZER;
 - (instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER;
-- (instancetype)initWithDictionary:(NSDictionary *)dictionary;
+- (instancetype)initWithDictionary:(NSDictionary<NSString *, id> *)dictionary;
 
-@property (nonatomic, readonly) NSDictionary *dictionaryValue;
+@property (nonatomic, readonly) NSDictionary<NSString *, id> *dictionaryValue;
 
 - (BOOL)isSatisfiedByItem:(BibItem *)item;
 

Modified: trunk/bibdesk/BDSKDBLPGroupServer.h
===================================================================
--- trunk/bibdesk/BDSKDBLPGroupServer.h 2025-11-20 22:42:15 UTC (rev 29863)
+++ trunk/bibdesk/BDSKDBLPGroupServer.h 2025-11-21 10:14:27 UTC (rev 29864)
@@ -57,10 +57,10 @@
     BOOL didSearch;
     NSString *searchTerm;
     NSString *errorMessage;
-    NSMutableArray *downloads;
-    NSMutableArray *authors;
-    NSMutableArray *bibtexFetches;
-    NSMutableArray *xmlFetches;
+    NSMutableArray<BDSKDownload *> *downloads;
+    NSMutableArray<NSString *> *authors;
+    NSMutableArray<BDSKDownload *> *bibtexFetches;
+    NSMutableArray<BDSKDownload *> *xmlFetches;
 }
 
 @end

Modified: trunk/bibdesk/BDSKEntrezGroupServer.h
===================================================================
--- trunk/bibdesk/BDSKEntrezGroupServer.h       2025-11-20 22:42:15 UTC (rev 
29863)
+++ trunk/bibdesk/BDSKEntrezGroupServer.h       2025-11-21 10:14:27 UTC (rev 
29864)
@@ -42,7 +42,7 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@class BDSKServerInfo;
+@class BDSKServerInfo, BibItem;
 
 @interface BDSKEntrezGroupServer : NSObject <BDSKSearchGroupServer,  
BDSKDownloadDelegate>
 {
@@ -67,7 +67,7 @@
 - (void)startDownloadFromURL:(NSURL *)theURL;
 - (void)setErrorMessage:(nullable NSString *)newErrorMessage;
 
-+ (nullable NSArray *)itemsForSearchTerm:(NSString *)searchTerm 
usingDatabase:(NSString *)database allowMultiple:(BOOL)allowMultiple;
++ (nullable NSArray<BibItem *> *)itemsForSearchTerm:(NSString *)searchTerm 
usingDatabase:(NSString *)database allowMultiple:(BOOL)allowMultiple;
 
 @end
 

Modified: trunk/bibdesk/BDSKExternalGroup.h
===================================================================
--- trunk/bibdesk/BDSKExternalGroup.h   2025-11-20 22:42:15 UTC (rev 29863)
+++ trunk/bibdesk/BDSKExternalGroup.h   2025-11-21 10:14:27 UTC (rev 29864)
@@ -44,7 +44,7 @@
 
 extern NSString * const BDSKExternalGroupPublicationsKey;
 
-@class BDSKPublicationsArray, BDSKMacroResolver;
+@class BDSKPublicationsArray, BDSKMacroResolver, BibItem;
 
 @interface BDSKExternalGroup : BDSKGroup <BDSKOwner> {
     BDSKPublicationsArray *publications;
@@ -62,9 +62,9 @@
 
 // for subclasses to use
 
-- (void)setPublications:(nullable NSArray *)newPublications;
-- (void)addPublications:(nullable NSArray *)newPublications;
-- (void)removePublications:(nullable NSArray *)oldPublications;
+- (void)setPublications:(nullable NSArray<BibItem *> *)newPublications;
+- (void)addPublications:(nullable NSArray<BibItem *> *)newPublications;
+- (void)removePublications:(nullable NSArray<BibItem *> *)oldPublications;
 
 - (void)notifyUpdate;
 

Modified: trunk/bibdesk/BDSKFieldCollection.h
===================================================================
--- trunk/bibdesk/BDSKFieldCollection.h 2025-11-20 22:42:15 UTC (rev 29863)
+++ trunk/bibdesk/BDSKFieldCollection.h 2025-11-21 10:14:27 UTC (rev 29864)
@@ -48,7 +48,7 @@
     BDSKURLTypeFieldCollection
 };
 
-@class BibItem;
+@class BibItem, BDSKField, BDSKFieldArray;
 
 @interface BDSKFieldCollection : NSObject {
     __weak BibItem *item;
@@ -59,10 +59,10 @@
 - (instancetype)initWithItem:(BibItem *)anItem NS_DESIGNATED_INITIALIZER;
 - (instancetype)init NS_UNAVAILABLE;
 - (void)setType:(BDSKFieldCollectionType)type;
-- (id)fieldForName:(NSString *)name;
+- (BDSKField *)fieldForName:(NSString *)name;
 - (BOOL)isUsedField:(NSString *)name;
 - (BOOL)isEmptyField:(NSString *)name;
-- (id)fieldsWithNames:(NSArray *)names;
+- (BDSKFieldArray *)fieldsWithNames:(NSArray<NSString *> *)names;
 
 @end
 
@@ -69,15 +69,15 @@
 #pragma mark -
 
 @interface BDSKFieldArray : NSArray {
-    NSMutableArray *fieldNames;
-    NSMutableArray *fields;
+    NSMutableArray<NSString *> *fieldNames;
+    NSMutableArray<BDSKField *> *fields;
     BDSKFieldCollection *fieldCollection;
 }
 
-- (instancetype)initWithFieldCollection:(BDSKFieldCollection *)collection 
fieldNames:(NSArray *)array;
-@property (nonatomic, readonly) id nonEmpty;
+- (instancetype)initWithFieldCollection:(BDSKFieldCollection *)collection 
fieldNames:(NSArray<NSString *> *)array;
+@property (nonatomic, readonly) BDSKFieldArray *nonEmpty;
 - (NSUInteger)count;
-- (id)objectAtIndex:(NSUInteger)index;
+- (BDSKField *)objectAtIndex:(NSUInteger)index;
 
 @end
 

Modified: trunk/bibdesk/BDSKFieldCollection.m
===================================================================
--- trunk/bibdesk/BDSKFieldCollection.m 2025-11-20 22:42:15 UTC (rev 29863)
+++ trunk/bibdesk/BDSKFieldCollection.m 2025-11-21 10:14:27 UTC (rev 29864)
@@ -97,13 +97,13 @@
     return [NSString isEmptyString:[item stringValueOfField:name]];
 }
 
-- (id)fieldForName:(NSString *)name{
+- (BDSKField *)fieldForName:(NSString *)name{
     name = [name fieldName];
     [usedFields addObject:name];
     return [[BDSKField alloc] initWithName:name bibItem:item];
 }
 
-- (id)fieldsWithNames:(NSArray *)names{
+- (BDSKFieldArray *)fieldsWithNames:(NSArray *)names{
     return [[BDSKFieldArray alloc] initWithFieldCollection:self 
fieldNames:names];
 }
 

Modified: trunk/bibdesk/BDSKFilter.h
===================================================================
--- trunk/bibdesk/BDSKFilter.h  2025-11-20 22:42:15 UTC (rev 29863)
+++ trunk/bibdesk/BDSKFilter.h  2025-11-21 10:14:27 UTC (rev 29864)
@@ -49,14 +49,14 @@
 @class BDSKCondition, BibItem;
 
 @interface BDSKFilter : NSObject <NSCopying, NSSecureCoding> {
-       NSMutableArray *conditions;
+       NSMutableArray<BDSKCondition *> *conditions;
        BDSKConjunction conjunction;
     __weak id<BDSKSmartGroup> group;
        NSUndoManager *undoManager;
 }
 
-- (instancetype)initWithConditions:(NSArray *)aConditions 
conjunction:(BDSKConjunction)aConjunction NS_DESIGNATED_INITIALIZER;
-- (instancetype)initWithDictionary:(NSDictionary *)dictionary;
+- (instancetype)initWithConditions:(NSArray<BDSKCondition *> *)aConditions 
conjunction:(BDSKConjunction)aConjunction NS_DESIGNATED_INITIALIZER;
+- (instancetype)initWithDictionary:(NSDictionary<NSString *, id> *)dictionary;
 - (instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER;
 
 @property (nonatomic, readonly) NSDictionary *dictionaryValue;
@@ -63,7 +63,7 @@
 
 - (BOOL)testItem:(BibItem *)item;
 
-@property (nonatomic, strong) NSArray *conditions;
+@property (nonatomic, strong) NSArray<BDSKCondition *> *conditions;
 @property (nonatomic) BDSKConjunction conjunction;
 
 @property (nonatomic, nullable, weak) id<BDSKSmartGroup> group;

Modified: trunk/bibdesk/BDSKGroup.h
===================================================================
--- trunk/bibdesk/BDSKGroup.h   2025-11-20 22:42:15 UTC (rev 29863)
+++ trunk/bibdesk/BDSKGroup.h   2025-11-21 10:14:27 UTC (rev 29864)
@@ -83,7 +83,7 @@
 */
 - (instancetype)initWithName:(NSString *)aName NS_DESIGNATED_INITIALIZER;
 
-- (instancetype)initWithDictionary:(NSDictionary *)groupDict;
+- (instancetype)initWithDictionary:(NSDictionary<NSString *, id> *)groupDict;
 
 - (instancetype)initWithCoder:(NSCoder *)decoder NS_DESIGNATED_INITIALIZER;
 

Modified: trunk/bibdesk/BDSKGroupsArray.h
===================================================================
--- trunk/bibdesk/BDSKGroupsArray.h     2025-11-20 22:42:15 UTC (rev 29863)
+++ trunk/bibdesk/BDSKGroupsArray.h     2025-11-21 10:14:27 UTC (rev 29864)
@@ -44,9 +44,9 @@
 extern NSString * const BDSKDocumentGroupsKey;
 extern NSString * const BDSKDocumentParentGroupKey;
 
-@class BDSKGroup, BDSKLibraryGroup, BDSKLastImportGroup, BDSKSmartGroup, 
BDSKStaticGroup, BDSKURLGroup, BDSKScriptGroup, BDSKSearchGroup, BDSKWebGroup, 
BDSKLibraryParentGroup, BDSKExternalParentGroup, BDSKSmartParentGroup, 
BDSKStaticParentGroup, BDSKCategoryParentGroup, BibDocument;
+@class BDSKGroup, BDSKLibraryGroup, BDSKLastImportGroup, BDSKSmartGroup, 
BDSKStaticGroup, BDSKCategoryGroup, BDSKURLGroup, BDSKScriptGroup, 
BDSKSearchGroup, BDSKWebGroup, BDSKSharedGroup, BDSKLibraryParentGroup, 
BDSKExternalParentGroup, BDSKSmartParentGroup, BDSKStaticParentGroup, 
BDSKCategoryParentGroup, BibDocument;
 
-@interface BDSKGroupsArray : NSArray {
+@interface BDSKGroupsArray : NSArray<BDSKParentGroup *> {
     NSMutableArray *groups;
     __weak BibDocument *document;
 }
@@ -60,18 +60,18 @@
 @property (nonatomic, readonly) BDSKExternalParentGroup *externalParent;
 @property (nonatomic, readonly) BDSKSmartParentGroup *smartParent;
 @property (nonatomic, readonly) BDSKStaticParentGroup *staticParent;
-@property (nonatomic, readonly) NSArray *categoryParents;
+@property (nonatomic, readonly) NSArray<BDSKCategoryParentGroup *> 
*categoryParents;
 
 @property (nonatomic, readonly) BDSKLibraryGroup *libraryGroup;
 @property (nonatomic, nullable, readonly) BDSKLastImportGroup *lastImportGroup;
-@property (nonatomic, readonly) NSArray *sharedGroups;
-@property (nonatomic, readonly) NSArray *URLGroups;
-@property (nonatomic, readonly) NSArray *scriptGroups;
-@property (nonatomic, readonly) NSArray *searchGroups;
-@property (nonatomic, readonly) NSArray *webGroups;
-@property (nonatomic, readonly) NSArray *smartGroups;
-@property (nonatomic, readonly) NSArray *staticGroups;
-@property (nonatomic, readonly) NSArray *categoryGroups;
+@property (nonatomic, readonly) NSArray<BDSKSharedGroup *> *sharedGroups;
+@property (nonatomic, readonly) NSArray<BDSKURLGroup *> *URLGroups;
+@property (nonatomic, readonly) NSArray<BDSKScriptGroup *> *scriptGroups;
+@property (nonatomic, readonly) NSArray<BDSKSearchGroup *> *searchGroups;
+@property (nonatomic, readonly) NSArray<BDSKWebGroup *> *webGroups;
+@property (nonatomic, readonly) NSArray<BDSKSmartGroup *> *smartGroups;
+@property (nonatomic, readonly) NSArray<BDSKStaticGroup *> *staticGroups;
+@property (nonatomic, readonly) NSArray<BDSKCategoryGroup *> *categoryGroups;
 
 @property (nonatomic, readonly) NSArray *allChildren;
 
@@ -83,7 +83,7 @@
 
 - (void)removeAllUndoableGroups;
 
-- (void)sortUsingDescriptors:(NSArray *)sortDescriptors;
+- (void)sortUsingDescriptors:(NSArray<NSSortDescriptor *> *)sortDescriptors;
 
 @property (nonatomic, weak, nullable, readonly) BibDocument *document;
 

Modified: trunk/bibdesk/BDSKLastImportGroup.h
===================================================================
--- trunk/bibdesk/BDSKLastImportGroup.h 2025-11-20 22:42:15 UTC (rev 29863)
+++ trunk/bibdesk/BDSKLastImportGroup.h 2025-11-21 10:14:27 UTC (rev 29864)
@@ -41,9 +41,11 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
+@class BibItem;
+
 @interface BDSKLastImportGroup : BDSKStaticGroup
 
-- (instancetype)initWithLastImport:(NSArray *)array;
+- (instancetype)initWithLastImport:(NSArray<BibItem *> *)array;
 
 @end
 

Modified: trunk/bibdesk/BDSKParentGroup.h
===================================================================
--- trunk/bibdesk/BDSKParentGroup.h     2025-11-20 22:42:15 UTC (rev 29863)
+++ trunk/bibdesk/BDSKParentGroup.h     2025-11-21 10:14:27 UTC (rev 29864)
@@ -41,10 +41,10 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@class BDSKWebGroup, BDSKSearchGroup, BDSKURLGroup, BDSKScriptGroup, 
BDSKSmartGroup, BDSKStaticGroup, BDSKLastImportGroup;
+@class BDSKWebGroup, BDSKSearchGroup, BDSKURLGroup, BDSKScriptGroup, 
BDSKSharedGroup, BDSKSmartGroup, BDSKStaticGroup, BDSKLastImportGroup, 
BDSKCategoryGroup;
 
 @interface BDSKParentGroup : BDSKGroup {
-    NSMutableArray *children;
+    NSMutableArray<__kindof BDSKGroup *> *children;
     NSArray *sortDescriptors;
 }
 
@@ -57,9 +57,9 @@
 
 - (NSUInteger)numberOfChildren;
 - (__kindof BDSKGroup *)childAtIndex:(NSUInteger)anIndex;
-- (NSArray *)children;
+- (NSArray<__kindof BDSKGroup *> *)children;
 
-- (void)sortUsingDescriptors:(nullable NSArray *)sortDescriptors;
+- (void)sortUsingDescriptors:(nullable NSArray<NSSortDescriptor *> 
*)sortDescriptors;
 - (void)resort;
 
 - (void)removeAllUndoableChildren;
@@ -84,11 +84,11 @@
     NSUInteger scriptGroupCount;
 }
 
-@property (nonatomic, readonly) NSArray *webGroups;
-@property (nonatomic, readonly) NSArray *searchGroups;
-@property (nonatomic, strong) NSArray *sharedGroups;
-@property (nonatomic, readonly) NSArray *URLGroups;
-@property (nonatomic, readonly) NSArray *scriptGroups;
+@property (nonatomic, readonly) NSArray<BDSKWebGroup *> *webGroups;
+@property (nonatomic, readonly) NSArray<BDSKSearchGroup *> *searchGroups;
+@property (nonatomic, strong) NSArray<BDSKSharedGroup *> *sharedGroups;
+@property (nonatomic, readonly) NSArray<BDSKURLGroup *> *URLGroups;
+@property (nonatomic, readonly) NSArray<BDSKScriptGroup *> *scriptGroups;
 
 @end
 
@@ -97,7 +97,7 @@
 @interface BDSKSmartParentGroup : BDSKParentGroup
 
 @property (nonatomic, nullable, readonly) BDSKLastImportGroup *lastImportGroup;
-@property (nonatomic, readonly) NSArray *smartGroups;
+@property (nonatomic, readonly) NSArray<BDSKSmartGroup *> *smartGroups;
 
 @end
 
@@ -110,7 +110,7 @@
 - (instancetype)initWithKey:(NSString *)aKey NS_DESIGNATED_INITIALIZER;
 - (instancetype)initWithName:(NSString *)aName NS_UNAVAILABLE;
 
-@property (nonatomic, strong) NSArray *categoryGroups;
+@property (nonatomic, strong) NSArray<BDSKCategoryGroup *> *categoryGroups;
 
 @property (nonatomic, strong) NSString *key;
 
@@ -120,7 +120,7 @@
 
 @interface BDSKStaticParentGroup : BDSKParentGroup
 
-@property (nonatomic, readonly) NSArray *staticGroups;
+@property (nonatomic, readonly) NSArray<BDSKStaticGroup *> *staticGroups;
 
 @end
 

Modified: trunk/bibdesk/BDSKPreferenceRecord.h
===================================================================
--- trunk/bibdesk/BDSKPreferenceRecord.h        2025-11-20 22:42:15 UTC (rev 
29863)
+++ trunk/bibdesk/BDSKPreferenceRecord.h        2025-11-21 10:14:27 UTC (rev 
29864)
@@ -43,10 +43,10 @@
 @interface BDSKPreferenceRecord : NSObject {
     NSImage *icon;
     NSURL *helpURL;
-    NSDictionary *dictionary;
+    NSDictionary<NSString *, id> *dictionary;
 }
 
-- (instancetype)initWithDictionary:(NSDictionary *)aDictionarys 
NS_DESIGNATED_INITIALIZER;
+- (instancetype)initWithDictionary:(NSDictionary<NSString *, id> 
*)aDictionarys NS_DESIGNATED_INITIALIZER;
 - (instancetype)init NS_UNAVAILABLE;
 
 @property (nonatomic, nullable, readonly) NSString *identifier;
@@ -58,9 +58,9 @@
 @property (nonatomic, nullable, readonly) NSImage *icon;
 @property (nonatomic, nullable, readonly) NSString *helpAnchor;
 @property (nonatomic, nullable, readonly) NSURL *helpURL;
-@property (nonatomic, nullable, readonly) NSDictionary *initialValues;
-@property (nonatomic, nullable, readonly) NSArray *searchTerms;
-@property (nonatomic, readonly) NSDictionary *dictionary;
+@property (nonatomic, nullable, readonly) NSDictionary<NSString *, id> 
*initialValues;
+@property (nonatomic, nullable, readonly) NSArray<NSString *> *searchTerms;
+@property (nonatomic, readonly) NSDictionary<NSString *, id> *dictionary;
 
 @end
 

Modified: trunk/bibdesk/BDSKPreviewItem.h
===================================================================
--- trunk/bibdesk/BDSKPreviewItem.h     2025-11-20 22:42:15 UTC (rev 29863)
+++ trunk/bibdesk/BDSKPreviewItem.h     2025-11-21 10:14:27 UTC (rev 29864)
@@ -40,11 +40,11 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@class BDSKPreviewOwner, BDSKPreviewLinkedFile;
+@class BDSKPreviewOwner, BDSKPreviewLinkedFile, BibAuthor;
 
 @interface BDSKPreviewItem : NSObject <BDSKParseableItem> {
-    NSDictionary *pubFields;
-    NSArray *pubAuthors;
+    NSDictionary<NSString *, NSString *> *pubFields;
+    NSArray<BibAuthor *> *pubAuthors;
     BDSKPreviewOwner *owner;
     BDSKPreviewLinkedFile *linkedFile;
 }

Modified: trunk/bibdesk/BDSKPublicationsArray.h
===================================================================
--- trunk/bibdesk/BDSKPublicationsArray.h       2025-11-20 22:42:15 UTC (rev 
29863)
+++ trunk/bibdesk/BDSKPublicationsArray.h       2025-11-21 10:14:27 UTC (rev 
29864)
@@ -42,34 +42,34 @@
 
 @class BibItem, BDSKItemSearchIndexes;
 
-@interface BDSKPublicationsArray : NSMutableArray {
-    NSMutableArray *publications;
-    NSMapTable *itemsForCiteKeys;
-    NSMapTable *itemsForCrossrefs;
-    NSMutableDictionary *itemsForIdentifierURLs;
+@interface BDSKPublicationsArray : NSMutableArray<BibItem *> {
+    NSMutableArray<BibItem *> *publications;
+    NSMapTable<NSString *, NSMutableArray<BibItem *> *> *itemsForCiteKeys;
+    NSMapTable<NSString *, NSMutableArray<BibItem *> *> *itemsForCrossrefs;
+    NSMutableDictionary<NSURL *, BibItem *> *itemsForIdentifierURLs;
     BDSKItemSearchIndexes *searchIndexes;
 }
 
-- (instancetype)initWithArray:(nullable NSArray *)anArray 
NS_DESIGNATED_INITIALIZER;
+- (instancetype)initWithArray:(nullable NSArray<BibItem *> *)anArray 
NS_DESIGNATED_INITIALIZER;
 - (nullable instancetype)initWithCoder:(NSCoder *)coder NS_UNAVAILABLE;
 - (BDSKPublicationsArray *)copyTemporary;
 
 // otherArray should contain the same publications, just reordered
-- (void)setReorderedArray:(NSArray *)otherArray;
+- (void)setReorderedArray:(NSArray<BibItem *> *)otherArray;
 
 - (nullable BibItem *)itemForCiteKey:(NSString *)key;
-- (nullable NSArray *)itemsForCiteKey:(NSString *)key;
+- (nullable NSArray<BibItem *> *)itemsForCiteKey:(NSString *)key;
 - (void)changeCiteKey:(NSString *)oldKey forItem:(BibItem *)anItem;
 
-- (nullable NSArray *)itemsForCrossref:(NSString *)key;
+- (nullable NSArray<BibItem *> *)itemsForCrossref:(NSString *)key;
 - (void)changeCrossref:(nullable NSString *)oldKey forItem:(BibItem *)anItem;
 
 - (nullable BibItem *)itemForIdentifierURL:(NSURL *)aURL;
-- (nullable NSArray *)itemsForIdentifierURLs:(NSArray *)anArray;
+- (nullable NSArray<BibItem *> *)itemsForIdentifierURLs:(NSArray<NSURL *> 
*)anArray;
 
 - (nullable SKIndexRef)indexForField:(NSString *)field CF_RETURNS_RETAINED;
 
-- (void)reindexPublications:(NSArray *)items;
+- (void)reindexPublications:(NSArray<BibItem *> *)items;
 
 @end
 

Modified: trunk/bibdesk/BDSKSRUGroupServer.h
===================================================================
--- trunk/bibdesk/BDSKSRUGroupServer.h  2025-11-20 22:42:15 UTC (rev 29863)
+++ trunk/bibdesk/BDSKSRUGroupServer.h  2025-11-21 10:14:27 UTC (rev 29864)
@@ -59,7 +59,7 @@
     NSString *authorization;
 }
 
-@property (class, nonatomic, readonly) NSArray *supportedRecordSyntaxes;
+@property (class, nonatomic, readonly) NSArray<NSString *> 
*supportedRecordSyntaxes;
 @end
 
 NS_ASSUME_NONNULL_END

Modified: trunk/bibdesk/BDSKScriptHook.h
===================================================================
--- trunk/bibdesk/BDSKScriptHook.h      2025-11-20 22:42:15 UTC (rev 29863)
+++ trunk/bibdesk/BDSKScriptHook.h      2025-11-21 10:14:27 UTC (rev 29864)
@@ -54,13 +54,15 @@
 extern NSString * const BDSKScriptHookNameOpenDocument;
 extern NSString * const BDSKScriptHookNameRevertDocument;
 
+@class BibItem;
+
 @interface BDSKScriptHook : NSObject {
        NSString *name;
        NSString *uniqueID;
     NSUserAppleScriptTask *script;
        NSString *field;
-       NSArray *oldValues;
-       NSArray *values;
+       NSArray<NSString *> *oldValues;
+       NSArray<NSString *> *values;
     BOOL cancelled;
     NSDocument *document;
 }
@@ -75,13 +77,13 @@
 @property (nonatomic, readonly) NSString *name;
 @property (nonatomic, readonly) NSString *uniqueID;
 @property (nonatomic, nullable, strong) NSString *field;
-@property (nonatomic, nullable, strong) NSArray *oldValues;
-@property (nonatomic,nullable,  strong) NSArray *values;
+@property (nonatomic, nullable, strong) NSArray<NSString *> *oldValues;
+@property (nonatomic,nullable,  strong) NSArray<NSString *> *values;
 @property (nonatomic) BOOL cancelled;
 @property (nonatomic, strong) NSDocument *document;
 @property (nonatomic, readonly) NSUserAppleScriptTask *script;
 
-- (void)runWithPublications:(nullable NSArray *)items completionHandler:(void 
(^ _Nullable)(BOOL cancelled))handler;
+- (void)runWithPublications:(nullable NSArray<BibItem *> *)items 
completionHandler:(void (^ _Nullable)(BOOL cancelled))handler;
 
 @end
 

Modified: trunk/bibdesk/BDSKSearchBookmark.h
===================================================================
--- trunk/bibdesk/BDSKSearchBookmark.h  2025-11-20 22:42:15 UTC (rev 29863)
+++ trunk/bibdesk/BDSKSearchBookmark.h  2025-11-21 10:14:27 UTC (rev 29864)
@@ -50,18 +50,18 @@
     __weak BDSKSearchBookmark *parent;
 }
 
-- (nullable instancetype)initFolderWithChildren:(NSArray *)aChildren 
label:(nullable NSString *)aLabel;
+- (nullable instancetype)initFolderWithChildren:(NSArray<BDSKSearchBookmark *> 
*)aChildren label:(nullable NSString *)aLabel;
 - (nullable instancetype)initFolderWithLabel:(nullable NSString *)aLabel;
-- (nullable instancetype)initRootWithChildrenDictionaries:(nullable NSArray 
*)dictionaries;
+- (nullable instancetype)initRootWithChildrenDictionaries:(nullable 
NSArray<NSDictionary<NSString *, id> *> *)dictionaries;
 - (nullable instancetype)initSeparator;
 - (nullable instancetype)initWithInfo:(NSDictionary *)aDictionary 
label:(nullable NSString *)aLabel;
-- (nullable instancetype)initWithDictionary:(NSDictionary *)dictionary;
+- (nullable instancetype)initWithDictionary:(NSDictionary<NSString *, id> 
*)dictionary;
 
-@property (nonatomic, readonly) NSDictionary *dictionaryValue;
+@property (nonatomic, readonly) NSDictionary<NSString *, id> *dictionaryValue;
 
 @property (nonatomic, readonly) BDSKSearchBookmarkType bookmarkType;
 
-@property (nonatomic, nullable, strong) NSDictionary *info;
+@property (nonatomic, nullable, strong) NSDictionary<NSString *, id> *info;
 
 @property (nonatomic, nullable, strong) NSString *label;
 
@@ -75,11 +75,11 @@
 
 @property (nonatomic) BOOL menuNeedsUpdate;
 
-- (nullable NSArray *)children;
+- (nullable NSArray<BDSKSearchBookmark *> *)children;
 - (NSUInteger)countOfChildren;
 - (BDSKSearchBookmark *)objectInChildrenAtIndex:(NSUInteger)idx;
 - (void)insertObject:(BDSKSearchBookmark *)child 
inChildrenAtIndex:(NSUInteger)idx;
-- (void)insertChildren:(NSArray *)newChildren atIndexes:(NSIndexSet *)indexes;
+- (void)insertChildren:(NSArray<BDSKSearchBookmark *> *)newChildren 
atIndexes:(NSIndexSet *)indexes;
 - (void)removeObjectFromChildrenAtIndex:(NSUInteger)idx;
 - (void)removeChildrenAtIndexes:(NSIndexSet *)indexes;
 

Modified: trunk/bibdesk/BDSKSearchGroup.h
===================================================================
--- trunk/bibdesk/BDSKSearchGroup.h     2025-11-20 22:42:15 UTC (rev 29863)
+++ trunk/bibdesk/BDSKSearchGroup.h     2025-11-21 10:14:27 UTC (rev 29864)
@@ -52,7 +52,7 @@
 @class BDSKServerInfo;
 
 @protocol BDSKSearchGroup <BDSKOwner>
-- (void)addPublications:(nullable NSArray *)pubs;
+- (void)addPublications:(nullable NSArray<BibItem *> *)pubs;
 @end
 
 @protocol BDSKSearchGroupServer <NSObject>
@@ -82,7 +82,7 @@
 @property (nonatomic, readonly) NSString *type;
 @property (nonatomic, copy) BDSKServerInfo *serverInfo;
 @property (nonatomic, nullable, copy) NSString *searchTerm;
-@property (nonatomic, nullable, copy) NSArray *history;
+@property (nonatomic, nullable, copy) NSArray<NSString *> *history;
 
 @property (nonatomic, readonly) NSInteger numberOfAvailableResults;
 @property (nonatomic, nullable, readonly) NSString *errorMessage;
@@ -100,7 +100,7 @@
 
 @interface BDSKGroupSearch : NSObject <BDSKSearchGroup> {
     BDSKMacroResolver *macroResolver;
-    NSArray *publications;
+    NSArray<BibItem *> *publications;
     id<BDSKSearchGroupServer> server;
     BOOL importFinished;
     void(^completionHandler)(NSArray *);

Modified: trunk/bibdesk/BDSKServerInfo.h
===================================================================
--- trunk/bibdesk/BDSKServerInfo.h      2025-11-20 22:42:15 UTC (rev 29863)
+++ trunk/bibdesk/BDSKServerInfo.h      2025-11-21 10:14:27 UTC (rev 29864)
@@ -57,7 +57,7 @@
     NSString *host;
     NSString *port;
     NSString *password;
-    NSMutableDictionary *options;
+    NSMutableDictionary<NSString *, NSString *> *options;
     BOOL passwordInKeychain;
     BDSKReadWriteLock *passwordLock;
 }
@@ -64,12 +64,12 @@
 
 + (nullable instancetype)defaultServerInfoWithType:(NSString *)aType;
 
-- (nullable instancetype)initWithType:(NSString *)aType name:(NSString *)aName 
database:(NSString *)aDbase host:(nullable NSString *)aHost port:(nullable 
NSString *)aPort options:(nullable NSDictionary *)options 
NS_DESIGNATED_INITIALIZER;
+- (nullable instancetype)initWithType:(NSString *)aType name:(NSString *)aName 
database:(NSString *)aDbase host:(nullable NSString *)aHost port:(nullable 
NSString *)aPort options:(nullable NSDictionary<NSString *, NSString *> 
*)options NS_DESIGNATED_INITIALIZER;
 - (instancetype)init NS_UNAVAILABLE;
 
-- (nullable instancetype)initWithDictionary:(NSDictionary *)info;
+- (nullable instancetype)initWithDictionary:(NSDictionary<NSString *, id> 
*)info;
 
-@property (nonatomic, readonly) NSDictionary *dictionaryValue;
+@property (nonatomic, readonly) NSDictionary<NSString *, id> *dictionaryValue;
 
 @property (nonatomic, readonly) NSString *type;
 @property (nonatomic, readonly) NSString *name;
@@ -83,7 +83,7 @@
 @property (nonatomic, readonly) BOOL removeDiacritics;
 @property (nonatomic, readonly, getter=isSecure) BOOL secure;
 @property (nonatomic, readonly, getter=isLite) BOOL lite;
-@property (nonatomic, nullable, readonly) NSDictionary *options;
+@property (nonatomic, nullable, readonly) NSDictionary<NSString *, NSString *> 
*options;
 
 @property (nonatomic, readonly, getter=isEntrez) BOOL entrez;
 @property (nonatomic, readonly, getter=isZoom) BOOL zoom;

Modified: trunk/bibdesk/BDSKStaticGroup.h
===================================================================
--- trunk/bibdesk/BDSKStaticGroup.h     2025-11-20 22:42:15 UTC (rev 29863)
+++ trunk/bibdesk/BDSKStaticGroup.h     2025-11-21 10:14:27 UTC (rev 29864)
@@ -44,19 +44,19 @@
 @class BibItem;
 
 @interface BDSKStaticGroup : BDSKMutableGroup {
-       NSMutableArray *publications;
-    NSArray *tmpKeys;
+       NSMutableArray<BibItem *> *publications;
+    NSArray<NSString *> *tmpKeys;
 }
 
-- (instancetype)initWithName:(NSString *)aName publications:(nullable NSArray 
*)array NS_DESIGNATED_INITIALIZER;
+- (instancetype)initWithName:(NSString *)aName publications:(nullable 
NSArray<BibItem *> *)array NS_DESIGNATED_INITIALIZER;
 - (instancetype)initWithCoder:(NSCoder *)decoder NS_DESIGNATED_INITIALIZER;
 
 @property (nonatomic, copy) NSArray *publications;
 
 - (void)addPublication:(BibItem *)item;
-- (void)addPublicationsFromArray:(NSArray *)items;
+- (void)addPublicationsFromArray:(NSArray<BibItem *> *)items;
 - (void)removePublication:(BibItem *)item;
-- (void)removePublicationsInArray:(NSArray *)items;
+- (void)removePublicationsInArray:(NSArray<BibItem *> *)items;
 
 @end
 

Modified: trunk/bibdesk/BDSKTemplate.h
===================================================================
--- trunk/bibdesk/BDSKTemplate.h        2025-11-20 22:42:15 UTC (rev 29863)
+++ trunk/bibdesk/BDSKTemplate.h        2025-11-21 10:14:27 UTC (rev 29864)
@@ -76,13 +76,13 @@
 + (NSString *)unlocalizedRoleString:(NSString *)string; 
 
 // all templates
-@property (class, nonatomic, null_resettable, copy) NSArray *exportTemplates;
-@property (class, nonatomic, null_resettable, copy) NSArray *serviceTemplates;
+@property (class, nonatomic, null_resettable, copy) NSArray<BDSKTemplate *> 
*exportTemplates;
+@property (class, nonatomic, null_resettable, copy) NSArray<BDSKTemplate *> 
*serviceTemplates;
 
 // known export style names
-@property (class, nonatomic, readonly) NSArray *allStyleNames;
+@property (class, nonatomic, readonly) NSArray<NSString *> *allStyleNames;
 @property (class, nonatomic, readonly) NSString *defaultPreviewTemplateName;
-+ (NSArray *)allStyleNamesForFormat:(BDSKTemplateFormat)format;
++ (NSArray<NSString *> *)allStyleNamesForFormat:(BDSKTemplateFormat)format;
 + (nullable NSString *)defaultStyleNameForFileType:(NSString *)fileType;
 
 // export templates
@@ -120,7 +120,7 @@
 
 - (nullable NSURL *)templateURLForType:(NSString *)pubType;
 
-@property (nonatomic, nullable, readonly) NSArray *accessoryFileURLs;
+@property (nonatomic, nullable, readonly) NSArray<NSURL *> *accessoryFileURLs;
 @property (nonatomic, nullable, readonly) NSURL *scriptURL;
 
 // child template accessors

Modified: trunk/bibdesk/BDSKTemplateObjectProxy.h
===================================================================
--- trunk/bibdesk/BDSKTemplateObjectProxy.h     2025-11-20 22:42:15 UTC (rev 
29863)
+++ trunk/bibdesk/BDSKTemplateObjectProxy.h     2025-11-21 10:14:27 UTC (rev 
29864)
@@ -40,26 +40,26 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@class BDSKTemplate;
+@class BDSKTemplate, BibItem;
 
 @interface BDSKTemplateObjectProxy : NSObject {
     id object;
-    NSArray *publications;
-    NSArray *publicationsContext;
+    NSArray<BibItem *> *publications;
+    NSArray<BibItem *> *publicationsContext;
     BDSKTemplate *template;
 }
 
-+ (NSString *)stringByParsingTemplate:(BDSKTemplate *)template 
withObject:(id)anObject publications:(NSArray *)items;
-+ (NSString *)stringByParsingTemplate:(BDSKTemplate *)template 
withObject:(id)anObject publications:(NSArray *)items 
publicationsContext:(nullable NSArray *)itemsContext;
-+ (NSAttributedString *)attributedStringByParsingTemplate:(BDSKTemplate 
*)template withObject:(id)anObject publications:(NSArray *)items 
documentAttributes:(NSDictionary * _Nullable * _Nullable)docAttributes;
-+ (NSAttributedString *)attributedStringByParsingTemplate:(BDSKTemplate 
*)template withObject:(id)anObject publications:(NSArray *)items 
publicationsContext:(nullable NSArray *)itemsContext 
documentAttributes:(NSDictionary * _Nullable * _Nullable)docAttributes;
++ (NSString *)stringByParsingTemplate:(BDSKTemplate *)template 
withObject:(id)anObject publications:(NSArray<BibItem *> *)items;
++ (NSString *)stringByParsingTemplate:(BDSKTemplate *)template 
withObject:(id)anObject publications:(NSArray<BibItem *> *)items 
publicationsContext:(nullable NSArray *)itemsContext;
++ (NSAttributedString *)attributedStringByParsingTemplate:(BDSKTemplate 
*)template withObject:(id)anObject publications:(NSArray<BibItem *> *)items 
documentAttributes:(NSDictionary * _Nullable * _Nullable)docAttributes;
++ (NSAttributedString *)attributedStringByParsingTemplate:(BDSKTemplate 
*)template withObject:(id)anObject publications:(NSArray<BibItem *> *)items 
publicationsContext:(nullable NSArray *)itemsContext 
documentAttributes:(NSDictionary * _Nullable * _Nullable)docAttributes;
 + (nullable NSData *)dataByParsingTemplate:(BDSKTemplate *)template 
withObject:(id)anObject publications:(NSArray *)items;
-+ (nullable NSData *)dataByParsingTemplate:(BDSKTemplate *)template 
withObject:(id)anObject publications:(NSArray *)items 
publicationsContext:(nullable NSArray *)itemsContext;
++ (nullable NSData *)dataByParsingTemplate:(BDSKTemplate *)template 
withObject:(id)anObject publications:(NSArray<BibItem *> *)items 
publicationsContext:(nullable NSArray<BibItem *> *)itemsContext;
 
-- (instancetype)initWithObject:(id)anObject publications:(NSArray *)items 
publicationsContext:(nullable NSArray *)itemsContext template:(BDSKTemplate 
*)aTemplate NS_DESIGNATED_INITIALIZER;
+- (instancetype)initWithObject:(id)anObject publications:(NSArray *)items 
publicationsContext:(nullable NSArray<BibItem *> *)itemsContext 
template:(BDSKTemplate *)aTemplate NS_DESIGNATED_INITIALIZER;
 - (instancetype)init NS_UNAVAILABLE;
 
-@property (nonatomic, readonly) NSArray *publications;
+@property (nonatomic, readonly) NSArray<BibItem *> *publications;
 @property (nonatomic, readonly) id publicationsUsingTemplate;
 
 @property (nonatomic, readonly) NSDate *currentDate;

Modified: trunk/bibdesk/BDSKTemplateTag.h
===================================================================
--- trunk/bibdesk/BDSKTemplateTag.h     2025-11-20 22:42:15 UTC (rev 29863)
+++ trunk/bibdesk/BDSKTemplateTag.h     2025-11-21 10:14:27 UTC (rev 29864)
@@ -83,14 +83,14 @@
 #pragma mark -
 
 @interface BDSKRichValueTemplateTag : BDSKValueTemplateTag {
-    NSDictionary *attributes;
+    NSDictionary<NSString *, id> *attributes;
     BDSKAttributeTemplate *linkTemplate;
 }
 
-- (instancetype)initWithKeyPath:(NSString *)aKeyPath attributes:(NSDictionary 
*)anAttributes NS_DESIGNATED_INITIALIZER;
+- (instancetype)initWithKeyPath:(NSString *)aKeyPath 
attributes:(NSDictionary<NSString *, id> *)anAttributes 
NS_DESIGNATED_INITIALIZER;
 - (instancetype)initWithKeyPath:(NSString *)aKeyPath NS_UNAVAILABLE;
 
-@property (nonatomic, readonly) NSDictionary *attributes;
+@property (nonatomic, readonly) NSDictionary<NSString *, id> *attributes;
 
 @property (nonatomic, nullable, readonly) BDSKAttributeTemplate *linkTemplate;
 
@@ -101,15 +101,15 @@
 @interface BDSKCollectionTemplateTag : BDSKValueTemplateTag {
     NSString *itemTemplateString;
     NSString *separatorTemplateString;
-    NSArray *itemTemplate;
-    NSArray *separatorTemplate;
+    NSArray<BDSKTemplateTag *> *itemTemplate;
+    NSArray<BDSKTemplateTag *> *separatorTemplate;
 }
 
 - (instancetype)initWithKeyPath:(NSString *)aKeyPath 
itemTemplateString:(NSString *)anItemTemplateString 
separatorTemplateString:(nullable NSString *)aSeparatorTemplateString 
NS_DESIGNATED_INITIALIZER;
 - (instancetype)initWithKeyPath:(NSString *)aKeyPath NS_UNAVAILABLE;
 
-@property (nonatomic, readonly) NSArray *itemTemplate;
-@property (nonatomic, nullable, readonly) NSArray *separatorTemplate;
+@property (nonatomic, readonly) NSArray<BDSKTemplateTag *> *itemTemplate;
+@property (nonatomic, nullable, readonly) NSArray<BDSKTemplateTag *> 
*separatorTemplate;
 
 @end
 
@@ -118,15 +118,15 @@
 @interface BDSKRichCollectionTemplateTag : BDSKValueTemplateTag {
     NSAttributedString *itemTemplateAttributedString;
     NSAttributedString *separatorTemplateAttributedString;
-    NSArray *itemTemplate;
-    NSArray *separatorTemplate;
+    NSArray<BDSKTemplateTag *> *itemTemplate;
+    NSArray<BDSKTemplateTag *> *separatorTemplate;
 }
 
 - (instancetype)initWithKeyPath:(NSString *)aKeyPath 
itemTemplateAttributedString:(NSAttributedString 
*)anItemTemplateAttributedString separatorTemplateAttributedString:(nullable 
NSAttributedString *)aSeparatorTemplateAttributedString 
NS_DESIGNATED_INITIALIZER;
 - (instancetype)initWithKeyPath:(NSString *)aKeyPath NS_UNAVAILABLE;
 
-@property (nonatomic, readonly) NSArray *itemTemplate;
-@property (nonatomic, nullable, readonly) NSArray *separatorTemplate;
+@property (nonatomic, readonly) NSArray<BDSKTemplateTag *> *itemTemplate;
+@property (nonatomic, nullable, readonly) NSArray<BDSKTemplateTag *> 
*separatorTemplate;
 
 @end
 
@@ -135,7 +135,7 @@
 @interface BDSKConditionTemplateTag : BDSKValueTemplateTag {
     BDSKTemplateTagMatchType matchType;
     NSMutableArray *subtemplates;
-    NSArray *matchStrings;
+    NSArray<NSString *> *matchStrings;
 }
 
 - (instancetype)initWithKeyPath:(NSString *)aKeyPath 
matchType:(BDSKTemplateTagMatchType)aMatchType matchStrings:(NSArray 
*)aMatchStrings subtemplates:(NSArray *)aSubtemplates NS_DESIGNATED_INITIALIZER;
@@ -142,10 +142,10 @@
 - (instancetype)initWithKeyPath:(NSString *)aKeyPath NS_UNAVAILABLE;
 
 @property (nonatomic, readonly) BDSKTemplateTagMatchType matchType;
-@property (nonatomic, readonly) NSArray *matchStrings;
+@property (nonatomic, readonly) NSArray<NSString *> *matchStrings;
 
 - (NSUInteger)countOfSubtemplates;
-- (NSArray *)objectInSubtemplatesAtIndex:(NSUInteger)anIndex;
+- (NSArray<BDSKTemplateTag *> 
*)objectInSubtemplatesAtIndex:(NSUInteger)anIndex;
 
 @end
 
@@ -173,7 +173,7 @@
 
 @interface BDSKRichTextTemplateTag : BDSKTemplateTag {
     NSAttributedString *attributedText;
-    NSArray *linkTemplates;
+    NSArray<BDSKTemplateTag *> *linkTemplates;
 }
 
 - (instancetype)initWithAttributedText:(NSAttributedString *)anAttributedText 
NS_DESIGNATED_INITIALIZER;
@@ -181,7 +181,7 @@
 
 @property (nonatomic, strong) NSAttributedString *attributedText;
 
-@property (nonatomic, readonly) NSArray *linkTemplates;
+@property (nonatomic, readonly) NSArray<BDSKTemplateTag *> *linkTemplates;
 
 - (void)appendAttributedText:(NSAttributedString *)newAttributedText;
 
@@ -190,14 +190,14 @@
 #pragma mark -
 
 @interface BDSKAttributeTemplate : NSObject {
-    NSArray *template;
+    NSArray<BDSKTemplateTag *> *template;
     NSRange range;
     Class attributeClass;
 }
 
-- (instancetype)initWithTemplate:(nullable NSArray *)aTemplate 
range:(NSRange)aRange attributeClass:(nullable Class)aClass 
NS_DESIGNATED_INITIALIZER;
+- (instancetype)initWithTemplate:(nullable NSArray<BDSKTemplateTag *> 
*)aTemplate range:(NSRange)aRange attributeClass:(nullable Class)aClass 
NS_DESIGNATED_INITIALIZER;
 
-@property (nonatomic, nullable, readonly) NSArray *template;
+@property (nonatomic, nullable, readonly) NSArray<BDSKTemplateTag *> *template;
 
 @property (nonatomic, readonly) NSRange range;
 

Modified: trunk/bibdesk/BDSKToken.h
===================================================================
--- trunk/bibdesk/BDSKToken.h   2025-11-20 22:42:15 UTC (rev 29863)
+++ trunk/bibdesk/BDSKToken.h   2025-11-21 10:14:27 UTC (rev 29864)
@@ -81,7 +81,7 @@
 
 @property (nonatomic, readonly) NSString *string;
 
-- (nullable NSAttributedString 
*)attributedStringWithDefaultAttributes:(NSDictionary *)attributes;
+- (nullable NSAttributedString 
*)attributedStringWithDefaultAttributes:(NSDictionary<NSString *, id> 
*)attributes;
 
 @property (nonatomic, readonly) NSSet *keysForValuesToObserveForUndo;
 
@@ -97,7 +97,7 @@
 
 @property (nonatomic, nullable, strong) NSString *key;
 
-@property (nonatomic, readonly) NSArray *keys;
+@property (nonatomic, readonly) NSArray<NSString *> *keys;
 
 @end
 

Modified: trunk/bibdesk/BDSKTreeNode.h
===================================================================
--- trunk/bibdesk/BDSKTreeNode.h        2025-11-20 22:42:15 UTC (rev 29863)
+++ trunk/bibdesk/BDSKTreeNode.h        2025-11-21 10:14:27 UTC (rev 29864)
@@ -42,18 +42,18 @@
 
 @interface BDSKTreeNode : NSObject <NSSecureCoding, NSCopying>
 {
-    NSMutableArray *children;
-    NSMutableDictionary *columnValues;
+    NSMutableArray<__kindof BDSKTreeNode *> *children;
+    NSMutableDictionary<NSString *, id> *columnValues;
     __weak BDSKTreeNode *parent;
 }
 
-- (instancetype)initWithColumnValues:(nullable NSDictionary *)newColumnValues 
children:(nullable NSArray *)newChildren NS_DESIGNATED_INITIALIZER;
+- (instancetype)initWithColumnValues:(nullable NSDictionary<NSString *, id> 
*)newColumnValues children:(nullable NSArray<__kindof BDSKTreeNode *> 
*)newChildren NS_DESIGNATED_INITIALIZER;
 - (instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER;
 - (instancetype)init;
 
 // uses isEqual:
-- (nullable NSArray *)children;
-- (void)setChildren:(nullable NSArray *)newChildren;
+- (nullable NSArray<__kindof BDSKTreeNode *> *)children;
+- (void)setChildren:(nullable NSArray<__kindof BDSKTreeNode *> *)newChildren;
 - (NSUInteger)countOfChildren;
 - (__kindof BDSKTreeNode *)objectInChildrenAtIndex:(NSUInteger)anIndex;
 - (void)insertObject:(__kindof BDSKTreeNode *)obj 
inChildrenAtIndex:(NSUInteger)anIndex;

Modified: trunk/bibdesk/BDSKTreeNode.m
===================================================================
--- trunk/bibdesk/BDSKTreeNode.m        2025-11-20 22:42:15 UTC (rev 29863)
+++ trunk/bibdesk/BDSKTreeNode.m        2025-11-21 10:14:27 UTC (rev 29864)
@@ -99,7 +99,7 @@
         return YES;
     if ([other isMemberOfClass:[self class]] == NO)
         return NO;
-    return [columnValues isEqualToDictionary:[other columnValues]] && 
[children isEqualToArray:[other children]];
+    return [columnValues isEqualToDictionary:[other columnValues]] && 
[children isEqualToArray:[(BDSKTreeNode *)other children]];
 }
 
 - (NSUInteger)hash {

Modified: trunk/bibdesk/BDSKTypeTemplate.h
===================================================================
--- trunk/bibdesk/BDSKTypeTemplate.h    2025-11-20 22:42:15 UTC (rev 29863)
+++ trunk/bibdesk/BDSKTypeTemplate.h    2025-11-21 10:14:27 UTC (rev 29864)
@@ -42,16 +42,18 @@
 
 extern NSNotificationName const BDSKTemplateDidChangeNotification;
 
+@class BDSKToken;
+
 @interface BDSKTypeTemplate : NSObject {
     NSString *pubType;
     BOOL included;
     BOOL defaultTemplate;
-    NSArray *requiredTokens;
-    NSArray *optionalTokens;
+    NSArray<BDSKToken *> *requiredTokens;
+    NSArray<BDSKToken *> *optionalTokens;
     NSArray *itemTemplate;
 }
 
-- (instancetype)initWithPubType:(NSString *)aPubType requiredTokens:(NSArray 
*)required optionalTokens:(NSArray *)optional NS_DESIGNATED_INITIALIZER;
+- (instancetype)initWithPubType:(NSString *)aPubType 
requiredTokens:(NSArray<BDSKToken *> *)required 
optionalTokens:(NSArray<BDSKToken *> *)optional NS_DESIGNATED_INITIALIZER;
 - (instancetype)init NS_UNAVAILABLE;
 
 @property (nonatomic, strong) NSString *pubType;
@@ -61,13 +63,13 @@
 
 @property (nonatomic, nullable, readonly) NSColor *textColor;
 
-@property (nonatomic, readonly) NSArray *requiredTokens;
-@property (nonatomic, readonly) NSArray *optionalTokens;
+@property (nonatomic, readonly) NSArray<BDSKToken *> *requiredTokens;
+@property (nonatomic, readonly) NSArray<BDSKToken *> *optionalTokens;
 
 @property (nonatomic, strong) NSArray *itemTemplate;
 
 @property (nonatomic, readonly) NSString *string;
-- (NSAttributedString *)attributedStringWithDefaultAttributes:(NSDictionary 
*)attributes;
+- (NSAttributedString 
*)attributedStringWithDefaultAttributes:(NSDictionary<NSString *, id> 
*)attributes;
 
 @end
 

Modified: trunk/bibdesk/BDSKWebGroup.h
===================================================================
--- trunk/bibdesk/BDSKWebGroup.h        2025-11-20 22:42:15 UTC (rev 29863)
+++ trunk/bibdesk/BDSKWebGroup.h        2025-11-21 10:14:27 UTC (rev 29864)
@@ -42,11 +42,13 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
+@class BDSKWebParser;
+
 @interface BDSKWebGroup : BDSKExternalGroup <BDSKWebViewDelegate> {
     NSString *label;
     BDSKWebView *webView;
-    NSMutableArray *parsers;
-    NSMapTable *frameInfo;
+    NSMutableArray<BDSKWebParser *> *parsers;
+    NSMapTable<WebFrame *, NSMutableDictionary<NSString *, id> *> *frameInfo;
 }
 
 @property (nonatomic, nullable, strong) NSString *label;

Modified: trunk/bibdesk/BDSKZoomGroupServer.h
===================================================================
--- trunk/bibdesk/BDSKZoomGroupServer.h 2025-11-20 22:42:15 UTC (rev 29863)
+++ trunk/bibdesk/BDSKZoomGroupServer.h 2025-11-21 10:14:27 UTC (rev 29864)
@@ -63,7 +63,7 @@
     BDSKReadWriteLock *infoLock;
     NSString *errorMessage;
 }
-@property (class, nonatomic, readonly) NSArray *supportedRecordSyntaxes;
+@property (class, nonatomic, readonly) NSArray<NSString *> 
*supportedRecordSyntaxes;
 + (ZOOMSyntaxType)zoomRecordSyntaxForRecordSyntaxString:(NSString *)syntax;
 @end
 

Modified: trunk/bibdesk/BibAuthor.h
===================================================================
--- trunk/bibdesk/BibAuthor.h   2025-11-20 22:42:15 UTC (rev 29863)
+++ trunk/bibdesk/BibAuthor.h   2025-11-21 10:14:27 UTC (rev 29864)
@@ -71,7 +71,7 @@
     NSString *field;
    
 @private
-    NSArray *firstNames;  // always non-nil
+    NSArray<NSString *> *firstNames;  // always non-nil
     NSString *fuzzyName;  // always non-nil
 }
 
@@ -124,7 +124,7 @@
 // von Last F Jr
 @property (nonatomic, readonly) NSString 
*unpunctuatedAbbreviatedNormalizedName;
 
-@property (nonatomic, readonly) NSArray *firstNames;
+@property (nonatomic, readonly) NSArray<NSString *> *firstNames;
 
 - (NSXMLElement *)MODSXMLElementWithRole:(NSString *)rel;
 
@@ -139,7 +139,7 @@
 
 
 @interface NSArray (BibAuthorMultipleCompare)
-- (NSComparisonResult)sortCompareToAuthorArray:(NSArray *)other;
+- (NSComparisonResult)sortCompareToAuthorArray:(NSArray<BibAuthor *> *)other;
 @end
 
 NS_ASSUME_NONNULL_END

Modified: trunk/bibdesk/BibItem.h
===================================================================
--- trunk/bibdesk/BibItem.h     2025-11-20 22:42:15 UTC (rev 29863)
+++ trunk/bibdesk/BibItem.h     2025-11-21 10:14:27 UTC (rev 29864)
@@ -84,7 +84,7 @@
     BDSKFieldActionAsk = 3
 };
 
-@class BibDocument, BDSKCategoryGroup, BibAuthor, BDSKFieldCollection, 
BDSKTemplate, BDSKPublicationsArray, BDSKMacroResolver;
+@class BibDocument, BDSKCategoryGroup, BibAuthor, BDSKFieldCollection, 
BDSKTemplate, BDSKPublicationsArray, BDSKMacroResolver, BDSKMacro;
 @protocol BDSKOwner;
 
 /*!
@@ -129,16 +129,16 @@
 @property (class, nonatomic, readonly) NSString *defaultCiteKey;
 @property (class, nonatomic, readonly) NSString *placeholderCiteKey;
 
-+ (NSData *)archivedPublications:(NSArray *)array;
-+ (NSArray *)publicationsFromPasteboard:(NSPasteboard *)pboard 
macroResolver:(nullable BDSKMacroResolver *)aMacroResolver;
++ (NSData *)archivedPublications:(NSArray<BibItem *> *)array;
++ (NSArray<BibItem *> *)publicationsFromPasteboard:(NSPasteboard *)pboard 
macroResolver:(nullable BDSKMacroResolver *)aMacroResolver;
 
 - (id)copyWithMacroResolver:(nullable BDSKMacroResolver *)aMacroResolver;
 
-- (NSArray *)files;
+- (NSArray<BDSKLinkedFile *> *)files;
 - (NSUInteger)countOfFiles;
 - (BDSKLinkedFile *)objectInFilesAtIndex:(NSUInteger)idx;
 - (void)insertObject:(BDSKLinkedFile *)aFile inFilesAtIndex:(NSUInteger)idx;
-- (void)insertFiles:(NSArray *)newFiles atIndexes:(NSIndexSet *)aSet;
+- (void)insertFiles:(NSArray<BDSKLinkedFile *> *)newFiles 
atIndexes:(NSIndexSet *)aSet;
 - (void)removeObjectFromFilesAtIndex:(NSUInteger)idx;
 - (void)removeFilesAtIndexes:(NSIndexSet *)aSet;
 - (void)replaceObjectInFilesAtIndex:(NSUInteger)idx withObject:(BDSKLinkedFile 
*)aFile;
@@ -150,19 +150,19 @@
 
 - (BOOL)migrateFilesWithRemoveOptions:(BDSKRemoveFieldsOption)removeMask 
numberOfAddedFiles:(NSInteger * _Nullable)numberOfAddedFiles 
numberOfRemovedFields:(NSInteger * _Nullable)numberOfRemovedFields 
error:(NSError **)outError;
 
-@property (nonatomic, readonly) NSArray *localFiles;
-@property (nonatomic, readonly) NSArray *existingLocalFiles;
-@property (nonatomic, readonly) NSArray *remoteURLs;
+@property (nonatomic, readonly) NSArray<BDSKLinkedFile *> *localFiles;
+@property (nonatomic, readonly) NSArray<BDSKLinkedFile *> *existingLocalFiles;
+@property (nonatomic, readonly) NSArray<BDSKLinkedFile *> *remoteURLs;
 
-@property (nonatomic, nullable, readonly) NSArray *downloads;
+@property (nonatomic, nullable, readonly) NSArray<BDSKItemDownload *> 
*downloads;
    
-@property (nonatomic, readonly) NSArray *usedMacros;
-@property (nonatomic, readonly) NSArray *usedLocalMacros;
+@property (nonatomic, readonly) NSArray<BDSKMacro *> *usedMacros;
+@property (nonatomic, readonly) NSArray<BDSKMacro *> *usedLocalMacros;
 
 - (nullable NSURL *)suggestedURLForLinkedFile:(BDSKLinkedFile *)file;
 - (BOOL)canSetURLForLinkedFile:(BDSKLinkedFile *)file;
 - (BOOL)autoFileLinkedFile:(BDSKLinkedFile *)file;
-@property (nonatomic, nullable, readonly) NSSet *filesToBeFiled;
+@property (nonatomic, nullable, readonly) NSSet<BDSKLinkedFile *> 
*filesToBeFiled;
 - (void)addFileToBeFiled:(BDSKLinkedFile *)file;
 - (void)removeFileToBeFiled:(BDSKLinkedFile *)file;
 
@@ -192,11 +192,11 @@
      @param isNew Boolean determines if the item is new for the BibTeX 
document. Determines if the date-added should be set. Should be YES unless when 
reading the BibTeX source file.
      @result The receiver, initialized to type and containing authors 
authArray.
 */
-- (instancetype)initWithType:(NSString *)type citeKey:(nullable NSString *)key 
pubFields:(nullable NSDictionary *)fieldsDict files:(nullable NSArray 
*)filesArray isNew:(BOOL)isNew NS_DESIGNATED_INITIALIZER;
+- (instancetype)initWithType:(NSString *)type citeKey:(nullable NSString *)key 
pubFields:(nullable NSDictionary<NSString *, NSString *> *)fieldsDict 
files:(nullable NSArray<BDSKLinkedFile *> *)filesArray isNew:(BOOL)isNew 
NS_DESIGNATED_INITIALIZER;
 
-- (instancetype)initWithType:(NSString *)type citeKey:(nullable NSString *)key 
pubFields:(nullable NSDictionary *)fieldsDict;
+- (instancetype)initWithType:(NSString *)type citeKey:(nullable NSString *)key 
pubFields:(nullable NSDictionary<NSString *, NSString *> *)fieldsDict;
 
-- (instancetype)initWithType:(NSString *)type citeKey:(nullable NSString *)key 
pubFields:(nullable NSMutableDictionary *)fieldsDict URLStrings:(nullable 
NSArray *)urlsArray;
+- (instancetype)initWithType:(NSString *)type citeKey:(nullable NSString *)key 
pubFields:(nullable NSMutableDictionary<NSString *, NSString *> *)fieldsDict 
URLStrings:(nullable NSArray<NSString *> *)urlsArray;
 
 - (instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER;
 
@@ -228,11 +228,11 @@
 /* Methods for handling people objects (BibAuthors) which may be any people 
type (Author, Editor, etc.)
 */
 - (void)rebuildPeopleIfNeeded;
-@property (nonatomic, readonly) NSSet *allPeople;
-- (NSArray *)peopleArrayForField:(NSString *)field;
-- (NSArray *)peopleArrayForField:(NSString *)field inherit:(BOOL)inherit;
-@property (nonatomic, readonly) NSDictionary *people;
-- (NSDictionary *)peopleInheriting:(BOOL)inherit;
+@property (nonatomic, readonly) NSSet<BibAuthor *> *allPeople;
+- (NSArray<BibAuthor *> *)peopleArrayForField:(NSString *)field;
+- (NSArray<BibAuthor *> *)peopleArrayForField:(NSString *)field 
inherit:(BOOL)inherit;
+@property (nonatomic, readonly) NSDictionary<NSString *, NSArray<BibAuthor *> 
*> *people;
+- (NSDictionary<NSString *, NSArray<BibAuthor *> *> 
*)peopleInheriting:(BOOL)inherit;
 
 @property (nonatomic, readonly) BDSKFieldCollection *personFields;
 
@@ -268,7 +268,7 @@
     @discussion (discussion)
     
 */
-@property (nonatomic, readonly) NSArray *pubAuthors;
+@property (nonatomic, readonly) NSArray<BibAuthor *> *pubAuthors;
 
 /*!
     @method pubAuthorsInheriting:
@@ -277,7 +277,7 @@
     @discussion (discussion)
     
 */
-- (NSArray *)pubAuthorsInheriting:(BOOL)inherit;
+- (NSArray<BibAuthor *> *)pubAuthorsInheriting:(BOOL)inherit;
 
 /*!
     @method authorAtIndex:
@@ -341,7 +341,7 @@
 */
 - (NSString *)bibTeXNameStringForField:(NSString *)field 
normalized:(BOOL)normalized inherit:(BOOL)inherit;
 
-@property (nonatomic, readonly) NSArray *pubEditors;
+@property (nonatomic, readonly) NSArray<BibAuthor *> *pubEditors;
 
 /*!
     @method numberOfAuthorsOrEditors
@@ -366,7 +366,7 @@
     @discussion (discussion)
     
 */
-@property (nonatomic, readonly) NSArray *pubAuthorsOrEditors;
+@property (nonatomic, readonly) NSArray<BibAuthor *> *pubAuthorsOrEditors;
 
 /*!
     @method pubAuthorsOrEditorsInheriting:
@@ -375,7 +375,7 @@
     @discussion (discussion)
     
 */
-- (NSArray *)pubAuthorsOrEditorsInheriting:(BOOL)inherit;
+- (NSArray<BibAuthor *> *)pubAuthorsOrEditorsInheriting:(BOOL)inherit;
 
 /*!
     @method authorOrEditorAtIndex:
@@ -576,7 +576,7 @@
 */
 - (void)setField:(NSString *)field toStringValue:(nullable NSString *)value;
 
-- (NSArray *)citationValueOfField:(NSString *)field;
+- (NSArray<BibItem *> *)citationValueOfField:(NSString *)field;
 
 - (id)displayValueOfField:(NSString *)field;
 
@@ -633,7 +633,7 @@
 */
 @property (nonatomic, strong) NSString *citeKey;
 
-@property (nonatomic, copy) NSDictionary *pubFields;
+@property (nonatomic, copy) NSDictionary<NSString *, NSString *> *pubFields;
 
 - (void)setField: (NSString *)key toValue: (nullable NSString *)value;
 - (void)setField: (NSString *)key toValue: (nullable NSString *)value 
withModDate:(nullable NSDate *)date;
@@ -657,7 +657,7 @@
 */
 - (NSString *)valueOfField: (NSString *)key inherit: (BOOL)inherit;
 
-@property (nonatomic, readonly) NSArray *allFieldNames;
+@property (nonatomic, readonly) NSArray<NSString *> *allFieldNames;
 
 @property (nonatomic, nullable, strong) NSString *editedField;
 @property (nonatomic, nullable, strong) NSString *editedValue;
@@ -673,8 +673,8 @@
 */
 - (BOOL)matchesSubstring:(NSString *)substring inField:(NSString *)field;
 
-@property (nonatomic, readonly) NSDictionary *searchIndexInfo;
-- (NSDictionary *)metadataCacheInfoForUpdate:(BOOL)update;
+@property (nonatomic, readonly) NSDictionary<NSString *, id> *searchIndexInfo;
+- (NSDictionary<NSString *, id> *)metadataCacheInfoForUpdate:(BOOL)update;
 @property (nonatomic, readonly) id completionObject;
 - (BOOL)matchesString:(NSString *)searchterm;
 

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.



_______________________________________________
Bibdesk-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit

Reply via email to