Clean up CGImports a bit more.

This commit is contained in:
Josh Matthews 2015-04-10 10:31:44 -04:00
parent 9677eb292d
commit 9619390ece

View file

@ -1468,34 +1468,44 @@ class CGImports(CGWrapper):
return [type] return [type]
def isImportable(type): def isImportable(type):
if not type.isType():
assert type.isInterface()
return not type.isCallback()
return type.isNonCallbackInterface() and not type.builtin return type.isNonCallbackInterface() and not type.builtin
def relatedTypesForSignatures(method):
types = []
for (returnType, arguments) in method.signatures():
types += componentTypes(returnType)
for arg in arguments:
types += componentTypes(arg.type)
return types
def getIdentifier(t):
if t.isType():
return t.inner.identifier
assert t.isInterface()
return t.identifier
types = [] types = []
for d in descriptors: for d in descriptors:
if not d.interface.isCallback(): types += [d.interface]
imports += ['dom::types::%s' % d.interface.identifier.name]
methods = d.interface.members + d.interface.namedConstructors members = d.interface.members + d.interface.namedConstructors
constructor = d.interface.ctor() constructor = d.interface.ctor()
if constructor: if constructor:
methods += [constructor] members += [constructor]
for m in methods: for m in members:
if m.isMethod(): if m.isMethod():
for (returnType, arguments) in m.signatures(): types += relatedTypesForSignatures(m)
types += componentTypes(returnType)
for arg in arguments:
types += componentTypes(arg.type)
elif m.isAttr(): elif m.isAttr():
types += componentTypes(m.type) types += componentTypes(m.type)
for c in callbacks: for c in callbacks:
for (returnType, arguments) in c.signatures(): types += relatedTypesForSignatures(c)
types += componentTypes(returnType)
for arg in arguments:
types += componentTypes(arg.type)
imports += ['dom::types::%s' % t.inner.identifier.name for t in types if isImportable(t)] imports += ['dom::types::%s' % getIdentifier(t).name for t in types if isImportable(t)]
statements = ['#![allow(%s)]' % ','.join(ignored_warnings)] statements = ['#![allow(%s)]' % ','.join(ignored_warnings)]
statements.extend('use %s;' % i for i in sorted(set(imports))) statements.extend('use %s;' % i for i in sorted(set(imports)))