Clarify our OOP semantics across the codebase (#9586)

Basically:

* Use `extend` for class definitions
* Use `new` for object instantiations

That includes some minor code cleanups along the way:

* Updated `Widget`'s docs to make the semantics clearer.
* Removed `should_restrict_JIT` (it's been dead code since https://github.com/koreader/android-luajit-launcher/pull/283)
* Minor refactoring of LuaSettings/LuaData/LuaDefaults/DocSettings to behave (mostly, they are instantiated via `open` instead of `new`) like everything else and handle inheritance properly (i.e., DocSettings is now a proper LuaSettings subclass).
* Default to `WidgetContainer` instead of `InputContainer` for stuff that doesn't actually setup key/gesture events.
* Ditto for explicit `*Listener` only classes, make sure they're based on `EventListener` instead of something uselessly fancier.
* Unless absolutely necessary, do not store references in class objects, ever; only values. Instead, always store references in instances, to avoid both sneaky inheritance issues, and sneaky GC pinning of stale references.
  * ReaderUI: Fix one such issue with its `active_widgets` array, with critical implications, as it essentially pinned *all* of ReaderUI's modules, including their reference to the `Document` instance (i.e., that was a big-ass leak).
* Terminal: Make sure the shell is killed on plugin teardown.
* InputText: Fix Home/End/Del physical keys to behave sensibly.
* InputContainer/WidgetContainer: If necessary, compute self.dimen at paintTo time (previously, only InputContainers did, which might have had something to do with random widgets unconcerned about input using it as a baseclass instead of WidgetContainer...).
* OverlapGroup: Compute self.dimen at *init* time, because for some reason it needs to do that, but do it directly in OverlapGroup instead of going through a weird WidgetContainer method that it was the sole user of.
* ReaderCropping: Under no circumstances should a Document instance member (here, self.bbox) risk being `nil`ed!
* Kobo: Minor code cleanups.
This commit is contained in:
NiLuJe
2022-10-06 02:14:48 +02:00
committed by GitHub
parent 7b9f02e1ac
commit fadee1f5dc
223 changed files with 849 additions and 985 deletions

View File

@@ -3,31 +3,29 @@ Handles append-mostly data such as KOReader's bookmarks and dictionary search hi
]]
local LuaSettings = require("luasettings")
local dbg = require("dbg")
local dump = require("dump")
local lfs = require("libs/libkoreader-lfs")
local logger = require("logger")
local util = require("util")
local LuaData = LuaSettings:new{
local LuaData = LuaSettings:extend{
name = "",
max_backups = 9,
}
--- Creates a new LuaData instance.
function LuaData:open(file_path, o) -- luacheck: ignore 312
if o and type(o) ~= "table" then
if dbg.is_on then
error("LuaData: got "..type(o)..", table expected")
else
o = {}
end
function LuaData:open(file_path, name)
-- Backwards compat, just in case...
if type(name) == "table" then
name = name.name
end
-- always initiate a new instance
-- careful, `o` is already a table so we use parentheses
self = LuaData:new(o)
local new = {file=file_path, data={}}
-- NOTE: Beware, our new instance is new, but self is still LuaData!
local new = LuaData:extend{
name = name,
file = file_path,
data = {},
}
-- Some magic to allow for self-describing function names:
-- We'll use data_env both as the environment when loading the data, *and* its metatable,
@@ -40,7 +38,7 @@ function LuaData:open(file_path, o) -- luacheck: ignore 312
local data_env = {}
data_env.__index = data_env
setmetatable(data_env, data_env)
data_env[self.name.."Entry"] = function(table)
data_env[new.name.."Entry"] = function(table)
if table.index then
-- We've got a deleted setting, overwrite with nil and be done with it.
if not table.data then
@@ -81,7 +79,7 @@ function LuaData:open(file_path, o) -- luacheck: ignore 312
end
end
if not ok then
for i=1, self.max_backups, 1 do
for i=1, new.max_backups, 1 do
local backup_file = new.file..".old."..i
if lfs.attributes(backup_file, "mode") == "file" then
ok, err = loadfile(backup_file, "t", data_env)
@@ -97,7 +95,7 @@ function LuaData:open(file_path, o) -- luacheck: ignore 312
end
end
return setmetatable(new, {__index = self})
return new
end
--- Saves a setting.