Mark user-configurable classes as final (part 8/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 8 of 21, split alphabetically by
component (hm3301 .. integration).
This commit is contained in:
Jesse Hills
2026-06-15 13:20:02 +12:00
parent a25ac28ae5
commit 8b57c2f735
44 changed files with 55 additions and 55 deletions

View File

@@ -9,7 +9,7 @@ namespace esphome::hm3301 {
static const uint8_t SELECT_COMM_CMD = 0x88;
class HM3301Component : public PollingComponent, public i2c::I2CDevice {
class HM3301Component final : public PollingComponent, public i2c::I2CDevice {
public:
HM3301Component() = default;

View File

@@ -34,7 +34,7 @@ enum HMC5883LRange {
HMC5883L_RANGE_810_UT = 0b111,
};
class HMC5883LComponent : public PollingComponent, public i2c::I2CDevice {
class HMC5883LComponent final : public PollingComponent, public i2c::I2CDevice {
public:
void setup() override;
void dump_config() override;

View File

@@ -5,7 +5,7 @@
namespace esphome::homeassistant {
class HomeassistantBinarySensor : public binary_sensor::BinarySensor, public Component {
class HomeassistantBinarySensor final : public binary_sensor::BinarySensor, public Component {
public:
void set_entity_id(const char *entity_id) { this->entity_id_ = entity_id; }
void set_attribute(const char *attribute) { this->attribute_ = attribute; }

View File

@@ -6,7 +6,7 @@
namespace esphome::homeassistant {
class HomeassistantNumber : public number::Number, public Component {
class HomeassistantNumber final : public number::Number, public Component {
public:
void set_entity_id(const char *entity_id) { this->entity_id_ = entity_id; }

View File

@@ -5,7 +5,7 @@
namespace esphome::homeassistant {
class HomeassistantSensor : public sensor::Sensor, public Component {
class HomeassistantSensor final : public sensor::Sensor, public Component {
public:
void set_entity_id(const char *entity_id) { this->entity_id_ = entity_id; }
void set_attribute(const char *attribute) { this->attribute_ = attribute; }

View File

@@ -5,7 +5,7 @@
namespace esphome::homeassistant {
class HomeassistantSwitch : public switch_::Switch, public Component {
class HomeassistantSwitch final : public switch_::Switch, public Component {
public:
void set_entity_id(const char *entity_id) { this->entity_id_ = entity_id; }
void setup() override;

View File

@@ -5,7 +5,7 @@
namespace esphome::homeassistant {
class HomeassistantTextSensor : public text_sensor::TextSensor, public Component {
class HomeassistantTextSensor final : public text_sensor::TextSensor, public Component {
public:
void set_entity_id(const char *entity_id) { this->entity_id_ = entity_id; }
void set_attribute(const char *attribute) { this->attribute_ = attribute; }

View File

@@ -7,7 +7,7 @@
namespace esphome::honeywell_hih_i2c {
class HoneywellHIComponent : public PollingComponent, public i2c::I2CDevice {
class HoneywellHIComponent final : public PollingComponent, public i2c::I2CDevice {
public:
void dump_config() override;
void loop() override;

View File

@@ -8,9 +8,9 @@
namespace esphome::honeywellabp {
class HONEYWELLABPSensor : public PollingComponent,
public spi::SPIDevice<spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_LOW,
spi::CLOCK_PHASE_LEADING, spi::DATA_RATE_200KHZ> {
class HONEYWELLABPSensor final : public PollingComponent,
public spi::SPIDevice<spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_LOW,
spi::CLOCK_PHASE_LEADING, spi::DATA_RATE_200KHZ> {
public:
void set_pressure_sensor(sensor::Sensor *pressure_sensor) { pressure_sensor_ = pressure_sensor; }
void set_temperature_sensor(sensor::Sensor *temperature_sensor) { temperature_sensor_ = temperature_sensor; }

View File

@@ -11,7 +11,7 @@ namespace esphome::honeywellabp2_i2c {
enum ABP2TRANFERFUNCTION { ABP2_TRANS_FUNC_A = 0, ABP2_TRANS_FUNC_B = 1 };
class HONEYWELLABP2Sensor : public PollingComponent, public i2c::I2CDevice {
class HONEYWELLABP2Sensor final : public PollingComponent, public i2c::I2CDevice {
public:
void set_pressure_sensor(sensor::Sensor *pressure_sensor) { this->pressure_sensor_ = pressure_sensor; };
void set_temperature_sensor(sensor::Sensor *temperature_sensor) { this->temperature_sensor_ = temperature_sensor; };

View File

@@ -6,7 +6,7 @@
namespace esphome::host {
class HostGPIOPin : public InternalGPIOPin {
class HostGPIOPin final : public InternalGPIOPin {
public:
void set_pin(uint8_t pin) { pin_ = pin; }
void set_inverted(bool inverted) { inverted_ = inverted; }

View File

@@ -5,7 +5,7 @@
namespace esphome::host {
class HostTime : public time::RealTimeClock {
class HostTime final : public time::RealTimeClock {
public:
void update() override {}
};

View File

@@ -6,7 +6,7 @@
namespace esphome::hrxl_maxsonar_wr {
class HrxlMaxsonarWrComponent : public sensor::Sensor, public Component, public uart::UARTDevice {
class HrxlMaxsonarWrComponent final : public sensor::Sensor, public Component, public uart::UARTDevice {
public:
// Nothing really public.

View File

@@ -7,7 +7,7 @@
namespace esphome::hte501 {
/// This class implements support for the hte501 of temperature i2c sensors.
class HTE501Component : public PollingComponent, public i2c::I2CDevice {
class HTE501Component final : public PollingComponent, public i2c::I2CDevice {
public:
void set_temperature_sensor(sensor::Sensor *temperature_sensor) { temperature_sensor_ = temperature_sensor; }
void set_humidity_sensor(sensor::Sensor *humidity_sensor) { humidity_sensor_ = humidity_sensor; }

View File

@@ -311,7 +311,7 @@ inline HttpReadResult http_read_fully(HttpContainer *container, uint8_t *buffer,
return {HttpReadStatus::OK, 0};
}
class HttpRequestResponseTrigger : public Trigger<std::shared_ptr<HttpContainer>, std::string &> {
class HttpRequestResponseTrigger final : public Trigger<std::shared_ptr<HttpContainer>, std::string &> {
public:
void process(const std::shared_ptr<HttpContainer> &container, std::string &response_body) {
this->trigger(container, response_body);
@@ -447,7 +447,7 @@ class HttpRequestComponent : public Component {
uint32_t watchdog_timeout_{0};
};
template<typename... Ts> class HttpRequestSendAction : public Action<Ts...> {
template<typename... Ts> class HttpRequestSendAction final : public Action<Ts...> {
public:
HttpRequestSendAction(HttpRequestComponent *parent) : parent_(parent) {}
TEMPLATABLE_VALUE(std::string, url)

View File

@@ -46,7 +46,7 @@ class HttpContainerArduino : public HttpContainer {
size_t chunk_remaining_{0}; ///< Bytes remaining in current chunk
};
class HttpRequestArduino : public HttpRequestComponent {
class HttpRequestArduino final : public HttpRequestComponent {
public:
#ifdef USE_ESP8266
void set_tls_buffer_size_rx(uint16_t size) { this->tls_buffer_size_rx_ = size; }

View File

@@ -16,7 +16,7 @@ class HttpContainerHost : public HttpContainer {
std::vector<uint8_t> response_body_{};
};
class HttpRequestHost : public HttpRequestComponent {
class HttpRequestHost final : public HttpRequestComponent {
public:
std::shared_ptr<HttpContainer> perform(const std::string &url, const std::string &method, const std::string &body,
const std::vector<Header> &request_headers,

View File

@@ -26,7 +26,7 @@ class HttpContainerIDF : public HttpContainer {
esp_http_client_handle_t client_;
};
class HttpRequestIDF : public HttpRequestComponent {
class HttpRequestIDF final : public HttpRequestComponent {
public:
void dump_config() override;

View File

@@ -5,7 +5,7 @@
namespace esphome::http_request {
template<typename... Ts> class OtaHttpRequestComponentFlashAction : public Action<Ts...> {
template<typename... Ts> class OtaHttpRequestComponentFlashAction final : public Action<Ts...> {
public:
OtaHttpRequestComponentFlashAction(OtaHttpRequestComponent *parent) : parent_(parent) {}
TEMPLATABLE_VALUE(std::string, md5_url)

View File

@@ -9,7 +9,7 @@ namespace esphome::htu21d {
enum HTU21DSensorModels { HTU21D_SENSOR_MODEL_HTU21D = 0, HTU21D_SENSOR_MODEL_SI7021, HTU21D_SENSOR_MODEL_SHT21 };
class HTU21DComponent : public PollingComponent, public i2c::I2CDevice {
class HTU21DComponent final : public PollingComponent, public i2c::I2CDevice {
public:
void set_temperature(sensor::Sensor *temperature) { temperature_ = temperature; }
void set_humidity(sensor::Sensor *humidity) { humidity_ = humidity; }
@@ -34,7 +34,7 @@ class HTU21DComponent : public PollingComponent, public i2c::I2CDevice {
HTU21DSensorModels sensor_model_{HTU21D_SENSOR_MODEL_HTU21D};
};
template<typename... Ts> class SetHeaterLevelAction : public Action<Ts...>, public Parented<HTU21DComponent> {
template<typename... Ts> class SetHeaterLevelAction final : public Action<Ts...>, public Parented<HTU21DComponent> {
public:
TEMPLATABLE_VALUE(uint8_t, level)
@@ -45,7 +45,7 @@ template<typename... Ts> class SetHeaterLevelAction : public Action<Ts...>, publ
}
};
template<typename... Ts> class SetHeaterAction : public Action<Ts...>, public Parented<HTU21DComponent> {
template<typename... Ts> class SetHeaterAction final : public Action<Ts...>, public Parented<HTU21DComponent> {
public:
TEMPLATABLE_VALUE(bool, status)

View File

@@ -7,7 +7,7 @@
namespace esphome::htu31d {
class HTU31DComponent : public PollingComponent, public i2c::I2CDevice {
class HTU31DComponent final : public PollingComponent, public i2c::I2CDevice {
public:
void setup() override; /// Setup (reset) the sensor and check connection.
void update() override; /// Update the sensor values (temperature+humidity).

View File

@@ -16,7 +16,7 @@ namespace esphome::hub75 {
using esphome::display::ColorBitness;
using esphome::display::ColorOrder;
class HUB75Display : public display::Display {
class HUB75Display final : public display::Display {
public:
// Constructor accepting config
explicit HUB75Display(const Hub75Config &config);
@@ -51,7 +51,7 @@ class HUB75Display : public display::Display {
bool enabled_{false};
};
template<typename... Ts> class SetBrightnessAction : public Action<Ts...>, public Parented<HUB75Display> {
template<typename... Ts> class SetBrightnessAction final : public Action<Ts...>, public Parented<HUB75Display> {
public:
TEMPLATABLE_VALUE(uint8_t, brightness)

View File

@@ -14,7 +14,7 @@ enum HX711Gain : uint8_t {
HX711_GAIN_64 = 3,
};
class HX711Sensor : public sensor::Sensor, public PollingComponent {
class HX711Sensor final : public sensor::Sensor, public PollingComponent {
public:
void set_dout_pin(GPIOPin *dout_pin) { dout_pin_ = dout_pin; }
void set_sck_pin(GPIOPin *sck_pin) { sck_pin_ = sck_pin; }

View File

@@ -32,7 +32,7 @@ static const uint8_t NUM_SENSORS = 1;
#define HYDREON_RGXX_IGNORE_LIST(F, SEP) F("Emitters") SEP F("Event") SEP F("Reset")
class HydreonRGxxComponent : public PollingComponent, public uart::UARTDevice {
class HydreonRGxxComponent final : public PollingComponent, public uart::UARTDevice {
public:
void set_sensor(sensor::Sensor *sensor, int index) { this->sensors_[index] = sensor; }
#ifdef USE_BINARY_SENSOR
@@ -86,7 +86,7 @@ class HydreonRGxxComponent : public PollingComponent, public uart::UARTDevice {
int sensors_received_ = -1;
};
class HydreonRGxxBinaryComponent : public Component {
class HydreonRGxxBinaryComponent final : public Component {
public:
HydreonRGxxBinaryComponent(HydreonRGxxComponent *parent) {}
};

View File

@@ -6,7 +6,7 @@
namespace esphome::hyt271 {
class HYT271Component : public PollingComponent, public i2c::I2CDevice {
class HYT271Component final : public PollingComponent, public i2c::I2CDevice {
public:
void set_temperature(sensor::Sensor *temperature) { temperature_ = temperature; }
void set_humidity(sensor::Sensor *humidity) { humidity_ = humidity; }

View File

@@ -14,7 +14,7 @@ enum RecoveryCode {
RECOVERY_COMPLETED,
};
class ArduinoI2CBus : public InternalI2CBus, public Component {
class ArduinoI2CBus final : public InternalI2CBus, public Component {
public:
void setup() override;
void dump_config() override;

View File

@@ -14,7 +14,7 @@ enum RecoveryCode {
RECOVERY_COMPLETED,
};
class IDFI2CBus : public InternalI2CBus, public Component {
class IDFI2CBus final : public InternalI2CBus, public Component {
public:
void setup() override;
void dump_config() override;

View File

@@ -8,7 +8,7 @@
namespace esphome::i2c {
class HostI2CBus : public I2CBus, public Component {
class HostI2CBus final : public I2CBus, public Component {
public:
~HostI2CBus() override;

View File

@@ -9,7 +9,7 @@ struct device; // NOLINT(readability-identifier-naming) - forward decl of Zephy
namespace esphome::i2c {
class ZephyrI2CBus : public InternalI2CBus, public Component {
class ZephyrI2CBus final : public InternalI2CBus, public Component {
public:
explicit ZephyrI2CBus(const device *i2c_dev) : i2c_dev_(i2c_dev) {}
void setup() override;

View File

@@ -5,7 +5,7 @@
namespace esphome::i2c_device {
class I2CDeviceComponent : public Component, public i2c::I2CDevice {
class I2CDeviceComponent final : public Component, public i2c::I2CDevice {
public:
void dump_config() override;

View File

@@ -36,7 +36,7 @@ class I2SAudioIn : public I2SAudioBase {};
class I2SAudioOut : public I2SAudioBase {};
class I2SAudioComponent : public Component {
class I2SAudioComponent final : public Component {
public:
i2s_std_gpio_config_t get_pin_config() const {
return {.mclk = (gpio_num_t) this->mclk_pin_,

View File

@@ -14,7 +14,7 @@
namespace esphome::i2s_audio {
class I2SAudioMicrophone : public I2SAudioIn, public microphone::Microphone, public Component {
class I2SAudioMicrophone final : public I2SAudioIn, public microphone::Microphone, public Component {
public:
void setup() override;
void dump_config() override;

View File

@@ -14,7 +14,7 @@ enum class I2SCommFmt : uint8_t {
/// @brief Standard I2S speaker implementation.
/// Outputs PCM audio data directly to an I2S DAC using the standard I2S protocol.
class I2SAudioSpeaker : public I2SAudioSpeakerBase {
class I2SAudioSpeaker final : public I2SAudioSpeakerBase {
public:
void dump_config() override;

View File

@@ -6,7 +6,7 @@
namespace esphome::iaqcore {
class IAQCore : public PollingComponent, public i2c::I2CDevice {
class IAQCore final : public PollingComponent, public i2c::I2CDevice {
public:
void set_co2(sensor::Sensor *co2) { co2_ = co2; }
void set_tvoc(sensor::Sensor *tvoc) { tvoc_ = tvoc; }

View File

@@ -44,7 +44,7 @@ enum ImprovSerialType : uint8_t {
static const uint16_t IMPROV_SERIAL_TIMEOUT = 100;
static const uint8_t IMPROV_SERIAL_VERSION = 1;
class ImprovSerialComponent : public Component, public improv_base::ImprovBase {
class ImprovSerialComponent final : public Component, public improv_base::ImprovBase {
public:
void setup() override;
void loop() override;

View File

@@ -8,7 +8,7 @@
namespace esphome::ina219 {
class INA219Component : public PollingComponent, public i2c::I2CDevice {
class INA219Component final : public PollingComponent, public i2c::I2CDevice {
public:
void setup() override;
void dump_config() override;

View File

@@ -40,7 +40,7 @@ union ConfigurationRegister {
} __attribute__((packed));
};
class INA226Component : public PollingComponent, public i2c::I2CDevice {
class INA226Component final : public PollingComponent, public i2c::I2CDevice {
public:
void setup() override;
void dump_config() override;

View File

@@ -6,7 +6,7 @@
namespace esphome::ina260 {
class INA260Component : public PollingComponent, public i2c::I2CDevice {
class INA260Component final : public PollingComponent, public i2c::I2CDevice {
public:
void setup() override;
void dump_config() override;

View File

@@ -6,7 +6,7 @@
namespace esphome::ina2xx_i2c {
class INA2XXI2C : public ina2xx_base::INA2XX, public i2c::I2CDevice {
class INA2XXI2C final : public ina2xx_base::INA2XX, public i2c::I2CDevice {
public:
void setup() override;
void dump_config() override;

View File

@@ -6,9 +6,9 @@
namespace esphome::ina2xx_spi {
class INA2XXSPI : public ina2xx_base::INA2XX,
public spi::SPIDevice<spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_LOW, spi::CLOCK_PHASE_TRAILING,
spi::DATA_RATE_1MHZ> {
class INA2XXSPI final : public ina2xx_base::INA2XX,
public spi::SPIDevice<spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_LOW,
spi::CLOCK_PHASE_TRAILING, spi::DATA_RATE_1MHZ> {
public:
void setup() override;
void dump_config() override;

View File

@@ -6,7 +6,7 @@
namespace esphome::ina3221 {
class INA3221Component : public PollingComponent, public i2c::I2CDevice {
class INA3221Component final : public PollingComponent, public i2c::I2CDevice {
public:
void setup() override;
void dump_config() override;

View File

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

View File

@@ -31,7 +31,7 @@ static constexpr uint8_t LUTB[16] = {0xFF, 0xFD, 0xF7, 0xF5, 0xDF, 0xDD, 0xD7, 0
static constexpr uint8_t PIXEL_MASK_LUT[8] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80};
static constexpr uint8_t PIXEL_MASK_GLUT[2] = {0x0F, 0xF0};
class Inkplate : public display::DisplayBuffer, public i2c::I2CDevice {
class Inkplate final : public display::DisplayBuffer, public i2c::I2CDevice {
public:
void set_greyscale(bool greyscale) {
this->greyscale_ = greyscale;

View File

@@ -22,7 +22,7 @@ enum IntegrationMethod {
INTEGRATION_METHOD_RIGHT,
};
class IntegrationSensor : public sensor::Sensor, public Component {
class IntegrationSensor final : public sensor::Sensor, public Component {
public:
void setup() override;
void dump_config() override;
@@ -71,12 +71,12 @@ class IntegrationSensor : public sensor::Sensor, public Component {
float last_value_{0.0f};
};
template<typename... Ts> class ResetAction : public Action<Ts...>, public Parented<IntegrationSensor> {
template<typename... Ts> class ResetAction final : public Action<Ts...>, public Parented<IntegrationSensor> {
public:
void play(const Ts &...x) override { this->parent_->reset(); }
};
template<typename... Ts> class SetValueAction : public Action<Ts...>, public Parented<IntegrationSensor> {
template<typename... Ts> class SetValueAction final : public Action<Ts...>, public Parented<IntegrationSensor> {
public:
TEMPLATABLE_VALUE(float, value)