Skip to content

Commit f668786

Browse files
committed
Refine D2D with Xtend and Class Mapping #1906
Signed-off-by: Chin Yeung Li <tli@nexb.com>
1 parent cb0c6e6 commit f668786

File tree

3 files changed

+53
-0
lines changed

3 files changed

+53
-0
lines changed

scanpipe/pipelines/deploy_to_develop.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ def steps(cls):
8383
cls.find_grammar_packages,
8484
cls.map_grammar_to_class,
8585
cls.map_jar_to_grammar_source,
86+
cls.find_xtend_packages,
87+
cls.map_xtend_to_class,
8688
cls.map_javascript,
8789
cls.map_javascript_symbols,
8890
cls.map_javascript_strings,
@@ -259,6 +261,20 @@ def map_jar_to_grammar_source(self):
259261
project=self.project, jvm_lang=jvm.GrammarLanguage, logger=self.log
260262
)
261263

264+
@optional_step("Xtend")
265+
def find_xtend_packages(self):
266+
"""Find the java package of the xtend source files."""
267+
d2d.find_jvm_packages(
268+
project=self.project, jvm_lang=jvm.XtendLanguage, logger=self.log
269+
)
270+
271+
@optional_step("Xtend")
272+
def map_xtend_to_class(self):
273+
"""Map a .class compiled file to its xtend source."""
274+
d2d.map_jvm_to_class(
275+
project=self.project, jvm_lang=jvm.XtendLanguage, logger=self.log
276+
)
277+
262278
@optional_step("JavaScript")
263279
def map_javascript(self):
264280
"""

scanpipe/pipes/jvm.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,15 @@ class GrammarLanguage(JvmLanguage):
217217
binary_map_type = "grammar_to_class"
218218

219219

220+
class XtendLanguage(JvmLanguage):
221+
name = "xtend"
222+
source_extensions = (".xtend",)
223+
binary_extensions = (".class",)
224+
source_package_attribute_name = "xtend_package"
225+
package_regex = re.compile(r"^\s*package\s+([\w\.]+)\s*;?")
226+
binary_map_type = "xtend_to_class"
227+
228+
220229
def get_fully_qualified_path(jvm_package, filename):
221230
"""
222231
Return a fully qualified path of a ``filename`` in a

scanpipe/tests/pipes/test_d2d.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -461,6 +461,34 @@ def test_scanpipe_pipes_d2d_map_grammar_to_class(self):
461461
expected = {"from_source_root": "from/antlr4-4.5.1-beta-1/tool/src/"}
462462
self.assertEqual(expected, r1.extra_data)
463463

464+
def test_scanpipe_pipes_d2d_map_xtend_to_class(self):
465+
from1 = make_resource_file(
466+
self.project1,
467+
path="from/org.openhab.binding.urtsi/src/main/java/org/openhab/"
468+
+ "binding/urtsi/internal/UrtsiDevice.xtend",
469+
extra_data={"xtend_package": "org.openhab.binding.urtsi.internal"},
470+
)
471+
472+
to1 = make_resource_file(
473+
self.project1,
474+
path="to/org.openhab.binding.urtsi-1.6.2.jar-extract/org/"
475+
+ "openhab/binding/urtsi/internal/UrtsiDevice.class",
476+
)
477+
478+
buffer = io.StringIO()
479+
d2d.map_jvm_to_class(
480+
self.project1, logger=buffer.write, jvm_lang=jvm.XtendLanguage
481+
)
482+
483+
expected = "Mapping 1 .class resources to 1 ('.xtend',)"
484+
self.assertIn(expected, buffer.getvalue())
485+
self.assertEqual(1, self.project1.codebaserelations.count())
486+
487+
r1 = self.project1.codebaserelations.get(to_resource=to1, from_resource=from1)
488+
self.assertEqual("xtend_to_class", r1.map_type)
489+
expected = {"from_source_root": "from/org.openhab.binding.urtsi/src/main/java/"}
490+
self.assertEqual(expected, r1.extra_data)
491+
464492
def test_scanpipe_pipes_d2d_map_java_to_class_no_java(self):
465493
make_resource_file(self.project1, path="to/Abstract.class")
466494
buffer = io.StringIO()

0 commit comments

Comments
 (0)