diff --git a/build.sbt b/build.sbt index 0e57a38b4668..7c0c187eac90 100644 --- a/build.sbt +++ b/build.sbt @@ -992,7 +992,8 @@ lazy val `version-output` = (project in file("lib/scala/version-output")) .settings( frgaalJavaCompilerSetting, Compile / sourceGenerators += Def.task { - val file = (Compile / sourceManaged).value / "buildinfo" / "Info.scala" + val file = + (Compile / sourceManaged).value / "org" / "enso" / "version" / "GeneratedVersion.java" BuildInfo .writeBuildInfoFile( file = file, @@ -1222,14 +1223,16 @@ lazy val testkit = project .in(file("lib/scala/testkit")) .settings( frgaalJavaCompilerSetting, - libraryDependencies ++= Seq( + libraryDependencies ++= logbackPkg ++ Seq( "org.apache.commons" % "commons-lang3" % commonsLangVersion, "commons-io" % "commons-io" % commonsIoVersion, "org.scalatest" %% "scalatest" % scalatestVersion, "junit" % "junit" % junitVersion, - "com.github.sbt" % "junit-interface" % junitIfVersion + "com.github.sbt" % "junit-interface" % junitIfVersion, + "org.slf4j" % "slf4j-api" % slf4jVersion ) ) + .dependsOn(`logging-service-logback`) lazy val searcher = project .in(file("lib/scala/searcher")) @@ -1444,7 +1447,7 @@ val truffleRunOptionsSettings = Seq( * the potential conflicts with other *.conf files. */ val testLogProviderOptions = Seq( - "-Dslf4j.provider=org.enso.logger.TestLogProvider", + "-Dslf4j.provider=org.enso.logging.service.logback.test.provider.TestLogProvider", "-Dconfig.resource=application-test.conf" ) @@ -2978,6 +2981,7 @@ lazy val editions = project cleanFiles += baseDirectory.value / ".." / ".." / "distribution" / "editions" ) .dependsOn(semver) + .dependsOn(`version-output`) .dependsOn(testkit % Test) lazy val semver = project diff --git a/docs/infrastructure/logging.md b/docs/infrastructure/logging.md index c771eb08f46f..ec993c963b7d 100644 --- a/docs/infrastructure/logging.md +++ b/docs/infrastructure/logging.md @@ -52,7 +52,7 @@ The configuration has two main sections: During component's setup, its `application.conf` config file is parsed. The config's keys and values are validated and, if correct, the parsed representation is available as an instance of -`org.enso.logger.config.LoggingServiceConfig` class. The class encapsulates the +`org.enso.logging.config.LoggingServiceConfig` class. The class encapsulates the `logging-service` section of `application.conf` file and is used to programmatically initialize loggers. @@ -191,7 +191,7 @@ File appender directs all log events to a log file: Rolling policy is a fully optional property of File Appender that would trigger automatic log rotation. All properties are optional with some reasonable -defaults if missing (defined in `org.enso.logger.config.FileAppender` config +defaults if missing (defined in `org.enso.logging.config.FileAppender` config class). #### Socket Appender @@ -281,9 +281,10 @@ The `org.slf4j.Logger` instances have to know where to send log events. This setting is typically performed once, when the service starts, and applies globally during its execution. Currently, it is not possible to dynamically change where log events are being stored. The main (abstract) class used for -setting up logging is `org.enso.logger.LoggerSetup`. An instance of that class -can be retrieved with the thread-safe `org.enso.logger.LoggerSetup.get` factory -method. `org.enso.logger.LoggerSetup` provides a number of `setupXYZAppender` +setting up logging is `org.enso.logging.config.LoggerSetup`. An instance of that +class can be retrieved with the thread-safe +`org.enso.logging.config.LoggerSetup.get` factory method. +`org.enso.logging.config.LoggerSetup` provides a number of `setupXYZAppender` methods that will direct loggers to send log events to an `XYZ` appender. Setting a specific hard-coded appender programmatically should however be avoided by the users. Instead, one should invoke one of the overloaded `setup` @@ -292,7 +293,7 @@ configuration. ```java package foo; -import org.enso.logger.LoggerSetup; +import org.enso.logging.config.LoggerSetup; import org.slf4j.event.Level; public class MyService { @@ -308,13 +309,13 @@ public class MyService { } ``` -`org.enso.logging.LoggingSetupHelper` class was introduced to help with the most -common use cases - establishing a file-based logging in the Enso's dedicated -directories or connecting to an existing logging server once it starts accepting -connections. That is why services don't call `LoggerSetup` directly but instead -provide a service-specific implementation of -`org.enso.logging.LoggingSetupHelper`. `LoggingSetupHelper` and `LoggerSetup` -provide `teardown` methods to properly dispose of log events. +`org.enso.logging.service.LoggingSetupHelper` class was introduced to help with +the most common use cases - establishing a file-based logging in the Enso's +dedicated directories or connecting to an existing logging server once it starts +accepting connections. That is why services don't call `LoggerSetup` directly +but instead provide a service-specific implementation of +`org.enso.logging.service.LoggingSetupHelper`. `LoggingSetupHelper` and +`LoggerSetup` provide `teardown` methods to properly dispose of log events. ### Log Masking diff --git a/engine/common/src/main/java/org/enso/common/ContextFactory.java b/engine/common/src/main/java/org/enso/common/ContextFactory.java index da53df9e0dce..639621531473 100644 --- a/engine/common/src/main/java/org/enso/common/ContextFactory.java +++ b/engine/common/src/main/java/org/enso/common/ContextFactory.java @@ -7,7 +7,7 @@ import org.enso.logger.Converter; import org.enso.logger.JulHandler; -import org.enso.logger.LoggerSetup; +import org.enso.logging.config.LoggerSetup; import org.graalvm.polyglot.Context; import org.graalvm.polyglot.HostAccess; import org.graalvm.polyglot.io.MessageTransport; diff --git a/engine/language-server/src/main/scala/org/enso/languageserver/boot/MainModule.scala b/engine/language-server/src/main/scala/org/enso/languageserver/boot/MainModule.scala index f55fe0ca399b..a28a06d18843 100644 --- a/engine/language-server/src/main/scala/org/enso/languageserver/boot/MainModule.scala +++ b/engine/language-server/src/main/scala/org/enso/languageserver/boot/MainModule.scala @@ -2,7 +2,6 @@ package org.enso.languageserver.boot import akka.actor.ActorSystem import akka.stream.Materializer -import buildinfo.Info import com.typesafe.config.ConfigFactory import org.enso.distribution.locking.{ ResourceManager, @@ -48,13 +47,14 @@ import org.enso.librarymanager.local.DefaultLocalLibraryProvider import org.enso.librarymanager.published.PublishedLibraryCache import org.enso.lockmanager.server.LockManagerService import org.enso.logger.masking.Masking -import org.enso.logger.akka.AkkaConverter import org.enso.common.RuntimeOptions import org.enso.common.ContextFactory +import org.enso.logging.utils.akka.AkkaConverter import org.enso.polyglot.RuntimeServerInfo import org.enso.profiling.events.NoopEventsMonitor import org.enso.searcher.memory.InMemorySuggestionsRepo import org.enso.text.{ContentBasedVersioning, Sha3_224VersionCalculator} +import org.enso.version.BuildVersion import org.graalvm.polyglot.io.MessageEndpoint import org.slf4j.event.Level import org.slf4j.LoggerFactory @@ -75,7 +75,7 @@ class MainModule(serverConfig: LanguageServerConfig, logLevel: Level) { private val log = LoggerFactory.getLogger(this.getClass) log.debug( "Initializing main module of the Language Server from [{}, {}, {}]", - Info.currentEdition, + BuildVersion.currentEdition, serverConfig, logLevel ) @@ -312,7 +312,7 @@ class MainModule(serverConfig: LanguageServerConfig, logLevel: Level) { RuntimeOptions.LOG_MASKING, Masking.isMaskingEnabled.toString ) - extraOptions.put(RuntimeOptions.EDITION_OVERRIDE, Info.currentEdition) + extraOptions.put(RuntimeOptions.EDITION_OVERRIDE, BuildVersion.currentEdition) extraOptions.put( RuntimeOptions.JOB_PARALLELISM, Runtime.getRuntime.availableProcessors().toString diff --git a/engine/language-server/src/main/scala/org/enso/languageserver/libraries/handler/LibraryPublishHandler.scala b/engine/language-server/src/main/scala/org/enso/languageserver/libraries/handler/LibraryPublishHandler.scala index 3396430bfa14..84660be65e5f 100644 --- a/engine/language-server/src/main/scala/org/enso/languageserver/libraries/handler/LibraryPublishHandler.scala +++ b/engine/language-server/src/main/scala/org/enso/languageserver/libraries/handler/LibraryPublishHandler.scala @@ -17,7 +17,7 @@ import org.enso.languageserver.libraries.BlockingOperation import org.enso.languageserver.requesthandler.RequestTimeout import org.enso.languageserver.util.UnhandledLogging import org.enso.libraryupload.{auth, LibraryUploader} -import org.enso.logging.LoggingServiceManager +import org.enso.logging.service.LoggingServiceManager import scala.concurrent.Future import scala.concurrent.duration.FiniteDuration diff --git a/engine/language-server/src/main/scala/org/enso/languageserver/protocol/json/JsonConnectionController.scala b/engine/language-server/src/main/scala/org/enso/languageserver/protocol/json/JsonConnectionController.scala index 83ae82c4c3fe..5841cf11dd1c 100644 --- a/engine/language-server/src/main/scala/org/enso/languageserver/protocol/json/JsonConnectionController.scala +++ b/engine/language-server/src/main/scala/org/enso/languageserver/protocol/json/JsonConnectionController.scala @@ -97,9 +97,10 @@ import org.enso.languageserver.text.TextProtocol import org.enso.languageserver.util.UnhandledLogging import org.enso.languageserver.vcsmanager.VcsManagerApi._ import org.enso.languageserver.workspace.WorkspaceApi.ProjectInfo -import org.enso.logger.akka.ActorMessageLogging +import org.enso.logging.utils.akka.ActorMessageLogging import org.enso.polyglot.runtime.Runtime.Api import org.enso.polyglot.runtime.Runtime.Api.ProgressNotification +import org.enso.version.BuildVersion import java.util.UUID @@ -289,8 +290,8 @@ class JsonConnectionController( InitProtocolConnection, request.id, InitProtocolConnection.Result( - buildinfo.Info.ensoVersion, - buildinfo.Info.currentEdition, + BuildVersion.ensoVersion, + BuildVersion.currentEdition, allContentRoots ) ) @@ -346,8 +347,8 @@ class JsonConnectionController( InitProtocolConnection, id, InitProtocolConnection.Result( - buildinfo.Info.ensoVersion, - buildinfo.Info.currentEdition, + BuildVersion.ensoVersion, + BuildVersion.currentEdition, roots ) ) diff --git a/engine/language-server/src/main/scala/org/enso/languageserver/requesthandler/ai/AICompletion2Handler.scala b/engine/language-server/src/main/scala/org/enso/languageserver/requesthandler/ai/AICompletion2Handler.scala index db9e13e7c894..116825c9e445 100644 --- a/engine/language-server/src/main/scala/org/enso/languageserver/requesthandler/ai/AICompletion2Handler.scala +++ b/engine/language-server/src/main/scala/org/enso/languageserver/requesthandler/ai/AICompletion2Handler.scala @@ -26,7 +26,7 @@ import org.enso.languageserver.runtime.{ } import org.enso.languageserver.session.JsonSession import org.enso.languageserver.util.UnhandledLogging -import org.enso.logger.akka.ActorMessageLogging +import org.enso.logging.utils.akka.ActorMessageLogging import org.enso.polyglot.runtime.Runtime.Api import java.nio.charset.StandardCharsets diff --git a/engine/language-server/src/main/scala/org/enso/languageserver/requesthandler/workspace/ProjectInfoHandler.scala b/engine/language-server/src/main/scala/org/enso/languageserver/requesthandler/workspace/ProjectInfoHandler.scala index ea9517e243d7..21163ced83f3 100644 --- a/engine/language-server/src/main/scala/org/enso/languageserver/requesthandler/workspace/ProjectInfoHandler.scala +++ b/engine/language-server/src/main/scala/org/enso/languageserver/requesthandler/workspace/ProjectInfoHandler.scala @@ -1,7 +1,6 @@ package org.enso.languageserver.requesthandler.workspace import akka.actor.{Actor, Props} -import buildinfo.Info import com.typesafe.scalalogging.LazyLogging import org.enso.jsonrpc.{Request, ResponseError, ResponseResult} import org.enso.languageserver.data.Config @@ -10,6 +9,7 @@ import org.enso.languageserver.util.UnhandledLogging import org.enso.languageserver.workspace.WorkspaceApi.ProjectInfo import org.enso.logger.masking.MaskedPath import org.enso.pkg.{Config => PkgConfig} +import org.enso.version.BuildVersion import java.io.{File, FileReader} @@ -31,8 +31,8 @@ class ProjectInfoHandler(languageServerConfig: Config) if (projectConfig.isSuccess) { val projectInfo = ProjectInfo.Result( projectName = projectConfig.get.moduleName, - engineVersion = Info.ensoVersion, - graalVersion = Info.graalVersion + engineVersion = BuildVersion.ensoVersion, + graalVersion = BuildVersion.graalVersion ) sender() ! ResponseResult( ProjectInfo, diff --git a/engine/language-server/src/main/scala/org/enso/languageserver/runtime/ContextRegistry.scala b/engine/language-server/src/main/scala/org/enso/languageserver/runtime/ContextRegistry.scala index fa17bb783e32..b740444483ce 100644 --- a/engine/language-server/src/main/scala/org/enso/languageserver/runtime/ContextRegistry.scala +++ b/engine/language-server/src/main/scala/org/enso/languageserver/runtime/ContextRegistry.scala @@ -11,7 +11,7 @@ import org.enso.languageserver.event.{ import org.enso.languageserver.monitoring.MonitoringProtocol.{Ping, Pong} import org.enso.languageserver.runtime.handler._ import org.enso.languageserver.util.UnhandledLogging -import org.enso.logger.akka.ActorMessageLogging +import org.enso.logging.utils.akka.ActorMessageLogging import org.enso.polyglot.runtime.Runtime.Api import org.enso.polyglot.runtime.Runtime.Api.ContextId diff --git a/engine/language-server/src/main/scala/org/enso/languageserver/runtime/RuntimeConnector.scala b/engine/language-server/src/main/scala/org/enso/languageserver/runtime/RuntimeConnector.scala index 499355ec02b7..ca6f8f186e93 100644 --- a/engine/language-server/src/main/scala/org/enso/languageserver/runtime/RuntimeConnector.scala +++ b/engine/language-server/src/main/scala/org/enso/languageserver/runtime/RuntimeConnector.scala @@ -9,8 +9,8 @@ import org.enso.languageserver.runtime.RuntimeConnector.{ } import org.enso.languageserver.util.UnhandledLogging import org.enso.lockmanager.server.LockManagerService -import org.enso.logger.akka.ActorMessageLogging import org.enso.logger.masking.ToLogString +import org.enso.logging.utils.akka.ActorMessageLogging import org.enso.polyglot.runtime.Runtime import org.enso.polyglot.runtime.Runtime.{Api, ApiEnvelope} import org.enso.polyglot.runtime.serde.ApiSerde diff --git a/engine/language-server/src/main/scala/org/enso/languageserver/util/UnhandledLogging.scala b/engine/language-server/src/main/scala/org/enso/languageserver/util/UnhandledLogging.scala index 3e70882a0c22..fb4f83cefa4a 100644 --- a/engine/language-server/src/main/scala/org/enso/languageserver/util/UnhandledLogging.scala +++ b/engine/language-server/src/main/scala/org/enso/languageserver/util/UnhandledLogging.scala @@ -2,7 +2,7 @@ package org.enso.languageserver.util import akka.actor.Actor import com.typesafe.scalalogging.LazyLogging -import org.enso.logger.akka.AkkaConverter +import org.enso.logging.utils.akka.AkkaConverter import org.slf4j.event.Level trait UnhandledLogging extends LazyLogging { this: Actor => diff --git a/engine/language-server/src/test/scala/org/enso/filewatcher/NoopWatcher.scala b/engine/language-server/src/test/scala/org/enso/filewatcher/test/NoopWatcher.scala similarity index 77% rename from engine/language-server/src/test/scala/org/enso/filewatcher/NoopWatcher.scala rename to engine/language-server/src/test/scala/org/enso/filewatcher/test/NoopWatcher.scala index 87484682cae1..9c9d582e0273 100644 --- a/engine/language-server/src/test/scala/org/enso/filewatcher/NoopWatcher.scala +++ b/engine/language-server/src/test/scala/org/enso/filewatcher/test/NoopWatcher.scala @@ -1,4 +1,6 @@ -package org.enso.filewatcher +package org.enso.filewatcher.test + +import org.enso.filewatcher.Watcher import java.util.concurrent.Executor diff --git a/engine/language-server/src/test/scala/org/enso/filewatcher/NoopWatcherFactory.scala b/engine/language-server/src/test/scala/org/enso/filewatcher/test/NoopWatcherFactory.scala similarity index 73% rename from engine/language-server/src/test/scala/org/enso/filewatcher/NoopWatcherFactory.scala rename to engine/language-server/src/test/scala/org/enso/filewatcher/test/NoopWatcherFactory.scala index 3f169d0063bb..7794942dd58c 100644 --- a/engine/language-server/src/test/scala/org/enso/filewatcher/NoopWatcherFactory.scala +++ b/engine/language-server/src/test/scala/org/enso/filewatcher/test/NoopWatcherFactory.scala @@ -1,4 +1,7 @@ -package org.enso.filewatcher +package org.enso.filewatcher.test + +import org.enso.filewatcher.{Watcher, WatcherFactory} + import java.nio.file.Path class NoopWatcherFactory extends WatcherFactory { diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/boot/resource/RepoInitializationSpec.scala b/engine/language-server/src/test/scala/org/enso/languageserver/boot/resource/RepoInitializationSpec.scala index 317d6c657295..4cf21cce269b 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/boot/resource/RepoInitializationSpec.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/boot/resource/RepoInitializationSpec.scala @@ -8,9 +8,12 @@ import org.enso.languageserver.boot.StartupConfig import org.enso.languageserver.data._ import org.enso.languageserver.event.InitializedEvent import org.enso.languageserver.filemanager.{ContentRoot, ContentRootWithFile} -import org.enso.logger.ReportLogsOnFailure import org.enso.searcher.memory.InMemorySuggestionsRepo -import org.enso.testkit.{FlakySpec, ToScalaFutureConversions} +import org.enso.testkit.{ + FlakySpec, + ReportLogsOnFailure, + ToScalaFutureConversions +} import org.scalatest.BeforeAndAfterAll import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpecLike diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/filemanager/ContentRootManagerSpec.scala b/engine/language-server/src/test/scala/org/enso/languageserver/filemanager/ContentRootManagerSpec.scala index a7134f4af547..3021ff9b31b8 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/filemanager/ContentRootManagerSpec.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/filemanager/ContentRootManagerSpec.scala @@ -10,9 +10,12 @@ import org.enso.languageserver.filemanager.ContentRootManagerProtocol.{ ContentRootsAddedNotification, SubscribeToNotifications } -import org.enso.logger.ReportLogsOnFailure import org.enso.polyglot.runtime.Runtime.Api -import org.enso.testkit.{EitherValue, WithTemporaryDirectory} +import org.enso.testkit.{ + EitherValue, + ReportLogsOnFailure, + WithTemporaryDirectory +} import org.scalatest.concurrent.Futures import org.scalatest.concurrent.ScalaFutures.convertScalaFuture import org.scalatest.matchers.should.Matchers diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/filemanager/ContentRootSerializationSpec.scala b/engine/language-server/src/test/scala/org/enso/languageserver/filemanager/ContentRootSerializationSpec.scala index 9e4a694ef75d..e77ecb7dbee1 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/filemanager/ContentRootSerializationSpec.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/filemanager/ContentRootSerializationSpec.scala @@ -3,7 +3,7 @@ package org.enso.languageserver.filemanager import io.circe.Json import io.circe.syntax._ import io.circe.literal._ -import org.enso.logger.ReportLogsOnFailure +import org.enso.testkit.ReportLogsOnFailure import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpec diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/filemanager/FileSystemSpec.scala b/engine/language-server/src/test/scala/org/enso/languageserver/filemanager/FileSystemSpec.scala index d016820448fc..ce62a66a51ed 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/filemanager/FileSystemSpec.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/filemanager/FileSystemSpec.scala @@ -2,7 +2,7 @@ package org.enso.languageserver.filemanager import org.apache.commons.io.FileUtils import org.enso.languageserver.effect.Effects -import org.enso.logger.ReportLogsOnFailure +import org.enso.testkit.ReportLogsOnFailure import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpecLike diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/libraries/ComponentGroupsResolverSpec.scala b/engine/language-server/src/test/scala/org/enso/languageserver/libraries/ComponentGroupsResolverSpec.scala index f5de8b56a05f..8466dd4d6184 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/libraries/ComponentGroupsResolverSpec.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/libraries/ComponentGroupsResolverSpec.scala @@ -1,7 +1,6 @@ package org.enso.languageserver.libraries import org.enso.editions.LibraryName -import org.enso.logger.ReportLogsOnFailure import org.enso.pkg.{ Component, ComponentGroup, @@ -11,6 +10,7 @@ import org.enso.pkg.{ GroupName, GroupReference } +import org.enso.testkit.ReportLogsOnFailure import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpec diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/libraries/ComponentGroupsValidatorSpec.scala b/engine/language-server/src/test/scala/org/enso/languageserver/libraries/ComponentGroupsValidatorSpec.scala index f8b7aa7b580c..1c3fc19e06e0 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/libraries/ComponentGroupsValidatorSpec.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/libraries/ComponentGroupsValidatorSpec.scala @@ -1,7 +1,6 @@ package org.enso.languageserver.libraries import org.enso.editions.LibraryName -import org.enso.logger.ReportLogsOnFailure import org.enso.pkg.{ ComponentGroup, ComponentGroups, @@ -9,6 +8,7 @@ import org.enso.pkg.{ GroupName, GroupReference } +import org.enso.testkit.ReportLogsOnFailure import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpec diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/libraries/EditionNameSerializationSpec.scala b/engine/language-server/src/test/scala/org/enso/languageserver/libraries/EditionNameSerializationSpec.scala index c5d5974c550c..e34c17e7a97a 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/libraries/EditionNameSerializationSpec.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/libraries/EditionNameSerializationSpec.scala @@ -5,7 +5,7 @@ import org.enso.languageserver.libraries.EditionReference.{ CurrentProjectEdition, NamedEdition } -import org.enso.logger.ReportLogsOnFailure +import org.enso.testkit.ReportLogsOnFailure import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpec diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/libraries/LibraryEntrySerializationSpec.scala b/engine/language-server/src/test/scala/org/enso/languageserver/libraries/LibraryEntrySerializationSpec.scala index a759c94a6d98..8d942c9a20e3 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/libraries/LibraryEntrySerializationSpec.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/libraries/LibraryEntrySerializationSpec.scala @@ -1,7 +1,7 @@ package org.enso.languageserver.libraries import io.circe.syntax._ -import org.enso.logger.ReportLogsOnFailure +import org.enso.testkit.ReportLogsOnFailure import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpec diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/libraries/LocalLibraryManagerSpec.scala b/engine/language-server/src/test/scala/org/enso/languageserver/libraries/LocalLibraryManagerSpec.scala index 15d21ec830e3..126832e1258c 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/libraries/LocalLibraryManagerSpec.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/libraries/LocalLibraryManagerSpec.scala @@ -5,9 +5,8 @@ import akka.testkit._ import org.enso.distribution.FileSystem.PathSyntax import org.enso.editions.LibraryName import org.enso.librarymanager.LibraryLocations -import org.enso.logger.ReportLogsOnFailure import org.enso.pkg.PackageManager -import org.enso.testkit.WithTemporaryDirectory +import org.enso.testkit.{ReportLogsOnFailure, WithTemporaryDirectory} import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpecLike import org.scalatest.BeforeAndAfterAll diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/monitoring/HealthCheckEndpointSpec.scala b/engine/language-server/src/test/scala/org/enso/languageserver/monitoring/HealthCheckEndpointSpec.scala index 45cb680b322a..0b2b384b5049 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/monitoring/HealthCheckEndpointSpec.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/monitoring/HealthCheckEndpointSpec.scala @@ -11,8 +11,7 @@ import org.enso.languageserver.monitoring.HealthCheckEndpointSpec.{ } import org.enso.languageserver.monitoring.MonitoringProtocol.{Ping, Pong} import org.enso.languageserver.requesthandler.monitoring.PingHandler -import org.enso.logger.ReportLogsOnFailure -import org.enso.testkit.FlakySpec +import org.enso.testkit.{FlakySpec, ReportLogsOnFailure} import org.scalatest.flatspec.AnyFlatSpecLike import org.scalatest.matchers.must.Matchers diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/monitoring/IdlenessEndpointSpec.scala b/engine/language-server/src/test/scala/org/enso/languageserver/monitoring/IdlenessEndpointSpec.scala index 065432e0a15b..dcd95435c114 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/monitoring/IdlenessEndpointSpec.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/monitoring/IdlenessEndpointSpec.scala @@ -5,8 +5,7 @@ import akka.http.scaladsl.model.StatusCodes import akka.http.scaladsl.server.Directives import akka.http.scaladsl.testkit.{RouteTestTimeout, ScalatestRouteTest} import org.enso.languageserver.TestClock -import org.enso.logger.ReportLogsOnFailure -import org.enso.testkit.FlakySpec +import org.enso.testkit.{FlakySpec, ReportLogsOnFailure} import org.scalatest.flatspec.AnyFlatSpecLike import org.scalatest.matchers.should.Matchers diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/requesthandler/monitoring/PingHandlerSpec.scala b/engine/language-server/src/test/scala/org/enso/languageserver/requesthandler/monitoring/PingHandlerSpec.scala index a6d71fbe0966..f451e023977b 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/requesthandler/monitoring/PingHandlerSpec.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/requesthandler/monitoring/PingHandlerSpec.scala @@ -6,8 +6,7 @@ import org.enso.jsonrpc.Id.Number import org.enso.jsonrpc.{Request, ResponseResult, Unused} import org.enso.languageserver.monitoring.MonitoringApi import org.enso.languageserver.monitoring.MonitoringProtocol.{Ping, Pong} -import org.enso.logger.ReportLogsOnFailure -import org.enso.testkit.FlakySpec +import org.enso.testkit.{FlakySpec, ReportLogsOnFailure} import org.scalatest.BeforeAndAfterAll import org.scalatest.flatspec.AnyFlatSpecLike import org.scalatest.matchers.must.Matchers diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/runtime/ContextEventsListenerSpec.scala b/engine/language-server/src/test/scala/org/enso/languageserver/runtime/ContextEventsListenerSpec.scala index 0e78c9e6cfcd..308424fece6e 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/runtime/ContextEventsListenerSpec.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/runtime/ContextEventsListenerSpec.scala @@ -20,9 +20,8 @@ import org.enso.languageserver.session.SessionRouter.{ DeliverToBinaryController, DeliverToJsonController } -import org.enso.logger.ReportLogsOnFailure import org.enso.polyglot.runtime.Runtime.Api -import org.enso.testkit.RetrySpec +import org.enso.testkit.{ReportLogsOnFailure, RetrySpec} import org.scalatest.BeforeAndAfterAll import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpecLike diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/search/SuggestionsHandlerSpec.scala b/engine/language-server/src/test/scala/org/enso/languageserver/search/SuggestionsHandlerSpec.scala index f2a590c642f1..b76ed913f4a3 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/search/SuggestionsHandlerSpec.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/search/SuggestionsHandlerSpec.scala @@ -14,13 +14,12 @@ import org.enso.languageserver.event.InitializedEvent import org.enso.languageserver.filemanager._ import org.enso.languageserver.session.JsonSession import org.enso.languageserver.session.SessionRouter.DeliverToJsonController -import org.enso.logger.ReportLogsOnFailure import org.enso.polyglot.data.{Tree, TypeGraph} import org.enso.polyglot.runtime.Runtime.Api import org.enso.polyglot.{ExportedSymbol, ModuleExports, Suggestion} import org.enso.searcher.SuggestionsRepo import org.enso.searcher.memory.InMemorySuggestionsRepo -import org.enso.testkit.RetrySpec +import org.enso.testkit.{ReportLogsOnFailure, RetrySpec} import org.scalatest.BeforeAndAfterAll import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpecLike diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/vcsmanager/GitSpec.scala b/engine/language-server/src/test/scala/org/enso/languageserver/vcsmanager/GitSpec.scala index 5871a1fad934..3d3ef0e6a1a2 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/vcsmanager/GitSpec.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/vcsmanager/GitSpec.scala @@ -10,8 +10,7 @@ import org.eclipse.jgit.api.{Git => JGit} import org.eclipse.jgit.lib.Repository import org.eclipse.jgit.storage.file.FileRepositoryBuilder import org.eclipse.jgit.revwalk.RevCommit -import org.enso.logger.ReportLogsOnFailure -import org.enso.testkit.FlakySpec +import org.enso.testkit.{FlakySpec, ReportLogsOnFailure} import scala.concurrent.duration._ import scala.jdk.CollectionConverters._ diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/binary/BinaryFileManipulationTest.scala b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/binary/BinaryFileManipulationTest.scala index e7c5f69c374d..5257c44dabd2 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/binary/BinaryFileManipulationTest.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/binary/BinaryFileManipulationTest.scala @@ -5,8 +5,7 @@ import org.apache.commons.io.FileUtils import org.enso.languageserver.protocol.binary._ import org.enso.languageserver.util.binary.BinaryDecoder import org.enso.languageserver.websocket.binary.factory._ -import org.enso.logger.ReportLogsOnFailure -import org.enso.testkit.FlakySpec +import org.enso.testkit.{FlakySpec, ReportLogsOnFailure} import java.io.File import java.nio.ByteBuffer diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/binary/BinarySessionManagementTest.scala b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/binary/BinarySessionManagementTest.scala index 40079c775b99..39dfbef57ad9 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/binary/BinarySessionManagementTest.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/binary/BinarySessionManagementTest.scala @@ -12,8 +12,7 @@ import org.enso.languageserver.websocket.binary.factory.{ InboundMessageFactory, SessionInitFactory } -import org.enso.logger.ReportLogsOnFailure -import org.enso.testkit.FlakySpec +import org.enso.testkit.{FlakySpec, ReportLogsOnFailure} class BinarySessionManagementTest extends BaseBinaryServerTest diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/binary/VisualizationProtocolTest.scala b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/binary/VisualizationProtocolTest.scala index c0d28463ee1e..24b566e44445 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/binary/VisualizationProtocolTest.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/binary/VisualizationProtocolTest.scala @@ -12,8 +12,7 @@ import org.enso.languageserver.runtime.ContextRegistryProtocol.{ VisualizationUpdate } import org.enso.languageserver.util.binary.BinaryDecoder -import org.enso.logger.ReportLogsOnFailure -import org.enso.testkit.FlakySpec +import org.enso.testkit.{FlakySpec, ReportLogsOnFailure} import org.scalatest.concurrent.Eventually class VisualizationProtocolTest diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/BaseServerTest.scala b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/BaseServerTest.scala index bb874d78fcba..19cec97064bf 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/BaseServerTest.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/BaseServerTest.scala @@ -10,7 +10,8 @@ import org.enso.distribution.locking.ResourceManager import org.enso.distribution.{DistributionManager, LanguageHome} import org.enso.editions.updater.EditionManager import org.enso.editions.{EditionResolver, Editions} -import org.enso.filewatcher.{NoopWatcherFactory, WatcherAdapterFactory} +import org.enso.filewatcher.WatcherAdapterFactory +import org.enso.filewatcher.test.NoopWatcherFactory import org.enso.jsonrpc.test.JsonRpcServerTestKit import org.enso.jsonrpc.{ClientControllerFactory, ProtocolFactory} import org.enso.languageserver.TestClock diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/CapabilitiesTest.scala b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/CapabilitiesTest.scala index 3d1e32e7361c..fb6b80f69c1f 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/CapabilitiesTest.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/CapabilitiesTest.scala @@ -3,8 +3,8 @@ package org.enso.languageserver.websocket.json import io.circe.literal._ import io.circe.parser.parse import io.circe.syntax.EncoderOps -import org.enso.logger.ReportLogsOnFailure import org.enso.polyglot.runtime.Runtime.Api +import org.enso.testkit.ReportLogsOnFailure import java.util.UUID diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/ContextRegistryTest.scala b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/ContextRegistryTest.scala index 27011b9622ac..f4c44567feac 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/ContextRegistryTest.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/ContextRegistryTest.scala @@ -11,8 +11,8 @@ import org.enso.languageserver.session.JsonSession import org.enso.languageserver.websocket.json.{ ExecutionContextJsonMessages => json } -import org.enso.logger.ReportLogsOnFailure import org.enso.polyglot.runtime.Runtime.Api +import org.enso.testkit.ReportLogsOnFailure import java.util.UUID diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/FileManagerTest.scala b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/FileManagerTest.scala index 6635b76ac3b9..810d910acff9 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/FileManagerTest.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/FileManagerTest.scala @@ -7,9 +7,8 @@ import org.bouncycastle.util.encoders.Hex import org.enso.runner.common.ProfilingConfig import org.enso.languageserver.boot.StartupConfig import org.enso.languageserver.data._ -import org.enso.logger.ReportLogsOnFailure import org.enso.polyglot.runtime.Runtime.Api -import org.enso.testkit.RetrySpec +import org.enso.testkit.{ReportLogsOnFailure, RetrySpec} import java.io.File import java.nio.file.attribute.BasicFileAttributes diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/FileNotificationsTest.scala b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/FileNotificationsTest.scala index 07dab225cb59..dc4285b4aeaf 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/FileNotificationsTest.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/FileNotificationsTest.scala @@ -2,9 +2,8 @@ package org.enso.languageserver.websocket.json import java.io.File import io.circe.literal._ -import org.enso.logger.ReportLogsOnFailure import org.enso.polyglot.runtime.Runtime.Api -import org.enso.testkit.FlakySpec +import org.enso.testkit.{FlakySpec, ReportLogsOnFailure} import org.enso.text.editing.model.{Position, Range, TextEdit} class FileNotificationsTest diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/InputOutputRedirectionTest.scala b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/InputOutputRedirectionTest.scala index d295b3d333c8..7eb0c855a956 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/InputOutputRedirectionTest.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/InputOutputRedirectionTest.scala @@ -1,8 +1,7 @@ package org.enso.languageserver.websocket.json import io.circe.literal._ -import org.enso.logger.ReportLogsOnFailure import org.enso.polyglot.runtime.Runtime.Api -import org.enso.testkit.RetrySpec +import org.enso.testkit.{ReportLogsOnFailure, RetrySpec} class InputOutputRedirectionTest extends BaseServerTest diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/LibrariesTest.scala b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/LibrariesTest.scala index 76d4a009964f..84d5e24ba8cb 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/LibrariesTest.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/LibrariesTest.scala @@ -14,14 +14,14 @@ import org.enso.languageserver.libraries.{ } import org.enso.languageserver.runtime.TestComponentGroups import org.enso.librarymanager.published.bundles.LocalReadOnlyRepository -import org.enso.librarymanager.published.repository.{ +import org.enso.librarymanager.published.repository.LibraryManifest +import org.enso.librarymanager.test.published.repository.{ EmptyRepository, - ExampleRepository, - LibraryManifest + ExampleRepository } -import org.enso.logger.ReportLogsOnFailure import org.enso.pkg.{Config, Contact, Package, PackageManager} -import org.enso.testkit.FlakySpec +import org.enso.testkit.{FlakySpec, ReportLogsOnFailure} +import org.enso.version.BuildVersion import org.enso.yaml.YamlHelper import java.nio.file.Files @@ -698,7 +698,7 @@ class LibrariesTest "id": 0, "result": { "editionNames": [ - ${buildinfo.Info.currentEdition} + ${BuildVersion.currentEdition} ] } } @@ -729,7 +729,7 @@ class LibrariesTest "id": 0, "result": { "editionNames": [ - ${buildinfo.Info.currentEdition}, + ${BuildVersion.currentEdition}, "testlocal" ] } @@ -789,7 +789,7 @@ class LibrariesTest PublishedLibrary("Foo", "Bar", isCached = false) ) - val currentEditionName = buildinfo.Info.currentEdition + val currentEditionName = BuildVersion.currentEdition client.send(json""" { "jsonrpc": "2.0", "method": "editions/listDefinedLibraries", @@ -837,7 +837,7 @@ class LibrariesTest LibraryName("Standard", "Base") ) - val currentEditionName = buildinfo.Info.currentEdition + val currentEditionName = BuildVersion.currentEdition client.send(json""" { "jsonrpc": "2.0", "method": "editions/listDefinedComponents", @@ -868,7 +868,7 @@ class LibrariesTest "editions/resolve" should { "resolve the engine version associated with an edition" in { - val currentVersion = buildinfo.Info.ensoVersion + val currentVersion = BuildVersion.ensoVersion val client = getInitialisedWsClient() client.send(json""" @@ -901,7 +901,7 @@ class LibrariesTest "params": { "edition": { "type": "NamedEdition", - "editionName": ${buildinfo.Info.currentEdition} + "editionName": ${BuildVersion.currentEdition} } } } diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/MonitoringTest.scala b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/MonitoringTest.scala index 05e608b4748d..65850885337f 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/MonitoringTest.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/MonitoringTest.scala @@ -1,8 +1,7 @@ package org.enso.languageserver.websocket.json import io.circe.literal._ -import org.enso.logger.ReportLogsOnFailure -import org.enso.testkit.FlakySpec +import org.enso.testkit.{FlakySpec, ReportLogsOnFailure} class MonitoringTest extends BaseServerTest diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/ProfilingManagerTest.scala b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/ProfilingManagerTest.scala index 77852fcdebb8..300ce7d25026 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/ProfilingManagerTest.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/ProfilingManagerTest.scala @@ -2,7 +2,7 @@ package org.enso.languageserver.websocket.json import org.enso.distribution.DistributionManager import org.enso.languageserver.profiling.ProfilingManager -import org.enso.logger.ReportLogsOnFailure +import org.enso.testkit.ReportLogsOnFailure import java.nio.file.Files diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/ProjectSettingsManagerTest.scala b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/ProjectSettingsManagerTest.scala index c4ab3587b565..9f2329579be5 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/ProjectSettingsManagerTest.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/ProjectSettingsManagerTest.scala @@ -2,7 +2,8 @@ package org.enso.languageserver.websocket.json import io.circe.literal._ import org.enso.distribution.FileSystem -import org.enso.logger.ReportLogsOnFailure +import org.enso.testkit.ReportLogsOnFailure +import org.enso.version.BuildVersion import java.nio.file.Files @@ -40,7 +41,7 @@ class ProjectSettingsManagerTest { "jsonrpc": "2.0", "id": 0, "result": { - "parentEdition": ${buildinfo.Info.currentEdition}, + "parentEdition": ${BuildVersion.currentEdition}, "preferLocalLibraries": true } } diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/ReceivesTreeUpdatesHandlerTest.scala b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/ReceivesTreeUpdatesHandlerTest.scala index 42438f7cfe78..60fdf0b504eb 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/ReceivesTreeUpdatesHandlerTest.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/ReceivesTreeUpdatesHandlerTest.scala @@ -2,8 +2,7 @@ package org.enso.languageserver.websocket.json import java.nio.file.{Files, Paths} import io.circe.literal._ -import org.enso.logger.ReportLogsOnFailure -import org.enso.testkit.FlakySpec +import org.enso.testkit.{FlakySpec, ReportLogsOnFailure} class ReceivesTreeUpdatesHandlerTest extends BaseServerTest diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/RefactoringTest.scala b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/RefactoringTest.scala index 24c58ff658d0..a7608778c3a4 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/RefactoringTest.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/RefactoringTest.scala @@ -1,8 +1,8 @@ package org.enso.languageserver.websocket.json import io.circe.literal._ -import org.enso.logger.ReportLogsOnFailure import org.enso.polyglot.runtime.Runtime.Api +import org.enso.testkit.ReportLogsOnFailure import java.util.UUID diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/RuntimeTest.scala b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/RuntimeTest.scala index fa9411cf67c7..2718601e5aea 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/RuntimeTest.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/RuntimeTest.scala @@ -2,8 +2,8 @@ package org.enso.languageserver.websocket.json import io.circe.literal._ import org.enso.languageserver.runtime.TestComponentGroups -import org.enso.logger.ReportLogsOnFailure import org.enso.polyglot.runtime.Runtime.Api +import org.enso.testkit.ReportLogsOnFailure class RuntimeTest extends BaseServerTest with ReportLogsOnFailure { diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/SessionManagementTest.scala b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/SessionManagementTest.scala index b290b0f610aa..9ca80d072389 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/SessionManagementTest.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/SessionManagementTest.scala @@ -3,7 +3,7 @@ package org.enso.languageserver.websocket.json import io.circe.literal._ import io.circe.parser.parse import io.circe.syntax.EncoderOps -import org.enso.logger.ReportLogsOnFailure +import org.enso.testkit.ReportLogsOnFailure class SessionManagementTest extends BaseServerTest with ReportLogsOnFailure { diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/SuggestionsHandlerEventsTest.scala b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/SuggestionsHandlerEventsTest.scala index fe19731a6840..7fd4241ee110 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/SuggestionsHandlerEventsTest.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/SuggestionsHandlerEventsTest.scala @@ -3,11 +3,10 @@ package org.enso.languageserver.websocket.json import io.circe.literal._ import org.enso.languageserver.search.Suggestions import org.enso.languageserver.websocket.json.{SearchJsonMessages => json} -import org.enso.logger.ReportLogsOnFailure import org.enso.polyglot.{ExportedSymbol, ModuleExports} import org.enso.polyglot.data.Tree import org.enso.polyglot.runtime.Runtime.Api -import org.enso.testkit.FlakySpec +import org.enso.testkit.{FlakySpec, ReportLogsOnFailure} import scala.collection.immutable.ListSet diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/SuggestionsHandlerTest.scala b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/SuggestionsHandlerTest.scala index d3c07ea88b1a..6a795defcf2f 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/SuggestionsHandlerTest.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/SuggestionsHandlerTest.scala @@ -1,8 +1,7 @@ package org.enso.languageserver.websocket.json import io.circe.literal._ import org.enso.languageserver.websocket.json.{SearchJsonMessages => json} -import org.enso.logger.ReportLogsOnFailure -import org.enso.testkit.{FlakySpec, RetrySpec} +import org.enso.testkit.{FlakySpec, ReportLogsOnFailure, RetrySpec} class SuggestionsHandlerTest extends BaseServerTest diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/TextOperationsTest.scala b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/TextOperationsTest.scala index 5cab56b284cb..d0f667682e83 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/TextOperationsTest.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/TextOperationsTest.scala @@ -5,9 +5,8 @@ import io.circe.literal._ import org.enso.languageserver.event.{BufferClosed, JsonSessionTerminated} import org.enso.languageserver.filemanager.Path import org.enso.languageserver.session.JsonSession -import org.enso.logger.ReportLogsOnFailure import org.enso.polyglot.runtime.Runtime.Api -import org.enso.testkit.FlakySpec +import org.enso.testkit.{FlakySpec, ReportLogsOnFailure} import org.enso.text.editing.model import java.io.File diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/VcsManagerTest.scala b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/VcsManagerTest.scala index 102ebed8e1c0..3c1359a5e026 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/VcsManagerTest.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/VcsManagerTest.scala @@ -11,8 +11,7 @@ import org.enso.runner.common.ProfilingConfig import org.enso.languageserver.boot.StartupConfig import org.enso.languageserver.data._ import org.enso.languageserver.vcsmanager.VcsApi -import org.enso.logger.ReportLogsOnFailure -import org.enso.testkit.FlakySpec +import org.enso.testkit.{FlakySpec, ReportLogsOnFailure} import java.io.File import java.nio.charset.StandardCharsets diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/VisualizationOperationsTest.scala b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/VisualizationOperationsTest.scala index 95d07b6f2708..b6ea8f71502e 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/VisualizationOperationsTest.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/VisualizationOperationsTest.scala @@ -5,8 +5,8 @@ import org.enso.languageserver.runtime.{ MethodPointer, VisualizationConfiguration } -import org.enso.logger.ReportLogsOnFailure import org.enso.polyglot.runtime.Runtime.Api +import org.enso.testkit.ReportLogsOnFailure import org.enso.text.editing.model class VisualizationOperationsTest diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/WorkspaceOperationsTest.scala b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/WorkspaceOperationsTest.scala index 529ff7fff56e..388066ef12bc 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/WorkspaceOperationsTest.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/WorkspaceOperationsTest.scala @@ -1,10 +1,9 @@ package org.enso.languageserver.websocket.json -import buildinfo.Info import io.circe.literal.JsonStringContext import org.enso.languageserver.data.Config -import org.enso.logger.ReportLogsOnFailure -import org.enso.testkit.FlakySpec +import org.enso.testkit.{FlakySpec, ReportLogsOnFailure} +import org.enso.version.BuildVersion import java.io.{File, FileOutputStream} @@ -42,8 +41,8 @@ class WorkspaceOperationsTest "id": 1, "result": { "projectName" : "Standard", - "engineVersion" : ${Info.ensoVersion}, - "graalVersion" : ${Info.graalVersion} + "engineVersion" : ${BuildVersion.ensoVersion}, + "graalVersion" : ${BuildVersion.graalVersion} } } """) diff --git a/engine/launcher/src/main/scala/org/enso/launcher/Launcher.scala b/engine/launcher/src/main/scala/org/enso/launcher/Launcher.scala index 3a7040991799..d01786f68fdb 100644 --- a/engine/launcher/src/main/scala/org/enso/launcher/Launcher.scala +++ b/engine/launcher/src/main/scala/org/enso/launcher/Launcher.scala @@ -505,15 +505,16 @@ case class Launcher(cliOptions: GlobalCLIOptions) { hideEngineVersion: Boolean = false ): Int = { val useJSON = cliOptions.useJSON - val runtimeVersionParameter = - if (hideEngineVersion) None else Some(getEngineVersion(useJSON)) + val runtimeVersionParameter: java.util.List[VersionDescriptionParameter] = + if (hideEngineVersion) java.util.List.of() + else java.util.List.of(getEngineVersion(useJSON)) val versionDescription = VersionDescription.make( "Enso Launcher", - includeRuntimeJVMInfo = false, - enableNativeImageOSWorkaround = true, - additionalParameters = runtimeVersionParameter.toSeq, - customVersion = Some(CurrentVersion.version.toString) + false, + true, + runtimeVersionParameter, + CurrentVersion.version.toString ) println(versionDescription.asString(useJSON)) @@ -547,14 +548,16 @@ case class Launcher(cliOptions: GlobalCLIOptions) { else "Not installed." } - VersionDescriptionParameter( - humanReadableName = whichEngine match { - case WhichEngine.FromProject(name) => - s"Enso engine from project $name" - case WhichEngine.Default => "Current default Enso engine" - }, - jsonName = "runtime", - value = runtimeVersionString + val humanReadableName = whichEngine match { + case WhichEngine.FromProject(name) => + s"Enso engine from project $name" + case WhichEngine.Default => "Current default Enso engine" + } + val jsonName = "runtime" + new VersionDescriptionParameter( + humanReadableName, + jsonName, + runtimeVersionString ) } diff --git a/engine/launcher/src/main/scala/org/enso/launcher/cli/InternalOpts.scala b/engine/launcher/src/main/scala/org/enso/launcher/cli/InternalOpts.scala index b67071a877d4..4dd28754a19a 100644 --- a/engine/launcher/src/main/scala/org/enso/launcher/cli/InternalOpts.scala +++ b/engine/launcher/src/main/scala/org/enso/launcher/cli/InternalOpts.scala @@ -14,6 +14,7 @@ import org.enso.distribution.config.DefaultVersion._ import org.enso.launcher.distribution.LauncherEnvironment import org.enso.launcher.upgrade.LauncherUpgrader import org.enso.launcher.releases.LauncherRepository +import org.enso.version.BuildVersion /** Implements internal options that the launcher may use when running another * instance of itself. @@ -84,7 +85,7 @@ object InternalOpts { * In release mode, this is an identity function, since these internal options are not permitted anyway. */ def removeInternalTestOptions(args: Seq[String]): Seq[String] = - if (buildinfo.Info.isRelease) args + if (BuildVersion.isRelease) args else { (removeOption(EMULATE_VERSION) andThen removeOption(EMULATE_LOCATION))( args @@ -193,7 +194,7 @@ object InternalOpts { * Disabled in release mode. */ private def testingOptions: Opts[Unit] = - if (buildinfo.Info.isRelease) Opts.pure(()) + if (BuildVersion.isRelease) Opts.pure(()) else { val emulateVersion = Opts.optionalParameter[SemVer](EMULATE_VERSION, "VERSION", "").hidden diff --git a/engine/launcher/src/main/scala/org/enso/launcher/cli/LauncherLogging.scala b/engine/launcher/src/main/scala/org/enso/launcher/cli/LauncherLogging.scala index a49ebdc435f5..4d5f590256ac 100644 --- a/engine/launcher/src/main/scala/org/enso/launcher/cli/LauncherLogging.scala +++ b/engine/launcher/src/main/scala/org/enso/launcher/cli/LauncherLogging.scala @@ -2,9 +2,9 @@ package org.enso.launcher.cli import java.nio.file.Path import org.enso.launcher.distribution.DefaultManagers -import org.enso.logger.LoggerSetup import org.slf4j.event.Level -import org.enso.logging.LoggingSetupHelper +import org.enso.logging.config.LoggerSetup +import org.enso.logging.service.LoggingSetupHelper import scala.concurrent.ExecutionContext.Implicits.global /** Manages setting up the logging service within the launcher. diff --git a/engine/launcher/src/main/scala/org/enso/launcher/distribution/LauncherEnvironment.scala b/engine/launcher/src/main/scala/org/enso/launcher/distribution/LauncherEnvironment.scala index 8743232dc1a6..03d258933e41 100644 --- a/engine/launcher/src/main/scala/org/enso/launcher/distribution/LauncherEnvironment.scala +++ b/engine/launcher/src/main/scala/org/enso/launcher/distribution/LauncherEnvironment.scala @@ -3,6 +3,7 @@ package org.enso.launcher.distribution import java.nio.file.Path import com.typesafe.scalalogging.Logger import org.enso.distribution.Environment +import org.enso.version.BuildVersion /** Default [[Environment]] to use in the launcher. * @@ -24,7 +25,7 @@ object LauncherEnvironment extends Environment { * possible, before [[getPathToRunningExecutable]] is called. */ def internalOverrideExecutableLocation(newLocation: Path): Unit = - if (buildinfo.Info.isRelease) { + if (BuildVersion.isRelease) { throw new IllegalStateException( "Internal testing function internalOverrideExecutableLocation used " + "in a release build." diff --git a/engine/launcher/src/main/scala/org/enso/launcher/releases/LauncherRepository.scala b/engine/launcher/src/main/scala/org/enso/launcher/releases/LauncherRepository.scala index e74492f6b968..86aa35c38553 100644 --- a/engine/launcher/src/main/scala/org/enso/launcher/releases/LauncherRepository.scala +++ b/engine/launcher/src/main/scala/org/enso/launcher/releases/LauncherRepository.scala @@ -16,6 +16,7 @@ import org.enso.runtimeversionmanager.releases.{ ReleaseProvider, SimpleReleaseProvider } +import org.enso.version.BuildVersion /** Represents the default Enso repository providing releases of the launcher. * @@ -60,7 +61,7 @@ object LauncherRepository { fakeRepositoryRoot: Path, shouldWaitForAssets: Boolean ): Unit = - if (buildinfo.Info.isRelease) + if (BuildVersion.isRelease) throw new IllegalStateException( "Internal testing function internalUseFakeRepository used in a " + "release build." diff --git a/engine/launcher/src/main/scala/org/enso/launcher/releases/fallback/staticwebsite/FallbackManifest.scala b/engine/launcher/src/main/scala/org/enso/launcher/releases/fallback/staticwebsite/FallbackManifest.scala index c9fadf82b9c3..4fc54e66ae79 100644 --- a/engine/launcher/src/main/scala/org/enso/launcher/releases/fallback/staticwebsite/FallbackManifest.scala +++ b/engine/launcher/src/main/scala/org/enso/launcher/releases/fallback/staticwebsite/FallbackManifest.scala @@ -1,6 +1,6 @@ package org.enso.launcher.releases.fallback.staticwebsite -import org.enso.yaml.YamlDecoder +import org.enso.scala.yaml.YamlDecoder import org.yaml.snakeyaml.nodes.{MappingNode, Node} import java.io.StringReader diff --git a/engine/launcher/src/main/scala/org/enso/launcher/releases/launcher/LauncherManifest.scala b/engine/launcher/src/main/scala/org/enso/launcher/releases/launcher/LauncherManifest.scala index 4654b57755f3..36bd08f5bce9 100644 --- a/engine/launcher/src/main/scala/org/enso/launcher/releases/launcher/LauncherManifest.scala +++ b/engine/launcher/src/main/scala/org/enso/launcher/releases/launcher/LauncherManifest.scala @@ -3,8 +3,9 @@ package org.enso.launcher.releases.launcher import org.enso.launcher.releases.launcher import org.enso.semver.SemVer import org.enso.runtimeversionmanager.releases.ReleaseProviderException +import org.enso.scala.yaml.YamlDecoder import org.enso.semver.SemVerYaml._ -import org.enso.yaml.{ParseError, YamlDecoder} +import org.enso.yaml.ParseError import org.yaml.snakeyaml.error.YAMLException import org.yaml.snakeyaml.nodes.{MappingNode, Node} diff --git a/engine/launcher/src/test/scala/org/enso/launcher/NativeLauncherSpec.scala b/engine/launcher/src/test/scala/org/enso/launcher/NativeLauncherSpec.scala index ec8a55199333..53091610716f 100644 --- a/engine/launcher/src/test/scala/org/enso/launcher/NativeLauncherSpec.scala +++ b/engine/launcher/src/test/scala/org/enso/launcher/NativeLauncherSpec.scala @@ -1,7 +1,7 @@ package org.enso.launcher -import buildinfo.Info import io.circe.parser +import org.enso.version.BuildVersion class NativeLauncherSpec extends NativeTest { "native launcher" should { @@ -12,15 +12,18 @@ class NativeLauncherSpec extends NativeTest { timeoutSeconds = 30 ) run should returnSuccess + val out = run.stdout - val version = parser.parse(run.stdout).getOrElse { - throw new RuntimeException("Version should be a valid JSON string.") + val version = parser.parse(out).getOrElse { + throw new RuntimeException( + "Version should be a valid JSON string. Got: " + out + ) } version.asObject.get .apply("version") .get .asString - .get shouldEqual Info.ensoVersion + .get shouldEqual BuildVersion.ensoVersion } } } diff --git a/engine/launcher/src/test/scala/org/enso/launcher/upgrade/UpgradeSpec.scala b/engine/launcher/src/test/scala/org/enso/launcher/upgrade/UpgradeSpec.scala index 5c57cabc027a..7e941bcbbc73 100644 --- a/engine/launcher/src/test/scala/org/enso/launcher/upgrade/UpgradeSpec.scala +++ b/engine/launcher/src/test/scala/org/enso/launcher/upgrade/UpgradeSpec.scala @@ -10,6 +10,7 @@ import org.enso.cli.OS import org.enso.launcher._ import org.enso.testkit.{FlakySpec, WithTemporaryDirectory} import org.enso.process.{RunResult, WrappedProcess} +import org.enso.version.BuildVersion import org.scalatest.exceptions.TestFailedException import org.scalatest.{BeforeAndAfterAll, Ignore, OptionValues} @@ -181,7 +182,7 @@ class UpgradeSpec "not downgrade without being explicitly asked to do so" taggedAs Flaky in { // precondition for the test to make sense SemVer - .parse(buildinfo.Info.ensoVersion) + .parse(BuildVersion.ensoVersion) .get .isGreaterThan(SemVer.of(0, 0, 4)) shouldBe true @@ -195,7 +196,7 @@ class UpgradeSpec "(and update necessary files)" taggedAs Flaky in { // precondition for the test to make sense SemVer - .parse(buildinfo.Info.ensoVersion) + .parse(BuildVersion.ensoVersion) .get .isGreaterThan(SemVer.of(0, 0, 4)) shouldBe true diff --git a/engine/runner/src/main/java/org/enso/runner/CurrentVersion.java b/engine/runner/src/main/java/org/enso/runner/CurrentVersion.java new file mode 100644 index 000000000000..31dd8177f23b --- /dev/null +++ b/engine/runner/src/main/java/org/enso/runner/CurrentVersion.java @@ -0,0 +1,47 @@ +package org.enso.runner; + +import org.enso.semver.SemVer; +import org.enso.version.BuildVersion; + +/** + * A helper class that allows to access current version of the runner. + * + *

The current version is parsed from {@link BuildVersion}, but in development mode it can be + * overridden by setting `enso.version.override` property. This is used in project-manager tests to + * override the version of projects created using the runner. + */ +final class CurrentVersion { + private CurrentVersion() {} + + private static SemVer version = null; + + public static SemVer getVersion() { + if (version == null) { + version = computeVersion(); + } + return version; + } + + private static SemVer computeVersion() { + var buildVersion = + (SemVer) + SemVer.parse(BuildVersion.ensoVersion()) + .getOrElse( + () -> { + throw new IllegalStateException( + "Fatal error: Enso version included in buildinfo is not a valid " + + "semver string, this should never happen."); + }); + if (!BuildVersion.isRelease()) { + var overrideVersionProp = System.getProperty("enso.version.override"); + if (overrideVersionProp == null) { + return buildVersion; + } + var parseRes = SemVer.parse(overrideVersionProp); + if (parseRes.isSuccess()) { + return parseRes.get(); + } + } + return buildVersion; + } +} diff --git a/engine/runner/src/main/java/org/enso/runner/DependencyPreinstaller.java b/engine/runner/src/main/java/org/enso/runner/DependencyPreinstaller.java new file mode 100644 index 000000000000..ee77908dbfd7 --- /dev/null +++ b/engine/runner/src/main/java/org/enso/runner/DependencyPreinstaller.java @@ -0,0 +1,138 @@ +package org.enso.runner; + +import java.io.File; +import java.util.HashSet; +import java.util.Set; +import java.util.stream.Collectors; +import org.enso.cli.ProgressBar; +import org.enso.cli.task.ProgressReporter; +import org.enso.cli.task.TaskProgress; +import org.enso.distribution.DistributionManager; +import org.enso.distribution.Environment; +import org.enso.distribution.LanguageHome; +import org.enso.distribution.locking.LockUserInterface; +import org.enso.distribution.locking.Resource; +import org.enso.distribution.locking.ResourceManager; +import org.enso.distribution.locking.ThreadSafeFileLockManager; +import org.enso.editions.DefaultEdition; +import org.enso.editions.EditionResolver; +import org.enso.editions.updater.EditionManager; +import org.enso.librarymanager.DefaultLibraryProvider; +import org.enso.librarymanager.LibraryResolver; +import org.enso.librarymanager.dependencies.Dependency; +import org.enso.librarymanager.dependencies.DependencyResolver; +import org.enso.librarymanager.published.PublishedLibraryCache; +import org.enso.pkg.PackageManager; +import org.enso.runner.common.CompilerBasedDependencyExtractor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.slf4j.event.Level; +import scala.Some; + +/** A helper to preinstall all dependencies of a project. */ +class DependencyPreinstaller { + private DependencyPreinstaller() {} + + private static final Logger logger = LoggerFactory.getLogger(DependencyPreinstaller.class); + + static void preinstallDependencies(File projectRoot, Level logLevel) { + var pkg = PackageManager.Default().loadPackage(projectRoot).get(); + var dependencyExtractor = new CompilerBasedDependencyExtractor(logLevel); + var environment = new Environment() {}; + var languageHome = LanguageHome.detectFromExecutableLocation(environment); + + var distributionManager = new DistributionManager(environment); + var lockManager = new ThreadSafeFileLockManager(distributionManager.paths().locks()); + var resourceManager = new ResourceManager(lockManager); + var editionProvider = + EditionManager.makeEditionProvider(distributionManager, Some.apply(languageHome), true); + var editionResolver = new EditionResolver(editionProvider); + var editionOpt = + editionResolver.resolve( + pkg.getConfig().edition().getOrElse(DefaultEdition::getDefaultEdition)); + if (editionOpt.isLeft()) { + @SuppressWarnings("deprecation") + var ex = editionOpt.left().get(); + throw new RuntimeException("Cannot resolve current project's editionOpt: " + ex.getMessage()); + } + @SuppressWarnings("deprecation") + var edition = editionOpt.right().get(); + + var preferLocalLibraries = pkg.getConfig().preferLocalLibraries(); + var progressReporter = + new ProgressReporter() { + @Override + public void trackProgress(String message, TaskProgress task) { + logger.info(message); + ProgressBar.waitWithProgress(task); + } + }; + var lockUserInterface = + new LockUserInterface() { + @Override + public void startWaitingForResource(Resource resource) { + logger.warn(resource.waitMessage()); + } + + @Override + public void finishWaitingForResource(Resource resource) {} + }; + var providers = + DefaultLibraryProvider.makeProviders( + distributionManager, + resourceManager, + lockUserInterface, + progressReporter, + Some.apply(languageHome), + Some.apply(projectRoot.toPath())); + var localLibraryProvider = providers._1; + var publishedLibraryProvider = providers._2; + + var dependencyResolver = + new DependencyResolver( + localLibraryProvider, + (PublishedLibraryCache) publishedLibraryProvider, + edition, + preferLocalLibraries, + new LibraryResolver(localLibraryProvider), + dependencyExtractor); + var installer = + new DefaultLibraryProvider( + localLibraryProvider, publishedLibraryProvider, edition, preferLocalLibraries); + + var immediateDependencies = dependencyExtractor.findDependencies(pkg); + logger.trace("The project imports the following libraries: {}", immediateDependencies); + Set allDependencies = new HashSet<>(); + immediateDependencies.foreach( + name -> { + var transitiveDeps = dependencyResolver.findDependencies(name).get(); + transitiveDeps.foreach( + transitiveDep -> { + allDependencies.add(transitiveDep); + return null; + }); + return null; + }); + logger.trace("The project depends on: {}", allDependencies); + + var dependenciesToInstall = + allDependencies.stream() + .filter(dep -> !dep.isCached()) + .collect(Collectors.toUnmodifiableSet()); + if (dependenciesToInstall.isEmpty()) { + logger.info("All {} dependencies are installed", allDependencies.size()); + } else { + logger.info("Will install {} dependencies", dependenciesToInstall.size()); + for (var depToInstall : dependenciesToInstall) { + var foundOpt = + installer.findSpecificLibraryVersion( + depToInstall.libraryName(), depToInstall.version()); + if (foundOpt.isLeft()) { + @SuppressWarnings("deprecation") + var err = foundOpt.left().get(); + throw new RuntimeException("Some dependencies could not be installed: [" + err + "]."); + } + } + } + } +} diff --git a/engine/runner/src/main/java/org/enso/runner/Main.java b/engine/runner/src/main/java/org/enso/runner/Main.java index ea2365f38a4a..6ce937cbb306 100644 --- a/engine/runner/src/main/java/org/enso/runner/Main.java +++ b/engine/runner/src/main/java/org/enso/runner/Main.java @@ -1,6 +1,5 @@ package org.enso.runner; -import buildinfo.Info; import java.io.File; import java.io.IOException; import java.net.URI; @@ -44,6 +43,7 @@ import org.enso.runner.common.LanguageServerApi; import org.enso.runner.common.ProfilingConfig; import org.enso.runner.common.WrongOption; +import org.enso.version.BuildVersion; import org.enso.version.VersionDescription; import org.graalvm.polyglot.PolyglotException; import org.graalvm.polyglot.PolyglotException.StackFrame; @@ -103,7 +103,7 @@ public class Main { Main() {} private static boolean isDevBuild() { - return Info.ensoVersion().matches(".+-SNAPSHOT$"); + return BuildVersion.ensoVersion().matches(".+-SNAPSHOT$"); } private static Option.Builder cliOptionBuilder() { @@ -974,13 +974,9 @@ private static MessageTransport replTransport() { * @param useJson whether the output should be JSON or human-readable. */ private void displayVersion(boolean useJson) { + var customVersion = CurrentVersion.getVersion().toString(); var versionDescription = - VersionDescription.make( - "Enso Compiler and Runtime", - true, - VersionDescription.make$default$3(), - VersionDescription.make$default$4(), - scala.Option.apply(CurrentVersion.version().toString())); + VersionDescription.make("Enso Compiler and Runtime", true, false, List.of(), customVersion); println(versionDescription.asString(useJson)); } @@ -1068,7 +1064,7 @@ final void mainEntry(CommandLine line, Level logLevel, boolean logMasking) throw ProjectUploader.uploadProject( projectRoot.get(), line.getOptionValue(UPLOAD_OPTION), - scala.Option.apply(line.getOptionValue(AUTH_TOKEN)), + line.getOptionValue(AUTH_TOKEN), !line.hasOption(HIDE_PROGRESS), logLevel); throw exitSuccess(); @@ -1426,7 +1422,12 @@ private Level setupLogging(CommandLine line, boolean[] logMasking) { scala.Option.apply(line.getOptionValue(LOG_LEVEL)) .map(this::parseLogLevel) .getOrElse(() -> defaultLogLevel); - var connectionUri = scala.Option.apply(line.getOptionValue(LOGGER_CONNECT)).map(this::parseUri); + URI connectionUri; + if (line.getOptionValue(LOGGER_CONNECT) != null) { + connectionUri = parseUri(line.getOptionValue(LOGGER_CONNECT)); + } else { + connectionUri = null; + } logMasking[0] = !line.hasOption(NO_LOG_MASKING); RunnerLogging.setup(connectionUri, logLevel, logMasking[0]); return logLevel; diff --git a/engine/runner/src/main/java/org/enso/runner/ProjectUploader.java b/engine/runner/src/main/java/org/enso/runner/ProjectUploader.java new file mode 100644 index 000000000000..42faf583f1b3 --- /dev/null +++ b/engine/runner/src/main/java/org/enso/runner/ProjectUploader.java @@ -0,0 +1,73 @@ +package org.enso.runner; + +import java.nio.file.Path; +import org.enso.cli.ProgressBar; +import org.enso.cli.task.ProgressReporter; +import org.enso.cli.task.TaskProgress; +import org.enso.libraryupload.LibraryUploader; +import org.enso.libraryupload.auth.NoAuthorization$; +import org.enso.libraryupload.auth.SimpleHeaderToken; +import org.enso.libraryupload.auth.Token; +import org.enso.pkg.PackageManager; +import org.enso.runner.common.CompilerBasedDependencyExtractor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.slf4j.event.Level; + +final class ProjectUploader { + private ProjectUploader() {} + + private static final Logger logger = LoggerFactory.getLogger(ProjectUploader.class); + + /** + * Uploads a project to a library repository + * + * @param projectRoot path to the root of the project + * @param uploadUrl URL of upload endpoint of the repository to upload to + * @param authToken an optional token used for authentication in the repository + * @param showProgress specifies if CLI progress bars should be displayed showing progress of + * compression and upload + * @param logLevel the log level to use for the context gathering dependencies + */ + static void uploadProject( + Path projectRoot, String uploadUrl, String authToken, boolean showProgress, Level logLevel) { + var progressReporter = + new ProgressReporter() { + @Override + public void trackProgress(String message, TaskProgress task) { + logger.info(message); + if (showProgress) { + ProgressBar.waitWithProgress(task); + } + } + }; + + Token token; + if (authToken != null) { + token = new SimpleHeaderToken(authToken); + } else { + token = NoAuthorization$.MODULE$; + } + + var dependencyExtractor = new CompilerBasedDependencyExtractor(logLevel); + var libraryUploader = new LibraryUploader(dependencyExtractor); + var uploadedRes = + libraryUploader.uploadLibrary(projectRoot, uploadUrl, token, progressReporter); + uploadedRes.get(); + } + + /** + * Updates manifest of the project. + * + * @param projectRoot path to the root of the project + * @param logLevel the log level to use for the context gathering dependencies + */ + static void updateManifest(Path projectRoot, Level logLevel) { + var pkg = PackageManager.Default().loadPackage(projectRoot.toFile()).get(); + + var dependencyExtractor = new CompilerBasedDependencyExtractor(logLevel); + var libraryUploader = new LibraryUploader(dependencyExtractor); + var uploadedRes = libraryUploader.updateManifest(pkg); + uploadedRes.get(); + } +} diff --git a/engine/runner/src/main/java/org/enso/runner/Repl.java b/engine/runner/src/main/java/org/enso/runner/Repl.java new file mode 100644 index 000000000000..840ee9e73ccd --- /dev/null +++ b/engine/runner/src/main/java/org/enso/runner/Repl.java @@ -0,0 +1,57 @@ +package org.enso.runner; + +import org.enso.polyglot.debugger.ReplExecutor; +import org.enso.polyglot.debugger.SessionManager; +import scala.runtime.Nothing$; + +final class Repl implements SessionManager { + private final ReplIO replIO; + + Repl(ReplIO replIO) { + this.replIO = replIO; + } + + @Override + public Nothing$ startSession(ReplExecutor executor) { + var continueRunning = true; + while (continueRunning) { + var input = replIO.readLine("> "); + switch (input) { + case EndOfInput eoi -> continueRunning = false; + case Line line when !line.getLine().isEmpty() -> { + var content = line.getLine(); + switch (content) { + case ":list", ":l" -> { + var bindings = executor.listBindings(); + bindings.foreachEntry((name, value) -> { + replIO.println(name + " = " + value); + return null; + }); + } + case ":quit", "q" -> { + continueRunning = false; + } + default -> { + var result = executor.evaluate(content); + if (result.isLeft()) { + @SuppressWarnings("deprecation") + var ex = result.left().get(); + replIO.println("Evaluation failed with: " + ex.getMessage()); + replIO.printStackTrace(ex); + } else { + @SuppressWarnings("deprecation") + var objectRepr = result.right().get(); + replIO.println(">>> " + objectRepr); + } + } + } + } + default -> { + // nop + } + } + } + + return (Nothing$) executor.exit(); + } +} diff --git a/engine/runner/src/main/java/org/enso/runner/ReplIO.java b/engine/runner/src/main/java/org/enso/runner/ReplIO.java new file mode 100644 index 000000000000..4e9460fb0e71 --- /dev/null +++ b/engine/runner/src/main/java/org/enso/runner/ReplIO.java @@ -0,0 +1,48 @@ +package org.enso.runner; + +import java.io.IOException; +import java.io.PrintWriter; +import java.io.Writer; + +interface ReplIO { + /** + * Ask user for a line of input, using given prompt + * + * @param prompt the prompt to display to the user + * @return the user-provided input + */ + UserInput readLine(String prompt); + + /** + * Print a line to the REPL. + * + * @param contents contents of the line to print + */ + void println(String contents); + + /** + * Print a stack trace to the REPL. + * + * @param exception which stack trace is to be printed + */ + default void printStackTrace(Exception exception) { + var traceBuilder = new StringBuilder(); + var traceWriter = + new Writer() { + @Override + public void write(char[] cbuf, int off, int len) { + for (char c : cbuf) { + traceBuilder.append(c); + } + } + + @Override + public void flush() throws IOException {} + + @Override + public void close() throws IOException {} + }; + exception.printStackTrace(new PrintWriter(traceWriter)); + System.out.println(traceBuilder); + } +} diff --git a/engine/runner/src/main/java/org/enso/runner/RunnerLogging.java b/engine/runner/src/main/java/org/enso/runner/RunnerLogging.java new file mode 100644 index 000000000000..24b1169f7f90 --- /dev/null +++ b/engine/runner/src/main/java/org/enso/runner/RunnerLogging.java @@ -0,0 +1,80 @@ +package org.enso.runner; + +import java.net.URI; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import org.enso.logger.masking.Masking; +import org.enso.logging.config.LoggerSetup; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.slf4j.event.Level; + +final class RunnerLogging { + private RunnerLogging() {} + + private static final Logger logger = LoggerFactory.getLogger(RunnerLogging.class); + + /** + * Sets up the runner's logging service. + * + *

If `connectionUri` is provided it tries to connect to a logging service server and pass logs + * to it. If it is not provided, or the connection could not be established, falls back to logging + * to standard error output. + * + * @param connectionUri optional uri of logging service server to connect to + * @param logLevel log level to use for the runner and runtime + * @param logMasking switches log masking on and off + */ + static void setup(URI connectionUri, Level logLevel, boolean logMasking) { + Masking.setup(logMasking); + var loggerSetup = LoggerSetup.get(); + var executorService = Executors.newSingleThreadExecutor(); + try { + setupImpl(connectionUri, logLevel, executorService, loggerSetup); + } finally { + executorService.shutdown(); + } + } + + private static void setupImpl( + URI connectionUri, Level logLevel, ExecutorService executorService, LoggerSetup loggerSetup) { + if (connectionUri != null) { + var future = + executorService.submit( + () -> + loggerSetup.setupSocketAppender( + logLevel, connectionUri.getHost(), connectionUri.getPort())); + try { + var success = future.get(); + if (success) { + logger.trace("Connected to logging service at [{}]", connectionUri); + return; + } else { + throw new RuntimeException("Failed to connect to logging service"); + } + } catch (InterruptedException | ExecutionException e) { + System.err.println( + "Failed to connect to the logging service server, " + "falling back to local logging."); + } + } + if (!setupConsoleAppender(logLevel, executorService, loggerSetup)) { + System.err.println("Failed to initialize logging infrastructure"); + } + } + + static void tearDown() { + LoggerSetup.get().teardown(); + } + + private static boolean setupConsoleAppender( + Level logLevel, ExecutorService executorService, LoggerSetup loggerSetup) { + var future = executorService.submit(() -> loggerSetup.setupConsoleAppender(logLevel)); + try { + return future.get(); + } catch (ExecutionException | InterruptedException e) { + System.err.println("Failed to initialize console appender: " + e.getMessage()); + return false; + } + } +} diff --git a/engine/runner/src/main/java/org/enso/runner/TerminalIO.java b/engine/runner/src/main/java/org/enso/runner/TerminalIO.java new file mode 100644 index 000000000000..3a1c2525be79 --- /dev/null +++ b/engine/runner/src/main/java/org/enso/runner/TerminalIO.java @@ -0,0 +1,66 @@ +package org.enso.runner; + +import java.io.IOException; +import java.nio.file.Path; +import org.jline.reader.EndOfFileException; +import org.jline.reader.LineReader; +import org.jline.reader.LineReaderBuilder; +import org.jline.reader.UserInterruptException; +import org.jline.reader.impl.DefaultParser; +import org.jline.reader.impl.history.DefaultHistory; +import org.jline.terminal.Terminal; +import org.jline.terminal.TerminalBuilder; + +final class TerminalIO implements ReplIO { + private final Terminal terminal; + private final LineReader lineReader; + + TerminalIO(Path historyFilePath) { + // jline uses the class loader from `Thread.currentThread().getContextClassLoader()` to + // load services. We need to override the context class loader to be `IsolatedClassLoader` + // from the runner.jar class loader. + var prevClassLoader = Thread.currentThread().getContextClassLoader(); + Thread.currentThread().setContextClassLoader(getClass().getClassLoader()); + try { + terminal = TerminalBuilder.builder().system(true).build(); + } catch (IOException e) { + throw new IllegalStateException(e); + } + var parser = new DefaultParser(); + parser.setEscapeChars(null); + var history = new DefaultHistory(); + lineReader = + LineReaderBuilder.builder() + .parser(parser) + .variable(LineReader.HISTORY_FILE, historyFilePath) + .history(history) + .terminal(terminal) + .build(); + Thread.currentThread().setContextClassLoader(prevClassLoader); + + Runtime.getRuntime() + .addShutdownHook( + new Thread( + () -> { + try { + history.save(); + } catch (IOException e) { + System.err.println("Failed to save REPL history: " + e); + } + })); + } + + @Override + public UserInput readLine(String prompt) { + try { + return new Line(lineReader.readLine(prompt)); + } catch (UserInterruptException | EndOfFileException e) { + return new EndOfInput(); + } + } + + @Override + public void println(String contents) { + terminal.writer().println(contents); + } +} diff --git a/engine/runner/src/main/java/org/enso/runner/UserInput.java b/engine/runner/src/main/java/org/enso/runner/UserInput.java new file mode 100644 index 000000000000..638422e58398 --- /dev/null +++ b/engine/runner/src/main/java/org/enso/runner/UserInput.java @@ -0,0 +1,17 @@ +package org.enso.runner; + +sealed class UserInput permits EndOfInput, Line {} + +final class EndOfInput extends UserInput {} + +final class Line extends UserInput { + private final String line; + + Line(String line) { + this.line = line; + } + + public String getLine() { + return line; + } +} diff --git a/engine/runner/src/main/scala/org/enso/runner/CurrentVersion.scala b/engine/runner/src/main/scala/org/enso/runner/CurrentVersion.scala deleted file mode 100644 index c7adb0d92c42..000000000000 --- a/engine/runner/src/main/scala/org/enso/runner/CurrentVersion.scala +++ /dev/null @@ -1,32 +0,0 @@ -package org.enso.runner - -import org.enso.semver.SemVer - -/** A helper object that allows to access current version of the runner. - * - * The current version is parsed from [[buildinfo]], but in development mode it - * can be overridden by setting `enso.version.override` property. This is used - * in project-manager tests to override the version of projects created using - * the runner. - */ -object CurrentVersion { - - /** The version that the application should report. */ - lazy val version: SemVer = computeVersion() - - private def computeVersion(): SemVer = { - val buildVersion = - SemVer.parse(buildinfo.Info.ensoVersion).getOrElse { - throw new IllegalStateException( - "Fatal error: Enso version included in buildinfo is not a valid " + - "semver string, this should never happen." - ) - } - if (buildinfo.Info.isRelease) buildVersion - else - sys.props - .get("enso.version.override") - .flatMap(v => SemVer.parse(v).toOption) - .getOrElse(buildVersion) - } -} diff --git a/engine/runner/src/main/scala/org/enso/runner/DependencyPreinstaller.scala b/engine/runner/src/main/scala/org/enso/runner/DependencyPreinstaller.scala deleted file mode 100644 index a26ebc232322..000000000000 --- a/engine/runner/src/main/scala/org/enso/runner/DependencyPreinstaller.scala +++ /dev/null @@ -1,132 +0,0 @@ -package org.enso.runner - -import org.slf4j.event.Level -import com.typesafe.scalalogging.Logger -import org.enso.cli.ProgressBar -import org.enso.cli.task.{ProgressReporter, TaskProgress} -import org.enso.distribution.locking.{ - LockUserInterface, - Resource, - ResourceManager, - ThreadSafeFileLockManager -} -import org.enso.distribution.{DistributionManager, Environment, LanguageHome} -import org.enso.editions.updater.EditionManager -import org.enso.editions.{DefaultEdition, EditionResolver} -import org.enso.runner.common.CompilerBasedDependencyExtractor -import org.enso.librarymanager.dependencies.DependencyResolver -import org.enso.librarymanager.{DefaultLibraryProvider, LibraryResolver} -import org.enso.pkg.PackageManager - -import java.io.File - -/** A helper to preinstall all dependencies of a project. */ -object DependencyPreinstaller { - - /** Parses the project to find out its direct dependencies, uses the resolver - * to find all transitive dependencies and ensures that all of them are - * installed. - */ - def preinstallDependencies(projectRoot: File, logLevel: Level): Unit = { - val logger = Logger[DependencyPreinstaller.type] - val pkg = PackageManager.Default.loadPackage(projectRoot).get - - val dependencyExtractor = new CompilerBasedDependencyExtractor(logLevel) - val environment = new Environment {} - val languageHome = LanguageHome.detectFromExecutableLocation(environment) - - val distributionManager = new DistributionManager(environment) - val lockManager = new ThreadSafeFileLockManager( - distributionManager.paths.locks - ) - val resourceManager = new ResourceManager(lockManager) - - val editionProvider = EditionManager.makeEditionProvider( - distributionManager, - Some(languageHome), - true - ) - val editionResolver = EditionResolver(editionProvider) - val edition = editionResolver - .resolve( - pkg.getConfig().edition.getOrElse(DefaultEdition.getDefaultEdition) - ) match { - case Left(error) => - throw new RuntimeException( - s"Cannot resolve current project's edition: ${error.getMessage}" - ) - case Right(value) => value - } - - val preferLocalLibraries = pkg.getConfig().preferLocalLibraries - - val (localLibraryProvider, publishedLibraryProvider) = - DefaultLibraryProvider.makeProviders( - distributionManager, - resourceManager, - new LockUserInterface { - override def startWaitingForResource(resource: Resource): Unit = - logger.warn(resource.waitMessage) - - override def finishWaitingForResource(resource: Resource): Unit = () - }, - new ProgressReporter { - override def trackProgress( - message: String, - task: TaskProgress[_] - ): Unit = { - logger.info(message) - ProgressBar.waitWithProgress(task) - } - }, - languageHome = Some(languageHome), - projectRoot = Some(projectRoot.toPath) - ) - - val dependencyResolver = new DependencyResolver( - localLibraryProvider, - publishedLibraryProvider, - edition, - preferLocalLibraries, - LibraryResolver(localLibraryProvider), - dependencyExtractor - ) - val installer = new DefaultLibraryProvider( - localLibraryProvider, - publishedLibraryProvider, - edition, - preferLocalLibraries - ) - val immediateDependencies = dependencyExtractor.findDependencies(pkg) - logger.trace( - s"The project imports the following libraries: $immediateDependencies." - ) - val allDependencies = immediateDependencies.flatMap { name => - dependencyResolver.findDependencies(name).get - } - logger.trace(s"The project depends on: $allDependencies.") - - val dependenciesToInstall = allDependencies.filter(!_.isCached) - - if (dependenciesToInstall.isEmpty) { - logger.info(s"All ${allDependencies.size} dependencies are installed.") - } else { - logger.info(s"Will install ${dependenciesToInstall.size} dependencies.") - dependenciesToInstall.toList - .map { dependency => - installer.findSpecificLibraryVersion( - dependency.libraryName, - dependency.version - ) - } - .find(_.isLeft) - .toLeft(()) match { - case Left(error) => - throw new RuntimeException( - s"Some dependencies could not be installed: [$error]." - ) - case Right(_) => - } - } - } -} diff --git a/engine/runner/src/main/scala/org/enso/runner/ProjectUploader.scala b/engine/runner/src/main/scala/org/enso/runner/ProjectUploader.scala deleted file mode 100644 index 7d165c9e66db..000000000000 --- a/engine/runner/src/main/scala/org/enso/runner/ProjectUploader.scala +++ /dev/null @@ -1,77 +0,0 @@ -package org.enso.runner - -import com.typesafe.scalalogging.Logger -import org.enso.cli.ProgressBar -import org.enso.cli.task.{ProgressReporter, TaskProgress} -import org.enso.runner.common.CompilerBasedDependencyExtractor -import org.enso.libraryupload.{auth, LibraryUploader} -import org.enso.pkg.PackageManager -import org.slf4j.event.Level - -import java.nio.file.Path - -/** Gathers helper functions for uploading a library project. */ -object ProjectUploader { - - private lazy val logger = Logger[ProjectUploader.type] - - /** Uploads a project to a library repository. - * - * @param projectRoot path to the root of the project - * @param uploadUrl URL of upload endpoint of the repository to upload to - * @param authToken an optional token used for authentication in the - * repository - * @param showProgress specifies if CLI progress bars should be displayed - * showing progress of compression and upload - * @param logLevel the log level to use for the context gathering - * dependencies - */ - def uploadProject( - projectRoot: Path, - uploadUrl: String, - authToken: Option[String], - showProgress: Boolean, - logLevel: Level - ): Unit = { - val progressReporter = new ProgressReporter { - override def trackProgress( - message: String, - task: TaskProgress[_] - ): Unit = { - logger.info(message) - if (showProgress) { - ProgressBar.waitWithProgress(task) - } - } - } - - val token = authToken match { - case Some(value) => auth.SimpleHeaderToken(value) - case None => auth.NoAuthorization - } - - val dependencyExtractor = new CompilerBasedDependencyExtractor(logLevel) - - LibraryUploader(dependencyExtractor) - .uploadLibrary( - projectRoot, - uploadUrl, - token, - progressReporter - ) - .get - } - - /** Updates manifest of the project. - * - * @param projectRoot path to the root of the project - * @param logLevel the log level to use for the context gathering - * dependencies - */ - def updateManifest(projectRoot: Path, logLevel: Level): Unit = { - val pkg = PackageManager.Default.loadPackage(projectRoot.toFile).get - - val dependencyExtractor = new CompilerBasedDependencyExtractor(logLevel) - LibraryUploader(dependencyExtractor).updateManifest(pkg).get - } -} diff --git a/engine/runner/src/main/scala/org/enso/runner/Repl.scala b/engine/runner/src/main/scala/org/enso/runner/Repl.scala deleted file mode 100644 index bf299c454942..000000000000 --- a/engine/runner/src/main/scala/org/enso/runner/Repl.scala +++ /dev/null @@ -1,195 +0,0 @@ -package org.enso.runner - -import com.typesafe.scalalogging.Logger - -import java.io.{ - IOException, - InputStream, - OutputStream, - PrintStream, - PrintWriter, - Writer -} -import java.util.Scanner -import org.enso.polyglot.debugger.{ReplExecutor, SessionManager} -import org.jline.reader.impl.DefaultParser -import org.jline.reader.impl.history.DefaultHistory -import org.jline.reader.{LineReader, LineReaderBuilder} -import org.jline.terminal.{Terminal, TerminalBuilder} - -import java.nio.file.Path -import scala.util.Try - -/** Represents user console input. - */ -sealed trait UserInput - -/** End of user input. - */ -case object EndOfInput extends UserInput - -/** A normal line of user input. - * @param line the contents of the input line - */ -case class Line(line: String) extends UserInput - -/** Abstract representation of Repl IO operations - */ -trait ReplIO { - - /** Ask user for a line of input, using given prompt - * @param prompt the prompt to display to the user - * @return the user-provided input - */ - def readLine(prompt: String): UserInput - - /** Print a line to the REPL. - * @param contents contents of the line to print - */ - def println(contents: String): Unit - - /** Print a stack trace to the REPL. - * @param exception which stack trace is to be printed - */ - def printStackTrace(exception: Exception): Unit = { - val traceBuilder = new StringBuilder - val traceWriter = new Writer() { - override def write( - cbuf: Array[Char], - off: Int, - len: Int - ): Unit = - traceBuilder.append(cbuf.slice(off, off + len).mkString) - - override def flush(): Unit = {} - - override def close(): Unit = {} - } - exception.printStackTrace(new PrintWriter(traceWriter)) - println(traceBuilder.toString()) - } -} - -/** A barebones implementation of [[ReplIO]] based on standard input / output operations. - * @param in input stream to use - * @param out output stream to use - */ -case class SimpleReplIO(in: InputStream, out: OutputStream) extends ReplIO { - private val scanner: Scanner = new Scanner(in) - private val printer: PrintStream = new PrintStream(out) - - /** Ask user for a line of input, using given prompt - * @param prompt the prompt to display to the user - * @return the user-provided input - */ - override def readLine(prompt: String): UserInput = { - printer.print(prompt) - Try(scanner.nextLine()).map(Line).getOrElse(EndOfInput) - } - - /** Print a line to the REPL. - * @param contents contents of the line to print - */ - override def println(contents: String): Unit = printer.println(contents) -} - -/** An implementation of [[ReplIO]] using system terminal capabilities. - */ -case class TerminalIO(historyFilePath: Path) extends ReplIO { - // jline uses the class loader from `Thread.currentThread().getContextClassLoader()` to - // load services. We need to override the context class loader to be `IsolatedClassLoader` - // from the runner.jar class loader. - private val prevClassLoader = Thread.currentThread().getContextClassLoader - Thread - .currentThread() - .setContextClassLoader(classOf[TerminalIO].getClassLoader) - private val terminal: Terminal = - TerminalBuilder.builder().system(true).build() - private val parser: DefaultParser = new DefaultParser() - parser.setEscapeChars(null) - private val history = new DefaultHistory() - private val lineReader: LineReader = - LineReaderBuilder - .builder() - .parser(parser) - .variable(LineReader.HISTORY_FILE, historyFilePath) - .history(history) - .terminal(terminal) - .build() - Thread.currentThread().setContextClassLoader(prevClassLoader) - - Runtime.getRuntime.addShutdownHook(new Thread() { - override def run(): Unit = { - try { - history.save() - } catch { - case e: IOException => - Logger[TerminalIO].warn("Failed to save REPL history.", e) - } - } - }) - - /** Ask user for a line of input, using given prompt - * @param prompt the prompt to display to the user - * @return the user-provided input - */ - override def readLine(prompt: String): UserInput = - Try(lineReader.readLine(prompt)).map(Line).getOrElse(EndOfInput) - - /** Print a line to the REPL. - * @param contents contents of the line to print - */ - override def println(contents: String): Unit = - terminal.writer().println(contents) -} - -/** The Repl logic to inject into runtime instrumentation framework. - * - * @param replIO the IO implementation to use with this Repl - */ -case class Repl(replIO: ReplIO) extends SessionManager { - - /** Runs the Repl session by asking for user input and performing - * the requested action with the execution node. - * - * End of input causes exit from the Repl. - * - * @param executor the interface for executing commands inside the session - */ - override def startSession( - executor: ReplExecutor - ): Nothing = { - var continueRunning = true - while (continueRunning) { - val input = replIO.readLine("> ") - input match { - case EndOfInput => - continueRunning = false - case Line(line) => - if (line.isEmpty) { - // nop - } else if (line == ":list" || line == ":l") { - val bindings = executor.listBindings() - bindings.foreach { case (varName, value) => - replIO.println(s"$varName = $value") - } - } else if (line == ":quit" || line == ":q") { - continueRunning = false - } else { - val result = executor.evaluate(line) - result match { - case Left(exception) => - replIO.println( - s"Evaluation failed with: ${exception.getMessage}" - ) - replIO.printStackTrace(exception) - case Right(objectRepresentation) => - replIO.println(s">>> $objectRepresentation") - } - } - } - } - - executor.exit() - } -} diff --git a/engine/runner/src/main/scala/org/enso/runner/RunnerLogging.scala b/engine/runner/src/main/scala/org/enso/runner/RunnerLogging.scala deleted file mode 100644 index ccaee4120a60..000000000000 --- a/engine/runner/src/main/scala/org/enso/runner/RunnerLogging.scala +++ /dev/null @@ -1,78 +0,0 @@ -package org.enso.runner - -import java.net.URI -import com.typesafe.scalalogging.Logger -import org.enso.logger.LoggerSetup -import org.enso.logger.masking.Masking -import org.slf4j.event.Level - -import scala.util.{Failure, Success} -import scala.concurrent.Future - -/** Manages setting up the logging service within the runner. - */ -object RunnerLogging { - - private val logger = Logger[RunnerLogging.type] - - /** Sets up the runner's logging service. - * - * If `connectionUri` is provided it tries to connect to a logging service - * server and pass logs to it. If it is not provided, or the connection could - * not be established, falls back to logging to standard error output. - * - * @param connectionUri optional uri of logging service server to connect to - * @param logLevel log level to use for the runner and runtime - * @param logMasking switches log masking on and off - */ - def setup( - connectionUri: Option[URI], - logLevel: Level, - logMasking: Boolean - ): Unit = { - import scala.concurrent.ExecutionContext.Implicits.global - Masking.setup(logMasking) - val loggerSetup = LoggerSetup.get() - val initializedLogger = connectionUri match { - case Some(uri) => - Future { - loggerSetup.setupSocketAppender( - logLevel, - uri.getHost(), - uri.getPort() - ) - } - .map(success => - if (success) { - logger.trace("Connected to logging service at [{}].", uri) - true - } else - throw new RuntimeException("Failed to connect to logging service") - ) - .recoverWith[Boolean] { _ => - System.err.println( - "Failed to connect to the logging service server, " + - "falling back to local logging." - ) - Future.successful(loggerSetup.setupConsoleAppender(logLevel)) - } - case None => - Future.successful(loggerSetup.setupConsoleAppender(logLevel)) - } - initializedLogger.onComplete { - case Failure(exception) => - exception.printStackTrace() - System.err.println("Logger setup: " + exception.getMessage) - case Success(success) => - if (!success) { - System.err.println("Failed to initialize logging infrastructure") - } - } - } - - /** Shuts down the logging service gracefully. - */ - def tearDown(): Unit = { - LoggerSetup.get().teardown() - } -} diff --git a/engine/runtime-fat-jar/src/main/java/module-info.java b/engine/runtime-fat-jar/src/main/java/module-info.java index 1f5b2eee274d..87816c972306 100644 --- a/engine/runtime-fat-jar/src/main/java/module-info.java +++ b/engine/runtime-fat-jar/src/main/java/module-info.java @@ -26,9 +26,9 @@ org.enso.interpreter.epb.EpbLanguageProvider; provides com.oracle.truffle.api.instrumentation.provider.TruffleInstrumentProvider with - org.enso.interpreter.instrument.ReplDebuggerInstrumentProvider, - org.enso.interpreter.instrument.RuntimeServerInstrumentProvider, - org.enso.interpreter.instrument.IdExecutionInstrumentProvider; + org.enso.interpreter.instrument.repl.debugger.ReplDebuggerInstrumentProvider, + org.enso.interpreter.instrument.runtime.server.RuntimeServerInstrumentProvider, + org.enso.interpreter.instrument.id.execution.IdExecutionInstrumentProvider; // java.beans.Transient needed by Jackson jackson.databind.ext.Java7SupportImpl diff --git a/engine/runtime-instrument-common/src/main/java/org/enso/interpreter/service/ExecutionService.java b/engine/runtime-instrument-common/src/main/java/org/enso/interpreter/service/ExecutionService.java index 8f4ce3cbb22a..c24bde869267 100644 --- a/engine/runtime-instrument-common/src/main/java/org/enso/interpreter/service/ExecutionService.java +++ b/engine/runtime-instrument-common/src/main/java/org/enso/interpreter/service/ExecutionService.java @@ -30,9 +30,7 @@ import org.enso.compiler.suggestions.SimpleUpdate; import org.enso.interpreter.instrument.Endpoint; import org.enso.interpreter.instrument.MethodCallsCache; -import org.enso.interpreter.instrument.NotificationHandler; import org.enso.interpreter.instrument.RuntimeCache; -import org.enso.interpreter.instrument.Timer; import org.enso.interpreter.instrument.UpdatesSynchronizationState; import org.enso.interpreter.instrument.VisualizationHolder; import org.enso.interpreter.instrument.profiling.ProfilingInfo; @@ -47,6 +45,8 @@ import org.enso.interpreter.runtime.data.Type; import org.enso.interpreter.runtime.data.atom.AtomConstructor; import org.enso.interpreter.runtime.error.PanicException; +import org.enso.interpreter.runtime.instrument.NotificationHandler; +import org.enso.interpreter.runtime.instrument.Timer; import org.enso.interpreter.runtime.scope.ModuleScope; import org.enso.interpreter.runtime.state.State; import org.enso.interpreter.service.error.FailedToApplyEditsException; diff --git a/engine/runtime-instrument-common/src/main/scala/org/enso/compiler/context/ChangesetBuilder.scala b/engine/runtime-instrument-common/src/main/scala/org/enso/interpreter/instrument/ChangesetBuilder.scala similarity index 98% rename from engine/runtime-instrument-common/src/main/scala/org/enso/compiler/context/ChangesetBuilder.scala rename to engine/runtime-instrument-common/src/main/scala/org/enso/interpreter/instrument/ChangesetBuilder.scala index 3db6f8849292..f98b7a0a14aa 100644 --- a/engine/runtime-instrument-common/src/main/scala/org/enso/compiler/context/ChangesetBuilder.scala +++ b/engine/runtime-instrument-common/src/main/scala/org/enso/interpreter/instrument/ChangesetBuilder.scala @@ -1,26 +1,17 @@ -package org.enso.compiler.context +package org.enso.interpreter.instrument import com.oracle.truffle.api.source.Source - -import java.util.UUID -import org.enso.compiler.core.{ - CompilerError, - EnsoParser, - ExternalID, - IR, - Identifier -} import org.enso.compiler.core.Implicits.AsMetadata -import org.enso.compiler.core.ir.Literal -import org.enso.compiler.core.ir.Location -import org.enso.compiler.core.ir.Name -import org.enso.compiler.suggestions.SimpleUpdate +import org.enso.compiler.core.ir.{Literal, Location, Name} import org.enso.compiler.core.ir.module.scope.definition +import org.enso.compiler.core._ import org.enso.compiler.pass.analyse.DataflowAnalysis +import org.enso.compiler.suggestions.SimpleUpdate import org.enso.interpreter.instrument.execution.model.PendingEdit import org.enso.text.editing.model.{IdMap, TextEdit} import org.enso.text.editing.{IndexedSource, TextEditor} +import java.util.UUID import scala.collection.mutable import scala.util.Using diff --git a/engine/runtime-instrument-common/src/main/scala/org/enso/interpreter/instrument/job/AnalyzeModuleJob.scala b/engine/runtime-instrument-common/src/main/scala/org/enso/interpreter/instrument/job/AnalyzeModuleJob.scala index eca4ecb8f3b0..6c662b24ed1d 100644 --- a/engine/runtime-instrument-common/src/main/scala/org/enso/interpreter/instrument/job/AnalyzeModuleJob.scala +++ b/engine/runtime-instrument-common/src/main/scala/org/enso/interpreter/instrument/job/AnalyzeModuleJob.scala @@ -1,6 +1,5 @@ package org.enso.interpreter.instrument.job -import org.enso.compiler.context.Changeset import org.enso.compiler.suggestions.{ ExportsBuilder, ModuleExportsDiff, @@ -8,6 +7,7 @@ import org.enso.compiler.suggestions.{ SuggestionDiff } import org.enso.compiler.core.IR +import org.enso.interpreter.instrument.Changeset import org.enso.interpreter.instrument.execution.ModuleIndexing.IndexState import org.enso.interpreter.instrument.execution.RuntimeContext import org.enso.interpreter.runtime.Module diff --git a/engine/runtime-instrument-common/src/main/scala/org/enso/interpreter/instrument/job/EnsureCompiledJob.scala b/engine/runtime-instrument-common/src/main/scala/org/enso/interpreter/instrument/job/EnsureCompiledJob.scala index 1fcb8f3b1522..e8a19d44a145 100644 --- a/engine/runtime-instrument-common/src/main/scala/org/enso/interpreter/instrument/job/EnsureCompiledJob.scala +++ b/engine/runtime-instrument-common/src/main/scala/org/enso/interpreter/instrument/job/EnsureCompiledJob.scala @@ -20,6 +20,8 @@ import org.enso.interpreter.instrument.execution.{ } import org.enso.interpreter.instrument.{ CacheInvalidation, + Changeset, + ChangesetBuilder, InstrumentFrame, Visualization } @@ -36,7 +38,6 @@ import java.io.File import java.util import java.util.UUID import java.util.logging.Level - import scala.jdk.OptionConverters._ /** A job that ensures that specified files are compiled. diff --git a/engine/runtime-instrument-common/src/main/scala/org/enso/interpreter/instrument/service/InteractiveMode.scala b/engine/runtime-instrument-common/src/main/scala/org/enso/interpreter/instrument/service/InteractiveMode.scala index cbf66928dd1f..46220d19d38f 100644 --- a/engine/runtime-instrument-common/src/main/scala/org/enso/interpreter/instrument/service/InteractiveMode.scala +++ b/engine/runtime-instrument-common/src/main/scala/org/enso/interpreter/instrument/service/InteractiveMode.scala @@ -6,9 +6,9 @@ import org.enso.distribution.ProgressAndLockNotificationForwarder import org.enso.editions.{LibraryName, LibraryVersion} import org.enso.pkg.QualifiedName import org.enso.polyglot.runtime.Runtime.{Api, ApiResponse} -import org.enso.interpreter.instrument.NotificationHandler import org.enso.interpreter.instrument.ProgressNotificationTranslator import org.enso.interpreter.instrument.Endpoint +import org.enso.interpreter.runtime.instrument.NotificationHandler import java.nio.file.Path diff --git a/engine/runtime-instrument-common/src/test/scala/org/enso/compiler/test/context/ChangesetBuilderTest.scala b/engine/runtime-instrument-common/src/test/scala/org/enso/compiler/test/context/ChangesetBuilderTest.scala index 3381178a6b60..8579d3b93dc8 100644 --- a/engine/runtime-instrument-common/src/test/scala/org/enso/compiler/test/context/ChangesetBuilderTest.scala +++ b/engine/runtime-instrument-common/src/test/scala/org/enso/compiler/test/context/ChangesetBuilderTest.scala @@ -1,12 +1,7 @@ package org.enso.compiler.test.context import org.enso.compiler.Passes -import org.enso.compiler.context.{ - ChangesetBuilder, - FreshNameSupply, - InlineContext, - ModuleContext -} +import org.enso.compiler.context.{FreshNameSupply, InlineContext, ModuleContext} import org.enso.compiler.core.{ExternalID, IR, Identifier} import org.enso.compiler.core.ir.{CallArgument, Expression, Function} import org.enso.compiler.core.ir.expression.Application @@ -15,6 +10,7 @@ import org.enso.compiler.core.ir.module.scope.definition import org.enso.compiler.pass.PassManager import org.enso.compiler.test.CompilerTestSetup import org.enso.compiler.context.LocalScope +import org.enso.interpreter.instrument.ChangesetBuilder import org.enso.text.buffer.Rope import org.enso.text.editing.JavaEditorAdapter import org.enso.text.editing.model.{Position, Range, TextEdit} diff --git a/engine/runtime-instrument-id-execution/src/main/java/org/enso/interpreter/instrument/IdExecutionInstrument.java b/engine/runtime-instrument-id-execution/src/main/java/org/enso/interpreter/instrument/id/execution/IdExecutionInstrument.java similarity index 99% rename from engine/runtime-instrument-id-execution/src/main/java/org/enso/interpreter/instrument/IdExecutionInstrument.java rename to engine/runtime-instrument-id-execution/src/main/java/org/enso/interpreter/instrument/id/execution/IdExecutionInstrument.java index 3c0e1aff122f..53537b45e231 100644 --- a/engine/runtime-instrument-id-execution/src/main/java/org/enso/interpreter/instrument/IdExecutionInstrument.java +++ b/engine/runtime-instrument-id-execution/src/main/java/org/enso/interpreter/instrument/id/execution/IdExecutionInstrument.java @@ -1,4 +1,4 @@ -package org.enso.interpreter.instrument; +package org.enso.interpreter.instrument.id.execution; import com.oracle.truffle.api.CallTarget; import com.oracle.truffle.api.CompilerDirectives; @@ -37,6 +37,7 @@ import org.enso.interpreter.runtime.error.DataflowError; import org.enso.interpreter.runtime.error.PanicException; import org.enso.interpreter.runtime.error.PanicSentinel; +import org.enso.interpreter.runtime.instrument.Timer; import org.enso.interpreter.runtime.state.State; import org.enso.interpreter.runtime.tag.AvoidIdInstrumentationTag; import org.enso.interpreter.runtime.tag.IdentifiedTag; diff --git a/engine/runtime-instrument-repl-debugger/src/main/java/org/enso/interpreter/instrument/ReplDebuggerInstrument.java b/engine/runtime-instrument-repl-debugger/src/main/java/org/enso/interpreter/instrument/repl/debugger/ReplDebuggerInstrument.java similarity index 98% rename from engine/runtime-instrument-repl-debugger/src/main/java/org/enso/interpreter/instrument/ReplDebuggerInstrument.java rename to engine/runtime-instrument-repl-debugger/src/main/java/org/enso/interpreter/instrument/repl/debugger/ReplDebuggerInstrument.java index 4cdc0122acea..87012f057480 100644 --- a/engine/runtime-instrument-repl-debugger/src/main/java/org/enso/interpreter/instrument/ReplDebuggerInstrument.java +++ b/engine/runtime-instrument-repl-debugger/src/main/java/org/enso/interpreter/instrument/repl/debugger/ReplDebuggerInstrument.java @@ -1,4 +1,4 @@ -package org.enso.interpreter.instrument; +package org.enso.interpreter.instrument.repl.debugger; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.TruffleLogger; @@ -31,6 +31,8 @@ import java.util.logging.Level; import org.enso.common.DebugServerInfo; import org.enso.compiler.pass.analyse.FramePointer; +import org.enso.interpreter.instrument.DebuggerMessageHandler; +import org.enso.interpreter.instrument.ReplExecutionEventNode; import org.enso.interpreter.node.EnsoRootNode; import org.enso.interpreter.node.expression.builtin.debug.DebugBreakpointNode; import org.enso.interpreter.node.expression.builtin.text.util.ToJavaStringNode; diff --git a/engine/runtime-instrument-runtime-server/src/main/java/org/enso/interpreter/instrument/RuntimeServerInstrument.java b/engine/runtime-instrument-runtime-server/src/main/java/org/enso/interpreter/instrument/runtime/server/RuntimeServerInstrument.java similarity index 94% rename from engine/runtime-instrument-runtime-server/src/main/java/org/enso/interpreter/instrument/RuntimeServerInstrument.java rename to engine/runtime-instrument-runtime-server/src/main/java/org/enso/interpreter/instrument/runtime/server/RuntimeServerInstrument.java index befa84fb837a..ccb742c4ca50 100644 --- a/engine/runtime-instrument-runtime-server/src/main/java/org/enso/interpreter/instrument/RuntimeServerInstrument.java +++ b/engine/runtime-instrument-runtime-server/src/main/java/org/enso/interpreter/instrument/runtime/server/RuntimeServerInstrument.java @@ -1,4 +1,4 @@ -package org.enso.interpreter.instrument; +package org.enso.interpreter.instrument.runtime.server; import com.oracle.truffle.api.TruffleContext; import com.oracle.truffle.api.TruffleOptions; @@ -11,7 +11,12 @@ import java.util.Arrays; import java.util.Optional; import org.enso.distribution.locking.LockManager; +import org.enso.interpreter.instrument.Handler; +import org.enso.interpreter.instrument.HandlerFactory; +import org.enso.interpreter.instrument.HandlerFactoryImpl; import org.enso.interpreter.runtime.EnsoContext; +import org.enso.interpreter.runtime.instrument.NotificationHandler; +import org.enso.interpreter.runtime.instrument.Timer; import org.enso.interpreter.service.ExecutionService; import org.enso.lockmanager.client.ConnectedLockManager; import org.enso.polyglot.RuntimeServerInfo; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/AnnotationsCompilerTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/AnnotationsCompilerTest.java similarity index 96% rename from engine/runtime-integration-tests/src/test/java/org/enso/compiler/AnnotationsCompilerTest.java rename to engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/AnnotationsCompilerTest.java index 87eda4ff434f..b78b8b06cd45 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/AnnotationsCompilerTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/AnnotationsCompilerTest.java @@ -1,4 +1,4 @@ -package org.enso.compiler; +package org.enso.compiler.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; @@ -9,7 +9,7 @@ import org.enso.compiler.core.ir.module.scope.Definition; import org.junit.Test; -public class AnnotationsCompilerTest extends CompilerTest { +public class AnnotationsCompilerTest extends CompilerTests { @Test public void testModuleMethod() throws Exception { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/CompilerTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/CompilerTests.java similarity index 98% rename from engine/runtime-integration-tests/src/test/java/org/enso/compiler/CompilerTest.java rename to engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/CompilerTests.java index 9dafb8d8df9a..7b01bed83311 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/CompilerTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/CompilerTests.java @@ -1,4 +1,4 @@ -package org.enso.compiler; +package org.enso.compiler.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -14,7 +14,7 @@ import org.junit.AfterClass; import org.junit.BeforeClass; -public abstract class CompilerTest { +public abstract class CompilerTests { protected static EnsoParser ensoCompiler; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/ErrorCompilerTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ErrorCompilerTest.java similarity index 99% rename from engine/runtime-integration-tests/src/test/java/org/enso/compiler/ErrorCompilerTest.java rename to engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ErrorCompilerTest.java index 78e25605236d..e21a0bf5aa2d 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/ErrorCompilerTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ErrorCompilerTest.java @@ -1,4 +1,4 @@ -package org.enso.compiler; +package org.enso.compiler.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -12,7 +12,7 @@ import org.junit.Test; import scala.collection.immutable.List; -public class ErrorCompilerTest extends CompilerTest { +public class ErrorCompilerTest extends CompilerTests { @Test public void unfinishedLiteral1() throws Exception { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/ExecCompilerTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ExecCompilerTest.java similarity index 99% rename from engine/runtime-integration-tests/src/test/java/org/enso/compiler/ExecCompilerTest.java rename to engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ExecCompilerTest.java index a6a0068896a3..a0c18e195433 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/ExecCompilerTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ExecCompilerTest.java @@ -1,4 +1,4 @@ -package org.enso.compiler; +package org.enso.compiler.test; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.containsString; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/ExecStrictCompilerTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ExecStrictCompilerTest.java similarity index 99% rename from engine/runtime-integration-tests/src/test/java/org/enso/compiler/ExecStrictCompilerTest.java rename to engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ExecStrictCompilerTest.java index 256da1d16a7d..131da4a1f965 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/ExecStrictCompilerTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ExecStrictCompilerTest.java @@ -1,4 +1,4 @@ -package org.enso.compiler; +package org.enso.compiler.test; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.containsString; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/ExportCycleDetectionTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ExportCycleDetectionTest.java similarity index 99% rename from engine/runtime-integration-tests/src/test/java/org/enso/compiler/ExportCycleDetectionTest.java rename to engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ExportCycleDetectionTest.java index d6fe43456c2f..bd86cb230f72 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/ExportCycleDetectionTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ExportCycleDetectionTest.java @@ -1,4 +1,4 @@ -package org.enso.compiler; +package org.enso.compiler.test; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.allOf; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/ExportedSymbolsTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ExportedSymbolsTest.java similarity index 99% rename from engine/runtime-integration-tests/src/test/java/org/enso/compiler/ExportedSymbolsTest.java rename to engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ExportedSymbolsTest.java index a5e0e9a14a7f..1b8d45734564 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/ExportedSymbolsTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ExportedSymbolsTest.java @@ -1,4 +1,4 @@ -package org.enso.compiler; +package org.enso.compiler.test; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.containsInAnyOrder; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/ImportsAndFQNConsistencyTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ImportsAndFQNConsistencyTest.java similarity index 99% rename from engine/runtime-integration-tests/src/test/java/org/enso/compiler/ImportsAndFQNConsistencyTest.java rename to engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ImportsAndFQNConsistencyTest.java index d724b8181a53..ea8a18c3ce94 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/ImportsAndFQNConsistencyTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/ImportsAndFQNConsistencyTest.java @@ -1,4 +1,4 @@ -package org.enso.compiler; +package org.enso.compiler.test; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.greaterThan; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/SerdeCompilerTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/SerdeCompilerTest.java similarity index 98% rename from engine/runtime-integration-tests/src/test/java/org/enso/compiler/SerdeCompilerTest.java rename to engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/SerdeCompilerTest.java index 18d15cae5779..d070c83bc253 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/SerdeCompilerTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/SerdeCompilerTest.java @@ -1,4 +1,4 @@ -package org.enso.compiler; +package org.enso.compiler.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -107,7 +107,7 @@ private void parseSerializedModule(String projectName, String forbiddenMessage) ctx.leave(); } - CompilerTest.assertIR("Serialized and deserialized IR for " + projectName, old, now); + CompilerTests.assertIR("Serialized and deserialized IR for " + projectName, old, now); } private Context ensoContextForPackage(String name, File pkgFile, boolean disableIrCaching) diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/SerializationManagerTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/SerializationManagerTest.java similarity index 99% rename from engine/runtime-integration-tests/src/test/java/org/enso/compiler/SerializationManagerTest.java rename to engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/SerializationManagerTest.java index 7a04b07d98fd..8c29b11ddaf1 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/SerializationManagerTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/SerializationManagerTest.java @@ -1,4 +1,4 @@ -package org.enso.compiler; +package org.enso.compiler.test; import com.oracle.truffle.api.TruffleFile; import java.nio.file.Path; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/SerializerTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/SerializerTest.java similarity index 98% rename from engine/runtime-integration-tests/src/test/java/org/enso/compiler/SerializerTest.java rename to engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/SerializerTest.java index 5ec0c09193d1..a2aa54510121 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/SerializerTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/SerializerTest.java @@ -1,4 +1,4 @@ -package org.enso.compiler; +package org.enso.compiler.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/TypeInferenceTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/TypeInferenceTest.java similarity index 99% rename from engine/runtime-integration-tests/src/test/java/org/enso/compiler/TypeInferenceTest.java rename to engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/TypeInferenceTest.java index 7a1e3bf0ee36..b67414c09c17 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/TypeInferenceTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/TypeInferenceTest.java @@ -1,4 +1,4 @@ -package org.enso.compiler; +package org.enso.compiler.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; @@ -10,6 +10,8 @@ import java.util.List; import java.util.Optional; import java.util.Set; +import org.enso.compiler.Compiler; +import org.enso.compiler.Passes; import org.enso.compiler.context.FreshNameSupply; import org.enso.compiler.context.ModuleContext; import org.enso.compiler.core.IR; @@ -26,7 +28,6 @@ import org.enso.compiler.pass.analyse.types.InferredType; import org.enso.compiler.pass.analyse.types.TypeInference; import org.enso.compiler.pass.analyse.types.TypeRepresentation; -import org.enso.compiler.test.CompilerRunner; import org.enso.pkg.QualifiedName; import org.graalvm.polyglot.Source; import org.junit.Ignore; @@ -36,7 +37,7 @@ import scala.collection.immutable.Seq$; import scala.jdk.javaapi.CollectionConverters; -public class TypeInferenceTest extends CompilerTest { +public class TypeInferenceTest extends CompilerTests { @Ignore("TODO resolving global methods") @Test public void zeroAryCheck() throws Exception { diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/VectorArraySignatureTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/VectorArraySignatureTest.java similarity index 99% rename from engine/runtime-integration-tests/src/test/java/org/enso/compiler/VectorArraySignatureTest.java rename to engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/VectorArraySignatureTest.java index d5c2c9440a7b..5cabcd4cb387 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/VectorArraySignatureTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/VectorArraySignatureTest.java @@ -1,4 +1,4 @@ -package org.enso.compiler; +package org.enso.compiler.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/passes/MethodCallsTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/passes/MethodCallsTest.java similarity index 97% rename from engine/runtime-integration-tests/src/test/java/org/enso/compiler/passes/MethodCallsTest.java rename to engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/passes/MethodCallsTest.java index ae14fdd6e5d4..e4b5b79acf19 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/passes/MethodCallsTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/passes/MethodCallsTest.java @@ -1,4 +1,4 @@ -package org.enso.compiler.passes; +package org.enso.compiler.test.passes; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.instanceOf; diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/caches/ModuleCacheTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/caches/ModuleCacheTest.java index a55cf495fe5a..0c3df4818a40 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/caches/ModuleCacheTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/caches/ModuleCacheTest.java @@ -9,7 +9,7 @@ import org.enso.common.LanguageInfo; import org.enso.common.MethodNames; import org.enso.common.RuntimeOptions; -import org.enso.compiler.CompilerTest; +import org.enso.compiler.test.CompilerTests; import org.enso.interpreter.runtime.EnsoContext; import org.enso.test.utils.ContextUtils; import org.graalvm.polyglot.Context; @@ -67,7 +67,7 @@ public void testCompareList() throws Exception { var meta = new ModuleCache.Metadata("hash", "code", CompilationStage.AFTER_CODEGEN.toString()); var cachedIr = mc.deserialize(ensoCtx, ByteBuffer.wrap(arr), meta, null); assertNotNull("IR read", cachedIr); - CompilerTest.assertIR(name, ir, cachedIr.moduleIR()); + CompilerTests.assertIR(name, ir, cachedIr.moduleIR()); } @Test @@ -97,6 +97,6 @@ public void testCompareWithWarning() throws Exception { var meta = new ModuleCache.Metadata("hash", "code", CompilationStage.AFTER_CODEGEN.toString()); var cachedIr = mc.deserialize(ensoCtx, ByteBuffer.wrap(arr), meta, null); assertNotNull("IR read", cachedIr); - CompilerTest.assertIR(name, ir, cachedIr.moduleIR()); + CompilerTests.assertIR(name, ir, cachedIr.moduleIR()); } } diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/TestLogProviderOnClasspath.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/TestLogProviderOnClasspath.java index 31ab81725ede..02a3bdfe4588 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/TestLogProviderOnClasspath.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/TestLogProviderOnClasspath.java @@ -1,18 +1,21 @@ package org.enso.interpreter.test; import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.*; +import static org.hamcrest.Matchers.hasItem; +import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.Matchers.nullValue; import java.util.ArrayList; import java.util.List; import java.util.ServiceLoader; import java.util.stream.Collectors; +import org.enso.logging.service.logback.test.provider.TestLogProvider; import org.junit.Test; import org.slf4j.spi.SLF4JServiceProvider; /** - * In the `runtime/Test` testing suite, {@link org.enso.logger.TestLogProvider} should be among the - * logging providers, because it is explicitly chosen as the logging provider for the tests. + * In the `runtime/Test` testing suite, {@link TestLogProvider} should be among the logging + * providers, because it is explicitly chosen as the logging provider for the tests. */ public class TestLogProviderOnClasspath { @Test @@ -25,12 +28,14 @@ public void testLogProviderOnClasspath() { } List providerNames = providers.stream().map(elem -> elem.getClass().getName()).collect(Collectors.toList()); - assertThat(providerNames, hasItem("org.enso.logger.TestLogProvider")); + assertThat( + providerNames, hasItem("org.enso.logging.service.logback.test.provider.TestLogProvider")); } @Test public void testLogProviderIsInUnnamedModule() throws Exception { - var testLogProviderClass = Class.forName("org.enso.logger.TestLogProvider"); + var testLogProviderClass = + Class.forName("org.enso.logging.service.logback.test.provider.TestLogProvider"); var mod = testLogProviderClass.getModule(); assertThat(mod, notNullValue()); assertThat("Should be an unnamed module - with null name", mod.getName(), nullValue()); diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/compiler/refactoring/IRUtilsTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/compiler/test/refactoring/IRUtilsTest.scala similarity index 98% rename from engine/runtime-integration-tests/src/test/scala/org/enso/compiler/refactoring/IRUtilsTest.scala rename to engine/runtime-integration-tests/src/test/scala/org/enso/compiler/test/refactoring/IRUtilsTest.scala index bc9dcf70cefd..36e35bf442c2 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/compiler/refactoring/IRUtilsTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/compiler/test/refactoring/IRUtilsTest.scala @@ -1,13 +1,13 @@ -package org.enso.compiler.refactoring +package org.enso.compiler.test.refactoring +import org.enso.common.{LanguageInfo, MethodNames} import org.enso.compiler.core.IR -import org.enso.compiler.core.ir.Module -import org.enso.compiler.core.ir.Name +import org.enso.compiler.core.ir.{Module, Name} +import org.enso.compiler.refactoring.IRUtils import org.enso.interpreter.runtime import org.enso.interpreter.runtime.EnsoContext import org.enso.interpreter.test.InterpreterContext import org.enso.pkg.QualifiedName -import org.enso.common.{LanguageInfo, MethodNames} import org.scalatest.OptionValues import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpecLike diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/TestEdition.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/TestEdition.scala index 3e45b2a31373..a2fef149c11a 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/TestEdition.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/TestEdition.scala @@ -2,6 +2,7 @@ package org.enso.interpreter.test.instrument import org.enso.semver.SemVer import org.enso.editions.{Editions, LibraryName} +import org.enso.version.BuildVersion import java.io.File @@ -11,7 +12,7 @@ object TestEdition { val empty: Editions.RawEdition = Editions.Raw.Edition( - engineVersion = Some(SemVer.parse(buildinfo.Info.ensoVersion).get), + engineVersion = Some(SemVer.parse(BuildVersion.ensoVersion).get), repositories = Map("main" -> Editions.Repository("main", "http://example.com/")), libraries = Map() diff --git a/engine/runtime/src/main/java/org/enso/interpreter/EnsoLanguage.java b/engine/runtime/src/main/java/org/enso/interpreter/EnsoLanguage.java index 8501af210a18..696e46dbee13 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/EnsoLanguage.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/EnsoLanguage.java @@ -27,16 +27,16 @@ import org.enso.distribution.Environment; import org.enso.distribution.locking.LockManager; import org.enso.distribution.locking.ThreadSafeFileLockManager; -import org.enso.interpreter.instrument.NotificationHandler; -import org.enso.interpreter.instrument.NotificationHandler.Forwarder; -import org.enso.interpreter.instrument.NotificationHandler.TextMode$; -import org.enso.interpreter.instrument.Timer; import org.enso.interpreter.node.EnsoRootNode; import org.enso.interpreter.node.ExpressionNode; import org.enso.interpreter.node.ProgramRootNode; import org.enso.interpreter.runtime.EnsoContext; import org.enso.interpreter.runtime.IrToTruffle; import org.enso.interpreter.runtime.data.atom.AtomNewInstanceNode; +import org.enso.interpreter.runtime.instrument.NotificationHandler; +import org.enso.interpreter.runtime.instrument.NotificationHandler.Forwarder; +import org.enso.interpreter.runtime.instrument.NotificationHandler.TextMode$; +import org.enso.interpreter.runtime.instrument.Timer; import org.enso.interpreter.runtime.state.ExecutionEnvironment; import org.enso.interpreter.runtime.tag.AvoidIdInstrumentationTag; import org.enso.interpreter.runtime.tag.IdentifiedTag; diff --git a/engine/runtime/src/main/java/org/enso/interpreter/caches/ImportExportCache.java b/engine/runtime/src/main/java/org/enso/interpreter/caches/ImportExportCache.java index 3a243b7e591b..657d5e16c86a 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/caches/ImportExportCache.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/caches/ImportExportCache.java @@ -1,6 +1,5 @@ package org.enso.interpreter.caches; -import buildinfo.Info; import com.oracle.truffle.api.TruffleFile; import com.oracle.truffle.api.TruffleLogger; import java.io.ByteArrayInputStream; @@ -22,6 +21,7 @@ import org.enso.persist.Persistance; import org.enso.pkg.QualifiedName; import org.enso.pkg.SourceFile; +import org.enso.version.BuildVersion; import org.openide.util.lookup.ServiceProvider; public final class ImportExportCache @@ -106,7 +106,7 @@ public Optional getCacheRoots(EnsoContext context) { .map( pkg -> { TruffleFile bindingsCacheRoot = - pkg.getBindingsCacheRootForPackage(Info.ensoVersion()); + pkg.getBindingsCacheRootForPackage(BuildVersion.ensoVersion()); var localCacheRoot = bindingsCacheRoot.resolve(libraryName.namespace()); var distribution = context.getDistributionManager(); var pathSegments = @@ -114,7 +114,7 @@ public Optional getCacheRoots(EnsoContext context) { pkg.namespace(), pkg.normalizedName(), pkg.getConfig().version(), - Info.ensoVersion(), + BuildVersion.ensoVersion(), libraryName.namespace() }; var path = diff --git a/engine/runtime/src/main/java/org/enso/interpreter/caches/ModuleCache.java b/engine/runtime/src/main/java/org/enso/interpreter/caches/ModuleCache.java index 3702e7b4c7ec..b6be7640c8c0 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/caches/ModuleCache.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/caches/ModuleCache.java @@ -1,6 +1,5 @@ package org.enso.interpreter.caches; -import buildinfo.Info; import com.oracle.truffle.api.TruffleLogger; import com.oracle.truffle.api.source.Source; import java.io.ByteArrayInputStream; @@ -20,6 +19,7 @@ import org.enso.interpreter.runtime.EnsoContext; import org.enso.interpreter.runtime.builtin.Builtins; import org.enso.persist.Persistance; +import org.enso.version.BuildVersion; public final class ModuleCache implements Cache.Spi { @@ -116,7 +116,7 @@ public Optional getCacheRoots(EnsoContext context) { .getPackageOf(module.getSourceFile()) .map( pkg -> { - var irCacheRoot = pkg.getIrCacheRootForPackage(Info.ensoVersion()); + var irCacheRoot = pkg.getIrCacheRootForPackage(BuildVersion.ensoVersion()); var qualName = module.getName(); var localCacheRoot = irCacheRoot.resolve(qualName.path().mkString("/")); @@ -127,7 +127,7 @@ public Optional getCacheRoots(EnsoContext context) { pkg.namespace(), pkg.normalizedName(), pkg.getConfig().version(), - Info.ensoVersion())); + BuildVersion.ensoVersion())); pathSegmentsJava.addAll(qualName.pathAsJava()); var path = distribution.LocallyInstalledDirectories() @@ -142,7 +142,10 @@ public Optional getCacheRoots(EnsoContext context) { var pathSegmentsJava = new ArrayList(); pathSegmentsJava.addAll( Arrays.asList( - Builtins.NAMESPACE, Builtins.PACKAGE_NAME, Info.ensoVersion(), Info.ensoVersion())); + Builtins.NAMESPACE, + Builtins.PACKAGE_NAME, + BuildVersion.ensoVersion(), + BuildVersion.ensoVersion())); pathSegmentsJava.addAll(module.getName().pathAsJava()); var path = distribution.LocallyInstalledDirectories() diff --git a/engine/runtime/src/main/java/org/enso/interpreter/caches/SuggestionsCache.java b/engine/runtime/src/main/java/org/enso/interpreter/caches/SuggestionsCache.java index 5f3d948d4ce5..d7db6f24ace7 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/caches/SuggestionsCache.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/caches/SuggestionsCache.java @@ -1,6 +1,5 @@ package org.enso.interpreter.caches; -import buildinfo.Info; import com.oracle.truffle.api.TruffleLogger; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -18,6 +17,7 @@ import org.enso.persist.Persistable; import org.enso.persist.Persistance; import org.enso.polyglot.Suggestion; +import org.enso.version.BuildVersion; @Persistable(clazz = CachedSuggestions.class, id = 30301) @Persistable(clazz = Suggestion.Constructor.class, id = 30303) @@ -106,7 +106,8 @@ public Optional getCacheRoots(EnsoContext context) { .getPackageForLibraryJava(libraryName) .map( pkg -> { - var bindingsCacheRoot = pkg.getSuggestionsCacheRootForPackage(Info.ensoVersion()); + var bindingsCacheRoot = + pkg.getSuggestionsCacheRootForPackage(BuildVersion.ensoVersion()); var localCacheRoot = bindingsCacheRoot.resolve(libraryName.namespace()); var distribution = context.getDistributionManager(); var pathSegments = @@ -114,7 +115,7 @@ public Optional getCacheRoots(EnsoContext context) { pkg.namespace(), pkg.normalizedName(), pkg.getConfig().version(), - Info.ensoVersion(), + BuildVersion.ensoVersion(), libraryName.namespace() }; var path = diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/meta/HashCodeNode.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/meta/HashCodeNode.java index 88aeb124ab35..68bd6527e4a1 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/meta/HashCodeNode.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/meta/HashCodeNode.java @@ -1,6 +1,5 @@ package org.enso.interpreter.node.expression.builtin.meta; -import com.google.common.base.Objects; import com.oracle.truffle.api.CompilerAsserts; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; @@ -25,6 +24,7 @@ import java.time.LocalDateTime; import java.time.ZonedDateTime; import java.util.Arrays; +import java.util.Objects; import org.enso.interpreter.dsl.AcceptsError; import org.enso.interpreter.dsl.BuiltinMethod; import org.enso.interpreter.node.callable.InvokeCallableNode.ArgumentsExecutionMode; @@ -130,7 +130,7 @@ long hashCodeForUnresolvedSymbol( @Shared("hashCodeNode") @Cached HashCodeNode hashCodeNode) { long nameHash = hashCodeNode.execute(unresolvedSymbol.getName()); long scopeHash = hashCodeNode.execute(unresolvedSymbol.getScope()); - return Objects.hashCode(nameHash, scopeHash); + return Objects.hash(nameHash, scopeHash); } @Specialization diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/meta/Instrumentor.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/meta/Instrumentor.java index 8b8a64952cf5..da77904cb888 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/meta/Instrumentor.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/meta/Instrumentor.java @@ -6,12 +6,12 @@ import com.oracle.truffle.api.interop.InteropException; import com.oracle.truffle.api.interop.InteropLibrary; import org.enso.interpreter.EnsoLanguage; -import org.enso.interpreter.instrument.Timer; import org.enso.interpreter.node.callable.FunctionCallInstrumentationNode; import org.enso.interpreter.runtime.EnsoContext; import org.enso.interpreter.runtime.Module; import org.enso.interpreter.runtime.data.EnsoObject; import org.enso.interpreter.runtime.data.vector.ArrayLikeHelpers; +import org.enso.interpreter.runtime.instrument.Timer; import org.enso.polyglot.debugger.IdExecutionService; final class Instrumentor implements EnsoObject, IdExecutionService.Callbacks { diff --git a/engine/runtime/src/main/java/org/enso/interpreter/runtime/EnsoContext.java b/engine/runtime/src/main/java/org/enso/interpreter/runtime/EnsoContext.java index 72704cc4513c..db7ce623b893 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/runtime/EnsoContext.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/runtime/EnsoContext.java @@ -49,11 +49,11 @@ import org.enso.editions.LibraryName; import org.enso.interpreter.EnsoLanguage; import org.enso.interpreter.OptionsHelper; -import org.enso.interpreter.instrument.NotificationHandler; import org.enso.interpreter.runtime.builtin.Builtins; import org.enso.interpreter.runtime.data.Type; import org.enso.interpreter.runtime.error.DataflowError; import org.enso.interpreter.runtime.error.PanicException; +import org.enso.interpreter.runtime.instrument.NotificationHandler; import org.enso.interpreter.runtime.scope.TopLevelScope; import org.enso.interpreter.runtime.state.ExecutionEnvironment; import org.enso.interpreter.runtime.state.State; diff --git a/engine/runtime/src/main/scala/org/enso/interpreter/runtime/DefaultPackageRepository.scala b/engine/runtime/src/main/scala/org/enso/interpreter/runtime/DefaultPackageRepository.scala index e1d571cb3131..976fa8ddfd14 100644 --- a/engine/runtime/src/main/scala/org/enso/interpreter/runtime/DefaultPackageRepository.scala +++ b/engine/runtime/src/main/scala/org/enso/interpreter/runtime/DefaultPackageRepository.scala @@ -34,8 +34,8 @@ import org.enso.distribution.locking.ResourceManager import org.enso.distribution.{DistributionManager, LanguageHome} import org.enso.editions.updater.EditionManager import org.enso.editions.{DefaultEdition, Editions, LibraryName} -import org.enso.interpreter.instrument.NotificationHandler import org.enso.interpreter.runtime.builtin.Builtins +import org.enso.interpreter.runtime.instrument.NotificationHandler import org.enso.librarymanager.DefaultLibraryProvider import org.enso.pkg.{ComponentGroups, Package} diff --git a/engine/runtime/src/main/scala/org/enso/interpreter/instrument/NotificationHandler.scala b/engine/runtime/src/main/scala/org/enso/interpreter/runtime/instrument/NotificationHandler.scala similarity index 98% rename from engine/runtime/src/main/scala/org/enso/interpreter/instrument/NotificationHandler.scala rename to engine/runtime/src/main/scala/org/enso/interpreter/runtime/instrument/NotificationHandler.scala index dbb26a429448..641ad27ad17f 100644 --- a/engine/runtime/src/main/scala/org/enso/interpreter/instrument/NotificationHandler.scala +++ b/engine/runtime/src/main/scala/org/enso/interpreter/runtime/instrument/NotificationHandler.scala @@ -1,4 +1,4 @@ -package org.enso.interpreter.instrument +package org.enso.interpreter.runtime.instrument import com.typesafe.scalalogging.Logger import org.enso.cli.ProgressBar diff --git a/engine/runtime/src/main/scala/org/enso/interpreter/instrument/Timer.scala b/engine/runtime/src/main/scala/org/enso/interpreter/runtime/instrument/Timer.scala similarity index 87% rename from engine/runtime/src/main/scala/org/enso/interpreter/instrument/Timer.scala rename to engine/runtime/src/main/scala/org/enso/interpreter/runtime/instrument/Timer.scala index c1dbbe83f0db..de7829e0019c 100644 --- a/engine/runtime/src/main/scala/org/enso/interpreter/instrument/Timer.scala +++ b/engine/runtime/src/main/scala/org/enso/interpreter/runtime/instrument/Timer.scala @@ -1,4 +1,4 @@ -package org.enso.interpreter.instrument +package org.enso.interpreter.runtime.instrument /** A very simple timer. */ trait Timer { diff --git a/lib/scala/cli/src/main/scala/org/enso/cli/OS.scala b/lib/scala/cli/src/main/scala/org/enso/cli/OS.scala index dc3aa15b9d46..1c1b0241fae5 100644 --- a/lib/scala/cli/src/main/scala/org/enso/cli/OS.scala +++ b/lib/scala/cli/src/main/scala/org/enso/cli/OS.scala @@ -2,7 +2,7 @@ package org.enso.cli import com.typesafe.scalalogging.Logger import io.circe.{Decoder, DecodingFailure} -import org.enso.yaml.YamlDecoder +import org.enso.scala.yaml.YamlDecoder import org.yaml.snakeyaml.nodes.{Node, ScalarNode} import org.yaml.snakeyaml.error.YAMLException diff --git a/lib/scala/distribution-manager/src/main/scala/org/enso/distribution/config/DefaultVersion.scala b/lib/scala/distribution-manager/src/main/scala/org/enso/distribution/config/DefaultVersion.scala index 4a2672a82738..360363ea1941 100644 --- a/lib/scala/distribution-manager/src/main/scala/org/enso/distribution/config/DefaultVersion.scala +++ b/lib/scala/distribution-manager/src/main/scala/org/enso/distribution/config/DefaultVersion.scala @@ -2,8 +2,8 @@ package org.enso.distribution.config import org.enso.semver.SemVer import org.enso.cli.arguments.{Argument, OptsParseError} +import org.enso.scala.yaml.{YamlDecoder, YamlEncoder} import org.enso.semver.SemVerYaml._ -import org.enso.yaml.{YamlDecoder, YamlEncoder} import org.yaml.snakeyaml.nodes.{Node, ScalarNode} /** Default version that is used when launching Enso outside of projects and diff --git a/lib/scala/distribution-manager/src/main/scala/org/enso/distribution/config/GlobalConfig.scala b/lib/scala/distribution-manager/src/main/scala/org/enso/distribution/config/GlobalConfig.scala index af0f04abfc53..b6db81754639 100644 --- a/lib/scala/distribution-manager/src/main/scala/org/enso/distribution/config/GlobalConfig.scala +++ b/lib/scala/distribution-manager/src/main/scala/org/enso/distribution/config/GlobalConfig.scala @@ -1,6 +1,6 @@ package org.enso.distribution.config -import org.enso.yaml.{YamlDecoder, YamlEncoder} +import org.enso.scala.yaml.{YamlDecoder, YamlEncoder} import org.yaml.snakeyaml.error.YAMLException import org.yaml.snakeyaml.nodes.{MappingNode, Node} diff --git a/lib/scala/distribution-manager/src/main/scala/org/enso/distribution/config/GlobalConfigurationManager.scala b/lib/scala/distribution-manager/src/main/scala/org/enso/distribution/config/GlobalConfigurationManager.scala index 6bb5dea91cfb..20e489e9f416 100644 --- a/lib/scala/distribution-manager/src/main/scala/org/enso/distribution/config/GlobalConfigurationManager.scala +++ b/lib/scala/distribution-manager/src/main/scala/org/enso/distribution/config/GlobalConfigurationManager.scala @@ -3,7 +3,7 @@ package org.enso.distribution.config import com.typesafe.scalalogging.Logger import org.enso.distribution.DistributionManager import org.enso.distribution.FileSystem.PathSyntax -import org.enso.yaml.{YamlDecoder, YamlEncoder} +import org.enso.scala.yaml.{YamlDecoder, YamlEncoder} import org.yaml.snakeyaml.{DumperOptions, Yaml} import org.yaml.snakeyaml.error.YAMLException import org.yaml.snakeyaml.nodes.{MappingNode, Node, NodeTuple, ScalarNode, Tag} diff --git a/lib/scala/edition-updater/src/test/scala/org/enso/editions/updater/UpdatingEditionProviderTest.scala b/lib/scala/edition-updater/src/test/scala/org/enso/editions/updater/UpdatingEditionProviderTest.scala index 57d30fcb7fb8..5dc67a0ecb5e 100644 --- a/lib/scala/edition-updater/src/test/scala/org/enso/editions/updater/UpdatingEditionProviderTest.scala +++ b/lib/scala/edition-updater/src/test/scala/org/enso/editions/updater/UpdatingEditionProviderTest.scala @@ -1,7 +1,7 @@ package org.enso.editions.updater +import org.enso.librarymanager.test.published.repository.ExampleRepository import org.enso.semver.SemVer -import org.enso.librarymanager.published.repository.ExampleRepository import org.enso.testkit.WithTemporaryDirectory import org.scalatest.Inside import org.scalatest.matchers.should.Matchers diff --git a/lib/scala/edition-uploader/src/main/scala/org/enso/build/editionuploader/EditionUploader.scala b/lib/scala/edition-uploader/src/main/scala/org/enso/build/editionuploader/EditionUploader.scala index fa2e55e87072..a93c8d68edfd 100644 --- a/lib/scala/edition-uploader/src/main/scala/org/enso/build/editionuploader/EditionUploader.scala +++ b/lib/scala/edition-uploader/src/main/scala/org/enso/build/editionuploader/EditionUploader.scala @@ -4,6 +4,7 @@ import org.enso.build.AWS import org.enso.editions.EditionName import org.enso.yaml.YamlHelper import org.enso.editions.repository.Manifest +import org.enso.version.BuildVersion import java.io.PrintWriter import java.nio.file.{Files, Path} @@ -27,7 +28,7 @@ object EditionUploader { * If the environment variable [[NIGHTLIES_TO_KEEP]] */ def main(args: Array[String]): Unit = try { - val edition = EditionName(buildinfo.Info.currentEdition) + val edition = EditionName(BuildVersion.currentEdition) updateEditionsRepository(edition) } catch { case NonFatal(error) => diff --git a/lib/scala/library-manager/src/main/scala/org/enso/editions/DefaultEdition.scala b/lib/scala/editions/src/main/scala/org/enso/editions/DefaultEdition.scala similarity index 82% rename from lib/scala/library-manager/src/main/scala/org/enso/editions/DefaultEdition.scala rename to lib/scala/editions/src/main/scala/org/enso/editions/DefaultEdition.scala index 99561fc6cafa..dff972b8890b 100644 --- a/lib/scala/library-manager/src/main/scala/org/enso/editions/DefaultEdition.scala +++ b/lib/scala/editions/src/main/scala/org/enso/editions/DefaultEdition.scala @@ -1,6 +1,6 @@ package org.enso.editions -import buildinfo.Info +import org.enso.version.BuildVersion /** Allows to get the default edition associated with the current Enso version. * @@ -13,5 +13,5 @@ object DefaultEdition { /** Returns the default edition associated with the current Enso version. */ def getDefaultEdition: Editions.RawEdition = - Editions.Raw.Edition(parent = Some(Info.currentEdition)) + Editions.Raw.Edition(parent = Some(BuildVersion.currentEdition)) } diff --git a/lib/scala/editions/src/main/scala/org/enso/editions/EditionName.scala b/lib/scala/editions/src/main/scala/org/enso/editions/EditionName.scala index fe6cc85c9e9b..f33c9d97d6ca 100644 --- a/lib/scala/editions/src/main/scala/org/enso/editions/EditionName.scala +++ b/lib/scala/editions/src/main/scala/org/enso/editions/EditionName.scala @@ -1,8 +1,8 @@ package org.enso.editions +import org.enso.scala.yaml.{YamlDecoder, YamlEncoder} import org.yaml.snakeyaml.error.YAMLException import org.yaml.snakeyaml.nodes.{Node, ScalarNode, Tag} -import org.enso.yaml.{YamlDecoder, YamlEncoder} /** A helper type to handle special parsing logic of edition names. * diff --git a/lib/scala/editions/src/main/scala/org/enso/editions/Editions.scala b/lib/scala/editions/src/main/scala/org/enso/editions/Editions.scala index 3493b64fe009..c169e8cbd408 100644 --- a/lib/scala/editions/src/main/scala/org/enso/editions/Editions.scala +++ b/lib/scala/editions/src/main/scala/org/enso/editions/Editions.scala @@ -1,9 +1,9 @@ package org.enso.editions +import org.enso.scala.yaml.{YamlDecoder, YamlEncoder} import org.enso.semver.{SemVer, SemVerYaml} import org.yaml.snakeyaml.nodes.{MappingNode, Node, ScalarNode} -import org.enso.yaml.{YamlDecoder, YamlEncoder} -import org.enso.yaml.YamlDecoder.MapKeyField +import YamlDecoder.MapKeyField import org.yaml.snakeyaml.error.YAMLException import java.util diff --git a/lib/scala/editions/src/main/scala/org/enso/editions/LibraryName.scala b/lib/scala/editions/src/main/scala/org/enso/editions/LibraryName.scala index 1e77808b03e1..6af3f4a8117e 100644 --- a/lib/scala/editions/src/main/scala/org/enso/editions/LibraryName.scala +++ b/lib/scala/editions/src/main/scala/org/enso/editions/LibraryName.scala @@ -2,7 +2,7 @@ package org.enso.editions import io.circe.syntax.EncoderOps import io.circe.{Decoder, DecodingFailure, Encoder} -import org.enso.yaml.{YamlDecoder, YamlEncoder} +import org.enso.scala.yaml.{YamlDecoder, YamlEncoder} import org.yaml.snakeyaml.error.YAMLException import org.yaml.snakeyaml.nodes.{MappingNode, Node, ScalarNode} diff --git a/lib/scala/editions/src/main/scala/org/enso/editions/repository/Manifest.scala b/lib/scala/editions/src/main/scala/org/enso/editions/repository/Manifest.scala index 5b1a597b8df7..1075f39fda87 100644 --- a/lib/scala/editions/src/main/scala/org/enso/editions/repository/Manifest.scala +++ b/lib/scala/editions/src/main/scala/org/enso/editions/repository/Manifest.scala @@ -1,7 +1,7 @@ package org.enso.editions.repository import org.enso.editions.EditionName -import org.enso.yaml.{YamlDecoder, YamlEncoder} +import org.enso.scala.yaml.{YamlDecoder, YamlEncoder} import org.yaml.snakeyaml.error.YAMLException import org.yaml.snakeyaml.nodes.{MappingNode, Node, ScalarNode, SequenceNode} diff --git a/lib/scala/editions/src/main/scala/org/enso/yaml/YamlHelper.scala b/lib/scala/editions/src/main/scala/org/enso/yaml/YamlHelper.scala index cd9e2fdca460..eb0f9ba36613 100644 --- a/lib/scala/editions/src/main/scala/org/enso/yaml/YamlHelper.scala +++ b/lib/scala/editions/src/main/scala/org/enso/yaml/YamlHelper.scala @@ -1,5 +1,6 @@ package org.enso.yaml +import org.enso.scala.yaml.{YamlDecoder, YamlEncoder} import org.yaml.snakeyaml.nodes.Tag import org.yaml.snakeyaml.{DumperOptions, Yaml} diff --git a/lib/scala/filewatcher/src/main/scala/org/enso/filewatcher/Watcher.scala b/lib/scala/filewatcher/src/main/scala/org/enso/filewatcher/Watcher.scala index a0b7d892a16a..5dd049ba3240 100644 --- a/lib/scala/filewatcher/src/main/scala/org/enso/filewatcher/Watcher.scala +++ b/lib/scala/filewatcher/src/main/scala/org/enso/filewatcher/Watcher.scala @@ -40,7 +40,7 @@ object Watcher { /** Object representing en error. * - * @param exception an error + * @param throwable an error */ - case class WatcherError(exception: Exception) + case class WatcherError(throwable: Throwable) } diff --git a/lib/scala/filewatcher/src/main/scala/org/enso/filewatcher/WatcherAdapter.scala b/lib/scala/filewatcher/src/main/scala/org/enso/filewatcher/WatcherAdapter.scala index 6063ae5e762e..e3ab95452902 100644 --- a/lib/scala/filewatcher/src/main/scala/org/enso/filewatcher/WatcherAdapter.scala +++ b/lib/scala/filewatcher/src/main/scala/org/enso/filewatcher/WatcherAdapter.scala @@ -5,6 +5,7 @@ import io.methvin.watcher.{ DirectoryChangeListener, DirectoryWatcher } +import org.slf4j.LoggerFactory import java.util.concurrent.Executor import java.nio.file.Path @@ -22,15 +23,30 @@ final class WatcherAdapter( ) extends Watcher with DirectoryChangeListener { - private val watcher: DirectoryWatcher = DirectoryWatcher - .builder() - .path(root) - .listener(this) - .build() + private val logger = + LoggerFactory.getLogger(classOf[WatcherAdapter]) + + private val watcher: DirectoryWatcher = + try { + DirectoryWatcher + .builder() + .path(root) + .listener(this) + .build() + } catch { + case t: Throwable => + logger.error("Failed to create DirectoryWatcher", t) + throw t + } /** @inheritdoc */ override def start(executor: Executor): Unit = { - watcher.watchAsync(executor) + val fut = watcher.watchAsync(executor) + fut.exceptionally(e => { + val error = Watcher.WatcherError(e) + errorCallback(error) + null + }) } /** @inheritdoc */ diff --git a/lib/scala/library-manager-test/src/main/scala/org/enso/librarymanager/published/repository/DownloaderTest.scala b/lib/scala/library-manager-test/src/main/scala/org/enso/librarymanager/test/published/repository/DownloaderTest.scala similarity index 96% rename from lib/scala/library-manager-test/src/main/scala/org/enso/librarymanager/published/repository/DownloaderTest.scala rename to lib/scala/library-manager-test/src/main/scala/org/enso/librarymanager/test/published/repository/DownloaderTest.scala index 18994b618648..304d356802a0 100644 --- a/lib/scala/library-manager-test/src/main/scala/org/enso/librarymanager/published/repository/DownloaderTest.scala +++ b/lib/scala/library-manager-test/src/main/scala/org/enso/librarymanager/test/published/repository/DownloaderTest.scala @@ -1,4 +1,4 @@ -package org.enso.librarymanager.published.repository +package org.enso.librarymanager.test.published.repository import org.enso.cli.task.{ProgressReporter, TaskProgress} import org.enso.distribution.TemporaryDirectoryManager diff --git a/lib/scala/library-manager-test/src/main/scala/org/enso/librarymanager/published/repository/DummyRepository.scala b/lib/scala/library-manager-test/src/main/scala/org/enso/librarymanager/test/published/repository/DummyRepository.scala similarity index 97% rename from lib/scala/library-manager-test/src/main/scala/org/enso/librarymanager/published/repository/DummyRepository.scala rename to lib/scala/library-manager-test/src/main/scala/org/enso/librarymanager/test/published/repository/DummyRepository.scala index f1e6d08945e6..6ce729c40b1e 100644 --- a/lib/scala/library-manager-test/src/main/scala/org/enso/librarymanager/published/repository/DummyRepository.scala +++ b/lib/scala/library-manager-test/src/main/scala/org/enso/librarymanager/test/published/repository/DummyRepository.scala @@ -1,6 +1,5 @@ -package org.enso.librarymanager.published.repository +package org.enso.librarymanager.test.published.repository -import org.enso.semver.SemVer import org.enso.cli.OS import org.enso.distribution.FileSystem import org.enso.downloader.archive.TarGzWriter @@ -8,6 +7,8 @@ import org.enso.editions.Editions.RawEdition import org.enso.editions.{Editions, LibraryName} import org.enso.pkg.{Package, PackageManager} import org.enso.process.WrappedProcess +import org.enso.semver.SemVer +import org.enso.version.BuildVersion import org.enso.yaml.YamlHelper import java.io.File @@ -125,7 +126,7 @@ abstract class DummyRepository(toolsRootDirectory: Path) { */ def createEdition(repoUrl: String): RawEdition = { Editions.Raw.Edition( - parent = Some(buildinfo.Info.currentEdition), + parent = Some(BuildVersion.currentEdition), repositories = Map(repoName -> Editions.Repository(repoName, repoUrl)), libraries = Map.from(libraries.map { lib => lib.libraryName -> Editions.Raw diff --git a/lib/scala/library-manager-test/src/main/scala/org/enso/librarymanager/published/repository/EmptyRepository.scala b/lib/scala/library-manager-test/src/main/scala/org/enso/librarymanager/test/published/repository/EmptyRepository.scala similarity index 83% rename from lib/scala/library-manager-test/src/main/scala/org/enso/librarymanager/published/repository/EmptyRepository.scala rename to lib/scala/library-manager-test/src/main/scala/org/enso/librarymanager/test/published/repository/EmptyRepository.scala index c3b721c7eca2..50094d795f10 100644 --- a/lib/scala/library-manager-test/src/main/scala/org/enso/librarymanager/published/repository/EmptyRepository.scala +++ b/lib/scala/library-manager-test/src/main/scala/org/enso/librarymanager/test/published/repository/EmptyRepository.scala @@ -1,4 +1,5 @@ -package org.enso.librarymanager.published.repository +package org.enso.librarymanager.test.published.repository + import org.enso.editions.Editions.RawEdition import java.nio.file.Path diff --git a/lib/scala/library-manager-test/src/main/scala/org/enso/librarymanager/published/repository/ExampleRepository.scala b/lib/scala/library-manager-test/src/main/scala/org/enso/librarymanager/test/published/repository/ExampleRepository.scala similarity index 93% rename from lib/scala/library-manager-test/src/main/scala/org/enso/librarymanager/published/repository/ExampleRepository.scala rename to lib/scala/library-manager-test/src/main/scala/org/enso/librarymanager/test/published/repository/ExampleRepository.scala index a50cad039ec4..d60b4900c23c 100644 --- a/lib/scala/library-manager-test/src/main/scala/org/enso/librarymanager/published/repository/ExampleRepository.scala +++ b/lib/scala/library-manager-test/src/main/scala/org/enso/librarymanager/test/published/repository/ExampleRepository.scala @@ -1,8 +1,8 @@ -package org.enso.librarymanager.published.repository +package org.enso.librarymanager.test.published.repository -import org.enso.semver.SemVer import org.enso.editions.Editions.RawEdition import org.enso.editions.{Editions, LibraryName} +import org.enso.semver.SemVer import java.nio.file.Path diff --git a/lib/scala/library-manager-test/src/test/scala/org/enso/librarymanager/published/repository/LibraryDownloadTest.scala b/lib/scala/library-manager-test/src/test/scala/org/enso/librarymanager/published/repository/LibraryDownloadTest.scala index f1c8d66d002f..f6de0a82c434 100644 --- a/lib/scala/library-manager-test/src/test/scala/org/enso/librarymanager/published/repository/LibraryDownloadTest.scala +++ b/lib/scala/library-manager-test/src/test/scala/org/enso/librarymanager/published/repository/LibraryDownloadTest.scala @@ -2,6 +2,10 @@ package org.enso.librarymanager.published.repository import org.enso.editions.Editions import org.enso.librarymanager.published.cache.DownloadingLibraryCache +import org.enso.librarymanager.test.published.repository.{ + DownloaderTest, + ExampleRepository +} import org.enso.logger.TestLogMessage import org.enso.pkg.PackageManager import org.enso.testkit.{RetrySpec, WithTemporaryDirectory} diff --git a/lib/scala/library-manager-test/src/test/scala/org/enso/libraryupload/LibraryUploadTest.scala b/lib/scala/library-manager-test/src/test/scala/org/enso/libraryupload/LibraryUploadTest.scala index 1597e413eb94..1febfa760bbc 100644 --- a/lib/scala/library-manager-test/src/test/scala/org/enso/libraryupload/LibraryUploadTest.scala +++ b/lib/scala/library-manager-test/src/test/scala/org/enso/libraryupload/LibraryUploadTest.scala @@ -3,7 +3,7 @@ package org.enso.libraryupload import org.enso.semver.SemVer import org.enso.cli.task.{ProgressReporter, TaskProgress} import org.enso.editions.{Editions, LibraryName} -import org.enso.librarymanager.published.repository.{ +import org.enso.librarymanager.test.published.repository.{ DownloaderTest, EmptyRepository } diff --git a/lib/scala/library-manager/src/main/scala/org/enso/librarymanager/published/repository/LibraryManifest.scala b/lib/scala/library-manager/src/main/scala/org/enso/librarymanager/published/repository/LibraryManifest.scala index 7fcc01dc740a..b54810368bc8 100644 --- a/lib/scala/library-manager/src/main/scala/org/enso/librarymanager/published/repository/LibraryManifest.scala +++ b/lib/scala/library-manager/src/main/scala/org/enso/librarymanager/published/repository/LibraryManifest.scala @@ -1,7 +1,7 @@ package org.enso.librarymanager.published.repository import org.enso.editions.LibraryName -import org.enso.yaml.{YamlDecoder, YamlEncoder} +import org.enso.scala.yaml.{YamlDecoder, YamlEncoder} import org.yaml.snakeyaml.error.YAMLException import org.yaml.snakeyaml.nodes.{MappingNode, Node} diff --git a/lib/scala/logging-config/src/main/java/org/enso/logger/config/Appender.java b/lib/scala/logging-config/src/main/java/org/enso/logging/config/Appender.java similarity index 97% rename from lib/scala/logging-config/src/main/java/org/enso/logger/config/Appender.java rename to lib/scala/logging-config/src/main/java/org/enso/logging/config/Appender.java index 58524572c671..84a5861732de 100644 --- a/lib/scala/logging-config/src/main/java/org/enso/logger/config/Appender.java +++ b/lib/scala/logging-config/src/main/java/org/enso/logging/config/Appender.java @@ -1,8 +1,7 @@ -package org.enso.logger.config; +package org.enso.logging.config; import com.typesafe.config.Config; import java.nio.file.Path; -import org.enso.logger.LoggerSetup; import org.slf4j.event.Level; /** diff --git a/lib/scala/logging-config/src/main/java/org/enso/logger/config/BaseConfig.java b/lib/scala/logging-config/src/main/java/org/enso/logging/config/BaseConfig.java similarity index 94% rename from lib/scala/logging-config/src/main/java/org/enso/logger/config/BaseConfig.java rename to lib/scala/logging-config/src/main/java/org/enso/logging/config/BaseConfig.java index 10a56b3c5873..ba308c2d2205 100644 --- a/lib/scala/logging-config/src/main/java/org/enso/logger/config/BaseConfig.java +++ b/lib/scala/logging-config/src/main/java/org/enso/logging/config/BaseConfig.java @@ -1,4 +1,4 @@ -package org.enso.logger.config; +package org.enso.logging.config; import java.util.Map; diff --git a/lib/scala/logging-config/src/main/java/org/enso/logger/config/ConsoleAppender.java b/lib/scala/logging-config/src/main/java/org/enso/logging/config/ConsoleAppender.java similarity index 95% rename from lib/scala/logging-config/src/main/java/org/enso/logger/config/ConsoleAppender.java rename to lib/scala/logging-config/src/main/java/org/enso/logging/config/ConsoleAppender.java index 7d96ad42834d..acd217d3df2f 100644 --- a/lib/scala/logging-config/src/main/java/org/enso/logger/config/ConsoleAppender.java +++ b/lib/scala/logging-config/src/main/java/org/enso/logging/config/ConsoleAppender.java @@ -1,8 +1,7 @@ -package org.enso.logger.config; +package org.enso.logging.config; import com.typesafe.config.Config; import java.nio.file.Path; -import org.enso.logger.LoggerSetup; import org.slf4j.event.Level; /** Config for log configuration that appends to the console */ diff --git a/lib/scala/logging-config/src/main/java/org/enso/logger/config/FileAppender.java b/lib/scala/logging-config/src/main/java/org/enso/logging/config/FileAppender.java similarity index 98% rename from lib/scala/logging-config/src/main/java/org/enso/logger/config/FileAppender.java rename to lib/scala/logging-config/src/main/java/org/enso/logging/config/FileAppender.java index c1fe2a70098c..04bc46ee3958 100644 --- a/lib/scala/logging-config/src/main/java/org/enso/logger/config/FileAppender.java +++ b/lib/scala/logging-config/src/main/java/org/enso/logging/config/FileAppender.java @@ -1,9 +1,8 @@ -package org.enso.logger.config; +package org.enso.logging.config; import com.typesafe.config.Config; import java.nio.file.Path; import java.nio.file.Paths; -import org.enso.logger.LoggerSetup; import org.slf4j.event.Level; /** Config for log configuration that appends to the file. */ diff --git a/lib/scala/logging-config/src/main/java/org/enso/logger/config/LogToFile.java b/lib/scala/logging-config/src/main/java/org/enso/logging/config/LogToFile.java similarity index 97% rename from lib/scala/logging-config/src/main/java/org/enso/logger/config/LogToFile.java rename to lib/scala/logging-config/src/main/java/org/enso/logging/config/LogToFile.java index ca2147ece1e7..e4a8c224bee1 100644 --- a/lib/scala/logging-config/src/main/java/org/enso/logger/config/LogToFile.java +++ b/lib/scala/logging-config/src/main/java/org/enso/logging/config/LogToFile.java @@ -1,4 +1,4 @@ -package org.enso.logger.config; +package org.enso.logging.config; import com.typesafe.config.Config; import org.slf4j.event.Level; diff --git a/lib/scala/logging-config/src/main/java/org/enso/logger/LoggerSetup.java b/lib/scala/logging-config/src/main/java/org/enso/logging/config/LoggerSetup.java similarity index 97% rename from lib/scala/logging-config/src/main/java/org/enso/logger/LoggerSetup.java rename to lib/scala/logging-config/src/main/java/org/enso/logging/config/LoggerSetup.java index a07a23211c73..9aee8525b18c 100644 --- a/lib/scala/logging-config/src/main/java/org/enso/logger/LoggerSetup.java +++ b/lib/scala/logging-config/src/main/java/org/enso/logging/config/LoggerSetup.java @@ -1,9 +1,7 @@ -package org.enso.logger; +package org.enso.logging.config; import java.nio.file.Path; import java.util.ServiceLoader; -import org.enso.logger.config.LoggingServiceConfig; -import org.enso.logger.config.MissingConfigurationField; import org.slf4j.event.Level; /** Base class to be implemented by the underlying logging implementation. */ diff --git a/lib/scala/logging-config/src/main/java/org/enso/logger/config/LoggersLevels.java b/lib/scala/logging-config/src/main/java/org/enso/logging/config/LoggersLevels.java similarity index 99% rename from lib/scala/logging-config/src/main/java/org/enso/logger/config/LoggersLevels.java rename to lib/scala/logging-config/src/main/java/org/enso/logging/config/LoggersLevels.java index 530123a3d8b4..d87da9750bc1 100644 --- a/lib/scala/logging-config/src/main/java/org/enso/logger/config/LoggersLevels.java +++ b/lib/scala/logging-config/src/main/java/org/enso/logging/config/LoggersLevels.java @@ -1,4 +1,4 @@ -package org.enso.logger.config; +package org.enso.logging.config; import com.typesafe.config.Config; import com.typesafe.config.ConfigFactory; diff --git a/lib/scala/logging-config/src/main/java/org/enso/logger/config/LoggingServer.java b/lib/scala/logging-config/src/main/java/org/enso/logging/config/LoggingServer.java similarity index 98% rename from lib/scala/logging-config/src/main/java/org/enso/logger/config/LoggingServer.java rename to lib/scala/logging-config/src/main/java/org/enso/logging/config/LoggingServer.java index 7a76b317ab40..9c0895b84c77 100644 --- a/lib/scala/logging-config/src/main/java/org/enso/logger/config/LoggingServer.java +++ b/lib/scala/logging-config/src/main/java/org/enso/logging/config/LoggingServer.java @@ -1,4 +1,4 @@ -package org.enso.logger.config; +package org.enso.logging.config; import com.typesafe.config.Config; import java.util.HashMap; diff --git a/lib/scala/logging-config/src/main/java/org/enso/logger/config/LoggingServiceConfig.java b/lib/scala/logging-config/src/main/java/org/enso/logging/config/LoggingServiceConfig.java similarity index 99% rename from lib/scala/logging-config/src/main/java/org/enso/logger/config/LoggingServiceConfig.java rename to lib/scala/logging-config/src/main/java/org/enso/logging/config/LoggingServiceConfig.java index d5f69263311a..9a25afebeaee 100644 --- a/lib/scala/logging-config/src/main/java/org/enso/logger/config/LoggingServiceConfig.java +++ b/lib/scala/logging-config/src/main/java/org/enso/logging/config/LoggingServiceConfig.java @@ -1,4 +1,4 @@ -package org.enso.logger.config; +package org.enso.logging.config; import com.typesafe.config.Config; import com.typesafe.config.ConfigException; diff --git a/lib/scala/logging-config/src/main/java/org/enso/logger/config/MemoryAppender.java b/lib/scala/logging-config/src/main/java/org/enso/logging/config/MemoryAppender.java similarity index 95% rename from lib/scala/logging-config/src/main/java/org/enso/logger/config/MemoryAppender.java rename to lib/scala/logging-config/src/main/java/org/enso/logging/config/MemoryAppender.java index ef77217f51d8..132210e51326 100644 --- a/lib/scala/logging-config/src/main/java/org/enso/logger/config/MemoryAppender.java +++ b/lib/scala/logging-config/src/main/java/org/enso/logging/config/MemoryAppender.java @@ -1,8 +1,7 @@ -package org.enso.logger.config; +package org.enso.logging.config; import com.typesafe.config.Config; import java.nio.file.Path; -import org.enso.logger.LoggerSetup; import org.slf4j.event.Level; /** diff --git a/lib/scala/logging-config/src/main/java/org/enso/logger/config/MissingConfigurationField.java b/lib/scala/logging-config/src/main/java/org/enso/logging/config/MissingConfigurationField.java similarity index 84% rename from lib/scala/logging-config/src/main/java/org/enso/logger/config/MissingConfigurationField.java rename to lib/scala/logging-config/src/main/java/org/enso/logging/config/MissingConfigurationField.java index 95749dd6d93c..b28f38dc64c9 100644 --- a/lib/scala/logging-config/src/main/java/org/enso/logger/config/MissingConfigurationField.java +++ b/lib/scala/logging-config/src/main/java/org/enso/logging/config/MissingConfigurationField.java @@ -1,4 +1,4 @@ -package org.enso.logger.config; +package org.enso.logging.config; public class MissingConfigurationField extends Exception { public MissingConfigurationField(String name) { diff --git a/lib/scala/logging-config/src/main/java/org/enso/logger/config/SentryAppender.java b/lib/scala/logging-config/src/main/java/org/enso/logging/config/SentryAppender.java similarity index 96% rename from lib/scala/logging-config/src/main/java/org/enso/logger/config/SentryAppender.java rename to lib/scala/logging-config/src/main/java/org/enso/logging/config/SentryAppender.java index 1c4fa75daf34..6aa73dc5ea3e 100644 --- a/lib/scala/logging-config/src/main/java/org/enso/logger/config/SentryAppender.java +++ b/lib/scala/logging-config/src/main/java/org/enso/logging/config/SentryAppender.java @@ -1,8 +1,7 @@ -package org.enso.logger.config; +package org.enso.logging.config; import com.typesafe.config.Config; import java.nio.file.Path; -import org.enso.logger.LoggerSetup; import org.slf4j.event.Level; /** Config for log configuration that sends logs to sentry.io service. */ diff --git a/lib/scala/logging-config/src/main/java/org/enso/logger/config/SocketAppender.java b/lib/scala/logging-config/src/main/java/org/enso/logging/config/SocketAppender.java similarity index 96% rename from lib/scala/logging-config/src/main/java/org/enso/logger/config/SocketAppender.java rename to lib/scala/logging-config/src/main/java/org/enso/logging/config/SocketAppender.java index c309e2ebb80f..6a088783951e 100644 --- a/lib/scala/logging-config/src/main/java/org/enso/logger/config/SocketAppender.java +++ b/lib/scala/logging-config/src/main/java/org/enso/logging/config/SocketAppender.java @@ -1,7 +1,6 @@ -package org.enso.logger.config; +package org.enso.logging.config; import com.typesafe.config.Config; -import org.enso.logger.LoggerSetup; import org.slf4j.event.Level; /** Config for log configuration that forwards logs to the network socket as-is. */ diff --git a/lib/scala/logging-service-logback/src/main/java/org/enso/logger/ApplicationFilter.java b/lib/scala/logging-service-logback/src/main/java/org/enso/logging/service/logback/ApplicationFilter.java similarity index 95% rename from lib/scala/logging-service-logback/src/main/java/org/enso/logger/ApplicationFilter.java rename to lib/scala/logging-service-logback/src/main/java/org/enso/logging/service/logback/ApplicationFilter.java index 49f7b6cfe792..f47b282a6cc3 100644 --- a/lib/scala/logging-service-logback/src/main/java/org/enso/logger/ApplicationFilter.java +++ b/lib/scala/logging-service-logback/src/main/java/org/enso/logging/service/logback/ApplicationFilter.java @@ -1,10 +1,10 @@ -package org.enso.logger; +package org.enso.logging.service.logback; import ch.qos.logback.classic.Level; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.filter.Filter; import ch.qos.logback.core.spi.FilterReply; -import org.enso.logger.config.LoggersLevels; +import org.enso.logging.config.LoggersLevels; /** * An implementation of ch.qos.logback.core.filter.Filter that is created from configuration's and diff --git a/lib/scala/logging-service-logback/src/main/java/org/enso/logging/LogbackLoggingServiceFactory.java b/lib/scala/logging-service-logback/src/main/java/org/enso/logging/service/logback/LogbackLoggingServiceFactory.java similarity index 66% rename from lib/scala/logging-service-logback/src/main/java/org/enso/logging/LogbackLoggingServiceFactory.java rename to lib/scala/logging-service-logback/src/main/java/org/enso/logging/service/logback/LogbackLoggingServiceFactory.java index 495031a6151f..1e5c7cf375ed 100644 --- a/lib/scala/logging-service-logback/src/main/java/org/enso/logging/LogbackLoggingServiceFactory.java +++ b/lib/scala/logging-service-logback/src/main/java/org/enso/logging/service/logback/LogbackLoggingServiceFactory.java @@ -1,6 +1,8 @@ -package org.enso.logging; +package org.enso.logging.service.logback; import java.net.URI; +import org.enso.logging.service.LoggingService; +import org.enso.logging.service.LoggingServiceFactory; @org.openide.util.lookup.ServiceProvider(service = LoggingServiceFactory.class) public class LogbackLoggingServiceFactory extends LoggingServiceFactory { diff --git a/lib/scala/logging-service-logback/src/main/java/org/enso/logger/LogbackSetup.java b/lib/scala/logging-service-logback/src/main/java/org/enso/logging/service/logback/LogbackSetup.java similarity index 91% rename from lib/scala/logging-service-logback/src/main/java/org/enso/logger/LogbackSetup.java rename to lib/scala/logging-service-logback/src/main/java/org/enso/logging/service/logback/LogbackSetup.java index 2e2f759e085b..3bfa08be31fc 100644 --- a/lib/scala/logging-service-logback/src/main/java/org/enso/logger/LogbackSetup.java +++ b/lib/scala/logging-service-logback/src/main/java/org/enso/logging/service/logback/LogbackSetup.java @@ -1,4 +1,4 @@ -package org.enso.logger; +package org.enso.logging.service.logback; import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.LoggerContext; @@ -22,7 +22,12 @@ import java.nio.file.Path; import java.time.LocalDate; import java.time.format.DateTimeFormatter; -import org.enso.logger.config.*; +import org.enso.logging.config.Appender; +import org.enso.logging.config.BaseConfig; +import org.enso.logging.config.LoggerSetup; +import org.enso.logging.config.LoggersLevels; +import org.enso.logging.config.LoggingServiceConfig; +import org.enso.logging.config.MissingConfigurationField; import org.slf4j.LoggerFactory; import org.slf4j.event.Level; @@ -126,7 +131,7 @@ public boolean setupSocketAppender(Level logLevel, String hostname, int port) { } LoggerAndContext env = contextInit(targetLogLevel, config, true); - org.enso.logger.config.SocketAppender appenderConfig = config.getSocketAppender(); + org.enso.logging.config.SocketAppender appenderConfig = config.getSocketAppender(); SocketAppender socketAppender = new SocketAppender(); socketAppender.setName("enso-socket"); @@ -145,9 +150,9 @@ public boolean setupSocketAppender(Level logLevel, String hostname, int port) { public boolean setupFileAppender(Level logLevel, Path logRoot, String logPrefix) { try { LoggerAndContext env = contextInit(logLevel, config, true); - org.enso.logger.config.FileAppender appenderConfig = config.getFileAppender(); + org.enso.logging.config.FileAppender appenderConfig = config.getFileAppender(); if (appenderConfig == null) { - throw new MissingConfigurationField(org.enso.logger.config.FileAppender.appenderName); + throw new MissingConfigurationField(org.enso.logging.config.FileAppender.appenderName); } final PatternLayoutEncoder encoder = new PatternLayoutEncoder(); encoder.setPattern(appenderConfig.getPattern()); @@ -169,7 +174,7 @@ public boolean setupFileAppender(Level logLevel, Path logRoot, String logPrefix) logRoot.toAbsolutePath() + File.separator + logPrefix + "-" + "%d{yyyy-MM-dd}"; } - org.enso.logger.config.FileAppender.RollingPolicy rollingPolicy = + org.enso.logging.config.FileAppender.RollingPolicy rollingPolicy = appenderConfig.getRollingPolicy(); SizeAndTimeBasedRollingPolicy logbackRollingPolicy = new SizeAndTimeBasedRollingPolicy(); logbackRollingPolicy.setContext(env.ctx); @@ -218,7 +223,7 @@ public boolean setupConsoleAppender(Level logLevel) { private ch.qos.logback.core.Appender getConsoleAppender( LoggerContext ctx, LoggingServiceConfig config) { - org.enso.logger.config.ConsoleAppender appenderConfig = config.getConsoleAppender(); + org.enso.logging.config.ConsoleAppender appenderConfig = config.getConsoleAppender(); final PatternLayoutEncoder encoder = new PatternLayoutEncoder(); try { if (appenderConfig != null) { @@ -242,10 +247,10 @@ private ch.qos.logback.core.Appender getConsoleAppender( @Override public boolean setupMemoryAppender(Level logLevel) { LoggerAndContext env = contextInit(logLevel, config, !logToFileEnabled()); - org.enso.logger.config.MemoryAppender appenderConfig = config.getMemoryAppender(); + org.enso.logging.config.MemoryAppender appenderConfig = config.getMemoryAppender(); ch.qos.logback.core.Appender target; switch (appenderConfig.getTarget()) { - case org.enso.logger.config.ConsoleAppender.appenderName: + case org.enso.logging.config.ConsoleAppender.appenderName: target = getConsoleAppender(env.ctx, config); break; default: @@ -268,9 +273,9 @@ public boolean setupSentryAppender(Level logLevel, Path logRoot) { try { LoggerAndContext env = contextInit(logLevel, config, !logToFileEnabled()); - org.enso.logger.config.SentryAppender appenderConfig = config.getSentryAppender(); + org.enso.logging.config.SentryAppender appenderConfig = config.getSentryAppender(); if (appenderConfig == null) { - throw new MissingConfigurationField(org.enso.logger.config.SentryAppender.appenderName); + throw new MissingConfigurationField(org.enso.logging.config.SentryAppender.appenderName); } SentryAppender appender = new SentryAppender(); SentryOptions opts = new SentryOptions(); diff --git a/lib/scala/logging-service-logback/src/main/java/org/enso/logging/LoggingServer.java b/lib/scala/logging-service-logback/src/main/java/org/enso/logging/service/logback/LoggingServer.java similarity index 88% rename from lib/scala/logging-service-logback/src/main/java/org/enso/logging/LoggingServer.java rename to lib/scala/logging-service-logback/src/main/java/org/enso/logging/service/logback/LoggingServer.java index a58de6ffd6d7..8427ed37181f 100644 --- a/lib/scala/logging-service-logback/src/main/java/org/enso/logging/LoggingServer.java +++ b/lib/scala/logging-service-logback/src/main/java/org/enso/logging/service/logback/LoggingServer.java @@ -1,12 +1,12 @@ -package org.enso.logging; +package org.enso.logging.service.logback; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.net.SimpleSocketServer; import java.net.URI; import java.net.URISyntaxException; import java.nio.file.Path; -import org.enso.logger.LogbackSetup; -import org.enso.logger.config.BaseConfig; +import org.enso.logging.config.BaseConfig; +import org.enso.logging.service.LoggingService; import org.slf4j.event.Level; class LoggingServer extends LoggingService { diff --git a/lib/scala/logging-service-logback/src/main/java/org/enso/logger/MemoryAppender.java b/lib/scala/logging-service-logback/src/main/java/org/enso/logging/service/logback/MemoryAppender.java similarity index 96% rename from lib/scala/logging-service-logback/src/main/java/org/enso/logger/MemoryAppender.java rename to lib/scala/logging-service-logback/src/main/java/org/enso/logging/service/logback/MemoryAppender.java index fd05de121622..f4660812137c 100644 --- a/lib/scala/logging-service-logback/src/main/java/org/enso/logger/MemoryAppender.java +++ b/lib/scala/logging-service-logback/src/main/java/org/enso/logging/service/logback/MemoryAppender.java @@ -1,4 +1,4 @@ -package org.enso.logger; +package org.enso.logging.service.logback; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.Appender; diff --git a/lib/scala/logging-service-logback/src/test/java/org/enso/logger/TestLogProvider.java b/lib/scala/logging-service-logback/src/test/java/org/enso/logging/service/logback/test/provider/TestLogProvider.java similarity index 88% rename from lib/scala/logging-service-logback/src/test/java/org/enso/logger/TestLogProvider.java rename to lib/scala/logging-service-logback/src/test/java/org/enso/logging/service/logback/test/provider/TestLogProvider.java index f8ccb63e9294..778a623c60da 100644 --- a/lib/scala/logging-service-logback/src/test/java/org/enso/logger/TestLogProvider.java +++ b/lib/scala/logging-service-logback/src/test/java/org/enso/logging/service/logback/test/provider/TestLogProvider.java @@ -1,8 +1,9 @@ -package org.enso.logger; +package org.enso.logging.service.logback.test.provider; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.spi.LogbackServiceProvider; -import org.enso.logger.config.MissingConfigurationField; +import org.enso.logging.config.MissingConfigurationField; +import org.enso.logging.service.logback.LogbackSetup; import org.slf4j.ILoggerFactory; import org.slf4j.IMarkerFactory; import org.slf4j.spi.MDCAdapter; diff --git a/lib/scala/logging-service/src/main/java/org/enso/logging/LoggerInitializationFailed.java b/lib/scala/logging-service/src/main/java/org/enso/logging/service/LoggerInitializationFailed.java similarity index 82% rename from lib/scala/logging-service/src/main/java/org/enso/logging/LoggerInitializationFailed.java rename to lib/scala/logging-service/src/main/java/org/enso/logging/service/LoggerInitializationFailed.java index 94da192c6f74..0e5791c0ea1f 100644 --- a/lib/scala/logging-service/src/main/java/org/enso/logging/LoggerInitializationFailed.java +++ b/lib/scala/logging-service/src/main/java/org/enso/logging/service/LoggerInitializationFailed.java @@ -1,4 +1,4 @@ -package org.enso.logging; +package org.enso.logging.service; public class LoggerInitializationFailed extends RuntimeException { public LoggerInitializationFailed() { diff --git a/lib/scala/logging-service/src/main/java/org/enso/logging/LoggingService.java b/lib/scala/logging-service/src/main/java/org/enso/logging/service/LoggingService.java similarity index 91% rename from lib/scala/logging-service/src/main/java/org/enso/logging/LoggingService.java rename to lib/scala/logging-service/src/main/java/org/enso/logging/service/LoggingService.java index e2b75592a2b9..f656bc106875 100644 --- a/lib/scala/logging-service/src/main/java/org/enso/logging/LoggingService.java +++ b/lib/scala/logging-service/src/main/java/org/enso/logging/service/LoggingService.java @@ -1,7 +1,7 @@ -package org.enso.logging; +package org.enso.logging.service; import java.nio.file.Path; -import org.enso.logger.config.BaseConfig; +import org.enso.logging.config.BaseConfig; import org.slf4j.event.Level; /** diff --git a/lib/scala/logging-service/src/main/java/org/enso/logging/LoggingServiceAlreadySetup.java b/lib/scala/logging-service/src/main/java/org/enso/logging/service/LoggingServiceAlreadySetup.java similarity index 82% rename from lib/scala/logging-service/src/main/java/org/enso/logging/LoggingServiceAlreadySetup.java rename to lib/scala/logging-service/src/main/java/org/enso/logging/service/LoggingServiceAlreadySetup.java index 159b8191e012..2d73dc5e1e0a 100644 --- a/lib/scala/logging-service/src/main/java/org/enso/logging/LoggingServiceAlreadySetup.java +++ b/lib/scala/logging-service/src/main/java/org/enso/logging/service/LoggingServiceAlreadySetup.java @@ -1,4 +1,4 @@ -package org.enso.logging; +package org.enso.logging.service; public class LoggingServiceAlreadySetup extends RuntimeException { public LoggingServiceAlreadySetup() { diff --git a/lib/scala/logging-service/src/main/java/org/enso/logging/LoggingServiceFactory.java b/lib/scala/logging-service/src/main/java/org/enso/logging/service/LoggingServiceFactory.java similarity index 96% rename from lib/scala/logging-service/src/main/java/org/enso/logging/LoggingServiceFactory.java rename to lib/scala/logging-service/src/main/java/org/enso/logging/service/LoggingServiceFactory.java index 97513a8fa80c..590a5fa99e85 100644 --- a/lib/scala/logging-service/src/main/java/org/enso/logging/LoggingServiceFactory.java +++ b/lib/scala/logging-service/src/main/java/org/enso/logging/service/LoggingServiceFactory.java @@ -1,4 +1,4 @@ -package org.enso.logging; +package org.enso.logging.service; import java.net.URI; import java.util.ServiceLoader; diff --git a/lib/scala/logging-service/src/main/java/org/enso/logging/LoggingServiceManager.java b/lib/scala/logging-service/src/main/java/org/enso/logging/service/LoggingServiceManager.java similarity index 95% rename from lib/scala/logging-service/src/main/java/org/enso/logging/LoggingServiceManager.java rename to lib/scala/logging-service/src/main/java/org/enso/logging/service/LoggingServiceManager.java index 16733df855ad..01ea2615cbc6 100644 --- a/lib/scala/logging-service/src/main/java/org/enso/logging/LoggingServiceManager.java +++ b/lib/scala/logging-service/src/main/java/org/enso/logging/service/LoggingServiceManager.java @@ -1,8 +1,8 @@ -package org.enso.logging; +package org.enso.logging.service; import java.net.URI; import java.nio.file.Path; -import org.enso.logger.config.LoggingServer; +import org.enso.logging.config.LoggingServer; import org.slf4j.event.Level; import scala.concurrent.ExecutionContext; import scala.concurrent.Future; diff --git a/lib/scala/logging-service/src/main/java/org/enso/logging/LoggingSetupHelper.java b/lib/scala/logging-service/src/main/java/org/enso/logging/service/LoggingSetupHelper.java similarity index 97% rename from lib/scala/logging-service/src/main/java/org/enso/logging/LoggingSetupHelper.java rename to lib/scala/logging-service/src/main/java/org/enso/logging/service/LoggingSetupHelper.java index cf75c0e0ea19..c5e3e0ec47f0 100644 --- a/lib/scala/logging-service/src/main/java/org/enso/logging/LoggingSetupHelper.java +++ b/lib/scala/logging-service/src/main/java/org/enso/logging/service/LoggingSetupHelper.java @@ -1,12 +1,12 @@ -package org.enso.logging; +package org.enso.logging.service; import java.net.URI; import java.nio.file.Path; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; -import org.enso.logger.LoggerSetup; -import org.enso.logger.config.MissingConfigurationField; import org.enso.logger.masking.Masking; +import org.enso.logging.config.LoggerSetup; +import org.enso.logging.config.MissingConfigurationField; import org.slf4j.event.Level; import scala.Option; import scala.Unit$; diff --git a/lib/scala/logging-utils-akka/src/main/java/org/enso/logger/akka/AkkaConverter.java b/lib/scala/logging-utils-akka/src/main/java/org/enso/logging/utils/akka/AkkaConverter.java similarity index 97% rename from lib/scala/logging-utils-akka/src/main/java/org/enso/logger/akka/AkkaConverter.java rename to lib/scala/logging-utils-akka/src/main/java/org/enso/logging/utils/akka/AkkaConverter.java index d262fb2e2c45..b1a8e9e3d07e 100644 --- a/lib/scala/logging-utils-akka/src/main/java/org/enso/logger/akka/AkkaConverter.java +++ b/lib/scala/logging-utils-akka/src/main/java/org/enso/logging/utils/akka/AkkaConverter.java @@ -1,4 +1,4 @@ -package org.enso.logger.akka; +package org.enso.logging.utils.akka; import static org.slf4j.event.Level.*; diff --git a/lib/scala/logging-utils-akka/src/main/scala/org/enso/logger/akka/ActorLoggingReceive.scala b/lib/scala/logging-utils-akka/src/main/scala/org/enso/logging/utils/akka/ActorLoggingReceive.scala similarity index 97% rename from lib/scala/logging-utils-akka/src/main/scala/org/enso/logger/akka/ActorLoggingReceive.scala rename to lib/scala/logging-utils-akka/src/main/scala/org/enso/logging/utils/akka/ActorLoggingReceive.scala index 3382e6796398..fcaa9e792790 100644 --- a/lib/scala/logging-utils-akka/src/main/scala/org/enso/logger/akka/ActorLoggingReceive.scala +++ b/lib/scala/logging-utils-akka/src/main/scala/org/enso/logging/utils/akka/ActorLoggingReceive.scala @@ -1,4 +1,4 @@ -package org.enso.logger.akka +package org.enso.logging.utils.akka import akka.actor.Actor.Receive import akka.actor.ActorContext diff --git a/lib/scala/logging-utils-akka/src/main/scala/org/enso/logger/akka/ActorMessageLogging.scala b/lib/scala/logging-utils-akka/src/main/scala/org/enso/logging/utils/akka/ActorMessageLogging.scala similarity index 91% rename from lib/scala/logging-utils-akka/src/main/scala/org/enso/logger/akka/ActorMessageLogging.scala rename to lib/scala/logging-utils-akka/src/main/scala/org/enso/logging/utils/akka/ActorMessageLogging.scala index a54e1332788e..ab58e8e1d216 100644 --- a/lib/scala/logging-utils-akka/src/main/scala/org/enso/logger/akka/ActorMessageLogging.scala +++ b/lib/scala/logging-utils-akka/src/main/scala/org/enso/logging/utils/akka/ActorMessageLogging.scala @@ -1,7 +1,6 @@ -package org.enso.logger.akka +package org.enso.logging.utils.akka -import akka.actor.Actor -import akka.actor.ActorContext +import akka.actor.{Actor, ActorContext} import org.slf4j.LoggerFactory /** A trait providing functions for logging received actor messages. */ diff --git a/lib/scala/pkg/src/main/scala/org/enso/pkg/ComponentGroup.scala b/lib/scala/pkg/src/main/scala/org/enso/pkg/ComponentGroup.scala index 823429d0dc0b..4d1c826ae522 100644 --- a/lib/scala/pkg/src/main/scala/org/enso/pkg/ComponentGroup.scala +++ b/lib/scala/pkg/src/main/scala/org/enso/pkg/ComponentGroup.scala @@ -3,9 +3,9 @@ package org.enso.pkg import io.circe._ import io.circe.syntax._ import org.enso.editions.LibraryName +import org.enso.scala.yaml.{YamlDecoder, YamlEncoder} import org.yaml.snakeyaml.error.YAMLException import org.yaml.snakeyaml.nodes.{MappingNode, Node, ScalarNode, SequenceNode} -import org.enso.yaml.{YamlDecoder, YamlEncoder} import java.util diff --git a/lib/scala/pkg/src/main/scala/org/enso/pkg/Config.scala b/lib/scala/pkg/src/main/scala/org/enso/pkg/Config.scala index 827bdf35b953..46435a9b6544 100644 --- a/lib/scala/pkg/src/main/scala/org/enso/pkg/Config.scala +++ b/lib/scala/pkg/src/main/scala/org/enso/pkg/Config.scala @@ -4,7 +4,7 @@ import org.yaml.snakeyaml.nodes.Tag import org.enso.semver.SemVer import org.enso.editions.{EditionName, Editions} import org.enso.pkg.validation.NameValidation -import org.enso.yaml.{YamlDecoder, YamlEncoder} +import org.enso.scala.yaml.{YamlDecoder, YamlEncoder} import org.yaml.snakeyaml.{DumperOptions, Yaml} import org.yaml.snakeyaml.error.YAMLException import org.yaml.snakeyaml.nodes.{MappingNode, Node} diff --git a/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/boot/Logging.scala b/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/boot/Logging.scala index a2b7b649a18f..4577e1480da1 100644 --- a/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/boot/Logging.scala +++ b/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/boot/Logging.scala @@ -1,5 +1,6 @@ package org.enso.projectmanager.boot +import org.enso.logging.service.LoggingSetupHelper import java.nio.file.Path import org.enso.projectmanager.service.LoggingServiceDescriptor import org.enso.projectmanager.versionmanagement.DefaultDistributionConfiguration @@ -8,7 +9,6 @@ import org.slf4j.event.Level import java.net.URI import scala.concurrent.Future -import org.enso.logging.LoggingSetupHelper import scala.concurrent.ExecutionContext.Implicits.global /** A helper for setting up the logging service in the Project Manager. */ diff --git a/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/boot/MainModule.scala b/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/boot/MainModule.scala index 9c67770b1a61..f5709f33d71d 100644 --- a/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/boot/MainModule.scala +++ b/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/boot/MainModule.scala @@ -4,7 +4,7 @@ import akka.actor.ActorSystem import akka.stream.SystemMaterializer import cats.MonadError import org.enso.jsonrpc.JsonRpcServer -import org.enso.logger.akka.AkkaConverter +import org.enso.logging.utils.akka.AkkaConverter import org.enso.projectmanager.boot.configuration.{ MainProcessConfig, ProjectManagerConfig diff --git a/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/boot/ProjectManager.scala b/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/boot/ProjectManager.scala index 9019d576bec7..73c2dc5513ef 100644 --- a/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/boot/ProjectManager.scala +++ b/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/boot/ProjectManager.scala @@ -329,8 +329,8 @@ object ProjectManager extends ZIOAppDefault with LazyLogging { private def makeVersionDescription: VersionDescription = VersionDescription.make( "Enso Project Manager", - includeRuntimeJVMInfo = false, - enableNativeImageOSWorkaround = true + false, + true ) private def logServerStartup(): UIO[Unit] = diff --git a/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/boot/command/CommandHandler.scala b/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/boot/command/CommandHandler.scala index bbd9f755910d..304391a252f6 100644 --- a/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/boot/command/CommandHandler.scala +++ b/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/boot/command/CommandHandler.scala @@ -1,7 +1,7 @@ package org.enso.projectmanager.boot.command import org.enso.jsonrpc.{Id, JsonProtocol, Protocol} -import org.enso.logger.LoggerSetup +import org.enso.logging.config.LoggerSetup import org.enso.projectmanager.boot.Globals.SuccessExitCode import org.enso.projectmanager.requesthandler.FailureMapper import zio.{Console, ExitCode, ZAny, ZIO} diff --git a/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/infrastructure/languageserver/ExecutorWithUnlimitedPool.scala b/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/infrastructure/languageserver/ExecutorWithUnlimitedPool.scala index 790b3c021581..d77361ae0615 100644 --- a/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/infrastructure/languageserver/ExecutorWithUnlimitedPool.scala +++ b/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/infrastructure/languageserver/ExecutorWithUnlimitedPool.scala @@ -4,7 +4,7 @@ import akka.actor.ActorRef import com.typesafe.scalalogging.Logger import org.apache.commons.lang3.concurrent.BasicThreadFactory import org.enso.logger.masking.Masking -import org.enso.logging.LoggingServiceManager +import org.enso.logging.service.LoggingServiceManager import org.enso.projectmanager.boot.Cli.{PROFILING_PATH, PROFILING_TIME} import org.enso.projectmanager.service.versionmanagement.RuntimeVersionManagerFactory import org.enso.runtimeversionmanager.config.GlobalRunnerConfigurationManager diff --git a/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/infrastructure/languageserver/LanguageServerBootLoader.scala b/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/infrastructure/languageserver/LanguageServerBootLoader.scala index 43a44bec326b..be8213a8ee81 100644 --- a/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/infrastructure/languageserver/LanguageServerBootLoader.scala +++ b/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/infrastructure/languageserver/LanguageServerBootLoader.scala @@ -2,7 +2,7 @@ package org.enso.projectmanager.infrastructure.languageserver import akka.actor.{Actor, ActorRef, Props} import com.typesafe.scalalogging.LazyLogging -import org.enso.logger.akka.ActorMessageLogging +import org.enso.logging.utils.akka.ActorMessageLogging import org.enso.projectmanager.boot.configuration.BootloaderConfig import org.enso.projectmanager.infrastructure.languageserver.LanguageServerBootLoader.{ ServerBootFailed, diff --git a/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/infrastructure/languageserver/LanguageServerController.scala b/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/infrastructure/languageserver/LanguageServerController.scala index 4140089ef76c..83a9f55bc045 100644 --- a/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/infrastructure/languageserver/LanguageServerController.scala +++ b/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/infrastructure/languageserver/LanguageServerController.scala @@ -11,8 +11,8 @@ import akka.actor.{ Terminated } import com.typesafe.scalalogging.LazyLogging +import org.enso.logging.utils.akka.ActorMessageLogging import org.enso.semver.SemVer -import org.enso.logger.akka.ActorMessageLogging import org.enso.projectmanager.boot.configuration._ import org.enso.projectmanager.data.{LanguageServerSockets, Socket} import org.enso.projectmanager.event.ClientEvent.{ diff --git a/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/util/UnhandledLogging.scala b/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/util/UnhandledLogging.scala index d48262a4ba04..8a818912d2fb 100644 --- a/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/util/UnhandledLogging.scala +++ b/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/util/UnhandledLogging.scala @@ -2,7 +2,7 @@ package org.enso.projectmanager.util import akka.actor.Actor import com.typesafe.scalalogging.LazyLogging -import org.enso.logger.akka.AkkaConverter +import org.enso.logging.utils.akka.AkkaConverter import org.slf4j.event.Level trait UnhandledLogging extends LazyLogging { this: Actor => diff --git a/lib/scala/project-manager/src/test/java/org/enso/projectmanager/TestLogProviderOnClasspath.java b/lib/scala/project-manager/src/test/java/org/enso/projectmanager/TestLogProviderOnClasspath.java index 4de17cdbd2b7..b20e8e7d2375 100644 --- a/lib/scala/project-manager/src/test/java/org/enso/projectmanager/TestLogProviderOnClasspath.java +++ b/lib/scala/project-manager/src/test/java/org/enso/projectmanager/TestLogProviderOnClasspath.java @@ -28,14 +28,16 @@ public void testLogProviderIsOnClasspath() { } List providerNames = providers.stream().map(elem -> elem.getClass().getName()).collect(Collectors.toList()); - assertThat(providerNames, hasItem("org.enso.logger.TestLogProvider")); + assertThat( + providerNames, hasItem("org.enso.logging.service.logback.test.provider.TestLogProvider")); } @Test public void testLogProviderIsInUnnamedModule() { Class testLogProviderClass = null; try { - testLogProviderClass = Class.forName("org.enso.logger.TestLogProvider"); + testLogProviderClass = + Class.forName("org.enso.logging.service.logback.test.provider.TestLogProvider"); } catch (ClassNotFoundException e) { fail("TestLogProvider class not found"); } diff --git a/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/BaseServerSpec.scala b/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/BaseServerSpec.scala index ece2d108cd9c..633cda4d5a8b 100644 --- a/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/BaseServerSpec.scala +++ b/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/BaseServerSpec.scala @@ -16,7 +16,7 @@ import org.enso.editions.Editions import org.enso.cli.OS import org.enso.jsonrpc.test.JsonRpcServerTestKit import org.enso.jsonrpc.{ClientControllerFactory, ProtocolFactory} -import org.enso.logger.LoggerSetup +import org.enso.logging.config.LoggerSetup import org.enso.pkg.{Config, PackageManager} import org.enso.projectmanager.boot.Globals.{ConfigFilename, ConfigNamespace} import org.enso.projectmanager.boot.configuration._ @@ -50,6 +50,7 @@ import org.enso.projectmanager.test.{ import org.enso.runtimeversionmanager.CurrentVersion import org.enso.runtimeversionmanager.components.GraalVMVersion import org.enso.runtimeversionmanager.test.FakeReleases +import org.enso.version.BuildVersion import org.scalatest.BeforeAndAfterAll import org.slf4j.event.Level import pureconfig.ConfigSource @@ -58,7 +59,6 @@ import zio.interop.catz.core._ import zio.{Runtime, Semaphore, ZAny, ZIO} import java.net.URISyntaxException - import scala.concurrent.duration._ import scala.concurrent.{Await, Future} @@ -262,7 +262,7 @@ class BaseServerSpec extends JsonRpcServerTestKit with BeforeAndAfterAll { val engineVersion = engineToInstall.getOrElse(CurrentVersion.version) val editionsDir = testDistributionRoot.toPath / "test_data" / "editions" Files.createDirectories(editionsDir) - val editionName = buildinfo.Info.currentEdition + ".yaml" + val editionName = BuildVersion.currentEdition + ".yaml" val editionConfig = s"""engine-version: $engineVersion |""".stripMargin diff --git a/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/infrastructure/languageserver/LanguageServerGatewaySpec.scala b/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/infrastructure/languageserver/LanguageServerGatewaySpec.scala index 970319903947..53998de9f37d 100644 --- a/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/infrastructure/languageserver/LanguageServerGatewaySpec.scala +++ b/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/infrastructure/languageserver/LanguageServerGatewaySpec.scala @@ -3,10 +3,10 @@ package org.enso.projectmanager.infrastructure.languageserver import akka.testkit.TestDuration import io.circe.literal._ import org.enso.semver.SemVer -import org.enso.logger.ReportLogsOnFailure import org.enso.projectmanager.test.Net._ import org.enso.projectmanager.{BaseServerSpec, ProjectManagementOps} import org.enso.runtimeversionmanager.test.OverrideTestVersionSuite +import org.enso.testkit.ReportLogsOnFailure import scala.concurrent.Await import scala.concurrent.duration._ diff --git a/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/infrastructure/languageserver/LanguageServerSupervisorSpec.scala b/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/infrastructure/languageserver/LanguageServerSupervisorSpec.scala index 857e4981850e..7d2b3f206423 100644 --- a/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/infrastructure/languageserver/LanguageServerSupervisorSpec.scala +++ b/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/infrastructure/languageserver/LanguageServerSupervisorSpec.scala @@ -3,7 +3,6 @@ package org.enso.projectmanager.infrastructure.languageserver import akka.actor.{ActorRef, ActorSystem, Props} import akka.testkit.{ImplicitSender, TestActor, TestKit, TestProbe} import com.miguno.akka.testing.VirtualTime -import org.enso.logger.ReportLogsOnFailure import org.enso.projectmanager.boot.configuration.SupervisionConfig import org.enso.projectmanager.infrastructure.http.AkkaBasedWebSocketConnectionFactory import org.enso.projectmanager.infrastructure.languageserver.LanguageServerBootLoader.ServerBooted @@ -13,7 +12,7 @@ import org.enso.projectmanager.infrastructure.languageserver.ProgrammableWebSock } import org.enso.projectmanager.infrastructure.languageserver.StepParent.ChildTerminated import org.enso.projectmanager.infrastructure.net.Tcp -import org.enso.testkit.FlakySpec +import org.enso.testkit.{FlakySpec, ReportLogsOnFailure} import org.mockito.MockitoSugar import org.scalatest.BeforeAndAfterAll import org.scalatest.flatspec.AnyFlatSpecLike diff --git a/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/infrastructure/languageserver/ProjectRenameActionSpec.scala b/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/infrastructure/languageserver/ProjectRenameActionSpec.scala index 9a004ee37dbc..3ab7b4283d5d 100644 --- a/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/infrastructure/languageserver/ProjectRenameActionSpec.scala +++ b/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/infrastructure/languageserver/ProjectRenameActionSpec.scala @@ -3,7 +3,6 @@ package org.enso.projectmanager.infrastructure.languageserver import akka.actor.ActorSystem import akka.testkit._ import com.miguno.akka.testing.VirtualTime -import org.enso.logger.ReportLogsOnFailure import org.enso.projectmanager.data.Socket import org.enso.projectmanager.infrastructure.languageserver.LanguageServerProtocol.{ ProjectRenamed, @@ -12,7 +11,7 @@ import org.enso.projectmanager.infrastructure.languageserver.LanguageServerProto } import org.enso.projectmanager.infrastructure.languageserver.ProgrammableWebSocketServer.ReplyWith import org.enso.projectmanager.infrastructure.net.Tcp -import org.enso.testkit.FlakySpec +import org.enso.testkit.{FlakySpec, ReportLogsOnFailure} import org.mockito.MockitoSugar import org.scalatest.BeforeAndAfterAll import org.scalatest.flatspec.AnyFlatSpecLike diff --git a/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/protocol/EngineManagementApiSpec.scala b/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/protocol/EngineManagementApiSpec.scala index 3da419f6db18..a90b22575e63 100644 --- a/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/protocol/EngineManagementApiSpec.scala +++ b/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/protocol/EngineManagementApiSpec.scala @@ -2,9 +2,8 @@ package org.enso.projectmanager.protocol import akka.testkit.TestDuration import io.circe.literal._ -import org.enso.logger.ReportLogsOnFailure import org.enso.projectmanager.BaseServerSpec -import org.enso.testkit.FlakySpec +import org.enso.testkit.{FlakySpec, ReportLogsOnFailure} import scala.concurrent.duration.DurationInt diff --git a/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/protocol/LoggingServiceEndpointSpec.scala b/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/protocol/LoggingServiceEndpointSpec.scala index 2a71ecf41de8..8d92a98cf8e3 100644 --- a/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/protocol/LoggingServiceEndpointSpec.scala +++ b/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/protocol/LoggingServiceEndpointSpec.scala @@ -1,9 +1,8 @@ package org.enso.projectmanager.protocol import io.circe.literal.JsonStringContext -import org.enso.logger.ReportLogsOnFailure import org.enso.projectmanager.BaseServerSpec -import org.enso.testkit.FlakySpec +import org.enso.testkit.{FlakySpec, ReportLogsOnFailure} import scala.concurrent.Future import java.net.URI diff --git a/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/protocol/ProjectCreateDefaultToLatestSpec.scala b/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/protocol/ProjectCreateDefaultToLatestSpec.scala index 1f1f8ae95377..04f1a71bd8b1 100644 --- a/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/protocol/ProjectCreateDefaultToLatestSpec.scala +++ b/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/protocol/ProjectCreateDefaultToLatestSpec.scala @@ -2,9 +2,9 @@ package org.enso.projectmanager.protocol import io.circe.literal.JsonStringContext import org.enso.semver.SemVer -import org.enso.logger.ReportLogsOnFailure import org.enso.projectmanager.BaseServerSpec import org.enso.runtimeversionmanager.test.OverrideTestVersionSuite +import org.enso.testkit.ReportLogsOnFailure class ProjectCreateDefaultToLatestSpec extends BaseServerSpec diff --git a/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/protocol/ProjectCreateHandleMissingRuntimeSpec.scala b/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/protocol/ProjectCreateHandleMissingRuntimeSpec.scala index e254e8ac021a..0fd90870bf43 100644 --- a/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/protocol/ProjectCreateHandleMissingRuntimeSpec.scala +++ b/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/protocol/ProjectCreateHandleMissingRuntimeSpec.scala @@ -1,9 +1,9 @@ package org.enso.projectmanager.protocol -import org.enso.logger.ReportLogsOnFailure import org.enso.projectmanager.TestDistributionConfiguration import org.enso.runtimeversionmanager.runner.JVMSettings import org.enso.runtimeversionmanager.test.FakeReleases +import org.enso.testkit.ReportLogsOnFailure class ProjectCreateHandleMissingRuntimeSpec extends ProjectCreateSpecBase diff --git a/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/protocol/ProjectCreateMissingComponentsSpec.scala b/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/protocol/ProjectCreateMissingComponentsSpec.scala index 31928b20bac6..c73e2fb9edb8 100644 --- a/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/protocol/ProjectCreateMissingComponentsSpec.scala +++ b/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/protocol/ProjectCreateMissingComponentsSpec.scala @@ -1,6 +1,6 @@ package org.enso.projectmanager.protocol -import org.enso.logger.ReportLogsOnFailure +import org.enso.testkit.ReportLogsOnFailure class ProjectCreateMissingComponentsSpec extends ProjectCreateSpecBase diff --git a/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/protocol/ProjectManagementApiSpec.scala b/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/protocol/ProjectManagementApiSpec.scala index 77106d773c92..1bb6316286a5 100644 --- a/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/protocol/ProjectManagementApiSpec.scala +++ b/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/protocol/ProjectManagementApiSpec.scala @@ -4,13 +4,12 @@ import akka.testkit.TestDuration import io.circe.literal._ import org.enso.semver.SemVer import org.apache.commons.io.FileUtils -import org.enso.logger.ReportLogsOnFailure import org.enso.pkg.validation.NameValidation import org.enso.projectmanager.boot.configuration.TimeoutConfig import org.enso.projectmanager.{BaseServerSpec, ProjectManagementOps} import org.enso.runtimeversionmanager.CurrentVersion import org.enso.runtimeversionmanager.test.OverrideTestVersionSuite -import org.enso.testkit.FlakySpec +import org.enso.testkit.{FlakySpec, ReportLogsOnFailure} import org.scalactic.source.Position import java.io.File diff --git a/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/protocol/ProjectOpenMissingComponentsSpec.scala b/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/protocol/ProjectOpenMissingComponentsSpec.scala index f0cf86e20d0f..a59b50452506 100644 --- a/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/protocol/ProjectOpenMissingComponentsSpec.scala +++ b/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/protocol/ProjectOpenMissingComponentsSpec.scala @@ -1,7 +1,8 @@ package org.enso.projectmanager.protocol + import org.enso.semver.SemVer -import org.enso.logger.ReportLogsOnFailure import org.enso.runtimeversionmanager.test.OverrideTestVersionSuite +import org.enso.testkit.ReportLogsOnFailure class ProjectOpenMissingComponentsSpec extends ProjectOpenSpecBase diff --git a/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/protocol/ProjectShutdownSpec.scala b/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/protocol/ProjectShutdownSpec.scala index 2b0800476535..fa7c8e35d6f6 100644 --- a/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/protocol/ProjectShutdownSpec.scala +++ b/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/protocol/ProjectShutdownSpec.scala @@ -4,7 +4,6 @@ import akka.actor.ActorRef import io.circe.literal._ import org.enso.semver.SemVer import org.enso.jsonrpc.ClientControllerFactory -import org.enso.logger.ReportLogsOnFailure import org.enso.projectmanager.boot.configuration.TimeoutConfig import org.enso.projectmanager.event.ClientEvent.ClientDisconnected import zio.{ZAny, ZIO} @@ -12,7 +11,7 @@ import zio.{ZAny, ZIO} import java.util.UUID import org.enso.projectmanager.{BaseServerSpec, ProjectManagementOps} import org.enso.runtimeversionmanager.test.OverrideTestVersionSuite -import org.enso.testkit.FlakySpec +import org.enso.testkit.{FlakySpec, ReportLogsOnFailure} import org.scalactic.source.Position import scala.concurrent.duration._ diff --git a/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/service/validation/ProjectNameValidatorSpec.scala b/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/service/validation/ProjectNameValidatorSpec.scala index 3df79af58591..122d8c785183 100644 --- a/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/service/validation/ProjectNameValidatorSpec.scala +++ b/lib/scala/project-manager/src/test/scala/org/enso/projectmanager/service/validation/ProjectNameValidatorSpec.scala @@ -1,7 +1,7 @@ package org.enso.projectmanager.service.validation -import org.enso.logger.ReportLogsOnFailure import org.enso.projectmanager.control.effect.Effects +import org.enso.testkit.ReportLogsOnFailure import org.scalatest.EitherValues import org.scalatest.matchers.must.Matchers import org.scalatest.wordspec.AnyWordSpec diff --git a/lib/scala/runtime-version-manager/src/main/scala/org/enso/runtimeversionmanager/CurrentVersion.scala b/lib/scala/runtime-version-manager/src/main/scala/org/enso/runtimeversionmanager/CurrentVersion.scala index ec0b7988847e..49eb82d6795d 100644 --- a/lib/scala/runtime-version-manager/src/main/scala/org/enso/runtimeversionmanager/CurrentVersion.scala +++ b/lib/scala/runtime-version-manager/src/main/scala/org/enso/runtimeversionmanager/CurrentVersion.scala @@ -1,8 +1,8 @@ package org.enso.runtimeversionmanager -import buildinfo.Info import com.typesafe.scalalogging.Logger import org.enso.semver.SemVer +import org.enso.version.BuildVersion /** Helper object that allows to get the current application version. * @@ -12,12 +12,12 @@ import org.enso.semver.SemVer object CurrentVersion { private var currentVersion: SemVer = - SemVer.parse(Info.ensoVersion).getOrElse { + SemVer.parse(BuildVersion.ensoVersion).getOrElse { throw new IllegalStateException("Cannot parse the built-in version.") } private val defaultDevEnsoVersion: SemVer = - SemVer.parse(Info.defaultDevEnsoVersion).getOrElse { + SemVer.parse(BuildVersion.defaultDevEnsoVersion).getOrElse { throw new IllegalStateException("Cannot parse the built-in dev version.") } @@ -36,7 +36,7 @@ object CurrentVersion { * calls to [[version]]. */ def internalOverrideVersion(newVersion: SemVer): Unit = - if (Info.isRelease) + if (BuildVersion.isRelease) throw new IllegalStateException( "Internal testing function internalOverrideVersion used in a " + "release build." diff --git a/lib/scala/runtime-version-manager/src/main/scala/org/enso/runtimeversionmanager/components/Manifest.scala b/lib/scala/runtime-version-manager/src/main/scala/org/enso/runtimeversionmanager/components/Manifest.scala index 13abe895ac5c..79ab174fa4d2 100644 --- a/lib/scala/runtime-version-manager/src/main/scala/org/enso/runtimeversionmanager/components/Manifest.scala +++ b/lib/scala/runtime-version-manager/src/main/scala/org/enso/runtimeversionmanager/components/Manifest.scala @@ -2,7 +2,6 @@ package org.enso.runtimeversionmanager.components import java.io.{FileReader, StringReader} import java.nio.file.Path -import org.enso import org.enso.semver.SemVer import org.enso.cli.OS import org.enso.semver.SemVerYaml._ @@ -11,7 +10,8 @@ import org.enso.runtimeversionmanager.components.Manifest.{ RequiredInstallerVersions } import org.enso.runtimeversionmanager.components -import org.enso.yaml.{ParseError, YamlDecoder} +import org.enso.scala.yaml.YamlDecoder +import org.enso.yaml.ParseError import org.yaml.snakeyaml.error.YAMLException import org.yaml.snakeyaml.nodes.{MappingNode, Node} @@ -179,7 +179,7 @@ object Manifest { val snakeYaml = new org.yaml.snakeyaml.Yaml() Try(snakeYaml.compose(reader)) .flatMap( - implicitly[enso.yaml.YamlDecoder[Manifest]].decode(_).toTry + implicitly[YamlDecoder[Manifest]].decode(_).toTry ) }.flatten.recoverWith { error => Failure(ManifestLoadingError.fromThrowable(error)) @@ -192,7 +192,7 @@ object Manifest { def fromYaml(yamlString: String): Try[Manifest] = { val snakeYaml = new org.yaml.snakeyaml.Yaml() Try(snakeYaml.compose(new StringReader(yamlString))).toEither - .flatMap(implicitly[enso.yaml.YamlDecoder[Manifest]].decode(_)) + .flatMap(implicitly[YamlDecoder[Manifest]].decode(_)) .left .map(ParseError(_)) .toTry diff --git a/lib/scala/runtime-version-manager/src/main/scala/org/enso/runtimeversionmanager/releases/testing/TestArchivePackager.scala b/lib/scala/runtime-version-manager/src/main/scala/org/enso/runtimeversionmanager/releases/testing/TestArchivePackager.scala index d9678421c179..7f75e9f8571e 100644 --- a/lib/scala/runtime-version-manager/src/main/scala/org/enso/runtimeversionmanager/releases/testing/TestArchivePackager.scala +++ b/lib/scala/runtime-version-manager/src/main/scala/org/enso/runtimeversionmanager/releases/testing/TestArchivePackager.scala @@ -2,6 +2,7 @@ package org.enso.runtimeversionmanager.releases.testing import org.enso.cli.OS import org.enso.distribution.FileSystem +import org.enso.version.BuildVersion import java.nio.file.Path import scala.sys.process.Process @@ -16,7 +17,7 @@ object TestArchivePackager { * workflow. */ def packArchive(source: Path, destination: Path): Unit = { - if (buildinfo.Info.isRelease) + if (BuildVersion.isRelease) throw new IllegalStateException( "Internal TestArchivePackager called in release mode." ) diff --git a/lib/scala/semver/src/main/scala/org/enso/semver/SemVerYaml.scala b/lib/scala/semver/src/main/scala/org/enso/semver/SemVerYaml.scala index 8db803815873..8a30fcde02f6 100644 --- a/lib/scala/semver/src/main/scala/org/enso/semver/SemVerYaml.scala +++ b/lib/scala/semver/src/main/scala/org/enso/semver/SemVerYaml.scala @@ -1,6 +1,6 @@ package org.enso.semver -import org.enso.yaml.{YamlDecoder, YamlEncoder} +import org.enso.scala.yaml.{YamlDecoder, YamlEncoder} import org.yaml.snakeyaml.error.YAMLException import org.yaml.snakeyaml.nodes.{Node, ScalarNode} diff --git a/lib/scala/logging-service-logback/src/test/scala/org/enso/logger/ReportLogsOnFailure.scala b/lib/scala/testkit/src/main/scala/org/enso/testkit/ReportLogsOnFailure.scala similarity index 94% rename from lib/scala/logging-service-logback/src/test/scala/org/enso/logger/ReportLogsOnFailure.scala rename to lib/scala/testkit/src/main/scala/org/enso/testkit/ReportLogsOnFailure.scala index 06c123d38382..c658775820e8 100644 --- a/lib/scala/logging-service-logback/src/test/scala/org/enso/logger/ReportLogsOnFailure.scala +++ b/lib/scala/testkit/src/main/scala/org/enso/testkit/ReportLogsOnFailure.scala @@ -1,7 +1,8 @@ -package org.enso.logger +package org.enso.testkit import ch.qos.logback.classic.spi.ILoggingEvent import ch.qos.logback.core.Appender +import org.enso.logging.service.logback.MemoryAppender import org.scalatest.{Args, Failed, Outcome, Status, TestSuite} import org.slf4j.{Logger, LoggerFactory} diff --git a/lib/scala/version-output/src/main/java/org/enso/version/BuildVersion.java b/lib/scala/version-output/src/main/java/org/enso/version/BuildVersion.java new file mode 100644 index 000000000000..a5d3b54f3ac8 --- /dev/null +++ b/lib/scala/version-output/src/main/java/org/enso/version/BuildVersion.java @@ -0,0 +1,55 @@ +package org.enso.version; + +/** + * Class containing only static methods for getting various version information gathered at build + * time. + */ +public class BuildVersion { + private BuildVersion() {} + + public static String defaultDevEnsoVersion() { + return GeneratedVersion.defaultDevEnsoVersion(); + } + + public static String ensoVersion() { + return GeneratedVersion.ensoVersion(); + } + + public static String scalacVersion() { + return GeneratedVersion.scalacVersion(); + } + + public static String graalVersion() { + return GeneratedVersion.graalVersion(); + } + + public static String currentEdition() { + return GeneratedVersion.currentEdition(); + } + + /** Current commit ID. */ + public static String commit() { + return GeneratedVersion.commit(); + } + + /** Current git ref */ + public static String ref() { + return GeneratedVersion.ref(); + } + + public static boolean isDirty() { + return GeneratedVersion.isDirty(); + } + + public static String latestCommitDate() { + return GeneratedVersion.latestCommitDate(); + } + + /** + * Release mode, set to true if the environment variable {@code ENSO_RELEASE_MODE} is set to + * {@code true} at build time. + */ + public static boolean isRelease() { + return GeneratedVersion.isRelease(); + } +} diff --git a/lib/scala/version-output/src/main/java/org/enso/version/VersionDescription.java b/lib/scala/version-output/src/main/java/org/enso/version/VersionDescription.java new file mode 100644 index 000000000000..bac9528e782d --- /dev/null +++ b/lib/scala/version-output/src/main/java/org/enso/version/VersionDescription.java @@ -0,0 +1,214 @@ +package org.enso.version; + +import java.util.List; +import java.util.Objects; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * Represents a description of a version string that can be rendered as a human-readable string or + * in JSON format. + */ +public class VersionDescription { + private final boolean includeRuntimeJVMInfo; + private final boolean enableNativeImageOSWorkaround; + private final String header; + private final String version; + private final String osArch; + private final String osName; + private final String osVersion; + private final String vmName; + private final String vmVendor; + private final String jreVersion; + private final List additionalParameters; + + private VersionDescription( + boolean includeRuntimeJVMInfo, + boolean enableNativeImageOSWorkaround, + String header, + String version, + List additionalParameters) { + this.includeRuntimeJVMInfo = includeRuntimeJVMInfo; + this.enableNativeImageOSWorkaround = enableNativeImageOSWorkaround; + this.header = header; + this.version = version; + this.additionalParameters = additionalParameters; + + this.osArch = System.getProperty("os.arch"); + this.osName = System.getProperty("os.name"); + this.osVersion = System.getProperty("os.version"); + + this.vmName = System.getProperty("java.vm.name"); + this.vmVendor = System.getProperty("java.vm.vendor"); + this.jreVersion = System.getProperty("java.runtime.version"); + } + + public static VersionDescription make( + String header, boolean includeRuntimeJVMInfo, boolean enableNativeImageOSWorkaround) { + return make(header, includeRuntimeJVMInfo, enableNativeImageOSWorkaround, List.of(), null); + } + + /** + * Creates a {@link VersionDescription} instance. + * + * @param header header displayed as the first line of the human-readable representation + * @param includeRuntimeJVMInfo if set to true, includes information about the JVM that is running + * the program + * @param enableNativeImageOSWorkaround if set to true, changes how the OS information is + * displayed; this is a temporary workaround caused by the Native Image OS returning the value + * known at build-time and not at runtime + * @param additionalParameters a sequence of additional {@link VersionDescriptionParameter} to + * include in the version string + * @param customVersion if provided, overrides the version string from {@code GeneratedVersion}; + * used for testing purposes + * @return + */ + public static VersionDescription make( + String header, + boolean includeRuntimeJVMInfo, + boolean enableNativeImageOSWorkaround, + List additionalParameters, + String customVersion) { + Objects.requireNonNull(header); + Objects.requireNonNull(additionalParameters); + String version; + if (customVersion != null) { + version = customVersion; + } else { + version = BuildVersion.ensoVersion(); + } + return new VersionDescription( + includeRuntimeJVMInfo, + enableNativeImageOSWorkaround, + header, + version, + additionalParameters); + } + + public String asHumanReadableString() { + String runtimeDescription; + if (includeRuntimeJVMInfo) { + runtimeDescription = + String.format( + """ + Running on: %s, %s, JDK %s + %s, %s (%s) + """, + vmName, vmVendor, jreVersion, osName, osVersion, osArch); + } else if (enableNativeImageOSWorkaround) { + // TODO [RW] Currently the `os.name` property seems to be set to the + // OS the program has been built on, instead of the OS that is + // currently running. A workaround should be implemented in #1100 + // that will use other means to query the OS name and version. + runtimeDescription = String.format("Built on: %s (%s)", osName, osArch); + } else { + runtimeDescription = String.format("Running on: %s %s (%s)", osName, osVersion, osArch); + } + String dirtyStr = ""; + if (BuildVersion.isDirty()) { + dirtyStr = "*"; + } + var parameters = + formatParameters(VersionDescription::formatParameterAsHumanReadableString, "\n"); + return String.format( + """ + %s + Version: %s + Built with: scala-%s for GraalVM %s + Built from: %s%s @ %s + %s%s + """, + header, + version, + BuildVersion.scalacVersion(), + BuildVersion.graalVersion(), + BuildVersion.ref(), + dirtyStr, + BuildVersion.commit(), + runtimeDescription, + parameters); + } + + public String asJSONString() { + String runtimeDescription; + if (includeRuntimeJVMInfo) { + runtimeDescription = + String.format( + """ + "osName": "%s", + "osVersion": "%s", + "osArch": "%s" + """, + osName, osVersion, osArch); + } else { + runtimeDescription = + String.format( + """ + "vmName": "%s", + "vmVendor": "%s", + "jreVersion": "%s", + "osName": "%s", + "osVersion": "%s", + "osArch": "%s" + """, + vmName, vmVendor, jreVersion, osName, osVersion, osArch); + } + var parameters = formatParameters(VersionDescription::formatParameterAsJSONString, ",\n"); + var sb = new StringBuilder(); + sb.append("{").append(System.lineSeparator()); + sb.append(" \"version\": ") + .append("\"") + .append(version) + .append("\",") + .append(System.lineSeparator()); + sb.append(" \"ref\": ") + .append("\"") + .append(BuildVersion.ref()) + .append("\",") + .append(System.lineSeparator()); + sb.append(" \"dirty\": ") + .append("\"") + .append(BuildVersion.isDirty()) + .append("\",") + .append(System.lineSeparator()); + sb.append(" \"commit\": ") + .append("\"") + .append(BuildVersion.commit()) + .append("\",") + .append(System.lineSeparator()); + sb.append(runtimeDescription); + if (!parameters.isEmpty()) { + sb.append(",").append(System.lineSeparator()); + sb.append(parameters); + } + sb.append(System.lineSeparator()); + sb.append("}"); + return sb.toString(); + } + + public String asString(boolean useJson) { + if (useJson) { + return asJSONString(); + } else { + return asHumanReadableString(); + } + } + + private static String formatParameterAsJSONString(VersionDescriptionParameter parameter) { + return "\"" + parameter.jsonName() + "\": " + parameter.value() + "\""; + } + + private static String formatParameterAsHumanReadableString( + VersionDescriptionParameter parameter) { + return parameter.humanReadableName() + ": " + parameter.value(); + } + + private String formatParameters( + Function formatter, String separator) { + if (additionalParameters.isEmpty()) { + return ""; + } else { + return additionalParameters.stream().map(formatter).collect(Collectors.joining(separator)); + } + } +} diff --git a/lib/scala/version-output/src/main/java/org/enso/version/VersionDescriptionParameter.java b/lib/scala/version-output/src/main/java/org/enso/version/VersionDescriptionParameter.java new file mode 100644 index 000000000000..420538580c65 --- /dev/null +++ b/lib/scala/version-output/src/main/java/org/enso/version/VersionDescriptionParameter.java @@ -0,0 +1,14 @@ +package org.enso.version; + +/** + * Defines an additional parameter for the version description. + * + * @param humanReadableName the human readable prefix added when printing this parameter in + * human-readable format + * @param jsonName the key when outputting the parameter in JSON format + * @param value the value to use for the parameter; depending on if the whole version description + * will be queried as a human-readable version or in JSON, this value should be in the right + * format + */ +public record VersionDescriptionParameter( + String humanReadableName, String jsonName, String value) {} diff --git a/lib/scala/version-output/src/main/scala/org/enso/version/VersionDescription.scala b/lib/scala/version-output/src/main/scala/org/enso/version/VersionDescription.scala deleted file mode 100644 index aa78030b5cae..000000000000 --- a/lib/scala/version-output/src/main/scala/org/enso/version/VersionDescription.scala +++ /dev/null @@ -1,132 +0,0 @@ -package org.enso.version - -import buildinfo.Info - -/** Represents a description of a version string that can be rendered as a - * human-readable string or in JSON format. - */ -trait VersionDescription { - def asHumanReadableString: String - def asJSONString: String - - def asString(useJson: Boolean): String = - if (useJson) asJSONString else asHumanReadableString -} - -/** Defines an additional parameter for the version description. - * - * @param humanReadableName the human readable prefix added when printing this - * parameter in human-readable format - * @param jsonName the key when outputting the parameter in JSON format - * @param value the value to use for the parameter; depending on if the whole - * version description will be queried as a human-readable version - * or in JSON, this value should be in the right format - */ -case class VersionDescriptionParameter( - humanReadableName: String, - jsonName: String, - value: String -) - -object VersionDescription { - - /** Creates a [[VersionDescription]] instance. - * - * @param header header displayed as the first line of the human-readable - * representation - * @param includeRuntimeJVMInfo if set to true, includes information about - * the JVM that is running the program - * @param enableNativeImageOSWorkaround if set to true, changes how the OS - * information is displayed; this is a - * temporary workaround caused by the - * Native Image OS returning the value - * known at build-time and not at - * runtime - * @param additionalParameters a sequence of additional - * [[VersionDescriptionParameter]] to include in - * the version string - * @param customVersion if provided, overrides the version string from - * [[buildinfo]]; used for testing purposes - * @return - */ - def make( - header: String, - includeRuntimeJVMInfo: Boolean, - enableNativeImageOSWorkaround: Boolean = false, - additionalParameters: Seq[VersionDescriptionParameter] = Seq.empty, - customVersion: Option[String] = None - ): VersionDescription = { - val version = customVersion.getOrElse(Info.ensoVersion) - val osArch = System.getProperty("os.arch") - val osName = System.getProperty("os.name") - val osVersion = System.getProperty("os.version") - - val vmName = System.getProperty("java.vm.name") - val vmVendor = System.getProperty("java.vm.vendor") - val jreVersion = System.getProperty("java.runtime.version") - - def formatParameters( - formatter: VersionDescriptionParameter => String, - separator: String - ): String = - if (additionalParameters.isEmpty) "" - else separator + additionalParameters.map(formatter).mkString(separator) - - new VersionDescription { - override def asHumanReadableString: String = { - val runtimeDescription = - if (includeRuntimeJVMInfo) - s"""Running on: $vmName, $vmVendor, JDK $jreVersion - | $osName $osVersion ($osArch)""".stripMargin - else if (enableNativeImageOSWorkaround) { - // TODO [RW] Currently the `os.name` property seems to be set to the - // OS the program has been built on, instead of the OS that is - // currently running. A workaround should be implemented in #1100 - // that will use other means to query the OS name and version. - s"Built on: $osName ($osArch)" - } else s"Running on: $osName $osVersion ($osArch)" - - val dirtyStr = if (Info.isDirty) "*" else "" - val parameters = - formatParameters(formatParameterAsHumanReadableString, "\n") - s"""$header - |Version: $version - |Built with: scala-${Info.scalacVersion} for GraalVM ${Info.graalVersion} - |Built from: ${Info.ref}$dirtyStr @ ${Info.commit} - |$runtimeDescription$parameters - |""".stripMargin - } - - override def asJSONString: String = { - val runtimeDescription = - if (includeRuntimeJVMInfo) - s""" "osName": "$osName", - | "osVersion": "$osVersion", - | "osArch": "$osArch"""".stripMargin - else - s""" "vmName": "$vmName", - | "vmVendor": "$vmVendor", - | "jreVersion": "$jreVersion", - | "osName": "$osName", - | "osVersion": "$osVersion", - | "osArch": "$osArch"""".stripMargin - val parameters = formatParameters(formatParameterAsJSONString, ",\n") - s"""{ "version": "$version", - | "ref": "${Info.ref}", - | "dirty": ${Info.isDirty}, - | "commit": "${Info.commit}", - |$runtimeDescription$parameters - |}""".stripMargin - } - } - } - - private def formatParameterAsJSONString( - parameter: VersionDescriptionParameter - ): String = - s""""${parameter.jsonName}": ${parameter.value}""" - private def formatParameterAsHumanReadableString( - parameter: VersionDescriptionParameter - ): String = - s"${parameter.humanReadableName}: ${parameter.value}" -} diff --git a/lib/scala/yaml/src/main/scala/org/enso/yaml/YamlDecoder.scala b/lib/scala/yaml/src/main/scala/org/enso/scala/yaml/YamlDecoder.scala similarity index 96% rename from lib/scala/yaml/src/main/scala/org/enso/yaml/YamlDecoder.scala rename to lib/scala/yaml/src/main/scala/org/enso/scala/yaml/YamlDecoder.scala index 1a5624abe6fe..81444ce7a226 100644 --- a/lib/scala/yaml/src/main/scala/org/enso/yaml/YamlDecoder.scala +++ b/lib/scala/yaml/src/main/scala/org/enso/scala/yaml/YamlDecoder.scala @@ -1,14 +1,10 @@ -package org.enso.yaml +package org.enso.scala.yaml -import org.yaml.snakeyaml.nodes.Node -import org.yaml.snakeyaml.nodes.ScalarNode -import org.yaml.snakeyaml.nodes.MappingNode -import org.yaml.snakeyaml.nodes.SequenceNode -import org.yaml.snakeyaml.nodes.Tag import org.yaml.snakeyaml.error.YAMLException +import org.yaml.snakeyaml.nodes._ -import scala.jdk.CollectionConverters.CollectionHasAsScala import scala.collection.{mutable, BuildFrom} +import scala.jdk.CollectionConverters.CollectionHasAsScala abstract class YamlDecoder[T] { def decode(node: Node): Either[Throwable, T] diff --git a/lib/scala/yaml/src/main/scala/org/enso/yaml/YamlEncoder.scala b/lib/scala/yaml/src/main/scala/org/enso/scala/yaml/YamlEncoder.scala similarity index 98% rename from lib/scala/yaml/src/main/scala/org/enso/yaml/YamlEncoder.scala rename to lib/scala/yaml/src/main/scala/org/enso/scala/yaml/YamlEncoder.scala index cadc9f662515..5e3d611bba62 100644 --- a/lib/scala/yaml/src/main/scala/org/enso/yaml/YamlEncoder.scala +++ b/lib/scala/yaml/src/main/scala/org/enso/scala/yaml/YamlEncoder.scala @@ -1,4 +1,4 @@ -package org.enso.yaml +package org.enso.scala.yaml import java.util diff --git a/project/BuildInfo.scala b/project/BuildInfo.scala index 1d44b4b9bf53..44c7fad93f1d 100644 --- a/project/BuildInfo.scala +++ b/project/BuildInfo.scala @@ -5,7 +5,7 @@ import scala.sys.process._ object BuildInfo { - /** Writes build-time information to a Scala object that can be used by the + /** Writes build-time information to a Java class that can be used by the * components. * * If the `ENSO_RELEASE_MODE` environment variable is set to `true`, will set @@ -34,28 +34,53 @@ object BuildInfo { ): Seq[File] = { val gitInfo = getGitInformation(log).getOrElse(fallbackGitInformation) val isRelease = isReleaseMode + val className = file.getName.stripSuffix(".java") val fileContents = s""" - |package buildinfo + |package org.enso.version; | - |object Info { + |final class ${className} { + | private GeneratedVersion() {} | - | // Versions - | val defaultDevEnsoVersion = "$defaultDevEnsoVersion" - | val ensoVersion = "$ensoVersion" - | val scalacVersion = "$scalacVersion" - | val graalVersion = "$graalVersion" - | val currentEdition = "$currentEdition" + | static String defaultDevEnsoVersion() { + | return "${defaultDevEnsoVersion}"; + | } | - | // Git Info - | val commit = "${gitInfo.commitHash}" - | val ref = "${gitInfo.ref}" - | val isDirty = ${gitInfo.isDirty} - | val latestCommitDate = "${gitInfo.latestCommitDate}" + | static String ensoVersion() { + | return "${ensoVersion}"; + | } | - | // Release mode, set to true if the environment variable - | // `ENSO_RELEASE_MODE` is set to `true` at build time. - | val isRelease = $isRelease + | static String scalacVersion() { + | return "${scalacVersion}"; + | } + | + | static String graalVersion() { + | return "${graalVersion}"; + | } + | + | static String currentEdition() { + | return "${currentEdition}"; + | } + | + | static String commit() { + | return "${gitInfo.commitHash}"; + | } + | + | static String ref() { + | return "${gitInfo.ref}"; + | } + | + | static boolean isDirty() { + | return ${gitInfo.isDirty}; + | } + | + | static String latestCommitDate() { + | return "${gitInfo.latestCommitDate}"; + | } + | + | static boolean isRelease() { + | return ${isRelease}; + | } |} |""".stripMargin IO.write(file, fileContents)