Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Guice 7 + switch to Jakarta Dependency Injection #11792

Draft
wants to merge 6 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion build.sbt
Expand Up @@ -159,7 +159,7 @@ lazy val PlayJavaClusterSharding =

lazy val PlayJdbcApiProject = PlayCrossBuiltProject("Play-JDBC-Api", "persistence/play-jdbc-api")
.settings(
libraryDependencies += javaxInject,
libraryDependencies += jakartaInject,
)

lazy val PlayJdbcProject: Project = PlayCrossBuiltProject("Play-JDBC", "persistence/play-jdbc")
Expand Down
Expand Up @@ -4,8 +4,8 @@

package play.cache;

import jakarta.inject.Inject;
import java.util.concurrent.CompletionStage;
import javax.inject.Inject;
import play.mvc.Action;
import play.mvc.Http.Request;
import play.mvc.Result;
Expand Down
Expand Up @@ -6,12 +6,12 @@

import static scala.jdk.javaapi.FutureConverters.asJava;

import jakarta.inject.Inject;
import jakarta.inject.Singleton;
import java.util.Optional;
import java.util.concurrent.Callable;
import java.util.concurrent.CompletionStage;
import java.util.concurrent.TimeUnit;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.apache.pekko.Done;
import play.libs.Scala;
import scala.concurrent.duration.Duration;
Expand Down
Expand Up @@ -4,14 +4,14 @@

package play.cache;

import jakarta.inject.Inject;
import java.util.Optional;
import java.util.concurrent.Callable;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import javax.inject.Inject;

/**
* An implementation of SyncCacheApi that wraps AsyncCacheApi
Expand Down
2 changes: 1 addition & 1 deletion cache/play-cache/src/main/java/play/cache/NamedCache.java
Expand Up @@ -4,9 +4,9 @@

package play.cache;

import jakarta.inject.Qualifier;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import javax.inject.Qualifier;

@Qualifier
@Retention(RetentionPolicy.RUNTIME)
Expand Down
Expand Up @@ -5,11 +5,11 @@
package play.api.cache

import java.time.Instant
import javax.inject.Inject

import scala.concurrent.duration._
import scala.concurrent.Future

import jakarta.inject.Inject
import org.apache.pekko.stream.Materializer
import play.api._
import play.api.http.HeaderNames.ETAG
Expand Down
Expand Up @@ -4,14 +4,14 @@

package play.api.cache

import javax.inject.Inject

import scala.concurrent.duration._
import scala.concurrent.duration.Duration
import scala.concurrent.Await
import scala.concurrent.Future
import scala.reflect.ClassTag

import jakarta.inject.Inject

/**
* A cache API that uses synchronous calls rather than async calls. Useful when you know you have a fast in-memory cache.
*/
Expand Down
Expand Up @@ -6,9 +6,6 @@ package play.api.cache.caffeine

import java.util.concurrent.Executor
import javax.cache.CacheException
import javax.inject.Inject
import javax.inject.Provider
import javax.inject.Singleton

import scala.concurrent.duration.Duration
import scala.concurrent.ExecutionContext
Expand All @@ -18,6 +15,9 @@ import scala.reflect.ClassTag

import com.github.benmanes.caffeine.cache.Cache
import com.google.common.primitives.Primitives
import jakarta.inject.Inject
import jakarta.inject.Provider
import jakarta.inject.Singleton
import org.apache.pekko.actor.ActorSystem
import org.apache.pekko.stream.Materializer
import org.apache.pekko.Done
Expand Down
Expand Up @@ -5,14 +5,14 @@
package play.api.cache.caffeine

import java.util.concurrent.Executors
import javax.inject.Inject
import javax.inject.Provider

import scala.concurrent.duration._
import scala.concurrent.Await
import scala.concurrent.ExecutionContext
import scala.concurrent.Future

import jakarta.inject.Inject
import jakarta.inject.Provider
import org.mockito.Mockito
import org.mockito.Mockito.never
import org.mockito.Mockito.verify
Expand Down
Expand Up @@ -4,17 +4,16 @@

package play.api.cache.ehcache

import javax.inject.Inject
import javax.inject.Provider
import javax.inject.Singleton

import scala.concurrent.duration.Duration
import scala.concurrent.duration.FiniteDuration
import scala.concurrent.ExecutionContext
import scala.concurrent.Future
import scala.reflect.ClassTag

import com.google.common.primitives.Primitives
import jakarta.inject.Inject
import jakarta.inject.Provider
import jakarta.inject.Singleton
import net.sf.ehcache.CacheManager
import net.sf.ehcache.Ehcache
import net.sf.ehcache.Element
Expand Down
Expand Up @@ -6,11 +6,11 @@ package play.api.cache

import java.time.Instant
import java.util.concurrent.atomic.AtomicInteger
import javax.inject._

import scala.concurrent.duration._
import scala.util.Random

import jakarta.inject._
import play.api.cache.ehcache.EhCacheApi
import play.api.http
import play.api.mvc._
Expand Down
Expand Up @@ -5,14 +5,14 @@
package play.api.cache.ehcache

import java.util.concurrent.Executors
import javax.inject.Inject
import javax.inject.Provider

import scala.concurrent.duration._
import scala.concurrent.Await
import scala.concurrent.ExecutionContext
import scala.concurrent.Future

import jakarta.inject.Inject
import jakarta.inject.Provider
import net.sf.ehcache.CacheManager
import play.api.cache.AsyncCacheApi
import play.api.cache.SyncCacheApi
Expand Down
Expand Up @@ -6,8 +6,8 @@ package play.api.libs.jcache

import javax.cache.CacheManager
import javax.cache.Caching
import javax.inject._

import jakarta.inject._
import play.api.inject._
import play.api.Environment

Expand Down
Expand Up @@ -4,10 +4,9 @@

package play.api.cluster.sharding.typed

import javax.inject.Inject
import javax.inject.Provider
import javax.inject.Singleton

import jakarta.inject.Inject
import jakarta.inject.Provider
import jakarta.inject.Singleton
import org.apache.pekko.actor.typed.scaladsl.adapter._
import org.apache.pekko.actor.ActorSystem
import org.apache.pekko.annotation.InternalApi
Expand Down
Expand Up @@ -4,10 +4,9 @@

package play.cluster.sharding.typed

import javax.inject.Inject
import javax.inject.Provider
import javax.inject.Singleton

import jakarta.inject.Inject
import jakarta.inject.Provider
import jakarta.inject.Singleton
import org.apache.pekko.actor.typed.javadsl.Adapter
import org.apache.pekko.actor.ActorSystem
import org.apache.pekko.annotation.InternalApi
Expand Down
Expand Up @@ -16,7 +16,7 @@
*
* <p>Captures concerns relating to the classloader and the filesystem for the application.
*/
// @Singleton, see BuiltInModule (We don't want javax.inject inside play-configuration project)
// @Singleton, see BuiltInModule (We don't want jakarta.inject inside play-configuration project)
public class Environment {
private final play.api.Environment env;

Expand Down
Expand Up @@ -4,14 +4,13 @@

package play.api.inject.guice

import javax.inject.Inject
import javax.inject.Provider
import javax.inject.Singleton

import scala.runtime.AbstractPartialFunction

import com.google.inject.{ Module => GuiceModule }
import com.google.inject.ProvisionException
import jakarta.inject.Inject
import jakarta.inject.Provider
import jakarta.inject.Singleton
import org.slf4j.ILoggerFactory
import play.api._
import play.api.http.HttpErrorHandlerExceptions
Expand Down
Expand Up @@ -6,8 +6,6 @@ package play.api.inject
package guice

import java.io.File
import javax.inject.Inject
import javax.inject.Provider

import scala.jdk.CollectionConverters._
import scala.reflect.ClassTag
Expand All @@ -19,6 +17,8 @@ import com.google.inject.Binder
import com.google.inject.CreationException
import com.google.inject.Guice
import com.google.inject.Stage
import jakarta.inject.Inject
import jakarta.inject.Provider
import play.api.inject.{ Binding => PlayBinding }
import play.api.inject.{ Injector => PlayInjector }
import play.api.inject.{ Module => PlayModule }
Expand Down
Expand Up @@ -41,7 +41,7 @@ import play.api.libs.concurrent.TypedPekko._
*
* @define unnamed Note that, while the name is used when spawning the actor in the `ActorSystem`,
* it is <em>NOT</em> used as a name qualifier for the binding. This is so that you don't need to
* use [[javax.inject.Named Named]] to qualify all injections of typed actors. Use the underlying
* use [[jakarta.inject.Named Named]] to qualify all injections of typed actors. Use the underlying
* API to create multiple, name-annotated bindings.
*/
trait PekkoGuiceSupport {
Expand Down
Expand Up @@ -4,14 +4,13 @@

package play.api.libs.concurrent

import javax.inject.Singleton

import scala.reflect.ClassTag

import com.google.inject.Inject
import com.google.inject.Injector
import com.google.inject.Key
import com.google.inject.Provider
import jakarta.inject.Singleton
import org.apache.pekko.actor.typed.scaladsl.adapter._
import org.apache.pekko.actor.typed.ActorRef
import org.apache.pekko.actor.ActorSystem
Expand Down
Expand Up @@ -13,8 +13,8 @@
import com.google.inject.ConfigurationException;
import com.typesafe.config.Config;
import com.typesafe.config.ConfigFactory;
import javax.inject.Inject;
import javax.inject.Provider;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import org.junit.Test;
import play.Application;
import play.api.inject.guice.GuiceApplicationBuilderSpec;
Expand Down
Expand Up @@ -6,14 +6,14 @@ package play.api.inject
package guice

import java.util.Collections
import javax.inject.Inject
import javax.inject.Provider
import javax.inject.Singleton

import com.google.inject.CreationException
import com.google.inject.Guice
import com.google.inject.ProvisionException
import com.typesafe.config.Config
import jakarta.inject.Inject
import jakarta.inject.Provider
import jakarta.inject.Singleton
import org.specs2.mutable.Specification
import play.{ Environment => JavaEnvironment }
import play.api.i18n.I18nModule
Expand Down
3 changes: 1 addition & 2 deletions core/play-guice/src/test/scala/play/utils/ReflectSpec.scala
Expand Up @@ -4,10 +4,9 @@

package play.utils

import javax.inject.Inject

import scala.reflect.ClassTag

import jakarta.inject.Inject
import org.specs2.mutable.Specification
import play.api.inject.guice.GuiceInjectorBuilder
import play.api.inject.Binding
Expand Down
Expand Up @@ -146,7 +146,7 @@ public CompletionStage<Result> call(Http.Request req) {
@Retention(RetentionPolicy.RUNTIME)
@interface SingletonActionAnnotation {}

@javax.inject.Singleton
@jakarta.inject.Singleton
static class SingletonActionAnnotationAction extends Action<SingletonActionAnnotation> {
@Override
public CompletionStage<Result> call(Http.Request req) {
Expand Down
Expand Up @@ -4,11 +4,10 @@

package play.it.auth

import javax.inject.Inject

import scala.concurrent.ExecutionContext
import scala.concurrent.Future

import jakarta.inject.Inject
import play.api.i18n.MessagesApi
import play.api.mvc._
import play.api.mvc.Security.AuthenticatedBuilder
Expand Down
Expand Up @@ -291,13 +291,15 @@ trait JavaActionCompositionSpec extends PlaySpecification with WsTestClient {
)
}

"abort the request when action class is annotated with @javax.inject.Singleton" in makeRequest(new MockController {
@SingletonActionAnnotation
override def action(request: Request): Result = Results.ok()
}) { response =>
"abort the request when action class is annotated with @jakarta.inject.Singleton" in makeRequest(
new MockController {
@SingletonActionAnnotation
override def action(request: Request): Result = Results.ok()
}
) { response =>
response.status must_== 500
response.body[String] must contain(
"RuntimeException: Singleton action instances are not allowed! Remove the @javax.inject.Singleton annotation from the action class play.it.http.ActionCompositionOrderTest$SingletonActionAnnotationAction"
"RuntimeException: Singleton action instances are not allowed! Remove the @jakarta.inject.Singleton annotation from the action class play.it.http.ActionCompositionOrderTest$SingletonActionAnnotationAction"
)
}
}
Expand Down
Expand Up @@ -6,8 +6,6 @@ package play.it.http

import java.util.concurrent.CompletableFuture
import java.util.concurrent.TimeUnit
import javax.inject.Inject
import javax.inject.Provider

import scala.concurrent.duration._
import scala.concurrent.ExecutionContext
Expand All @@ -17,6 +15,8 @@ import scala.reflect.ClassTag
import com.github.benmanes.caffeine.cache.Cache
import com.github.benmanes.caffeine.cache.Caffeine
import com.google.common.primitives.Primitives
import jakarta.inject.Inject
import jakarta.inject.Provider
import org.apache.pekko.Done
import play.api.cache.caffeine.CaffeineCacheModule
import play.api.cache.AsyncCacheApi
Expand Down
Expand Up @@ -9,8 +9,8 @@ import java.lang.reflect.InvocationTargetException
import java.util
import java.util.concurrent.CompletableFuture
import java.util.concurrent.CompletionStage
import javax.inject.Provider

import jakarta.inject.Provider
import play._
import play.api.{ Application => ScalaApplication }
import play.api.mvc.RequestHeader
Expand Down