diff --git a/demo-dep-output.yaml b/demo-dep-output.yaml
index d08e915f..eb85f743 100644
--- a/demo-dep-output.yaml
+++ b/demo-dep-output.yaml
@@ -333,6 +333,10 @@
version: 1.0.0
type: compile
resolvedIdentifier: FE4FE11AAEE77BE10035218537FBF4B2E6EF1D9F
+ extras:
+ artifactId: config-utils
+ groupId: io.konveyor.demo
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=internal
- konveyor.io/language=java
@@ -340,7 +344,10 @@
- name: org.postgresql.postgresql
version: 42.2.23
type: compile
- resolvedIdentifier: 9cb217a3d5b640567ed7c6e8c11f389613c81c4d
+ extras:
+ artifactId: postgresql
+ groupId: org.postgresql
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -349,7 +356,10 @@
version: 3.5.0
type: runtime
indirect: true
- resolvedIdentifier: 2f50520c8abea66fbd8d26e481d3aef5c673b510
+ extras:
+ artifactId: checker-qual
+ groupId: org.checkerframework
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -357,7 +367,10 @@
- name: com.oracle.database.jdbc.ojdbc8
version: 21.1.0.0
type: compile
- resolvedIdentifier: 50044485aea10afd7defeee8109c5195b4d3cae2
+ extras:
+ artifactId: ojdbc8
+ groupId: com.oracle.database.jdbc
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -365,7 +378,10 @@
- name: ch.qos.logback.logback-classic
version: 1.1.7
type: compile
- resolvedIdentifier: 9865cf6994f9ff13fce0bf93f2054ef6c65bb462
+ extras:
+ artifactId: logback-classic
+ groupId: ch.qos.logback
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -374,7 +390,10 @@
version: 1.1.7
type: compile
indirect: true
- resolvedIdentifier: 7873092d39ef741575ca91378a6a21c388363ac8
+ extras:
+ artifactId: logback-core
+ groupId: ch.qos.logback
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -382,7 +401,10 @@
- name: org.hibernate.validator.hibernate-validator
version: 6.2.0.Final
type: compile
- resolvedIdentifier: d6b0760dfffbf379cedd02f715ff4c9a2e215921
+ extras:
+ artifactId: hibernate-validator
+ groupId: org.hibernate.validator
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -391,7 +413,10 @@
version: 2.0.2
type: compile
indirect: true
- resolvedIdentifier: 5eacc6522521f7eacb081f95cee1e231648461e7
+ extras:
+ artifactId: jakarta.validation-api
+ groupId: jakarta.validation
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -400,7 +425,10 @@
version: 1.5.1
type: compile
indirect: true
- resolvedIdentifier: 3fe0bed568c62df5e89f4f174c101eab25345b6c
+ extras:
+ artifactId: classmate
+ groupId: com.fasterxml
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -409,6 +437,10 @@
version: 5.4.32.Final
type: compile
resolvedIdentifier: 3f60db4097732960ec792c033dbb7c34f1b9e328
+ extras:
+ artifactId: hibernate-entitymanager
+ groupId: org.hibernate
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -418,6 +450,10 @@
type: compile
indirect: true
resolvedIdentifier: 40fd4d696c55793e996d1ff3c475833f836c2498
+ extras:
+ artifactId: jboss-logging
+ groupId: org.jboss.logging
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -426,7 +462,10 @@
version: 5.4.32.Final
type: compile
indirect: true
- resolvedIdentifier: 99a5e10bf455337014c190e141ec631e9ff71663
+ extras:
+ artifactId: hibernate-core
+ groupId: org.hibernate
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -436,6 +475,10 @@
type: compile
indirect: true
resolvedIdentifier: f63e6aa899e15eca8fdaa402a79af4c417252213
+ extras:
+ artifactId: javassist
+ groupId: org.javassist
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -445,6 +488,10 @@
type: compile
indirect: true
resolvedIdentifier: 83cd2cd674a217ade95a4bb83a8a14f351f48bd0
+ extras:
+ artifactId: antlr
+ groupId: antlr
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -454,6 +501,10 @@
type: compile
indirect: true
resolvedIdentifier: d3865101f0666b63586683bd811d754517f331ab
+ extras:
+ artifactId: jandex
+ groupId: org.jboss
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -463,6 +514,10 @@
type: compile
indirect: true
resolvedIdentifier: 85262acf3ca9816f9537ca47d5adeabaead7cb16
+ extras:
+ artifactId: javax.activation-api
+ groupId: javax.activation
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -472,6 +527,10 @@
type: compile
indirect: true
resolvedIdentifier: 8531ad5ac454cc2deb9d4d32c40c4d7451939b5d
+ extras:
+ artifactId: jaxb-api
+ groupId: javax.xml.bind
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -480,7 +539,10 @@
version: 2.3.1
type: compile
indirect: true
- resolvedIdentifier: dd6dda9da676a54c5b36ca2806ff95ee017d8738
+ extras:
+ artifactId: jaxb-runtime
+ groupId: org.glassfish.jaxb
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -490,6 +552,10 @@
type: compile
indirect: true
resolvedIdentifier: a09d2c48d3285f206fafbffe0e50619284e92126
+ extras:
+ artifactId: txw2
+ groupId: org.glassfish.jaxb
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -499,6 +565,10 @@
type: compile
indirect: true
resolvedIdentifier: c197c86ceec7318b1284bffb49b54226ca774003
+ extras:
+ artifactId: istack-commons-runtime
+ groupId: com.sun.istack
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -508,6 +578,10 @@
type: compile
indirect: true
resolvedIdentifier: 8cc35f73da321c29973191f2cf143d29d26a1df7
+ extras:
+ artifactId: stax-ex
+ groupId: org.jvnet.staxex
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -516,7 +590,10 @@
version: 1.2.15
type: compile
indirect: true
- resolvedIdentifier: bb7b7ec0379982b97c62cd17465cb6d9155f68e8
+ extras:
+ artifactId: FastInfoset
+ groupId: com.sun.xml.fastinfoset
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -526,6 +603,10 @@
type: compile
indirect: true
resolvedIdentifier: a75914155a9f5808963170ec20653668a2ffd2fd
+ extras:
+ artifactId: dom4j
+ groupId: org.dom4j
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -535,6 +616,10 @@
type: compile
indirect: true
resolvedIdentifier: e59ffdbc6ad09eeb33507b39ffcf287679a498c8
+ extras:
+ artifactId: hibernate-commons-annotations
+ groupId: org.hibernate.common
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -544,6 +629,10 @@
type: compile
indirect: true
resolvedIdentifier: 25665ac8c0b62f50e6488173233239120fc52c96
+ extras:
+ artifactId: javax.persistence-api
+ groupId: javax.persistence
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -552,7 +641,10 @@
version: 1.10.22
type: compile
indirect: true
- resolvedIdentifier: ef45d7e2cd1c600d279704f492ed5ce2ceb6cdb5
+ extras:
+ artifactId: byte-buddy
+ groupId: net.bytebuddy
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -561,7 +653,10 @@
version: 1.1.1.Final
type: compile
indirect: true
- resolvedIdentifier: a8485cab9484dda36e9a8c319e76b5cc18797b58
+ extras:
+ artifactId: jboss-transaction-api_1.2_spec
+ groupId: org.jboss.spec.javax.transaction
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -570,6 +665,10 @@
version: 9.0.46
type: runtime
resolvedIdentifier: 385cb6cb1f6b26c881cd5c1c6ade5f180712ffdc
+ extras:
+ artifactId: tomcat-jdbc
+ groupId: org.apache.tomcat
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -579,6 +678,10 @@
type: runtime
indirect: true
resolvedIdentifier: 409b519751e104eab51b4347a0d27bf86a4f3bb1
+ extras:
+ artifactId: tomcat-juli
+ groupId: org.apache.tomcat
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -587,6 +690,10 @@
version: 2.5.0
type: compile
resolvedIdentifier: 8fc47befa38bdaa2f2b8f421d8532f03005e2851
+ extras:
+ artifactId: spring-boot-starter-actuator
+ groupId: org.springframework.boot
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -596,6 +703,10 @@
type: compile
indirect: true
resolvedIdentifier: a910887c01efcc7d12f3f89a7604d436f26eeb90
+ extras:
+ artifactId: spring-boot-starter
+ groupId: org.springframework.boot
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -605,6 +716,10 @@
type: compile
indirect: true
resolvedIdentifier: b07513e04ad906ea69ef84293a123cdb83828f06
+ extras:
+ artifactId: spring-boot
+ groupId: org.springframework.boot
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -614,6 +729,10 @@
type: compile
indirect: true
resolvedIdentifier: 64c7bbc941c70895621ed613f38dc66b73ea9341
+ extras:
+ artifactId: spring-boot-autoconfigure
+ groupId: org.springframework.boot
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -623,6 +742,10 @@
type: compile
indirect: true
resolvedIdentifier: 22401482ba1c5a1dcd3d33e47295779211b913d8
+ extras:
+ artifactId: spring-boot-starter-logging
+ groupId: org.springframework.boot
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -632,6 +755,10 @@
type: compile
indirect: true
resolvedIdentifier: ce8a86a3f50a4304749828ce68e7478cafbc8039
+ extras:
+ artifactId: log4j-to-slf4j
+ groupId: org.apache.logging.log4j
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -641,6 +768,10 @@
type: compile
indirect: true
resolvedIdentifier: cd8858fbbde69f46bce8db1152c18a43328aae78
+ extras:
+ artifactId: log4j-api
+ groupId: org.apache.logging.log4j
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -650,6 +781,10 @@
type: compile
indirect: true
resolvedIdentifier: d58bebff8cbf70ff52b59208586095f467656c30
+ extras:
+ artifactId: jul-to-slf4j
+ groupId: org.slf4j
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -659,6 +794,10 @@
type: compile
indirect: true
resolvedIdentifier: 59eb84ee0d616332ff44aba065f3888cf002cd2d
+ extras:
+ artifactId: jakarta.annotation-api
+ groupId: jakarta.annotation
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -668,6 +807,10 @@
type: compile
indirect: true
resolvedIdentifier: 7cae037c3014350c923776548e71c9feb7a69259
+ extras:
+ artifactId: snakeyaml
+ groupId: org.yaml
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -677,6 +820,10 @@
type: compile
indirect: true
resolvedIdentifier: 41956882243e86f8260f649ebdd96597a2ff52a9
+ extras:
+ artifactId: spring-boot-actuator-autoconfigure
+ groupId: org.springframework.boot
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -686,6 +833,10 @@
type: compile
indirect: true
resolvedIdentifier: e0ac75f1a183f8e6a319a8b03bad1c45d40a2761
+ extras:
+ artifactId: spring-boot-actuator
+ groupId: org.springframework.boot
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -695,6 +846,10 @@
type: runtime
indirect: true
resolvedIdentifier: f69c636438dcf19c49960c1fe8901320ab85f989
+ extras:
+ artifactId: jackson-datatype-jsr310
+ groupId: com.fasterxml.jackson.datatype
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -704,6 +859,10 @@
type: compile
indirect: true
resolvedIdentifier: bc7dc1605f2099dc3c39156b7f62ac889f54fb67
+ extras:
+ artifactId: micrometer-core
+ groupId: io.micrometer
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -713,6 +872,10 @@
type: compile
indirect: true
resolvedIdentifier: 6eb7552156e0d517ae80cc2247be1427c8d90452
+ extras:
+ artifactId: HdrHistogram
+ groupId: org.hdrhistogram
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -722,6 +885,10 @@
type: runtime
indirect: true
resolvedIdentifier: 769c0b82cb2421c8256300e907298a9410a2a3d3
+ extras:
+ artifactId: LatencyUtils
+ groupId: org.latencyutils
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -730,6 +897,10 @@
version: 5.3.7
type: compile
resolvedIdentifier: 49e6a8f45e77f14ef16f82c0413254ef493b785f
+ extras:
+ artifactId: spring-web
+ groupId: org.springframework
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -738,6 +909,10 @@
version: 5.3.7
type: compile
resolvedIdentifier: 8437c7a572177a34607abdaef2f6b8088488f5c0
+ extras:
+ artifactId: spring-webmvc
+ groupId: org.springframework
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -747,6 +922,10 @@
type: compile
indirect: true
resolvedIdentifier: 13351fce0a604957cd6a41478ebb54a953a0245e
+ extras:
+ artifactId: spring-expression
+ groupId: org.springframework
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -755,6 +934,10 @@
version: 5.3.7
type: compile
resolvedIdentifier: 5caf72035a9b8a3a09ef82322cd2497aedddc487
+ extras:
+ artifactId: spring-jdbc
+ groupId: org.springframework
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -763,6 +946,10 @@
version: 2.5.1
type: compile
resolvedIdentifier: 881f7ae140f424b3bdb1b0c27a61b93e0bee9fa5
+ extras:
+ artifactId: spring-data-jpa
+ groupId: org.springframework.data
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -772,6 +959,10 @@
type: compile
indirect: true
resolvedIdentifier: c950ca1a05e928e9fb75420b4ac07713428e9969
+ extras:
+ artifactId: spring-data-commons
+ groupId: org.springframework.data
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -781,6 +972,10 @@
type: compile
indirect: true
resolvedIdentifier: f1892fe7a6671348d6546facbd40159b7e6f64a2
+ extras:
+ artifactId: spring-orm
+ groupId: org.springframework
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -790,6 +985,10 @@
type: compile
indirect: true
resolvedIdentifier: 330b3957efdcdebe3550b8e2c5d45a4c25496626
+ extras:
+ artifactId: spring-context
+ groupId: org.springframework
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -799,6 +998,10 @@
type: compile
indirect: true
resolvedIdentifier: b86edd2455f8c4399068c999beb9ea2a9e7f2047
+ extras:
+ artifactId: spring-aop
+ groupId: org.springframework
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -808,6 +1011,10 @@
type: compile
indirect: true
resolvedIdentifier: 98be572c2bf3bd08724363b0bba71bcef59c4739
+ extras:
+ artifactId: spring-tx
+ groupId: org.springframework
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -817,6 +1024,10 @@
type: compile
indirect: true
resolvedIdentifier: 8b1eacd7aaa12f7d173a2f0836d28bd0c1b098fe
+ extras:
+ artifactId: spring-beans
+ groupId: org.springframework
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -826,6 +1037,10 @@
type: compile
indirect: true
resolvedIdentifier: 4aad1b62bd347a806fe693c9d67b376a3ad8151c
+ extras:
+ artifactId: spring-core
+ groupId: org.springframework
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -835,6 +1050,10 @@
type: compile
indirect: true
resolvedIdentifier: ccd8bde38bad689737295fa220e1c70680676d72
+ extras:
+ artifactId: spring-jcl
+ groupId: org.springframework
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -844,6 +1063,10 @@
type: compile
indirect: true
resolvedIdentifier: 1651849d48659e5703adc2599e694bf67b8c3fc4
+ extras:
+ artifactId: aspectjrt
+ groupId: org.aspectj
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -853,6 +1076,10 @@
type: compile
indirect: true
resolvedIdentifier: 77100a62c2e6f04b53977b9f541044d7d722693d
+ extras:
+ artifactId: slf4j-api
+ groupId: org.slf4j
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -861,6 +1088,10 @@
version: 2.12.3
type: compile
resolvedIdentifier: d6153f8fc60c479ab0f9efb35c034526436a4953
+ extras:
+ artifactId: jackson-databind
+ groupId: com.fasterxml.jackson.core
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -870,6 +1101,10 @@
type: compile
indirect: true
resolvedIdentifier: 7275513412694a1aafd08c0287f48469fa0e6e17
+ extras:
+ artifactId: jackson-annotations
+ groupId: com.fasterxml.jackson.core
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -878,6 +1113,10 @@
version: 2.12.3
type: compile
resolvedIdentifier: deb23fe2a7f2b773e18ced2b50d4acc1df8fa366
+ extras:
+ artifactId: jackson-core
+ groupId: com.fasterxml.jackson.core
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -886,6 +1125,10 @@
version: 9.0.46
type: provided
resolvedIdentifier: 8e8a27a3456b71b1da2c8adc902ade71bc91fcb4
+ extras:
+ artifactId: tomcat-servlet-api
+ groupId: org.apache.tomcat
+ pomPath: /analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -897,6 +1140,10 @@
version: 2.13.3
type: compile
resolvedIdentifier: a27014716e4421684416e5fa83d896ddb87002da
+ extras:
+ artifactId: jackson-core
+ groupId: com.fasterxml.jackson.core
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -905,6 +1152,10 @@
version: 2.13.3
type: compile
resolvedIdentifier: 56deb9ea2c93a7a556b3afbedd616d342963464e
+ extras:
+ artifactId: jackson-databind
+ groupId: com.fasterxml.jackson.core
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -913,6 +1164,10 @@
version: 2.13.3
type: compile
resolvedIdentifier: ad2f4c61aeb9e2a8bb5e4a3ed782cfddec52d972
+ extras:
+ artifactId: jackson-datatype-jsr310
+ groupId: com.fasterxml.jackson.datatype
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -921,6 +1176,10 @@
version: 2.13.3
type: compile
resolvedIdentifier: 9363ded5441b1fee62d5be0604035690ca759a2a
+ extras:
+ artifactId: jackson-dataformat-yaml
+ groupId: com.fasterxml.jackson.dataformat
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -930,6 +1189,10 @@
type: compile
indirect: true
resolvedIdentifier: 8fde7fe2586328ac3c68db92045e1c8759125000
+ extras:
+ artifactId: snakeyaml
+ groupId: org.yaml
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -938,6 +1201,10 @@
version: 1.7.36
type: compile
resolvedIdentifier: 6c62681a2f655b49963a5983b8b0950a6120ae14
+ extras:
+ artifactId: slf4j-api
+ groupId: org.slf4j
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -946,6 +1213,10 @@
version: 6.0.0
type: compile
resolvedIdentifier: 972706f6dffa518e11c94647cf47e188db6115f6
+ extras:
+ artifactId: kubernetes-model-node
+ groupId: io.fabric8
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -954,6 +1225,10 @@
version: 6.0.0
type: compile
resolvedIdentifier: 6ffa61f9021d07a4a9d785e83a513955a3c48073
+ extras:
+ artifactId: kubernetes-model-storageclass
+ groupId: io.fabric8
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -962,6 +1237,10 @@
version: 6.0.0
type: compile
resolvedIdentifier: a5fae7294f5c39fb9d7cffb7280b55ca458c9128
+ extras:
+ artifactId: kubernetes-model-scheduling
+ groupId: io.fabric8
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -970,6 +1249,10 @@
version: 6.0.0
type: compile
resolvedIdentifier: 15b3011eb5ff48b9fc2bd8bcc4db697ca9ec30e4
+ extras:
+ artifactId: kubernetes-model-policy
+ groupId: io.fabric8
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -978,6 +1261,10 @@
version: 6.0.0
type: compile
resolvedIdentifier: 1a400f8f7915bd2a68fa075605768d762aaad4cb
+ extras:
+ artifactId: kubernetes-model-metrics
+ groupId: io.fabric8
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -986,6 +1273,10 @@
version: 6.0.0
type: compile
resolvedIdentifier: c87e11bebb26bb48660765b42a68f9577336b799
+ extras:
+ artifactId: kubernetes-model-networking
+ groupId: io.fabric8
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -994,6 +1285,10 @@
version: 6.0.0
type: compile
resolvedIdentifier: 3b01d9eab7e7d7c9d46d8828202bff78fbdaa7d9
+ extras:
+ artifactId: kubernetes-model-flowcontrol
+ groupId: io.fabric8
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -1002,6 +1297,10 @@
version: 6.0.0
type: compile
resolvedIdentifier: 60c9e43f1f34ab9c145798471926c07e13e45ecf
+ extras:
+ artifactId: kubernetes-model-extensions
+ groupId: io.fabric8
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -1010,6 +1309,10 @@
version: 6.0.0
type: compile
resolvedIdentifier: 204c2c78a4a8e0b5f5ebc1b788c9f22a8c1b14ab
+ extras:
+ artifactId: kubernetes-model-events
+ groupId: io.fabric8
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -1018,6 +1321,10 @@
version: 6.0.0
type: compile
resolvedIdentifier: 246ad448a1868b3c601394e21350a9602adef24c
+ extras:
+ artifactId: kubernetes-model-discovery
+ groupId: io.fabric8
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -1026,6 +1333,10 @@
version: 6.0.0
type: compile
resolvedIdentifier: cd454532158351d8ff37616dc33749ca2a85c8d1
+ extras:
+ artifactId: kubernetes-model-coordination
+ groupId: io.fabric8
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -1034,6 +1345,10 @@
version: 6.0.0
type: compile
resolvedIdentifier: 33f5a3f386cddda55003e1616303ab924fcd3ca5
+ extras:
+ artifactId: kubernetes-model-certificates
+ groupId: io.fabric8
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -1042,6 +1357,10 @@
version: 6.0.0
type: compile
resolvedIdentifier: 9f14cbfc75d172fa81f3f6ad793bdd45a2decaec
+ extras:
+ artifactId: kubernetes-model-batch
+ groupId: io.fabric8
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -1050,6 +1369,10 @@
version: 6.0.0
type: compile
resolvedIdentifier: eac63b8dec80e96c4356c91ed0a332415efcb75e
+ extras:
+ artifactId: kubernetes-model-apiextensions
+ groupId: io.fabric8
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -1058,6 +1381,10 @@
version: 6.0.0
type: compile
resolvedIdentifier: b353e45133fbc80791d676b16203ec94c0958b7d
+ extras:
+ artifactId: kubernetes-model-autoscaling
+ groupId: io.fabric8
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -1066,6 +1393,10 @@
version: 6.0.0
type: compile
resolvedIdentifier: 4dbda6401058a5fd3a4c6be88fc1bf4f99296c4f
+ extras:
+ artifactId: kubernetes-model-apps
+ groupId: io.fabric8
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -1074,6 +1405,10 @@
version: 6.0.0
type: compile
resolvedIdentifier: 9e3b0d4caa3d033fa0f71c71d8a535a748b280ba
+ extras:
+ artifactId: kubernetes-model-admissionregistration
+ groupId: io.fabric8
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -1082,6 +1417,10 @@
version: 6.0.0
type: compile
resolvedIdentifier: 03ad461761d775ff9c252d2b26a4977d22dd0f3a
+ extras:
+ artifactId: kubernetes-model-rbac
+ groupId: io.fabric8
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -1090,6 +1429,10 @@
version: 6.0.0
type: compile
resolvedIdentifier: 73469e4a7baec7600455d7f4a121c6680e80bf35
+ extras:
+ artifactId: kubernetes-model-core
+ groupId: io.fabric8
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -1099,6 +1442,10 @@
type: compile
indirect: true
resolvedIdentifier: 7d45968cf6b9902e37d5d542f42ee2daed203e3d
+ extras:
+ artifactId: kubernetes-model-common
+ groupId: io.fabric8
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -1108,6 +1455,10 @@
type: compile
indirect: true
resolvedIdentifier: 7198b3aac15285a49e218e08441c5f70af00fc51
+ extras:
+ artifactId: jackson-annotations
+ groupId: com.fasterxml.jackson.core
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -1116,6 +1467,10 @@
version: 6.0.0
type: compile
resolvedIdentifier: 3f54cdb10f54b413fe4b8a0d4d044d33174bd271
+ extras:
+ artifactId: kubernetes-client-api
+ groupId: io.fabric8
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -1124,6 +1479,10 @@
version: 6.0.0
type: compile
resolvedIdentifier: d0831d44e12313df8989fc1d4a9c90452f08858e
+ extras:
+ artifactId: kubernetes-client
+ groupId: io.fabric8
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -1133,6 +1492,10 @@
type: runtime
indirect: true
resolvedIdentifier: 70690b98acb07a809c55d15d7cf45f53ec1026e1
+ extras:
+ artifactId: kubernetes-httpclient-okhttp
+ groupId: io.fabric8
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -1142,6 +1505,10 @@
type: runtime
indirect: true
resolvedIdentifier: d3e1ce1d2b3119adf270b2d00d947beb03fe3321
+ extras:
+ artifactId: okhttp
+ groupId: com.squareup.okhttp3
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -1151,6 +1518,10 @@
type: runtime
indirect: true
resolvedIdentifier: bc28b5a964c8f5721eb58ee3f3c47a9bcbf4f4d8
+ extras:
+ artifactId: okio
+ groupId: com.squareup.okio
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -1160,6 +1531,10 @@
type: runtime
indirect: true
resolvedIdentifier: d952189f6abb148ff72aab246aa8c28cf99b469f
+ extras:
+ artifactId: logging-interceptor
+ groupId: com.squareup.okhttp3
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -1169,6 +1544,10 @@
type: compile
indirect: true
resolvedIdentifier: d3ebf0f291297649b4c8dc3ecc81d2eddedc100d
+ extras:
+ artifactId: zjsonpatch
+ groupId: io.fabric8
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -1177,6 +1556,10 @@
version: "4.11"
type: test
resolvedIdentifier: 4e031bb61df09069aeb2bffb4019e7a5034a4ee0
+ extras:
+ artifactId: junit
+ groupId: junit
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
@@ -1186,6 +1569,10 @@
type: test
indirect: true
resolvedIdentifier: 42a25dc3219429f0e5d060061f71acb49bf010a0
+ extras:
+ artifactId: hamcrest-core
+ groupId: org.hamcrest
+ pomPath: /analyzer-lsp/examples/java/pom.xml
labels:
- konveyor.io/dep-source=open-source
- konveyor.io/language=java
diff --git a/demo-output.yaml b/demo-output.yaml
index 7d557225..147f1e0a 100644
--- a/demo-output.yaml
+++ b/demo-output.yaml
@@ -12,120 +12,160 @@
incidents:
- uri: file:///analyzer-lsp/examples/java/pom.xml
message: junitjunit4.11test
+ codeSnip: "14 \n15 \n16 UTF-8\n17 1.7\n18 1.7\n19 \n20 \n21 \n22 \n23 junit\n24 junit\n25 4.11\n26 test\n27 \n28 \n29 io.fabric8\n30 kubernetes-client\n31 6.0.0\n32 \n33 \n34 io.fabric8"
+ lineNumber: 23
variables:
data: dependency
innerText: "\n junit\n junit\n 4.11\n test\n "
matchingXML: junitjunit4.11test
- uri: file:///analyzer-lsp/examples/java/pom.xml
message: io.fabric8kubernetes-client6.0.0
+ codeSnip: "20 \n21 \n22 \n23 junit\n24 junit\n25 4.11\n26 test\n27 \n28 \n29 io.fabric8\n30 kubernetes-client\n31 6.0.0\n32 \n33 \n34 io.fabric8\n35 kubernetes-client-api\n36 6.0.0\n37 \n38 \n39 \n40 "
+ lineNumber: 29
variables:
data: dependency
innerText: "\n io.fabric8\n kubernetes-client\n 6.0.0\n "
matchingXML: io.fabric8kubernetes-client6.0.0
- uri: file:///analyzer-lsp/examples/java/pom.xml
message: io.fabric8kubernetes-client-api6.0.0
+ codeSnip: "25 4.11\n26 test\n27 \n28 \n29 io.fabric8\n30 kubernetes-client\n31 6.0.0\n32 \n33 \n34 io.fabric8\n35 kubernetes-client-api\n36 6.0.0\n37 \n38 \n39 \n40 \n41 \n42 \n43 \n44 \n45 maven-clean-plugin"
+ lineNumber: 34
variables:
data: dependency
innerText: "\n io.fabric8\n kubernetes-client-api\n 6.0.0\n "
matchingXML: io.fabric8kubernetes-client-api6.0.0
- uri: file:///analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
message: com.fasterxml.jacksonjackson-bom${jackson.version}importpom
+ codeSnip: "36 \t\t\tdemo-config\n37 \t\t\tAzure DevOps\n38 \t\t\thttps://pkgs.dev.azure.com/ShawnHurley21/demo-config-utils/_packaging/demo-config/maven/v1\n39 \t\t\n40 \t\n41 \n42 \t\n43 \t\t\n44 \t\t\t\n45 \t\t\t\tcom.fasterxml.jackson\n46 \t\t\t\tjackson-bom\n47 \t\t\t\t${jackson.version}\n48 \t\t\t\timport\n49 \t\t\t\tpom\n50 \t\t\t\n51 \t\t\t\n52 \t\t\t\torg.springframework.data\n53 \t\t\t\tspring-data-bom\n54 \t\t\t\t${spring-data.version}\n55 \t\t\t\timport\n56 \t\t\t\tpom"
+ lineNumber: 45
variables:
data: dependency
innerText: "\n\t\t\t\tcom.fasterxml.jackson\n\t\t\t\tjackson-bom\n\t\t\t\t${jackson.version}\n\t\t\t\timport\n\t\t\t\tpom\n\t\t\t"
matchingXML: com.fasterxml.jacksonjackson-bom${jackson.version}importpom
- uri: file:///analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
message: org.springframework.dataspring-data-bom${spring-data.version}importpom
+ codeSnip: "43 \t\t\n44 \t\t\t\n45 \t\t\t\tcom.fasterxml.jackson\n46 \t\t\t\tjackson-bom\n47 \t\t\t\t${jackson.version}\n48 \t\t\t\timport\n49 \t\t\t\tpom\n50 \t\t\t\n51 \t\t\t\n52 \t\t\t\torg.springframework.data\n53 \t\t\t\tspring-data-bom\n54 \t\t\t\t${spring-data.version}\n55 \t\t\t\timport\n56 \t\t\t\tpom\n57 \t\t\t\n58 \t\t\n59 \t\n60 \t\n61 \t\t\n62 \t\t\torg.apache.tomcat\n63 \t\t\ttomcat-servlet-api"
+ lineNumber: 52
variables:
data: dependency
innerText: "\n\t\t\t\torg.springframework.data\n\t\t\t\tspring-data-bom\n\t\t\t\t${spring-data.version}\n\t\t\t\timport\n\t\t\t\tpom\n\t\t\t"
matchingXML: org.springframework.dataspring-data-bom${spring-data.version}importpom
- uri: file:///analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
message: org.apache.tomcattomcat-servlet-api${tomcat.version}provided
+ codeSnip: "53 \t\t\t\tspring-data-bom\n54 \t\t\t\t${spring-data.version}\n55 \t\t\t\timport\n56 \t\t\t\tpom\n57 \t\t\t\n58 \t\t\n59 \t\n60 \t\n61 \t\t\n62 \t\t\torg.apache.tomcat\n63 \t\t\ttomcat-servlet-api\n64 \t\t\t${tomcat.version}\n65 \t\t\tprovided\n66 \t\t\n67 \t\t\n68 \t\t\tcom.fasterxml.jackson.core\n69 \t\t\tjackson-core\n70 \t\t\n71 \t\t\n72 \t\t\tcom.fasterxml.jackson.core\n73 \t\t\tjackson-databind"
+ lineNumber: 62
variables:
data: dependency
innerText: "\n\t\t\torg.apache.tomcat\n\t\t\ttomcat-servlet-api\n\t\t\t${tomcat.version}\n\t\t\tprovided\n\t\t"
matchingXML: org.apache.tomcattomcat-servlet-api${tomcat.version}provided
- uri: file:///analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
message: com.fasterxml.jackson.corejackson-core
+ codeSnip: "59 \t\n60 \t\n61 \t\t\n62 \t\t\torg.apache.tomcat\n63 \t\t\ttomcat-servlet-api\n64 \t\t\t${tomcat.version}\n65 \t\t\tprovided\n66 \t\t\n67 \t\t\n68 \t\t\tcom.fasterxml.jackson.core\n69 \t\t\tjackson-core\n70 \t\t\n71 \t\t\n72 \t\t\tcom.fasterxml.jackson.core\n73 \t\t\tjackson-databind\n74 \t\t\n75 \t\t\n76 \t\t\torg.springframework.data\n77 \t\t\tspring-data-jpa\n78 \t\t\n79 "
+ lineNumber: 68
variables:
data: dependency
innerText: "\n\t\t\tcom.fasterxml.jackson.core\n\t\t\tjackson-core\n\t\t"
matchingXML: com.fasterxml.jackson.corejackson-core
- uri: file:///analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
message: com.fasterxml.jackson.corejackson-databind
+ codeSnip: "63 \t\t\ttomcat-servlet-api\n64 \t\t\t${tomcat.version}\n65 \t\t\tprovided\n66 \t\t\n67 \t\t\n68 \t\t\tcom.fasterxml.jackson.core\n69 \t\t\tjackson-core\n70 \t\t\n71 \t\t\n72 \t\t\tcom.fasterxml.jackson.core\n73 \t\t\tjackson-databind\n74 \t\t\n75 \t\t\n76 \t\t\torg.springframework.data\n77 \t\t\tspring-data-jpa\n78 \t\t\n79 \n80 \t\t\n81 \t\t\torg.springframework\n82 \t\t\tspring-jdbc\n83 \t\t\t${spring-framework.version}"
+ lineNumber: 72
variables:
data: dependency
innerText: "\n\t\t\tcom.fasterxml.jackson.core\n\t\t\tjackson-databind\n\t\t"
matchingXML: com.fasterxml.jackson.corejackson-databind
- uri: file:///analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
message: org.springframework.dataspring-data-jpa
+ codeSnip: "67 \t\t\n68 \t\t\tcom.fasterxml.jackson.core\n69 \t\t\tjackson-core\n70 \t\t\n71 \t\t\n72 \t\t\tcom.fasterxml.jackson.core\n73 \t\t\tjackson-databind\n74 \t\t\n75 \t\t\n76 \t\t\torg.springframework.data\n77 \t\t\tspring-data-jpa\n78 \t\t\n79 \n80 \t\t\n81 \t\t\torg.springframework\n82 \t\t\tspring-jdbc\n83 \t\t\t${spring-framework.version}\n84 \t\t\n85 \t\t\n86 \t\t\torg.springframework\n87 \t\t\tspring-webmvc"
+ lineNumber: 76
variables:
data: dependency
innerText: "\n\t\t\torg.springframework.data\n\t\t\tspring-data-jpa\n\t\t"
matchingXML: org.springframework.dataspring-data-jpa
- uri: file:///analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
message: org.springframeworkspring-jdbc${spring-framework.version}
+ codeSnip: "72 \t\t\tcom.fasterxml.jackson.core\n73 \t\t\tjackson-databind\n74 \t\t\n75 \t\t\n76 \t\t\torg.springframework.data\n77 \t\t\tspring-data-jpa\n78 \t\t\n79 \n80 \t\t\n81 \t\t\torg.springframework\n82 \t\t\tspring-jdbc\n83 \t\t\t${spring-framework.version}\n84 \t\t\n85 \t\t\n86 \t\t\torg.springframework\n87 \t\t\tspring-webmvc\n88 \t\t\t${spring-framework.version}\n89 \t\t\n90 \t\t\n91 \t\t\torg.springframework\n92 \t\t\tspring-web"
+ lineNumber: 81
variables:
data: dependency
innerText: "\n\t\t\torg.springframework\n\t\t\tspring-jdbc\n\t\t\t${spring-framework.version}\n\t\t"
matchingXML: org.springframeworkspring-jdbc${spring-framework.version}
- uri: file:///analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
message: org.springframeworkspring-webmvc${spring-framework.version}
+ codeSnip: "77 \t\t\tspring-data-jpa\n78 \t\t\n79 \n80 \t\t\n81 \t\t\torg.springframework\n82 \t\t\tspring-jdbc\n83 \t\t\t${spring-framework.version}\n84 \t\t\n85 \t\t\n86 \t\t\torg.springframework\n87 \t\t\tspring-webmvc\n88 \t\t\t${spring-framework.version}\n89 \t\t\n90 \t\t\n91 \t\t\torg.springframework\n92 \t\t\tspring-web\n93 \t\t\t${spring-framework.version}\n94 \t\t\n95 \t\t\n96 \t\t\torg.springframework.boot\n97 \t\t\tspring-boot-starter-actuator"
+ lineNumber: 86
variables:
data: dependency
innerText: "\n\t\t\torg.springframework\n\t\t\tspring-webmvc\n\t\t\t${spring-framework.version}\n\t\t"
matchingXML: org.springframeworkspring-webmvc${spring-framework.version}
- uri: file:///analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
message: org.springframeworkspring-web${spring-framework.version}
+ codeSnip: "77 \t\t\tspring-data-jpa\n78 \t\t\n79 \n80 \t\t\n81 \t\t\torg.springframework\n82 \t\t\tspring-jdbc\n83 \t\t\t${spring-framework.version}\n84 \t\t\n85 \t\t\n86 \t\t\torg.springframework\n87 \t\t\tspring-webmvc\n88 \t\t\t${spring-framework.version}\n89 \t\t\n90 \t\t\n91 \t\t\torg.springframework\n92 \t\t\tspring-web\n93 \t\t\t${spring-framework.version}\n94 \t\t\n95 \t\t\n96 \t\t\torg.springframework.boot\n97 \t\t\tspring-boot-starter-actuator"
+ lineNumber: 86
variables:
data: dependency
innerText: "\n\t\t\torg.springframework\n\t\t\tspring-web\n\t\t\t${spring-framework.version}\n\t\t"
matchingXML: org.springframeworkspring-web${spring-framework.version}
- uri: file:///analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
message: org.springframework.bootspring-boot-starter-actuator2.5.0
+ codeSnip: " 87 \t\t\tspring-webmvc\n 88 \t\t\t${spring-framework.version}\n 89 \t\t\n 90 \t\t\n 91 \t\t\torg.springframework\n 92 \t\t\tspring-web\n 93 \t\t\t${spring-framework.version}\n 94 \t\t\n 95 \t\t\n 96 \t\t\torg.springframework.boot\n 97 \t\t\tspring-boot-starter-actuator\n 98 \t\t\t2.5.0\n 99 \t\t\n100 \t\t\n101 \t\t\torg.apache.tomcat\n102 \t\t\ttomcat-jdbc\n103 \t\t\t${tomcat.version}\n104 \t\t\truntime\n105 \t\t\n106 \t\t\n107 \t\t\torg.hibernate"
+ lineNumber: 96
variables:
data: dependency
innerText: "\n\t\t\torg.springframework.boot\n\t\t\tspring-boot-starter-actuator\n\t\t\t2.5.0\n\t\t"
matchingXML: org.springframework.bootspring-boot-starter-actuator2.5.0
- uri: file:///analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
message: org.apache.tomcattomcat-jdbc${tomcat.version}runtime
+ codeSnip: " 92 \t\t\tspring-web\n 93 \t\t\t${spring-framework.version}\n 94 \t\t\n 95 \t\t\n 96 \t\t\torg.springframework.boot\n 97 \t\t\tspring-boot-starter-actuator\n 98 \t\t\t2.5.0\n 99 \t\t\n100 \t\t\n101 \t\t\torg.apache.tomcat\n102 \t\t\ttomcat-jdbc\n103 \t\t\t${tomcat.version}\n104 \t\t\truntime\n105 \t\t\n106 \t\t\n107 \t\t\torg.hibernate\n108 \t\t\thibernate-entitymanager\n109 \t\t\t${hibernate.version}\n110 \t\t\n111 \t\t\n112 \t\t\torg.hibernate.validator"
+ lineNumber: 101
variables:
data: dependency
innerText: "\n\t\t\torg.apache.tomcat\n\t\t\ttomcat-jdbc\n\t\t\t${tomcat.version}\n\t\t\truntime\n\t\t"
matchingXML: org.apache.tomcattomcat-jdbc${tomcat.version}runtime
- uri: file:///analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
message: org.hibernatehibernate-entitymanager${hibernate.version}
+ codeSnip: " 98 \t\t\t2.5.0\n 99 \t\t\n100 \t\t\n101 \t\t\torg.apache.tomcat\n102 \t\t\ttomcat-jdbc\n103 \t\t\t${tomcat.version}\n104 \t\t\truntime\n105 \t\t\n106 \t\t\n107 \t\t\torg.hibernate\n108 \t\t\thibernate-entitymanager\n109 \t\t\t${hibernate.version}\n110 \t\t\n111 \t\t\n112 \t\t\torg.hibernate.validator\n113 \t\t\thibernate-validator\n114 \t\t\t${hibernate-validator.version}\n115 \t\t\n116 \t\t\n117 \t\t\tch.qos.logback\n118 \t\t\tlogback-classic"
+ lineNumber: 107
variables:
data: dependency
innerText: "\n\t\t\torg.hibernate\n\t\t\thibernate-entitymanager\n\t\t\t${hibernate.version}\n\t\t"
matchingXML: org.hibernatehibernate-entitymanager${hibernate.version}
- uri: file:///analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
message: org.hibernate.validatorhibernate-validator${hibernate-validator.version}
+ codeSnip: "103 \t\t\t${tomcat.version}\n104 \t\t\truntime\n105 \t\t\n106 \t\t\n107 \t\t\torg.hibernate\n108 \t\t\thibernate-entitymanager\n109 \t\t\t${hibernate.version}\n110 \t\t\n111 \t\t\n112 \t\t\torg.hibernate.validator\n113 \t\t\thibernate-validator\n114 \t\t\t${hibernate-validator.version}\n115 \t\t\n116 \t\t\n117 \t\t\tch.qos.logback\n118 \t\t\tlogback-classic\n119 \t\t\t1.1.7\n120 \t\t\n121 \t\t\n122 \t\t\tcom.oracle.database.jdbc\n123 \t\t\tojdbc8"
+ lineNumber: 112
variables:
data: dependency
innerText: "\n\t\t\torg.hibernate.validator\n\t\t\thibernate-validator\n\t\t\t${hibernate-validator.version}\n\t\t"
matchingXML: org.hibernate.validatorhibernate-validator${hibernate-validator.version}
- uri: file:///analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
message: ch.qos.logbacklogback-classic1.1.7
+ codeSnip: "108 \t\t\thibernate-entitymanager\n109 \t\t\t${hibernate.version}\n110 \t\t\n111 \t\t\n112 \t\t\torg.hibernate.validator\n113 \t\t\thibernate-validator\n114 \t\t\t${hibernate-validator.version}\n115 \t\t\n116 \t\t\n117 \t\t\tch.qos.logback\n118 \t\t\tlogback-classic\n119 \t\t\t1.1.7\n120 \t\t\n121 \t\t\n122 \t\t\tcom.oracle.database.jdbc\n123 \t\t\tojdbc8\n124 \t\t\t21.1.0.0\n125 \t\t\n126 \t\t\n127 \t\t\torg.postgresql\n128 \t\t\tpostgresql"
+ lineNumber: 117
variables:
data: dependency
innerText: "\n\t\t\tch.qos.logback\n\t\t\tlogback-classic\n\t\t\t1.1.7\n\t\t"
matchingXML: ch.qos.logbacklogback-classic1.1.7
- uri: file:///analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
message: com.oracle.database.jdbcojdbc821.1.0.0
+ codeSnip: "113 \t\t\thibernate-validator\n114 \t\t\t${hibernate-validator.version}\n115 \t\t\n116 \t\t\n117 \t\t\tch.qos.logback\n118 \t\t\tlogback-classic\n119 \t\t\t1.1.7\n120 \t\t\n121 \t\t\n122 \t\t\tcom.oracle.database.jdbc\n123 \t\t\tojdbc8\n124 \t\t\t21.1.0.0\n125 \t\t\n126 \t\t\n127 \t\t\torg.postgresql\n128 \t\t\tpostgresql\n129 \t\t\t42.2.23\n130 \t\t\n131 \t\t\n132 \t\t\n133 \t\t\tio.konveyor.demo"
+ lineNumber: 122
variables:
data: dependency
innerText: "\n\t\t\tcom.oracle.database.jdbc\n\t\t\tojdbc8\n\t\t\t21.1.0.0\n\t\t"
matchingXML: com.oracle.database.jdbcojdbc821.1.0.0
- uri: file:///analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
message: org.postgresqlpostgresql42.2.23
+ codeSnip: "118 \t\t\tlogback-classic\n119 \t\t\t1.1.7\n120 \t\t\n121 \t\t\n122 \t\t\tcom.oracle.database.jdbc\n123 \t\t\tojdbc8\n124 \t\t\t21.1.0.0\n125 \t\t\n126 \t\t\n127 \t\t\torg.postgresql\n128 \t\t\tpostgresql\n129 \t\t\t42.2.23\n130 \t\t\n131 \t\t\n132 \t\t\n133 \t\t\tio.konveyor.demo\n134 \t\t\tconfig-utils\n135 \t\t\t1.0.0\n136 \t\t\n137 \n138 \t"
+ lineNumber: 127
variables:
data: dependency
innerText: "\n\t\t\torg.postgresql\n\t\t\tpostgresql\n\t\t\t42.2.23\n\t\t"
matchingXML: org.postgresqlpostgresql42.2.23
- uri: file:///analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
message: io.konveyor.democonfig-utils1.0.0
+ codeSnip: "124 \t\t\t21.1.0.0\n125 \t\t\n126 \t\t\n127 \t\t\torg.postgresql\n128 \t\t\tpostgresql\n129 \t\t\t42.2.23\n130 \t\t\n131 \t\t\n132 \t\t\n133 \t\t\tio.konveyor.demo\n134 \t\t\tconfig-utils\n135 \t\t\t1.0.0\n136 \t\t\n137 \n138 \t\n139 \t\n140 \t\t\n141 \t\t\t\n142 \t\t\t\torg.apache.maven.plugins\n143 \t\t\t\tmaven-compiler-plugin\n144 \t\t\t\t${maven-compiler-plugin.version}"
+ lineNumber: 133
variables:
data: dependency
innerText: "\n\t\t\tio.konveyor.demo\n\t\t\tconfig-utils\n\t\t\t1.0.0\n\t\t"
@@ -189,11 +229,15 @@
incidents:
- uri: file:///analyzer-lsp/examples/java/pom.xml
message: dependency junit.junit with 4.11 is bad and you should feel bad for using it
+ codeSnip: "14 \n15 \n16 UTF-8\n17 1.7\n18 1.7\n19 \n20 \n21 \n22 \n23 junit\n24 junit\n25 4.11\n26 test\n27 \n28 \n29 io.fabric8\n30 kubernetes-client\n31 6.0.0\n32 \n33 \n34 io.fabric8"
+ lineNumber: 23
variables:
name: junit.junit
version: "4.11"
- uri: file:///analyzer-lsp/examples/java/pom.xml
message: dependency io.fabric8.kubernetes-client with 6.0.0 is bad and you should feel bad for using it
+ codeSnip: "20 \n21 \n22 \n23 junit\n24 junit\n25 4.11\n26 test\n27 \n28 \n29 io.fabric8\n30 kubernetes-client\n31 6.0.0\n32 \n33 \n34 io.fabric8\n35 kubernetes-client-api\n36 6.0.0\n37 \n38 \n39 \n40 "
+ lineNumber: 29
variables:
name: io.fabric8.kubernetes-client
version: 6.0.0
@@ -362,120 +406,160 @@
incidents:
- uri: file:///analyzer-lsp/examples/java/pom.xml
message: POM XML dependencies - 'junitjunit4.11test'
+ codeSnip: "14 \n15 \n16 UTF-8\n17 1.7\n18 1.7\n19 \n20 \n21 \n22 \n23 junit\n24 junit\n25 4.11\n26 test\n27 \n28 \n29 io.fabric8\n30 kubernetes-client\n31 6.0.0\n32 \n33 \n34 io.fabric8"
+ lineNumber: 23
variables:
data: dependency
innerText: "\n junit\n junit\n 4.11\n test\n "
matchingXML: junitjunit4.11test
- uri: file:///analyzer-lsp/examples/java/pom.xml
message: POM XML dependencies - 'io.fabric8kubernetes-client6.0.0'
+ codeSnip: "20 \n21 \n22 \n23 junit\n24 junit\n25 4.11\n26 test\n27 \n28 \n29 io.fabric8\n30 kubernetes-client\n31 6.0.0\n32 \n33 \n34 io.fabric8\n35 kubernetes-client-api\n36 6.0.0\n37 \n38 \n39 \n40 "
+ lineNumber: 29
variables:
data: dependency
innerText: "\n io.fabric8\n kubernetes-client\n 6.0.0\n "
matchingXML: io.fabric8kubernetes-client6.0.0
- uri: file:///analyzer-lsp/examples/java/pom.xml
message: POM XML dependencies - 'io.fabric8kubernetes-client-api6.0.0'
+ codeSnip: "25 4.11\n26 test\n27 \n28 \n29 io.fabric8\n30 kubernetes-client\n31 6.0.0\n32 \n33 \n34 io.fabric8\n35 kubernetes-client-api\n36 6.0.0\n37 \n38 \n39 \n40 \n41 \n42 \n43 \n44 \n45 maven-clean-plugin"
+ lineNumber: 34
variables:
data: dependency
innerText: "\n io.fabric8\n kubernetes-client-api\n 6.0.0\n "
matchingXML: io.fabric8kubernetes-client-api6.0.0
- uri: file:///analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
message: POM XML dependencies - 'com.fasterxml.jacksonjackson-bom${jackson.version}importpom'
+ codeSnip: "36 \t\t\tdemo-config\n37 \t\t\tAzure DevOps\n38 \t\t\thttps://pkgs.dev.azure.com/ShawnHurley21/demo-config-utils/_packaging/demo-config/maven/v1\n39 \t\t\n40 \t\n41 \n42 \t\n43 \t\t\n44 \t\t\t\n45 \t\t\t\tcom.fasterxml.jackson\n46 \t\t\t\tjackson-bom\n47 \t\t\t\t${jackson.version}\n48 \t\t\t\timport\n49 \t\t\t\tpom\n50 \t\t\t\n51 \t\t\t\n52 \t\t\t\torg.springframework.data\n53 \t\t\t\tspring-data-bom\n54 \t\t\t\t${spring-data.version}\n55 \t\t\t\timport\n56 \t\t\t\tpom"
+ lineNumber: 45
variables:
data: dependency
innerText: "\n\t\t\t\tcom.fasterxml.jackson\n\t\t\t\tjackson-bom\n\t\t\t\t${jackson.version}\n\t\t\t\timport\n\t\t\t\tpom\n\t\t\t"
matchingXML: com.fasterxml.jacksonjackson-bom${jackson.version}importpom
- uri: file:///analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
message: POM XML dependencies - 'org.springframework.dataspring-data-bom${spring-data.version}importpom'
+ codeSnip: "43 \t\t\n44 \t\t\t\n45 \t\t\t\tcom.fasterxml.jackson\n46 \t\t\t\tjackson-bom\n47 \t\t\t\t${jackson.version}\n48 \t\t\t\timport\n49 \t\t\t\tpom\n50 \t\t\t\n51 \t\t\t\n52 \t\t\t\torg.springframework.data\n53 \t\t\t\tspring-data-bom\n54 \t\t\t\t${spring-data.version}\n55 \t\t\t\timport\n56 \t\t\t\tpom\n57 \t\t\t\n58 \t\t\n59 \t\n60 \t\n61 \t\t\n62 \t\t\torg.apache.tomcat\n63 \t\t\ttomcat-servlet-api"
+ lineNumber: 52
variables:
data: dependency
innerText: "\n\t\t\t\torg.springframework.data\n\t\t\t\tspring-data-bom\n\t\t\t\t${spring-data.version}\n\t\t\t\timport\n\t\t\t\tpom\n\t\t\t"
matchingXML: org.springframework.dataspring-data-bom${spring-data.version}importpom
- uri: file:///analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
message: POM XML dependencies - 'org.apache.tomcattomcat-servlet-api${tomcat.version}provided'
+ codeSnip: "53 \t\t\t\tspring-data-bom\n54 \t\t\t\t${spring-data.version}\n55 \t\t\t\timport\n56 \t\t\t\tpom\n57 \t\t\t\n58 \t\t\n59 \t\n60 \t\n61 \t\t\n62 \t\t\torg.apache.tomcat\n63 \t\t\ttomcat-servlet-api\n64 \t\t\t${tomcat.version}\n65 \t\t\tprovided\n66 \t\t\n67 \t\t\n68 \t\t\tcom.fasterxml.jackson.core\n69 \t\t\tjackson-core\n70 \t\t\n71 \t\t\n72 \t\t\tcom.fasterxml.jackson.core\n73 \t\t\tjackson-databind"
+ lineNumber: 62
variables:
data: dependency
innerText: "\n\t\t\torg.apache.tomcat\n\t\t\ttomcat-servlet-api\n\t\t\t${tomcat.version}\n\t\t\tprovided\n\t\t"
matchingXML: org.apache.tomcattomcat-servlet-api${tomcat.version}provided
- uri: file:///analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
message: POM XML dependencies - 'com.fasterxml.jackson.corejackson-core'
+ codeSnip: "59 \t\n60 \t\n61 \t\t\n62 \t\t\torg.apache.tomcat\n63 \t\t\ttomcat-servlet-api\n64 \t\t\t${tomcat.version}\n65 \t\t\tprovided\n66 \t\t\n67 \t\t\n68 \t\t\tcom.fasterxml.jackson.core\n69 \t\t\tjackson-core\n70 \t\t\n71 \t\t\n72 \t\t\tcom.fasterxml.jackson.core\n73 \t\t\tjackson-databind\n74 \t\t\n75 \t\t\n76 \t\t\torg.springframework.data\n77 \t\t\tspring-data-jpa\n78 \t\t\n79 "
+ lineNumber: 68
variables:
data: dependency
innerText: "\n\t\t\tcom.fasterxml.jackson.core\n\t\t\tjackson-core\n\t\t"
matchingXML: com.fasterxml.jackson.corejackson-core
- uri: file:///analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
message: POM XML dependencies - 'com.fasterxml.jackson.corejackson-databind'
+ codeSnip: "63 \t\t\ttomcat-servlet-api\n64 \t\t\t${tomcat.version}\n65 \t\t\tprovided\n66 \t\t\n67 \t\t\n68 \t\t\tcom.fasterxml.jackson.core\n69 \t\t\tjackson-core\n70 \t\t\n71 \t\t\n72 \t\t\tcom.fasterxml.jackson.core\n73 \t\t\tjackson-databind\n74 \t\t\n75 \t\t\n76 \t\t\torg.springframework.data\n77 \t\t\tspring-data-jpa\n78 \t\t\n79 \n80 \t\t\n81 \t\t\torg.springframework\n82 \t\t\tspring-jdbc\n83 \t\t\t${spring-framework.version}"
+ lineNumber: 72
variables:
data: dependency
innerText: "\n\t\t\tcom.fasterxml.jackson.core\n\t\t\tjackson-databind\n\t\t"
matchingXML: com.fasterxml.jackson.corejackson-databind
- uri: file:///analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
message: POM XML dependencies - 'org.springframework.dataspring-data-jpa'
+ codeSnip: "67 \t\t\n68 \t\t\tcom.fasterxml.jackson.core\n69 \t\t\tjackson-core\n70 \t\t\n71 \t\t\n72 \t\t\tcom.fasterxml.jackson.core\n73 \t\t\tjackson-databind\n74 \t\t\n75 \t\t\n76 \t\t\torg.springframework.data\n77 \t\t\tspring-data-jpa\n78 \t\t\n79 \n80 \t\t\n81 \t\t\torg.springframework\n82 \t\t\tspring-jdbc\n83 \t\t\t${spring-framework.version}\n84 \t\t\n85 \t\t\n86 \t\t\torg.springframework\n87 \t\t\tspring-webmvc"
+ lineNumber: 76
variables:
data: dependency
innerText: "\n\t\t\torg.springframework.data\n\t\t\tspring-data-jpa\n\t\t"
matchingXML: org.springframework.dataspring-data-jpa
- uri: file:///analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
message: POM XML dependencies - 'org.springframeworkspring-jdbc${spring-framework.version}'
+ codeSnip: "72 \t\t\tcom.fasterxml.jackson.core\n73 \t\t\tjackson-databind\n74 \t\t\n75 \t\t\n76 \t\t\torg.springframework.data\n77 \t\t\tspring-data-jpa\n78 \t\t\n79 \n80 \t\t\n81 \t\t\torg.springframework\n82 \t\t\tspring-jdbc\n83 \t\t\t${spring-framework.version}\n84 \t\t\n85 \t\t\n86 \t\t\torg.springframework\n87 \t\t\tspring-webmvc\n88 \t\t\t${spring-framework.version}\n89 \t\t\n90 \t\t\n91 \t\t\torg.springframework\n92 \t\t\tspring-web"
+ lineNumber: 81
variables:
data: dependency
innerText: "\n\t\t\torg.springframework\n\t\t\tspring-jdbc\n\t\t\t${spring-framework.version}\n\t\t"
matchingXML: org.springframeworkspring-jdbc${spring-framework.version}
- uri: file:///analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
message: POM XML dependencies - 'org.springframeworkspring-webmvc${spring-framework.version}'
+ codeSnip: "77 \t\t\tspring-data-jpa\n78 \t\t\n79 \n80 \t\t\n81 \t\t\torg.springframework\n82 \t\t\tspring-jdbc\n83 \t\t\t${spring-framework.version}\n84 \t\t\n85 \t\t\n86 \t\t\torg.springframework\n87 \t\t\tspring-webmvc\n88 \t\t\t${spring-framework.version}\n89 \t\t\n90 \t\t\n91 \t\t\torg.springframework\n92 \t\t\tspring-web\n93 \t\t\t${spring-framework.version}\n94 \t\t\n95 \t\t\n96 \t\t\torg.springframework.boot\n97 \t\t\tspring-boot-starter-actuator"
+ lineNumber: 86
variables:
data: dependency
innerText: "\n\t\t\torg.springframework\n\t\t\tspring-webmvc\n\t\t\t${spring-framework.version}\n\t\t"
matchingXML: org.springframeworkspring-webmvc${spring-framework.version}
- uri: file:///analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
message: POM XML dependencies - 'org.springframeworkspring-web${spring-framework.version}'
+ codeSnip: "77 \t\t\tspring-data-jpa\n78 \t\t\n79 \n80 \t\t\n81 \t\t\torg.springframework\n82 \t\t\tspring-jdbc\n83 \t\t\t${spring-framework.version}\n84 \t\t\n85 \t\t\n86 \t\t\torg.springframework\n87 \t\t\tspring-webmvc\n88 \t\t\t${spring-framework.version}\n89 \t\t\n90 \t\t\n91 \t\t\torg.springframework\n92 \t\t\tspring-web\n93 \t\t\t${spring-framework.version}\n94 \t\t\n95 \t\t\n96 \t\t\torg.springframework.boot\n97 \t\t\tspring-boot-starter-actuator"
+ lineNumber: 86
variables:
data: dependency
innerText: "\n\t\t\torg.springframework\n\t\t\tspring-web\n\t\t\t${spring-framework.version}\n\t\t"
matchingXML: org.springframeworkspring-web${spring-framework.version}
- uri: file:///analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
message: POM XML dependencies - 'org.springframework.bootspring-boot-starter-actuator2.5.0'
+ codeSnip: " 87 \t\t\tspring-webmvc\n 88 \t\t\t${spring-framework.version}\n 89 \t\t\n 90 \t\t\n 91 \t\t\torg.springframework\n 92 \t\t\tspring-web\n 93 \t\t\t${spring-framework.version}\n 94 \t\t\n 95 \t\t\n 96 \t\t\torg.springframework.boot\n 97 \t\t\tspring-boot-starter-actuator\n 98 \t\t\t2.5.0\n 99 \t\t\n100 \t\t\n101 \t\t\torg.apache.tomcat\n102 \t\t\ttomcat-jdbc\n103 \t\t\t${tomcat.version}\n104 \t\t\truntime\n105 \t\t\n106 \t\t\n107 \t\t\torg.hibernate"
+ lineNumber: 96
variables:
data: dependency
innerText: "\n\t\t\torg.springframework.boot\n\t\t\tspring-boot-starter-actuator\n\t\t\t2.5.0\n\t\t"
matchingXML: org.springframework.bootspring-boot-starter-actuator2.5.0
- uri: file:///analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
message: POM XML dependencies - 'org.apache.tomcattomcat-jdbc${tomcat.version}runtime'
+ codeSnip: " 92 \t\t\tspring-web\n 93 \t\t\t${spring-framework.version}\n 94 \t\t\n 95 \t\t\n 96 \t\t\torg.springframework.boot\n 97 \t\t\tspring-boot-starter-actuator\n 98 \t\t\t2.5.0\n 99 \t\t\n100 \t\t\n101 \t\t\torg.apache.tomcat\n102 \t\t\ttomcat-jdbc\n103 \t\t\t${tomcat.version}\n104 \t\t\truntime\n105 \t\t\n106 \t\t\n107 \t\t\torg.hibernate\n108 \t\t\thibernate-entitymanager\n109 \t\t\t${hibernate.version}\n110 \t\t\n111 \t\t\n112 \t\t\torg.hibernate.validator"
+ lineNumber: 101
variables:
data: dependency
innerText: "\n\t\t\torg.apache.tomcat\n\t\t\ttomcat-jdbc\n\t\t\t${tomcat.version}\n\t\t\truntime\n\t\t"
matchingXML: org.apache.tomcattomcat-jdbc${tomcat.version}runtime
- uri: file:///analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
message: POM XML dependencies - 'org.hibernatehibernate-entitymanager${hibernate.version}'
+ codeSnip: " 98 \t\t\t2.5.0\n 99 \t\t\n100 \t\t\n101 \t\t\torg.apache.tomcat\n102 \t\t\ttomcat-jdbc\n103 \t\t\t${tomcat.version}\n104 \t\t\truntime\n105 \t\t\n106 \t\t\n107 \t\t\torg.hibernate\n108 \t\t\thibernate-entitymanager\n109 \t\t\t${hibernate.version}\n110 \t\t\n111 \t\t\n112 \t\t\torg.hibernate.validator\n113 \t\t\thibernate-validator\n114 \t\t\t${hibernate-validator.version}\n115 \t\t\n116 \t\t\n117 \t\t\tch.qos.logback\n118 \t\t\tlogback-classic"
+ lineNumber: 107
variables:
data: dependency
innerText: "\n\t\t\torg.hibernate\n\t\t\thibernate-entitymanager\n\t\t\t${hibernate.version}\n\t\t"
matchingXML: org.hibernatehibernate-entitymanager${hibernate.version}
- uri: file:///analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
message: POM XML dependencies - 'org.hibernate.validatorhibernate-validator${hibernate-validator.version}'
+ codeSnip: "103 \t\t\t${tomcat.version}\n104 \t\t\truntime\n105 \t\t\n106 \t\t\n107 \t\t\torg.hibernate\n108 \t\t\thibernate-entitymanager\n109 \t\t\t${hibernate.version}\n110 \t\t\n111 \t\t\n112 \t\t\torg.hibernate.validator\n113 \t\t\thibernate-validator\n114 \t\t\t${hibernate-validator.version}\n115 \t\t\n116 \t\t\n117 \t\t\tch.qos.logback\n118 \t\t\tlogback-classic\n119 \t\t\t1.1.7\n120 \t\t\n121 \t\t\n122 \t\t\tcom.oracle.database.jdbc\n123 \t\t\tojdbc8"
+ lineNumber: 112
variables:
data: dependency
innerText: "\n\t\t\torg.hibernate.validator\n\t\t\thibernate-validator\n\t\t\t${hibernate-validator.version}\n\t\t"
matchingXML: org.hibernate.validatorhibernate-validator${hibernate-validator.version}
- uri: file:///analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
message: POM XML dependencies - 'ch.qos.logbacklogback-classic1.1.7'
+ codeSnip: "108 \t\t\thibernate-entitymanager\n109 \t\t\t${hibernate.version}\n110 \t\t\n111 \t\t\n112 \t\t\torg.hibernate.validator\n113 \t\t\thibernate-validator\n114 \t\t\t${hibernate-validator.version}\n115 \t\t\n116 \t\t\n117 \t\t\tch.qos.logback\n118 \t\t\tlogback-classic\n119 \t\t\t1.1.7\n120 \t\t\n121 \t\t\n122 \t\t\tcom.oracle.database.jdbc\n123 \t\t\tojdbc8\n124 \t\t\t21.1.0.0\n125 \t\t\n126 \t\t\n127 \t\t\torg.postgresql\n128 \t\t\tpostgresql"
+ lineNumber: 117
variables:
data: dependency
innerText: "\n\t\t\tch.qos.logback\n\t\t\tlogback-classic\n\t\t\t1.1.7\n\t\t"
matchingXML: ch.qos.logbacklogback-classic1.1.7
- uri: file:///analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
message: POM XML dependencies - 'com.oracle.database.jdbcojdbc821.1.0.0'
+ codeSnip: "113 \t\t\thibernate-validator\n114 \t\t\t${hibernate-validator.version}\n115 \t\t\n116 \t\t\n117 \t\t\tch.qos.logback\n118 \t\t\tlogback-classic\n119 \t\t\t1.1.7\n120 \t\t\n121 \t\t\n122 \t\t\tcom.oracle.database.jdbc\n123 \t\t\tojdbc8\n124 \t\t\t21.1.0.0\n125 \t\t\n126 \t\t\n127 \t\t\torg.postgresql\n128 \t\t\tpostgresql\n129 \t\t\t42.2.23\n130 \t\t\n131 \t\t\n132 \t\t\n133 \t\t\tio.konveyor.demo"
+ lineNumber: 122
variables:
data: dependency
innerText: "\n\t\t\tcom.oracle.database.jdbc\n\t\t\tojdbc8\n\t\t\t21.1.0.0\n\t\t"
matchingXML: com.oracle.database.jdbcojdbc821.1.0.0
- uri: file:///analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
message: POM XML dependencies - 'org.postgresqlpostgresql42.2.23'
+ codeSnip: "118 \t\t\tlogback-classic\n119 \t\t\t1.1.7\n120 \t\t\n121 \t\t\n122 \t\t\tcom.oracle.database.jdbc\n123 \t\t\tojdbc8\n124 \t\t\t21.1.0.0\n125 \t\t\n126 \t\t\n127 \t\t\torg.postgresql\n128 \t\t\tpostgresql\n129 \t\t\t42.2.23\n130 \t\t\n131 \t\t\n132 \t\t\n133 \t\t\tio.konveyor.demo\n134 \t\t\tconfig-utils\n135 \t\t\t1.0.0\n136 \t\t\n137 \n138 \t"
+ lineNumber: 127
variables:
data: dependency
innerText: "\n\t\t\torg.postgresql\n\t\t\tpostgresql\n\t\t\t42.2.23\n\t\t"
matchingXML: org.postgresqlpostgresql42.2.23
- uri: file:///analyzer-lsp/examples/customers-tomcat-legacy/pom.xml
message: POM XML dependencies - 'io.konveyor.democonfig-utils1.0.0'
+ codeSnip: "124 \t\t\t21.1.0.0\n125 \t\t\n126 \t\t\n127 \t\t\torg.postgresql\n128 \t\t\tpostgresql\n129 \t\t\t42.2.23\n130 \t\t\n131 \t\t\n132 \t\t\n133 \t\t\tio.konveyor.demo\n134 \t\t\tconfig-utils\n135 \t\t\t1.0.0\n136 \t\t\n137 \n138 \t\n139 \t\n140 \t\t\n141 \t\t\t\n142 \t\t\t\torg.apache.maven.plugins\n143 \t\t\t\tmaven-compiler-plugin\n144 \t\t\t\t${maven-compiler-plugin.version}"
+ lineNumber: 133
variables:
data: dependency
innerText: "\n\t\t\tio.konveyor.demo\n\t\t\tconfig-utils\n\t\t\t1.0.0\n\t\t"
diff --git a/provider/internal/builtin/provider.go b/provider/internal/builtin/provider.go
index dd9d88f7..23e63c2e 100644
--- a/provider/internal/builtin/provider.go
+++ b/provider/internal/builtin/provider.go
@@ -128,6 +128,8 @@ func (p *builtinProvider) Init(ctx context.Context, log logr.Logger, config prov
config: config,
tags: p.tags,
UnimplementedDependenciesComponent: provider.UnimplementedDependenciesComponent{},
+ locationCache: make(map[string]float64),
+ log: log,
}, nil
}
diff --git a/provider/internal/builtin/service_client.go b/provider/internal/builtin/service_client.go
index 231dabee..77be39da 100644
--- a/provider/internal/builtin/service_client.go
+++ b/provider/internal/builtin/service_client.go
@@ -10,11 +10,14 @@ import (
"regexp"
"strconv"
"strings"
+ "sync"
"github.com/antchfx/jsonquery"
"github.com/antchfx/xmlquery"
"github.com/antchfx/xpath"
+ "github.com/go-logr/logr"
"github.com/konveyor/analyzer-lsp/provider"
+ "github.com/konveyor/analyzer-lsp/tracing"
"go.lsp.dev/uri"
"gopkg.in/yaml.v2"
)
@@ -23,13 +26,15 @@ type builtinServiceClient struct {
config provider.InitConfig
tags map[string]bool
provider.UnimplementedDependenciesComponent
+ log logr.Logger
+
+ cacheMutex sync.RWMutex
+ locationCache map[string]float64
}
var _ provider.ServiceClient = &builtinServiceClient{}
-func (p *builtinServiceClient) Stop() {
- return
-}
+func (p *builtinServiceClient) Stop() {}
func (p *builtinServiceClient) Evaluate(ctx context.Context, cap string, conditionInfo []byte) (provider.ProviderEvaluateResponse, error) {
var cond builtinCondition
@@ -119,7 +124,7 @@ func (p *builtinServiceClient) Evaluate(ctx context.Context, cap string, conditi
}
lineNumber, err := strconv.Atoi(pieces[1])
if err != nil {
- return response, fmt.Errorf("Cannot convert line number string to integer")
+ return response, fmt.Errorf("cannot convert line number string to integer")
}
response.Incidents = append(response.Incidents, provider.IncidentContext{
FileURI: uri.File(ab),
@@ -140,18 +145,17 @@ func (p *builtinServiceClient) Evaluate(ctx context.Context, cap string, conditi
case "xml":
query, err := xpath.CompileWithNS(cond.XML.XPath, cond.XML.Namespaces)
if query == nil || err != nil {
- return response, fmt.Errorf("Could not parse provided xpath query '%s': %v", cond.XML.XPath, err)
+ return response, fmt.Errorf("could not parse provided xpath query '%s': %v", cond.XML.XPath, err)
}
//TODO(fabianvf): how should we scope the files searched here?
var xmlFiles []string
patterns := []string{"*.xml", "*.xhtml"}
xmlFiles, err = provider.GetFiles(p.config.Location, cond.XML.Filepaths, patterns...)
if err != nil {
- return response, fmt.Errorf("Unable to find files using pattern `%s`: %v", patterns, err)
+ return response, fmt.Errorf("unable to find files using pattern `%s`: %v", patterns, err)
}
for _, file := range xmlFiles {
-
f, err := os.Open(file)
if err != nil {
fmt.Printf("unable to open file '%s': %v\n", file, err)
@@ -187,14 +191,21 @@ func (p *builtinServiceClient) Evaluate(ctx context.Context, cap string, conditi
if err != nil {
ab = file
}
- response.Incidents = append(response.Incidents, provider.IncidentContext{
+ incident := provider.IncidentContext{
FileURI: uri.File(ab),
Variables: map[string]interface{}{
"matchingXML": node.OutputXML(false),
"innerText": node.InnerText(),
"data": node.Data,
},
- })
+ }
+ location, err := p.getLocation(ctx, ab, node.InnerText())
+ if err == nil {
+ incident.CodeLocation = &location
+ lineNo := int(location.StartPosition.Line)
+ incident.LineNumber = &lineNo
+ }
+ response.Incidents = append(response.Incidents, incident)
}
}
}
@@ -203,16 +214,24 @@ func (p *builtinServiceClient) Evaluate(ctx context.Context, cap string, conditi
case "json":
query := cond.JSON.XPath
if query == "" {
- return response, fmt.Errorf("Could not parse provided xpath query as string: %v", conditionInfo)
+ return response, fmt.Errorf("could not parse provided xpath query as string: %v", conditionInfo)
}
pattern := "*.json"
jsonFiles, err := provider.GetFiles(p.config.Location, cond.JSON.Filepaths, pattern)
if err != nil {
- return response, fmt.Errorf("Unable to find files using pattern `%s`: %v", pattern, err)
+ return response, fmt.Errorf("unable to find files using pattern `%s`: %v", pattern, err)
}
for _, file := range jsonFiles {
f, err := os.Open(file)
+ if err != nil {
+ p.log.V(5).Error(err, "error opening json file", "file", file)
+ continue
+ }
doc, err := jsonquery.Parse(f)
+ if err != nil {
+ p.log.V(5).Error(err, "error parsing json file", "file", file)
+ continue
+ }
list, err := jsonquery.QueryAll(doc, query)
if err != nil {
return response, err
@@ -224,13 +243,20 @@ func (p *builtinServiceClient) Evaluate(ctx context.Context, cap string, conditi
if err != nil {
ab = file
}
- response.Incidents = append(response.Incidents, provider.IncidentContext{
+ incident := provider.IncidentContext{
FileURI: uri.File(ab),
Variables: map[string]interface{}{
"matchingJSON": node.InnerText(),
"data": node.Data,
},
- })
+ }
+ location, err := p.getLocation(ctx, ab, node.InnerText())
+ if err == nil {
+ incident.CodeLocation = &location
+ lineNo := int(location.StartPosition.Line)
+ incident.LineNumber = &lineNo
+ }
+ response.Incidents = append(response.Incidents, incident)
}
}
}
@@ -258,6 +284,68 @@ func (p *builtinServiceClient) Evaluate(ctx context.Context, cap string, conditi
return response, fmt.Errorf("capability must be one of %v, not %s", capabilities, cap)
}
}
+
+// getLocation attempts to get code location for given content in JSON / XML files
+func (b *builtinServiceClient) getLocation(ctx context.Context, path, content string) (provider.Location, error) {
+ ctx, span := tracing.StartNewSpan(ctx, "getLocation")
+ defer span.End()
+ location := provider.Location{}
+
+ parts := strings.Split(content, "\n")
+ if len(parts) < 1 {
+ return location, fmt.Errorf("unable to get code location, empty content")
+ } else if len(parts) > 5 {
+ // limit content to search
+ parts = parts[:5]
+ }
+ lines := []string{}
+ for _, part := range parts {
+ line := strings.Trim(part, " ")
+ line = strings.ReplaceAll(line, "\t", "")
+ line = regexp.QuoteMeta(line)
+ if line != "" {
+ lines = append(lines, line)
+ }
+ }
+ if len(lines) < 1 {
+ return location, fmt.Errorf("unable to get code location, no-op content")
+ }
+ pattern := fmt.Sprintf(".*?%s", strings.Join(lines, ".*?"))
+
+ cacheKey := fmt.Sprintf("%s-%s", path, pattern)
+ b.cacheMutex.RLock()
+ val, exists := b.locationCache[cacheKey]
+ b.cacheMutex.RUnlock()
+ if exists {
+ if val == -1 {
+ return location, fmt.Errorf("unable to get location due to a previous error")
+ }
+ return provider.Location{
+ StartPosition: provider.Position{
+ Line: float64(val),
+ },
+ EndPosition: provider.Position{
+ Line: float64(val),
+ },
+ }, nil
+ }
+
+ defer func() {
+ b.cacheMutex.Lock()
+ b.locationCache[cacheKey] = location.StartPosition.Line
+ b.cacheMutex.Unlock()
+ }()
+
+ location.StartPosition.Line = -1
+ lineNumber, err := provider.MultilineGrep(ctx, len(lines), path, pattern)
+ if err != nil || lineNumber == -1 {
+ return location, fmt.Errorf("unable to get location in file %s - %w", path, err)
+ }
+ location.StartPosition.Line = float64(lineNumber)
+ location.EndPosition.Line = float64(lineNumber)
+ return location, nil
+}
+
func findFilesMatchingPattern(root, pattern string) ([]string, error) {
var regex *regexp.Regexp
// if the regex doesn't compile, we'll default to using filepath.Match on the pattern directly
diff --git a/provider/internal/java/dependency.go b/provider/internal/java/dependency.go
index d387bdcb..64dcddda 100644
--- a/provider/internal/java/dependency.go
+++ b/provider/internal/java/dependency.go
@@ -28,6 +28,13 @@ const (
providerSpecificConfigExcludePackagesKey = "excludePackages"
)
+// keys used in dep.Extras for extra information about a dep
+const (
+ artifactIdKey = "artifactId"
+ groupIdKey = "groupId"
+ pomPathKey = "pomPath"
+)
+
// TODO implement this for real
func (p *javaServiceClient) findPom() string {
var depPath string
@@ -44,9 +51,13 @@ func (p *javaServiceClient) findPom() string {
}
func (p *javaServiceClient) GetDependencies(ctx context.Context) (map[uri.URI][]*provider.Dep, error) {
- if p.depsCache != nil {
- return p.depsCache, nil
+ p.depsMutex.RLock()
+ val := p.depsCache
+ p.depsMutex.RUnlock()
+ if val != nil {
+ return val, nil
}
+
var err error
var ll map[uri.URI][]konveyor.DepDAGItem
m := map[uri.URI][]*provider.Dep{}
@@ -74,7 +85,9 @@ func (p *javaServiceClient) GetDependencies(ctx context.Context) (map[uri.URI][]
}
m[f] = deps
}
+ p.depsMutex.Lock()
p.depsCache = m
+ p.depsMutex.Unlock()
return m, nil
}
@@ -137,6 +150,11 @@ func (p *javaServiceClient) GetDependenciesFallback(ctx context.Context, locatio
}
dep := provider.Dep{}
dep.Name = fmt.Sprintf("%s.%s", *d.GroupID, *d.ArtifactID)
+ dep.Extras = map[string]interface{}{
+ groupIdKey: *d.GroupID,
+ artifactIdKey: *d.ArtifactID,
+ pomPathKey: path,
+ }
if *d.Version != "" {
if strings.Contains(*d.Version, "$") {
version := strings.TrimSuffix(strings.TrimPrefix(*d.Version, "${"), "}")
@@ -157,7 +175,9 @@ func (p *javaServiceClient) GetDependenciesFallback(ctx context.Context, locatio
m := map[uri.URI][]*provider.Dep{}
m[uri.File(path)] = deps
+ p.depsMutex.Lock()
p.depsCache = m
+ p.depsMutex.Unlock()
// recursively find deps in submodules
if pom.Modules != nil {
@@ -208,7 +228,7 @@ func (p *javaServiceClient) GetDependenciesDAG(ctx context.Context) (map[uri.URI
var pomDeps []provider.DepDAGItem
for _, tree := range submoduleTrees {
- submoduleDeps, err := p.parseMavenDepLines(tree, localRepoPath)
+ submoduleDeps, err := p.parseMavenDepLines(tree, localRepoPath, path)
if err != nil {
return nil, err
}
@@ -328,7 +348,7 @@ func (w *walker) walkDirForJar(path string, info fs.DirEntry, err error) error {
// parseDepString parses a java dependency string
// assumes format ::::
-func (p *javaServiceClient) parseDepString(dep, localRepoPath string) (provider.Dep, error) {
+func (p *javaServiceClient) parseDepString(dep, localRepoPath, pomPath string) (provider.Dep, error) {
d := provider.Dep{}
// remove all the pretty print characters.
dep = strings.TrimFunc(dep, func(r rune) bool {
@@ -364,6 +384,12 @@ func (p *javaServiceClient) parseDepString(dep, localRepoPath string) (provider.
d.Labels = addDepLabels(p.depToLabels, d.Name)
d.FileURIPrefix = fmt.Sprintf("file://%v", filepath.Dir(fp))
+ d.Extras = map[string]interface{}{
+ groupIdKey: parts[0],
+ artifactIdKey: parts[1],
+ pomPathKey: pomPath,
+ }
+
return d, nil
}
@@ -391,10 +417,10 @@ func addDepLabels(depToLabels map[string]*depLabelItem, depName string) []string
}
// parseMavenDepLines recursively parses output lines from maven dependency tree
-func (p *javaServiceClient) parseMavenDepLines(lines []string, localRepoPath string) ([]provider.DepDAGItem, error) {
+func (p *javaServiceClient) parseMavenDepLines(lines []string, localRepoPath, pomPath string) ([]provider.DepDAGItem, error) {
if len(lines) > 0 {
baseDepString := lines[0]
- baseDep, err := p.parseDepString(baseDepString, localRepoPath)
+ baseDep, err := p.parseDepString(baseDepString, localRepoPath, pomPath)
if err != nil {
return nil, err
}
@@ -404,7 +430,7 @@ func (p *javaServiceClient) parseMavenDepLines(lines []string, localRepoPath str
idx := 1
// indirect deps are separated by 3 or more spaces after the direct dep
for idx < len(lines) && strings.Count(lines[idx], " ") > 2 {
- transitiveDep, err := p.parseDepString(lines[idx], localRepoPath)
+ transitiveDep, err := p.parseDepString(lines[idx], localRepoPath, pomPath)
if err != nil {
return nil, err
}
@@ -412,7 +438,7 @@ func (p *javaServiceClient) parseMavenDepLines(lines []string, localRepoPath str
item.AddedDeps = append(item.AddedDeps, provider.DepDAGItem{Dep: transitiveDep})
idx += 1
}
- ds, err := p.parseMavenDepLines(lines[idx:], localRepoPath)
+ ds, err := p.parseMavenDepLines(lines[idx:], localRepoPath, pomPath)
if err != nil {
return nil, err
}
diff --git a/provider/internal/java/dependency_test.go b/provider/internal/java/dependency_test.go
index 8cc82055..adf02ee3 100644
--- a/provider/internal/java/dependency_test.go
+++ b/provider/internal/java/dependency_test.go
@@ -58,6 +58,11 @@ func Test_parseMavenDepLines(t *testing.T) {
labels.AsString(provider.DepSourceLabel, "internal"),
labels.AsString(provider.DepLanguageLabel, "java"),
},
+ Extras: map[string]interface{}{
+ groupIdKey: "junit",
+ artifactIdKey: "junit",
+ pomPathKey: "pom.xml",
+ },
FileURIPrefix: "file://testdata/junit/junit/4.11",
},
AddedDeps: []provider.DepDAGItem{
@@ -72,6 +77,11 @@ func Test_parseMavenDepLines(t *testing.T) {
labels.AsString(provider.DepSourceLabel, "internal"),
labels.AsString(provider.DepLanguageLabel, "java"),
},
+ Extras: map[string]interface{}{
+ groupIdKey: "org.hamcrest",
+ artifactIdKey: "hamcrest-core",
+ pomPathKey: "pom.xml",
+ },
FileURIPrefix: "file://testdata/org/hamcrest/hamcrest-core/1.3",
},
},
@@ -88,6 +98,11 @@ func Test_parseMavenDepLines(t *testing.T) {
labels.AsString(provider.DepSourceLabel, "internal"),
labels.AsString(provider.DepLanguageLabel, "java"),
},
+ Extras: map[string]interface{}{
+ groupIdKey: "io.fabric8",
+ artifactIdKey: "kubernetes-client",
+ pomPathKey: "pom.xml",
+ },
FileURIPrefix: "file://testdata/io/fabric8/kubernetes-client/6.0.0",
},
AddedDeps: []provider.DepDAGItem{
@@ -102,6 +117,11 @@ func Test_parseMavenDepLines(t *testing.T) {
labels.AsString(provider.DepSourceLabel, "internal"),
labels.AsString(provider.DepLanguageLabel, "java"),
},
+ Extras: map[string]interface{}{
+ groupIdKey: "io.fabric8",
+ artifactIdKey: "kubernetes-httpclient-okhttp",
+ pomPathKey: "pom.xml",
+ },
FileURIPrefix: "file://testdata/io/fabric8/kubernetes-httpclient-okhttp/6.0.0",
},
},
@@ -116,6 +136,11 @@ func Test_parseMavenDepLines(t *testing.T) {
labels.AsString(provider.DepSourceLabel, "internal"),
labels.AsString(provider.DepLanguageLabel, "java"),
},
+ Extras: map[string]interface{}{
+ groupIdKey: "com.squareup.okhttp3",
+ artifactIdKey: "okhttp",
+ pomPathKey: "pom.xml",
+ },
FileURIPrefix: "file://testdata/com/squareup/okhttp3/okhttp/3.12.12",
},
},
@@ -130,6 +155,11 @@ func Test_parseMavenDepLines(t *testing.T) {
labels.AsString(provider.DepSourceLabel, "internal"),
labels.AsString(provider.DepLanguageLabel, "java"),
},
+ Extras: map[string]interface{}{
+ groupIdKey: "com.squareup.okio",
+ artifactIdKey: "okio",
+ pomPathKey: "pom.xml",
+ },
FileURIPrefix: "file://testdata/com/squareup/okio/okio/1.15.0",
},
},
@@ -144,6 +174,11 @@ func Test_parseMavenDepLines(t *testing.T) {
labels.AsString(provider.DepSourceLabel, "internal"),
labels.AsString(provider.DepLanguageLabel, "java"),
},
+ Extras: map[string]interface{}{
+ groupIdKey: "com.squareup.okhttp3",
+ artifactIdKey: "logging-interceptor",
+ pomPathKey: "pom.xml",
+ },
FileURIPrefix: "file://testdata/com/squareup/okhttp3/logging-interceptor/3.12.12",
},
},
@@ -158,6 +193,11 @@ func Test_parseMavenDepLines(t *testing.T) {
labels.AsString(provider.DepSourceLabel, "internal"),
labels.AsString(provider.DepLanguageLabel, "java"),
},
+ Extras: map[string]interface{}{
+ groupIdKey: "io.fabric8",
+ artifactIdKey: "zjsonpatch",
+ pomPathKey: "pom.xml",
+ },
FileURIPrefix: "file://testdata/io/fabric8/zjsonpatch/0.3.0",
},
},
@@ -193,6 +233,11 @@ func Test_parseMavenDepLines(t *testing.T) {
labels.AsString(provider.DepSourceLabel, "open-source"),
labels.AsString(provider.DepLanguageLabel, "java"),
},
+ Extras: map[string]interface{}{
+ groupIdKey: "junit",
+ artifactIdKey: "junit",
+ pomPathKey: "pom.xml",
+ },
FileURIPrefix: "file://testdata/junit/junit/4.11",
},
AddedDeps: []provider.DepDAGItem{
@@ -208,6 +253,11 @@ func Test_parseMavenDepLines(t *testing.T) {
labels.AsString(provider.DepSourceLabel, "internal"),
labels.AsString(provider.DepLanguageLabel, "java"),
},
+ Extras: map[string]interface{}{
+ groupIdKey: "org.hamcrest",
+ artifactIdKey: "hamcrest-core",
+ pomPathKey: "pom.xml",
+ },
FileURIPrefix: "file://testdata/org/hamcrest/hamcrest-core/1.3",
},
},
@@ -224,6 +274,11 @@ func Test_parseMavenDepLines(t *testing.T) {
labels.AsString(provider.DepSourceLabel, "internal"),
labels.AsString(provider.DepLanguageLabel, "java"),
},
+ Extras: map[string]interface{}{
+ groupIdKey: "io.fabric8",
+ artifactIdKey: "kubernetes-client",
+ pomPathKey: "pom.xml",
+ },
FileURIPrefix: "file://testdata/io/fabric8/kubernetes-client/6.0.0",
},
AddedDeps: []provider.DepDAGItem{
@@ -238,6 +293,11 @@ func Test_parseMavenDepLines(t *testing.T) {
labels.AsString(provider.DepSourceLabel, "internal"),
labels.AsString(provider.DepLanguageLabel, "java"),
},
+ Extras: map[string]interface{}{
+ groupIdKey: "io.fabric8",
+ artifactIdKey: "kubernetes-httpclient-okhttp",
+ pomPathKey: "pom.xml",
+ },
FileURIPrefix: "file://testdata/io/fabric8/kubernetes-httpclient-okhttp/6.0.0",
},
},
@@ -252,6 +312,11 @@ func Test_parseMavenDepLines(t *testing.T) {
labels.AsString(provider.DepSourceLabel, "internal"),
labels.AsString(provider.DepLanguageLabel, "java"),
},
+ Extras: map[string]interface{}{
+ groupIdKey: "com.squareup.okhttp3",
+ artifactIdKey: "okhttp",
+ pomPathKey: "pom.xml",
+ },
FileURIPrefix: "file://testdata/com/squareup/okhttp3/okhttp/3.12.12",
},
},
@@ -266,6 +331,11 @@ func Test_parseMavenDepLines(t *testing.T) {
labels.AsString(provider.DepSourceLabel, "internal"),
labels.AsString(provider.DepLanguageLabel, "java"),
},
+ Extras: map[string]interface{}{
+ groupIdKey: "com.squareup.okio",
+ artifactIdKey: "okio",
+ pomPathKey: "pom.xml",
+ },
FileURIPrefix: "file://testdata/com/squareup/okio/okio/1.15.0",
},
},
@@ -280,6 +350,11 @@ func Test_parseMavenDepLines(t *testing.T) {
labels.AsString(provider.DepSourceLabel, "internal"),
labels.AsString(provider.DepLanguageLabel, "java"),
},
+ Extras: map[string]interface{}{
+ groupIdKey: "com.squareup.okhttp3",
+ artifactIdKey: "logging-interceptor",
+ pomPathKey: "pom.xml",
+ },
FileURIPrefix: "file://testdata/com/squareup/okhttp3/logging-interceptor/3.12.12",
},
},
@@ -294,6 +369,11 @@ func Test_parseMavenDepLines(t *testing.T) {
labels.AsString(provider.DepSourceLabel, "internal"),
labels.AsString(provider.DepLanguageLabel, "java"),
},
+ Extras: map[string]interface{}{
+ groupIdKey: "io.fabric8",
+ artifactIdKey: "zjsonpatch",
+ pomPathKey: "pom.xml",
+ },
FileURIPrefix: "file://testdata/io/fabric8/zjsonpatch/0.3.0",
},
},
@@ -322,7 +402,7 @@ func Test_parseMavenDepLines(t *testing.T) {
}
// we are not testing dep init here, so ignore error
p.depInit()
- if deps, err = p.parseMavenDepLines(lines[1:], "testdata"); (err != nil) != tt.wantErr {
+ if deps, err = p.parseMavenDepLines(lines[1:], "testdata", "pom.xml"); (err != nil) != tt.wantErr {
t.Errorf("parseMavenDepLines() error = %v, wantErr %v", err, tt.wantErr)
}
if len(tt.wantDeps) != len(deps) {
diff --git a/provider/internal/java/provider.go b/provider/internal/java/provider.go
index 0c563eeb..fcfaac33 100644
--- a/provider/internal/java/provider.go
+++ b/provider/internal/java/provider.go
@@ -12,11 +12,14 @@ import (
"path/filepath"
"regexp"
"strings"
+ "sync"
"github.com/getkin/kin-openapi/openapi3"
"github.com/go-logr/logr"
+ "github.com/konveyor/analyzer-lsp/engine"
"github.com/konveyor/analyzer-lsp/jsonrpc2"
"github.com/konveyor/analyzer-lsp/lsp/protocol"
+ "github.com/konveyor/analyzer-lsp/output/v1/konveyor"
"github.com/konveyor/analyzer-lsp/provider"
"github.com/vifraa/gopom"
"go.lsp.dev/uri"
@@ -62,11 +65,15 @@ type javaProvider struct {
clients []provider.ServiceClient
- hasMaven bool
+ hasMaven bool
+ depsMutex sync.RWMutex
+ depsLocationCache map[string]int
}
var _ provider.InternalProviderClient = &javaProvider{}
+var _ provider.DependencyLocationResolver = &javaProvider{}
+
type javaCondition struct {
Referenced referenceCondition `yaml:"referenced"`
}
@@ -81,10 +88,11 @@ func NewJavaProvider(config provider.Config, log logr.Logger) *javaProvider {
_, mvnBinaryError := exec.LookPath("mvn")
return &javaProvider{
- config: config,
- hasMaven: mvnBinaryError == nil,
- Log: log,
- clients: []provider.ServiceClient{},
+ config: config,
+ hasMaven: mvnBinaryError == nil,
+ Log: log,
+ clients: []provider.ServiceClient{},
+ depsLocationCache: make(map[string]int),
}
}
@@ -296,16 +304,17 @@ func (p *javaProvider) Init(ctx context.Context, log logr.Logger, config provide
}()
svcClient := javaServiceClient{
- rpc: rpc,
- cancelFunc: cancelFunc,
- config: config,
- cmd: cmd,
- bundles: bundles,
- workspace: workspace,
- log: log,
- depToLabels: map[string]*depLabelItem{},
- isLocationBinary: isBinary,
- mvnSettingsFile: mavenSettingsFile,
+ rpc: rpc,
+ cancelFunc: cancelFunc,
+ config: config,
+ cmd: cmd,
+ bundles: bundles,
+ workspace: workspace,
+ log: log,
+ depToLabels: map[string]*depLabelItem{},
+ isLocationBinary: isBinary,
+ mvnSettingsFile: mavenSettingsFile,
+ depsLocationCache: make(map[string]int),
}
svcClient.initialization(ctx)
@@ -324,6 +333,69 @@ func (p *javaProvider) GetDependenciesDAG(ctx context.Context) (map[uri.URI][]pr
return provider.FullDepDAGResponse(ctx, p.clients)
}
+// GetLocation given a dep, attempts to find line number, caches the line number for a given dep
+func (j *javaProvider) GetLocation(ctx context.Context, dep konveyor.Dep) (engine.Location, error) {
+ location := engine.Location{StartPosition: engine.Position{}, EndPosition: engine.Position{}}
+
+ cacheKey := fmt.Sprintf("%s-%s-%s-%v",
+ dep.Name, dep.Version, dep.ResolvedIdentifier, dep.Indirect)
+ j.depsMutex.RLock()
+ val, exists := j.depsLocationCache[cacheKey]
+ j.depsMutex.RUnlock()
+ if exists {
+ if val == -1 {
+ return location,
+ fmt.Errorf("unable to get location for dep %s due to a previous error", dep.Name)
+ }
+ return engine.Location{
+ StartPosition: engine.Position{
+ Line: val,
+ },
+ EndPosition: engine.Position{
+ Line: val,
+ },
+ }, nil
+ }
+
+ defer func() {
+ j.depsMutex.Lock()
+ j.depsLocationCache[cacheKey] = location.StartPosition.Line
+ j.depsMutex.Unlock()
+ }()
+
+ location.StartPosition.Line = -1
+ // we know that this provider populates extras with required information
+ if dep.Extras == nil {
+ return location, fmt.Errorf("unable to get location for dep %s, dep.Extras not set", dep.Name)
+ }
+ extrasKeys := []string{artifactIdKey, groupIdKey, pomPathKey}
+ for _, key := range extrasKeys {
+ if val, ok := dep.Extras[key]; !ok {
+ return location,
+ fmt.Errorf("unable to get location for dep %s, missing dep.Extras key %s", dep.Name, key)
+ } else if _, ok := val.(string); !ok {
+ return location,
+ fmt.Errorf("unable to get location for dep %s, dep.Extras key %s not a string", dep.Name, key)
+ }
+ }
+
+ groupId := dep.Extras[groupIdKey].(string)
+ artifactId := dep.Extras[artifactIdKey].(string)
+ path := dep.Extras[pomPathKey].(string)
+ if path == "" {
+ return location, fmt.Errorf("unable to get location for dep %s, empty pom path", dep.Name)
+ }
+ lineNumber, err := provider.MultilineGrep(ctx, 2, path,
+ fmt.Sprintf("(%s|%s).*?(%s|%s).*",
+ groupId, artifactId, artifactId, groupId))
+ if err != nil || lineNumber == -1 {
+ return location, fmt.Errorf("unable to get location for dep %s, search error - %w", dep.Name, err)
+ }
+ location.StartPosition.Line = lineNumber
+ location.EndPosition.Line = lineNumber
+ return location, nil
+}
+
// resolveSourcesJars for a given source code location, runs maven to find
// deps that don't have sources attached and decompiles them
func resolveSourcesJars(ctx context.Context, log logr.Logger, location, mavenSettings string) error {
diff --git a/provider/internal/java/service_client.go b/provider/internal/java/service_client.go
index 3ccda010..d9d3e6ce 100644
--- a/provider/internal/java/service_client.go
+++ b/provider/internal/java/service_client.go
@@ -8,6 +8,7 @@ import (
"path/filepath"
"regexp"
"strings"
+ "sync"
"github.com/go-logr/logr"
"github.com/konveyor/analyzer-lsp/jsonrpc2"
@@ -18,17 +19,19 @@ import (
)
type javaServiceClient struct {
- rpc *jsonrpc2.Conn
- cancelFunc context.CancelFunc
- config provider.InitConfig
- log logr.Logger
- cmd *exec.Cmd
- bundles []string
- workspace string
- depToLabels map[string]*depLabelItem
- isLocationBinary bool
- mvnSettingsFile string
- depsCache map[uri.URI][]*provider.Dep
+ rpc *jsonrpc2.Conn
+ cancelFunc context.CancelFunc
+ config provider.InitConfig
+ log logr.Logger
+ cmd *exec.Cmd
+ bundles []string
+ workspace string
+ depToLabels map[string]*depLabelItem
+ isLocationBinary bool
+ mvnSettingsFile string
+ depsMutex sync.RWMutex
+ depsCache map[uri.URI][]*provider.Dep
+ depsLocationCache map[string]int
}
type depLabelItem struct {
diff --git a/provider/lib.go b/provider/lib.go
index fb57d502..b7a028bb 100644
--- a/provider/lib.go
+++ b/provider/lib.go
@@ -1,8 +1,12 @@
package provider
import (
+ "bufio"
+ "context"
"fmt"
"io/fs"
+ "math"
+ "os"
"path/filepath"
"regexp"
"strings"
@@ -94,3 +98,47 @@ func GetFiles(configLocation string, filepaths []string, patterns ...string) ([]
}
return xmlFiles, nil
}
+
+// MultilineGrep searches for a multi-line pattern in a file and returns line number when matched
+// window determines how many lines to load in mem at a time, uses ctx to abort search on timeout
+// fails when a line in file overflows 64K, returns -1 and error on failure
+func MultilineGrep(ctx context.Context, window int, path, pattern string) (int, error) {
+ file, err := os.Open(path)
+ if err != nil {
+ return -1, fmt.Errorf("failed to open file - %w", err)
+ }
+ defer file.Close()
+
+ patternRegex, err := regexp.Compile(`(?s)` + pattern)
+ if err != nil {
+ return -1, fmt.Errorf("bad pattern - %w", err)
+ }
+
+ // make sure we never keep too big a chunk in memory
+ window = int(math.Min(float64(window), 5))
+ scanner := bufio.NewScanner(file)
+ currLine := 1
+ lines := make([]string, window)
+ for scanner.Scan() {
+ select {
+ case <-ctx.Done():
+ return -1, fmt.Errorf("aborting search in file %s, timed out", path)
+ default:
+ }
+
+ if len(lines) == window {
+ lines = lines[1:]
+ }
+ line := scanner.Text()
+ line = strings.ReplaceAll(line, "\t", "")
+ line = strings.Trim(line, " ")
+ lines = append(lines, line)
+ content := strings.Join(lines, "\n")
+ if patternRegex.MatchString(content) {
+ return int(math.Max(1, float64(currLine)-float64(window)+1)), nil
+ }
+ currLine += 1
+ }
+
+ return -1, scanner.Err()
+}
diff --git a/provider/lib_test.go b/provider/lib_test.go
new file mode 100644
index 00000000..cc9fc886
--- /dev/null
+++ b/provider/lib_test.go
@@ -0,0 +1,71 @@
+package provider
+
+import (
+ "context"
+ "testing"
+ "time"
+)
+
+func TestMultilineGrep(t *testing.T) {
+ tests := []struct {
+ name string
+ filePath string
+ pattern string
+ want int
+ wantErr bool
+ }{
+ {
+ name: "plain single line text",
+ filePath: "./testdata/small.xml",
+ pattern: "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"",
+ want: 2,
+ wantErr: false,
+ },
+ {
+ name: "multi-line simple pattern",
+ filePath: "./testdata/small.xml",
+ pattern: "com.fasterxml.jackson.core.*?jackson-core.*",
+ want: 69,
+ wantErr: false,
+ },
+ {
+ name: "multi-line complex pattern",
+ filePath: "./testdata/small.xml",
+ pattern: "(com.fasterxml.jackson.core|jackson-core).*?(jackson-core|com.fasterxml.jackson.core).*",
+ want: 69,
+ wantErr: false,
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ got, err := MultilineGrep(context.TODO(), 5, tt.filePath, tt.pattern)
+ if (err != nil) != tt.wantErr {
+ t.Errorf("MultilineGrep() error = %v, wantErr %v", err, tt.wantErr)
+ return
+ }
+ if got != tt.want {
+ t.Errorf("MultilineGrep() = %v, want %v", got, tt.want)
+ }
+ })
+ }
+}
+
+func BenchmarkMultilineGrepFileSizeSmall(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ ctx, canMe := context.WithTimeout(context.TODO(), time.Second*3)
+ MultilineGrep(ctx, 5,
+ "./testdata/small.xml",
+ "(com.fasterxml.jackson.core|jackson-core).*?(jackson-core|com.fasterxml.jackson.core).*")
+ canMe()
+ }
+}
+
+func BenchmarkMultilineGrepFileSizeBig(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ ctx, canMe := context.WithTimeout(context.TODO(), time.Second*3)
+ MultilineGrep(ctx, 5,
+ "./testdata/big.xml",
+ "(io.konveyor.demo|config-utils).*?(config-utils|io.konveyor.demo).*")
+ canMe()
+ }
+}
diff --git a/provider/provider.go b/provider/provider.go
index 1e2f5b83..51333168 100644
--- a/provider/provider.go
+++ b/provider/provider.go
@@ -6,6 +6,7 @@ import (
"os"
"regexp"
"strings"
+ "time"
"github.com/cbroglie/mustache"
"github.com/getkin/kin-openapi/openapi3"
@@ -336,6 +337,10 @@ type ServiceClient interface {
GetDependenciesDAG(ctx context.Context) (map[uri.URI][]DepDAGItem, error)
}
+type DependencyLocationResolver interface {
+ GetLocation(ctx context.Context, dep konveyor.Dep) (engine.Location, error)
+}
+
type Dep = konveyor.Dep
type DepDAGItem = konveyor.DepDAGItem
type Startable interface {
@@ -561,17 +566,33 @@ func (dc DependencyCondition) Evaluate(ctx context.Context, log logr.Logger, con
return resp, nil
}
+ var depLocationResolver DependencyLocationResolver
+ depLocationResolver, _ = dc.Client.(DependencyLocationResolver)
+
for _, matchedDep := range matchedDeps {
if matchedDep.dep.Version == "" || (dc.Lowerbound == "" && dc.Upperbound == "") {
- resp.Matched = true
- resp.Incidents = append(resp.Incidents, engine.IncidentContext{
+ incident := engine.IncidentContext{
FileURI: matchedDep.uri,
Variables: map[string]interface{}{
"name": matchedDep.dep.Name,
"version": matchedDep.dep.Version,
"type": matchedDep.dep.Type,
},
- })
+ }
+ if depLocationResolver != nil {
+ // this is a best-effort step and we don't want to block if resolver misbehaves
+ timeoutContext, cancelFunc := context.WithTimeout(ctx, time.Second*3)
+ location, err := depLocationResolver.GetLocation(timeoutContext, *matchedDep.dep)
+ if err == nil {
+ incident.LineNumber = &location.StartPosition.Line
+ incident.CodeLocation = &location
+ } else {
+ log.V(7).Error(err, "failed to get location for dependency", "dep", matchedDep.dep.Name)
+ }
+ cancelFunc()
+ }
+ resp.Matched = true
+ resp.Incidents = append(resp.Incidents, incident)
// For now, lets leave this TODO to figure out what we should be setting in the context
resp.TemplateContext = map[string]interface{}{
"name": matchedDep.dep.Name,
@@ -612,13 +633,26 @@ func (dc DependencyCondition) Evaluate(ctx context.Context, log logr.Logger, con
}
resp.Matched = constraints.Check(depVersion)
- resp.Incidents = append(resp.Incidents, engine.IncidentContext{
+ incident := engine.IncidentContext{
FileURI: matchedDep.uri,
Variables: map[string]interface{}{
"name": matchedDep.dep.Name,
"version": matchedDep.dep.Version,
},
- })
+ }
+ if depLocationResolver != nil {
+ // this is a best-effort step and we don't want to block if resolver misbehaves
+ timeoutContext, cancelFunc := context.WithTimeout(context.Background(), time.Second*3)
+ location, err := depLocationResolver.GetLocation(timeoutContext, *matchedDep.dep)
+ if err == nil {
+ incident.LineNumber = &location.StartPosition.Line
+ incident.CodeLocation = &location
+ } else {
+ log.V(7).Error(err, "failed to get location for dependency", "dep", matchedDep.dep.Name)
+ }
+ cancelFunc()
+ }
+ resp.Incidents = append(resp.Incidents, incident)
resp.TemplateContext = map[string]interface{}{
"name": matchedDep.dep.Name,
"version": matchedDep.dep.Version,
diff --git a/provider/testdata/big.xml b/provider/testdata/big.xml
new file mode 100644
index 00000000..a5dc3bc1
--- /dev/null
+++ b/provider/testdata/big.xml
@@ -0,0 +1,696 @@
+
+ 4.0.0
+ io.konveyor.demo
+ customers-tomcat
+ 0.0.1-SNAPSHOT
+
+ Order Management
+ war
+ Remaining services for the legacy Order Management application
+
+
+ 1.8
+ UTF-8
+ UTF-8
+ ${java.version}
+ ${java.version}
+ 5.3.7
+ 9.0.46
+ 2021.0.1
+ 5.4.32.Final
+ 6.2.0.Final
+
+ 42.2.20
+ 2.12.3
+
+ 3.8.1
+ 3.3.1
+ 3.2.0
+
+
+
+
+
+ demo-config
+ Azure DevOps
+ https://pkgs.dev.azure.com/ShawnHurley21/demo-config-utils/_packaging/demo-config/maven/v1
+
+
+
+
+
+
+ com.fasterxml.jackson
+ jackson-bom
+ ${jackson.version}
+ import
+ pom
+
+
+ org.springframework.data
+ spring-data-bom
+ ${spring-data.version}
+ import
+ pom
+
+
+
+
+
+ org.apache.tomcat
+ tomcat-servlet-api
+ ${tomcat.version}
+ provided
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ com.fasterxml.jackson.core
+ jackson-test
+
+
+ org.springframework.data
+ spring-data-jpa
+
+
+ org.apache.tomcat
+ tomcat-servlet-api
+ ${tomcat.version}
+ provided
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ com.fasterxml.jackson.core
+ jackson-test
+
+
+ org.springframework.data
+ spring-data-jpa
+
+
+ org.apache.tomcat
+ tomcat-servlet-api
+ ${tomcat.version}
+ provided
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ com.fasterxml.jackson.core
+ jackson-test
+
+
+ org.springframework.data
+ spring-data-jpa
+
+
+ org.apache.tomcat
+ tomcat-servlet-api
+ ${tomcat.version}
+ provided
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ com.fasterxml.jackson.core
+ jackson-test
+
+
+ org.springframework.data
+ spring-data-jpa
+
+
+ org.apache.tomcat
+ tomcat-servlet-api
+ ${tomcat.version}
+ provided
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ com.fasterxml.jackson.core
+ jackson-test
+
+
+ org.springframework.data
+ spring-data-jpa
+
+
+ org.apache.tomcat
+ tomcat-servlet-api
+ ${tomcat.version}
+ provided
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ com.fasterxml.jackson.core
+ jackson-test
+
+
+ org.springframework.data
+ spring-data-jpa
+
+
+ org.apache.tomcat
+ tomcat-servlet-api
+ ${tomcat.version}
+ provided
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ com.fasterxml.jackson.core
+ jackson-test
+
+
+ org.springframework.data
+ spring-data-jpa
+
+
+ org.apache.tomcat
+ tomcat-servlet-api
+ ${tomcat.version}
+ provided
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ com.fasterxml.jackson.core
+ jackson-test
+
+
+ org.springframework.data
+ spring-data-jpa
+
+
+ org.apache.tomcat
+ tomcat-servlet-api
+ ${tomcat.version}
+ provided
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ com.fasterxml.jackson.core
+ jackson-test
+
+
+ org.springframework.data
+ spring-data-jpa
+
+
+ org.apache.tomcat
+ tomcat-servlet-api
+ ${tomcat.version}
+ provided
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ com.fasterxml.jackson.core
+ jackson-test
+
+
+ org.springframework.data
+ spring-data-jpa
+
+
+ org.apache.tomcat
+ tomcat-servlet-api
+ ${tomcat.version}
+ provided
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ com.fasterxml.jackson.core
+ jackson-test
+
+
+ org.springframework.data
+ spring-data-jpa
+
+
+ org.apache.tomcat
+ tomcat-servlet-api
+ ${tomcat.version}
+ provided
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ com.fasterxml.jackson.core
+ jackson-test
+
+
+ org.springframework.data
+ spring-data-jpa
+
+
+ org.apache.tomcat
+ tomcat-servlet-api
+ ${tomcat.version}
+ provided
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ com.fasterxml.jackson.core
+ jackson-test
+
+
+ org.springframework.data
+ spring-data-jpa
+
+
+ org.apache.tomcat
+ tomcat-servlet-api
+ ${tomcat.version}
+ provided
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ com.fasterxml.jackson.core
+ jackson-test
+
+
+ org.springframework.data
+ spring-data-jpa
+
+
+ org.apache.tomcat
+ tomcat-servlet-api
+ ${tomcat.version}
+ provided
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ com.fasterxml.jackson.core
+ jackson-test
+
+
+ org.springframework.data
+ spring-data-jpa
+
+
+ org.apache.tomcat
+ tomcat-servlet-api
+ ${tomcat.version}
+ provided
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ com.fasterxml.jackson.core
+ jackson-test
+
+
+ org.springframework.data
+ spring-data-jpa
+
+
+ org.apache.tomcat
+ tomcat-servlet-api
+ ${tomcat.version}
+ provided
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ com.fasterxml.jackson.core
+ jackson-test
+
+
+ org.springframework.data
+ spring-data-jpa
+
+
+ org.apache.tomcat
+ tomcat-servlet-api
+ ${tomcat.version}
+ provided
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ com.fasterxml.jackson.core
+ jackson-test
+
+
+ org.springframework.data
+ spring-data-jpa
+
+
+ org.apache.tomcat
+ tomcat-servlet-api
+ ${tomcat.version}
+ provided
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ com.fasterxml.jackson.core
+ jackson-test
+
+
+ org.springframework.data
+ spring-data-jpa
+
+
+ org.apache.tomcat
+ tomcat-servlet-api
+ ${tomcat.version}
+ provided
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ com.fasterxml.jackson.core
+ jackson-test
+
+
+ org.springframework.data
+ spring-data-jpa
+
+
+ org.apache.tomcat
+ tomcat-servlet-api
+ ${tomcat.version}
+ provided
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ com.fasterxml.jackson.core
+ jackson-test
+
+
+ org.springframework.data
+ spring-data-jpa
+
+
+ org.apache.tomcat
+ tomcat-servlet-api
+ ${tomcat.version}
+ provided
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ com.fasterxml.jackson.core
+ jackson-test
+
+
+ org.springframework.data
+ spring-data-jpa
+
+
+ org.apache.tomcat
+ tomcat-servlet-api
+ ${tomcat.version}
+ provided
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ com.fasterxml.jackson.core
+ jackson-test
+
+
+ org.springframework.data
+ spring-data-jpa
+
+
+ org.apache.tomcat
+ tomcat-servlet-api
+ ${tomcat.version}
+ provided
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ com.fasterxml.jackson.core
+ jackson-test
+
+
+ org.springframework.data
+ spring-data-jpa
+
+
+ org.apache.tomcat
+ tomcat-servlet-api
+ ${tomcat.version}
+ provided
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ com.fasterxml.jackson.core
+ jackson-test
+
+
+ org.springframework.data
+ spring-data-jpa
+
+
+ org.springframework
+ spring-jdbc
+ ${spring-framework.version}
+
+
+ org.springframework
+ spring-webmvc
+ ${spring-framework.version}
+
+
+ org.springframework
+ spring-web
+ ${spring-framework.version}
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+ 2.5.0
+
+
+ org.apache.tomcat
+ tomcat-jdbc
+ ${tomcat.version}
+ runtime
+
+
+ org.hibernate
+ hibernate-entitymanager
+ ${hibernate.version}
+
+
+ org.hibernate.validator
+ hibernate-validator
+ ${hibernate-validator.version}
+
+
+ ch.qos.logback
+ logback-classic
+ 1.1.7
+
+
+ com.oracle.database.jdbc
+ ojdbc8
+ 21.1.0.0
+
+
+ org.postgresql
+ postgresql
+ 42.2.23
+
+
+
+ io.konveyor.demo
+ config-utils
+ 1.0.0
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+
+ org.apache.maven.plugins
+ maven-war-plugin
+ ${maven-war-plugin.version}
+
+ false
+
+
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+ ${maven-resources-plugin.version}
+
+ UTF-8
+
+
+
+
+
+
diff --git a/provider/testdata/small.xml b/provider/testdata/small.xml
new file mode 100644
index 00000000..5fd20fde
--- /dev/null
+++ b/provider/testdata/small.xml
@@ -0,0 +1,165 @@
+
+ 4.0.0
+ io.konveyor.demo
+ customers-tomcat
+ 0.0.1-SNAPSHOT
+
+ Order Management
+ war
+ Remaining services for the legacy Order Management application
+
+
+ 1.8
+ UTF-8
+ UTF-8
+ ${java.version}
+ ${java.version}
+ 5.3.7
+ 9.0.46
+ 2021.0.1
+ 5.4.32.Final
+ 6.2.0.Final
+
+ 42.2.20
+ 2.12.3
+
+ 3.8.1
+ 3.3.1
+ 3.2.0
+
+
+
+
+
+ demo-config
+ Azure DevOps
+ https://pkgs.dev.azure.com/ShawnHurley21/demo-config-utils/_packaging/demo-config/maven/v1
+
+
+
+
+
+
+ com.fasterxml.jackson
+ jackson-bom
+ ${jackson.version}
+ import
+ pom
+
+
+ org.springframework.data
+ spring-data-bom
+ ${spring-data.version}
+ import
+ pom
+
+
+
+
+
+ org.apache.tomcat
+ tomcat-servlet-api
+ ${tomcat.version}
+ provided
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ org.springframework.data
+ spring-data-jpa
+
+
+
+ org.springframework
+ spring-jdbc
+ ${spring-framework.version}
+
+
+ org.springframework
+ spring-webmvc
+ ${spring-framework.version}
+
+
+ org.springframework
+ spring-web
+ ${spring-framework.version}
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+ 2.5.0
+
+
+ org.apache.tomcat
+ tomcat-jdbc
+ ${tomcat.version}
+ runtime
+
+
+ org.hibernate
+ hibernate-entitymanager
+ ${hibernate.version}
+
+
+ org.hibernate.validator
+ hibernate-validator
+ ${hibernate-validator.version}
+
+
+ ch.qos.logback
+ logback-classic
+ 1.1.7
+
+
+ com.oracle.database.jdbc
+ ojdbc8
+ 21.1.0.0
+
+
+ org.postgresql
+ postgresql
+ 42.2.23
+
+
+
+ io.konveyor.demo
+ config-utils
+ 1.0.0
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+
+ org.apache.maven.plugins
+ maven-war-plugin
+ ${maven-war-plugin.version}
+
+ false
+
+
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+ ${maven-resources-plugin.version}
+
+ UTF-8
+
+
+
+
+
+