[Checkins] SVN: zope.fixers/trunk/zope/fixers/fix_implements.py Major speedup.
Lennart Regebro
regebro at gmail.com
Mon Apr 6 13:24:20 EDT 2009
Log message for revision 98945:
Major speedup.
Changed:
U zope.fixers/trunk/zope/fixers/fix_implements.py
-=-
Modified: zope.fixers/trunk/zope/fixers/fix_implements.py
===================================================================
--- zope.fixers/trunk/zope/fixers/fix_implements.py 2009-04-06 17:19:39 UTC (rev 98944)
+++ zope.fixers/trunk/zope/fixers/fix_implements.py 2009-04-06 17:24:20 UTC (rev 98945)
@@ -59,11 +59,19 @@
def compile_pattern(self):
self.named_import_pattern = PatternCompiler().compile_pattern(self.IMPORT_PATTERN)
-
+
+ def _add_pattern(self, match):
+ self.class_patterns.append(PatternCompiler().compile_pattern(
+ self.CLASS_PATTERN % match))
+ self.implements_patterns.append(PatternCompiler().compile_pattern(
+ self.IMPLEMENTS_PATTERN % match))
+
def start_tree(self, tree, filename):
- self.matches = ["'implements'",
- "'interface' trailer< '.' 'implements' >",
- ]
+ self.class_patterns = []
+ self.implements_patterns = []
+ for match in ["'implements'",
+ "'interface' trailer< '.' 'implements' >"]:
+ self._add_pattern(match)
super(FixImplements, self).start_tree(tree, filename)
def match(self, node):
@@ -72,14 +80,13 @@
if self.named_import_pattern.match(node, results):
return results
- for name in self.matches:
- # Now match clases on all import variants found:
- pattern = PatternCompiler().compile_pattern(self.CLASS_PATTERN % name)
+ # Now match classes on all import variants found:
+ for pattern in self.class_patterns:
if pattern.match(node, results):
return results
- # And lastly on all actual calls to implements:
- pattern = PatternCompiler().compile_pattern(self.IMPLEMENTS_PATTERN % name)
+ # And lastly on all actual calls to implements:
+ for pattern in self.implements_patterns:
if pattern.match(node, results):
return results
@@ -90,11 +97,11 @@
name.replace(Name("implementor", prefix=name.get_prefix()))
if 'rename' in results:
# The import statement use import as
- self.matches.append("'%s'" % results['rename'].value)
+ self._add_pattern("'%s'" % results['rename'].value)
if 'interface_rename' in results:
- self.matches.append("'%s' trailer< '.' 'implements' > " % results['interface_rename'].value)
+ self._add_pattern("'%s' trailer< '.' 'implements' > " % results['interface_rename'].value)
if 'interface_full' in results:
- self.matches.append("'zope' trailer< '.' 'interface' > trailer< '.' 'implements' >")
+ self._add_pattern("'zope' trailer< '.' 'interface' > trailer< '.' 'implements' >")
if 'statement' in results:
# This matched a class that has an implements(IFoo) statement.
# We must convert that statement to a class decorator
More information about the Checkins
mailing list