Skip to content

Commit f7d8ac9

Browse files
authored
Refine D2D with Xtend and Class Mapping #1906 (#1947)
Signed-off-by: Chin Yeung Li <tli@nexb.com>
1 parent 89dab7a commit f7d8ac9

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,
@@ -260,6 +262,20 @@ def map_jar_to_grammar_source(self):
260262
project=self.project, jvm_lang=jvm.GrammarLanguage, logger=self.log
261263
)
262264

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

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)