in tools/eclipse/project.py [0:0]
def gen_classpath(ext):
def make_classpath():
impl = xml.dom.minidom.getDOMImplementation()
return impl.createDocument(None, 'classpath', None)
def classpathentry(kind, path, src=None, out=None, exported=None):
e = doc.createElement('classpathentry')
e.setAttribute('kind', kind)
# TODO(davido): Remove this and other exclude BUILD files hack
# when this Bazel bug is fixed:
# https://github.com/bazelbuild/bazel/issues/1083
if kind == 'src':
e.setAttribute('excluding', '**/BUILD')
e.setAttribute('path', path)
if src:
e.setAttribute('sourcepath', src)
if out:
e.setAttribute('output', out)
if exported:
e.setAttribute('exported', 'true')
doc.documentElement.appendChild(e)
doc = make_classpath()
src = set()
lib = set()
java_library = re.compile('bazel-out/(?:.*)-fastbuild/bin(.*)/[^/]+[.]jar$')
srcs = re.compile('(.*/external/[^/]+)/jar/(.*)[.]jar')
for p in _query_classpath():
m = java_library.match(p)
if m:
src.add(m.group(1).lstrip('/'))
else:
if ext is not None and p.startswith("external"):
p = os.path.join(ext, p)
lib.add(p)
src_paths = {}
for s in sorted(src):
out = None
if s.startswith('lib/'):
out = 'eclipse-out/lib'
p = os.path.join(s, 'java')
if os.path.exists(p):
classpathentry('src', p, out=out)
continue
for env in ['main', 'test', 'java', 'javatests']:
o = None
if out:
o = out + '/' + env
elif env == 'test' or env == 'javatests':
o = 'eclipse-out/test'
if s.startswith(env + '/'):
src_paths[env] = o
continue
for srctype in ['java', 'resources']:
p = os.path.join(s, 'src', env, srctype)
if os.path.exists(p):
src_paths[p] = o
for s in src_paths:
classpathentry('src', s, out=src_paths[s])
for libs in [lib]:
for j in sorted(libs):
if excluded(j):
continue
s = None
m = srcs.match(j)
if m:
prefix = m.group(1)
suffix = m.group(2)
p = os.path.join(prefix, "src", "%s-src.jar" % suffix)
if os.path.exists(p):
s = p
classpathentry('lib', j, s)
classpathentry('con', JRE)
classpathentry('output', 'eclipse-out/classes')
p = os.path.join(ROOT, '.classpath')
with open(p, 'w') as fd:
doc.writexml(fd, addindent='\t', newl='\n', encoding='UTF-8')