Mark user-configurable classes as final (part 20/21)

Add the C++ `final` specifier to leaf, user-configurable component classes and
automation action/trigger/condition primitives so that classes meant to be
terminal cannot be subclassed by external components. Only classes never used as
a base anywhere in the tree are marked. Part 20 of 21, split alphabetically by
component (wts01 .. zephyr_ble_server).
This commit is contained in:
Jesse Hills
2026-06-15 13:23:01 +12:00
parent a25ac28ae5
commit c9f0018c7e
31 changed files with 43 additions and 43 deletions

View File

@@ -8,7 +8,7 @@ namespace esphome::wts01 {
constexpr uint8_t PACKET_SIZE = 9; constexpr uint8_t PACKET_SIZE = 9;
class WTS01Sensor : public sensor::Sensor, public uart::UARTDevice, public Component { class WTS01Sensor final : public sensor::Sensor, public uart::UARTDevice, public Component {
public: public:
void loop() override; void loop() override;
void dump_config() override; void dump_config() override;

View File

@@ -6,7 +6,7 @@
namespace esphome::x9c { namespace esphome::x9c {
class X9cOutput : public output::FloatOutput, public Component { class X9cOutput final : public output::FloatOutput, public Component {
public: public:
void set_cs_pin(InternalGPIOPin *pin) { cs_pin_ = pin; } void set_cs_pin(InternalGPIOPin *pin) { cs_pin_ = pin; }
void set_inc_pin(InternalGPIOPin *pin) { inc_pin_ = pin; } void set_inc_pin(InternalGPIOPin *pin) { inc_pin_ = pin; }

View File

@@ -6,7 +6,7 @@
namespace esphome::xdb401 { namespace esphome::xdb401 {
class XDB401Component : public PollingComponent, public i2c::I2CDevice { class XDB401Component final : public PollingComponent, public i2c::I2CDevice {
public: public:
void set_temperature_sensor(sensor::Sensor *temperature_sensor) { this->temperature_sensor_ = temperature_sensor; } void set_temperature_sensor(sensor::Sensor *temperature_sensor) { this->temperature_sensor_ = temperature_sensor; }
void set_pressure_sensor(sensor::Sensor *pressure_sensor) { this->pressure_sensor_ = pressure_sensor; } void set_pressure_sensor(sensor::Sensor *pressure_sensor) { this->pressure_sensor_ = pressure_sensor; }

View File

@@ -20,7 +20,7 @@ enum XGZP68XXOversampling : uint8_t {
XGZP68XX_OVERSAMPLING_UNKNOWN = (uint8_t) -1, XGZP68XX_OVERSAMPLING_UNKNOWN = (uint8_t) -1,
}; };
class XGZP68XXComponent : public PollingComponent, public sensor::Sensor, public i2c::I2CDevice { class XGZP68XXComponent final : public PollingComponent, public sensor::Sensor, public i2c::I2CDevice {
public: public:
SUB_SENSOR(temperature) SUB_SENSOR(temperature)
SUB_SENSOR(pressure) SUB_SENSOR(pressure)

View File

@@ -72,7 +72,7 @@ optional<XiaomiParseResult> parse_xiaomi_header(const esp32_ble_tracker::Service
bool decrypt_xiaomi_payload(std::vector<uint8_t> &raw, const uint8_t *bindkey, const uint64_t &address); bool decrypt_xiaomi_payload(std::vector<uint8_t> &raw, const uint8_t *bindkey, const uint64_t &address);
bool report_xiaomi_results(const optional<XiaomiParseResult> &result, const char *address); bool report_xiaomi_results(const optional<XiaomiParseResult> &result, const char *address);
class XiaomiListener : public esp32_ble_tracker::ESPBTDeviceListener { class XiaomiListener final : public esp32_ble_tracker::ESPBTDeviceListener {
public: public:
bool parse_device(const esp32_ble_tracker::ESPBTDevice &device) override; bool parse_device(const esp32_ble_tracker::ESPBTDevice &device) override;
}; };

View File

@@ -9,7 +9,7 @@
namespace esphome::xiaomi_cgdk2 { namespace esphome::xiaomi_cgdk2 {
class XiaomiCGDK2 : public Component, public esp32_ble_tracker::ESPBTDeviceListener { class XiaomiCGDK2 final : public Component, public esp32_ble_tracker::ESPBTDeviceListener {
public: public:
void set_address(uint64_t address) { address_ = address; }; void set_address(uint64_t address) { address_ = address; };
void set_bindkey(const char *bindkey); void set_bindkey(const char *bindkey);

View File

@@ -9,7 +9,7 @@
namespace esphome::xiaomi_cgg1 { namespace esphome::xiaomi_cgg1 {
class XiaomiCGG1 : public Component, public esp32_ble_tracker::ESPBTDeviceListener { class XiaomiCGG1 final : public Component, public esp32_ble_tracker::ESPBTDeviceListener {
public: public:
void set_address(uint64_t address) { address_ = address; } void set_address(uint64_t address) { address_ = address; }
void set_bindkey(const char *bindkey); void set_bindkey(const char *bindkey);

View File

@@ -10,9 +10,9 @@
namespace esphome::xiaomi_cgpr1 { namespace esphome::xiaomi_cgpr1 {
class XiaomiCGPR1 : public Component, class XiaomiCGPR1 final : public Component,
public binary_sensor::BinarySensorInitiallyOff, public binary_sensor::BinarySensorInitiallyOff,
public esp32_ble_tracker::ESPBTDeviceListener { public esp32_ble_tracker::ESPBTDeviceListener {
public: public:
void set_address(uint64_t address) { address_ = address; } void set_address(uint64_t address) { address_ = address; }
void set_bindkey(const char *bindkey); void set_bindkey(const char *bindkey);

View File

@@ -9,7 +9,7 @@
namespace esphome::xiaomi_gcls002 { namespace esphome::xiaomi_gcls002 {
class XiaomiGCLS002 : public Component, public esp32_ble_tracker::ESPBTDeviceListener { class XiaomiGCLS002 final : public Component, public esp32_ble_tracker::ESPBTDeviceListener {
public: public:
void set_address(uint64_t address) { address_ = address; } void set_address(uint64_t address) { address_ = address; }

View File

@@ -9,7 +9,7 @@
namespace esphome::xiaomi_hhccjcy01 { namespace esphome::xiaomi_hhccjcy01 {
class XiaomiHHCCJCY01 : public Component, public esp32_ble_tracker::ESPBTDeviceListener { class XiaomiHHCCJCY01 final : public Component, public esp32_ble_tracker::ESPBTDeviceListener {
public: public:
void set_address(uint64_t address) { address_ = address; } void set_address(uint64_t address) { address_ = address; }

View File

@@ -8,7 +8,7 @@
namespace esphome::xiaomi_hhccjcy10 { namespace esphome::xiaomi_hhccjcy10 {
class XiaomiHHCCJCY10 : public Component, public esp32_ble_tracker::ESPBTDeviceListener { class XiaomiHHCCJCY10 final : public Component, public esp32_ble_tracker::ESPBTDeviceListener {
public: public:
void set_address(uint64_t address) { this->address_ = address; } void set_address(uint64_t address) { this->address_ = address; }

View File

@@ -9,7 +9,7 @@
namespace esphome::xiaomi_hhccpot002 { namespace esphome::xiaomi_hhccpot002 {
class XiaomiHHCCPOT002 : public Component, public esp32_ble_tracker::ESPBTDeviceListener { class XiaomiHHCCPOT002 final : public Component, public esp32_ble_tracker::ESPBTDeviceListener {
public: public:
void set_address(uint64_t address) { address_ = address; } void set_address(uint64_t address) { address_ = address; }

View File

@@ -9,7 +9,7 @@
namespace esphome::xiaomi_jqjcy01ym { namespace esphome::xiaomi_jqjcy01ym {
class XiaomiJQJCY01YM : public Component, public esp32_ble_tracker::ESPBTDeviceListener { class XiaomiJQJCY01YM final : public Component, public esp32_ble_tracker::ESPBTDeviceListener {
public: public:
void set_address(uint64_t address) { address_ = address; } void set_address(uint64_t address) { address_ = address; }

View File

@@ -9,7 +9,7 @@
namespace esphome::xiaomi_lywsd02 { namespace esphome::xiaomi_lywsd02 {
class XiaomiLYWSD02 : public Component, public esp32_ble_tracker::ESPBTDeviceListener { class XiaomiLYWSD02 final : public Component, public esp32_ble_tracker::ESPBTDeviceListener {
public: public:
void set_address(uint64_t address) { address_ = address; } void set_address(uint64_t address) { address_ = address; }

View File

@@ -9,7 +9,7 @@
namespace esphome::xiaomi_lywsd02mmc { namespace esphome::xiaomi_lywsd02mmc {
class XiaomiLYWSD02MMC : public Component, public esp32_ble_tracker::ESPBTDeviceListener { class XiaomiLYWSD02MMC final : public Component, public esp32_ble_tracker::ESPBTDeviceListener {
public: public:
void set_address(uint64_t address) { this->address_ = address; } void set_address(uint64_t address) { this->address_ = address; }
void set_bindkey(const char *bindkey); void set_bindkey(const char *bindkey);

View File

@@ -9,7 +9,7 @@
namespace esphome::xiaomi_lywsd03mmc { namespace esphome::xiaomi_lywsd03mmc {
class XiaomiLYWSD03MMC : public Component, public esp32_ble_tracker::ESPBTDeviceListener { class XiaomiLYWSD03MMC final : public Component, public esp32_ble_tracker::ESPBTDeviceListener {
public: public:
void set_address(uint64_t address) { address_ = address; }; void set_address(uint64_t address) { address_ = address; };
void set_bindkey(const char *bindkey); void set_bindkey(const char *bindkey);

View File

@@ -9,7 +9,7 @@
namespace esphome::xiaomi_lywsdcgq { namespace esphome::xiaomi_lywsdcgq {
class XiaomiLYWSDCGQ : public Component, public esp32_ble_tracker::ESPBTDeviceListener { class XiaomiLYWSDCGQ final : public Component, public esp32_ble_tracker::ESPBTDeviceListener {
public: public:
void set_address(uint64_t address) { address_ = address; } void set_address(uint64_t address) { address_ = address; }

View File

@@ -9,7 +9,7 @@
namespace esphome::xiaomi_mhoc303 { namespace esphome::xiaomi_mhoc303 {
class XiaomiMHOC303 : public Component, public esp32_ble_tracker::ESPBTDeviceListener { class XiaomiMHOC303 final : public Component, public esp32_ble_tracker::ESPBTDeviceListener {
public: public:
void set_address(uint64_t address) { address_ = address; } void set_address(uint64_t address) { address_ = address; }

View File

@@ -9,7 +9,7 @@
namespace esphome::xiaomi_mhoc401 { namespace esphome::xiaomi_mhoc401 {
class XiaomiMHOC401 : public Component, public esp32_ble_tracker::ESPBTDeviceListener { class XiaomiMHOC401 final : public Component, public esp32_ble_tracker::ESPBTDeviceListener {
public: public:
void set_address(uint64_t address) { address_ = address; }; void set_address(uint64_t address) { address_ = address; };
void set_bindkey(const char *bindkey); void set_bindkey(const char *bindkey);

View File

@@ -16,7 +16,7 @@ struct ParseResult {
optional<float> impedance; optional<float> impedance;
}; };
class XiaomiMiscale : public Component, public esp32_ble_tracker::ESPBTDeviceListener { class XiaomiMiscale final : public Component, public esp32_ble_tracker::ESPBTDeviceListener {
public: public:
void set_address(uint64_t address) { address_ = address; }; void set_address(uint64_t address) { address_ = address; };

View File

@@ -10,9 +10,9 @@
namespace esphome::xiaomi_mjyd02yla { namespace esphome::xiaomi_mjyd02yla {
class XiaomiMJYD02YLA : public Component, class XiaomiMJYD02YLA final : public Component,
public binary_sensor::BinarySensorInitiallyOff, public binary_sensor::BinarySensorInitiallyOff,
public esp32_ble_tracker::ESPBTDeviceListener { public esp32_ble_tracker::ESPBTDeviceListener {
public: public:
void set_address(uint64_t address) { address_ = address; } void set_address(uint64_t address) { address_ = address; }
void set_bindkey(const char *bindkey); void set_bindkey(const char *bindkey);

View File

@@ -9,9 +9,9 @@
namespace esphome::xiaomi_mue4094rt { namespace esphome::xiaomi_mue4094rt {
class XiaomiMUE4094RT : public Component, class XiaomiMUE4094RT final : public Component,
public binary_sensor::BinarySensorInitiallyOff, public binary_sensor::BinarySensorInitiallyOff,
public esp32_ble_tracker::ESPBTDeviceListener { public esp32_ble_tracker::ESPBTDeviceListener {
public: public:
void set_address(uint64_t address) { address_ = address; } void set_address(uint64_t address) { address_ = address; }

View File

@@ -15,7 +15,7 @@
namespace esphome::xiaomi_rtcgq02lm { namespace esphome::xiaomi_rtcgq02lm {
class XiaomiRTCGQ02LM : public Component, public esp32_ble_tracker::ESPBTDeviceListener { class XiaomiRTCGQ02LM final : public Component, public esp32_ble_tracker::ESPBTDeviceListener {
public: public:
void set_address(uint64_t address) { address_ = address; }; void set_address(uint64_t address) { address_ = address; };
void set_bindkey(const char *bindkey); void set_bindkey(const char *bindkey);

View File

@@ -10,9 +10,9 @@
namespace esphome::xiaomi_wx08zm { namespace esphome::xiaomi_wx08zm {
class XiaomiWX08ZM : public Component, class XiaomiWX08ZM final : public Component,
public binary_sensor::BinarySensorInitiallyOff, public binary_sensor::BinarySensorInitiallyOff,
public esp32_ble_tracker::ESPBTDeviceListener { public esp32_ble_tracker::ESPBTDeviceListener {
public: public:
void set_address(uint64_t address) { address_ = address; } void set_address(uint64_t address) { address_ = address; }

View File

@@ -9,7 +9,7 @@
namespace esphome::xiaomi_xmwsdj04mmc { namespace esphome::xiaomi_xmwsdj04mmc {
class XiaomiXMWSDJ04MMC : public Component, public esp32_ble_tracker::ESPBTDeviceListener { class XiaomiXMWSDJ04MMC final : public Component, public esp32_ble_tracker::ESPBTDeviceListener {
public: public:
void set_address(uint64_t address) { this->address_ = address; } void set_address(uint64_t address) { this->address_ = address; }
void set_bindkey(const char *bindkey); void set_bindkey(const char *bindkey);

View File

@@ -17,7 +17,7 @@ enum {
XL9535_CONFIG_PORT_1_REGISTER = 0x07, XL9535_CONFIG_PORT_1_REGISTER = 0x07,
}; };
class XL9535Component : public Component, public i2c::I2CDevice { class XL9535Component final : public Component, public i2c::I2CDevice {
public: public:
bool digital_read(uint8_t pin); bool digital_read(uint8_t pin);
void digital_write(uint8_t pin, bool value); void digital_write(uint8_t pin, bool value);
@@ -28,7 +28,7 @@ class XL9535Component : public Component, public i2c::I2CDevice {
float get_setup_priority() const override { return setup_priority::IO; } float get_setup_priority() const override { return setup_priority::IO; }
}; };
class XL9535GPIOPin : public GPIOPin { class XL9535GPIOPin final : public GPIOPin {
public: public:
void set_parent(XL9535Component *parent) { this->parent_ = parent; } void set_parent(XL9535Component *parent) { this->parent_ = parent; }
void set_pin(uint8_t pin) { this->pin_ = pin; } void set_pin(uint8_t pin) { this->pin_ = pin; }

View File

@@ -11,9 +11,9 @@ namespace esphome::xpt2046 {
using namespace touchscreen; using namespace touchscreen;
class XPT2046Component : public Touchscreen, class XPT2046Component final : public Touchscreen,
public spi::SPIDevice<spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_LOW, public spi::SPIDevice<spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_LOW,
spi::CLOCK_PHASE_LEADING, spi::DATA_RATE_2MHZ> { spi::CLOCK_PHASE_LEADING, spi::DATA_RATE_2MHZ> {
public: public:
/// Set the threshold for the touch detection. /// Set the threshold for the touch detection.
void set_threshold(int16_t threshold) { this->threshold_ = threshold; } void set_threshold(int16_t threshold) { this->threshold_ = threshold; }

View File

@@ -9,7 +9,7 @@
namespace esphome::yashima { namespace esphome::yashima {
class YashimaClimate : public climate::Climate, public Component { class YashimaClimate final : public climate::Climate, public Component {
public: public:
void setup() override; void setup() override;
void set_transmitter(remote_transmitter::RemoteTransmitterComponent *transmitter) { void set_transmitter(remote_transmitter::RemoteTransmitterComponent *transmitter) {

View File

@@ -7,7 +7,7 @@
namespace esphome::zephyr { namespace esphome::zephyr {
class CdcAcm : public Component { class CdcAcm final : public Component {
public: public:
CdcAcm(); CdcAcm();
void setup() override; void setup() override;

View File

@@ -5,7 +5,7 @@
#include <zephyr/device.h> #include <zephyr/device.h>
namespace esphome::zephyr { namespace esphome::zephyr {
class ZephyrGPIOPin : public InternalGPIOPin { class ZephyrGPIOPin final : public InternalGPIOPin {
public: public:
ZephyrGPIOPin(const device *gpio, int gpio_size, const char *pin_name_prefix) { ZephyrGPIOPin(const device *gpio, int gpio_size, const char *pin_name_prefix) {
this->gpio_ = gpio; this->gpio_ = gpio;

View File

@@ -6,7 +6,7 @@
namespace esphome::zephyr_ble_server { namespace esphome::zephyr_ble_server {
class BLEServer : public Component { class BLEServer final : public Component {
public: public:
void setup() override; void setup() override;
void dump_config() override; void dump_config() override;
@@ -21,7 +21,7 @@ class BLEServer : public Component {
CallbackManager<void(uint32_t)> passkey_cb_; CallbackManager<void(uint32_t)> passkey_cb_;
}; };
template<typename... Ts> class BLENumericComparisonReplyAction : public Action<Ts...> { template<typename... Ts> class BLENumericComparisonReplyAction final : public Action<Ts...> {
public: public:
explicit BLENumericComparisonReplyAction(BLEServer *parent) : parent_(parent) {} explicit BLENumericComparisonReplyAction(BLEServer *parent) : parent_(parent) {}