From 44a65aa329fda630aab0133152bc410030887a00 Mon Sep 17 00:00:00 2001 From: Esben Sorig Date: Wed, 10 Aug 2016 15:44:39 +0100 Subject: [PATCH] Fix heuristic for include path search. Warn users if multiple candidates are found --- examples/meta/generator/translate.py | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/examples/meta/generator/translate.py b/examples/meta/generator/translate.py index 8c9dd4804f7..3e2fbf890f3 100644 --- a/examples/meta/generator/translate.py +++ b/examples/meta/generator/translate.py @@ -11,6 +11,7 @@ set except NameError: from sets import Set as set +import warnings def find(key, dictionary): @@ -261,14 +262,30 @@ def getIncludePathForClass(self, type_): translatedType = self.translateType({"ObjectType": type_}) template_parameter_matcher = '\<[0-9a-zA-Z_]*\>' variants = [ - translatedType, 'C' + translatedType, - re.sub(template_parameter_matcher, '', translatedType), - 'C' + re.sub(template_parameter_matcher, '', translatedType) + translatedType, + 'C' + re.sub(template_parameter_matcher, '', translatedType), + re.sub(template_parameter_matcher, '', translatedType) ] + + candidates = [] for variant in variants: if variant in self.tags: - return self.tags[variant] + candidates.append(self.tags[variant]) + + unique_candidates = [path for i, path in enumerate(candidates) + if candidates.index(path) == i] + + if len(unique_candidates) == 1: + return unique_candidates[0] + + elif len(unique_candidates) > 1: + msg = "Several possible include paths for type {}.\n"\ + "Candidate paths: {}\nChosen: {}" + warnings.warn(msg.format(type_, + unique_candidates, + unique_candidates[0])) + return unique_candidates[0] raise TranslationFailure('Failed to obtain include path for %s' % (' or '.join(variants)))