diff options
15 files changed, 69 insertions, 54 deletions
diff --git a/application/src/test/scala/com/yahoo/application/container/jersey/JerseyTest.scala b/application/src/test/scala/com/yahoo/application/container/jersey/JerseyTest.scala index 5801197602b..cdf2d9ee1c6 100644 --- a/application/src/test/scala/com/yahoo/application/container/jersey/JerseyTest.scala +++ b/application/src/test/scala/com/yahoo/application/container/jersey/JerseyTest.scala @@ -1,27 +1,23 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.application.container.jersey -import java.nio.file.{Path, Files, Paths} +import java.nio.file.{Files, Path, Paths} import javax.ws.rs.core.UriBuilder import com.yahoo.application.Networking - +import com.yahoo.application.container.JDiscTest._ import com.yahoo.container.test.jars.jersey.resources.TestResourceBase +import com.yahoo.container.test.jars.jersey.{resources => jarResources} import com.yahoo.vespa.scalalib.osgi.maven.ProjectBundleClassPaths import com.yahoo.vespa.scalalib.osgi.maven.ProjectBundleClassPaths.BundleClasspathMapping import org.apache.http.HttpResponse import org.apache.http.client.methods.HttpGet -import org.apache.http.impl.client.DefaultHttpClient +import org.apache.http.impl.client.HttpClientBuilder import org.apache.http.util.EntityUtils +import org.hamcrest.CoreMatchers.is import org.junit.Assert._ import org.junit.Test -import com.yahoo.container.test.jars.jersey.{resources => jarResources} - -import org.hamcrest.CoreMatchers.is - -import com.yahoo.application.container.JDiscTest._ - import scala.io.Source /** @@ -125,7 +121,7 @@ class JerseyTest { </services>, Networking.enable)) { jdisc => - val client = new DefaultHttpClient + val client = HttpClientBuilder.create().build() def httpGetter(path: HttpPath) = { client.execute(new HttpGet(s"http://localhost:$getListenPort/rest-api/${path.stripPrefix("/")}")) diff --git a/bundle-plugin/pom.xml b/bundle-plugin/pom.xml index cda5a64d050..31355ff21d2 100644 --- a/bundle-plugin/pom.xml +++ b/bundle-plugin/pom.xml @@ -77,6 +77,10 @@ <artifactId>scalalib</artifactId> <version>${project.version}</version> </dependency> + <dependency> + <groupId>com.google.code.findbugs</groupId> + <artifactId>jsr305</artifactId> + </dependency> </dependencies> <build> <finalName>${project.artifactId}</finalName> diff --git a/bundle-plugin/src/main/scala/com/yahoo/container/plugin/mojo/AssembleContainerPluginMojo.scala b/bundle-plugin/src/main/scala/com/yahoo/container/plugin/mojo/AssembleContainerPluginMojo.scala index 795a0eaf86e..4104e349208 100644 --- a/bundle-plugin/src/main/scala/com/yahoo/container/plugin/mojo/AssembleContainerPluginMojo.scala +++ b/bundle-plugin/src/main/scala/com/yahoo/container/plugin/mojo/AssembleContainerPluginMojo.scala @@ -14,7 +14,7 @@ import org.apache.maven.plugins.annotations.{Mojo, Parameter, ResolutionScope} import org.apache.maven.project.MavenProject import org.codehaus.plexus.archiver.jar.JarArchiver -import scala.collection.convert.wrapAsScala._ +import scala.collection.JavaConverters._ /** * @author tonytv @@ -91,7 +91,7 @@ class AssembleContainerPluginMojo extends AbstractMojo { private def copyConfigDefinitions(file: File, jarArchiver: JarArchiver) { JarFiles.withJarFile(file) { jarFile => for { - entry <- jarFile.entries() + entry <- jarFile.entries().asScala name = entry.getName if name.startsWith("configdefinitions/") && name.endsWith(".def") diff --git a/container-di/src/main/scala/com/yahoo/container/di/CloudSubscriberFactory.scala b/container-di/src/main/scala/com/yahoo/container/di/CloudSubscriberFactory.scala index 25ec75da5b1..cf047503d71 100644 --- a/container-di/src/main/scala/com/yahoo/container/di/CloudSubscriberFactory.scala +++ b/container-di/src/main/scala/com/yahoo/container/di/CloudSubscriberFactory.scala @@ -11,6 +11,7 @@ import com.yahoo.log.LogLevel import com.yahoo.vespa.config.ConfigKey import scala.collection.JavaConverters._ +import scala.language.existentials /** diff --git a/container-di/src/main/scala/com/yahoo/container/di/ConfigRetriever.scala b/container-di/src/main/scala/com/yahoo/container/di/ConfigRetriever.scala index a4d7370429e..ac5f9bb589f 100644 --- a/container-di/src/main/scala/com/yahoo/container/di/ConfigRetriever.scala +++ b/container-di/src/main/scala/com/yahoo/container/di/ConfigRetriever.scala @@ -11,6 +11,7 @@ import com.yahoo.log.LogLevel import scala.annotation.tailrec import scala.collection.JavaConverters._ +import scala.language.postfixOps /** * @author tonytv diff --git a/container-di/src/main/scala/com/yahoo/container/di/componentgraph/core/ComponentGraph.scala b/container-di/src/main/scala/com/yahoo/container/di/componentgraph/core/ComponentGraph.scala index 2bae9d67f27..f27dfc54b75 100644 --- a/container-di/src/main/scala/com/yahoo/container/di/componentgraph/core/ComponentGraph.scala +++ b/container-di/src/main/scala/com/yahoo/container/di/componentgraph/core/ComponentGraph.scala @@ -25,6 +25,8 @@ import com.yahoo.container.di.removeStackTrace import scala.util.Try import scala.Some +import scala.language.existentials + /** * @author tonytv * @author gjoranv @@ -177,13 +179,13 @@ class ComponentGraph(val generation: Long = 0) { assert(wildCardType.getLowerBounds.isEmpty) assert(wildCardType.getUpperBounds.size == 1) wildCardType.getUpperBounds.head.asInstanceOf[Class[AnyRef]] - case clazz: Class[AnyRef] => clazz + case clazz: Class[_] => clazz case typeVariable: TypeVariable[_] => throw new RuntimeException("Can't create ComponentRegistry of unknown type variable " + typeVariable) } componentRegistryNodes.find(_.componentClass == componentType). - getOrElse(newComponentRegistryNode(componentClass)) + getOrElse(newComponentRegistryNode(componentClass.asInstanceOf[Class[AnyRef]])) } def handleConfigParameter(node : ComponentNode, clazz: Class[_]) : ConfigKeyT = { diff --git a/container-di/src/main/scala/com/yahoo/container/di/componentgraph/core/JerseyNode.scala b/container-di/src/main/scala/com/yahoo/container/di/componentgraph/core/JerseyNode.scala index 92d83f2ecc7..aeae227f4cb 100644 --- a/container-di/src/main/scala/com/yahoo/container/di/componentgraph/core/JerseyNode.scala +++ b/container-di/src/main/scala/com/yahoo/container/di/componentgraph/core/JerseyNode.scala @@ -1,18 +1,18 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.container.di.componentgraph.core -import com.yahoo.component.{ComponentSpecification, ComponentId} +import java.net.URL + +import com.yahoo.component.{ComponentId, ComponentSpecification} +import com.yahoo.container.di.Osgi import com.yahoo.container.di.Osgi.RelativePath +import com.yahoo.container.di.componentgraph.core.JerseyNode._ import com.yahoo.container.di.config.RestApiContext +import com.yahoo.container.di.config.RestApiContext.BundleInfo +import org.osgi.framework.Bundle import org.osgi.framework.wiring.BundleWiring -import scala.collection.JavaConverters._ -import scala.collection.convert.wrapAsJava._ -import RestApiContext.BundleInfo -import JerseyNode._ -import com.yahoo.container.di.Osgi -import org.osgi.framework.Bundle -import java.net.URL +import scala.collection.JavaConverters._ /** * Represents an instance of RestApiContext @@ -70,7 +70,7 @@ object JerseyNode { webInfUrl(bundle), bundle.adapt(classOf[BundleWiring]).getClassLoader) - bundleInfo.setClassEntries(classEntries) + bundleInfo.setClassEntries(classEntries.asJavaCollection) bundleInfo } diff --git a/container-di/src/main/scala/com/yahoo/container/di/osgi/OsgiUtil.scala b/container-di/src/main/scala/com/yahoo/container/di/osgi/OsgiUtil.scala index 8b4be3f5c10..f2120786579 100644 --- a/container-di/src/main/scala/com/yahoo/container/di/osgi/OsgiUtil.scala +++ b/container-di/src/main/scala/com/yahoo/container/di/osgi/OsgiUtil.scala @@ -7,19 +7,17 @@ import java.util.jar.{JarEntry, JarFile} import java.util.logging.{Level, Logger} import java.util.stream.Collectors +import com.google.common.io.Files.fileTreeTraverser import com.yahoo.component.ComponentSpecification import com.yahoo.container.di.Osgi.RelativePath import com.yahoo.vespa.scalalib.arm.Using.using +import com.yahoo.vespa.scalalib.java.function.FunctionConverters._ import com.yahoo.vespa.scalalib.osgi.maven.ProjectBundleClassPaths import com.yahoo.vespa.scalalib.osgi.maven.ProjectBundleClassPaths.BundleClasspathMapping import org.osgi.framework.Bundle import org.osgi.framework.wiring.BundleWiring -import com.google.common.io.Files.fileTreeTraverser - -import scala.collection.convert.decorateAsScala._ - -import com.yahoo.vespa.scalalib.java.function.FunctionConverters._ +import scala.collection.JavaConverters._ /** * Tested by com.yahoo.application.container.jersey.JerseyTest diff --git a/container-di/src/main/scala/com/yahoo/container/di/package.scala b/container-di/src/main/scala/com/yahoo/container/di/package.scala index df7c8359795..e580d928ebb 100644 --- a/container-di/src/main/scala/com/yahoo/container/di/package.scala +++ b/container-di/src/main/scala/com/yahoo/container/di/package.scala @@ -1,10 +1,13 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.container -import com.yahoo.config.ConfigInstance -import com.yahoo.vespa.config.ConfigKey import java.lang.reflect.Type + import com.google.inject.Key +import com.yahoo.config.ConfigInstance +import com.yahoo.vespa.config.ConfigKey + +import scala.language.implicitConversions /** * diff --git a/container-di/src/test/scala/com/yahoo/container/di/ContainerTest.scala b/container-di/src/test/scala/com/yahoo/container/di/ContainerTest.scala index d8734e81948..8e7fbde3f5e 100644 --- a/container-di/src/test/scala/com/yahoo/container/di/ContainerTest.scala +++ b/container-di/src/test/scala/com/yahoo/container/di/ContainerTest.scala @@ -19,7 +19,7 @@ import scala.collection.JavaConverters._ import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.duration._ import scala.concurrent.{Await, Future} -import scala.language.postfixOps +import scala.language.{existentials, postfixOps} import scala.util.Try /** diff --git a/container-di/src/test/scala/com/yahoo/container/di/componentgraph/core/ComponentGraphTest.scala b/container-di/src/test/scala/com/yahoo/container/di/componentgraph/core/ComponentGraphTest.scala index 867b5b79203..05194cb911b 100644 --- a/container-di/src/test/scala/com/yahoo/container/di/componentgraph/core/ComponentGraphTest.scala +++ b/container-di/src/test/scala/com/yahoo/container/di/componentgraph/core/ComponentGraphTest.scala @@ -1,23 +1,25 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.container.di.componentgraph.core -import org.junit.Test -import org.junit.Assert._ -import org.hamcrest.CoreMatchers.{is, sameInstance, equalTo, not, containsString} +import java.util.concurrent.{Executor, Executors} +import com.google.inject.name.{Named, Names} +import com.google.inject.{AbstractModule, Guice, Inject, Key, Provider => GuiceProvider} import com.yahoo.component.provider.ComponentRegistry -import com.google.inject.name.{Names, Named} -import com.yahoo.component.{ComponentId, AbstractComponent} -import org.hamcrest.Matcher -import com.yahoo.vespa.config.ConfigKey -import com.yahoo.config.{ConfigInstance} -import com.yahoo.config.test.{TestConfig, Test2Config} -import java.util.concurrent.{Executors, Executor} -import com.google.inject.{Guice, Key, AbstractModule, Inject, Provider=>GuiceProvider} -import com.yahoo.container.di._ +import com.yahoo.component.{AbstractComponent, ComponentId} +import com.yahoo.config.ConfigInstance import com.yahoo.config.subscription.ConfigGetter -import com.yahoo.container.di.config.{JerseyInjectionConfig, JerseyBundlesConfig, RestApiContext} +import com.yahoo.config.test.{Test2Config, TestConfig} +import com.yahoo.container.di._ import com.yahoo.container.di.componentgraph.Provider +import com.yahoo.container.di.config.{JerseyBundlesConfig, JerseyInjectionConfig, RestApiContext} +import com.yahoo.vespa.config.ConfigKey +import org.hamcrest.CoreMatchers.{containsString, equalTo, is, not, sameInstance} +import org.hamcrest.Matcher +import org.junit.Assert._ +import org.junit.Test + +import scala.language.implicitConversions /** * @author gjoranv @@ -330,7 +332,7 @@ class ComponentGraphTest { def child_injector_can_inject_multiple_instances_for_same_key() { def executorProvider() = Executors.newSingleThreadExecutor() - val (graphSize, executorA, executorB) = buildGraphWithChildInjector(executorProvider) + val (graphSize, executorA, executorB) = buildGraphWithChildInjector(() => executorProvider()) assertThat(graphSize, is(4)) assertThat(executorA, not(sameInstance(executorB))) diff --git a/container-jersey2/src/main/scala/com/yahoo/container/servlet/jersey/JerseyApplication.scala b/container-jersey2/src/main/scala/com/yahoo/container/servlet/jersey/JerseyApplication.scala index 3bd4c08e2e5..eea41003984 100644 --- a/container-jersey2/src/main/scala/com/yahoo/container/servlet/jersey/JerseyApplication.scala +++ b/container-jersey2/src/main/scala/com/yahoo/container/servlet/jersey/JerseyApplication.scala @@ -3,13 +3,13 @@ package com.yahoo.container.servlet.jersey import javax.ws.rs.core.Application -import scala.collection.convert.wrapAsJava._ +import scala.collection.JavaConverters._ /** * @author tonytv */ class JerseyApplication(resourcesAndProviderClasses: Set[Class[_]]) extends Application { - private val classes: java.util.Set[Class[_]] = resourcesAndProviderClasses + private val classes: java.util.Set[Class[_]] = resourcesAndProviderClasses.asJava override def getClasses = classes override def getSingletons = super.getSingletons diff --git a/container-jersey2/src/main/scala/com/yahoo/container/servlet/jersey/JerseyServletProvider.scala b/container-jersey2/src/main/scala/com/yahoo/container/servlet/jersey/JerseyServletProvider.scala index 73480482641..c83f6a63954 100644 --- a/container-jersey2/src/main/scala/com/yahoo/container/servlet/jersey/JerseyServletProvider.scala +++ b/container-jersey2/src/main/scala/com/yahoo/container/servlet/jersey/JerseyServletProvider.scala @@ -12,15 +12,16 @@ import com.yahoo.container.di.config.RestApiContext.BundleInfo import com.yahoo.container.jaxrs.annotation.Component import com.yahoo.container.servlet.jersey.util.ResourceConfigUtil.registerComponent import org.eclipse.jetty.servlet.ServletHolder -import org.glassfish.hk2.api.{TypeLiteral, InjectionResolver} -import org.glassfish.hk2.utilities.binding.AbstractBinder +import org.glassfish.hk2.api.{InjectionResolver, TypeLiteral} import org.glassfish.hk2.utilities.Binder +import org.glassfish.hk2.utilities.binding.AbstractBinder import org.glassfish.jersey.media.multipart.MultiPartFeature import org.glassfish.jersey.server.ResourceConfig import org.glassfish.jersey.servlet.ServletContainer import org.objectweb.asm.ClassReader -import scala.collection.convert.wrapAsScala._ +import scala.collection.JavaConverters._ + import scala.util.control.Exception @@ -32,7 +33,7 @@ class JerseyServletProvider(restApiContext: RestApiContext) extends Provider[Ser private def resourceConfig(restApiContext: RestApiContext) = { val resourceConfig = ResourceConfig.forApplication( - new JerseyApplication(resourcesAndProviders(restApiContext.getBundles))) + new JerseyApplication(resourcesAndProviders(restApiContext.getBundles.asScala))) registerComponent(resourceConfig, componentInjectorBinder(restApiContext)) registerComponent(resourceConfig, jacksonDatatypeJdk8Provider) @@ -44,7 +45,7 @@ class JerseyServletProvider(restApiContext: RestApiContext) extends Provider[Ser def resourcesAndProviders(bundles: Traversable[BundleInfo]) = (for { bundle <- bundles.view - classEntry <- bundle.getClassEntries + classEntry <- bundle.getClassEntries.asScala className <- detectResourceOrProvider(bundle.classLoader, classEntry) } yield loadClass(bundle.symbolicName, bundle.classLoader, className)).toSet @@ -83,7 +84,7 @@ class JerseyServletProvider(restApiContext: RestApiContext) extends Provider[Ser } def componentInjectorBinder(restApiContext: RestApiContext): Binder = { - val componentGraphProvider = new ComponentGraphProvider(restApiContext.getInjectableComponents.toTraversable) + val componentGraphProvider = new ComponentGraphProvider(restApiContext.getInjectableComponents.asScala) val componentAnnotationType = new TypeLiteral[InjectionResolver[Component]] {} new AbstractBinder { @@ -231,7 +231,7 @@ <arg>-unchecked</arg> <arg>-deprecation</arg> <arg>-feature</arg> - <arg>-explaintypes</arg> + <arg>-Xfatal-warnings</arg> </args> </configuration> </plugin> diff --git a/standalone-container/pom.xml b/standalone-container/pom.xml index 85a401d6af3..6e29d7fcc7c 100644 --- a/standalone-container/pom.xml +++ b/standalone-container/pom.xml @@ -99,6 +99,13 @@ <plugin> <groupId>net.alchim31.maven</groupId> <artifactId>scala-maven-plugin</artifactId> + <configuration> + <args> + <arg>-unchecked</arg> + <arg>-feature</arg> + <arg>-deprecation</arg> + </args> + </configuration> <executions> <execution> <id>compile</id> |