Skip to content

Commit 70deb20

Browse files
authored
Refine the map_java_to_class implementation #1552 (#1554)
Signed-off-by: tdruez <tdruez@nexb.com>
1 parent a6f7c86 commit 70deb20

File tree

2 files changed

+19
-12
lines changed

2 files changed

+19
-12
lines changed

scanpipe/pipes/d2d.py

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -192,15 +192,25 @@ def map_java_to_class(project, logger=None):
192192
to_resources = project_files.to_codebase().has_no_relation()
193193

194194
to_resources_dot_class = to_resources.filter(extension=".class")
195-
resource_count = to_resources_dot_class.count()
196-
if logger:
197-
logger(f"Mapping {resource_count:,d} .class resources to .java")
195+
from_resources_dot_java = (
196+
from_resources.filter(extension=".java")
197+
# The "java_package" extra_data value is set during the `find_java_packages`,
198+
# it is required to build the index.
199+
.filter(extra_data__java_package__isnull=False)
200+
)
201+
to_resource_count = to_resources_dot_class.count()
202+
from_resource_count = from_resources_dot_java.count()
198203

199-
from_resources_dot_java = from_resources.filter(extension=".java")
200-
if not from_resources_dot_java.exists():
204+
if not from_resource_count:
201205
logger("No .java resources to map.")
202206
return
203207

208+
if logger:
209+
logger(
210+
f"Mapping {to_resource_count:,d} .class resources to "
211+
f"{from_resource_count:,d} .java"
212+
)
213+
204214
# build an index using from-side Java fully qualified class file names
205215
# built from the "java_package" and file name
206216
indexables = get_indexable_qualified_java_paths(from_resources_dot_java)
@@ -209,7 +219,7 @@ def map_java_to_class(project, logger=None):
209219
from_classes_index = pathmap.build_index(indexables, with_subpaths=False)
210220

211221
resource_iterator = to_resources_dot_class.iterator(chunk_size=2000)
212-
progress = LoopProgress(resource_count, logger)
222+
progress = LoopProgress(to_resource_count, logger)
213223

214224
for to_resource in progress.iter(resource_iterator):
215225
_map_java_to_class_resource(to_resource, from_resources, from_classes_index)
@@ -228,11 +238,8 @@ def get_indexable_qualified_java_paths_from_values(resource_values):
228238
(123, "org/apache/commons/LoggerImpl.java")
229239
"""
230240
for resource_id, resource_name, resource_extra_data in resource_values:
231-
java_package = resource_extra_data and resource_extra_data.get("java_package")
232-
if not java_package:
233-
continue
234241
fully_qualified = jvm.get_fully_qualified_java_path(
235-
java_package,
242+
java_package=resource_extra_data.get("java_package"),
236243
filename=resource_name,
237244
)
238245
yield resource_id, fully_qualified

scanpipe/tests/pipes/test_d2d.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,7 @@ def test_scanpipe_pipes_d2d_map_java_to_class(self):
365365
buffer = io.StringIO()
366366
d2d.map_java_to_class(self.project1, logger=buffer.write)
367367

368-
expected = "Mapping 3 .class resources to .java"
368+
expected = "Mapping 3 .class resources to 2 .java"
369369
self.assertIn(expected, buffer.getvalue())
370370

371371
self.assertEqual(2, self.project1.codebaserelations.count())
@@ -390,7 +390,7 @@ def test_scanpipe_pipes_d2d_map_java_to_class_no_java(self):
390390
make_resource_file(self.project1, path="to/Abstract.class")
391391
buffer = io.StringIO()
392392
d2d.map_java_to_class(self.project1, logger=buffer.write)
393-
expected = "Mapping 1 .class resources to .java" "No .java resources to map."
393+
expected = "No .java resources to map."
394394
self.assertIn(expected, buffer.getvalue())
395395

396396
def test_scanpipe_pipes_d2d_map_jar_to_source(self):

0 commit comments

Comments
 (0)