Skip to content

Some pre-integration refactoring of utbot-spring-analyzer #1970

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Mar 17, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package application
package org.utbot.spring

import analyzers.SpringApplicationAnalyzer
import utils.PathsUtils
import org.utbot.spring.analyzers.SpringApplicationAnalyzer
import org.utbot.spring.utils.PathsUtils
import java.nio.file.Path

/**
* To run this app, arguments must be passed in the following way:
Expand All @@ -23,7 +24,7 @@ fun main(args: Array<String>) {
*/

val springApplicationAnalyzer = SpringApplicationAnalyzer(
applicationPath = args[0],
applicationUrl = Path.of(args[0]).toUri().toURL(),
configurationClassFqn = args[1],
propertyFilesPaths = args[2].split(";").filter { it != PathsUtils.EMPTY_PATH },
xmlConfigurationPaths = args[3].split(";").filter { it != PathsUtils.EMPTY_PATH },
Expand Down
Original file line number Diff line number Diff line change
@@ -1,30 +1,26 @@
package analyzers
package org.utbot.spring.analyzers

import application.utils.FakeFileManager
import application.configurators.PropertiesConfigurator
import application.configurators.XmlFilesConfigurator
import config.TestApplicationConfiguration
import org.utbot.spring.utils.FakeFileManager
import org.utbot.spring.configurators.PropertiesConfigurator
import org.utbot.spring.configurators.XmlFilesConfigurator
import org.utbot.spring.config.TestApplicationConfiguration
import org.springframework.boot.builder.SpringApplicationBuilder
import org.springframework.context.ApplicationContextException
import utils.ConfigurationManager
import org.utbot.spring.postProcessors.UtBotSpringShutdownException
import org.utbot.spring.utils.ConfigurationManager
import java.net.URL
import java.net.URLClassLoader
import java.nio.file.Path


class SpringApplicationAnalyzer(
private val applicationPath: String,
private val applicationUrl: URL,
private val configurationClassFqn: String,
private val propertyFilesPaths: List<String>,
private val xmlConfigurationPaths: List<String>,
) {

private val applicationUrl: URL
get() = Path.of(applicationPath).toUri().toURL()

fun analyze() {
val fakeFileManager = FakeFileManager(propertyFilesPaths + xmlConfigurationPaths)
fakeFileManager.createFakeFiles()
fakeFileManager.createTempFiles()

val classLoader: ClassLoader = URLClassLoader(arrayOf(applicationUrl))
val userConfigurationClass = classLoader.loadClass(configurationClassFqn)
Expand All @@ -45,10 +41,10 @@ class SpringApplicationAnalyzer(
try {
app.build()
app.run()
} catch (e: ApplicationContextException) {
} catch (e: UtBotSpringShutdownException) {
println("Bean analysis finished successfully")
}finally {
fakeFileManager.deleteFakeFiles()
fakeFileManager.deleteTempFiles()
}
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package config
package org.utbot.spring.config

import org.springframework.beans.factory.config.BeanFactoryPostProcessor
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import post_processors.UtBotBeanFactoryPostProcessor
import org.utbot.spring.postProcessors.UtBotBeanFactoryPostProcessor

@Configuration
open class TestApplicationConfiguration {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package application.configurators
package org.utbot.spring.configurators

import utils.ConfigurationManager
import utils.PathsUtils
import org.utbot.spring.utils.ConfigurationManager
import org.utbot.spring.utils.PathsUtils
import java.io.BufferedReader
import java.io.FileReader
import kotlin.io.path.Path
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package analyzers
package org.utbot.spring.configurators

import org.w3c.dom.Document
import org.w3c.dom.Element
Expand All @@ -7,7 +7,7 @@ import javax.xml.transform.TransformerFactory
import javax.xml.transform.dom.DOMSource
import javax.xml.transform.stream.StreamResult

class XmlConfigurationAnalyzer(private val userXmlFilePath: String, private val fakeXmlFilePath: String) {
class XmlConfigurationParser(private val userXmlFilePath: String, private val fakeXmlFilePath: String) {

fun fillFakeApplicationXml() {
val builder = DocumentBuilderFactory.newInstance().newDocumentBuilder()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package application.configurators
package org.utbot.spring.configurators

import analyzers.XmlConfigurationAnalyzer
import application.utils.FakeFileManager
import utils.ConfigurationManager
import utils.PathsUtils
import org.utbot.spring.utils.ConfigurationManager
import org.utbot.spring.utils.PathsUtils
import kotlin.io.path.Path

class XmlFilesConfigurator(
Expand All @@ -17,10 +15,10 @@ class XmlFilesConfigurator(
for (userXmlFilePath in userXmlFilePaths) {
if(userXmlFilePath == PathsUtils.EMPTY_PATH)continue

val xmlConfigurationAnalyzer =
XmlConfigurationAnalyzer(userXmlFilePath, PathsUtils.createFakeFilePath(userXmlFilePath))
val xmlConfigurationParser =
XmlConfigurationParser(userXmlFilePath, PathsUtils.createFakeFilePath(userXmlFilePath))

xmlConfigurationAnalyzer.fillFakeApplicationXml()
xmlConfigurationParser.fillFakeApplicationXml()
configurationManager.patchImportResourceAnnotation(Path(userXmlFilePath).fileName)
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package post_processors
package org.utbot.spring.postProcessors

import org.springframework.beans.factory.annotation.AnnotatedBeanDefinition
import org.springframework.beans.factory.config.BeanFactoryPostProcessor
Expand Down Expand Up @@ -29,6 +29,7 @@ class UtBotBeanFactoryPostProcessor : BeanFactoryPostProcessor, PriorityOrdered
destroyBeanDefinitions(beanFactory)

println("Finished post-processing bean factory in UtBot")
throw UtBotSpringShutdownException("Finished post-processing bean factory in UtBot")
}

private fun findBeanClassNames(beanFactory: ConfigurableListableBeanFactory): ArrayList<String> {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.utbot.spring.postProcessors

/**
* Use this exception to shutdown this application
* when all required analysis actions are completed.
*/
class UtBotSpringShutdownException(message: String): Exception(message)
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package utils
package org.utbot.spring.utils

import org.springframework.context.annotation.ImportResource
import org.springframework.context.annotation.PropertySource
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package application.utils
package org.utbot.spring.utils

import utils.PathsUtils
import org.utbot.spring.utils.PathsUtils
import java.io.File
import java.io.IOException

class FakeFileManager(private val fakeFilesList: List<String>) {

fun createFakeFiles() {
fun createTempFiles() {
for (fileName in fakeFilesList) {
val fakeXmlFileAbsolutePath = PathsUtils.createFakeFilePath(fileName)

Expand All @@ -19,7 +19,7 @@ class FakeFileManager(private val fakeFilesList: List<String>) {
}
}

fun deleteFakeFiles() {
fun deleteTempFiles() {
for (fileName in fakeFilesList) {
val fakeXmlFileAbsolutePath = PathsUtils.createFakeFilePath(fileName)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package utils
package org.utbot.spring.utils

import java.io.File
import kotlin.io.path.Path

object PathsUtils {
Expand All @@ -8,14 +9,13 @@ object PathsUtils {
fun createFakeFilePath(fileName: String): String =
Path(buildResourcesPath, "fake_${Path(fileName).fileName}").toString()

//TODO: it is better to do it without marker files
private val buildResourcesPath: String
get() {
val resourcesMarker =
this.javaClass.classLoader.getResource("resources_marker.txt")
?: error("Resources marker file is not found")

return Path(resourcesMarker.path).parent.toString()
return Path(File(resourcesMarker.toURI()).path).parent.toString()
}

}