diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2020-05-22 17:08:44 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-22 17:08:44 +0300 |
commit | 2b1ca518cfce52dc5e8da086efca563677c353e4 (patch) | |
tree | 899bafe2681288744975fe7cb6affd9cd756ddf0 /mesonbuild/interpreterbase.py | |
parent | 2fd838d62dc16af0687b4be7da4ffb28cb6a9725 (diff) | |
parent | cb4e4f625f8f191eb5ed1bd435a263b0c7bd11cf (diff) | |
download | meson-2b1ca518cfce52dc5e8da086efca563677c353e4.zip meson-2b1ca518cfce52dc5e8da086efca563677c353e4.tar.gz meson-2b1ca518cfce52dc5e8da086efca563677c353e4.tar.bz2 |
Merge pull request #7123 from dcbaker/use-feature-deprecated
Use FeatureDeprecated (and other cleanups)
Diffstat (limited to 'mesonbuild/interpreterbase.py')
-rw-r--r-- | mesonbuild/interpreterbase.py | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/mesonbuild/interpreterbase.py b/mesonbuild/interpreterbase.py index af9018b..634f4f2 100644 --- a/mesonbuild/interpreterbase.py +++ b/mesonbuild/interpreterbase.py @@ -286,6 +286,13 @@ class FeatureCheckBase(metaclass=abc.ABCMeta): return f(*wrapped_args, **wrapped_kwargs) return wrapped + @classmethod + def single_use(cls, feature_name: str, version: str, subproject: str, + extra_message: T.Optional[str] = None) -> None: + """Oneline version that instantiates and calls use().""" + cls(feature_name, version, extra_message).use(subproject) + + class FeatureNew(FeatureCheckBase): """Checks for new features""" @@ -342,17 +349,23 @@ class FeatureDeprecated(FeatureCheckBase): mlog.warning(*args) -class FeatureCheckKwargsBase: - def __init__(self, feature_name: str, feature_version: str, kwargs: T.List[str]): +class FeatureCheckKwargsBase(metaclass=abc.ABCMeta): + + @property + @abc.abstractmethod + def feature_check_class(self) -> T.Type[FeatureCheckBase]: + pass + + def __init__(self, feature_name: str, feature_version: str, + kwargs: T.List[str], extra_message: T.Optional[str] = None): self.feature_name = feature_name self.feature_version = feature_version self.kwargs = kwargs + self.extra_message = extra_message def __call__(self, f): @wraps(f) def wrapped(*wrapped_args, **wrapped_kwargs): - # Which FeatureCheck class to invoke - FeatureCheckClass = self.feature_check_class kwargs, subproject = _get_callee_args(wrapped_args, want_subproject=True)[3:5] if subproject is None: raise AssertionError('{!r}'.format(wrapped_args)) @@ -360,7 +373,8 @@ class FeatureCheckKwargsBase: if arg not in kwargs: continue name = arg + ' arg in ' + self.feature_name - FeatureCheckClass(name, self.feature_version).use(subproject) + self.feature_check_class.single_use( + name, self.feature_version, subproject, self.extra_message) return f(*wrapped_args, **wrapped_kwargs) return wrapped @@ -570,7 +584,7 @@ class InterpreterBase: self.argument_depth += 1 for key, value in kwargs.items(): if not isinstance(key, mparser.StringNode): - FeatureNew('Dictionary entry using non literal key', '0.53.0').use(self.subproject) + FeatureNew.single_use('Dictionary entry using non literal key', '0.53.0', self.subproject) assert isinstance(key, mparser.BaseNode) # All keys must be nodes due to resolve_key_nodes=False str_key = self.evaluate_statement(key) if not isinstance(str_key, str): |