Mark classes as final that can be marked as final.

This commit is contained in:
Brent Simmons
2025-01-25 11:01:12 -08:00
parent 48fc807f94
commit 5651764907
155 changed files with 172 additions and 172 deletions

View File

@@ -18,7 +18,7 @@ enum CloudKitAccountViewControllerError: LocalizedError {
}
}
class CloudKitAccountViewController: UITableViewController {
final class CloudKitAccountViewController: UITableViewController {
weak var delegate: AddAccountDismissDelegate?
@IBOutlet weak var footerLabel: UILabel!

View File

@@ -12,7 +12,7 @@ import Secrets
import RSWeb
import SafariServices
class FeedbinAccountViewController: UITableViewController {
final class FeedbinAccountViewController: UITableViewController {
@IBOutlet weak var activityIndicator: UIActivityIndicatorView!
@IBOutlet weak var cancelBarButtonItem: UIBarButtonItem!

View File

@@ -9,7 +9,7 @@
import UIKit
import Account
class LocalAccountViewController: UITableViewController {
final class LocalAccountViewController: UITableViewController {
@IBOutlet weak var nameTextField: UITextField!
@IBOutlet weak var footerLabel: UILabel!

View File

@@ -12,7 +12,7 @@ import Secrets
import RSWeb
import SafariServices
class NewsBlurAccountViewController: UITableViewController {
final class NewsBlurAccountViewController: UITableViewController {
@IBOutlet weak var activityIndicator: UIActivityIndicatorView!
@IBOutlet weak var cancelBarButtonItem: UIBarButtonItem!

View File

@@ -12,7 +12,7 @@ import Secrets
import RSWeb
import SafariServices
class ReaderAPIAccountViewController: UITableViewController {
final class ReaderAPIAccountViewController: UITableViewController {
@IBOutlet weak var activityIndicator: UIActivityIndicatorView!
@IBOutlet weak var cancelBarButtonItem: UIBarButtonItem!

View File

@@ -8,7 +8,7 @@
import UIKit
class AddComboTableViewCell: VibrantTableViewCell {
final class AddComboTableViewCell: VibrantTableViewCell {
@IBOutlet weak var icon: UIImageView!
@IBOutlet weak var label: UILabel!

View File

@@ -14,7 +14,7 @@ protocol AddFeedFolderViewControllerDelegate: AnyObject {
func didSelect(container: Container)
}
class AddFeedFolderViewController: UITableViewController {
final class AddFeedFolderViewController: UITableViewController {
weak var delegate: AddFeedFolderViewControllerDelegate?
var initialContainer: Container?

View File

@@ -8,7 +8,7 @@
import UIKit
class AddFeedSelectFolderTableViewCell: VibrantTableViewCell {
final class AddFeedSelectFolderTableViewCell: VibrantTableViewCell {
@IBOutlet weak var folderLabel: UILabel!
@IBOutlet weak var detailLabel: UILabel!

View File

@@ -12,7 +12,7 @@ import RSCore
import RSTree
import Parser
class AddFeedViewController: UITableViewController {
final class AddFeedViewController: UITableViewController {
@IBOutlet weak var activityIndicator: UIActivityIndicatorView!
@IBOutlet weak var addButton: UIBarButtonItem!

View File

@@ -10,7 +10,7 @@ import UIKit
import Account
import RSCore
class AddFolderViewController: UITableViewController {
final class AddFolderViewController: UITableViewController {
@IBOutlet private weak var addButton: UIBarButtonItem!
@IBOutlet private weak var nameTextField: UITextField!

View File

@@ -8,7 +8,7 @@
import UIKit
class SelectComboTableViewCell: VibrantTableViewCell {
final class SelectComboTableViewCell: VibrantTableViewCell {
@IBOutlet weak var icon: UIImageView!
@IBOutlet weak var label: UILabel!

View File

@@ -18,7 +18,7 @@ import WidgetKit
var appDelegate: AppDelegate!
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate, UnreadCountProvider {
final class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate, UnreadCountProvider {
private var bgTaskDispatchQueue = DispatchQueue.init(label: "BGTaskScheduler")

View File

@@ -15,7 +15,7 @@ enum ArticleExtractorButtonState {
case off
}
class ArticleExtractorButton: UIButton {
final class ArticleExtractorButton: UIButton {
private var animatedLayer: CALayer?

View File

@@ -12,7 +12,7 @@ import Account
import Articles
import SafariServices
class ArticleViewController: UIViewController {
final class ArticleViewController: UIViewController {
struct State {
let extractedArticle: ExtractedArticle?

View File

@@ -8,7 +8,7 @@
import UIKit
class FindInArticleActivity: UIActivity {
final class FindInArticleActivity: UIActivity {
override var activityTitle: String? {
NSLocalizedString("Find in Article", comment: "Find in Article")
}

View File

@@ -8,7 +8,7 @@
import UIKit
class ImageTransition: NSObject, UIViewControllerAnimatedTransitioning {
final class ImageTransition: NSObject, UIViewControllerAnimatedTransitioning {
private weak var webViewController: WebViewController?
private let duration = 0.4

View File

@@ -8,7 +8,7 @@
import UIKit
class OpenInBrowserActivity: UIActivity {
final class OpenInBrowserActivity: UIActivity {
private var activityItems: [Any]?

View File

@@ -9,7 +9,7 @@
import Foundation
import WebKit
class WrapperScriptMessageHandler: NSObject, WKScriptMessageHandler {
final class WrapperScriptMessageHandler: NSObject, WKScriptMessageHandler {
// We need to wrap a message handler to prevent a circlular reference
private weak var handler: WKScriptMessageHandler?

View File

@@ -8,7 +8,7 @@
import UIKit
class ArticleActivityItemSource: NSObject, UIActivityItemSource {
final class ArticleActivityItemSource: NSObject, UIActivityItemSource {
private let url: URL
private let subject: String?

View File

@@ -10,7 +10,7 @@ import UIKit
import SafariServices
import Account
class AccountInspectorViewController: UITableViewController {
final class AccountInspectorViewController: UITableViewController {
static let preferredContentSizeForFormSheetDisplay = CGSize(width: 460.0, height: 400.0)

View File

@@ -11,7 +11,7 @@ import Account
import SafariServices
import UserNotifications
class FeedInspectorViewController: UITableViewController {
final class FeedInspectorViewController: UITableViewController {
static let preferredContentSizeForFormSheetDisplay = CGSize(width: 460.0, height: 500.0)

View File

@@ -8,7 +8,7 @@
import UIKit
class InspectorIconHeaderView: UITableViewHeaderFooterView {
final class InspectorIconHeaderView: UITableViewHeaderFooterView {
var iconView = IconView()

View File

@@ -8,7 +8,7 @@
import Intents
class IntentHandler: INExtension {
final class IntentHandler: INExtension {
override func handler(for intent: INIntent) -> Any {
switch intent {

View File

@@ -15,7 +15,7 @@ enum KeyboardType: String {
case detail = "DetailKeyboardShortcuts"
}
class KeyboardManager {
final class KeyboardManager {
private(set) var _keyCommands: [UIKeyCommand]
var keyCommands: [UIKeyCommand] {

View File

@@ -8,7 +8,7 @@
import Foundation
class MainFeedRowIdentifier: NSObject, NSCopying {
final class MainFeedRowIdentifier: NSObject, NSCopying {
var indexPath: IndexPath

View File

@@ -15,7 +15,7 @@ protocol MainFeedTableViewCellDelegate: AnyObject {
func mainFeedTableViewCellDisclosureDidToggle(_ sender: MainFeedTableViewCell, expanding: Bool)
}
class MainFeedTableViewCell: VibrantTableViewCell {
final class MainFeedTableViewCell: VibrantTableViewCell {
weak var delegate: MainFeedTableViewCellDelegate?

View File

@@ -12,7 +12,7 @@ protocol MainFeedTableViewSectionHeaderDelegate: AnyObject {
func mainFeedTableViewSectionHeaderDisclosureDidToggle(_ sender: MainFeedTableViewSectionHeader)
}
class MainFeedTableViewSectionHeader: UITableViewHeaderFooterView {
final class MainFeedTableViewSectionHeader: UITableViewHeaderFooterView {
weak var delegate: MainFeedTableViewSectionHeaderDelegate?

View File

@@ -15,7 +15,7 @@ import RSWeb
import SafariServices
import WebKit
class MainFeedViewController: UITableViewController, UndoableCommandRunner {
final class MainFeedViewController: UITableViewController, UndoableCommandRunner {
@IBOutlet weak var filterButton: UIBarButtonItem!
private var refreshProgressView: RefreshProgressView?
@@ -126,11 +126,11 @@ class MainFeedViewController: UITableViewController, UndoableCommandRunner {
}
var node: Node?
if let coordinator = unreadCountProvider as? SceneCoordinator, let feed = coordinator.timelineFeed {
node = coordinator.rootNode.descendantNodeRepresentingObject(feed as AnyObject)
} else {
// if let coordinator = unreadCountProvider as? SceneCoordinator, let feed = coordinator.timelineFeed {
// node = coordinator.rootNode.descendantNodeRepresentingObject(feed as AnyObject)
// } else {
node = coordinator.rootNode.descendantNodeRepresentingObject(unreadCountProvider as AnyObject)
}
// }
guard let unreadCountNode = node, let indexPath = coordinator.indexPathFor(unreadCountNode) else { return }
if let cell = tableView.cellForRow(at: indexPath) as? MainFeedTableViewCell {

View File

@@ -9,7 +9,7 @@
import UIKit
import Account
class RefreshProgressView: UIView {
final class RefreshProgressView: UIView {
@IBOutlet weak var progressView: UIProgressView!
@IBOutlet weak var label: UILabel!

View File

@@ -9,7 +9,7 @@
import UIKit
import RSCore
class MainTimelineTableViewCell: VibrantTableViewCell {
final class MainTimelineTableViewCell: VibrantTableViewCell {
private let titleView = MainTimelineTableViewCell.multiLineUILabel()
private let summaryView = MainTimelineTableViewCell.multiLineUILabel()

View File

@@ -8,7 +8,7 @@
import UIKit
class MainUnreadIndicatorView: UIView {
final class MainUnreadIndicatorView: UIView {
override func layoutSubviews() {
super.layoutSubviews()

View File

@@ -8,7 +8,7 @@
import UIKit
class MainTimelineDataSource<SectionIdentifierType, ItemIdentifierType>: UITableViewDiffableDataSource<SectionIdentifierType, ItemIdentifierType> where SectionIdentifierType: Hashable, ItemIdentifierType: Hashable {
final class MainTimelineDataSource<SectionIdentifierType, ItemIdentifierType>: UITableViewDiffableDataSource<SectionIdentifierType, ItemIdentifierType> where SectionIdentifierType: Hashable, ItemIdentifierType: Hashable {
override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
return true

View File

@@ -8,7 +8,7 @@
import UIKit
class MainTimelineTitleView: UIView {
final class MainTimelineTitleView: UIView {
@IBOutlet weak var iconView: IconView!
@IBOutlet weak var label: UILabel!

View File

@@ -8,7 +8,7 @@
import UIKit
class MainTimelineUnreadCountView: MainFeedUnreadCountView {
final class MainTimelineUnreadCountView: MainFeedUnreadCountView {
override var padding: UIEdgeInsets {
return UIEdgeInsets(top: 2.0, left: 9.0, bottom: 2.0, right: 9.0)

View File

@@ -13,7 +13,7 @@ import Account
import Articles
import WebKit
class TimelineViewController: UITableViewController, UndoableCommandRunner {
final class TimelineViewController: UITableViewController, UndoableCommandRunner {
private var numberOfTextLines = 0
private var iconSize = IconSize.medium

View File

@@ -9,7 +9,7 @@
import UIKit
import Account
class RootSplitViewController: UISplitViewController {
final class RootSplitViewController: UISplitViewController {
var coordinator: SceneCoordinator!

View File

@@ -39,7 +39,7 @@ struct FeedNode: Hashable {
}
}
class SceneCoordinator: NSObject, UndoableCommandRunner {
final class SceneCoordinator: NSObject, UndoableCommandRunner {
var undoableCommands = [UndoableCommand]()
var undoManager: UndoManager? {

View File

@@ -10,7 +10,7 @@ import UIKit
import UserNotifications
import Account
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
final class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
var coordinator: SceneCoordinator!

View File

@@ -8,7 +8,7 @@
import UIKit
class AboutViewController: UITableViewController {
final class AboutViewController: UITableViewController {
@IBOutlet weak var aboutTextView: UITextView!
@IBOutlet weak var creditsTextView: UITextView!

View File

@@ -15,7 +15,7 @@ protocol AddAccountDismissDelegate: UIViewController {
func dismiss()
}
class AddAccountViewController: UITableViewController, AddAccountDismissDelegate {
final class AddAccountViewController: UITableViewController, AddAccountDismissDelegate {
private enum AddAccountSections: Int, CaseIterable {
case local = 0

View File

@@ -14,7 +14,7 @@ extension UTType {
static var netNewsWireTheme: UTType { UTType(importedAs: "com.ranchero.netnewswire.theme") }
}
class ArticleThemesTableViewController: UITableViewController {
final class ArticleThemesTableViewController: UITableViewController {
override func viewDidLoad() {
let importBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(importTheme(_:)))

View File

@@ -8,7 +8,7 @@
import UIKit
class ColorPaletteTableViewController: UITableViewController {
final class ColorPaletteTableViewController: UITableViewController {
// MARK: - Table view data source

View File

@@ -8,7 +8,7 @@
import UIKit
class SettingsComboTableViewCell: VibrantTableViewCell {
final class SettingsComboTableViewCell: VibrantTableViewCell {
@IBOutlet weak var comboImage: UIImageView!
@IBOutlet weak var comboNameLabel: UILabel!

View File

@@ -14,7 +14,7 @@ import SwiftUI
import UniformTypeIdentifiers
// swiftlint:disable:next type_body_length
class SettingsViewController: UITableViewController {
final class SettingsViewController: UITableViewController {
private weak var opmlAccount: Account?

View File

@@ -8,7 +8,7 @@
import UIKit
class TimelineCustomizerViewController: UIViewController {
final class TimelineCustomizerViewController: UIViewController {
@IBOutlet weak var iconSizeSliderContainerView: UIView!
@IBOutlet weak var iconSizeSlider: TickMarkSlider!

View File

@@ -9,7 +9,7 @@
import UIKit
import Articles
class TimelinePreviewTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
final class TimelinePreviewTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!

View File

@@ -8,7 +8,7 @@
import UIKit
class ShareFolderPickerCell: UITableViewCell {
final class ShareFolderPickerCell: UITableViewCell {
@IBOutlet weak var icon: UIImageView!
@IBOutlet weak var label: UILabel!

View File

@@ -14,7 +14,7 @@ protocol ShareFolderPickerControllerDelegate: AnyObject {
func shareFolderPickerDidSelect(_ container: ExtensionContainer)
}
class ShareFolderPickerController: UITableViewController {
final class ShareFolderPickerController: UITableViewController {
var containers: [ExtensionContainer]?
var selectedContainerID: ContainerIdentifier?

View File

@@ -14,7 +14,7 @@ import RSCore
import RSTree
import UniformTypeIdentifiers
class ShareViewController: SLComposeServiceViewController, ShareFolderPickerControllerDelegate {
final class ShareViewController: SLComposeServiceViewController, ShareFolderPickerControllerDelegate {
private var url: URL?
private var extensionContainers: ExtensionContainers?

View File

@@ -8,7 +8,7 @@
import UIKit
class TitleActivityItemSource: NSObject, UIActivityItemSource {
final class TitleActivityItemSource: NSObject, UIActivityItemSource {
private let title: String?

View File

@@ -8,7 +8,7 @@
import UIKit
class CroppingPreviewParameters: UIPreviewParameters {
final class CroppingPreviewParameters: UIPreviewParameters {
override init() {
super.init()

View File

@@ -8,7 +8,7 @@
import UIKit
class ImageHeaderView: UITableViewHeaderFooterView {
final class ImageHeaderView: UITableViewHeaderFooterView {
static let rowHeight = CGFloat(integerLiteral: 88)

View File

@@ -9,7 +9,7 @@
import UIKit
@IBDesignable
class InteractiveLabel: UILabel, UIEditMenuInteractionDelegate {
final class InteractiveLabel: UILabel, UIEditMenuInteractionDelegate {
override init(frame: CGRect) {
super.init(frame: frame)

View File

@@ -8,7 +8,7 @@
import UIKit
class InteractiveNavigationController: UINavigationController {
final class InteractiveNavigationController: UINavigationController {
private let poppableDelegate = PoppableGestureRecognizerDelegate()

View File

@@ -8,7 +8,7 @@
import UIKit
class ModalNavigationController: UINavigationController {
final class ModalNavigationController: UINavigationController {
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()

View File

@@ -10,7 +10,7 @@ import Foundation
import UIKit
class NonIntrinsicButton: UIButton {
final class NonIntrinsicButton: UIButton {
// Prevent autolayout from messing around with our frame settings
override var intrinsicContentSize: CGSize {

View File

@@ -8,7 +8,7 @@
import UIKit
class NonIntrinsicImageView: UIImageView {
final class NonIntrinsicImageView: UIImageView {
// Prevent autolayout from messing around with our frame settings
override var intrinsicContentSize: CGSize {

View File

@@ -8,7 +8,7 @@
import UIKit
class NonIntrinsicLabel: UILabel {
final class NonIntrinsicLabel: UILabel {
// Prevent autolayout from messing around with our frame settings
override var intrinsicContentSize: CGSize {

View File

@@ -8,7 +8,7 @@
import UIKit
class RoundedProgressView: UIProgressView {
final class RoundedProgressView: UIProgressView {
override func layoutSubviews() {
super.layoutSubviews()

View File

@@ -8,7 +8,7 @@
import UIKit
class TickMarkSlider: UISlider {
final class TickMarkSlider: UISlider {
private var enableFeedback = false
private let feedbackGenerator = UISelectionFeedbackGenerator()

View File

@@ -8,7 +8,7 @@
import UIKit
class VibrantButton: UIButton {
final class VibrantButton: UIButton {
@IBInspectable var backgroundHighlightColor: UIColor = AppAssets.secondaryAccentColor

View File

@@ -8,7 +8,7 @@
import UIKit
class VibrantLabel: UILabel {
final class VibrantLabel: UILabel {
override init(frame: CGRect) {
super.init(frame: frame)

View File

@@ -70,7 +70,7 @@ class VibrantTableViewCell: UITableViewCell {
}
class VibrantBasicTableViewCell: VibrantTableViewCell {
final class VibrantBasicTableViewCell: VibrantTableViewCell {
@IBOutlet private var label: UILabel!
@IBOutlet private var detail: UILabel!