From da70e0ccd410d430a93bc66dd616817b11f46a66 Mon Sep 17 00:00:00 2001 From: Andrea Peruffo Date: Mon, 1 Feb 2021 15:38:29 +0000 Subject: [PATCH] Scala 3 cross compatible akka-actor / akka-testkit / akka-actor-tests (#29956) * Remove @switch when it doesn't take effect * Use ActorRef.noSender * Minor tweaks to SchedulerSpec * Disambiguate TypedActor for Scala 3 * Bump ScalaTest to a version compatible with Scala 3 * Bump ScalaCheck * Disambiguate Event in SupervisorHierarchySpec * Scala 3 compatible EventBusSpec * Prevent private unused variables to be erased by Scala 3 * Bump mockito * Explicit actorRef2Scala import * restore original .scalafix.conf * Scala 3 compatible tailrec * Reminder to re add switch annotation in case * Move to nowarn instead of silencer * Bump to Scala 2.12.13 * Cross compatible annotations * fix docs generation * adapt the build for Scala 3 * fix errors but bus * remove more SerialVersion from trait * scalacheck only from scalatest * cross-compile akka-actor-tests * restore cross-compilation * early initializers workaround * scalacheck switch * cross compatible FSM.State class * cross compatible LARS spec * Change results to pass LineNumberSpec * fix stackoverflow in AsyncDnsResolverIntegrationSpec * FSM.State unapply * fix Scala 2.13 mima * SerialVersionRemover compiler plugin * removed unused nowarns --- .gitignore | 1 + .../typed/internal/ActorSystemStub.scala | 4 +- .../ScalaTestIntegrationExampleSpec.scala | 4 +- .../java/akka/pattern/StatusReplyTest.java | 8 +- .../akka/util/LineNumberSpec.scala | 0 .../akka/util/TypedMultiMapSpec.scala | 0 .../scala-2.13/akka/util/LineNumberSpec.scala | 58 + .../akka/util/TypedMultiMapSpec.scala | 71 + .../scala-3/akka/util/LineNumberSpec.scala | 58 + .../scala/akka/actor/ActorLifeCycleSpec.scala | 3 + .../test/scala/akka/actor/ActorPathSpec.scala | 24 +- .../scala/akka/actor/ActorSystemSpec.scala | 14 +- .../scala/akka/actor/ActorWithStashSpec.scala | 4 +- .../scala/akka/actor/DeathWatchSpec.scala | 4 +- .../test/scala/akka/actor/ExtensionSpec.scala | 5 +- .../actor/LocalActorRefProviderSpec.scala | 6 +- .../scala/akka/actor/PropsCreationSpec.scala | 4 +- .../akka/actor/RestartStrategySpec.scala | 4 +- .../test/scala/akka/actor/SchedulerSpec.scala | 53 +- .../akka/actor/SupervisorHierarchySpec.scala | 64 +- .../scala/akka/actor/SupervisorMiscSpec.scala | 4 +- .../scala/akka/actor/TypedActorSpec.scala | 72 +- .../akka/actor/dispatch/ActorModelSpec.scala | 6 +- .../actor/dispatch/DispatcherActorSpec.scala | 2 +- .../akka/actor/dispatch/PinnedActorSpec.scala | 2 +- .../akka/actor/dungeon/DispatchSpec.scala | 1 + .../actor/setup/ActorSystemSetupSpec.scala | 12 +- .../dispatch/ControlAwareDispatcherSpec.scala | 2 +- .../akka/dispatch/ExecutionContextSpec.scala | 1 + .../dispatch/ForkJoinPoolStarvationSpec.scala | 2 +- .../dispatch/PriorityDispatcherSpec.scala | 4 +- .../StablePriorityDispatcherSpec.scala | 4 +- .../AddressTerminatedTopicBenchSpec.scala | 1 + .../test/scala/akka/event/EventBusSpec.scala | 14 +- .../scala/akka/event/EventStreamSpec.scala | 38 +- .../scala/akka/event/jul/JavaLoggerSpec.scala | 2 +- .../akka/io/InetAddressDnsResolverSpec.scala | 6 +- .../akka/io/TcpIntegrationSpecSupport.scala | 1 + .../akka/io/UdpConnectedIntegrationSpec.scala | 1 + .../scala/akka/io/UdpIntegrationSpec.scala | 1 + .../dns/AsyncDnsResolverIntegrationSpec.scala | 7 +- .../akka/io/dns/DockerBindDnsService.scala | 7 +- .../io/dns/internal/AsyncDnsManagerSpec.scala | 7 +- .../dns/internal/AsyncDnsResolverSpec.scala | 2 +- .../akka/io/dns/internal/DnsClientSpec.scala | 1 + .../io/dns/internal/TcpDnsClientSpec.scala | 1 + .../src/test/scala/akka/pattern/AskSpec.scala | 9 +- .../BackoffOnRestartSupervisorSpec.scala | 4 +- .../akka/pattern/CircuitBreakerSpec.scala | 1 + .../pattern/CircuitBreakerStressSpec.scala | 1 + .../test/scala/akka/pattern/PatternSpec.scala | 2 +- .../scala/akka/pattern/PromiseRefSpec.scala | 6 +- .../scala/akka/pattern/StatusReplySpec.scala | 12 +- .../pattern/extended/ExplicitAskSpec.scala | 5 +- .../scala/akka/routing/BalancingSpec.scala | 2 +- .../scala/akka/routing/BroadcastSpec.scala | 2 +- .../routing/ConfiguredLocalRoutingSpec.scala | 6 +- .../routing/ConsistentHashingRouterSpec.scala | 1 + .../test/scala/akka/routing/RandomSpec.scala | 2 +- .../test/scala/akka/routing/ResizerSpec.scala | 2 +- .../scala/akka/routing/RoundRobinSpec.scala | 1 + .../akka/routing/RouteeCreationSpec.scala | 1 + .../ScatterGatherFirstCompletedSpec.scala | 2 +- .../akka/routing/SmallestMailboxSpec.scala | 2 +- .../scala/akka/routing/TailChoppingSpec.scala | 2 +- .../DisabledJavaSerializerWarningSpec.scala | 1 + .../akka/serialization/SerializeSpec.scala | 6 +- .../akka/util/BoundedBlockingQueueSpec.scala | 36 +- .../util/ByteStringInitializationSpec.scala | 6 +- .../test/scala/akka/util/ByteStringSpec.scala | 6 +- .../scala/akka/actor/typed/BehaviorSpec.scala | 8 +- .../akka/typed/FaultToleranceDocSpec.scala | 4 +- .../akka/typed/SpawnProtocolDocSpec.scala | 4 +- .../akka/typed/StyleGuideDocExamples.scala | 6 +- .../typed/extensions/ExtensionDocSpec.scala | 6 +- .../supervision/SupervisionCompileOnly.scala | 4 +- .../typed/internal/ActorContextImpl.scala | 4 +- .../actor/typed/scaladsl/AskPattern.scala | 4 +- .../japi/function/Functions.scala.template | 6 +- .../actorClassificationUnsubscriber.excludes | 5 + .../main/scala-2.12/akka/compat/Future.scala | 4 +- .../akka/compat/PartialFunction.scala | 26 + .../akka/compat/PartialFunction.scala | 23 + .../scala-2.13/akka/util/ByteString.scala | 4 +- .../src/main/scala-3/akka/compat/Future.scala | 50 + .../scala-3/akka/compat/PartialFunction.scala | 23 + .../internal/SameThreadExecutionContext.scala | 19 + .../main/scala-3/akka/util/ByteIterator.scala | 699 +++++++++ .../main/scala-3/akka/util/ByteString.scala | 1380 +++++++++++++++++ .../util/ccompat/ccompatUsedUntil213.scala | 18 + .../scala-3/akka/util/ccompat/package.scala | 23 + .../main/scala/akka/actor/AbstractActor.scala | 4 +- .../main/scala/akka/actor/AbstractFSM.scala | 6 +- .../src/main/scala/akka/actor/ActorCell.scala | 6 +- .../src/main/scala/akka/actor/ActorPath.scala | 12 +- .../scala/akka/actor/ActorRefProvider.scala | 7 +- .../scala/akka/actor/ActorSelection.scala | 4 +- .../main/scala/akka/actor/ActorSystem.scala | 2 +- .../src/main/scala/akka/actor/Address.scala | 8 + .../akka/actor/CoordinatedShutdown.scala | 4 +- .../src/main/scala/akka/actor/Deployer.scala | 8 +- .../src/main/scala/akka/actor/FSM.scala | 77 +- .../akka/actor/IndirectActorProducer.scala | 4 +- .../actor/LightArrayRevolverScheduler.scala | 16 +- .../akka/actor/ReflectiveDynamicAccess.scala | 2 +- .../akka/actor/RepointableActorRef.scala | 10 +- .../src/main/scala/akka/actor/Scheduler.scala | 26 +- .../src/main/scala/akka/actor/Timers.scala | 2 +- .../main/scala/akka/actor/TypedActor.scala | 49 +- .../scala/akka/actor/dungeon/Children.scala | 16 +- .../scala/akka/actor/dungeon/Dispatch.scala | 10 +- .../akka/actor/dungeon/FaultHandling.scala | 10 +- .../akka/dispatch/AbstractDispatcher.scala | 17 +- .../scala/akka/dispatch/CachingConfig.scala | 2 +- .../main/scala/akka/dispatch/Dispatcher.scala | 4 +- .../scala/akka/dispatch/Dispatchers.scala | 4 +- .../src/main/scala/akka/dispatch/Future.scala | 12 +- .../main/scala/akka/dispatch/Mailbox.scala | 29 +- .../main/scala/akka/dispatch/Mailboxes.scala | 2 +- .../ActorClassificationUnsubscriber.scala | 18 +- .../src/main/scala/akka/event/EventBus.scala | 5 +- .../main/scala/akka/event/EventStream.scala | 6 +- .../src/main/scala/akka/event/Logging.scala | 6 +- .../scala/akka/event/jul/JavaLogger.scala | 1 + akka-actor/src/main/scala/akka/io/Dns.scala | 8 +- .../akka/io/InetAddressDnsProvider.scala | 4 +- .../akka/io/InetAddressDnsResolver.scala | 8 +- .../main/scala/akka/io/SimpleDnsCache.scala | 8 +- akka-actor/src/main/scala/akka/io/Tcp.scala | 6 +- .../main/scala/akka/io/TcpConnection.scala | 8 +- .../scala/akka/io/TcpIncomingConnection.scala | 4 +- .../src/main/scala/akka/io/TcpListener.scala | 2 +- .../scala/akka/io/TcpOutgoingConnection.scala | 2 +- akka-actor/src/main/scala/akka/io/Udp.scala | 6 +- .../src/main/scala/akka/io/UdpConnected.scala | 4 +- .../main/scala/akka/io/UdpConnection.scala | 2 +- .../src/main/scala/akka/io/UdpListener.scala | 2 +- .../src/main/scala/akka/io/UdpSender.scala | 10 +- .../src/main/scala/akka/io/WithUdpSend.scala | 2 +- .../akka/io/dns/DnsResourceRecords.scala | 4 +- .../main/scala/akka/io/dns/DnsSettings.scala | 4 +- .../io/dns/internal/AsyncDnsManager.scala | 8 +- .../io/dns/internal/AsyncDnsProvider.scala | 4 +- .../io/dns/internal/AsyncDnsResolver.scala | 2 +- .../akka/io/dns/internal/DnsClient.scala | 6 +- .../akka/io/dns/internal/DnsMessage.scala | 4 +- .../akka/io/dns/internal/TcpDnsClient.scala | 2 +- .../scala/akka/io/dns/internal/package.scala | 2 +- .../src/main/scala/akka/japi/JavaAPI.scala | 4 +- .../scala/akka/japi/function/Function.scala | 14 +- .../main/scala/akka/pattern/AskSupport.scala | 17 +- .../src/main/scala/akka/pattern/Backoff.scala | 4 +- .../scala/akka/pattern/BackoffOptions.scala | 1 + .../scala/akka/pattern/CircuitBreaker.scala | 9 +- .../scala/akka/pattern/HandleBackoff.scala | 2 +- .../main/scala/akka/pattern/Patterns.scala | 1 + .../scala/akka/pattern/PipeToSupport.scala | 2 +- .../scala/akka/pattern/RetrySupport.scala | 2 +- .../main/scala/akka/pattern/StatusReply.scala | 21 +- .../internal/BackoffOnRestartSupervisor.scala | 6 +- .../internal/BackoffOnStopSupervisor.scala | 23 +- .../main/scala/akka/routing/Balancing.scala | 4 +- .../main/scala/akka/routing/Broadcast.scala | 4 +- .../akka/routing/ConsistentHashing.scala | 2 +- .../main/scala/akka/routing/Listeners.scala | 2 +- .../main/scala/akka/routing/MurmurHash.scala | 4 +- .../src/main/scala/akka/routing/Random.scala | 4 +- .../main/scala/akka/routing/RoundRobin.scala | 4 +- .../scala/akka/routing/RoutedActorCell.scala | 1 + .../scala/akka/routing/RoutedActorRef.scala | 4 +- .../scala/akka/routing/RouterConfig.scala | 8 +- .../scala/akka/routing/SmallestMailbox.scala | 8 +- .../akka/serialization/AsyncSerializer.scala | 2 +- .../scala/akka/serialization/Serializer.scala | 2 +- .../main/scala/akka/util/Collections.scala | 23 +- .../akka/util/FlightRecorderLoader.scala | 6 +- .../src/main/scala/akka/util/Index.scala | 4 +- .../main/scala/akka/util/ManifestInfo.scala | 8 +- .../main/scala/akka/util/MessageBuffer.scala | 2 +- .../src/main/scala/akka/util/Reflect.scala | 4 +- .../src/main/scala/akka/util/Unused.scala | 4 +- .../src/main/scala/akka/util/WallClock.scala | 2 +- .../akka/remote/artery/CodecBenchmark.scala | 12 +- .../jackson/JacksonSerializationBench.scala | 6 +- .../metrics/ClusterMetricsCollector.scala | 4 +- .../metrics/ClusterMetricsRouting.scala | 6 +- .../scala/akka/cluster/metrics/Metric.scala | 4 +- .../scala/akka/cluster/metrics/EWMASpec.scala | 4 +- .../akka/cluster/metrics/MetricSpec.scala | 8 +- .../metrics/MetricsCollectorSpec.scala | 4 +- .../typed/javadsl/ClusterSharding.scala | 4 +- .../ReplicatedShardingCompileOnlySpec.scala | 4 +- .../typed/ShardingCompileOnlySpec.scala | 4 +- .../delivery/PointToPointDocExample.scala | 4 +- .../docs/delivery/WorkPullingDocExample.scala | 4 +- .../cluster/sharding/ShardCoordinator.scala | 4 +- .../RememberEntitiesFailureSpec.scala | 4 +- .../ClusterClientMessageSerializer.scala | 4 +- .../client/ClusterClientHandoverSpec.scala | 4 +- .../cluster/client/ClusterClientSpec.scala | 4 +- .../client/ClusterClientStopSpec.scala | 4 +- .../ClusterClientMessageSerializerSpec.scala | 4 +- .../javadsl/ReplicatorMessageAdapter.scala | 4 +- .../typed/BasicClusterExampleSpec.scala | 4 +- .../src/main/scala/akka/cluster/Cluster.scala | 6 +- .../cluster/ClusterActorRefProvider.scala | 4 +- .../scala/akka/cluster/ClusterDaemon.scala | 4 +- .../scala/akka/cluster/ClusterEvent.scala | 14 +- .../src/main/scala/akka/cluster/Member.scala | 6 +- .../protobuf/ClusterMessageSerializer.scala | 4 +- .../cluster/routing/ClusterRouterConfig.scala | 6 +- .../SurviveNetworkInstabilitySpec.scala | 8 +- .../akka/cluster/ClusterConfigSpec.scala | 4 +- .../akka/cluster/ReachabilityPerfSpec.scala | 4 +- .../ClusterMessageSerializerSpec.scala | 4 +- .../akka/discovery/ServiceDiscovery.scala | 4 +- .../akka/discovery/dns/DnsDiscoverySpec.scala | 4 +- .../scala/akka/cluster/ddata/Replicator.scala | 6 +- .../protobuf/ReplicatedDataSerializer.scala | 4 +- ...plicatedEventSourcingCompileOnlySpec.scala | 4 +- .../PersistentActorCompileOnlyTest.scala | 4 +- .../BasicPersistentBehaviorCompileOnly.scala | 4 +- .../scala/akka/persistence/Eventsourced.scala | 4 +- .../akka/persistence/fsm/PersistentFSM.scala | 6 +- .../journal/leveldb/LeveldbStore.scala | 6 +- .../serialization/MessageSerializer.scala | 4 +- .../persistence/PersistentActorSpec.scala | 4 +- .../persistence/fsm/PersistentFSMSpec.scala | 6 +- .../src/multi-jvm/scala/akka/io/DnsSpec.scala | 4 +- .../scala/akka/remote/TransportFailSpec.scala | 4 +- .../artery/SurviveNetworkPartitionSpec.scala | 4 +- .../classic/RemoteGatePiercingSpec.scala | 4 +- .../classic/RemoteNodeRestartGateSpec.scala | 4 +- .../akka/remote/classic/Ticket15109Spec.scala | 4 +- .../src/main/scala/akka/remote/Endpoint.scala | 16 +- .../akka/remote/RemoteActorRefProvider.scala | 4 +- .../akka/remote/RemoteMetricsExtension.scala | 6 +- .../scala/akka/remote/RemoteSettings.scala | 6 +- .../scala/akka/remote/RemoteWatcher.scala | 8 +- .../src/main/scala/akka/remote/Remoting.scala | 12 +- .../akka/remote/RemotingLifecycleEvent.scala | 12 +- .../akka/remote/artery/ArterySettings.scala | 6 +- .../akka/remote/artery/ArteryTransport.scala | 6 +- .../akka/remote/artery/Association.scala | 8 +- .../remote/routing/RemoteRouterConfig.scala | 4 +- .../akka/remote/transport/AkkaPduCodec.scala | 8 +- .../transport/AkkaProtocolTransport.scala | 18 +- .../FailureInjectorTransportAdapter.scala | 8 +- .../transport/ThrottlerTransportAdapter.scala | 12 +- .../akka/remote/transport/Transport.scala | 4 +- .../transport/netty/NettySSLSupport.scala | 4 +- .../transport/netty/NettyTransport.scala | 14 +- .../remote/transport/netty/TcpSupport.scala | 10 +- .../remote/AccrualFailureDetectorSpec.scala | 4 +- .../scala/akka/remote/AckedDeliverySpec.scala | 6 +- .../scala/akka/remote/RemoteConfigSpec.scala | 4 +- .../akka/remote/RemoteFeaturesSpec.scala | 4 +- .../remote/Ticket1978CommunicationSpec.scala | 6 +- .../remote/TypedActorRemoteDeploySpec.scala | 8 +- .../remote/artery/LruBoundedCacheSpec.scala | 4 +- .../remote/artery/RemoteDeathWatchSpec.scala | 4 +- .../RemoteMessageSerializationSpec.scala | 4 +- .../akka/remote/classic/ActorsLeakSpec.scala | 4 +- .../remote/classic/RemoteDeathWatchSpec.scala | 6 +- .../RemoteDeploymentAllowListSpec.scala | 4 +- .../remote/classic/RemoteSettingsSpec.scala | 4 +- .../remote/classic/RemoteWatcherSpec.scala | 6 +- .../akka/remote/classic/RemotingSpec.scala | 4 +- .../classic/transport/AkkaProtocolSpec.scala | 4 +- .../transport/GenericTransportSpec.scala | 4 +- .../SystemMessageDeliveryStressTest.scala | 4 +- .../classic/transport/TestTransportSpec.scala | 4 +- .../ThrottlerTransportAdapterSpec.scala | 6 +- .../jackson/JacksonSerializerSpec.scala | 4 +- .../testkit/scaladsl/StreamTestKit.scala | 4 +- .../impl/fusing/GraphInterpreterSpecKit.scala | 8 +- .../akka/stream/testkit/ChainSetup.scala | 6 +- .../akka/stream/testkit/ScriptedTest.scala | 4 +- .../akka/stream/ActorMaterializerSpec.scala | 8 +- .../akka/stream/impl/FixedBufferSpec.scala | 4 +- .../stream/impl/fusing/InterpreterSpec.scala | 6 +- .../akka/stream/io/DeprecatedTlsSpec.scala | 4 +- .../scala/akka/stream/io/FileSinkSpec.scala | 4 +- .../scala/akka/stream/io/FileSourceSpec.scala | 4 +- .../stream/io/InputStreamSourceSpec.scala | 4 +- .../akka/stream/io/OutputStreamSinkSpec.scala | 4 +- .../test/scala/akka/stream/io/TcpSpec.scala | 12 +- .../akka/stream/scaladsl/AttributesSpec.scala | 4 +- .../akka/stream/scaladsl/BidiFlowSpec.scala | 4 +- .../stream/scaladsl/FlowCompileSpec.scala | 4 +- .../stream/scaladsl/FlowDispatcherSpec.scala | 4 +- .../stream/scaladsl/FlowFromFutureSpec.scala | 4 +- .../scaladsl/FlowPrefixAndTailSpec.scala | 6 +- .../stream/scaladsl/FlowPrependSpec.scala | 4 +- .../stream/scaladsl/FlowRecoverWithSpec.scala | 4 +- .../stream/scaladsl/FlowSlidingSpec.scala | 4 +- .../scala/akka/stream/scaladsl/FlowSpec.scala | 4 +- .../akka/stream/scaladsl/FlowZipSpec.scala | 4 +- .../scaladsl/FlowZipWithIndexSpec.scala | 4 +- .../stream/scaladsl/FlowZipWithSpec.scala | 4 +- .../stream/scaladsl/GraphBackedFlowSpec.scala | 4 +- .../stream/scaladsl/GraphDSLCompileSpec.scala | 4 +- .../scaladsl/GraphMergePreferredSpec.scala | 4 +- .../scaladsl/GraphMergeSortedSpec.scala | 4 +- .../stream/scaladsl/LazilyAsyncSpec.scala | 4 +- .../akka/stream/scaladsl/LazyFlowSpec.scala | 4 +- .../akka/stream/scaladsl/LazySinkSpec.scala | 4 +- .../akka/stream/scaladsl/SetupSpec.scala | 4 +- .../scaladsl/SinkForeachParallelSpec.scala | 4 +- .../scala/akka/stream/scaladsl/SinkSpec.scala | 10 +- .../akka/stream/scaladsl/SourceSpec.scala | 4 +- .../stream/scaladsl/TakeLastSinkSpec.scala | 4 +- .../scala/akka/stream/ActorMaterializer.scala | 8 +- .../src/main/scala/akka/stream/IOResult.scala | 4 +- .../main/scala/akka/stream/Materializer.scala | 6 +- .../scala/akka/stream/StreamRefSettings.scala | 6 +- .../akka/stream/SystemMaterializer.scala | 8 +- .../stream/impl/ActorMaterializerImpl.scala | 6 +- .../stream/impl/MaterializerGuardian.scala | 4 +- .../impl/PhasedFusingActorMaterializer.scala | 4 +- .../impl/StreamSubscriptionTimeout.scala | 6 +- .../scala/akka/stream/impl/fusing/Ops.scala | 4 +- .../scala/akka/stream/impl/io/TcpStages.scala | 4 +- .../stream/impl/streamref/SinkRefImpl.scala | 4 +- .../stream/impl/streamref/SourceRefImpl.scala | 12 +- .../scala/akka/stream/javadsl/BidiFlow.scala | 4 +- .../main/scala/akka/stream/javadsl/Flow.scala | 26 +- .../scala/akka/stream/javadsl/Source.scala | 30 +- .../stream/javadsl/StreamConverters.scala | 6 +- .../scala/akka/stream/javadsl/SubFlow.scala | 24 +- .../scala/akka/stream/javadsl/SubSource.scala | 24 +- .../main/scala/akka/stream/javadsl/Tcp.scala | 4 +- .../main/scala/akka/stream/scaladsl/Tcp.scala | 18 +- .../scala/akka/stream/stage/GraphStage.scala | 6 +- .../testkit/CallingThreadDispatcher.scala | 2 +- .../scala/akka/testkit/TestActorRef.scala | 77 +- .../main/scala/akka/testkit/TestActors.scala | 2 +- .../akka/testkit/TestEventListener.scala | 2 +- .../src/main/scala/akka/testkit/TestKit.scala | 16 +- .../scala/akka/testkit/javadsl/TestKit.scala | 8 +- .../test/scala/akka/testkit/AkkaSpec.scala | 2 +- .../scala/akka/testkit/AkkaSpecSpec.scala | 10 +- .../scala/akka/testkit/TestActorsSpec.scala | 1 + .../scala/akka/testkit/TestProbeSpec.scala | 4 +- .../akka/testkit/metrics/MetricsKitOps.scala | 21 +- build.sbt | 38 +- .../src/main/resources/plugin.properties | 1 + .../src/main/scala/akka/Plugin.scala | 42 + project/AkkaBuild.scala | 126 +- project/AkkaDisciplinePlugin.scala | 65 +- project/AutomaticModuleName.scala | 9 +- project/CopyrightHeader.scala | 15 +- project/CopyrightHeaderForBoilerplate.scala | 9 +- project/CopyrightHeaderForBuild.scala | 9 +- project/CopyrightHeaderForJdk9.scala | 6 +- project/CopyrightHeaderForProtobuf.scala | 9 +- project/Dependencies.scala | 69 +- project/GitHub.scala | 5 +- project/JavaFormatter.scala | 19 +- project/MultiNode.scala | 4 +- project/ParadoxBrowse.scala | 16 +- project/ProjectFileIgnoreSupport.scala | 39 +- project/ScalaFixForJdk9Plugin.scala | 13 +- project/ScalafixForMultiNodePlugin.scala | 17 +- project/SigarLoader.scala | 12 +- project/TestExtras.scala | 23 +- project/ValidatePullRequest.scala | 77 +- project/VersionGenerator.scala | 9 +- project/build.properties | 2 +- project/plugins.sbt | 1 + 370 files changed, 4058 insertions(+), 1373 deletions(-) rename akka-actor-tests/src/test/{scala => scala-2.12}/akka/util/LineNumberSpec.scala (100%) rename akka-actor-tests/src/test/{scala => scala-2.12}/akka/util/TypedMultiMapSpec.scala (100%) create mode 100644 akka-actor-tests/src/test/scala-2.13/akka/util/LineNumberSpec.scala create mode 100644 akka-actor-tests/src/test/scala-2.13/akka/util/TypedMultiMapSpec.scala create mode 100644 akka-actor-tests/src/test/scala-3/akka/util/LineNumberSpec.scala create mode 100644 akka-actor/src/main/mima-filters/2.6.12.backwards.excludes/actorClassificationUnsubscriber.excludes create mode 100644 akka-actor/src/main/scala-2.12/akka/compat/PartialFunction.scala create mode 100644 akka-actor/src/main/scala-2.13/akka/compat/PartialFunction.scala create mode 100644 akka-actor/src/main/scala-3/akka/compat/Future.scala create mode 100644 akka-actor/src/main/scala-3/akka/compat/PartialFunction.scala create mode 100644 akka-actor/src/main/scala-3/akka/dispatch/internal/SameThreadExecutionContext.scala create mode 100644 akka-actor/src/main/scala-3/akka/util/ByteIterator.scala create mode 100644 akka-actor/src/main/scala-3/akka/util/ByteString.scala create mode 100644 akka-actor/src/main/scala-3/akka/util/ccompat/ccompatUsedUntil213.scala create mode 100644 akka-actor/src/main/scala-3/akka/util/ccompat/package.scala create mode 100644 plugins/serialversion-remover-plugin/src/main/resources/plugin.properties create mode 100644 plugins/serialversion-remover-plugin/src/main/scala/akka/Plugin.scala diff --git a/.gitignore b/.gitignore index 60b7296073..b89198cfd3 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,7 @@ .*.swp .DS_Store .bloop/ +.bsp/ .cache .classpath .codefellow diff --git a/akka-actor-testkit-typed/src/main/scala/akka/actor/testkit/typed/internal/ActorSystemStub.scala b/akka-actor-testkit-typed/src/main/scala/akka/actor/testkit/typed/internal/ActorSystemStub.scala index 444011b80a..5f54f65eba 100644 --- a/akka-actor-testkit-typed/src/main/scala/akka/actor/testkit/typed/internal/ActorSystemStub.scala +++ b/akka-actor-testkit-typed/src/main/scala/akka/actor/testkit/typed/internal/ActorSystemStub.scala @@ -9,7 +9,7 @@ import java.util.concurrent.{ CompletionStage, ThreadFactory } import scala.compat.java8.FutureConverters import scala.concurrent._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.ConfigFactory import org.slf4j.Logger import org.slf4j.LoggerFactory @@ -35,7 +35,7 @@ import akka.annotation.InternalApi /** * INTERNAL API */ -@silent +@nowarn @InternalApi private[akka] final class ActorSystemStub(val name: String) extends ActorSystem[Nothing] with ActorRef[Nothing] diff --git a/akka-actor-testkit-typed/src/test/scala/docs/akka/actor/testkit/typed/scaladsl/ScalaTestIntegrationExampleSpec.scala b/akka-actor-testkit-typed/src/test/scala/docs/akka/actor/testkit/typed/scaladsl/ScalaTestIntegrationExampleSpec.scala index 47d1798829..3c4bdf8cb1 100644 --- a/akka-actor-testkit-typed/src/test/scala/docs/akka/actor/testkit/typed/scaladsl/ScalaTestIntegrationExampleSpec.scala +++ b/akka-actor-testkit-typed/src/test/scala/docs/akka/actor/testkit/typed/scaladsl/ScalaTestIntegrationExampleSpec.scala @@ -4,7 +4,7 @@ package docs.akka.actor.testkit.typed.scaladsl -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import docs.akka.actor.testkit.typed.scaladsl.AsyncTestingExampleSpec.Echo //#log-capturing @@ -16,7 +16,7 @@ import org.scalatest.wordspec.AnyWordSpecLike //#scalatest-integration //#log-capturing -@silent +@nowarn //#scalatest-integration class ScalaTestIntegrationExampleSpec extends ScalaTestWithActorTestKit with AnyWordSpecLike { diff --git a/akka-actor-tests/src/test/java/akka/pattern/StatusReplyTest.java b/akka-actor-tests/src/test/java/akka/pattern/StatusReplyTest.java index 077c950f52..9a0ea47344 100644 --- a/akka-actor-tests/src/test/java/akka/pattern/StatusReplyTest.java +++ b/akka-actor-tests/src/test/java/akka/pattern/StatusReplyTest.java @@ -4,7 +4,7 @@ package akka.pattern; -import akka.actor.Actor; +import akka.actor.ActorRef; import akka.testkit.AkkaJUnitActorSystemResource; import akka.testkit.AkkaSpec; import akka.testkit.TestException; @@ -81,7 +81,7 @@ public class StatusReplyTest extends JUnitSuite { CompletionStage response = askWithStatus(probe.ref(), "request", Duration.ofSeconds(3)); probe.expectMsg("request"); - probe.lastSender().tell(StatusReply.success("woho"), Actor.noSender()); + probe.lastSender().tell(StatusReply.success("woho"), ActorRef.noSender()); Object result = response.toCompletableFuture().get(3, TimeUnit.SECONDS); assertEquals("woho", result); @@ -93,7 +93,7 @@ public class StatusReplyTest extends JUnitSuite { CompletionStage response = askWithStatus(probe.ref(), "request", Duration.ofSeconds(3)); probe.expectMsg("request"); - probe.lastSender().tell(StatusReply.error("boho"), Actor.noSender()); + probe.lastSender().tell(StatusReply.error("boho"), ActorRef.noSender()); try { Object result = response.toCompletableFuture().get(3, TimeUnit.SECONDS); @@ -110,7 +110,7 @@ public class StatusReplyTest extends JUnitSuite { CompletionStage response = askWithStatus(probe.ref(), "request", Duration.ofSeconds(3)); probe.expectMsg("request"); - probe.lastSender().tell(StatusReply.error(new TestException("boho")), Actor.noSender()); + probe.lastSender().tell(StatusReply.error(new TestException("boho")), ActorRef.noSender()); try { Object result = response.toCompletableFuture().get(3, TimeUnit.SECONDS); diff --git a/akka-actor-tests/src/test/scala/akka/util/LineNumberSpec.scala b/akka-actor-tests/src/test/scala-2.12/akka/util/LineNumberSpec.scala similarity index 100% rename from akka-actor-tests/src/test/scala/akka/util/LineNumberSpec.scala rename to akka-actor-tests/src/test/scala-2.12/akka/util/LineNumberSpec.scala diff --git a/akka-actor-tests/src/test/scala/akka/util/TypedMultiMapSpec.scala b/akka-actor-tests/src/test/scala-2.12/akka/util/TypedMultiMapSpec.scala similarity index 100% rename from akka-actor-tests/src/test/scala/akka/util/TypedMultiMapSpec.scala rename to akka-actor-tests/src/test/scala-2.12/akka/util/TypedMultiMapSpec.scala diff --git a/akka-actor-tests/src/test/scala-2.13/akka/util/LineNumberSpec.scala b/akka-actor-tests/src/test/scala-2.13/akka/util/LineNumberSpec.scala new file mode 100644 index 0000000000..6704612d6b --- /dev/null +++ b/akka-actor-tests/src/test/scala-2.13/akka/util/LineNumberSpec.scala @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2014-2021 Lightbend Inc. + */ + +package akka.util + +import akka.testkit.AkkaSpec +import akka.util.LineNumbers._ + +class LineNumberSpec extends AkkaSpec { + + "LineNumbers" when { + + "writing Scala" must { + import LineNumberSpecCodeForScala._ + + "work for small functions" in { + LineNumbers(oneline) should ===(SourceFileLines("LineNumberSpecCodeForScala.scala", 13, 13)) + } + + "work for larger functions" in { + val result = LineNumbers(twoline) + result should ===(SourceFileLines("LineNumberSpecCodeForScala.scala", 15, 15)) + } + + "work for partial functions" in { + LineNumbers(partial) should ===(SourceFileLines("LineNumberSpecCodeForScala.scala", 20, 22)) + } + + "work for `def`" in { + val result = LineNumbers(method("foo")) + result should ===(SourceFileLines("LineNumberSpecCodeForScala.scala", 26, 27)) + } + + } + + "writing Java" must { + val l = new LineNumberSpecCodeForJava + + "work for small functions" in { + // because how java Lambdas are implemented/designed + LineNumbers(l.f1()) should ===(SourceFileLines("LineNumberSpecCodeForJava.java", 20, 20)) + } + + "work for larger functions" in { + // because how java Lambdas are implemented/designed + LineNumbers(l.f2()) should ===(SourceFileLines("LineNumberSpecCodeForJava.java", 25, 26)) + } + + "work for anonymous classes" in { + LineNumbers(l.f3()) should ===(SourceFileLines("LineNumberSpecCodeForJava.java", 31, 36)) + } + + } + + } + +} diff --git a/akka-actor-tests/src/test/scala-2.13/akka/util/TypedMultiMapSpec.scala b/akka-actor-tests/src/test/scala-2.13/akka/util/TypedMultiMapSpec.scala new file mode 100644 index 0000000000..8f67be9231 --- /dev/null +++ b/akka-actor-tests/src/test/scala-2.13/akka/util/TypedMultiMapSpec.scala @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2015-2021 Lightbend Inc. + */ + +package akka.util + +import org.scalactic.TypeCheckedTripleEquals +import org.scalatest.matchers.should.Matchers +import org.scalatest.wordspec.AnyWordSpec + +object TypedMultiMapSpec { + trait AbstractKey { type Type } + final case class Key[T](t: T) extends AbstractKey { final override type Type = T } + final case class MyValue[T](t: T) + + type KV[K <: AbstractKey] = MyValue[K#Type] +} + +class TypedMultiMapSpec extends AnyWordSpec with Matchers with TypeCheckedTripleEquals { + import TypedMultiMapSpec._ + + "A TypedMultiMap" must { + + "retain and remove values for the same key" in { + val m1 = TypedMultiMap.empty[AbstractKey, KV] + val m2 = m1.inserted(Key(1))(MyValue(42)) + m2.get(Key(1)) should ===(Set(MyValue(42))) + m2.removed(Key(1))(MyValue(42)).get(Key(1)) should ===(Set.empty[MyValue[Int]]) + val m3 = m2.inserted(Key(1))(MyValue(43)) + m3.get(Key(1)) should ===(Set(MyValue(42), MyValue(43))) + m3.removed(Key(1))(MyValue(42)).get(Key(1)) should ===(Set(MyValue(43))) + } + + "retain and remove values for multiple keys" in { + val m1 = TypedMultiMap.empty[AbstractKey, KV] + val m2 = m1.inserted(Key(1))(MyValue(42)).inserted(Key(2))(MyValue(43)) + m2.get(Key(1)) should ===(Set(MyValue(42))) + m2.removed(Key(1))(MyValue(42)).get(Key(1)) should ===(Set.empty[MyValue[Int]]) + m2.get(Key(2)) should ===(Set(MyValue(43))) + m2.removed(Key(1))(MyValue(42)).get(Key(2)) should ===(Set(MyValue(43))) + } + + "remove a value from all keys" in { + val m1 = TypedMultiMap.empty[AbstractKey, KV] + val m2 = m1.inserted(Key(1))(MyValue(42)).inserted(Key(2))(MyValue(43)).inserted(Key(2))(MyValue(42)) + val m3 = m2.valueRemoved(MyValue(42)) + m3.get(Key(1)) should ===(Set.empty[MyValue[Int]]) + m3.get(Key(2)) should ===(Set(MyValue(43))) + m3.keySet should ===(Set[AbstractKey](Key(2))) + } + + "remove all values from a key" in { + val m1 = TypedMultiMap.empty[AbstractKey, KV] + val m2 = m1.inserted(Key(1))(MyValue(42)).inserted(Key(2))(MyValue(43)).inserted(Key(2))(MyValue(42)) + val m3 = m2.keyRemoved(Key(1)) + m3.get(Key(1)) should ===(Set.empty[MyValue[Int]]) + m3.get(Key(2)) should ===(Set(MyValue(42), MyValue(43))) + m3.keySet should ===(Set[AbstractKey](Key(2))) + } + + "reject invalid insertions" in { + "TypedMultiMap.empty[AbstractKey, KV].inserted(Key(1))(MyValue(42L))" shouldNot compile + } + + "reject invalid removals" in { + "TypedMultiMap.empty[AbstractKey, KV].removed(Key(1))(MyValue(42L))" shouldNot compile + } + + } + +} diff --git a/akka-actor-tests/src/test/scala-3/akka/util/LineNumberSpec.scala b/akka-actor-tests/src/test/scala-3/akka/util/LineNumberSpec.scala new file mode 100644 index 0000000000..b47d9934f0 --- /dev/null +++ b/akka-actor-tests/src/test/scala-3/akka/util/LineNumberSpec.scala @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2014-2021 Lightbend Inc. + */ + +package akka.util + +import akka.testkit.AkkaSpec +import akka.util.LineNumbers._ + +class LineNumberSpec extends AkkaSpec { + + "LineNumbers" when { + + "writing Scala" must { + import LineNumberSpecCodeForScala._ + + "work for small functions" in { + LineNumbers(oneline) should ===(SourceFileLines("LineNumberSpecCodeForScala.scala", 13, 13)) + } + + "work for larger functions" in { + val result = LineNumbers(twoline) + result should ===(SourceFileLines("LineNumberSpecCodeForScala.scala", 15, 17)) + } + + "work for partial functions" in { + LineNumbers(partial) should ===(SourceFileLines("LineNumberSpecCodeForScala.scala", 21, 22)) + } + + "work for `def`" in { + val result = LineNumbers(method("foo")) + result should ===(SourceFileLines("LineNumberSpecCodeForScala.scala", 25, 27)) + } + + } + + "writing Java" must { + val l = new LineNumberSpecCodeForJava + + "work for small functions" in { + // because how java Lambdas are implemented/designed + LineNumbers(l.f1()) should ===(SourceFileLines("LineNumberSpecCodeForJava.java", 20, 20)) + } + + "work for larger functions" in { + // because how java Lambdas are implemented/designed + LineNumbers(l.f2()) should ===(SourceFileLines("LineNumberSpecCodeForJava.java", 25, 26)) + } + + "work for anonymous classes" in { + LineNumbers(l.f3()) should ===(SourceFileLines("LineNumberSpecCodeForJava.java", 31, 36)) + } + + } + + } + +} diff --git a/akka-actor-tests/src/test/scala/akka/actor/ActorLifeCycleSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/ActorLifeCycleSpec.scala index 5bb752a11f..f2e14765cf 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/ActorLifeCycleSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/ActorLifeCycleSpec.scala @@ -9,7 +9,9 @@ import java.util.concurrent.CountDownLatch import java.util.concurrent.atomic._ import scala.concurrent.{ Await, Future } + import org.scalatest.BeforeAndAfterEach + import akka.actor.Actor._ import akka.pattern.ask import akka.testkit._ @@ -153,6 +155,7 @@ class ActorLifeCycleSpec extends AkkaSpec with BeforeAndAfterEach with ImplicitS "have a non null context after termination" in { class StopBeforeFutureFinishes(val latch: CountDownLatch) extends Actor { import context.dispatcher + import akka.pattern._ override def receive: Receive = { diff --git a/akka-actor-tests/src/test/scala/akka/actor/ActorPathSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/ActorPathSpec.scala index 9bcd47ba83..b8c5da155d 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/ActorPathSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/ActorPathSpec.scala @@ -92,11 +92,11 @@ class ActorPathSpec extends AnyWordSpec with Matchers { "detect valid and invalid chars in host names when not using AddressFromURIString, e.g. docker host given name" in { Seq( - Address("akka", "sys", Some("valid"), Some(0)), - Address("akka", "sys", Some("is_valid.org"), Some(0)), - Address("akka", "sys", Some("fu.is_valid.org"), Some(0))).forall(_.hasInvalidHostCharacters) shouldBe false + Address("akka", "sys", "valid", 0), + Address("akka", "sys", "is_valid.org", 0), + Address("akka", "sys", "fu.is_valid.org", 0)).forall(_.hasInvalidHostCharacters) shouldBe false - Seq(Address("akka", "sys", Some("in_valid"), Some(0)), Address("akka", "sys", Some("invalid._org"), Some(0))) + Seq(Address("akka", "sys", "in_valid", 0), Address("akka", "sys", "invalid._org", 0)) .forall(_.hasInvalidHostCharacters) shouldBe true intercept[MalformedURLException](AddressFromURIString("akka://sys@in_valid:5001")) @@ -104,19 +104,19 @@ class ActorPathSpec extends AnyWordSpec with Matchers { "not fail fast if the check is called on valid chars in host names" in { Seq( - Address("akka", "sys", Some("localhost"), Some(0)), - Address("akka", "sys", Some("is_valid.org"), Some(0)), - Address("akka", "sys", Some("fu.is_valid.org"), Some(0))).foreach(_.checkHostCharacters()) + Address("akka", "sys", "localhost", 0), + Address("akka", "sys", "is_valid.org", 0), + Address("akka", "sys", "fu.is_valid.org", 0)).foreach(_.checkHostCharacters()) } "fail fast if the check is called when invalid chars are in host names" in { Seq( - Address("akka", "sys", Some("localhost"), Some(0)), - Address("akka", "sys", Some("is_valid.org"), Some(0)), - Address("akka", "sys", Some("fu.is_valid.org"), Some(0))).foreach(_.checkHostCharacters()) + Address("akka", "sys", "localhost", 0), + Address("akka", "sys", "is_valid.org", 0), + Address("akka", "sys", "fu.is_valid.org", 0)).foreach(_.checkHostCharacters()) - intercept[IllegalArgumentException](Address("akka", "sys", Some("in_valid"), Some(0)).checkHostCharacters()) - intercept[IllegalArgumentException](Address("akka", "sys", Some("invalid._org"), Some(0)).checkHostCharacters()) + intercept[IllegalArgumentException](Address("akka", "sys", "in_valid", 0).checkHostCharacters()) + intercept[IllegalArgumentException](Address("akka", "sys", "invalid._org", 0).checkHostCharacters()) } } } diff --git a/akka-actor-tests/src/test/scala/akka/actor/ActorSystemSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/ActorSystemSpec.scala index a4ec0325dc..62e18058ec 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/ActorSystemSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/ActorSystemSpec.scala @@ -11,7 +11,7 @@ import scala.concurrent.{ Await, Future } import scala.concurrent.duration._ import scala.language.postfixOps -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.{ Config, ConfigFactory } import akka.actor.setup.ActorSystemSetup @@ -64,7 +64,7 @@ object ActorSystemSpec { } } - @silent + @nowarn final case class FastActor(latch: TestLatch, testActor: ActorRef) extends Actor { val ref1 = context.actorOf(Props.empty) context.actorSelection(ref1.path.toString).tell(Identify(ref1), testActor) @@ -79,11 +79,11 @@ object ActorSystemSpec { extends MessageDispatcherConfigurator(_config, _prerequisites) { private val instance = new Dispatcher( this, - config.getString("id"), - config.getInt("throughput"), - config.getNanosDuration("throughput-deadline-time"), + this.config.getString("id"), + this.config.getInt("throughput"), + this.config.getNanosDuration("throughput-deadline-time"), configureExecutor(), - config.getMillisDuration("shutdown-timeout")) { + this.config.getMillisDuration("shutdown-timeout")) { val doneIt = new Switch override protected[akka] def registerForExecution( mbox: Mailbox, @@ -113,7 +113,7 @@ object ActorSystemSpec { } -@silent +@nowarn class ActorSystemSpec extends AkkaSpec(ActorSystemSpec.config) with ImplicitSender { import ActorSystemSpec.FastActor diff --git a/akka-actor-tests/src/test/scala/akka/actor/ActorWithStashSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/ActorWithStashSpec.scala index 81864585e5..e18cfb7b46 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/ActorWithStashSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/ActorWithStashSpec.scala @@ -7,7 +7,7 @@ package akka.actor import scala.concurrent.Await import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import language.postfixOps import org.scalatest.BeforeAndAfterEach @@ -97,7 +97,7 @@ object ActorWithStashSpec { } -@silent +@nowarn class ActorWithStashSpec extends AkkaSpec with DefaultTimeout with BeforeAndAfterEach { import ActorWithStashSpec._ diff --git a/akka-actor-tests/src/test/scala/akka/actor/DeathWatchSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/DeathWatchSpec.scala index b3c70e2f31..a66946a015 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/DeathWatchSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/DeathWatchSpec.scala @@ -7,7 +7,7 @@ package akka.actor import scala.concurrent.Await import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import language.postfixOps import akka.actor.Props.EmptyActor @@ -107,7 +107,7 @@ object DeathWatchSpec { } } -@silent +@nowarn trait DeathWatchSpec { this: AkkaSpec with ImplicitSender with DefaultTimeout => import DeathWatchSpec._ diff --git a/akka-actor-tests/src/test/scala/akka/actor/ExtensionSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/ExtensionSpec.scala index b1b8da6fce..d7f984b4e3 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/ExtensionSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/ExtensionSpec.scala @@ -8,12 +8,13 @@ import java.util.concurrent.atomic.AtomicInteger import scala.util.control.NoStackTrace -import akka.testkit.EventFilter -import akka.testkit.TestKit._ import com.typesafe.config.ConfigFactory import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpec +import akka.testkit.EventFilter +import akka.testkit.TestKit._ + object TestExtension extends ExtensionId[TestExtension] with ExtensionIdProvider { def lookup = this def createExtension(s: ExtendedActorSystem) = new TestExtension(s) diff --git a/akka-actor-tests/src/test/scala/akka/actor/LocalActorRefProviderSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/LocalActorRefProviderSpec.scala index b099e04231..4be8ada28d 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/LocalActorRefProviderSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/LocalActorRefProviderSpec.scala @@ -10,7 +10,7 @@ import scala.concurrent.duration._ import scala.util.Failure import scala.util.Success -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import language.postfixOps import akka.testkit._ @@ -33,7 +33,7 @@ object LocalActorRefProviderSpec { """ } -@silent +@nowarn class LocalActorRefProviderSpec extends AkkaSpec(LocalActorRefProviderSpec.config) { "An LocalActorRefProvider" must { @@ -134,7 +134,7 @@ class LocalActorRefProviderSpec extends AkkaSpec(LocalActorRefProviderSpec.confi val actors = for (_ <- 1 to 4) yield Future(system.actorOf(Props(new Actor { def receive = { case _ => } }), address)) - val set = Set() ++ actors.map(a => + val set: Set[Any] = Set() ++ actors.map(a => Await.ready(a, timeout.duration).value match { case Some(Success(_: ActorRef)) => 1 case Some(Failure(_: InvalidActorNameException)) => 2 diff --git a/akka-actor-tests/src/test/scala/akka/actor/PropsCreationSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/PropsCreationSpec.scala index 64472efb05..de4ae6636c 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/PropsCreationSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/PropsCreationSpec.scala @@ -4,7 +4,7 @@ package akka.actor -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.testkit.AkkaSpec import akka.util.unused @@ -60,7 +60,7 @@ class PropsCreationSpec extends AkkaSpec(""" "Props Java API" must { "work with create(creator)" in { - @silent + @nowarn val p = Props.create(OneParamActorCreator) system.actorOf(p) } diff --git a/akka-actor-tests/src/test/scala/akka/actor/RestartStrategySpec.scala b/akka-actor-tests/src/test/scala/akka/actor/RestartStrategySpec.scala index 4658667123..7dda6795a8 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/RestartStrategySpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/RestartStrategySpec.scala @@ -9,7 +9,7 @@ import java.lang.Thread.sleep import scala.concurrent.Await import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import language.postfixOps import akka.pattern.ask @@ -19,7 +19,7 @@ import akka.testkit.EventFilter import akka.testkit.TestEvent._ import akka.testkit.TestLatch -@silent +@nowarn class RestartStrategySpec extends AkkaSpec with DefaultTimeout { override def atStartup(): Unit = { diff --git a/akka-actor-tests/src/test/scala/akka/actor/SchedulerSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/SchedulerSpec.scala index 776fcfa2e3..e49006513b 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/SchedulerSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/SchedulerSpec.scala @@ -15,7 +15,7 @@ import scala.util.control.NoStackTrace import scala.util.control.NonFatal import atomic.{ AtomicInteger, AtomicReference } -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.{ Config, ConfigFactory } import language.postfixOps import org.scalatest.BeforeAndAfterEach @@ -684,47 +684,48 @@ class LightArrayRevolverSchedulerSpec extends AkkaSpec(SchedulerSpec.testConfRev def reportFailure(t: Throwable): Unit = { t.printStackTrace() } } - @silent + @nowarn def withScheduler(start: Long = 0L, _startTick: Int = 0, config: Config = ConfigFactory.empty)( thunk: (Scheduler with Closeable, Driver) => Unit): Unit = { - import akka.actor.{ LightArrayRevolverScheduler => LARS } val lbq = new AtomicReference[LinkedBlockingQueue[Long]](new LinkedBlockingQueue[Long]) val prb = TestProbe() val tf = system.asInstanceOf[ActorSystemImpl].threadFactory - val sched = - new { @volatile var time = start } with LARS(config.withFallback(system.settings.config), log, tf) { - override protected def clock(): Long = { - // println(s"clock=$time") - time - } - override protected def getShutdownTimeout: FiniteDuration = (10 seconds).dilated - - override protected def waitNanos(ns: Long): Unit = { - // println(s"waiting $ns") - prb.ref ! ns - try time += (lbq.get match { - case q: LinkedBlockingQueue[Long] => q.take() - case _ => 0L - }) - catch { - case _: InterruptedException => Thread.currentThread.interrupt() - } - } - - override protected def startTick: Int = _startTick + @volatile var time: Long = start + val sched = new LightArrayRevolverScheduler(config.withFallback(system.settings.config), log, tf) { + override protected def clock(): Long = { + // println(s"clock=$time") + time } + + override protected def getShutdownTimeout: FiniteDuration = (10 seconds).dilated + + override protected def waitNanos(ns: Long): Unit = { + // println(s"waiting $ns") + prb.ref ! ns + try time += (lbq.get match { + case q: LinkedBlockingQueue[Long] => q.take() + case null => 0L + }) + catch { + case _: InterruptedException => Thread.currentThread.interrupt() + } + } + + override protected def startTick: Int = _startTick + } + val driver = new Driver { def wakeUp(d: FiniteDuration) = lbq.get match { case q: LinkedBlockingQueue[Long] => q.offer(d.toNanos) - case _ => + case null => } def expectWait(): FiniteDuration = probe.expectMsgType[Long].nanos def probe = prb def step = sched.TickDuration def close() = lbq.getAndSet(null) match { case q: LinkedBlockingQueue[Long] => q.offer(0L) - case _ => + case null => } } driver.expectWait() diff --git a/akka-actor-tests/src/test/scala/akka/actor/SupervisorHierarchySpec.scala b/akka-actor-tests/src/test/scala/akka/actor/SupervisorHierarchySpec.scala index 8222fff452..5176d6c60d 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/SupervisorHierarchySpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/SupervisorHierarchySpec.scala @@ -16,7 +16,7 @@ import scala.util.Random import scala.util.control.NoStackTrace import SupervisorStrategy.{ Directive, Restart, Resume, Stop } -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.{ Config, ConfigFactory } import language.postfixOps @@ -464,7 +464,7 @@ object SupervisorHierarchySpec { startWith(Idle, size * 1000) when(Idle) { - case Event(Init, _) => + case this.Event(Init, _) => hierarchy = context.watch( context.actorOf(Props(new Hierarchy(size, breadth, self, 0, random)).withDispatcher("hierarchy"), "head")) startSingleTimer("phase", StateTimeout, 5 seconds) @@ -472,7 +472,7 @@ object SupervisorHierarchySpec { } when(Init) { - case Event(Ready(ref), _) => + case this.Event(Ready(ref), _) => if (children contains ref) { testActor ! "children not unique" stop() @@ -481,7 +481,7 @@ object SupervisorHierarchySpec { if (children.size == size) goto(Stress) else stay() } - case Event(StateTimeout, _) => + case this.Event(StateTimeout, _) => testActor ! "did not get children list" stop() } @@ -514,10 +514,10 @@ object SupervisorHierarchySpec { var ignoreNotResumedLogs = true when(Stress) { - case Event(Work, _) if idleChildren.isEmpty => + case this.Event(Work, _) if idleChildren.isEmpty => context.system.scheduler.scheduleOnce(workSchedule, self, Work)(context.dispatcher) stay() - case Event(Work, x) if x > 0 => + case this.Event(Work, x) if x > 0 => nextJob.next() match { case Ping(ref) => ref ! "ping" case Fail(ref, dir) => @@ -538,15 +538,15 @@ object SupervisorHierarchySpec { if (idleChildren.nonEmpty) self ! Work else context.system.scheduler.scheduleOnce(workSchedule, self, Work)(context.dispatcher) stay().using(x - 1) - case Event(Work, _) => if (pingChildren.isEmpty) goto(LastPing) else goto(Finishing) - case Event(Died(path), _) => + case this.Event(Work, _) => if (pingChildren.isEmpty) goto(LastPing) else goto(Finishing) + case this.Event(Died(path), _) => bury(path) stay() - case Event("pong", _) => + case this.Event("pong", _) => pingChildren -= sender() idleChildren :+= sender() stay() - case Event(StateTimeout, todo) => + case this.Event(StateTimeout, todo) => log.info("dumping state due to StateTimeout") log.info( "children: " + children.size + " pinged: " + pingChildren.size + " idle: " + idleChildren.size + " work: " + todo) @@ -563,11 +563,11 @@ object SupervisorHierarchySpec { } when(Finishing) { - case Event("pong", _) => + case this.Event("pong", _) => pingChildren -= sender() idleChildren :+= sender() if (pingChildren.isEmpty) goto(LastPing) else stay() - case Event(Died(ref), _) => + case this.Event(Died(ref), _) => bury(ref) if (pingChildren.isEmpty) goto(LastPing) else stay() } @@ -580,11 +580,11 @@ object SupervisorHierarchySpec { } when(LastPing) { - case Event("pong", _) => + case this.Event("pong", _) => pingChildren -= sender() idleChildren :+= sender() if (pingChildren.isEmpty) goto(Stopping) else stay() - case Event(Died(ref), _) => + case this.Event(Died(ref), _) => bury(ref) if (pingChildren.isEmpty) goto(Stopping) else stay() } @@ -596,9 +596,9 @@ object SupervisorHierarchySpec { } when(Stopping, stateTimeout = 5.seconds.dilated) { - case Event(PongOfDeath, _) => stay() - case Event(Terminated(r), _) if r == hierarchy => - @silent + case this.Event(PongOfDeath, _) => stay() + case this.Event(Terminated(r), _) if r == hierarchy => + @nowarn val undead = children.filterNot(_.isTerminated) if (undead.nonEmpty) { log.info("undead:\n" + undead.mkString("\n")) @@ -623,7 +623,7 @@ object SupervisorHierarchySpec { testActor ! "stressTestSuccessful" stop() } - case Event(StateTimeout, _) => + case this.Event(StateTimeout, _) => errors :+= self -> ErrorLog("timeout while Stopping", Vector.empty) println(system.asInstanceOf[ActorSystemImpl].printTree) getErrors(hierarchy, 10) @@ -631,13 +631,13 @@ object SupervisorHierarchySpec { idleChildren.foreach(println) testActor ! "timeout in Stopping" stop() - case Event(e: ErrorLog, _) => + case this.Event(e: ErrorLog, _) => errors :+= sender() -> e goto(Failed) } when(GC, stateTimeout = 10 seconds) { - case Event(GCcheck(weak), _) => + case this.Event(GCcheck(weak), _) => val next = weak.filter(_.get ne null) if (next.nonEmpty) { context.system.scheduler.scheduleOnce(workSchedule, self, GCcheck(next))(context.dispatcher) @@ -647,7 +647,7 @@ object SupervisorHierarchySpec { testActor ! "stressTestSuccessful" stop() } - case Event(StateTimeout, _) => + case this.Event(StateTimeout, _) => testActor ! "timeout in GC" stop() } @@ -655,22 +655,22 @@ object SupervisorHierarchySpec { var errors = Vector.empty[(ActorRef, ErrorLog)] when(Failed, stateTimeout = 5.seconds.dilated) { - case Event(e: ErrorLog, _) => + case this.Event(e: ErrorLog, _) => if (!e.msg.startsWith("not resumed") || !ignoreNotResumedLogs) errors :+= sender() -> e stay() - case Event(Terminated(r), _) if r == hierarchy => + case this.Event(Terminated(r), _) if r == hierarchy => printErrors() testActor ! "stressTestFailed" stop() - case Event(StateTimeout, _) => + case this.Event(StateTimeout, _) => getErrors(hierarchy, 10) printErrors() testActor ! "timeout in Failed" stop() - case Event("pong", _) => stay() // don’t care? - case Event(Work, _) => stay() - case Event(Died(_), _) => stay() + case this.Event("pong", _) => stay() // don’t care? + case this.Event(Work, _) => stay() + case this.Event(Died(_), _) => stay() } def getErrors(target: ActorRef, depth: Int): Unit = { @@ -712,19 +712,19 @@ object SupervisorHierarchySpec { } whenUnhandled { - case Event(Ready(ref), _) => + case this.Event(Ready(ref), _) => activeChildren :+= ref children :+= ref idleChildren :+= ref stay() - case Event(e: ErrorLog, _) => + case this.Event(e: ErrorLog, _) => if (e.msg.startsWith("not resumed")) stay() else { errors :+= sender() -> e // don’t stop the hierarchy, that is going to happen all by itself and in the right order goto(Failed) } - case Event(StateTimeout, _) => + case this.Event(StateTimeout, _) => println("pingChildren:\n" + pingChildren.view.map(_.path.toString).toSeq.sorted.mkString("\n")) ignoreNotResumedLogs = false // make sure that we get the logs of the remaining pingChildren @@ -732,10 +732,10 @@ object SupervisorHierarchySpec { // this will ensure that the error logs get printed and we stop the test context.stop(hierarchy) goto(Failed) - case Event(Abort, _) => + case this.Event(Abort, _) => log.info("received Abort") goto(Failed) - case Event(msg, _) => + case this.Event(msg, _) => testActor ! ("received unexpected msg: " + msg) stop() } diff --git a/akka-actor-tests/src/test/scala/akka/actor/SupervisorMiscSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/SupervisorMiscSpec.scala index 8a3641dc9b..35e5c8cb63 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/SupervisorMiscSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/SupervisorMiscSpec.scala @@ -10,7 +10,7 @@ import scala.concurrent.Await import scala.concurrent.duration._ import scala.util.control.NonFatal -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import language.postfixOps import akka.pattern.ask @@ -29,7 +29,7 @@ object SupervisorMiscSpec { """ } -@silent +@nowarn class SupervisorMiscSpec extends AkkaSpec(SupervisorMiscSpec.config) with DefaultTimeout { "A Supervisor" must { diff --git a/akka-actor-tests/src/test/scala/akka/actor/TypedActorSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/TypedActorSpec.scala index b83d09bd90..3866b6efa5 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/TypedActorSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/TypedActorSpec.scala @@ -13,7 +13,7 @@ import scala.concurrent.{ Await, Future } import scala.concurrent.duration._ import scala.language.postfixOps -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import org.scalatest.{ BeforeAndAfterAll, BeforeAndAfterEach } import akka.actor.TypedActor._ @@ -26,7 +26,7 @@ import akka.util.Timeout object TypedActorSpec { - @silent + @nowarn val config = """ pooled-dispatcher { type = "akka.dispatch.BalancingDispatcherConfigurator" @@ -70,9 +70,9 @@ object TypedActorSpec { trait Foo { def pigdog(): String - @silent + @nowarn @throws(classOf[TimeoutException]) - def self = TypedActor.self[Foo] + def self = akka.actor.TypedActor.self[Foo] def futurePigdog(): Future[String] @@ -136,7 +136,7 @@ object TypedActorSpec { Future.successful(pigdog() + numbered) } - @silent + @nowarn def futureComposePigdogFrom(foo: Foo): Future[String] = { foo.futurePigdog(500 millis).map(_.toUpperCase) } @@ -192,8 +192,8 @@ object TypedActorSpec { with LifeCycles with Receiver { - @silent - private def ensureContextAvailable[T](f: => T): T = TypedActor.context match { + @nowarn + private def ensureContextAvailable[T](f: => T): T = akka.actor.TypedActor.context match { case null => throw new IllegalStateException("TypedActor.context is null!") case _ => f } @@ -247,7 +247,7 @@ object TypedActorSpec { } -@silent +@nowarn class TypedActorSpec extends AkkaSpec(TypedActorSpec.config) with BeforeAndAfterEach @@ -259,23 +259,25 @@ class TypedActorSpec def newFooBar: Foo = newFooBar(timeout.duration) def newFooBar(d: FiniteDuration): Foo = - TypedActor(system).typedActorOf(TypedProps[Bar](classOf[Foo], classOf[Bar]).withTimeout(Timeout(d))) + akka.actor.TypedActor(system).typedActorOf(TypedProps[Bar](classOf[Foo], classOf[Bar]).withTimeout(Timeout(d))) def newFooBar(dispatcher: String, d: FiniteDuration): Foo = - TypedActor(system).typedActorOf( - TypedProps[Bar](classOf[Foo], classOf[Bar]).withTimeout(Timeout(d)).withDispatcher(dispatcher)) + akka.actor + .TypedActor(system) + .typedActorOf(TypedProps[Bar](classOf[Foo], classOf[Bar]).withTimeout(Timeout(d)).withDispatcher(dispatcher)) def newStacked(): Stacked = - TypedActor(system).typedActorOf( - TypedProps[StackedImpl](classOf[Stacked], classOf[StackedImpl]).withTimeout(timeout)) + akka.actor + .TypedActor(system) + .typedActorOf(TypedProps[StackedImpl](classOf[Stacked], classOf[StackedImpl]).withTimeout(timeout)) - def mustStop(typedActor: AnyRef) = TypedActor(system).stop(typedActor) should ===(true) + def mustStop(typedActor: AnyRef) = akka.actor.TypedActor(system).stop(typedActor) should ===(true) "TypedActors" must { "be able to instantiate" in { val t = newFooBar - TypedActor(system).isTypedActor(t) should ===(true) + akka.actor.TypedActor(system).isTypedActor(t) should ===(true) mustStop(t) } @@ -285,13 +287,13 @@ class TypedActorSpec } "not stop non-started ones" in { - TypedActor(system).stop(null) should ===(false) + akka.actor.TypedActor(system).stop(null) should ===(false) } "throw an IllegalStateException when TypedActor.self is called in the wrong scope" in { filterEvents(EventFilter[IllegalStateException]("Calling")) { intercept[IllegalStateException] { - TypedActor.self[Foo] + akka.actor.TypedActor.self[Foo] }.getMessage should ===("Calling TypedActor.self outside of a TypedActor implementation method!") } } @@ -304,7 +306,7 @@ class TypedActorSpec "be able to call toString" in { val t = newFooBar - t.toString should ===(TypedActor(system).getActorRefFor(t).toString) + t.toString should ===(akka.actor.TypedActor(system).getActorRefFor(t).toString) mustStop(t) } @@ -317,7 +319,7 @@ class TypedActorSpec "be able to call hashCode" in { val t = newFooBar - t.hashCode should ===(TypedActor(system).getActorRefFor(t).hashCode) + t.hashCode should ===(akka.actor.TypedActor(system).getActorRefFor(t).hashCode) mustStop(t) } @@ -398,7 +400,7 @@ class TypedActorSpec case e: IllegalStateException if e.getMessage == "expected" => SupervisorStrategy.Resume } def receive = { - case p: TypedProps[_] => context.sender() ! TypedActor(context).typedActorOf(p) + case p: TypedProps[_] => context.sender() ! akka.actor.TypedActor(context).typedActorOf(p) } })) val t = Await.result( @@ -431,7 +433,7 @@ class TypedActorSpec t.optionPigdog() should ===(Some("Pigdog")) mustStop(t) - val ta: F = TypedActor(system).typedActorOf(TypedProps[FI]()) + val ta: F = akka.actor.TypedActor(system).typedActorOf(TypedProps[FI]()) intercept[IllegalStateException] { ta.f(true) }.getMessage should ===("expected") ta.f(false) should ===(1) @@ -447,7 +449,7 @@ class TypedActorSpec } "be able to support implementation only typed actors" in within(timeout.duration) { - val t: Foo = TypedActor(system).typedActorOf(TypedProps[Bar]()) + val t: Foo = akka.actor.TypedActor(system).typedActorOf(TypedProps[Bar]()) val f = t.futurePigdog(200 millis) val f2 = t.futurePigdog(Duration.Zero) f2.isCompleted should ===(false) @@ -457,7 +459,7 @@ class TypedActorSpec } "be able to support implementation only typed actors with complex interfaces" in { - val t: Stackable1 with Stackable2 = TypedActor(system).typedActorOf(TypedProps[StackedImpl]()) + val t: Stackable1 with Stackable2 = akka.actor.TypedActor(system).typedActorOf(TypedProps[StackedImpl]()) t.stackable1 should ===("foo") t.stackable2 should ===("bar") mustStop(t) @@ -477,7 +479,7 @@ class TypedActorSpec "be able to serialize and deserialize invocations" in { import java.io._ JavaSerializer.currentSystem.withValue(system.asInstanceOf[ExtendedActorSystem]) { - val m = TypedActor.MethodCall(classOf[Foo].getDeclaredMethod("pigdog"), Array[AnyRef]()) + val m = akka.actor.TypedActor.MethodCall(classOf[Foo].getDeclaredMethod("pigdog"), Array[AnyRef]()) val baos = new ByteArrayOutputStream(8192 * 4) val out = new ObjectOutputStream(baos) @@ -486,7 +488,7 @@ class TypedActorSpec val in = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray)) - val mNew = in.readObject().asInstanceOf[TypedActor.MethodCall] + val mNew = in.readObject().asInstanceOf[akka.actor.TypedActor.MethodCall] mNew.method should ===(m.method) } @@ -496,7 +498,7 @@ class TypedActorSpec import java.io._ val someFoo: Foo = new Bar JavaSerializer.currentSystem.withValue(system.asInstanceOf[ExtendedActorSystem]) { - val m = TypedActor.MethodCall( + val m = akka.actor.TypedActor.MethodCall( classOf[Foo].getDeclaredMethod( "testMethodCallSerialization", Array[Class[_]](classOf[Foo], classOf[String], classOf[Int], classOf[WithStringSerializedClass]): _*), @@ -509,7 +511,7 @@ class TypedActorSpec val in = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray)) - val mNew = in.readObject().asInstanceOf[TypedActor.MethodCall] + val mNew = in.readObject().asInstanceOf[akka.actor.TypedActor.MethodCall] mNew.method should ===(m.method) mNew.parameters should have size 4 @@ -550,7 +552,7 @@ class TypedActorSpec "be able to override lifecycle callbacks" in { val latch = new CountDownLatch(16) - val ta = TypedActor(system) + val ta = akka.actor.TypedActor(system) val t: LifeCycles = ta.typedActorOf(TypedProps[LifeCyclesImpl](classOf[LifeCycles], new LifeCyclesImpl(latch))) EventFilter[IllegalStateException]("Crash!", occurrences = 1).intercept { t.crash() @@ -571,7 +573,7 @@ class TypedActorSpec } } -@silent +@nowarn class TypedActorRouterSpec extends AkkaSpec(TypedActorSpec.config) with BeforeAndAfterEach @@ -583,9 +585,9 @@ class TypedActorRouterSpec def newFooBar: Foo = newFooBar(timeout.duration) def newFooBar(d: FiniteDuration): Foo = - TypedActor(system).typedActorOf(TypedProps[Bar](classOf[Foo], classOf[Bar]).withTimeout(Timeout(d))) + akka.actor.TypedActor(system).typedActorOf(TypedProps[Bar](classOf[Foo], classOf[Bar]).withTimeout(Timeout(d))) - def mustStop(typedActor: AnyRef) = TypedActor(system).stop(typedActor) should ===(true) + def mustStop(typedActor: AnyRef) = akka.actor.TypedActor(system).stop(typedActor) should ===(true) "TypedActor Router" must { @@ -595,15 +597,15 @@ class TypedActorRouterSpec val t3 = newFooBar val t4 = newFooBar val routees = List(t1, t2, t3, t4).map { t => - TypedActor(system).getActorRefFor(t).path.toStringWithoutAddress + akka.actor.TypedActor(system).getActorRefFor(t).path.toStringWithoutAddress } - TypedActor(system).isTypedActor(t1) should ===(true) - TypedActor(system).isTypedActor(t2) should ===(true) + akka.actor.TypedActor(system).isTypedActor(t1) should ===(true) + akka.actor.TypedActor(system).isTypedActor(t2) should ===(true) val router = system.actorOf(RoundRobinGroup(routees).props(), "router") - val typedRouter = TypedActor(system).typedActorOf[Foo, Foo](TypedProps[Foo](), router) + val typedRouter = akka.actor.TypedActor(system).typedActorOf[Foo, Foo](TypedProps[Foo](), router) info("got = " + typedRouter.optionPigdog()) info("got = " + typedRouter.optionPigdog()) diff --git a/akka-actor-tests/src/test/scala/akka/actor/dispatch/ActorModelSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/dispatch/ActorModelSpec.scala index 2175273f23..69a0dfb9ca 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/dispatch/ActorModelSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/dispatch/ActorModelSpec.scala @@ -12,7 +12,7 @@ import scala.annotation.tailrec import scala.concurrent.{ Await, Future } import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.Config import language.postfixOps import org.scalatest.Assertions._ @@ -602,7 +602,7 @@ class DispatcherModelSpec extends ActorModelSpec(DispatcherModelSpec.config) { } } -@silent +@nowarn object BalancingDispatcherModelSpec { import ActorModelSpec._ @@ -641,7 +641,7 @@ object BalancingDispatcherModelSpec { } } -@silent +@nowarn class BalancingDispatcherModelSpec extends ActorModelSpec(BalancingDispatcherModelSpec.config) { import ActorModelSpec._ diff --git a/akka-actor-tests/src/test/scala/akka/actor/dispatch/DispatcherActorSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/dispatch/DispatcherActorSpec.scala index 9e888cd997..8f8d16bff6 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/dispatch/DispatcherActorSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/dispatch/DispatcherActorSpec.scala @@ -12,7 +12,7 @@ import scala.concurrent.duration._ import language.postfixOps -import akka.actor.{ Actor, Props } +import akka.actor.{ actorRef2Scala, Actor, Props } import akka.pattern.ask import akka.testkit.AkkaSpec import akka.testkit.DefaultTimeout diff --git a/akka-actor-tests/src/test/scala/akka/actor/dispatch/PinnedActorSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/dispatch/PinnedActorSpec.scala index 65dbee95b5..b319f7c1c0 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/dispatch/PinnedActorSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/dispatch/PinnedActorSpec.scala @@ -10,7 +10,7 @@ import scala.concurrent.Await import org.scalatest.BeforeAndAfterEach -import akka.actor.{ Actor, Props } +import akka.actor.{ actorRef2Scala, Actor, Props } import akka.pattern.ask import akka.testkit._ import akka.testkit.AkkaSpec diff --git a/akka-actor-tests/src/test/scala/akka/actor/dungeon/DispatchSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/dungeon/DispatchSpec.scala index e32feedb5a..296fb9dc9a 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/dungeon/DispatchSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/dungeon/DispatchSpec.scala @@ -6,6 +6,7 @@ package akka.actor.dungeon import akka.actor.Actor import akka.actor.Props +import akka.actor.actorRef2Scala import akka.testkit._ object DispatchSpec { diff --git a/akka-actor-tests/src/test/scala/akka/actor/setup/ActorSystemSetupSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/setup/ActorSystemSetupSpec.scala index 0bd6ab74ab..a92b1ed139 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/setup/ActorSystemSetupSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/setup/ActorSystemSetupSpec.scala @@ -22,8 +22,8 @@ class ActorSystemSetupSpec extends AnyWordSpec with Matchers { val setup = DummySetup("Al Dente") val setups = ActorSystemSetup().withSetup(setup) - setups.get[DummySetup] should ===(Some(setup)) - setups.get[DummySetup2] should ===(None) + (setups.get[DummySetup]: Option[Setup]) should ===(Some(setup)) + (setups.get[DummySetup2]: Option[Setup]) should ===(None) } "replace setup if already defined" in { @@ -31,7 +31,7 @@ class ActorSystemSetupSpec extends AnyWordSpec with Matchers { val setup2 = DummySetup("Earl E. Bird") val setups = ActorSystemSetup().withSetup(setup1).withSetup(setup2) - setups.get[DummySetup] should ===(Some(setup2)) + (setups.get[DummySetup]: Option[Setup]) should ===(Some(setup2)) } "provide a fluent creation alternative" in { @@ -40,8 +40,8 @@ class ActorSystemSetupSpec extends AnyWordSpec with Matchers { val c = DummySetup2("Amanda Reckonwith") val setups = a and b and c - setups.get[DummySetup] should ===(Some(b)) - setups.get[DummySetup2] should ===(Some(c)) + (setups.get[DummySetup]: Option[Setup]) should ===(Some(b)) + (setups.get[DummySetup2]: Option[Setup]) should ===(Some(c)) } "be created with a set of setups" in { @@ -60,7 +60,7 @@ class ActorSystemSetupSpec extends AnyWordSpec with Matchers { val setup = DummySetup("Tad Moore") system = ActorSystem("name", ActorSystemSetup(setup)) - system.settings.setup.get[DummySetup] should ===(Some(setup)) + (system.settings.setup.get[DummySetup]: Option[Setup]) should ===(Some(setup)) } finally { TestKit.shutdownActorSystem(system) diff --git a/akka-actor-tests/src/test/scala/akka/dispatch/ControlAwareDispatcherSpec.scala b/akka-actor-tests/src/test/scala/akka/dispatch/ControlAwareDispatcherSpec.scala index b04706eb90..aa5e3f0ef3 100644 --- a/akka-actor-tests/src/test/scala/akka/dispatch/ControlAwareDispatcherSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/dispatch/ControlAwareDispatcherSpec.scala @@ -4,7 +4,7 @@ package akka.dispatch -import akka.actor.{ Actor, Props } +import akka.actor.{ actorRef2Scala, Actor, Props } import akka.testkit.{ AkkaSpec, DefaultTimeout } object ControlAwareDispatcherSpec { diff --git a/akka-actor-tests/src/test/scala/akka/dispatch/ExecutionContextSpec.scala b/akka-actor-tests/src/test/scala/akka/dispatch/ExecutionContextSpec.scala index 140c884aa8..7a44d1640b 100644 --- a/akka-actor-tests/src/test/scala/akka/dispatch/ExecutionContextSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/dispatch/ExecutionContextSpec.scala @@ -13,6 +13,7 @@ import scala.concurrent.duration._ import akka.actor.Actor import akka.actor.Props +import akka.actor.actorRef2Scala import akka.testkit.{ AkkaSpec, DefaultTimeout, TestLatch } import akka.testkit.CallingThreadDispatcher import akka.testkit.TestActorRef diff --git a/akka-actor-tests/src/test/scala/akka/dispatch/ForkJoinPoolStarvationSpec.scala b/akka-actor-tests/src/test/scala/akka/dispatch/ForkJoinPoolStarvationSpec.scala index 3e2b172193..b96b01d724 100644 --- a/akka-actor-tests/src/test/scala/akka/dispatch/ForkJoinPoolStarvationSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/dispatch/ForkJoinPoolStarvationSpec.scala @@ -6,7 +6,7 @@ package akka.dispatch import com.typesafe.config.ConfigFactory -import akka.actor.{ Actor, Props } +import akka.actor.{ actorRef2Scala, Actor, Props } import akka.testkit.{ AkkaSpec, ImplicitSender } object ForkJoinPoolStarvationSpec { diff --git a/akka-actor-tests/src/test/scala/akka/dispatch/PriorityDispatcherSpec.scala b/akka-actor-tests/src/test/scala/akka/dispatch/PriorityDispatcherSpec.scala index c6a30d0dac..1726ccf20d 100644 --- a/akka-actor-tests/src/test/scala/akka/dispatch/PriorityDispatcherSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/dispatch/PriorityDispatcherSpec.scala @@ -9,7 +9,7 @@ import scala.concurrent.duration._ import com.typesafe.config.Config import language.postfixOps -import akka.actor.{ Actor, ActorSystem, Props } +import akka.actor.{ actorRef2Scala, Actor, ActorSystem, Props } import akka.testkit.{ AkkaSpec, DefaultTimeout } import akka.util.unused @@ -83,7 +83,7 @@ class PriorityDispatcherSpec extends AkkaSpec(PriorityDispatcherSpec.config) wit })) - expectMsgType[List[Int]] should ===(msgs) + (expectMsgType[List[Int]]: List[Int]) should ===(msgs) } } diff --git a/akka-actor-tests/src/test/scala/akka/dispatch/StablePriorityDispatcherSpec.scala b/akka-actor-tests/src/test/scala/akka/dispatch/StablePriorityDispatcherSpec.scala index 47aa9448f6..070f661320 100644 --- a/akka-actor-tests/src/test/scala/akka/dispatch/StablePriorityDispatcherSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/dispatch/StablePriorityDispatcherSpec.scala @@ -9,7 +9,7 @@ import scala.concurrent.duration._ import com.typesafe.config.Config import language.postfixOps -import akka.actor.{ Actor, ActorSystem, Props } +import akka.actor.{ actorRef2Scala, Actor, ActorSystem, Props } import akka.testkit.{ AkkaSpec, DefaultTimeout } import akka.util.unused @@ -90,7 +90,7 @@ class StablePriorityDispatcherSpec extends AkkaSpec(StablePriorityDispatcherSpec // should come out in the same order in which they were sent. val lo = (1 to 100) toList val hi = shuffled.filter { _ > 100 } - expectMsgType[List[Int]] should ===(lo ++ hi) + (expectMsgType[List[Int]]: List[Int]) should ===(lo ++ hi) } } } diff --git a/akka-actor-tests/src/test/scala/akka/event/AddressTerminatedTopicBenchSpec.scala b/akka-actor-tests/src/test/scala/akka/event/AddressTerminatedTopicBenchSpec.scala index 69c621f7fb..f25482e9d7 100644 --- a/akka-actor-tests/src/test/scala/akka/event/AddressTerminatedTopicBenchSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/event/AddressTerminatedTopicBenchSpec.scala @@ -10,6 +10,7 @@ import akka.actor.Actor import akka.actor.ActorRef import akka.actor.ActorSystem import akka.actor.Props +import akka.actor.actorRef2Scala import akka.testkit._ object AddressTerminatedTopicBenchSpec { diff --git a/akka-actor-tests/src/test/scala/akka/event/EventBusSpec.scala b/akka-actor-tests/src/test/scala/akka/event/EventBusSpec.scala index 41210cf757..566ff1fa24 100644 --- a/akka-actor-tests/src/test/scala/akka/event/EventBusSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/event/EventBusSpec.scala @@ -10,7 +10,7 @@ import com.typesafe.config.{ Config, ConfigFactory } import language.postfixOps import org.scalatest.BeforeAndAfterEach -import akka.actor.{ Actor, ActorRef, ActorSystem, PoisonPill, Props } +import akka.actor.{ actorRef2Scala, Actor, ActorRef, ActorSystem, PoisonPill, Props } import akka.japi.Procedure import akka.testkit._ @@ -29,19 +29,19 @@ abstract class EventBusSpec(busName: String, conf: Config = ConfigFactory.empty( def createNewEventBus(): BusType - def createEvents(numberOfEvents: Int): Iterable[BusType#Event] + final val bus = createNewEventBus() - def createSubscriber(pipeTo: ActorRef): BusType#Subscriber + def createEvents(numberOfEvents: Int): Iterable[bus.Event] - def classifierFor(event: BusType#Event): BusType#Classifier + def createSubscriber(pipeTo: ActorRef): bus.Subscriber - def disposeSubscriber(system: ActorSystem, subscriber: BusType#Subscriber): Unit + def classifierFor(event: bus.Event): bus.Classifier - lazy val bus = createNewEventBus() + def disposeSubscriber(system: ActorSystem, subscriber: bus.Subscriber): Unit busName must { def createNewSubscriber() = createSubscriber(testActor).asInstanceOf[bus.Subscriber] - def getClassifierFor(event: BusType#Event) = classifierFor(event).asInstanceOf[bus.Classifier] + def getClassifierFor(event: bus.Event) = classifierFor(event).asInstanceOf[bus.Classifier] def createNewEvents(numberOfEvents: Int): Iterable[bus.Event] = createEvents(numberOfEvents).asInstanceOf[Iterable[bus.Event]] diff --git a/akka-actor-tests/src/test/scala/akka/event/EventStreamSpec.scala b/akka-actor-tests/src/test/scala/akka/event/EventStreamSpec.scala index e522a406c5..374eeb2089 100644 --- a/akka-actor-tests/src/test/scala/akka/event/EventStreamSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/event/EventStreamSpec.scala @@ -176,11 +176,11 @@ class EventStreamSpec extends AkkaSpec(EventStreamSpec.config) { es.subscribe(a4.ref, classOf[CCATBT]) should ===(true) es.publish(tm1) es.publish(tm2) - a1.expectMsgType[AT] should ===(tm2) - a2.expectMsgType[BT] should ===(tm2) - a3.expectMsgType[CC] should ===(tm1) - a3.expectMsgType[CC] should ===(tm2) - a4.expectMsgType[CCATBT] should ===(tm2) + (a1.expectMsgType[AT]: AT) should ===(tm2) + (a2.expectMsgType[BT]: BT) should ===(tm2) + (a3.expectMsgType[CC]: CC) should ===(tm1) + (a3.expectMsgType[CC]: CC) should ===(tm2) + (a4.expectMsgType[CCATBT]: CCATBT) should ===(tm2) es.unsubscribe(a1.ref, classOf[AT]) should ===(true) es.unsubscribe(a2.ref, classOf[BT]) should ===(true) es.unsubscribe(a3.ref, classOf[CC]) should ===(true) @@ -200,10 +200,10 @@ class EventStreamSpec extends AkkaSpec(EventStreamSpec.config) { es.unsubscribe(a3.ref, classOf[CC]) should ===(true) es.publish(tm1) es.publish(tm2) - a1.expectMsgType[AT] should ===(tm2) - a2.expectMsgType[BT] should ===(tm2) + (a1.expectMsgType[AT]: AT) should ===(tm2) + (a2.expectMsgType[BT]: BT) should ===(tm2) a3.expectNoMessage(1 second) - a4.expectMsgType[CCATBT] should ===(tm2) + (a4.expectMsgType[CCATBT]: CCATBT) should ===(tm2) es.unsubscribe(a1.ref, classOf[AT]) should ===(true) es.unsubscribe(a2.ref, classOf[BT]) should ===(true) es.unsubscribe(a4.ref, classOf[CCATBT]) should ===(true) @@ -222,10 +222,10 @@ class EventStreamSpec extends AkkaSpec(EventStreamSpec.config) { es.unsubscribe(a3.ref) es.publish(tm1) es.publish(tm2) - a1.expectMsgType[AT] should ===(tm2) - a2.expectMsgType[BT] should ===(tm2) + (a1.expectMsgType[AT]: AT) should ===(tm2) + (a2.expectMsgType[BT]: BT) should ===(tm2) a3.expectNoMessage(1 second) - a4.expectMsgType[CCATBT] should ===(tm2) + (a4.expectMsgType[CCATBT]: CCATBT) should ===(tm2) es.unsubscribe(a1.ref, classOf[AT]) should ===(true) es.unsubscribe(a2.ref, classOf[BT]) should ===(true) es.unsubscribe(a4.ref, classOf[CCATBT]) should ===(true) @@ -241,8 +241,8 @@ class EventStreamSpec extends AkkaSpec(EventStreamSpec.config) { es.subscribe(a2.ref, classOf[BT]) should ===(true) es.publish(tm1) es.publish(tm2) - a1.expectMsgType[AT] should ===(tm2) - a2.expectMsgType[BT] should ===(tm2) + (a1.expectMsgType[AT]: AT) should ===(tm2) + (a2.expectMsgType[BT]: BT) should ===(tm2) es.unsubscribe(a1.ref, classOf[AT]) should ===(true) es.unsubscribe(a2.ref, classOf[BT]) should ===(true) } @@ -261,9 +261,9 @@ class EventStreamSpec extends AkkaSpec(EventStreamSpec.config) { es.unsubscribe(a3.ref, classOf[CCATBT]) should ===(true) es.publish(tm1) es.publish(tm2) - a1.expectMsgType[AT] should ===(tm2) - a2.expectMsgType[BT] should ===(tm2) - a3.expectMsgType[CC] should ===(tm1) + (a1.expectMsgType[AT]: AT) should ===(tm2) + (a2.expectMsgType[BT]: BT) should ===(tm2) + (a3.expectMsgType[CC]: CC) should ===(tm1) es.unsubscribe(a1.ref, classOf[AT]) should ===(true) es.unsubscribe(a2.ref, classOf[BT]) should ===(true) es.unsubscribe(a3.ref, classOf[CC]) should ===(true) @@ -276,12 +276,12 @@ class EventStreamSpec extends AkkaSpec(EventStreamSpec.config) { es.subscribe(a1.ref, classOf[AT]) should ===(true) es.publish(tm1) - a1.expectMsgType[AT] should ===(tm1) + (a1.expectMsgType[AT]: AT) should ===(tm1) a2.expectNoMessage(1 second) es.subscribe(a2.ref, classOf[BTT]) should ===(true) es.publish(tm1) - a1.expectMsgType[AT] should ===(tm1) - a2.expectMsgType[BTT] should ===(tm1) + (a1.expectMsgType[AT]: AT) should ===(tm1) + (a2.expectMsgType[BTT]: BTT) should ===(tm1) es.unsubscribe(a1.ref, classOf[AT]) should ===(true) es.unsubscribe(a2.ref, classOf[BTT]) should ===(true) } diff --git a/akka-actor-tests/src/test/scala/akka/event/jul/JavaLoggerSpec.scala b/akka-actor-tests/src/test/scala/akka/event/jul/JavaLoggerSpec.scala index 000f671319..23b6f14079 100644 --- a/akka-actor-tests/src/test/scala/akka/event/jul/JavaLoggerSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/event/jul/JavaLoggerSpec.scala @@ -10,7 +10,7 @@ import scala.util.control.NoStackTrace import com.typesafe.config.ConfigFactory -import akka.actor.{ Actor, ActorLogging, Props } +import akka.actor.{ actorRef2Scala, Actor, ActorLogging, Props } import akka.testkit.AkkaSpec @deprecated("Use SLF4J instead.", "2.6.0") diff --git a/akka-actor-tests/src/test/scala/akka/io/InetAddressDnsResolverSpec.scala b/akka-actor-tests/src/test/scala/akka/io/InetAddressDnsResolverSpec.scala index 64b2a76d56..41f4080c6b 100644 --- a/akka-actor-tests/src/test/scala/akka/io/InetAddressDnsResolverSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/io/InetAddressDnsResolverSpec.scala @@ -7,12 +7,12 @@ package akka.io import java.security.Security import java.util.concurrent.TimeUnit -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor.Props import akka.testkit.{ AkkaSpec, TestActorRef } -@silent +@nowarn class InetAddressDnsResolverSpec extends AkkaSpec(""" akka.io.dns.inet-address.positive-ttl = default akka.io.dns.inet-address.negative-ttl = default @@ -120,7 +120,7 @@ class InetAddressDnsResolverSpec extends AkkaSpec(""" } -@silent +@nowarn class InetAddressDnsResolverConfigSpec extends AkkaSpec(""" akka.io.dns.inet-address.positive-ttl = forever akka.io.dns.inet-address.negative-ttl = never diff --git a/akka-actor-tests/src/test/scala/akka/io/TcpIntegrationSpecSupport.scala b/akka-actor-tests/src/test/scala/akka/io/TcpIntegrationSpecSupport.scala index 29558d10b3..d964181cfb 100644 --- a/akka-actor-tests/src/test/scala/akka/io/TcpIntegrationSpecSupport.scala +++ b/akka-actor-tests/src/test/scala/akka/io/TcpIntegrationSpecSupport.scala @@ -11,6 +11,7 @@ import Tcp._ import akka.actor.ActorRef import akka.actor.ActorSystem +import akka.actor.actorRef2Scala import akka.dispatch.ExecutionContexts import akka.io.Inet.SocketOption import akka.testkit.{ AkkaSpec, TestProbe } diff --git a/akka-actor-tests/src/test/scala/akka/io/UdpConnectedIntegrationSpec.scala b/akka-actor-tests/src/test/scala/akka/io/UdpConnectedIntegrationSpec.scala index f27b46396d..43225281a1 100644 --- a/akka-actor-tests/src/test/scala/akka/io/UdpConnectedIntegrationSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/io/UdpConnectedIntegrationSpec.scala @@ -9,6 +9,7 @@ import java.net.InetSocketAddress import scala.concurrent.duration._ import akka.actor.ActorRef +import akka.actor.actorRef2Scala import akka.testkit.AkkaSpec import akka.testkit.ImplicitSender import akka.testkit.SocketUtil.temporaryServerAddresses diff --git a/akka-actor-tests/src/test/scala/akka/io/UdpIntegrationSpec.scala b/akka-actor-tests/src/test/scala/akka/io/UdpIntegrationSpec.scala index adb0a84d54..0e0a30b3e4 100644 --- a/akka-actor-tests/src/test/scala/akka/io/UdpIntegrationSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/io/UdpIntegrationSpec.scala @@ -8,6 +8,7 @@ import java.net.DatagramSocket import java.net.InetSocketAddress import akka.actor.ActorRef +import akka.actor.actorRef2Scala import akka.io.Inet._ import akka.io.Udp._ import akka.testkit.{ AkkaSpec, ImplicitSender, TestProbe } diff --git a/akka-actor-tests/src/test/scala/akka/io/dns/AsyncDnsResolverIntegrationSpec.scala b/akka-actor-tests/src/test/scala/akka/io/dns/AsyncDnsResolverIntegrationSpec.scala index f91ed9187d..9e93ab00e7 100644 --- a/akka-actor-tests/src/test/scala/akka/io/dns/AsyncDnsResolverIntegrationSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/io/dns/AsyncDnsResolverIntegrationSpec.scala @@ -8,12 +8,13 @@ import java.net.InetAddress import scala.concurrent.duration._ +import com.typesafe.config.ConfigFactory import CachePolicy.Ttl import akka.io.{ Dns, IO } import akka.io.dns.DnsProtocol.{ Ip, RequestType, Srv } import akka.pattern.ask -import akka.testkit.{ AkkaSpec, SocketUtil } +import akka.testkit.SocketUtil import akka.testkit.SocketUtil.Both import akka.testkit.WithLogCapturing import akka.util.Timeout @@ -25,14 +26,14 @@ The configuration to start a bind DNS server in Docker with this configuration is included, and the test will automatically start this container when the test starts and tear it down when it finishes. */ -class AsyncDnsResolverIntegrationSpec extends AkkaSpec(s""" +class AsyncDnsResolverIntegrationSpec extends DockerBindDnsService(ConfigFactory.parseString(s""" akka.loglevel = DEBUG akka.loggers = ["akka.testkit.SilenceAllTestEventListener"] akka.io.dns.resolver = async-dns akka.io.dns.async-dns.nameservers = ["localhost:${AsyncDnsResolverIntegrationSpec.dockerDnsServerPort}"] akka.io.dns.async-dns.search-domains = ["foo.test", "test"] akka.io.dns.async-dns.ndots = 2 - """) with DockerBindDnsService with WithLogCapturing { + """)) with WithLogCapturing { val duration = 10.seconds implicit val timeout: Timeout = Timeout(duration) diff --git a/akka-actor-tests/src/test/scala/akka/io/dns/DockerBindDnsService.scala b/akka-actor-tests/src/test/scala/akka/io/dns/DockerBindDnsService.scala index 85f72dea0c..6e333b1fcf 100644 --- a/akka-actor-tests/src/test/scala/akka/io/dns/DockerBindDnsService.scala +++ b/akka-actor-tests/src/test/scala/akka/io/dns/DockerBindDnsService.scala @@ -8,6 +8,7 @@ import scala.concurrent.duration._ import scala.util.Try import scala.util.control.NonFatal +import com.typesafe.config.Config import com.spotify.docker.client.DefaultDockerClient import com.spotify.docker.client.DockerClient.{ ListContainersParam, LogsParam } import com.spotify.docker.client.messages.{ ContainerConfig, HostConfig, PortBinding } @@ -16,7 +17,7 @@ import org.scalatest.concurrent.Eventually import akka.testkit.AkkaSpec import akka.util.ccompat.JavaConverters._ -trait DockerBindDnsService extends Eventually { self: AkkaSpec => +abstract class DockerBindDnsService(config: Config) extends AkkaSpec(config) with Eventually { val client = DefaultDockerClient.fromEnv().build() val hostPort: Int @@ -27,7 +28,7 @@ trait DockerBindDnsService extends Eventually { self: AkkaSpec => override def atStartup(): Unit = { log.info("Running on port port {}", hostPort) - self.atStartup() + super.atStartup() // https://github.com/sameersbn/docker-bind/pull/61 val image = "raboof/bind:9.11.3-20180713-nochown" @@ -87,7 +88,7 @@ trait DockerBindDnsService extends Eventually { self: AkkaSpec => } override def afterTermination(): Unit = { - self.afterTermination() + super.afterTermination() id.foreach(client.killContainer) id.foreach(client.removeContainer) } diff --git a/akka-actor-tests/src/test/scala/akka/io/dns/internal/AsyncDnsManagerSpec.scala b/akka-actor-tests/src/test/scala/akka/io/dns/internal/AsyncDnsManagerSpec.scala index 9b323b8eb8..fb2b298781 100644 --- a/akka-actor-tests/src/test/scala/akka/io/dns/internal/AsyncDnsManagerSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/io/dns/internal/AsyncDnsManagerSpec.scala @@ -8,8 +8,9 @@ import java.net.InetAddress import scala.collection.immutable.Seq -import com.github.ghik.silencer.silent +import scala.annotation.nowarn +import akka.actor.actorRef2Scala import akka.io.Dns import akka.io.dns.AAAARecord import akka.io.dns.CachePolicy.Ttl @@ -18,7 +19,7 @@ import akka.testkit.{ AkkaSpec, ImplicitSender } import akka.testkit.WithLogCapturing // tests deprecated DNS API -@silent("deprecated") +@nowarn("msg=deprecated") class AsyncDnsManagerSpec extends AkkaSpec(""" akka.loglevel = DEBUG akka.loggers = ["akka.testkit.SilenceAllTestEventListener"] @@ -49,7 +50,7 @@ class AsyncDnsManagerSpec extends AkkaSpec(""" "provide access to cache" in { dns ! AsyncDnsManager.GetCache - (expectMsgType[akka.io.SimpleDnsCache] should be).theSameInstanceAs(Dns(system).cache) + ((expectMsgType[akka.io.SimpleDnsCache]: akka.io.SimpleDnsCache) should be).theSameInstanceAs(Dns(system).cache) } } diff --git a/akka-actor-tests/src/test/scala/akka/io/dns/internal/AsyncDnsResolverSpec.scala b/akka-actor-tests/src/test/scala/akka/io/dns/internal/AsyncDnsResolverSpec.scala index 60cf29ffa0..9264467aad 100644 --- a/akka-actor-tests/src/test/scala/akka/io/dns/internal/AsyncDnsResolverSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/io/dns/internal/AsyncDnsResolverSpec.scala @@ -11,7 +11,7 @@ import scala.concurrent.duration._ import com.typesafe.config.{ Config, ConfigFactory, ConfigValueFactory } -import akka.actor.{ ActorRef, ExtendedActorSystem, Props } +import akka.actor.{ actorRef2Scala, ActorRef, ExtendedActorSystem, Props } import akka.actor.Status.Failure import akka.io.SimpleDnsCache import akka.io.dns.{ AAAARecord, ARecord, DnsSettings, SRVRecord } diff --git a/akka-actor-tests/src/test/scala/akka/io/dns/internal/DnsClientSpec.scala b/akka-actor-tests/src/test/scala/akka/io/dns/internal/DnsClientSpec.scala index ee94bb8a7c..3e8a1ff26d 100644 --- a/akka-actor-tests/src/test/scala/akka/io/dns/internal/DnsClientSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/io/dns/internal/DnsClientSpec.scala @@ -10,6 +10,7 @@ import java.util.concurrent.atomic.AtomicBoolean import scala.collection.immutable.Seq import akka.actor.Props +import akka.actor.actorRef2Scala import akka.io.Udp import akka.io.dns.{ RecordClass, RecordType } import akka.io.dns.internal.DnsClient.{ Answer, Question4 } diff --git a/akka-actor-tests/src/test/scala/akka/io/dns/internal/TcpDnsClientSpec.scala b/akka-actor-tests/src/test/scala/akka/io/dns/internal/TcpDnsClientSpec.scala index a21f88aed9..22f908de35 100644 --- a/akka-actor-tests/src/test/scala/akka/io/dns/internal/TcpDnsClientSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/io/dns/internal/TcpDnsClientSpec.scala @@ -9,6 +9,7 @@ import java.net.InetSocketAddress import scala.collection.immutable.Seq import akka.actor.Props +import akka.actor.actorRef2Scala import akka.io.Tcp import akka.io.Tcp.{ Connected, PeerClosed, Register } import akka.io.dns.{ RecordClass, RecordType } diff --git a/akka-actor-tests/src/test/scala/akka/pattern/AskSpec.scala b/akka-actor-tests/src/test/scala/akka/pattern/AskSpec.scala index b40cdd808c..586aa540d8 100644 --- a/akka-actor-tests/src/test/scala/akka/pattern/AskSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/pattern/AskSpec.scala @@ -7,15 +7,16 @@ package akka.pattern import scala.concurrent.Await import scala.concurrent.duration._ import scala.util.Failure -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import language.postfixOps + import akka.actor._ -import akka.testkit.WithLogCapturing import akka.testkit.{ AkkaSpec, TestProbe } +import akka.testkit.WithLogCapturing import akka.util.Timeout -@silent +@nowarn class AskSpec extends AkkaSpec(""" akka.loglevel = DEBUG akka.loggers = ["akka.testkit.SilenceAllTestEventListener"] @@ -26,7 +27,7 @@ class AskSpec extends AkkaSpec(""" implicit val timeout: Timeout = Timeout(5.seconds) val echo = system.actorOf(Props(new Actor { def receive = { case x => sender() ! x } })) val f = echo ? "ping" - f.futureValue should ===("ping") + Await.result(f, timeout.duration) should ===("ping") } "return broken promises on DeadLetters" in { diff --git a/akka-actor-tests/src/test/scala/akka/pattern/BackoffOnRestartSupervisorSpec.scala b/akka-actor-tests/src/test/scala/akka/pattern/BackoffOnRestartSupervisorSpec.scala index ea78be332f..95f49358bb 100644 --- a/akka-actor-tests/src/test/scala/akka/pattern/BackoffOnRestartSupervisorSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/pattern/BackoffOnRestartSupervisorSpec.scala @@ -9,7 +9,7 @@ import java.util.concurrent.{ CountDownLatch, TimeUnit } import scala.concurrent.duration._ import scala.language.postfixOps -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor._ import akka.pattern.TestActor.NormalException @@ -154,7 +154,7 @@ class BackoffOnRestartSupervisorSpec extends AkkaSpec(""" "accept commands while child is terminating" in { val postStopLatch = new CountDownLatch(1) - @silent + @nowarn val options = BackoffOpts .onFailure(Props(new SlowlyFailingActor(postStopLatch)), "someChildName", 1 nanos, 1 nanos, 0.0) .withMaxNrOfRetries(-1) diff --git a/akka-actor-tests/src/test/scala/akka/pattern/CircuitBreakerSpec.scala b/akka-actor-tests/src/test/scala/akka/pattern/CircuitBreakerSpec.scala index a55b2e5c74..702e2958e3 100644 --- a/akka-actor-tests/src/test/scala/akka/pattern/CircuitBreakerSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/pattern/CircuitBreakerSpec.scala @@ -16,6 +16,7 @@ import scala.util.Success import scala.util.Try import akka.actor.ActorSystem +import akka.actor.actorRef2Scala import akka.testkit._ object CircuitBreakerSpec { diff --git a/akka-actor-tests/src/test/scala/akka/pattern/CircuitBreakerStressSpec.scala b/akka-actor-tests/src/test/scala/akka/pattern/CircuitBreakerStressSpec.scala index dea6efc929..d07a0cb43f 100644 --- a/akka-actor-tests/src/test/scala/akka/pattern/CircuitBreakerStressSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/pattern/CircuitBreakerStressSpec.scala @@ -14,6 +14,7 @@ import akka.actor.Actor import akka.actor.ActorLogging import akka.actor.Props import akka.actor.Status.Failure +import akka.actor.actorRef2Scala import akka.testkit.AkkaSpec import akka.testkit.ImplicitSender diff --git a/akka-actor-tests/src/test/scala/akka/pattern/PatternSpec.scala b/akka-actor-tests/src/test/scala/akka/pattern/PatternSpec.scala index 0870837b0d..97304c80ad 100644 --- a/akka-actor-tests/src/test/scala/akka/pattern/PatternSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/pattern/PatternSpec.scala @@ -10,7 +10,7 @@ import scala.concurrent.duration._ import language.postfixOps -import akka.actor.{ Actor, Props } +import akka.actor.{ actorRef2Scala, Actor, Props } import akka.testkit.{ AkkaSpec, TestLatch } object PatternSpec { diff --git a/akka-actor-tests/src/test/scala/akka/pattern/PromiseRefSpec.scala b/akka-actor-tests/src/test/scala/akka/pattern/PromiseRefSpec.scala index 018a64bd21..6187aa699c 100644 --- a/akka-actor-tests/src/test/scala/akka/pattern/PromiseRefSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/pattern/PromiseRefSpec.scala @@ -4,7 +4,7 @@ package akka.pattern -import scala.concurrent.Promise +import scala.concurrent.{ Await, Promise } import scala.concurrent.duration._ import akka.actor._ @@ -32,7 +32,7 @@ class PromiseRefSpec extends AkkaSpec with ImplicitSender { })) target ! Request(promiseRef.ref) - promiseRef.future.futureValue should ===(Response) + Await.result(promiseRef.future, 5.seconds) should ===(Response) } "throw IllegalArgumentException on negative timeout" in { @@ -48,7 +48,7 @@ class PromiseRefSpec extends AkkaSpec with ImplicitSender { val promiseRef = PromiseRef(5.seconds) promiseRef.ref ! FirstMessage - promiseRef.future.futureValue should ===(FirstMessage) + Await.result(promiseRef.future, 5.seconds) should ===(FirstMessage) promiseRef.ref ! SecondMessage deadListener.expectMsgType[DeadLetter].message should ===(SecondMessage) diff --git a/akka-actor-tests/src/test/scala/akka/pattern/StatusReplySpec.scala b/akka-actor-tests/src/test/scala/akka/pattern/StatusReplySpec.scala index 8dd1893fae..530246d30b 100644 --- a/akka-actor-tests/src/test/scala/akka/pattern/StatusReplySpec.scala +++ b/akka-actor-tests/src/test/scala/akka/pattern/StatusReplySpec.scala @@ -4,15 +4,17 @@ package akka.pattern +import scala.concurrent.{ Await, Future } +import scala.concurrent.duration._ + +import org.scalatest.concurrent.ScalaFutures + import akka.Done +import akka.actor.actorRef2Scala import akka.testkit.AkkaSpec import akka.testkit.TestException import akka.testkit.TestProbe import akka.util.Timeout -import org.scalatest.concurrent.ScalaFutures - -import scala.concurrent.Future -import scala.concurrent.duration._ class StatusReplySpec extends AkkaSpec with ScalaFutures { @@ -66,7 +68,7 @@ class StatusReplySpec extends AkkaSpec with ScalaFutures { val result = probe.ref.askWithStatus("request") probe.expectMsg("request") probe.lastSender ! StatusReply.Success("woho") - result.futureValue should ===("woho") + Await.result(result, timeout.duration) should ===("woho") } "unwrap Error with message" in { diff --git a/akka-actor-tests/src/test/scala/akka/pattern/extended/ExplicitAskSpec.scala b/akka-actor-tests/src/test/scala/akka/pattern/extended/ExplicitAskSpec.scala index 7684e96e9e..89b6e904ae 100644 --- a/akka-actor-tests/src/test/scala/akka/pattern/extended/ExplicitAskSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/pattern/extended/ExplicitAskSpec.scala @@ -4,6 +4,7 @@ package akka.pattern.extended +import scala.concurrent.Await import scala.concurrent.duration._ import akka.actor._ @@ -29,7 +30,7 @@ class ExplicitAskSpec extends AkkaSpec { })) val f = target ? (respondTo => Request(respondTo)) - f.futureValue should ===(Response(target)) + Await.result(f, timeout.duration) should ===(Response(target)) } "work for ActorSelection" in { @@ -43,7 +44,7 @@ class ExplicitAskSpec extends AkkaSpec { val selection = system.actorSelection("/user/select-echo") val f = selection ? (respondTo => Request(respondTo)) - f.futureValue should ===(Response(target)) + Await.result(f, timeout.duration) should ===(Response(target)) } } diff --git a/akka-actor-tests/src/test/scala/akka/routing/BalancingSpec.scala b/akka-actor-tests/src/test/scala/akka/routing/BalancingSpec.scala index 7b14fcdaef..246eedf27d 100644 --- a/akka-actor-tests/src/test/scala/akka/routing/BalancingSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/routing/BalancingSpec.scala @@ -12,7 +12,7 @@ import scala.concurrent.duration._ import org.scalatest.BeforeAndAfterEach -import akka.actor.{ Actor, Props } +import akka.actor.{ actorRef2Scala, Actor, Props } import akka.actor.ActorRef import akka.testkit.{ AkkaSpec, ImplicitSender, TestLatch } diff --git a/akka-actor-tests/src/test/scala/akka/routing/BroadcastSpec.scala b/akka-actor-tests/src/test/scala/akka/routing/BroadcastSpec.scala index 0adeb813bb..2e46b67394 100644 --- a/akka-actor-tests/src/test/scala/akka/routing/BroadcastSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/routing/BroadcastSpec.scala @@ -8,7 +8,7 @@ import java.util.concurrent.atomic.AtomicInteger import scala.concurrent.Await -import akka.actor.{ Actor, Props } +import akka.actor.{ actorRef2Scala, Actor, Props } import akka.pattern.ask import akka.testkit.{ AkkaSpec, DefaultTimeout, ImplicitSender, TestLatch } diff --git a/akka-actor-tests/src/test/scala/akka/routing/ConfiguredLocalRoutingSpec.scala b/akka-actor-tests/src/test/scala/akka/routing/ConfiguredLocalRoutingSpec.scala index 0b5a2c84c8..8d3293b09d 100644 --- a/akka-actor-tests/src/test/scala/akka/routing/ConfiguredLocalRoutingSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/routing/ConfiguredLocalRoutingSpec.scala @@ -8,12 +8,12 @@ import scala.collection.immutable import scala.concurrent.Await import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.Config import language.postfixOps import akka.ConfigurationException -import akka.actor.{ Actor, ActorRef, Deploy, Props } +import akka.actor.{ actorRef2Scala, Actor, ActorRef, Deploy, Props } import akka.actor.ActorPath import akka.actor.ActorSystem import akka.actor.ExtendedActorSystem @@ -170,7 +170,7 @@ class ConfiguredLocalRoutingSpec "not get confused when trying to wildcard-configure children" in { system.actorOf(FromConfig.props(routeeProps = Props(classOf[SendRefAtStartup], testActor)), "weird") val recv = (for (_ <- 1 to 3) yield expectMsgType[ActorRef].path.elements.mkString("/", "/", "")).toSet - @silent + @nowarn val expc = Set('a', 'b', 'c').map(i => "/user/weird/$" + i) recv should ===(expc) expectNoMessage(1 second) diff --git a/akka-actor-tests/src/test/scala/akka/routing/ConsistentHashingRouterSpec.scala b/akka-actor-tests/src/test/scala/akka/routing/ConsistentHashingRouterSpec.scala index 9da8cb8497..ab47f6a15a 100644 --- a/akka-actor-tests/src/test/scala/akka/routing/ConsistentHashingRouterSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/routing/ConsistentHashingRouterSpec.scala @@ -10,6 +10,7 @@ import scala.concurrent.ExecutionContextExecutor import akka.actor.Actor import akka.actor.ActorRef import akka.actor.Props +import akka.actor.actorRef2Scala import akka.pattern.ask import akka.routing.ConsistentHashingRouter.ConsistentHashMapping import akka.routing.ConsistentHashingRouter.ConsistentHashable diff --git a/akka-actor-tests/src/test/scala/akka/routing/RandomSpec.scala b/akka-actor-tests/src/test/scala/akka/routing/RandomSpec.scala index 1adf074529..cacb448b5b 100644 --- a/akka-actor-tests/src/test/scala/akka/routing/RandomSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/routing/RandomSpec.scala @@ -11,7 +11,7 @@ import scala.concurrent.duration._ import language.postfixOps -import akka.actor.{ Actor, Props } +import akka.actor.{ actorRef2Scala, Actor, Props } import akka.pattern.ask import akka.testkit.{ AkkaSpec, DefaultTimeout, ImplicitSender, TestLatch } diff --git a/akka-actor-tests/src/test/scala/akka/routing/ResizerSpec.scala b/akka-actor-tests/src/test/scala/akka/routing/ResizerSpec.scala index 17ada67ec3..46db149a62 100644 --- a/akka-actor-tests/src/test/scala/akka/routing/ResizerSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/routing/ResizerSpec.scala @@ -10,7 +10,7 @@ import scala.concurrent.duration._ import com.typesafe.config.{ Config, ConfigFactory } import language.postfixOps -import akka.actor.{ Actor, ActorRef, ActorSystem, Props } +import akka.actor.{ actorRef2Scala, Actor, ActorRef, ActorSystem, Props } import akka.pattern.ask import akka.testkit._ import akka.testkit.TestEvent._ diff --git a/akka-actor-tests/src/test/scala/akka/routing/RoundRobinSpec.scala b/akka-actor-tests/src/test/scala/akka/routing/RoundRobinSpec.scala index db671aee44..44a27cc947 100644 --- a/akka-actor-tests/src/test/scala/akka/routing/RoundRobinSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/routing/RoundRobinSpec.scala @@ -15,6 +15,7 @@ import akka.actor.Actor import akka.actor.ActorRef import akka.actor.Props import akka.actor.Terminated +import akka.actor.actorRef2Scala import akka.pattern.ask import akka.testkit._ diff --git a/akka-actor-tests/src/test/scala/akka/routing/RouteeCreationSpec.scala b/akka-actor-tests/src/test/scala/akka/routing/RouteeCreationSpec.scala index 434f4c9c11..789d8ba3fc 100644 --- a/akka-actor-tests/src/test/scala/akka/routing/RouteeCreationSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/routing/RouteeCreationSpec.scala @@ -10,6 +10,7 @@ import akka.actor.Actor import akka.actor.ActorIdentity import akka.actor.Identify import akka.actor.Props +import akka.actor.actorRef2Scala import akka.testkit.AkkaSpec class RouteeCreationSpec extends AkkaSpec { diff --git a/akka-actor-tests/src/test/scala/akka/routing/ScatterGatherFirstCompletedSpec.scala b/akka-actor-tests/src/test/scala/akka/routing/ScatterGatherFirstCompletedSpec.scala index 3282810a53..6a11c41c91 100644 --- a/akka-actor-tests/src/test/scala/akka/routing/ScatterGatherFirstCompletedSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/routing/ScatterGatherFirstCompletedSpec.scala @@ -10,7 +10,7 @@ import java.util.concurrent.atomic.AtomicInteger import scala.concurrent.Await import scala.concurrent.duration._ -import akka.actor.{ Actor, Props } +import akka.actor.{ actorRef2Scala, Actor, Props } import akka.actor.ActorSystem import akka.actor.Status import akka.pattern.ask diff --git a/akka-actor-tests/src/test/scala/akka/routing/SmallestMailboxSpec.scala b/akka-actor-tests/src/test/scala/akka/routing/SmallestMailboxSpec.scala index e5f9207fb5..9c9877056d 100644 --- a/akka-actor-tests/src/test/scala/akka/routing/SmallestMailboxSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/routing/SmallestMailboxSpec.scala @@ -8,7 +8,7 @@ import java.util.concurrent.ConcurrentHashMap import scala.concurrent.Await -import akka.actor.{ Actor, Props } +import akka.actor.{ actorRef2Scala, Actor, Props } import akka.testkit.{ AkkaSpec, DefaultTimeout, ImplicitSender, TestLatch } class SmallestMailboxSpec extends AkkaSpec with DefaultTimeout with ImplicitSender { diff --git a/akka-actor-tests/src/test/scala/akka/routing/TailChoppingSpec.scala b/akka-actor-tests/src/test/scala/akka/routing/TailChoppingSpec.scala index e996a357fb..9155d9c527 100644 --- a/akka-actor-tests/src/test/scala/akka/routing/TailChoppingSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/routing/TailChoppingSpec.scala @@ -9,7 +9,7 @@ import java.util.concurrent.atomic.AtomicInteger import scala.concurrent.Await import scala.concurrent.duration._ -import akka.actor.{ Actor, ActorRef, ActorSystem, Props } +import akka.actor.{ actorRef2Scala, Actor, ActorRef, ActorSystem, Props } import akka.actor.Status.Failure import akka.pattern.{ ask, AskTimeoutException } import akka.testkit._ diff --git a/akka-actor-tests/src/test/scala/akka/serialization/DisabledJavaSerializerWarningSpec.scala b/akka-actor-tests/src/test/scala/akka/serialization/DisabledJavaSerializerWarningSpec.scala index a9cace488d..f6ed77251c 100644 --- a/akka-actor-tests/src/test/scala/akka/serialization/DisabledJavaSerializerWarningSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/serialization/DisabledJavaSerializerWarningSpec.scala @@ -9,6 +9,7 @@ import java.nio.{ ByteBuffer, ByteOrder } import scala.concurrent.duration._ import akka.actor.ExtendedActorSystem +import akka.actor.actorRef2Scala import akka.testkit._ object DisabledJavaSerializerWarningSpec { diff --git a/akka-actor-tests/src/test/scala/akka/serialization/SerializeSpec.scala b/akka-actor-tests/src/test/scala/akka/serialization/SerializeSpec.scala index f9707837ec..b265fbdfc4 100644 --- a/akka-actor-tests/src/test/scala/akka/serialization/SerializeSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/serialization/SerializeSpec.scala @@ -12,7 +12,7 @@ import scala.concurrent.Await import scala.concurrent.duration._ import SerializationTests._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config._ import language.postfixOps import test.akka.serialization.NoVerification @@ -58,10 +58,10 @@ object SerializationTests { protected[akka] trait Marker protected[akka] trait Marker2 - @silent // can't use unused otherwise case class below gets a deprecated + @nowarn // can't use unused otherwise case class below gets a deprecated class SimpleMessage(s: String) extends Marker - @silent + @nowarn class ExtendedSimpleMessage(s: String, i: Int) extends SimpleMessage(s) trait AnotherInterface extends Marker diff --git a/akka-actor-tests/src/test/scala/akka/util/BoundedBlockingQueueSpec.scala b/akka-actor-tests/src/test/scala/akka/util/BoundedBlockingQueueSpec.scala index ad8d813c87..95325fff54 100644 --- a/akka-actor-tests/src/test/scala/akka/util/BoundedBlockingQueueSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/util/BoundedBlockingQueueSpec.scala @@ -101,7 +101,7 @@ class BoundedBlockingQueueSpec val TestContext(queue, events, _, _, _, _) = newBoundedBlockingQueue(1) queue.offer("1") - mustBlockFor(100 milliseconds) { + mustBlockFor(100.milliseconds) { queue.put("2") } (events should contain).inOrder(offer("1"), awaitNotFull) @@ -114,12 +114,12 @@ class BoundedBlockingQueueSpec val f = Future(queue.put("b")) - after(10 milliseconds) { + after(10.milliseconds) { f.isCompleted should be(false) queue.take() } - Await.result(f, 3 seconds) + Await.result(f, 3.seconds) (events should contain).inOrder(offer("a"), poll, offer("b")) } @@ -130,14 +130,14 @@ class BoundedBlockingQueueSpec // Blocks until another thread signals `notFull` val f = Future(queue.put("b")) - after(10 milliseconds) { + after(10.milliseconds) { f.isCompleted should be(false) lock.lockInterruptibly() notFull.signal() lock.unlock() } - mustBlockFor(100 milliseconds, f) + mustBlockFor(100.milliseconds, f) events.toList should containInSequence(offer("a"), awaitNotFull, signalNotFull, getSize, awaitNotFull) events shouldNot contain(offer("b")) } @@ -162,7 +162,7 @@ class BoundedBlockingQueueSpec "block when the queue is empty" in { val TestContext(queue, events, _, _, _, _) = newBoundedBlockingQueue(1) - mustBlockFor(100 milliseconds) { + mustBlockFor(100.milliseconds) { queue.take() } events should contain(awaitNotEmpty) @@ -173,12 +173,12 @@ class BoundedBlockingQueueSpec val TestContext(queue, events, _, _, _, _) = newBoundedBlockingQueue(1) val f = Future(queue.take()) - after(10 milliseconds) { + after(10.milliseconds) { f.isCompleted should be(false) queue.put("a") } - Await.ready(f, 3 seconds) + Await.ready(f, 3.seconds) (events should contain).inOrder(awaitNotEmpty, offer("a"), poll) } @@ -189,7 +189,7 @@ class BoundedBlockingQueueSpec val f = Future(queue.take()) // Cause `notFull` signal, but don't fill the queue - after(10 milliseconds) { + after(10.milliseconds) { f.isCompleted should be(false) lock.lockInterruptibly() notEmpty.signal() @@ -197,7 +197,7 @@ class BoundedBlockingQueueSpec } // `f` should still block since the queue is still empty - mustBlockFor(100 milliseconds, f) + mustBlockFor(100.milliseconds, f) events.toList should containInSequence(getSize, awaitNotEmpty, signalNotEmpty, getSize, awaitNotEmpty) events shouldNot contain(poll) } @@ -252,11 +252,11 @@ class BoundedBlockingQueueSpec notFull.manualTimeControl(true) val f = Future(queue.offer("World", 100, TimeUnit.MILLISECONDS)) - after(10 milliseconds) { + after(10.milliseconds) { f.isCompleted should be(false) - notFull.advanceTime(99 milliseconds) + notFull.advanceTime(99.milliseconds) } - mustBlockFor(100 milliseconds, f) + mustBlockFor(100.milliseconds, f) events shouldNot contain(offer("World")) } @@ -274,12 +274,12 @@ class BoundedBlockingQueueSpec notFull.manualTimeControl(true) val f = Future(queue.offer("World", 100, TimeUnit.MILLISECONDS)) - notFull.advanceTime(99 milliseconds) - after(50 milliseconds) { + notFull.advanceTime(99.milliseconds) + after(50.milliseconds) { f.isCompleted should be(false) queue.take() } - Await.result(f, 3 seconds) should equal(true) + Await.result(f, 3.seconds) should equal(true) (events should contain).inOrder(awaitNotFull, signalNotFull, offer("World")) } @@ -290,7 +290,7 @@ class BoundedBlockingQueueSpec val f = Future(queue.offer("World", 1000, TimeUnit.DAYS)) // Cause `notFull` signal, but don't fill the queue - after(10 milliseconds) { + after(10.milliseconds) { f.isCompleted should be(false) lock.lockInterruptibly() notFull.signal() @@ -298,7 +298,7 @@ class BoundedBlockingQueueSpec } // `f` should still block since the queue is still empty - mustBlockFor(100 milliseconds, f) + mustBlockFor(100.milliseconds, f) events.toList should containInSequence(getSize, awaitNotFull, signalNotFull, getSize, awaitNotFull) events shouldNot contain(offer("World")) } diff --git a/akka-actor-tests/src/test/scala/akka/util/ByteStringInitializationSpec.scala b/akka-actor-tests/src/test/scala/akka/util/ByteStringInitializationSpec.scala index 90ff7f5331..21b780f2d1 100644 --- a/akka-actor-tests/src/test/scala/akka/util/ByteStringInitializationSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/util/ByteStringInitializationSpec.scala @@ -6,12 +6,12 @@ package akka.util import java.io.InputStream -import org.scalatest.matchers.should.Matchers -import org.scalatest.wordspec.AnyWordSpec - import scala.collection.mutable import scala.collection.mutable.ArrayBuilder +import org.scalatest.matchers.should.Matchers +import org.scalatest.wordspec.AnyWordSpec + class ByteStringInitializationSpec extends AnyWordSpec with Matchers { "ByteString intialization" should { "not get confused by initializing CompactByteString before ByteString" in { diff --git a/akka-actor-tests/src/test/scala/akka/util/ByteStringSpec.scala b/akka-actor-tests/src/test/scala/akka/util/ByteStringSpec.scala index 315ca196c8..23c5b867b2 100644 --- a/akka-actor-tests/src/test/scala/akka/util/ByteStringSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/util/ByteStringSpec.scala @@ -12,7 +12,7 @@ import java.nio.ByteOrder.{ BIG_ENDIAN, LITTLE_ENDIAN } import scala.collection.mutable.Builder -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import org.apache.commons.codec.binary.Hex.encodeHex import org.scalacheck.{ Arbitrary, Gen } import org.scalacheck.Arbitrary.arbitrary @@ -167,7 +167,7 @@ class ByteStringSpec extends AnyWordSpec with Matchers with Checkers { body(bsA, bsB) == body(vecA, vecB) } - @silent + @nowarn def likeVecIt(bs: ByteString)(body: BufferedIterator[Byte] => Any, strict: Boolean = true): Boolean = { val bsIterator = bs.iterator val vecIterator = Vector(bs: _*).iterator.buffered @@ -175,7 +175,7 @@ class ByteStringSpec extends AnyWordSpec with Matchers with Checkers { (!strict || (bsIterator.toSeq == vecIterator.toSeq)) } - @silent + @nowarn def likeVecIts(a: ByteString, b: ByteString)( body: (BufferedIterator[Byte], BufferedIterator[Byte]) => Any, strict: Boolean = true): Boolean = { diff --git a/akka-actor-typed-tests/src/test/scala/akka/actor/typed/BehaviorSpec.scala b/akka-actor-typed-tests/src/test/scala/akka/actor/typed/BehaviorSpec.scala index deb5e9be7f..74a0e7d312 100644 --- a/akka-actor-typed-tests/src/test/scala/akka/actor/typed/BehaviorSpec.scala +++ b/akka-actor-typed-tests/src/test/scala/akka/actor/typed/BehaviorSpec.scala @@ -6,7 +6,7 @@ package akka.actor.typed import java.util.function.{ Function => F1 } -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import org.scalactic.TypeCheckedTripleEquals import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpecLike @@ -22,7 +22,7 @@ import akka.japi.pf.{ FI, PFBuilder } object BehaviorSpec { sealed trait Command { - @silent + @nowarn def expectedResponse(context: TypedActorContext[Command]): Seq[Event] = Nil } case object GetSelf extends Command { @@ -73,9 +73,9 @@ object BehaviorSpec { trait Common extends AnyWordSpecLike with Matchers with TypeCheckedTripleEquals with LogCapturing { type Aux >: Null <: AnyRef def behavior(monitor: ActorRef[Event]): (Behavior[Command], Aux) - @silent("never used") + @nowarn("msg=never used") def checkAux(signal: Signal, aux: Aux): Unit = () - @silent("never used") + @nowarn("msg=never used") def checkAux(command: Command, aux: Aux): Unit = () case class Init(behv: Behavior[Command], inbox: TestInbox[Event], aux: Aux) { diff --git a/akka-actor-typed-tests/src/test/scala/docs/akka/typed/FaultToleranceDocSpec.scala b/akka-actor-typed-tests/src/test/scala/docs/akka/typed/FaultToleranceDocSpec.scala index d556b50bd9..0e126d8f22 100644 --- a/akka-actor-typed-tests/src/test/scala/docs/akka/typed/FaultToleranceDocSpec.scala +++ b/akka-actor-typed-tests/src/test/scala/docs/akka/typed/FaultToleranceDocSpec.scala @@ -6,7 +6,7 @@ package docs.akka.typed import scala.concurrent.duration._ import akka.actor.testkit.typed.scaladsl.ScalaTestWithActorTestKit -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import org.scalatest.wordspec.AnyWordSpecLike object FaultToleranceDocSpec { @@ -77,7 +77,7 @@ object FaultToleranceDocSpec { // #bubbling-example } -@silent("never used") +@nowarn("msg=never used") class FaultToleranceDocSpec extends ScalaTestWithActorTestKit(""" # silenced to not put noise in test logs akka.loglevel = off diff --git a/akka-actor-typed-tests/src/test/scala/docs/akka/typed/SpawnProtocolDocSpec.scala b/akka-actor-typed-tests/src/test/scala/docs/akka/typed/SpawnProtocolDocSpec.scala index 83d9f2edc4..a816abfdcd 100644 --- a/akka-actor-typed-tests/src/test/scala/docs/akka/typed/SpawnProtocolDocSpec.scala +++ b/akka-actor-typed-tests/src/test/scala/docs/akka/typed/SpawnProtocolDocSpec.scala @@ -12,7 +12,7 @@ import akka.actor.testkit.typed.scaladsl.ScalaTestWithActorTestKit import akka.actor.testkit.typed.scaladsl.LogCapturing import docs.akka.typed.IntroSpec.HelloWorld import org.scalatest.wordspec.AnyWordSpecLike -import com.github.ghik.silencer.silent +import scala.annotation.nowarn //#imports1 import akka.actor.typed.Behavior @@ -33,7 +33,7 @@ import akka.util.Timeout object SpawnProtocolDocSpec { // Silent because we want to name the unused 'context' parameter - @silent("never used") + @nowarn("msg=never used") //#main object HelloWorldMain { def apply(): Behavior[SpawnProtocol.Command] = diff --git a/akka-actor-typed-tests/src/test/scala/docs/akka/typed/StyleGuideDocExamples.scala b/akka-actor-typed-tests/src/test/scala/docs/akka/typed/StyleGuideDocExamples.scala index 9e79a26609..b89fa6ba3d 100644 --- a/akka-actor-typed-tests/src/test/scala/docs/akka/typed/StyleGuideDocExamples.scala +++ b/akka-actor-typed-tests/src/test/scala/docs/akka/typed/StyleGuideDocExamples.scala @@ -14,7 +14,7 @@ import akka.actor.typed.SupervisorStrategy import scala.concurrent.duration.FiniteDuration import akka.Done -import com.github.ghik.silencer.silent +import scala.annotation.nowarn //#oo-style //#fun-style @@ -481,7 +481,7 @@ object StyleGuideDocExamples { //#pattern-match-guard } - @silent + @nowarn private def counter(remaining: Int): Behavior[Command] = { //#pattern-match-without-guard Behaviors.receiveMessage { @@ -507,7 +507,7 @@ object StyleGuideDocExamples { } //#pattern-match-unhandled - @silent + @nowarn object partial { //#pattern-match-partial private val zero: Behavior[Command] = { diff --git a/akka-actor-typed-tests/src/test/scala/docs/akka/typed/extensions/ExtensionDocSpec.scala b/akka-actor-typed-tests/src/test/scala/docs/akka/typed/extensions/ExtensionDocSpec.scala index b798d2d901..b985b841fd 100644 --- a/akka-actor-typed-tests/src/test/scala/docs/akka/typed/extensions/ExtensionDocSpec.scala +++ b/akka-actor-typed-tests/src/test/scala/docs/akka/typed/extensions/ExtensionDocSpec.scala @@ -9,7 +9,7 @@ import akka.actor.typed.Behavior import akka.actor.typed.Extension import akka.actor.typed.ExtensionId import akka.actor.typed.scaladsl.Behaviors -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.ConfigFactory import scala.concurrent.Future @@ -30,7 +30,7 @@ object DatabasePool extends ExtensionId[DatabasePool] { } //#extension-id -@silent +@nowarn //#extension class DatabasePool(system: ActorSystem[_]) extends Extension { // database configuration can be loaded from config @@ -41,7 +41,7 @@ class DatabasePool(system: ActorSystem[_]) extends Extension { } //#extension -@silent +@nowarn object ExtensionDocSpec { val config = ConfigFactory.parseString(""" #config diff --git a/akka-actor-typed-tests/src/test/scala/docs/akka/typed/supervision/SupervisionCompileOnly.scala b/akka-actor-typed-tests/src/test/scala/docs/akka/typed/supervision/SupervisionCompileOnly.scala index 3d9634c268..0757a0b4d6 100644 --- a/akka-actor-typed-tests/src/test/scala/docs/akka/typed/supervision/SupervisionCompileOnly.scala +++ b/akka-actor-typed-tests/src/test/scala/docs/akka/typed/supervision/SupervisionCompileOnly.scala @@ -9,7 +9,7 @@ import akka.actor.typed.PostStop import akka.actor.typed.PreRestart import akka.actor.typed.{ Behavior, SupervisorStrategy } import akka.actor.typed.scaladsl.Behaviors -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import scala.concurrent.duration._ @@ -112,7 +112,7 @@ object SupervisionCompileOnly { } def claimResource(): Resource = ??? - @silent("never used") + @nowarn("msg=never used") //#restart-PreRestart-signal def withPreRestart: Behavior[String] = { Behaviors diff --git a/akka-actor-typed/src/main/scala/akka/actor/typed/internal/ActorContextImpl.scala b/akka-actor-typed/src/main/scala/akka/actor/typed/internal/ActorContextImpl.scala index d4b8f6dfcf..59db11c00c 100644 --- a/akka-actor-typed/src/main/scala/akka/actor/typed/internal/ActorContextImpl.scala +++ b/akka-actor-typed/src/main/scala/akka/actor/typed/internal/ActorContextImpl.scala @@ -13,7 +13,7 @@ import java.util.concurrent.CompletionStage import scala.concurrent.{ ExecutionContextExecutor, Future } import scala.reflect.ClassTag import scala.util.Try -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import org.slf4j.Logger import org.slf4j.LoggerFactory import akka.actor.Address @@ -219,7 +219,7 @@ import scala.util.Success } // Java API impl - @silent("never used") // resClass is just a pretend param + @nowarn("msg=never used") // resClass is just a pretend param override def ask[Req, Res]( resClass: Class[Res], target: RecipientRef[Req], diff --git a/akka-actor-typed/src/main/scala/akka/actor/typed/scaladsl/AskPattern.scala b/akka-actor-typed/src/main/scala/akka/actor/typed/scaladsl/AskPattern.scala index 630d357b7c..7775c51f1b 100644 --- a/akka-actor-typed/src/main/scala/akka/actor/typed/scaladsl/AskPattern.scala +++ b/akka-actor-typed/src/main/scala/akka/actor/typed/scaladsl/AskPattern.scala @@ -7,7 +7,7 @@ package akka.actor.typed.scaladsl import java.util.concurrent.TimeoutException import scala.concurrent.Future -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor.typed.ActorRef import akka.actor.typed.ActorSystem import akka.actor.typed.RecipientRef @@ -103,7 +103,7 @@ object AskPattern { * * @tparam Res The response protocol, what the other actor sends back */ - @silent("never used") + @nowarn("msg=never used") def ask[Res](replyTo: ActorRef[Res] => Req)(implicit timeout: Timeout, scheduler: Scheduler): Future[Res] = { // We do not currently use the implicit sched, but want to require it // because it might be needed when we move to a 'native' typed runtime, see #24219 diff --git a/akka-actor/src/main/boilerplate/akka/japi/function/Functions.scala.template b/akka-actor/src/main/boilerplate/akka/japi/function/Functions.scala.template index febcc5d876..2ecf792006 100644 --- a/akka-actor/src/main/boilerplate/akka/japi/function/Functions.scala.template +++ b/akka-actor/src/main/boilerplate/akka/japi/function/Functions.scala.template @@ -4,13 +4,13 @@ package akka.japi.function -import com.github.ghik.silencer.silent +import scala.annotation.nowarn [3..22#/** * A Function interface. Used to create 1-arg first-class-functions is Java. * `Serializable` is needed to be able to grab line number for Java 8 lambdas. */ -@silent +@nowarn @SerialVersionUID(##1L) trait Function1[[#-T1#], +R] extends java.io.Serializable { @throws(classOf[Exception]) @@ -24,7 +24,7 @@ trait Function1[[#-T1#], +R] extends java.io.Serializable { * A Procedure is like a Function, but it doesn't produce a return value. * `Serializable` is needed to be able to grab line number for Java 8 lambdas. */ -@silent("@SerialVersionUID has no effect") +@nowarn("msg=@SerialVersionUID has no effect") @SerialVersionUID(##1L) trait Procedure1[[#-T1#]] extends java.io.Serializable { @throws(classOf[Exception]) diff --git a/akka-actor/src/main/mima-filters/2.6.12.backwards.excludes/actorClassificationUnsubscriber.excludes b/akka-actor/src/main/mima-filters/2.6.12.backwards.excludes/actorClassificationUnsubscriber.excludes new file mode 100644 index 0000000000..c44a8ba48d --- /dev/null +++ b/akka-actor/src/main/mima-filters/2.6.12.backwards.excludes/actorClassificationUnsubscriber.excludes @@ -0,0 +1,5 @@ +# Internal ActorClassificationUnsubscriber +ProblemFilters.exclude[DirectMissingMethodProblem]("akka.event.ActorClassificationUnsubscriber.start") +ProblemFilters.exclude[DirectMissingMethodProblem]("akka.event.ActorClassificationUnsubscriber.start$default$3") +ProblemFilters.exclude[DirectMissingMethodProblem]("akka.event.ActorClassificationUnsubscriber.this") +ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.event.ActorClassificationUnsubscriber") diff --git a/akka-actor/src/main/scala-2.12/akka/compat/Future.scala b/akka-actor/src/main/scala-2.12/akka/compat/Future.scala index fd92b9f25e..ef21f1022a 100644 --- a/akka-actor/src/main/scala-2.12/akka/compat/Future.scala +++ b/akka-actor/src/main/scala-2.12/akka/compat/Future.scala @@ -7,7 +7,7 @@ package akka.compat import scala.collection.immutable import scala.concurrent.{ ExecutionContext, Future => SFuture } -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.annotation.InternalApi import akka.util.ccompat._ @@ -20,7 +20,7 @@ import akka.util.ccompat._ * * Remove these classes as soon as support for Scala 2.12 is dropped! */ -@silent @InternalApi private[akka] object Future { +@nowarn @InternalApi private[akka] object Future { def fold[T, R](futures: IterableOnce[SFuture[T]])(zero: R)(op: (R, T) => R)( implicit executor: ExecutionContext): SFuture[R] = SFuture.fold[T, R](futures)(zero)(op)(executor) diff --git a/akka-actor/src/main/scala-2.12/akka/compat/PartialFunction.scala b/akka-actor/src/main/scala-2.12/akka/compat/PartialFunction.scala new file mode 100644 index 0000000000..abae46338a --- /dev/null +++ b/akka-actor/src/main/scala-2.12/akka/compat/PartialFunction.scala @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2009-2021 Lightbend Inc. + */ + +package akka.compat + +import scala.annotation.nowarn + +import akka.annotation.InternalApi + +/** + * INTERNAL API + * + * Compatibility wrapper for `scala.PartialFunction` to be able to compile the same code + * against Scala 2.12, 2.13, 3.0 + * + * Remove these classes as soon as support for Scala 2.12 is dropped! + */ +@InternalApi private[akka] object PartialFunction { + + def fromFunction[A, B](f: (A) => B): scala.PartialFunction[A, B] = { + @nowarn val pf = scala.PartialFunction(f) + pf + } + +} diff --git a/akka-actor/src/main/scala-2.13/akka/compat/PartialFunction.scala b/akka-actor/src/main/scala-2.13/akka/compat/PartialFunction.scala new file mode 100644 index 0000000000..9ca20d6667 --- /dev/null +++ b/akka-actor/src/main/scala-2.13/akka/compat/PartialFunction.scala @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2009-2021 Lightbend Inc. + */ + +package akka.compat + +import akka.annotation.InternalApi + +/** + * INTERNAL API + * + * Compatibility wrapper for `scala.PartialFunction` to be able to compile the same code + * against Scala 2.12, 2.13, 3.0 + * + * Remove these classes as soon as support for Scala 2.12 is dropped! + */ +@InternalApi private[akka] object PartialFunction { + + def fromFunction[A, B](f: (A) => B): scala.PartialFunction[A, B] = { + scala.PartialFunction.fromFunction(f) + } + +} diff --git a/akka-actor/src/main/scala-2.13/akka/util/ByteString.scala b/akka-actor/src/main/scala-2.13/akka/util/ByteString.scala index 25a45ecf39..852e837079 100644 --- a/akka-actor/src/main/scala-2.13/akka/util/ByteString.scala +++ b/akka-actor/src/main/scala-2.13/akka/util/ByteString.scala @@ -16,7 +16,7 @@ import scala.collection.immutable.{ IndexedSeq, IndexedSeqOps, StrictOptimizedSe import scala.collection.mutable.{ Builder, WrappedArray } import scala.reflect.ClassTag -import com.github.ghik.silencer.silent +import scala.annotation.nowarn object ByteString { @@ -897,7 +897,7 @@ sealed abstract class ByteString * Java API: Returns an Iterable of read-only ByteBuffers that directly wraps this ByteStrings * all fragments. Will always have at least one entry. */ - @silent + @nowarn def getByteBuffers(): JIterable[ByteBuffer] = { import scala.collection.JavaConverters.asJavaIterableConverter asByteBuffers.asJava diff --git a/akka-actor/src/main/scala-3/akka/compat/Future.scala b/akka-actor/src/main/scala-3/akka/compat/Future.scala new file mode 100644 index 0000000000..c58f650797 --- /dev/null +++ b/akka-actor/src/main/scala-3/akka/compat/Future.scala @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2009-2021 Lightbend Inc. + */ + +package akka.compat + +import scala.collection.immutable +import scala.concurrent.{ ExecutionContext, Future => SFuture } + +import akka.annotation.InternalApi + +/** + * INTERNAL API + * + * Compatibility wrapper for `scala.concurrent.Future` to be able to compile the same code + * against Scala 2.12, 2.13 + * + * Remove these classes as soon as support for Scala 2.12 is dropped! + */ +@InternalApi private[akka] object Future { + def fold[T, R](futures: IterableOnce[SFuture[T]])(zero: R)(op: (R, T) => R)( + implicit executor: ExecutionContext): SFuture[R] = { + // This will have performance implications since the elements are copied to a Vector + SFuture.foldLeft[T, R](futures.iterator.to(immutable.Iterable))(zero)(op)(executor) + } + + def fold[T, R](futures: immutable.Iterable[SFuture[T]])(zero: R)(op: (R, T) => R)( + implicit executor: ExecutionContext): SFuture[R] = + SFuture.foldLeft[T, R](futures)(zero)(op)(executor) + + def reduce[T, R >: T](futures: IterableOnce[SFuture[T]])(op: (R, T) => R)( + implicit executor: ExecutionContext): SFuture[R] = { + // This will have performance implications since the elements are copied to a Vector + SFuture.reduceLeft[T, R](futures.iterator.to(immutable.Iterable))(op)(executor) + } + + def reduce[T, R >: T](futures: immutable.Iterable[SFuture[T]])(op: (R, T) => R)( + implicit executor: ExecutionContext): SFuture[R] = + SFuture.reduceLeft[T, R](futures)(op)(executor) + + def find[T](futures: IterableOnce[SFuture[T]])(p: T => Boolean)( + implicit executor: ExecutionContext): SFuture[Option[T]] = { + // This will have performance implications since the elements are copied to a Vector + SFuture.find[T](futures.iterator.to(immutable.Iterable))(p)(executor) + } + + def find[T](futures: immutable.Iterable[SFuture[T]])(p: T => Boolean)( + implicit executor: ExecutionContext): SFuture[Option[T]] = + SFuture.find[T](futures)(p)(executor) +} diff --git a/akka-actor/src/main/scala-3/akka/compat/PartialFunction.scala b/akka-actor/src/main/scala-3/akka/compat/PartialFunction.scala new file mode 100644 index 0000000000..9ca20d6667 --- /dev/null +++ b/akka-actor/src/main/scala-3/akka/compat/PartialFunction.scala @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2009-2021 Lightbend Inc. + */ + +package akka.compat + +import akka.annotation.InternalApi + +/** + * INTERNAL API + * + * Compatibility wrapper for `scala.PartialFunction` to be able to compile the same code + * against Scala 2.12, 2.13, 3.0 + * + * Remove these classes as soon as support for Scala 2.12 is dropped! + */ +@InternalApi private[akka] object PartialFunction { + + def fromFunction[A, B](f: (A) => B): scala.PartialFunction[A, B] = { + scala.PartialFunction.fromFunction(f) + } + +} diff --git a/akka-actor/src/main/scala-3/akka/dispatch/internal/SameThreadExecutionContext.scala b/akka-actor/src/main/scala-3/akka/dispatch/internal/SameThreadExecutionContext.scala new file mode 100644 index 0000000000..62811d65ae --- /dev/null +++ b/akka-actor/src/main/scala-3/akka/dispatch/internal/SameThreadExecutionContext.scala @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2009-2021 Lightbend Inc. + */ + +package akka.dispatch.internal + +import scala.concurrent.ExecutionContext + +import akka.annotation.InternalApi + +/** + * Factory to create same thread ec. Not intended to be called from any other site than to create [[akka.dispatch.ExecutionContexts#parasitic]] + * + * INTERNAL API + */ +@InternalApi +private[dispatch] object SameThreadExecutionContext { + def apply(): ExecutionContext = ExecutionContext.parasitic +} diff --git a/akka-actor/src/main/scala-3/akka/util/ByteIterator.scala b/akka-actor/src/main/scala-3/akka/util/ByteIterator.scala new file mode 100644 index 0000000000..bbc6ec8aa3 --- /dev/null +++ b/akka-actor/src/main/scala-3/akka/util/ByteIterator.scala @@ -0,0 +1,699 @@ +/* + * Copyright (C) 2009-2021 Lightbend Inc. + */ + +package akka.util + +import java.nio.{ ByteBuffer, ByteOrder } + +import scala.annotation.tailrec +import scala.collection.BufferedIterator +import scala.collection.LinearSeq +import scala.collection.mutable.ListBuffer +import scala.reflect.ClassTag + +import akka.util.Collections.EmptyImmutableSeq + +object ByteIterator { + object ByteArrayIterator { + + protected[akka] def apply(array: Array[Byte]): ByteArrayIterator = + new ByteArrayIterator(array, 0, array.length) + + protected[akka] def apply(array: Array[Byte], from: Int, until: Int): ByteArrayIterator = + new ByteArrayIterator(array, from, until) + + val empty: ByteArrayIterator = apply(Array.emptyByteArray) + } + + class ByteArrayIterator private (private var array: Array[Byte], private var from: Int, private var until: Int) + extends ByteIterator { + iterator => + + @inline final def len: Int = until - from + + @inline final def hasNext: Boolean = from < until + + @inline final def head: Byte = array(from) + + final def next(): Byte = { + if (!hasNext) EmptyImmutableSeq.iterator.next() + else { + val i = from; from = from + 1; array(i) + } + } + + def clear(): Unit = { this.array = Array.emptyByteArray; from = 0; until = from } + + final override def size: Int = { val l = len; clear(); l } + + final override def ++(that: IterableOnce[Byte]): ByteIterator = that match { + case that: ByteIterator => + if (that.isEmpty) this + else if (this.isEmpty) that + else + that match { + case that: ByteArrayIterator => + if ((this.array eq that.array) && (this.until == that.from)) { + this.until = that.until + that.clear() + this + } else { + val result = MultiByteArrayIterator(List(this, that)) + this.clear() + result + } + case that: MultiByteArrayIterator => this ++: that + } + case _ => super.++(that) + } + + final override def clone: ByteArrayIterator = new ByteArrayIterator(array, from, until) + + final override def take(n: Int): this.type = { + if (n < len) until = { if (n > 0) (from + n) else from } + this + } + + final override def drop(n: Int): this.type = { + if (n > 0) from = { if (n < len) (from + n) else until } + this + } + + final override def takeWhile(p: Byte => Boolean): this.type = { + val prev = from + dropWhile(p) + until = from; from = prev + this + } + + final override def dropWhile(p: Byte => Boolean): this.type = { + var stop = false + while (!stop && hasNext) { + if (p(array(from))) { + from = from + 1 + } else { + stop = true + } + } + this + } + + override def copyToArray[B >: Byte](xs: Array[B], start: Int): Int = + this.copyToArray(xs, start, xs.length) + + override def copyToArray[B >: Byte](xs: Array[B]): Int = + this.copyToArray(xs, 0, xs.length) + + final override def copyToArray[B >: Byte](xs: Array[B], start: Int, len: Int): Int = { + val n = 0 max ((xs.length - start) min this.len min len) + Array.copy(this.array, from, xs, start, n) + this.drop(n) + n + } + + final override def toByteString: ByteString = { + val result = + if ((from == 0) && (until == array.length)) ByteString.ByteString1C(array) + else ByteString.ByteString1(array, from, len) + clear() + result + } + + @throws[NoSuchElementException] + def getBytes(xs: Array[Byte], offset: Int, n: Int): this.type = { + if (n <= this.len) { + Array.copy(this.array, this.from, xs, offset, n) + this.drop(n) + } else throw new NoSuchElementException("next on empty iterator") + } + + private def wrappedByteBuffer: ByteBuffer = ByteBuffer.wrap(array, from, len).asReadOnlyBuffer + + def getShorts(xs: Array[Short], offset: Int, n: Int)(implicit byteOrder: ByteOrder): this.type = { + wrappedByteBuffer.order(byteOrder).asShortBuffer.get(xs, offset, n); drop(2 * n) + } + + def getInts(xs: Array[Int], offset: Int, n: Int)(implicit byteOrder: ByteOrder): this.type = { + wrappedByteBuffer.order(byteOrder).asIntBuffer.get(xs, offset, n); drop(4 * n) + } + + def getLongs(xs: Array[Long], offset: Int, n: Int)(implicit byteOrder: ByteOrder): this.type = { + wrappedByteBuffer.order(byteOrder).asLongBuffer.get(xs, offset, n); drop(8 * n) + } + + def getFloats(xs: Array[Float], offset: Int, n: Int)(implicit byteOrder: ByteOrder): this.type = { + wrappedByteBuffer.order(byteOrder).asFloatBuffer.get(xs, offset, n); drop(4 * n) + } + + def getDoubles(xs: Array[Double], offset: Int, n: Int)(implicit byteOrder: ByteOrder): this.type = { + wrappedByteBuffer.order(byteOrder).asDoubleBuffer.get(xs, offset, n); drop(8 * n) + } + + def copyToBuffer(buffer: ByteBuffer): Int = { + val copyLength = math.min(buffer.remaining, len) + if (copyLength > 0) { + buffer.put(array, from, copyLength) + drop(copyLength) + } + copyLength + } + + def asInputStream: java.io.InputStream = new java.io.InputStream { + override def available: Int = iterator.len + + def read: Int = if (hasNext) (next().toInt & 0xff) else -1 + + override def read(b: Array[Byte], off: Int, len: Int): Int = { + if ((off < 0) || (len < 0) || (off + len > b.length)) throw new IndexOutOfBoundsException + if (len == 0) 0 + else if (!isEmpty) { + val nRead = math.min(available(), len) + copyToArray(b, off, nRead) + nRead + } else -1 + } + + override def skip(n: Long): Long = { + val nSkip = math.min(iterator.len, n.toInt) + iterator.drop(nSkip) + nSkip + } + } + } + + object MultiByteArrayIterator { + protected val clearedList: List[ByteArrayIterator] = List(ByteArrayIterator.empty) + + val empty: MultiByteArrayIterator = new MultiByteArrayIterator(Nil) + + protected[akka] def apply(iterators: LinearSeq[ByteArrayIterator]): MultiByteArrayIterator = + new MultiByteArrayIterator(iterators) + } + + class MultiByteArrayIterator private (private var iterators: LinearSeq[ByteArrayIterator]) extends ByteIterator { + // After normalization: + // * iterators.isEmpty == false + // * (!iterator.head.isEmpty || iterators.tail.isEmpty) == true + private def normalize(): this.type = { + @tailrec def norm(xs: LinearSeq[ByteArrayIterator]): LinearSeq[ByteArrayIterator] = { + if (xs.isEmpty) MultiByteArrayIterator.clearedList + else if (xs.head.isEmpty) norm(xs.tail) + else xs + } + iterators = norm(iterators) + this + } + normalize() + + @inline private def current: ByteArrayIterator = iterators.head + @inline private def dropCurrent(): Unit = { iterators = iterators.tail } + @inline def clear(): Unit = { iterators = MultiByteArrayIterator.empty.iterators } + + @inline final def hasNext: Boolean = current.hasNext + + @inline final def head: Byte = current.head + + final def next(): Byte = { + val result = current.next() + normalize() + result + } + + final override def len: Int = iterators.foldLeft(0) { _ + _.len } + + final override def size: Int = { + val result = len + clear() + result + } + + private[akka] def ++:(that: ByteArrayIterator): this.type = { + iterators = that +: iterators + this + } + + final override def ++(that: IterableOnce[Byte]): ByteIterator = that match { + case that: ByteIterator => + if (that.isEmpty) this + else if (this.isEmpty) that + else { + that match { + case that: ByteArrayIterator => + iterators = this.iterators :+ that + that.clear() + this + case that: MultiByteArrayIterator => + iterators = this.iterators ++ that.iterators + that.clear() + this + } + } + case _ => super.++(that) + } + + final override def clone: MultiByteArrayIterator = { + val clonedIterators: List[ByteArrayIterator] = iterators.iterator.map(_.clone).to(List) + new MultiByteArrayIterator(clonedIterators) + } + + /** For performance sensitive code, call take() directly on ByteString (it's optimised there) */ + final override def take(n: Int): this.type = { + var rest = n + val builder = new ListBuffer[ByteArrayIterator] + while ((rest > 0) && !iterators.isEmpty) { + current.take(rest) + if (current.hasNext) { + rest -= current.len + builder += current + } + iterators = iterators.tail + } + iterators = builder.result() + normalize() + } + + /** For performance sensitive code, call drop() directly on ByteString (it's optimised there) */ + final override def drop(n: Int): this.type = + if ((n > 0) && !isEmpty) { + val nCurrent = math.min(n, current.len) + current.drop(n) + val rest = n - nCurrent + assert(current.isEmpty || (rest == 0)) + normalize() + drop(rest) + } else this + + final override def takeWhile(p: Byte => Boolean): this.type = { + var stop = false + val builder = new ListBuffer[ByteArrayIterator] + while (!stop && !iterators.isEmpty) { + val lastLen = current.len + current.takeWhile(p) + if (current.hasNext) builder += current + if (current.len < lastLen) stop = true + dropCurrent() + } + iterators = builder.result() + normalize() + } + + @tailrec final override def dropWhile(p: Byte => Boolean): this.type = + if (!isEmpty) { + current.dropWhile(p) + val dropMore = current.isEmpty + normalize() + if (dropMore) dropWhile(p) else this + } else this + + final override def copyToArray[B >: Byte](xs: Array[B], start: Int, len: Int): Int = { + var pos = start + var rest = len + while ((rest > 0) && !iterators.isEmpty && pos < xs.length) { + val n = 0 max ((xs.length - pos) min current.len min rest) + current.copyToArray(xs, pos, n) + pos += n + rest -= n + if (current.isEmpty) { + dropCurrent() + } + } + normalize() + len - rest + } + + override def foreach[@specialized U](f: Byte => U): Unit = { + iterators.foreach { _.foreach(f) } + clear() + } + + final override def toByteString: ByteString = { + if (iterators.tail.isEmpty) iterators.head.toByteString + else { + val result = iterators.foldLeft(ByteString.empty) { _ ++ _.toByteString } + clear() + result + } + } + + @tailrec protected final def getToArray[A](xs: Array[A], offset: Int, n: Int, elemSize: Int)(getSingle: => A)( + getMult: (Array[A], Int, Int) => Unit): this.type = + if (n <= 0) this + else { + if (isEmpty) EmptyImmutableSeq.iterator.next() + val nDone = if (current.len >= elemSize) { + val nCurrent = math.min(n, current.len / elemSize) + getMult(xs, offset, nCurrent) + nCurrent + } else { + xs(offset) = getSingle + 1 + } + normalize() + getToArray(xs, offset + nDone, n - nDone, elemSize)(getSingle)(getMult) + } + + def getBytes(xs: Array[Byte], offset: Int, n: Int): this.type = + getToArray(xs, offset, n, 1) { getByte } { current.getBytes(_, _, _) } + + def getShorts(xs: Array[Short], offset: Int, n: Int)(implicit byteOrder: ByteOrder): this.type = + getToArray(xs, offset, n, 2) { getShort(byteOrder) } { current.getShorts(_, _, _)(byteOrder) } + + def getInts(xs: Array[Int], offset: Int, n: Int)(implicit byteOrder: ByteOrder): this.type = + getToArray(xs, offset, n, 4) { getInt(byteOrder) } { current.getInts(_, _, _)(byteOrder) } + + def getLongs(xs: Array[Long], offset: Int, n: Int)(implicit byteOrder: ByteOrder): this.type = + getToArray(xs, offset, n, 8) { getLong(byteOrder) } { current.getLongs(_, _, _)(byteOrder) } + + def getFloats(xs: Array[Float], offset: Int, n: Int)(implicit byteOrder: ByteOrder): this.type = + getToArray(xs, offset, n, 8) { getFloat(byteOrder) } { current.getFloats(_, _, _)(byteOrder) } + + def getDoubles(xs: Array[Double], offset: Int, n: Int)(implicit byteOrder: ByteOrder): this.type = + getToArray(xs, offset, n, 8) { getDouble(byteOrder) } { current.getDoubles(_, _, _)(byteOrder) } + + /** For performance sensitive code, call copyToBuffer() directly on ByteString (it's optimised there) */ + override def copyToBuffer(buffer: ByteBuffer): Int = { + // the fold here is better than indexing into the LinearSeq + val n = iterators.foldLeft(0) { _ + _.copyToBuffer(buffer) } + normalize() + n + } + + def asInputStream: java.io.InputStream = new java.io.InputStream { + override def available: Int = current.len + + def read: Int = if (hasNext) (next().toInt & 0xff) else -1 + + override def read(b: Array[Byte], off: Int, len: Int): Int = { + val nRead = current.asInputStream.read(b, off, len) + normalize() + nRead + } + + override def skip(n: Long): Long = { + @tailrec def skipImpl(n: Long, skipped: Long): Long = + if (n > 0) { + if (!isEmpty) { + val m = current.asInputStream.skip(n) + normalize() + val newN = n - m + val newSkipped = skipped + m + if (newN > 0) skipImpl(newN, newSkipped) + else newSkipped + } else 0 + } else 0 + + skipImpl(n, 0) + } + } + } +} + +/** + * An iterator over a ByteString. + */ +abstract class ByteIterator extends BufferedIterator[Byte] { + def len: Int + + def head: Byte + + def next(): Byte + + protected def clear(): Unit + + def ++(that: IterableOnce[Byte]): ByteIterator = { + val it = that.iterator + if (it.isEmpty) this + else ByteIterator.ByteArrayIterator(it.toArray) + } + + // *must* be overridden by derived classes. This construction is necessary + // to specialize the return type, as the method is already implemented in + // the parent class. + override def clone: ByteIterator = + throw new UnsupportedOperationException("Method clone is not implemented in ByteIterator") + + override def duplicate: (ByteIterator, ByteIterator) = (this, clone) + + // *must* be overridden by derived classes. This construction is necessary + // to specialize the return type, as the method is already implemented in + // the parent class. + override def take(n: Int): this.type = + throw new UnsupportedOperationException("Method take is not implemented in ByteIterator") + + // *must* be overridden by derived classes. This construction is necessary + // to specialize the return type, as the method is already implemented in + // the parent class. + override def drop(n: Int): this.type = + throw new UnsupportedOperationException("Method drop is not implemented in ByteIterator") + + override def slice(from: Int, until: Int): this.type = { + if (from > 0) drop(from).take(until - from) + else take(until) + } + + // *must* be overridden by derived classes. This construction is necessary + // to specialize the return type, as the method is already implemented in + // the parent class. + override def takeWhile(p: Byte => Boolean): this.type = + throw new UnsupportedOperationException("Method takeWhile is not implemented in ByteIterator") + + // *must* be overridden by derived classes. This construction is necessary + // to specialize the return type, as the method is already implemented in + // the parent class. + override def dropWhile(p: Byte => Boolean): this.type = + throw new UnsupportedOperationException("Method dropWhile is not implemented in ByteIterator") + + override def span(p: Byte => Boolean): (ByteIterator, ByteIterator) = { + val that = clone + this.takeWhile(p) + that.drop(this.len) + (this, that) + } + + override def indexWhere(p: Byte => Boolean, from: Int = 0): Int = { + var index = 0 + while (index < from) { + next() + index += 1 + } + var found = false + while (!found && hasNext) if (p(next())) { + found = true + } else { + index += 1 + } + if (found) index else -1 + } + + def indexOf(elem: Byte): Int = indexOf(elem, 0) + def indexOf(elem: Byte, from: Int): Int = indexWhere(_ == elem, from) + + override def indexOf[B >: Byte](elem: B): Int = indexOf(elem, 0) + override def indexOf[B >: Byte](elem: B, from: Int): Int = indexWhere(_ == elem, from) + + def toByteString: ByteString + + override def toSeq: ByteString = toByteString + + override def foreach[@specialized U](f: Byte => U): Unit = + while (hasNext) f(next()) + + override def foldLeft[@specialized B](z: B)(op: (B, Byte) => B): B = { + var acc = z + foreach { byte => + acc = op(acc, byte) + } + acc + } + + override def toArray[B >: Byte](implicit arg0: ClassTag[B]): Array[B] = { + val target = new Array[B](len) + copyToArray(target) + target + } + + /** + * Get a single Byte from this iterator. Identical to next(). + */ + def getByte: Byte = next() + + /** + * Get a single Short from this iterator. + */ + def getShort(implicit byteOrder: ByteOrder): Short = { + if (byteOrder == ByteOrder.BIG_ENDIAN) + ((next() & 0xff) << 8 | (next() & 0xff) << 0).toShort + else if (byteOrder == ByteOrder.LITTLE_ENDIAN) + ((next() & 0xff) << 0 | (next() & 0xff) << 8).toShort + else throw new IllegalArgumentException("Unknown byte order " + byteOrder) + } + + /** + * Get a single Int from this iterator. + */ + def getInt(implicit byteOrder: ByteOrder): Int = { + if (byteOrder == ByteOrder.BIG_ENDIAN) + ((next() & 0xff) << 24 + | (next() & 0xff) << 16 + | (next() & 0xff) << 8 + | (next() & 0xff) << 0) + else if (byteOrder == ByteOrder.LITTLE_ENDIAN) + ((next() & 0xff) << 0 + | (next() & 0xff) << 8 + | (next() & 0xff) << 16 + | (next() & 0xff) << 24) + else throw new IllegalArgumentException("Unknown byte order " + byteOrder) + } + + /** + * Get a single Long from this iterator. + */ + def getLong(implicit byteOrder: ByteOrder): Long = { + if (byteOrder == ByteOrder.BIG_ENDIAN) + ((next().toLong & 0xff) << 56 + | (next().toLong & 0xff) << 48 + | (next().toLong & 0xff) << 40 + | (next().toLong & 0xff) << 32 + | (next().toLong & 0xff) << 24 + | (next().toLong & 0xff) << 16 + | (next().toLong & 0xff) << 8 + | (next().toLong & 0xff) << 0) + else if (byteOrder == ByteOrder.LITTLE_ENDIAN) + ((next().toLong & 0xff) << 0 + | (next().toLong & 0xff) << 8 + | (next().toLong & 0xff) << 16 + | (next().toLong & 0xff) << 24 + | (next().toLong & 0xff) << 32 + | (next().toLong & 0xff) << 40 + | (next().toLong & 0xff) << 48 + | (next().toLong & 0xff) << 56) + else throw new IllegalArgumentException("Unknown byte order " + byteOrder) + } + + /** + * Get a Long from this iterator where only the least significant `n` + * bytes were encoded. + */ + def getLongPart(n: Int)(implicit byteOrder: ByteOrder): Long = { + if (byteOrder == ByteOrder.BIG_ENDIAN) { + var x = 0L + (1 to n).foreach(_ => x = (x << 8) | (next() & 0xff)) + x + } else if (byteOrder == ByteOrder.LITTLE_ENDIAN) { + var x = 0L + (0 until n).foreach(i => x |= (next() & 0xff) << 8 * i) + x + } else throw new IllegalArgumentException("Unknown byte order " + byteOrder) + } + + def getFloat(implicit byteOrder: ByteOrder): Float = + java.lang.Float.intBitsToFloat(getInt(byteOrder)) + + def getDouble(implicit byteOrder: ByteOrder): Double = + java.lang.Double.longBitsToDouble(getLong(byteOrder)) + + /** + * Get a specific number of Bytes from this iterator. In contrast to + * copyToArray, this method will fail if this.len < xs.length. + */ + def getBytes(xs: Array[Byte]): this.type = getBytes(xs, 0, xs.length) + + /** + * Get a specific number of Bytes from this iterator. In contrast to + * copyToArray, this method will fail if length < n or if (xs.length - offset) < n. + */ + def getBytes(xs: Array[Byte], offset: Int, n: Int): this.type + + /** + * Get a specific number of Bytes from this iterator. In contrast to + * copyToArray, this method will fail if this.len < n. + */ + def getBytes(n: Int): Array[Byte] = { + val bytes = new Array[Byte](n) + getBytes(bytes, 0, n) + bytes + } + + /** + * Get a ByteString with specific number of Bytes from this iterator. In contrast to + * copyToArray, this method will fail if this.len < n. + */ + def getByteString(n: Int): ByteString = { + val bs = clone.take(n).toByteString + drop(n) + bs + } + + /** + * Get a number of Shorts from this iterator. + */ + def getShorts(xs: Array[Short])(implicit byteOrder: ByteOrder): this.type = + getShorts(xs, 0, xs.length)(byteOrder) + + /** + * Get a number of Shorts from this iterator. + */ + def getShorts(xs: Array[Short], offset: Int, n: Int)(implicit byteOrder: ByteOrder): this.type + + /** + * Get a number of Ints from this iterator. + */ + def getInts(xs: Array[Int])(implicit byteOrder: ByteOrder): this.type = + getInts(xs, 0, xs.length)(byteOrder) + + /** + * Get a number of Ints from this iterator. + */ + def getInts(xs: Array[Int], offset: Int, n: Int)(implicit byteOrder: ByteOrder): this.type + + /** + * Get a number of Longs from this iterator. + */ + def getLongs(xs: Array[Long])(implicit byteOrder: ByteOrder): this.type = + getLongs(xs, 0, xs.length)(byteOrder) + + /** + * Get a number of Longs from this iterator. + */ + def getLongs(xs: Array[Long], offset: Int, n: Int)(implicit byteOrder: ByteOrder): this.type + + /** + * Get a number of Floats from this iterator. + */ + def getFloats(xs: Array[Float])(implicit byteOrder: ByteOrder): this.type = + getFloats(xs, 0, xs.length)(byteOrder) + + /** + * Get a number of Floats from this iterator. + */ + def getFloats(xs: Array[Float], offset: Int, n: Int)(implicit byteOrder: ByteOrder): this.type + + /** + * Get a number of Doubles from this iterator. + */ + def getDoubles(xs: Array[Double])(implicit byteOrder: ByteOrder): this.type = + getDoubles(xs, 0, xs.length)(byteOrder) + + /** + * Get a number of Doubles from this iterator. + */ + def getDoubles(xs: Array[Double], offset: Int, n: Int)(implicit byteOrder: ByteOrder): this.type + + /** + * Copy as many bytes as possible to a ByteBuffer, starting from it's + * current position. This method will not overflow the buffer. + * + * @param buffer a ByteBuffer to copy bytes to + * @return the number of bytes actually copied + */ + /** For performance sensitive code, call take() directly on ByteString (it's optimised there) */ + def copyToBuffer(buffer: ByteBuffer): Int + + /** + * Directly wraps this ByteIterator in an InputStream without copying. + * Read and skip operations on the stream will advance the iterator + * accordingly. + */ + def asInputStream: java.io.InputStream +} diff --git a/akka-actor/src/main/scala-3/akka/util/ByteString.scala b/akka-actor/src/main/scala-3/akka/util/ByteString.scala new file mode 100644 index 0000000000..852e837079 --- /dev/null +++ b/akka-actor/src/main/scala-3/akka/util/ByteString.scala @@ -0,0 +1,1380 @@ +/* + * Copyright (C) 2009-2021 Lightbend Inc. + */ + +package akka.util + +import java.io.{ ObjectInputStream, ObjectOutputStream } +import java.lang.{ Iterable => JIterable } +import java.nio.{ ByteBuffer, ByteOrder } +import java.nio.charset.{ Charset, StandardCharsets } +import java.util.Base64 + +import scala.annotation.{ tailrec, varargs } +import scala.collection.{ immutable, mutable } +import scala.collection.immutable.{ IndexedSeq, IndexedSeqOps, StrictOptimizedSeqOps, VectorBuilder } +import scala.collection.mutable.{ Builder, WrappedArray } +import scala.reflect.ClassTag + +import scala.annotation.nowarn + +object ByteString { + + /** + * Creates a new ByteString by copying a byte array. + */ + def apply(bytes: Array[Byte]): ByteString = CompactByteString(bytes) + + /** + * Creates a new ByteString by copying bytes. + */ + def apply(bytes: Byte*): ByteString = CompactByteString(bytes: _*) + + /** + * Creates a new ByteString by iterating over bytes. + */ + def apply(bytes: IterableOnce[Byte]): ByteString = CompactByteString(bytes) + + /** + * Creates a new ByteString by converting from integral numbers to bytes. + */ + def apply[T](bytes: T*)(implicit num: Integral[T]): ByteString = + CompactByteString(bytes: _*)(num) + + /** + * Creates a new ByteString by copying bytes from a ByteBuffer. + */ + def apply(bytes: ByteBuffer): ByteString = CompactByteString(bytes) + + /** + * Creates a new ByteString by encoding a String as UTF-8. + */ + def apply(string: String): ByteString = apply(string, StandardCharsets.UTF_8) + + /** + * Creates a new ByteString by encoding a String with a charset. + */ + def apply(string: String, charset: String): ByteString = CompactByteString(string, charset) + + /** + * Creates a new ByteString by encoding a String with a charset. + */ + def apply(string: String, charset: Charset): ByteString = CompactByteString(string, charset) + + /** + * Creates a new ByteString by copying a byte array. + */ + def fromArray(array: Array[Byte]): ByteString = apply(array) + + /** + * Unsafe API: Use only in situations you are completely confident that this is what + * you need, and that you understand the implications documented below. + * + * Creates a ByteString without copying the passed in byte array, unlike other factory + * methods defined on ByteString. This method of creating a ByteString saves one array + * copy and allocation and therefore can lead to better performance, however it also means + * that one MUST NOT modify the passed in array, or unexpected immutable data structure + * contract-breaking behavior will manifest itself. + * + * This API is intended for users who have obtained an byte array from some other API, and + * want wrap it into an ByteArray, and from there on only use that reference (the ByteString) + * to operate on the wrapped data. For all other intents and purposes, please use the usual + * apply and create methods - which provide the immutability guarantees by copying the array. + * + */ + def fromArrayUnsafe(array: Array[Byte]): ByteString = ByteString1C(array) + + /** + * Creates a new ByteString by copying length bytes starting at offset from + * an Array. + */ + def fromArray(array: Array[Byte], offset: Int, length: Int): ByteString = + CompactByteString.fromArray(array, offset, length) + + /** + * Unsafe API: Use only in situations you are completely confident that this is what + * you need, and that you understand the implications documented below. + * + * Creates a ByteString without copying the passed in byte array, unlike other factory + * methods defined on ByteString. This method of creating a ByteString saves one array + * copy and allocation and therefore can lead to better performance, however it also means + * that one MUST NOT modify the passed in array, or unexpected immutable data structure + * contract-breaking behavior will manifest itself. + * + * This API is intended for users who have obtained an byte array from some other API, and + * want wrap it into an ByteArray, and from there on only use that reference (the ByteString) + * to operate on the wrapped data. For all other intents and purposes, please use the usual + * apply and create methods - which provide the immutability guarantees by copying the array. + * + */ + def fromArrayUnsafe(array: Array[Byte], offset: Int, length: Int): ByteString = ByteString1(array, offset, length) + + /** + * JAVA API + * Creates a new ByteString by copying an int array by converting from integral numbers to bytes. + */ + @varargs + def fromInts(array: Int*): ByteString = + apply(array: _*)(scala.math.Numeric.IntIsIntegral) + + /** + * Creates a new ByteString which will contain the UTF-8 representation of the given String + */ + def fromString(string: String): ByteString = apply(string) + + /** + * Creates a new ByteString which will contain the representation of the given String in the given charset + */ + def fromString(string: String, charset: String): ByteString = apply(string, charset) + + /** + * Creates a new ByteString which will contain the representation of the given String in the given charset + */ + def fromString(string: String, charset: Charset): ByteString = apply(string, charset) + + /** + * Standard "UTF-8" charset + */ + val UTF_8: String = StandardCharsets.UTF_8.name() + + /** + * Creates a new ByteString by copying bytes out of a ByteBuffer. + */ + def fromByteBuffer(buffer: ByteBuffer): ByteString = apply(buffer) + + val empty: ByteString = ByteString1C.empty + + /** Java API */ + def emptyByteString: ByteString = empty + + def newBuilder: ByteStringBuilder = new ByteStringBuilder + + /** Java API */ + def createBuilder: ByteStringBuilder = new ByteStringBuilder + + // implicit val canBuildFrom: CanBuildFrom[TraversableOnce[Byte], Byte, ByteString] = + // new CanBuildFrom[TraversableOnce[Byte], Byte, ByteString] { + // override def apply(ignore: TraversableOnce[Byte]): ByteStringBuilder = new ByteStringBuilder + // } + + private[akka] object ByteString1C extends Companion { + val empty = new ByteString1C(Array.emptyByteArray) + + def fromString(s: String): ByteString1C = new ByteString1C(s.getBytes) + def apply(bytes: Array[Byte]): ByteString1C = new ByteString1C(bytes) + val SerializationIdentity = 1.toByte + + def readFromInputStream(is: ObjectInputStream): ByteString1C = { + val length = is.readInt() + val arr = new Array[Byte](length) + is.readFully(arr, 0, length) + ByteString1C(arr) + } + } + + /** + * A compact (unsliced) and unfragmented ByteString, implementation of ByteString1C. + */ + @SerialVersionUID(3956956327691936932L) + final class ByteString1C private (private val bytes: Array[Byte]) extends CompactByteString { + def apply(idx: Int): Byte = bytes(idx) + + override def length: Int = bytes.length + + // Avoid `iterator` in performance sensitive code, call ops directly on ByteString instead + override def iterator: ByteIterator.ByteArrayIterator = ByteIterator.ByteArrayIterator(bytes, 0, bytes.length) + + /** INTERNAL API */ + private[akka] def toByteString1: ByteString1 = ByteString1(bytes, 0, bytes.length) + + /** INTERNAL API */ + private[akka] def byteStringCompanion = ByteString1C + + override def asByteBuffer: ByteBuffer = toByteString1.asByteBuffer + + override def asByteBuffers: scala.collection.immutable.Iterable[ByteBuffer] = List(asByteBuffer) + + override def decodeString(charset: String): String = + if (isEmpty) "" else new String(bytes, charset) + + override def decodeString(charset: Charset): String = + if (isEmpty) "" else new String(bytes, charset) + + override def decodeBase64: ByteString = + if (isEmpty) this else ByteString1C(Base64.getDecoder.decode(bytes)) + + override def encodeBase64: ByteString = + if (isEmpty) this else ByteString1C(Base64.getEncoder.encode(bytes)) + + override def ++(that: ByteString): ByteString = { + if (that.isEmpty) this + else if (this.isEmpty) that + else toByteString1 ++ that + } + + override def take(n: Int): ByteString = + if (n <= 0) ByteString.empty + else if (n >= length) this + else toByteString1.take(n) + + override def dropRight(n: Int): ByteString = + if (n <= 0) this + else toByteString1.dropRight(n) + + override def drop(n: Int): ByteString = + if (n <= 0) this + else toByteString1.drop(n) + + override def indexOf[B >: Byte](elem: B, from: Int): Int = { + if (from >= length) -1 + else { + var found = -1 + var i = math.max(from, 0) + while (i < length && found == -1) { + if (bytes(i) == elem) found = i + i += 1 + } + found + } + } + + override def slice(from: Int, until: Int): ByteString = + if (from <= 0 && until >= length) this + else if (from >= length || until <= 0 || from >= until) ByteString.empty + else toByteString1.slice(from, until) + + private[akka] override def writeToOutputStream(os: ObjectOutputStream): Unit = + toByteString1.writeToOutputStream(os) + + override def copyToBuffer(buffer: ByteBuffer): Int = + writeToBuffer(buffer, offset = 0) + + /** INTERNAL API: Specialized for internal use, writing multiple ByteString1C into the same ByteBuffer. */ + private[akka] def writeToBuffer(buffer: ByteBuffer, offset: Int): Int = { + val copyLength = Math.min(buffer.remaining, offset + length) + if (copyLength > 0) { + buffer.put(bytes, offset, copyLength) + } + copyLength + } + + /** INTERNAL API: Specialized for internal use, appending ByteString1C to a ByteStringBuilder. */ + private[akka] def appendToBuilder(buffer: ByteStringBuilder) = { + buffer.putByteArrayUnsafe(bytes) + } + + override def copyToArray[B >: Byte](dest: Array[B], start: Int, len: Int): Int = { + val toCopy = math.min(math.min(len, bytes.length), dest.length - start) + if (toCopy > 0) { + Array.copy(bytes, 0, dest, start, toCopy) + } + toCopy + } + + } + + /** INTERNAL API: ByteString backed by exactly one array, with start / end markers */ + private[akka] object ByteString1 extends Companion { + val empty: ByteString1 = new ByteString1(Array.emptyByteArray, 0, 0) + def fromString(s: String): ByteString1 = apply(s.getBytes) + def apply(bytes: Array[Byte]): ByteString1 = apply(bytes, 0, bytes.length) + def apply(bytes: Array[Byte], startIndex: Int, length: Int): ByteString1 = + if (length == 0) empty + else new ByteString1(bytes, Math.max(0, startIndex), Math.max(0, length)) + + val SerializationIdentity = 0.toByte + + def readFromInputStream(is: ObjectInputStream): ByteString1 = + ByteString1C.readFromInputStream(is).toByteString1 + } + + /** + * An unfragmented ByteString. + */ + final class ByteString1 private (private val bytes: Array[Byte], private val startIndex: Int, val length: Int) + extends ByteString + with Serializable { + + def apply(idx: Int): Byte = bytes(checkRangeConvert(idx)) + + // Avoid `iterator` in performance sensitive code, call ops directly on ByteString instead + override def iterator: ByteIterator.ByteArrayIterator = + ByteIterator.ByteArrayIterator(bytes, startIndex, startIndex + length) + + private def checkRangeConvert(index: Int): Int = { + if (0 <= index && length > index) + index + startIndex + else + throw new IndexOutOfBoundsException(index.toString) + } + + private[akka] def writeToOutputStream(os: ObjectOutputStream): Unit = { + os.writeInt(length) + os.write(bytes, startIndex, length) + } + + def isCompact: Boolean = (length == bytes.length) + + private[akka] def byteStringCompanion = ByteString1 + + override def dropRight(n: Int): ByteString = + dropRight1(n) + + /** INTERNAL API */ + private[akka] def dropRight1(n: Int): ByteString1 = + if (n <= 0) this + else if (length - n <= 0) ByteString1.empty + else new ByteString1(bytes, startIndex, length - n) + + override def drop(n: Int): ByteString = + if (n <= 0) this else drop1(n) + + /** INTERNAL API */ + private[akka] def drop1(n: Int): ByteString1 = { + val nextStartIndex = startIndex + n + if (nextStartIndex >= bytes.length) ByteString1.empty + else ByteString1(bytes, nextStartIndex, length - n) + } + + override def take(n: Int): ByteString = + if (n <= 0) ByteString.empty else take1(n) + + private[akka] def take1(n: Int): ByteString1 = + if (n >= length) this + else ByteString1(bytes, startIndex, n) + + override def slice(from: Int, until: Int): ByteString = + drop(from).take(until - Math.max(0, from)) + + override def copyToBuffer(buffer: ByteBuffer): Int = + writeToBuffer(buffer) + + /** INTERNAL API: Specialized for internal use, writing multiple ByteString1C into the same ByteBuffer. */ + private[akka] def writeToBuffer(buffer: ByteBuffer): Int = { + val copyLength = Math.min(buffer.remaining, length) + if (copyLength > 0) { + buffer.put(bytes, startIndex, copyLength) + } + copyLength + } + + def compact: CompactByteString = + if (isCompact) ByteString1C(bytes) else ByteString1C(toArray) + + def asByteBuffer: ByteBuffer = { + val buffer = ByteBuffer.wrap(bytes, startIndex, length).asReadOnlyBuffer + if (buffer.remaining < bytes.length) buffer.slice + else buffer + } + + def asByteBuffers: scala.collection.immutable.Iterable[ByteBuffer] = List(asByteBuffer) + + override def decodeString(charset: String): String = + if (isEmpty) "" + else new String(bytes, startIndex, length, charset) + + override def decodeString(charset: Charset): String = // avoids Charset.forName lookup in String internals + if (isEmpty) "" + else new String(bytes, startIndex, length, charset) + + override def decodeBase64: ByteString = + if (isEmpty) this + else if (isCompact) ByteString1C(Base64.getDecoder.decode(bytes)) + else { + val dst = Base64.getDecoder.decode(ByteBuffer.wrap(bytes, startIndex, length)) + if (dst.hasArray) { + if (dst.array.length == dst.remaining) ByteString1C(dst.array) + else ByteString1(dst.array, dst.arrayOffset + dst.position(), dst.remaining) + } else CompactByteString(dst) + } + + override def encodeBase64: ByteString = + if (isEmpty) this + else if (isCompact) ByteString1C(Base64.getEncoder.encode(bytes)) + else { + val dst = Base64.getEncoder.encode(ByteBuffer.wrap(bytes, startIndex, length)) + if (dst.hasArray) { + if (dst.array.length == dst.remaining) ByteString1C(dst.array) + else ByteString1(dst.array, dst.arrayOffset + dst.position(), dst.remaining) + } else CompactByteString(dst) + } + + def ++(that: ByteString): ByteString = { + if (that.isEmpty) this + else if (this.isEmpty) that + else + that match { + case b: ByteString1C => ByteStrings(this, b.toByteString1) + case b: ByteString1 => + if ((bytes eq b.bytes) && (startIndex + length == b.startIndex)) + new ByteString1(bytes, startIndex, length + b.length) + else ByteStrings(this, b) + case bs: ByteStrings => ByteStrings(this, bs) + } + } + + override def indexOf[B >: Byte](elem: B, from: Int): Int = { + if (from >= length) -1 + else { + var found = -1 + var i = math.max(from, 0) + while (i < length && found == -1) { + if (bytes(startIndex + i) == elem) found = i + i += 1 + } + found + } + } + + override def copyToArray[B >: Byte](dest: Array[B], start: Int, len: Int): Int = { + // min of the bytes available to copy, bytes there is room for in dest and the requested number of bytes + val toCopy = math.min(math.min(len, length), dest.length - start) + if (toCopy > 0) { + Array.copy(bytes, startIndex, dest, start, toCopy) + } + toCopy + } + + protected def writeReplace(): AnyRef = new SerializationProxy(this) + } + + private[akka] object ByteStrings extends Companion { + def apply(bytestrings: Vector[ByteString1]): ByteString = + new ByteStrings(bytestrings, bytestrings.foldLeft(0)(_ + _.length)) + + def apply(bytestrings: Vector[ByteString1], length: Int): ByteString = new ByteStrings(bytestrings, length) + + def apply(b1: ByteString1, b2: ByteString1): ByteString = compare(b1, b2) match { + case 3 => new ByteStrings(Vector(b1, b2), b1.length + b2.length) + case 2 => b2 + case 1 => b1 + case 0 => ByteString.empty + } + + def apply(b: ByteString1, bs: ByteStrings): ByteString = compare(b, bs) match { + case 3 => new ByteStrings(b +: bs.bytestrings, bs.length + b.length) + case 2 => bs + case 1 => b + case 0 => ByteString.empty + } + + def apply(bs: ByteStrings, b: ByteString1): ByteString = compare(bs, b) match { + case 3 => new ByteStrings(bs.bytestrings :+ b, bs.length + b.length) + case 2 => b + case 1 => bs + case 0 => ByteString.empty + } + + def apply(bs1: ByteStrings, bs2: ByteStrings): ByteString = compare(bs1, bs2) match { + case 3 => new ByteStrings(bs1.bytestrings ++ bs2.bytestrings, bs1.length + bs2.length) + case 2 => bs2 + case 1 => bs1 + case 0 => ByteString.empty + } + + // 0: both empty, 1: 2nd empty, 2: 1st empty, 3: neither empty + def compare(b1: ByteString, b2: ByteString): Int = + if (b1.isEmpty) + if (b2.isEmpty) 0 else 2 + else if (b2.isEmpty) 1 + else 3 + + val SerializationIdentity = 2.toByte + + def readFromInputStream(is: ObjectInputStream): ByteStrings = { + val nByteStrings = is.readInt() + + val builder = new VectorBuilder[ByteString1] + var length = 0 + + builder.sizeHint(nByteStrings) + + for (_ <- 0 until nByteStrings) { + val bs = ByteString1.readFromInputStream(is) + builder += bs + length += bs.length + } + + new ByteStrings(builder.result(), length) + } + } + + /** + * A ByteString with 2 or more fragments. + */ + final class ByteStrings private (private[akka] val bytestrings: Vector[ByteString1], val length: Int) + extends ByteString + with Serializable { + if (bytestrings.isEmpty) throw new IllegalArgumentException("bytestrings must not be empty") + if (bytestrings.head.isEmpty) throw new IllegalArgumentException("bytestrings.head must not be empty") + + def apply(idx: Int): Byte = { + if (0 <= idx && idx < length) { + var pos = 0 + var seen = 0 + while (idx >= seen + bytestrings(pos).length) { + seen += bytestrings(pos).length + pos += 1 + } + bytestrings(pos)(idx - seen) + } else throw new IndexOutOfBoundsException(idx.toString) + } + + /** Avoid `iterator` in performance sensitive code, call ops directly on ByteString instead */ + override def iterator: ByteIterator.MultiByteArrayIterator = + ByteIterator.MultiByteArrayIterator(bytestrings.to(LazyList).map { _.iterator }) + + def ++(that: ByteString): ByteString = { + if (that.isEmpty) this + else if (this.isEmpty) that + else + that match { + case b: ByteString1C => ByteStrings(this, b.toByteString1) + case b: ByteString1 => ByteStrings(this, b) + case bs: ByteStrings => ByteStrings(this, bs) + } + } + + private[akka] def byteStringCompanion = ByteStrings + + def isCompact: Boolean = if (bytestrings.length == 1) bytestrings.head.isCompact else false + + override def copyToBuffer(buffer: ByteBuffer): Int = { + @tailrec def copyItToTheBuffer(buffer: ByteBuffer, i: Int, written: Int): Int = + if (i < bytestrings.length) copyItToTheBuffer(buffer, i + 1, written + bytestrings(i).writeToBuffer(buffer)) + else written + + copyItToTheBuffer(buffer, 0, 0) + } + + def compact: CompactByteString = { + if (isCompact) bytestrings.head.compact + else { + val ar = new Array[Byte](length) + var pos = 0 + bytestrings.foreach { b => + b.copyToArray(ar, pos, b.length) + pos += b.length + } + ByteString1C(ar) + } + } + + def asByteBuffer: ByteBuffer = compact.asByteBuffer + + def asByteBuffers: scala.collection.immutable.Iterable[ByteBuffer] = bytestrings.map { _.asByteBuffer } + + def decodeString(charset: String): String = compact.decodeString(charset) + + def decodeString(charset: Charset): String = compact.decodeString(charset) + + override def decodeBase64: ByteString = compact.decodeBase64 + + override def encodeBase64: ByteString = compact.encodeBase64 + + private[akka] def writeToOutputStream(os: ObjectOutputStream): Unit = { + os.writeInt(bytestrings.length) + bytestrings.foreach(_.writeToOutputStream(os)) + } + + override def take(n: Int): ByteString = + if (n <= 0) ByteString.empty + else if (n >= length) this + else take0(n) + + private[akka] def take0(n: Int): ByteString = { + @tailrec def go(last: Int, restToTake: Int): (Int, Int) = { + val bs = bytestrings(last) + if (bs.length > restToTake) (last, restToTake) + else go(last + 1, restToTake - bs.length) + } + + val (last, restToTake) = go(0, n) + + if (last == 0) bytestrings(last).take(restToTake) + else if (restToTake == 0) new ByteStrings(bytestrings.take(last), n) + else new ByteStrings(bytestrings.take(last) :+ bytestrings(last).take1(restToTake), n) + } + + override def dropRight(n: Int): ByteString = + if (0 < n && n < length) dropRight0(n) + else if (n >= length) ByteString.empty + else this + + private def dropRight0(n: Int): ByteString = { + val byteStringsSize = bytestrings.length + @tailrec def dropRightWithFullDropsAndRemainig(fullDrops: Int, remainingToDrop: Int): ByteString = { + val bs = bytestrings(byteStringsSize - fullDrops - 1) + if (bs.length > remainingToDrop) { + if (fullDrops == byteStringsSize - 1) + bytestrings(0).dropRight(remainingToDrop) + else if (remainingToDrop == 0) + new ByteStrings(bytestrings.dropRight(fullDrops), length - n) + else + new ByteStrings( + bytestrings.dropRight(fullDrops + 1) :+ bytestrings(byteStringsSize - fullDrops - 1) + .dropRight1(remainingToDrop), + length - n) + } else { + dropRightWithFullDropsAndRemainig(fullDrops + 1, remainingToDrop - bs.length) + } + } + + dropRightWithFullDropsAndRemainig(0, n) + } + + override def slice(from: Int, until: Int): ByteString = + if (from <= 0 && until >= length) this + else if (from > length || until <= from) ByteString.empty + else drop(from).dropRight(length - until) + + override def drop(n: Int): ByteString = + if (n <= 0) this + else if (n >= length) ByteString.empty + else drop0(n) + + private def drop0(n: Int): ByteString = { + // impl note: could be optimised a bit by using VectorIterator instead, + // however then we're forced to call .toVector which halfs performance + // We can work around that, as there's a Scala private method "remainingVector" which is fast, + // but let's not go into calling private APIs here just yet. + @tailrec def findSplit(fullDrops: Int, remainingToDrop: Int): (Int, Int) = { + val bs = bytestrings(fullDrops) + if (bs.length > remainingToDrop) (fullDrops, remainingToDrop) + else findSplit(fullDrops + 1, remainingToDrop - bs.length) + } + + val (fullDrops, remainingToDrop) = findSplit(0, n) + + if (remainingToDrop == 0) + new ByteStrings(bytestrings.drop(fullDrops), length - n) + else if (fullDrops == bytestrings.length - 1) + bytestrings(fullDrops).drop(remainingToDrop) + else + new ByteStrings(bytestrings(fullDrops).drop1(remainingToDrop) +: bytestrings.drop(fullDrops + 1), length - n) + } + + override def indexOf[B >: Byte](elem: B, from: Int): Int = { + if (from >= length) -1 + else { + val byteStringsSize = bytestrings.size + + @tailrec + def find(bsIdx: Int, relativeIndex: Int, bytesPassed: Int): Int = { + if (bsIdx >= byteStringsSize) -1 + else { + val bs = bytestrings(bsIdx) + + if (bs.length <= relativeIndex) { + find(bsIdx + 1, relativeIndex - bs.length, bytesPassed + bs.length) + } else { + val subIndexOf = bs.indexOf(elem, relativeIndex) + if (subIndexOf < 0) { + val nextString = bsIdx + 1 + find(nextString, relativeIndex - bs.length, bytesPassed + bs.length) + } else subIndexOf + bytesPassed + } + } + } + + find(0, math.max(from, 0), 0) + } + } + + override def copyToArray[B >: Byte](dest: Array[B], start: Int, len: Int): Int = { + if (bytestrings.size == 1) bytestrings.head.copyToArray(dest, start, len) + else { + // min of the bytes available to copy, bytes there is room for in dest and the requested number of bytes + val totalToCopy = math.min(math.min(len, length), dest.length - start) + if (totalToCopy > 0) { + val bsIterator = bytestrings.iterator + var copied = 0 + while (copied < totalToCopy) { + val current = bsIterator.next() + copied += current.copyToArray(dest, start + copied, totalToCopy - copied) + } + } + totalToCopy + } + } + + protected def writeReplace(): AnyRef = new SerializationProxy(this) + } + + @SerialVersionUID(1L) + private class SerializationProxy(@transient private var orig: ByteString) extends Serializable { + private def writeObject(out: ObjectOutputStream): Unit = { + out.writeByte(orig.byteStringCompanion.SerializationIdentity) + orig.writeToOutputStream(out) + } + + private def readObject(in: ObjectInputStream): Unit = { + val serializationId = in.readByte() + + orig = Companion(from = serializationId).readFromInputStream(in) + } + + private def readResolve(): AnyRef = orig + } + + private[akka] object Companion { + private val companionMap = Seq(ByteString1, ByteString1C, ByteStrings) + .map(x => x.SerializationIdentity -> x) + .toMap + .withDefault(x => throw new IllegalArgumentException("Invalid serialization id " + x)) + + def apply(from: Byte): Companion = companionMap(from) + } + + private[akka] sealed trait Companion { + def SerializationIdentity: Byte + def readFromInputStream(is: ObjectInputStream): ByteString + } +} + +/** + * A rope-like immutable data structure containing bytes. + * The goal of this structure is to reduce copying of arrays + * when concatenating and slicing sequences of bytes, + * and also providing a thread safe way of working with bytes. + * + * TODO: Add performance characteristics + */ +sealed abstract class ByteString + extends IndexedSeq[Byte] + with IndexedSeqOps[Byte, IndexedSeq, ByteString] + with StrictOptimizedSeqOps[Byte, IndexedSeq, ByteString] { + + override protected def fromSpecific(coll: IterableOnce[Byte]): ByteString = ByteString(coll) + override protected def newSpecificBuilder: mutable.Builder[Byte, ByteString] = ByteString.newBuilder + override def empty: ByteString = ByteString.empty + + def apply(idx: Int): Byte + private[akka] def byteStringCompanion: ByteString.Companion + // override so that toString will also be `ByteString(...)` for the concrete subclasses + // of ByteString which changed for Scala 2.12, see https://github.com/akka/akka/issues/21774 + override final def className: String = "ByteString" + + override def isEmpty: Boolean = length == 0 + + // override protected[this] def newBuilder: ByteStringBuilder = ByteString.newBuilder + + // *must* be overridden by derived classes. This construction is necessary + // to specialize the return type, as the method is already implemented in + // a parent trait. + // + // Avoid `iterator` in performance sensitive code, call ops directly on ByteString instead + override def iterator: ByteIterator = + throw new UnsupportedOperationException("Method iterator is not implemented in ByteString") + + override def head: Byte = apply(0) + override def tail: ByteString = drop(1) + override def last: Byte = apply(length - 1) + override def init: ByteString = dropRight(1) + + // *must* be overridden by derived classes. + override def take(n: Int): ByteString = + throw new UnsupportedOperationException("Method take is not implemented in ByteString") + override def takeRight(n: Int): ByteString = slice(length - n, length) + + // these methods are optimized in derived classes utilising the maximum knowlage about data layout available to them: + // *must* be overridden by derived classes. + override def slice(from: Int, until: Int): ByteString = + throw new UnsupportedOperationException("Method slice is not implemented in ByteString") + + // *must* be overridden by derived classes. + override def drop(n: Int): ByteString = + throw new UnsupportedOperationException("Method drop is not implemented in ByteString") + + // *must* be overridden by derived classes. + override def dropRight(n: Int): ByteString = + throw new UnsupportedOperationException("Method dropRight is not implemented in ByteString") + + override def takeWhile(p: Byte => Boolean): ByteString = iterator.takeWhile(p).toByteString + override def dropWhile(p: Byte => Boolean): ByteString = iterator.dropWhile(p).toByteString + override def span(p: Byte => Boolean): (ByteString, ByteString) = { + val (a, b) = iterator.span(p); (a.toByteString, b.toByteString) + } + + override def splitAt(n: Int): (ByteString, ByteString) = (take(n), drop(n)) + + override def indexWhere(p: Byte => Boolean, from: Int): Int = iterator.indexWhere(p, from) + + // optimized in subclasses + override def indexOf[B >: Byte](elem: B, from: Int): Int = indexOf(elem, from) + + override def grouped(size: Int): Iterator[ByteString] = { + if (size <= 0) { + throw new IllegalArgumentException(s"size=$size must be positive") + } + + Iterator.iterate(this)(_.drop(size)).takeWhile(_.nonEmpty).map(_.take(size)) + } + + override def toString(): String = { + val maxSize = 100 + if (size > maxSize) + take(maxSize).toString + s"... and [${size - maxSize}] more" + else + super.toString + } + + /** + * Java API: copy this ByteString into a fresh byte array + * + * @return this ByteString copied into a byte array + */ + protected[ByteString] def toArray: Array[Byte] = toArray[Byte] + + final override def toArray[B >: Byte](implicit arg0: ClassTag[B]): Array[B] = { + // super uses byteiterator + val array = new Array[B](size) + copyToArray(array, 0, size) + array + } + + final override def copyToArray[B >: Byte](xs: Array[B], start: Int): Int = { + // super uses byteiterator + copyToArray(xs, start, size.min(xs.size)) + } + + // optimized in all subclasses, avoiding usage of the iterator to save allocations/transformations + override def copyToArray[B >: Byte](xs: Array[B], start: Int, len: Int): Int = + throw new UnsupportedOperationException("Method copyToArray is not implemented in ByteString") + + override def foreach[@specialized U](f: Byte => U): Unit = iterator.foreach(f) + + private[akka] def writeToOutputStream(os: ObjectOutputStream): Unit + + /** + * Efficiently concatenate another ByteString. + */ + def ++(that: ByteString): ByteString + + /** + * Java API: efficiently concatenate another ByteString. + */ + def concat(that: ByteString): ByteString = this ++ that + + /** + * Copy as many bytes as possible to a ByteBuffer, starting from it's + * current position. This method will not overflow the buffer. + * + * @param buffer a ByteBuffer to copy bytes to + * @return the number of bytes actually copied + */ + def copyToBuffer(@unused buffer: ByteBuffer): Int + + /** + * Create a new ByteString with all contents compacted into a single, + * full byte array. + * If isCompact returns true, compact is an O(1) operation, but + * might return a different object with an optimized implementation. + */ + def compact: CompactByteString + + /** + * Check whether this ByteString is compact in memory. + * If the ByteString is compact, it might, however, not be represented + * by an object that takes full advantage of that fact. Use compact to + * get such an object. + */ + def isCompact: Boolean + + /** + * Returns a read-only ByteBuffer that directly wraps this ByteString + * if it is not fragmented. + */ + def asByteBuffer: ByteBuffer + + /** + * Scala API: Returns an immutable Iterable of read-only ByteBuffers that directly wraps this ByteStrings + * all fragments. Will always have at least one entry. + */ + def asByteBuffers: immutable.Iterable[ByteBuffer] + + /** + * Java API: Returns an Iterable of read-only ByteBuffers that directly wraps this ByteStrings + * all fragments. Will always have at least one entry. + */ + @nowarn + def getByteBuffers(): JIterable[ByteBuffer] = { + import scala.collection.JavaConverters.asJavaIterableConverter + asByteBuffers.asJava + } + + /** + * Creates a new ByteBuffer with a copy of all bytes contained in this + * ByteString. + */ + def toByteBuffer: ByteBuffer = ByteBuffer.wrap(toArray) + + /** + * Decodes this ByteString as a UTF-8 encoded String. + */ + final def utf8String: String = decodeString(StandardCharsets.UTF_8) + + /** + * Decodes this ByteString using a charset to produce a String. + * If you have a [[Charset]] instance available, use `decodeString(charset: java.nio.charset.Charset` instead. + */ + def decodeString(charset: String): String + + /** + * Decodes this ByteString using a charset to produce a String. + * Avoids Charset.forName lookup in String internals, thus is preferable to `decodeString(charset: String)`. + */ + def decodeString(charset: Charset): String + + /* + * Returns a ByteString which is the binary representation of this ByteString + * if this ByteString is Base64-encoded. + */ + def decodeBase64: ByteString + + /** + * Returns a ByteString which is the Base64 representation of this ByteString + */ + def encodeBase64: ByteString + + /** + * map method that will automatically cast Int back into Byte. + */ + final def mapI(f: Byte => Int): ByteString = map(f.andThen(_.toByte)) + + def map[A](f: Byte => Byte): ByteString = fromSpecific(super.map(f)) +} + +object CompactByteString { + + /** + * Creates a new CompactByteString by copying a byte array. + */ + def apply(bytes: Array[Byte]): CompactByteString = + if (bytes.isEmpty) empty else ByteString.ByteString1C(bytes.clone) + + /** + * Creates a new CompactByteString by copying bytes. + */ + def apply(bytes: Byte*): CompactByteString = { + if (bytes.isEmpty) empty + else { + val ar = new Array[Byte](bytes.size) + bytes.copyToArray(ar) + ByteString.ByteString1C(ar) + } + } + + /** + * Creates a new CompactByteString by traversing bytes. + */ + def apply(bytes: IterableOnce[Byte]): CompactByteString = { + val it = bytes.iterator + if (it.isEmpty) empty + else ByteString.ByteString1C(it.toArray) + } + + /** + * Creates a new CompactByteString by converting from integral numbers to bytes. + */ + def apply[T](bytes: T*)(implicit num: Integral[T]): CompactByteString = { + if (bytes.isEmpty) empty + else ByteString.ByteString1C(bytes.iterator.map(x => num.toInt(x).toByte).to(Array)) + } + + /** + * Creates a new CompactByteString by copying bytes from a ByteBuffer. + */ + def apply(bytes: ByteBuffer): CompactByteString = { + if (bytes.remaining < 1) empty + else { + val ar = new Array[Byte](bytes.remaining) + bytes.get(ar) + ByteString.ByteString1C(ar) + } + } + + /** + * Creates a new CompactByteString by encoding a String as UTF-8. + */ + def apply(string: String): CompactByteString = apply(string, StandardCharsets.UTF_8) + + /** + * Creates a new CompactByteString by encoding a String with a charset. + */ + def apply(string: String, charset: String): CompactByteString = + if (string.isEmpty) empty else ByteString.ByteString1C(string.getBytes(charset)) + + /** + * Creates a new CompactByteString by encoding a String with a charset. + */ + def apply(string: String, charset: Charset): CompactByteString = + if (string.isEmpty) empty else ByteString.ByteString1C(string.getBytes(charset)) + + /** + * Creates a new CompactByteString by copying length bytes starting at offset from + * an Array. + */ + def fromArray(array: Array[Byte], offset: Int, length: Int): CompactByteString = { + val copyOffset = Math.max(offset, 0) + val copyLength = Math.max(Math.min(array.length - copyOffset, length), 0) + if (copyLength == 0) empty + else { + val copyArray = new Array[Byte](copyLength) + Array.copy(array, copyOffset, copyArray, 0, copyLength) + ByteString.ByteString1C(copyArray) + } + } + + val empty: CompactByteString = ByteString.ByteString1C.empty +} + +/** + * A compact ByteString. + * + * The ByteString is guarantied to be contiguous in memory and to use only + * as much memory as required for its contents. + */ +sealed abstract class CompactByteString extends ByteString with Serializable { + def isCompact: Boolean = true + def compact: this.type = this +} + +/** + * A mutable builder for efficiently creating a [[akka.util.ByteString]]. + * + * The created ByteString is not automatically compacted. + */ +final class ByteStringBuilder extends Builder[Byte, ByteString] { + builder => + + import ByteString.{ ByteString1, ByteString1C, ByteStrings } + private var _length: Int = 0 + private val _builder: VectorBuilder[ByteString1] = new VectorBuilder[ByteString1]() + private var _temp: Array[Byte] = _ + private var _tempLength: Int = 0 + private var _tempCapacity: Int = 0 + + protected def fillArray(len: Int)(fill: (Array[Byte], Int) => Unit): this.type = { + ensureTempSize(_tempLength + len) + fill(_temp, _tempLength) + _tempLength += len + _length += len + this + } + + @inline protected final def fillByteBuffer(len: Int, byteOrder: ByteOrder)(fill: ByteBuffer => Unit): this.type = { + fillArray(len) { + case (array, start) => + val buffer = ByteBuffer.wrap(array, start, len) + buffer.order(byteOrder) + fill(buffer) + } + } + + def length: Int = _length + + override def sizeHint(len: Int): Unit = { + resizeTemp(len - (_length - _tempLength)) + } + + private def clearTemp(): Unit = { + if (_tempLength > 0) { + val arr = new Array[Byte](_tempLength) + Array.copy(_temp, 0, arr, 0, _tempLength) + _builder += ByteString1(arr) + _tempLength = 0 + } + } + + private def resizeTemp(size: Int): Unit = { + val newtemp = new Array[Byte](size) + if (_tempLength > 0) Array.copy(_temp, 0, newtemp, 0, _tempLength) + _temp = newtemp + _tempCapacity = _temp.length + } + + @inline private def shouldResizeTempFor(size: Int): Boolean = _tempCapacity < size || _tempCapacity == 0 + + private def ensureTempSize(size: Int): Unit = { + if (shouldResizeTempFor(size)) { + var newSize = if (_tempCapacity == 0) 16 else _tempCapacity * 2 + while (newSize < size) newSize *= 2 + resizeTemp(newSize) + } + } + + // We'd really like to have this overload to prevent boxing, but it's forbidden because sc.mutable.Growable makes + // it final. I guess it assumes to prevent the boxing overhead by using @inline but that doesn't seem to be true. + // def +=(elem: Byte): this.type = addOne(elem) + + override def addOne(elem: Byte): this.type = { + ensureTempSize(_tempLength + 1) + _temp(_tempLength) = elem + _tempLength += 1 + _length += 1 + this + } + + def ++=(bytes: ByteString): this.type = addAll(bytes) + def addAll(bytes: ByteString): this.type = { + if (bytes.nonEmpty) { + clearTemp() + bytes match { + case b: ByteString1C => + _builder += b.toByteString1 + _length += b.length + case b: ByteString1 => + _builder += b + _length += b.length + case bs: ByteStrings => + _builder ++= bs.bytestrings + _length += bs.length + } + } + this + } + + override def addAll(xs: IterableOnce[Byte]): this.type = { + xs match { + case bs: ByteString => addAll(bs) + case xs: WrappedArray.ofByte => + if (xs.nonEmpty) putByteArrayUnsafe(xs.array.clone) + case seq: collection.IndexedSeq[Byte] if shouldResizeTempFor(seq.length) => + if (seq.nonEmpty) { + val copied = Array.from(xs) + + clearTemp() + _builder += ByteString.ByteString1(copied) + _length += seq.length + } + case seq: collection.IndexedSeq[Byte] => + if (seq.nonEmpty) { + ensureTempSize(_tempLength + seq.size) + seq.copyToArray(_temp, _tempLength) + _tempLength += seq.length + _length += seq.length + } + case _ => + super.++=(xs) + } + this + } + + private[akka] def putByteArrayUnsafe(xs: Array[Byte]): this.type = { + clearTemp() + _builder += ByteString1(xs) + _length += xs.length + this + } + + /** + * Java API: append a ByteString to this builder. + */ + def append(bs: ByteString): this.type = if (bs.isEmpty) this else this ++= bs + + /** + * Add a single Byte to this builder. + */ + def putByte(x: Byte): this.type = this += x + + /** + * Add a single Short to this builder. + */ + def putShort(x: Int)(implicit byteOrder: ByteOrder): this.type = { + if (byteOrder == ByteOrder.BIG_ENDIAN) { + this += (x >>> 8).toByte + this += (x >>> 0).toByte + } else if (byteOrder == ByteOrder.LITTLE_ENDIAN) { + this += (x >>> 0).toByte + this += (x >>> 8).toByte + } else throw new IllegalArgumentException("Unknown byte order " + byteOrder) + } + + /** + * Add a single Int to this builder. + */ + def putInt(x: Int)(implicit byteOrder: ByteOrder): this.type = { + fillArray(4) { (target, offset) => + if (byteOrder == ByteOrder.BIG_ENDIAN) { + target(offset + 0) = (x >>> 24).toByte + target(offset + 1) = (x >>> 16).toByte + target(offset + 2) = (x >>> 8).toByte + target(offset + 3) = (x >>> 0).toByte + } else if (byteOrder == ByteOrder.LITTLE_ENDIAN) { + target(offset + 0) = (x >>> 0).toByte + target(offset + 1) = (x >>> 8).toByte + target(offset + 2) = (x >>> 16).toByte + target(offset + 3) = (x >>> 24).toByte + } else throw new IllegalArgumentException("Unknown byte order " + byteOrder) + } + this + } + + /** + * Add a single Long to this builder. + */ + def putLong(x: Long)(implicit byteOrder: ByteOrder): this.type = { + fillArray(8) { (target, offset) => + if (byteOrder == ByteOrder.BIG_ENDIAN) { + target(offset + 0) = (x >>> 56).toByte + target(offset + 1) = (x >>> 48).toByte + target(offset + 2) = (x >>> 40).toByte + target(offset + 3) = (x >>> 32).toByte + target(offset + 4) = (x >>> 24).toByte + target(offset + 5) = (x >>> 16).toByte + target(offset + 6) = (x >>> 8).toByte + target(offset + 7) = (x >>> 0).toByte + } else if (byteOrder == ByteOrder.LITTLE_ENDIAN) { + target(offset + 0) = (x >>> 0).toByte + target(offset + 1) = (x >>> 8).toByte + target(offset + 2) = (x >>> 16).toByte + target(offset + 3) = (x >>> 24).toByte + target(offset + 4) = (x >>> 32).toByte + target(offset + 5) = (x >>> 40).toByte + target(offset + 6) = (x >>> 48).toByte + target(offset + 7) = (x >>> 56).toByte + } else throw new IllegalArgumentException("Unknown byte order " + byteOrder) + } + this + } + + /** + * Add the `n` least significant bytes of the given Long to this builder. + */ + def putLongPart(x: Long, n: Int)(implicit byteOrder: ByteOrder): this.type = { + fillArray(n) { (target, offset) => + if (byteOrder == ByteOrder.BIG_ENDIAN) { + val start = n * 8 - 8 + (0 until n).foreach { i => + target(offset + i) = (x >>> start - 8 * i).toByte + } + } else if (byteOrder == ByteOrder.LITTLE_ENDIAN) { + (0 until n).foreach { i => + target(offset + i) = (x >>> 8 * i).toByte + } + } else throw new IllegalArgumentException("Unknown byte order " + byteOrder) + } + } + + /** + * Add a single Float to this builder. + */ + def putFloat(x: Float)(implicit byteOrder: ByteOrder): this.type = + putInt(java.lang.Float.floatToRawIntBits(x))(byteOrder) + + /** + * Add a single Double to this builder. + */ + def putDouble(x: Double)(implicit byteOrder: ByteOrder): this.type = + putLong(java.lang.Double.doubleToRawLongBits(x))(byteOrder) + + /** + * Add a number of Bytes from an array to this builder. + */ + def putBytes(array: Array[Byte]): this.type = + putBytes(array, 0, array.length) + + /** + * Add a number of Bytes from an array to this builder. + */ + def putBytes(array: Array[Byte], start: Int, len: Int): this.type = + fillArray(len) { case (target, targetOffset) => Array.copy(array, start, target, targetOffset, len) } + + /** + * Add a number of Shorts from an array to this builder. + */ + def putShorts(array: Array[Short])(implicit byteOrder: ByteOrder): this.type = + putShorts(array, 0, array.length)(byteOrder) + + /** + * Add a number of Shorts from an array to this builder. + */ + def putShorts(array: Array[Short], start: Int, len: Int)(implicit byteOrder: ByteOrder): this.type = + fillByteBuffer(len * 2, byteOrder) { _.asShortBuffer.put(array, start, len) } + + /** + * Add a number of Ints from an array to this builder. + */ + def putInts(array: Array[Int])(implicit byteOrder: ByteOrder): this.type = + putInts(array, 0, array.length)(byteOrder) + + /** + * Add a number of Ints from an array to this builder. + */ + def putInts(array: Array[Int], start: Int, len: Int)(implicit byteOrder: ByteOrder): this.type = + fillByteBuffer(len * 4, byteOrder) { _.asIntBuffer.put(array, start, len) } + + /** + * Add a number of Longs from an array to this builder. + */ + def putLongs(array: Array[Long])(implicit byteOrder: ByteOrder): this.type = + putLongs(array, 0, array.length)(byteOrder) + + /** + * Add a number of Longs from an array to this builder. + */ + def putLongs(array: Array[Long], start: Int, len: Int)(implicit byteOrder: ByteOrder): this.type = + fillByteBuffer(len * 8, byteOrder) { _.asLongBuffer.put(array, start, len) } + + /** + * Add a number of Floats from an array to this builder. + */ + def putFloats(array: Array[Float])(implicit byteOrder: ByteOrder): this.type = + putFloats(array, 0, array.length)(byteOrder) + + /** + * Add a number of Floats from an array to this builder. + */ + def putFloats(array: Array[Float], start: Int, len: Int)(implicit byteOrder: ByteOrder): this.type = + fillByteBuffer(len * 4, byteOrder) { _.asFloatBuffer.put(array, start, len) } + + /** + * Add a number of Doubles from an array to this builder. + */ + def putDoubles(array: Array[Double])(implicit byteOrder: ByteOrder): this.type = + putDoubles(array, 0, array.length)(byteOrder) + + /** + * Add a number of Doubles from an array to this builder. + */ + def putDoubles(array: Array[Double], start: Int, len: Int)(implicit byteOrder: ByteOrder): this.type = + fillByteBuffer(len * 8, byteOrder) { _.asDoubleBuffer.put(array, start, len) } + + def clear(): Unit = { + _builder.clear() + _length = 0 + _tempLength = 0 + } + + def result(): ByteString = + if (_length == 0) ByteString.empty + else { + clearTemp() + val bytestrings = _builder.result() + if (bytestrings.size == 1) + bytestrings.head + else + ByteStrings(bytestrings, _length) + } + + /** + * Directly wraps this ByteStringBuilder in an OutputStream. Write + * operations on the stream are forwarded to the builder. + */ + def asOutputStream: java.io.OutputStream = new java.io.OutputStream { + def write(b: Int): Unit = builder += b.toByte + + override def write(b: Array[Byte], off: Int, len: Int): Unit = { builder.putBytes(b, off, len) } + } + + /** + * Tests whether this ByteStringBuilder is empty. + */ + def isEmpty: Boolean = _length == 0 + + /** + * Tests whether this ByteStringBuilder is not empty. + */ + def nonEmpty: Boolean = _length > 0 +} diff --git a/akka-actor/src/main/scala-3/akka/util/ccompat/ccompatUsedUntil213.scala b/akka-actor/src/main/scala-3/akka/util/ccompat/ccompatUsedUntil213.scala new file mode 100644 index 0000000000..76478b1985 --- /dev/null +++ b/akka-actor/src/main/scala-3/akka/util/ccompat/ccompatUsedUntil213.scala @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2019-2021 Lightbend Inc. + */ + +package akka.util.ccompat + +import scala.annotation.Annotation + +import akka.annotation.InternalApi + +/** + * INTERNAL API + * + * Annotation to mark files that need ccompat to be imported for Scala 2.11 and/or 2.12, + * but not 2.13. Gets rid of the 'unused import' warning on 2.13. + */ +@InternalApi +private[akka] class ccompatUsedUntil213 extends Annotation diff --git a/akka-actor/src/main/scala-3/akka/util/ccompat/package.scala b/akka-actor/src/main/scala-3/akka/util/ccompat/package.scala new file mode 100644 index 0000000000..4ade2b5f80 --- /dev/null +++ b/akka-actor/src/main/scala-3/akka/util/ccompat/package.scala @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2018-2021 Lightbend Inc. + */ + +package akka.util + +/** + * INTERNAL API + * + * Based on https://github.com/scala/scala-collection-compat/blob/master/compat/src/main/scala-2.13/scala/collection/compat/package.scala + * but reproduced here so we don't need to add a dependency on this library. It contains much more than we need right now, and is + * not promising binary compatibility yet at the time of writing. + */ +package object ccompat { + private[akka] type Factory[-A, +C] = scala.collection.Factory[A, C] + private[akka] val Factory = scala.collection.Factory + + // When we drop support for 2.12 we can delete this concept + // and import scala.jdk.CollectionConverters.Ops._ instead + object JavaConverters + extends scala.collection.convert.AsJavaExtensions + with scala.collection.convert.AsScalaExtensions +} diff --git a/akka-actor/src/main/scala/akka/actor/AbstractActor.scala b/akka-actor/src/main/scala/akka/actor/AbstractActor.scala index e04c350f21..ea9ab3daca 100644 --- a/akka-actor/src/main/scala/akka/actor/AbstractActor.scala +++ b/akka-actor/src/main/scala/akka/actor/AbstractActor.scala @@ -10,7 +10,7 @@ import scala.concurrent.ExecutionContextExecutor import scala.concurrent.duration.Duration import scala.runtime.BoxedUnit -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.annotation.DoNotInherit import akka.japi.pf.ReceiveBuilder @@ -273,7 +273,7 @@ abstract class AbstractActor extends Actor { // TODO In 2.6.0 we can remove deprecation and make the method final @deprecated("Override preRestart with message parameter with Optional type instead", "2.5.0") @throws(classOf[Exception]) - @silent("deprecated") + @nowarn("msg=deprecated") override def preRestart(reason: Throwable, message: Option[Any]): Unit = { import scala.compat.java8.OptionConverters._ preRestart(reason, message.asJava) diff --git a/akka-actor/src/main/scala/akka/actor/AbstractFSM.scala b/akka-actor/src/main/scala/akka/actor/AbstractFSM.scala index 13097d59fc..8cb258a643 100644 --- a/akka-actor/src/main/scala/akka/actor/AbstractFSM.scala +++ b/akka-actor/src/main/scala/akka/actor/AbstractFSM.scala @@ -171,8 +171,10 @@ abstract class AbstractFSM[S, D] extends FSM[S, D] { * Multiple handlers may be installed, and every one of them will be * called, not only the first one matching. */ - final def onTransition(transitionHandler: UnitApply2[S, S]): Unit = - super.onTransition(transitionHandler(_: S, _: S)) + final def onTransition(transitionHandler: UnitApply2[S, S]): Unit = { + val pf: PartialFunction[(S, S), Unit] = akka.compat.PartialFunction.fromFunction(transitionHandler(_: S, _: S)) + super.onTransition(pf) + } /** * Set handler which is called upon reception of unhandled messages. Calling diff --git a/akka-actor/src/main/scala/akka/actor/ActorCell.scala b/akka-actor/src/main/scala/akka/actor/ActorCell.scala index 17dc246e9d..69b5f1d364 100644 --- a/akka-actor/src/main/scala/akka/actor/ActorCell.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorCell.scala @@ -13,7 +13,7 @@ import scala.concurrent.ExecutionContextExecutor import scala.concurrent.duration.Duration import scala.util.control.NonFatal -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor.dungeon.ChildrenContainer import akka.annotation.{ InternalApi, InternalStableApi } @@ -406,7 +406,7 @@ private[akka] object ActorCell { * supported APIs in this place. This is not the API you were looking * for! (waves hand) */ -@silent("deprecated") +@nowarn("msg=deprecated") private[akka] class ActorCell( val system: ActorSystemImpl, val self: InternalActorRef, @@ -687,7 +687,7 @@ private[akka] class ActorCell( } @InternalStableApi - @silent("never used") + @nowarn("msg=never used") final protected def clearActorFields(actorInstance: Actor, recreate: Boolean): Unit = { currentMessage = null behaviorStack = emptyBehaviorStack diff --git a/akka-actor/src/main/scala/akka/actor/ActorPath.scala b/akka-actor/src/main/scala/akka/actor/ActorPath.scala index 24a185e33b..2256b3900f 100644 --- a/akka-actor/src/main/scala/akka/actor/ActorPath.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorPath.scala @@ -6,10 +6,10 @@ package akka.actor import java.lang.{ StringBuilder => JStringBuilder } import java.net.MalformedURLException -import scala.annotation.{ switch, tailrec } +import scala.annotation.tailrec import scala.collection.immutable -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.japi.Util.immutableSeq @@ -87,7 +87,9 @@ object ActorPath { final def validatePathElement(element: String, fullPath: String): Unit = { def fullPathMsg = if (fullPath ne null) s""" (in path [$fullPath])""" else "" - (findInvalidPathElementCharPosition(element): @switch) match { + // If the number of cases increase remember to add a `@switch` annotation e.g.: + // (findInvalidPathElementCharPosition(element): @switch) match { + (findInvalidPathElementCharPosition(element)) match { case ValidPathCode => // valid case EmptyPathCode => @@ -153,8 +155,7 @@ object ActorPath { * references are compared the unique id of the actor is not taken into account * when comparing actor paths. */ -@silent("@SerialVersionUID has no effect on traits") -@silent("deprecated") +@nowarn("msg=@SerialVersionUID has no effect on traits") @SerialVersionUID(1L) sealed trait ActorPath extends Comparable[ActorPath] with Serializable { @@ -203,6 +204,7 @@ sealed trait ActorPath extends Comparable[ActorPath] with Serializable { /** * Java API: Sequence of names for this path from root to this. Performance implication: has to allocate a list. */ + @nowarn("msg=deprecated") def getElements: java.lang.Iterable[String] = scala.collection.JavaConverters.asJavaIterableConverter(elements).asJava diff --git a/akka-actor/src/main/scala/akka/actor/ActorRefProvider.scala b/akka-actor/src/main/scala/akka/actor/ActorRefProvider.scala index d97d2e621f..600fde67d4 100644 --- a/akka-actor/src/main/scala/akka/actor/ActorRefProvider.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorRefProvider.scala @@ -9,6 +9,7 @@ import java.util.concurrent.atomic.AtomicLong import scala.annotation.implicitNotFound import scala.concurrent.{ ExecutionContextExecutor, Future, Promise } import scala.util.control.NonFatal + import akka.ConfigurationException import akka.annotation.DoNotInherit import akka.annotation.InternalApi @@ -320,7 +321,7 @@ private[akka] object LocalActorRefProvider { private class SystemGuardian(override val supervisorStrategy: SupervisorStrategy, val guardian: ActorRef) extends Actor with RequiresMessageQueue[UnboundedMessageQueueSemantics] { - import SystemGuardian._ + import akka.actor.SystemGuardian._ var terminationHooks = Set.empty[ActorRef] @@ -391,7 +392,7 @@ private[akka] class LocalActorRefProvider private[akka] ( override val rootPath: ActorPath = RootActorPath(Address("akka", _systemName)) private[akka] val log: MarkerLoggingAdapter = - Logging.withMarker(eventStream, getClass) + Logging.withMarker(eventStream, classOf[LocalActorRefProvider]) /* * This dedicated logger is used whenever a deserialization failure occurs @@ -584,7 +585,7 @@ private[akka] class LocalActorRefProvider private[akka] ( ref } - lazy val tempContainer = new VirtualPathContainer(system.provider, tempNode, rootGuardian, log) + lazy val tempContainer: VirtualPathContainer = new VirtualPathContainer(system.provider, tempNode, rootGuardian, log) def registerTempActor(actorRef: InternalActorRef, path: ActorPath): Unit = { assert(path.parent eq tempNode, "cannot registerTempActor() with anything not obtained from tempPath()") diff --git a/akka-actor/src/main/scala/akka/actor/ActorSelection.scala b/akka-actor/src/main/scala/akka/actor/ActorSelection.scala index 2648d4a1c7..15466dbd04 100644 --- a/akka-actor/src/main/scala/akka/actor/ActorSelection.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorSelection.scala @@ -16,7 +16,7 @@ import scala.concurrent.duration._ import scala.language.implicitConversions import scala.util.Success -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.dispatch.ExecutionContexts import akka.pattern.ask @@ -328,7 +328,7 @@ private[akka] final case class ActorSelectionMessage( /** * INTERNAL API */ -@silent("@SerialVersionUID has no effect on traits") +@nowarn("msg=@SerialVersionUID has no effect on traits") @SerialVersionUID(1L) private[akka] sealed trait SelectionPathElement diff --git a/akka-actor/src/main/scala/akka/actor/ActorSystem.scala b/akka-actor/src/main/scala/akka/actor/ActorSystem.scala index 4d0abd1c64..628217f9ed 100644 --- a/akka-actor/src/main/scala/akka/actor/ActorSystem.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorSystem.scala @@ -1043,7 +1043,7 @@ private[akka] class ActorSystemImpl( } def start(): this.type = _start - def registerOnTermination[T](code: => T): Unit = { registerOnTermination(new Runnable { def run = code }) } + def registerOnTermination[T](code: => T): Unit = { registerOnTermination(new Runnable { def run() = code }) } def registerOnTermination(code: Runnable): Unit = { terminationCallbacks.add(code) } @volatile private var terminating = false diff --git a/akka-actor/src/main/scala/akka/actor/Address.scala b/akka-actor/src/main/scala/akka/actor/Address.scala index 60cc870008..c8acb99f0b 100644 --- a/akka-actor/src/main/scala/akka/actor/Address.scala +++ b/akka-actor/src/main/scala/akka/actor/Address.scala @@ -33,6 +33,14 @@ final case class Address private (protocol: String, system: String, host: Option def this(protocol: String, system: String) = this(protocol, system, None, None) def this(protocol: String, system: String, host: String, port: Int) = this(protocol, system, Option(host), Some(port)) + def copy( + protocol: String = protocol, + system: String = system, + host: Option[String] = host, + port: Option[Int] = port) = { + Address(protocol, system, host, port) + } + /** * Java API: The hostname if specified or empty optional if not */ diff --git a/akka-actor/src/main/scala/akka/actor/CoordinatedShutdown.scala b/akka-actor/src/main/scala/akka/actor/CoordinatedShutdown.scala index b7826e1db9..2c08c7a35a 100644 --- a/akka-actor/src/main/scala/akka/actor/CoordinatedShutdown.scala +++ b/akka-actor/src/main/scala/akka/actor/CoordinatedShutdown.scala @@ -18,8 +18,10 @@ import scala.concurrent.duration._ import scala.concurrent.duration.FiniteDuration import scala.util.Try import scala.util.control.NonFatal + import com.typesafe.config.Config import com.typesafe.config.ConfigFactory + import akka.Done import akka.annotation.InternalApi import akka.dispatch.ExecutionContexts @@ -353,7 +355,7 @@ final class CoordinatedShutdown private[akka] ( import CoordinatedShutdown.{ Reason, UnknownReason } /** INTERNAL API */ - private[akka] val log = Logging(system, getClass) + private[akka] val log = Logging(system, classOf[CoordinatedShutdown]) private val knownPhases = phases.keySet ++ phases.values.flatMap(_.dependsOn) /** INTERNAL API */ diff --git a/akka-actor/src/main/scala/akka/actor/Deployer.scala b/akka-actor/src/main/scala/akka/actor/Deployer.scala index 2246cca7e4..b6f9b38e7e 100644 --- a/akka-actor/src/main/scala/akka/actor/Deployer.scala +++ b/akka-actor/src/main/scala/akka/actor/Deployer.scala @@ -8,7 +8,7 @@ import java.util.concurrent.atomic.AtomicReference import scala.annotation.tailrec -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config._ import akka.annotation.InternalApi @@ -172,7 +172,7 @@ trait Scope { def withFallback(other: Scope): Scope } -@silent("@SerialVersionUID has no effect") +@nowarn("msg=@SerialVersionUID has no effect") @SerialVersionUID(1L) abstract class LocalScope extends Scope @@ -181,7 +181,7 @@ abstract class LocalScope extends Scope * which do not set a different scope. It is also the only scope handled by * the LocalActorRefProvider. */ -@silent("@SerialVersionUID has no effect") +@nowarn("msg=@SerialVersionUID has no effect") @SerialVersionUID(1L) case object LocalScope extends LocalScope { @@ -196,7 +196,7 @@ case object LocalScope extends LocalScope { /** * This is the default value and as such allows overrides. */ -@silent("@SerialVersionUID has no effect") +@nowarn("msg=@SerialVersionUID has no effect") @SerialVersionUID(1L) abstract class NoScopeGiven extends Scope @SerialVersionUID(1L) diff --git a/akka-actor/src/main/scala/akka/actor/FSM.scala b/akka-actor/src/main/scala/akka/actor/FSM.scala index 211a3aeb53..31948ec9ac 100644 --- a/akka-actor/src/main/scala/akka/actor/FSM.scala +++ b/akka-actor/src/main/scala/akka/actor/FSM.scala @@ -10,7 +10,7 @@ import scala.concurrent.duration._ import scala.concurrent.duration.Duration import scala.concurrent.duration.FiniteDuration -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import language.implicitConversions import akka.annotation.InternalApi @@ -166,12 +166,12 @@ object FSM { * Using a subclass for binary compatibility reasons */ private[akka] class SilentState[S, D]( - _stateName: S, - _stateData: D, - _timeout: Option[FiniteDuration], - _stopReason: Option[Reason], - _replies: List[Any]) - extends State[S, D](_stateName, _stateData, _timeout, _stopReason, _replies) { + stateName: S, + stateData: D, + timeout: Option[FiniteDuration], + stopReason: Option[Reason], + replies: List[Any]) + extends State[S, D](stateName, stateData, timeout, stopReason, replies) { /** * INTERNAL API @@ -186,6 +186,7 @@ object FSM { replies: List[Any] = replies): State[S, D] = { new SilentState(stateName, stateData, timeout, stopReason, replies) } + } /** @@ -193,12 +194,58 @@ object FSM { * name, the state data, possibly custom timeout, stop reason and replies * accumulated while processing the last message. */ - case class State[S, D]( - stateName: S, - stateData: D, - timeout: Option[FiniteDuration] = None, - stopReason: Option[Reason] = None, - replies: List[Any] = Nil) { + object State { + def apply[S, D]( + stateName: S, + stateData: D, + timeout: Option[FiniteDuration] = None, + stopReason: Option[Reason] = None, + replies: List[Any] = Nil) = { + new State(stateName, stateData, timeout, stopReason, replies) + } + + def unapply[S, D](state: State[S, D]): Option[(S, D, Option[FiniteDuration], Option[Reason], List[Any])] = { + Some((state.stateName, state.stateData, state.timeout, state.stopReason, state.replies)) + } + } + class State[S, D]( + val stateName: S, + val stateData: D, + val timeout: Option[FiniteDuration] = None, + val stopReason: Option[Reason] = None, + val replies: List[Any] = Nil) + extends Product + with Serializable { + + def canEqual(that: Any): Boolean = { + that match { + case _: State[_, _] => true + case _ => false + } + } + + override def equals(that: Any) = that match { + case other: State[_, _] => + other.canEqual(this) && + this.stateName == other.stateName && + this.stateData == other.stateData && + this.timeout == other.timeout && + this.stopReason == other.stopReason && + this.replies == other.replies + case _ => false + } + + override def productPrefix = classOf[State[S, D]].getSimpleName + + def productArity: Int = 5 + def productElement(n: Int): Any = n match { + case 0 => this.stateName + case 1 => this.stateData + case 2 => this.timeout + case 3 => this.stopReason + case 4 => this.replies + case _ => throw new IndexOutOfBoundsException(n.toString) + } /** * INTERNAL API @@ -212,7 +259,7 @@ object FSM { timeout: Option[FiniteDuration] = timeout, stopReason: Option[Reason] = stopReason, replies: List[Any] = replies): State[S, D] = { - State(stateName, stateData, timeout, stopReason, replies) + new State(stateName, stateData, timeout, stopReason, replies) } /** @@ -254,7 +301,7 @@ object FSM { * Modify state transition descriptor with new state data. The data will be * set when transitioning to the new state. */ - @silent("deprecated") + @nowarn("msg=deprecated") def using(@deprecatedName(Symbol("nextStateDate")) nextStateData: D): State[S, D] = { copy(stateData = nextStateData) } diff --git a/akka-actor/src/main/scala/akka/actor/IndirectActorProducer.scala b/akka-actor/src/main/scala/akka/actor/IndirectActorProducer.scala index 85eb35be2b..1b9fa7ac23 100644 --- a/akka-actor/src/main/scala/akka/actor/IndirectActorProducer.scala +++ b/akka-actor/src/main/scala/akka/actor/IndirectActorProducer.scala @@ -6,7 +6,7 @@ package akka.actor import scala.collection.immutable -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.japi.Creator import akka.util.Reflect @@ -42,7 +42,7 @@ private[akka] object IndirectActorProducer { val CreatorFunctionConsumerClass = classOf[CreatorFunctionConsumer] val CreatorConsumerClass = classOf[CreatorConsumer] val TypedCreatorFunctionConsumerClass = classOf[TypedCreatorFunctionConsumer] - @silent + @nowarn def apply(clazz: Class[_], args: immutable.Seq[Any]): IndirectActorProducer = { if (classOf[IndirectActorProducer].isAssignableFrom(clazz)) { def get1stArg[T]: T = args.head.asInstanceOf[T] diff --git a/akka-actor/src/main/scala/akka/actor/LightArrayRevolverScheduler.scala b/akka-actor/src/main/scala/akka/actor/LightArrayRevolverScheduler.scala index 0f30121fa9..317d3e1155 100644 --- a/akka-actor/src/main/scala/akka/actor/LightArrayRevolverScheduler.scala +++ b/akka-actor/src/main/scala/akka/actor/LightArrayRevolverScheduler.scala @@ -128,13 +128,17 @@ class LightArrayRevolverScheduler(config: Config, log: LoggingAdapter, threadFac } } - @tailrec final def cancel(): Boolean = { - get match { - case null => false - case c => - if (c.cancel()) compareAndSet(c, null) - else compareAndSet(c, null) || cancel() + final def cancel(): Boolean = { + @tailrec def tailrecCancel(): Boolean = { + get match { + case null => false + case c => + if (c.cancel()) compareAndSet(c, null) + else compareAndSet(c, null) || tailrecCancel() + } } + + tailrecCancel() } override def isCancelled: Boolean = get == null diff --git a/akka-actor/src/main/scala/akka/actor/ReflectiveDynamicAccess.scala b/akka-actor/src/main/scala/akka/actor/ReflectiveDynamicAccess.scala index 7b5cb92308..8af5d4bec0 100644 --- a/akka-actor/src/main/scala/akka/actor/ReflectiveDynamicAccess.scala +++ b/akka-actor/src/main/scala/akka/actor/ReflectiveDynamicAccess.scala @@ -49,7 +49,7 @@ class ReflectiveDynamicAccess(val classLoader: ClassLoader) extends DynamicAcces } override def classIsOnClasspath(fqcn: String): Boolean = - getClassFor(fqcn) match { + getClassFor[Any](fqcn) match { case Failure(_: ClassNotFoundException | _: NoClassDefFoundError) => false case _ => diff --git a/akka-actor/src/main/scala/akka/actor/RepointableActorRef.scala b/akka-actor/src/main/scala/akka/actor/RepointableActorRef.scala index 15b8569c2c..c792c60324 100644 --- a/akka-actor/src/main/scala/akka/actor/RepointableActorRef.scala +++ b/akka-actor/src/main/scala/akka/actor/RepointableActorRef.scala @@ -11,7 +11,7 @@ import scala.annotation.tailrec import scala.collection.immutable import scala.util.control.NonFatal -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor.dungeon.ChildrenContainer import akka.dispatch._ @@ -49,8 +49,12 @@ private[akka] class RepointableActorRef( * processing the very first message (i.e. before Cell.start()). Hence there * are two refs here, one for each function, and they are switched just so. */ - @silent @volatile private var _cellDoNotCallMeDirectly: Cell = _ - @silent @volatile private var _lookupDoNotCallMeDirectly: Cell = _ + @nowarn @volatile private var _cellDoNotCallMeDirectly: Cell = _ + @nowarn @volatile private var _lookupDoNotCallMeDirectly: Cell = _ + @nowarn private def _preventPrivateUnusedErasure = { + _cellDoNotCallMeDirectly + _lookupDoNotCallMeDirectly + } def underlying: Cell = Unsafe.instance.getObjectVolatile(this, cellOffset).asInstanceOf[Cell] def lookup = Unsafe.instance.getObjectVolatile(this, lookupOffset).asInstanceOf[Cell] diff --git a/akka-actor/src/main/scala/akka/actor/Scheduler.scala b/akka-actor/src/main/scala/akka/actor/Scheduler.scala index 7e658a288d..5b8eed6303 100644 --- a/akka-actor/src/main/scala/akka/actor/Scheduler.scala +++ b/akka-actor/src/main/scala/akka/actor/Scheduler.scala @@ -11,7 +11,7 @@ import scala.concurrent.ExecutionContext import scala.concurrent.duration._ import scala.util.control.NoStackTrace -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.annotation.InternalApi import akka.util.JavaDurationConverters @@ -98,13 +98,17 @@ trait Scheduler { } } - @tailrec final def cancel(): Boolean = { - get match { - case null => false - case c => - if (c.cancel()) compareAndSet(c, null) - else compareAndSet(c, null) || cancel() + final def cancel(): Boolean = { + @tailrec def tailrecCancel(): Boolean = { + get match { + case null => false + case c => + if (c.cancel()) compareAndSet(c, null) + else compareAndSet(c, null) || tailrecCancel() + } } + + tailrecCancel() } override def isCancelled: Boolean = get == null @@ -158,7 +162,7 @@ trait Scheduler { * * Note: For scheduling within actors `with Timers` should be preferred. */ - @silent("deprecated") + @nowarn("msg=deprecated") final def scheduleWithFixedDelay( initialDelay: FiniteDuration, delay: FiniteDuration, @@ -233,7 +237,7 @@ trait Scheduler { * * Note: For scheduling within actors `with Timers` should be preferred. */ - @silent("deprecated") + @nowarn("msg=deprecated") final def scheduleAtFixedRate(initialDelay: FiniteDuration, interval: FiniteDuration)(runnable: Runnable)( implicit executor: ExecutionContext): Cancellable = schedule(initialDelay, interval, runnable)(executor) @@ -302,7 +306,7 @@ trait Scheduler { * * Note: For scheduling within actors `with Timers` should be preferred. */ - @silent("deprecated") + @nowarn("msg=deprecated") final def scheduleAtFixedRate( initialDelay: FiniteDuration, interval: FiniteDuration, @@ -355,7 +359,7 @@ trait Scheduler { "Use scheduleWithFixedDelay or scheduleAtFixedRate instead. This has the same semantics as " + "scheduleAtFixedRate, but scheduleWithFixedDelay is often preferred.", since = "2.6.0") - @silent("deprecated") + @nowarn("msg=deprecated") final def schedule(initialDelay: FiniteDuration, interval: FiniteDuration, receiver: ActorRef, message: Any)( implicit executor: ExecutionContext, diff --git a/akka-actor/src/main/scala/akka/actor/Timers.scala b/akka-actor/src/main/scala/akka/actor/Timers.scala index 78735da6bc..a7d936ddf5 100644 --- a/akka-actor/src/main/scala/akka/actor/Timers.scala +++ b/akka-actor/src/main/scala/akka/actor/Timers.scala @@ -43,7 +43,7 @@ trait Timers extends Actor { case timerMsg: TimerSchedulerImpl.TimerMsg => _timers.interceptTimerMsg(timerMsg) match { case OptionVal.Some(m: AutoReceivedMessage) => - context.asInstanceOf[ActorCell].autoReceiveMessage(Envelope(m, self)) + context.asInstanceOf[ActorCell].autoReceiveMessage(Envelope(m, self, context.system)) case OptionVal.Some(m) => if (this.isInstanceOf[Stash]) { // this is important for stash interaction, as stash will look directly at currentMessage #24557 diff --git a/akka-actor/src/main/scala/akka/actor/TypedActor.scala b/akka-actor/src/main/scala/akka/actor/TypedActor.scala index 85a1e6f4c8..54cf8da516 100644 --- a/akka-actor/src/main/scala/akka/actor/TypedActor.scala +++ b/akka-actor/src/main/scala/akka/actor/TypedActor.scala @@ -17,7 +17,7 @@ import scala.reflect.ClassTag import scala.util.{ Failure, Success, Try } import scala.util.control.NonFatal -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.dispatch._ import akka.japi.{ Creator, Option => JOption } @@ -128,7 +128,7 @@ object TypedActor extends ExtensionId[TypedActorExtension] with ExtensionIdProvi * * Java API */ - @silent("deprecated") + @nowarn("msg=deprecated") def get(context: ActorContext): TypedActorFactory = apply(context) /** @@ -266,9 +266,12 @@ object TypedActor extends ExtensionId[TypedActorExtension] with ExtensionIdProvi createInstance: => T, interfaces: immutable.Seq[Class[_]]) extends Actor { + self => // if we were remote deployed we need to create a local proxy - if (!context.parent.asInstanceOf[InternalActorRef].isLocal) - TypedActor.get(context.system).createActorRefProxy(TypedProps(interfaces, createInstance), proxyVar, context.self) + if (!self.context.parent.asInstanceOf[InternalActorRef].isLocal) + akka.actor.TypedActor + .get(self.context.system) + .createActorRefProxy(TypedProps(interfaces, createInstance), proxyVar, self.context.self) private val me = withContext[T](createInstance) @@ -284,7 +287,7 @@ object TypedActor extends ExtensionId[TypedActorExtension] with ExtensionIdProvi } } - @silent("deprecated") + @nowarn("msg=deprecated") override def postStop(): Unit = try { withContext { @@ -294,10 +297,10 @@ object TypedActor extends ExtensionId[TypedActorExtension] with ExtensionIdProvi } } } finally { - TypedActor(context.system).invocationHandlerFor(proxyVar.get) match { + akka.actor.TypedActor(self.context.system).invocationHandlerFor(proxyVar.get) match { case null => case some => - some.actorVar.set(context.system.deadLetters) //Point it to the DLQ + some.actorVar.set(self.context.system.deadLetters) //Point it to the DLQ proxyVar.set(null.asInstanceOf[R]) } } @@ -306,8 +309,8 @@ object TypedActor extends ExtensionId[TypedActorExtension] with ExtensionIdProvi me match { case l: PreRestart => l.preRestart(reason, message) case _ => - context.children - .foreach(context.stop) //Can't be super.preRestart(reason, message) since that would invoke postStop which would set the actorVar to DL and proxyVar to null + self.context.children + .foreach(self.context.stop) //Can't be super.preRestart(reason, message) since that would invoke postStop which would set the actorVar to DL and proxyVar to null } } @@ -319,12 +322,12 @@ object TypedActor extends ExtensionId[TypedActorExtension] with ExtensionIdProvi } protected def withContext[U](unitOfWork: => U): U = { - TypedActor.selfReference.set(proxyVar.get) - TypedActor.currentContext.set(context) + akka.actor.TypedActor.selfReference.set(proxyVar.get) + akka.actor.TypedActor.currentContext.set(self.context) try unitOfWork finally { - TypedActor.selfReference.set(null) - TypedActor.currentContext.set(null) + akka.actor.TypedActor.selfReference.set(null) + akka.actor.TypedActor.currentContext.set(null) } } @@ -337,11 +340,15 @@ object TypedActor extends ExtensionId[TypedActorExtension] with ExtensionIdProvi val s = sender() m(me) match { case f: Future[_] if m.returnsFuture => - implicit val dispatcher = context.dispatcher + implicit val dispatcher = this.context.dispatcher f.onComplete { - case Success(null) => s ! NullResponse - case Success(result) => s ! result - case Failure(f) => s ! Status.Failure(f) + case Success(result) => + if (result == null) { + s ! NullResponse + } else { + s ! result + } + case Failure(f) => s ! Status.Failure(f) } case null => s ! NullResponse case result => s ! result @@ -499,9 +506,9 @@ object TypedActor extends ExtensionId[TypedActorExtension] with ExtensionIdProvi case some => toTypedActorInvocationHandler(some) } - @silent("deprecated") + @nowarn("msg=deprecated") def toTypedActorInvocationHandler(system: ActorSystem): TypedActorInvocationHandler = - new TypedActorInvocationHandler(TypedActor(system), new AtomVar[ActorRef](actor), new Timeout(timeout)) + new TypedActorInvocationHandler(akka.actor.TypedActor(system), new AtomVar[ActorRef](actor), new Timeout(timeout)) } } @@ -675,14 +682,14 @@ final case class TypedProps[T <: AnyRef] protected[TypedProps] ( * ContextualTypedActorFactory allows TypedActors to create children, effectively forming the same Actor Supervision Hierarchies * as normal Actors can. */ -@silent("deprecated") +@nowarn("msg=deprecated") final case class ContextualTypedActorFactory(typedActor: TypedActorExtension, actorFactory: ActorContext) extends TypedActorFactory { override def getActorRefFor(proxy: AnyRef): ActorRef = typedActor.getActorRefFor(proxy) override def isTypedActor(proxyOrNot: AnyRef): Boolean = typedActor.isTypedActor(proxyOrNot) } -@silent("deprecated") +@nowarn("msg=deprecated") class TypedActorExtension(val system: ExtendedActorSystem) extends TypedActorFactory with Extension { import TypedActor._ //Import the goodies from the companion object protected def actorFactory: ActorRefFactory = system diff --git a/akka-actor/src/main/scala/akka/actor/dungeon/Children.scala b/akka-actor/src/main/scala/akka/actor/dungeon/Children.scala index 1b1c3f4336..fbb4d77f20 100644 --- a/akka-actor/src/main/scala/akka/actor/dungeon/Children.scala +++ b/akka-actor/src/main/scala/akka/actor/dungeon/Children.scala @@ -9,7 +9,7 @@ import java.util.Optional import scala.annotation.tailrec import scala.collection.immutable import scala.util.control.NonFatal -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor._ import akka.annotation.InternalStableApi import akka.serialization.{ Serialization, SerializationExtension, Serializers } @@ -23,7 +23,7 @@ private[akka] trait Children { this: ActorCell => import ChildrenContainer._ - @silent("never used") + @nowarn("msg=never used") @volatile private var _childrenRefsDoNotCallMeDirectly: ChildrenContainer = EmptyChildrenContainer @@ -31,7 +31,7 @@ private[akka] trait Children { this: ActorCell => Unsafe.instance.getObjectVolatile(this, AbstractActorCell.childrenOffset).asInstanceOf[ChildrenContainer] final def children: immutable.Iterable[ActorRef] = childrenRefs.children - @silent("deprecated") + @nowarn("msg=deprecated") final def getChildren(): java.lang.Iterable[ActorRef] = scala.collection.JavaConverters.asJavaIterableConverter(children).asJava @@ -51,7 +51,7 @@ private[akka] trait Children { this: ActorCell => private[akka] def attachChild(props: Props, name: String, systemService: Boolean): ActorRef = makeChild(this, props, checkName(name), async = true, systemService = systemService) - @silent @volatile private var _functionRefsDoNotCallMeDirectly = Map.empty[String, FunctionRef] + @nowarn @volatile private var _functionRefsDoNotCallMeDirectly = Map.empty[String, FunctionRef] private def functionRefs: Map[String, FunctionRef] = Unsafe.instance.getObjectVolatile(this, AbstractActorCell.functionRefsOffset).asInstanceOf[Map[String, FunctionRef]] @@ -104,7 +104,7 @@ private[akka] trait Children { this: ActorCell => refs.valuesIterator.foreach(_.stop()) } - @silent @volatile private var _nextNameDoNotCallMeDirectly = 0L + @nowarn @volatile private var _nextNameDoNotCallMeDirectly = 0L final protected def randomName(sb: java.lang.StringBuilder): String = { val num = Unsafe.instance.getAndAddLong(this, AbstractActorCell.nextNameOffset, 1) Helpers.base64(num, sb) @@ -129,6 +129,12 @@ private[akka] trait Children { this: ActorCell => actor.asInstanceOf[InternalActorRef].stop() } + @nowarn private def _preventPrivateUnusedErasure = { + _childrenRefsDoNotCallMeDirectly + _functionRefsDoNotCallMeDirectly + _nextNameDoNotCallMeDirectly + } + /* * low level CAS helpers */ diff --git a/akka-actor/src/main/scala/akka/actor/dungeon/Dispatch.scala b/akka-actor/src/main/scala/akka/actor/dungeon/Dispatch.scala index 5ff15a5935..cc0ff6cf6f 100644 --- a/akka-actor/src/main/scala/akka/actor/dungeon/Dispatch.scala +++ b/akka-actor/src/main/scala/akka/actor/dungeon/Dispatch.scala @@ -8,7 +8,7 @@ import scala.annotation.tailrec import scala.util.control.{ NoStackTrace, NonFatal } import scala.util.control.Exception.Catcher -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.AkkaException import akka.actor._ @@ -24,7 +24,7 @@ import akka.serialization.Serialization import akka.util.Unsafe @SerialVersionUID(1L) -final case class SerializationCheckFailedException private (msg: Object, cause: Throwable) +final case class SerializationCheckFailedException private[dungeon] (msg: Object, cause: Throwable) extends AkkaException( s"Failed to serialize and deserialize message of type ${msg.getClass.getName} for testing. " + "To avoid this error, either disable 'akka.actor.serialize-messages', mark the message with 'akka.actor.NoSerializationVerificationNeeded', or configure serialization to support this message", @@ -36,9 +36,13 @@ final case class SerializationCheckFailedException private (msg: Object, cause: @InternalApi private[akka] trait Dispatch { this: ActorCell => - @silent @volatile private var _mailboxDoNotCallMeDirectly + @nowarn @volatile private var _mailboxDoNotCallMeDirectly : Mailbox = _ //This must be volatile since it isn't protected by the mailbox status + @nowarn private def _preventPrivateUnusedErasure = { + _mailboxDoNotCallMeDirectly + } + @inline final def mailbox: Mailbox = Unsafe.instance.getObjectVolatile(this, AbstractActorCell.mailboxOffset).asInstanceOf[Mailbox] diff --git a/akka-actor/src/main/scala/akka/actor/dungeon/FaultHandling.scala b/akka-actor/src/main/scala/akka/actor/dungeon/FaultHandling.scala index ea59e7b225..8f9a8d5341 100644 --- a/akka-actor/src/main/scala/akka/actor/dungeon/FaultHandling.scala +++ b/akka-actor/src/main/scala/akka/actor/dungeon/FaultHandling.scala @@ -4,6 +4,11 @@ package akka.actor.dungeon +import scala.collection.immutable +import scala.concurrent.duration.Duration +import scala.util.control.Exception._ +import scala.util.control.NonFatal + import akka.actor.{ ActorCell, ActorInterruptedException, ActorRef, InternalActorRef } import akka.actor.ActorRefScope import akka.actor.PostRestartException @@ -16,11 +21,6 @@ import akka.event.Logging import akka.event.Logging.Debug import akka.event.Logging.Error -import scala.collection.immutable -import scala.concurrent.duration.Duration -import scala.util.control.Exception._ -import scala.util.control.NonFatal - /** * INTERNAL API */ diff --git a/akka-actor/src/main/scala/akka/dispatch/AbstractDispatcher.scala b/akka-actor/src/main/scala/akka/dispatch/AbstractDispatcher.scala index 6e37e3918b..4633f6ac11 100644 --- a/akka-actor/src/main/scala/akka/dispatch/AbstractDispatcher.scala +++ b/akka-actor/src/main/scala/akka/dispatch/AbstractDispatcher.scala @@ -12,7 +12,7 @@ import scala.concurrent.{ ExecutionContext, ExecutionContextExecutor } import scala.concurrent.duration.{ Duration, FiniteDuration } import scala.util.control.NonFatal -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.Config import akka.actor._ @@ -23,7 +23,12 @@ import akka.event.EventStream import akka.event.Logging.{ Debug, Error, LogEventException } import akka.util.{ unused, Index, Unsafe } -final case class Envelope private (message: Any, sender: ActorRef) +final case class Envelope private (message: Any, sender: ActorRef) { + + def copy(message: Any = message, sender: ActorRef = sender) = { + Envelope(message, sender) + } +} object Envelope { def apply(message: Any, sender: ActorRef, system: ActorSystem): Envelope = { @@ -104,8 +109,12 @@ abstract class MessageDispatcher(val configurator: MessageDispatcherConfigurator val mailboxes = prerequisites.mailboxes val eventStream = prerequisites.eventStream - @silent @volatile private[this] var _inhabitantsDoNotCallMeDirectly: Long = _ // DO NOT TOUCH! - @silent @volatile private[this] var _shutdownScheduleDoNotCallMeDirectly: Int = _ // DO NOT TOUCH! + @nowarn @volatile private[this] var _inhabitantsDoNotCallMeDirectly: Long = _ // DO NOT TOUCH! + @nowarn @volatile private[this] var _shutdownScheduleDoNotCallMeDirectly: Int = _ // DO NOT TOUCH! + @nowarn private def _preventPrivateUnusedErasure = { + _inhabitantsDoNotCallMeDirectly + _shutdownScheduleDoNotCallMeDirectly + } private final def addInhabitants(add: Long): Long = { val old = Unsafe.instance.getAndAddLong(this, inhabitantsOffset, add) diff --git a/akka-actor/src/main/scala/akka/dispatch/CachingConfig.scala b/akka-actor/src/main/scala/akka/dispatch/CachingConfig.scala index 9858bf8b9c..6bef444e3d 100644 --- a/akka-actor/src/main/scala/akka/dispatch/CachingConfig.scala +++ b/akka-actor/src/main/scala/akka/dispatch/CachingConfig.scala @@ -4,11 +4,11 @@ package akka.dispatch +import java.lang.Enum import java.util import java.util.concurrent.{ ConcurrentHashMap, TimeUnit } import scala.util.{ Failure, Success, Try } -import java.lang.Enum import com.typesafe.config._ diff --git a/akka-actor/src/main/scala/akka/dispatch/Dispatcher.scala b/akka-actor/src/main/scala/akka/dispatch/Dispatcher.scala index 4d6ffebda4..699993a937 100644 --- a/akka-actor/src/main/scala/akka/dispatch/Dispatcher.scala +++ b/akka-actor/src/main/scala/akka/dispatch/Dispatcher.scala @@ -10,7 +10,7 @@ import java.util.concurrent.atomic.AtomicReferenceFieldUpdater import scala.concurrent.duration.Duration import scala.concurrent.duration.FiniteDuration -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor.ActorCell import akka.dispatch.sysmsg.SystemMessage @@ -49,7 +49,7 @@ class Dispatcher( * At first glance this var does not seem to be updated anywhere, but in * fact it is, via the esUpdater [[AtomicReferenceFieldUpdater]] below. */ - @silent("never updated") + @nowarn("msg=never updated") @volatile private var executorServiceDelegate: LazyExecutorServiceDelegate = new LazyExecutorServiceDelegate(executorServiceFactoryProvider.createExecutorServiceFactory(id, threadFactory)) diff --git a/akka-actor/src/main/scala/akka/dispatch/Dispatchers.scala b/akka-actor/src/main/scala/akka/dispatch/Dispatchers.scala index 4be88da361..4f23815fd0 100644 --- a/akka-actor/src/main/scala/akka/dispatch/Dispatchers.scala +++ b/akka-actor/src/main/scala/akka/dispatch/Dispatchers.scala @@ -8,7 +8,7 @@ import java.util.concurrent.{ ConcurrentHashMap, ThreadFactory } import scala.concurrent.ExecutionContext -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.{ Config, ConfigFactory, ConfigValueType } import akka.ConfigurationException @@ -317,7 +317,7 @@ private[akka] object BalancingDispatcherConfigurator { * Returns the same dispatcher instance for each invocation * of the `dispatcher()` method. */ -@silent("deprecated") +@nowarn("msg=deprecated") class BalancingDispatcherConfigurator(_config: Config, _prerequisites: DispatcherPrerequisites) extends MessageDispatcherConfigurator(BalancingDispatcherConfigurator.amendConfig(_config), _prerequisites) { diff --git a/akka-actor/src/main/scala/akka/dispatch/Future.scala b/akka-actor/src/main/scala/akka/dispatch/Future.scala index 8b82ffc4d5..f762b8f599 100644 --- a/akka-actor/src/main/scala/akka/dispatch/Future.scala +++ b/akka-actor/src/main/scala/akka/dispatch/Future.scala @@ -14,7 +14,7 @@ import scala.concurrent.{ ExecutionContext, ExecutionContextExecutor, ExecutionC import scala.runtime.{ AbstractPartialFunction, BoxedUnit } import scala.util.{ Failure, Success, Try } -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.annotation.InternalApi import akka.annotation.InternalStableApi @@ -257,7 +257,7 @@ object japi { * * Java API */ -@silent("deprecated") +@nowarn("msg=deprecated") abstract class OnSuccess[-T] extends japi.CallbackBridge[T] { protected final override def internal(result: T) = onSuccess(result) @@ -275,7 +275,7 @@ abstract class OnSuccess[-T] extends japi.CallbackBridge[T] { * * Java API */ -@silent("deprecated") +@nowarn("msg=deprecated") abstract class OnFailure extends japi.CallbackBridge[Throwable] { protected final override def internal(failure: Throwable) = onFailure(failure) @@ -293,7 +293,7 @@ abstract class OnFailure extends japi.CallbackBridge[Throwable] { * * Java API */ -@silent("deprecated") +@nowarn("msg=deprecated") abstract class OnComplete[-T] extends japi.CallbackBridge[Try[T]] { protected final override def internal(value: Try[T]): Unit = value match { case Failure(t) => onComplete(t, null.asInstanceOf[T]) @@ -316,7 +316,7 @@ abstract class OnComplete[-T] extends japi.CallbackBridge[Try[T]] { * * Java API */ -@silent("deprecated") +@nowarn("msg=deprecated") abstract class Recover[+T] extends japi.RecoverBridge[T] { protected final override def internal(result: Throwable): T = recover(result) @@ -370,7 +370,7 @@ object Filter { * SAM (Single Abstract Method) class * Java API */ -@silent("deprecated") +@nowarn("msg=deprecated") abstract class Foreach[-T] extends japi.UnitFunctionBridge[T] { override final def internal(t: T): Unit = each(t) diff --git a/akka-actor/src/main/scala/akka/dispatch/Mailbox.scala b/akka-actor/src/main/scala/akka/dispatch/Mailbox.scala index 3302032095..d7825eae7e 100644 --- a/akka-actor/src/main/scala/akka/dispatch/Mailbox.scala +++ b/akka-actor/src/main/scala/akka/dispatch/Mailbox.scala @@ -959,26 +959,29 @@ object BoundedControlAwareMailbox { override def numberOfMessages: Int = size.get() override def hasMessages: Boolean = numberOfMessages > 0 - @tailrec final override def dequeue(): Envelope = { - val count = size.get() + @tailrec def tailrecDequeue(): Envelope = { + val count = size.get() - // if both queues are empty return null - if (count > 0) { - // if there are messages try to fetch the current head - // or retry if other consumer dequeued in the mean time - if (size.compareAndSet(count, count - 1)) { - val item = super.dequeue() + // if both queues are empty return null + if (count > 0) { + // if there are messages try to fetch the current head + // or retry if other consumer dequeued in the mean time + if (size.compareAndSet(count, count - 1)) { + val item = super.dequeue() - if (size.get < capacity) signalNotFull() + if (size.get < capacity) signalNotFull() - item + item + } else { + tailrecDequeue() + } } else { - dequeue() + null } - } else { - null } + + tailrecDequeue() } private def signalNotFull(): Unit = { diff --git a/akka-actor/src/main/scala/akka/dispatch/Mailboxes.scala b/akka-actor/src/main/scala/akka/dispatch/Mailboxes.scala index 6b219e25bd..a8691f90d8 100644 --- a/akka-actor/src/main/scala/akka/dispatch/Mailboxes.scala +++ b/akka-actor/src/main/scala/akka/dispatch/Mailboxes.scala @@ -15,7 +15,7 @@ import scala.util.control.NonFatal import com.typesafe.config.{ Config, ConfigFactory } import akka.ConfigurationException -import akka.actor.{ Actor, ActorRef, ActorSystem, DeadLetter, Deploy, DynamicAccess, Props } +import akka.actor.{ actorRef2Scala, Actor, ActorRef, ActorSystem, DeadLetter, Deploy, DynamicAccess, Props } import akka.dispatch.sysmsg.{ EarliestFirstSystemMessageList, LatestFirstSystemMessageList, diff --git a/akka-actor/src/main/scala/akka/event/ActorClassificationUnsubscriber.scala b/akka-actor/src/main/scala/akka/event/ActorClassificationUnsubscriber.scala index 34c92702b0..046a818fa3 100644 --- a/akka-actor/src/main/scala/akka/event/ActorClassificationUnsubscriber.scala +++ b/akka-actor/src/main/scala/akka/event/ActorClassificationUnsubscriber.scala @@ -15,7 +15,7 @@ import akka.util.unused * * Watches all actors which subscribe on the given event stream, and unsubscribes them from it when they are Terminated. */ -protected[akka] class ActorClassificationUnsubscriber(bus: ManagedActorClassification, debug: Boolean) +protected[akka] class ActorClassificationUnsubscriber(bus: String, unsubscribe: ActorRef => Unit, debug: Boolean) extends Actor with Stash { @@ -58,7 +58,7 @@ protected[akka] class ActorClassificationUnsubscriber(bus: ManagedActorClassific Logging.Debug(simpleName(getClass), getClass, s"actor $actor has terminated, unsubscribing it from $bus")) // the `unsubscribe` will trigger another `Unregister(actor, _)` message to this unsubscriber; // but since that actor is terminated, there cannot be any harm in processing an Unregister for it. - bus.unsubscribe(actor) + unsubscribe(actor) } } @@ -75,14 +75,20 @@ private[akka] object ActorClassificationUnsubscriber { final case class Register(actor: ActorRef, seq: Int) final case class Unregister(actor: ActorRef, seq: Int) - def start(system: ActorSystem, bus: ManagedActorClassification, @unused debug: Boolean = false) = { + def start( + system: ActorSystem, + busName: String, + unsubscribe: ActorRef => Unit, + @unused debug: Boolean = false): ActorRef = { val debug = system.settings.config.getBoolean("akka.actor.debug.event-stream") system .asInstanceOf[ExtendedActorSystem] - .systemActorOf(props(bus, debug), "actorClassificationUnsubscriber-" + unsubscribersCount.incrementAndGet()) + .systemActorOf( + props(busName, unsubscribe, debug), + "actorClassificationUnsubscriber-" + unsubscribersCount.incrementAndGet()) } - private def props(eventBus: ManagedActorClassification, debug: Boolean) = - Props(classOf[ActorClassificationUnsubscriber], eventBus, debug) + private def props(busName: String, unsubscribe: ActorRef => Unit, debug: Boolean) = + Props(classOf[ActorClassificationUnsubscriber], busName, unsubscribe, debug) } diff --git a/akka-actor/src/main/scala/akka/event/EventBus.scala b/akka-actor/src/main/scala/akka/event/EventBus.scala index 9f83eb038f..852f837dd5 100644 --- a/akka-actor/src/main/scala/akka/event/EventBus.scala +++ b/akka-actor/src/main/scala/akka/event/EventBus.scala @@ -10,7 +10,7 @@ import java.util.concurrent.atomic.AtomicReference import scala.collection.immutable -import akka.actor.{ ActorRef, ActorSystem } +import akka.actor.{ actorRef2Scala, ActorRef, ActorSystem } import akka.util.{ Subclassification, SubclassifiedIndex } import akka.util.Index @@ -296,7 +296,8 @@ trait ManagedActorClassification { this: ActorEventBus with ActorClassifier => private val empty = immutable.TreeSet.empty[ActorRef] /** The unsubscriber takes care of unsubscribing actors, which have terminated. */ - protected lazy val unsubscriber = ActorClassificationUnsubscriber.start(system, this) + protected lazy val unsubscriber = + ActorClassificationUnsubscriber.start(system, this.toString(), (this.unsubscribe: ActorRef => Unit)) @tailrec protected final def associate(monitored: ActorRef, monitor: ActorRef): Boolean = { diff --git a/akka-actor/src/main/scala/akka/event/EventStream.scala b/akka-actor/src/main/scala/akka/event/EventStream.scala index 2285338ba7..1ac47c832a 100644 --- a/akka-actor/src/main/scala/akka/event/EventStream.scala +++ b/akka-actor/src/main/scala/akka/event/EventStream.scala @@ -8,9 +8,9 @@ import java.util.concurrent.atomic.AtomicReference import scala.annotation.tailrec -import com.github.ghik.silencer.silent +import scala.annotation.nowarn -import akka.actor.{ ActorRef, ActorSystem } +import akka.actor.{ actorRef2Scala, ActorRef, ActorSystem } import akka.event.Logging.simpleName import akka.util.Subclassification @@ -41,7 +41,7 @@ class EventStream(sys: ActorSystem, private val debug: Boolean) extends LoggingB protected def classify(event: Any): Class[_] = event.getClass // TODO consider avoiding the deprecated `isTerminated`? - @silent("deprecated") + @nowarn("msg=deprecated") protected def publish(event: Any, subscriber: ActorRef) = { if (sys == null && subscriber.isTerminated) unsubscribe(subscriber) else subscriber ! event diff --git a/akka-actor/src/main/scala/akka/event/Logging.scala b/akka-actor/src/main/scala/akka/event/Logging.scala index 7a8012cbb1..4afa55e0e9 100644 --- a/akka-actor/src/main/scala/akka/event/Logging.scala +++ b/akka-actor/src/main/scala/akka/event/Logging.scala @@ -13,7 +13,7 @@ import scala.concurrent.Await import scala.language.existentials import scala.util.control.{ NoStackTrace, NonFatal } -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.{ AkkaException, ConfigurationException } import akka.actor._ @@ -170,7 +170,7 @@ trait LoggingBus extends ActorEventBus { * Internal Akka use only */ private[akka] def stopDefaultLoggers(system: ActorSystem): Unit = { - @silent("never used") + @nowarn("msg=never used") val level = _logLevel // volatile access before reading loggers if (!(loggers contains StandardOutLogger)) { setUpStdoutLogger(system.settings) @@ -1514,7 +1514,7 @@ trait LoggingFilter { * In retrospect should have been abstract, but we cannot change that * without breaking binary compatibility */ -@silent("never us") +@nowarn("msg=never us") trait LoggingFilterWithMarker extends LoggingFilter { def isErrorEnabled(logClass: Class[_], logSource: String, marker: LogMarker): Boolean = isErrorEnabled(logClass, logSource) diff --git a/akka-actor/src/main/scala/akka/event/jul/JavaLogger.scala b/akka-actor/src/main/scala/akka/event/jul/JavaLogger.scala index 2e63820c26..e2eef2d3c3 100644 --- a/akka-actor/src/main/scala/akka/event/jul/JavaLogger.scala +++ b/akka-actor/src/main/scala/akka/event/jul/JavaLogger.scala @@ -8,6 +8,7 @@ import java.util.logging import akka.actor.Actor import akka.actor.ActorSystem +import akka.actor.actorRef2Scala import akka.dispatch.RequiresMessageQueue import akka.event.DummyClassForStringSources import akka.event.EventStream diff --git a/akka-actor/src/main/scala/akka/io/Dns.scala b/akka-actor/src/main/scala/akka/io/Dns.scala index 0d5a1ea1ff..ec20e29055 100644 --- a/akka-actor/src/main/scala/akka/io/Dns.scala +++ b/akka-actor/src/main/scala/akka/io/Dns.scala @@ -10,7 +10,7 @@ import java.util.function.{ Function => JFunction } import scala.collection.immutable -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.Config import akka.actor._ @@ -116,7 +116,7 @@ object Dns extends ExtensionId[DnsExt] with ExtensionIdProvider { * trigger a resolve and return None. */ @deprecated("use resolve(DnsProtocol.Resolve)", "2.6.0") - @silent("deprecated") + @nowarn("msg=deprecated") def resolve(name: String)(system: ActorSystem, sender: ActorRef): Option[Resolved] = { Dns(system).cache.resolve(name)(system, sender) } @@ -163,7 +163,7 @@ class DnsExt private[akka] (val system: ExtendedActorSystem, resolverName: Strin * be used in this case */ @InternalApi - @silent("deprecated") + @nowarn("msg=deprecated") private[akka] def loadAsyncDns(managerName: String): ActorRef = { // This can't pass in `this` as then AsyncDns would pick up the system settings asyncDns.computeIfAbsent( @@ -220,7 +220,7 @@ class DnsExt private[akka] (val system: ExtendedActorSystem, resolverName: Strin val Settings: Settings = new Settings(system.settings.config.getConfig("akka.io.dns"), resolverName) // System DNS resolver - @silent("deprecated") + @nowarn("msg=deprecated") val provider: DnsProvider = system.dynamicAccess.createInstanceFor[DnsProvider](Settings.ProviderObjectName, Nil).get diff --git a/akka-actor/src/main/scala/akka/io/InetAddressDnsProvider.scala b/akka-actor/src/main/scala/akka/io/InetAddressDnsProvider.scala index d317931bf7..e3b230fd25 100644 --- a/akka-actor/src/main/scala/akka/io/InetAddressDnsProvider.scala +++ b/akka-actor/src/main/scala/akka/io/InetAddressDnsProvider.scala @@ -4,14 +4,14 @@ package akka.io -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.annotation.InternalApi /** * INTERNAL API */ -@silent("deprecated") +@nowarn("msg=deprecated") @InternalApi class InetAddressDnsProvider extends DnsProvider { override def cache: Dns = new SimpleDnsCache() diff --git a/akka-actor/src/main/scala/akka/io/InetAddressDnsResolver.scala b/akka-actor/src/main/scala/akka/io/InetAddressDnsResolver.scala index 9fa821f436..2ca779c35f 100644 --- a/akka-actor/src/main/scala/akka/io/InetAddressDnsResolver.scala +++ b/akka-actor/src/main/scala/akka/io/InetAddressDnsResolver.scala @@ -14,10 +14,10 @@ import scala.collection.immutable import scala.concurrent.duration._ import scala.util.{ Failure, Success, Try } -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.Config -import akka.actor.{ Actor, ActorLogging } +import akka.actor.{ actorRef2Scala, Actor, ActorLogging } import akka.actor.Status import akka.annotation.InternalApi import akka.io.dns.AAAARecord @@ -34,7 +34,7 @@ import akka.util.Helpers.Requiring * * Respects the settings that can be set on the Java runtime via parameters. */ -@silent("deprecated") +@nowarn("msg=deprecated") @InternalApi class InetAddressDnsResolver(cache: SimpleDnsCache, config: Config) extends Actor with ActorLogging { @@ -108,7 +108,7 @@ class InetAddressDnsResolver(cache: SimpleDnsCache, config: Config) extends Acto cp match { case Forever => Long.MaxValue case Never => 0 - case Ttl(ttl) => ttl.toMillis + case ttl: Ttl => ttl.value.toMillis } } diff --git a/akka-actor/src/main/scala/akka/io/SimpleDnsCache.scala b/akka-actor/src/main/scala/akka/io/SimpleDnsCache.scala index db164274a1..0ed5ebadc1 100644 --- a/akka-actor/src/main/scala/akka/io/SimpleDnsCache.scala +++ b/akka-actor/src/main/scala/akka/io/SimpleDnsCache.scala @@ -9,7 +9,7 @@ import java.util.concurrent.atomic.AtomicReference import scala.annotation.tailrec import scala.collection.immutable -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor.NoSerializationVerificationNeeded import akka.annotation.InternalApi @@ -42,7 +42,7 @@ class SimpleDnsCache extends Dns with PeriodicCacheCleanup with NoSerializationV * This method is deprecated and involves a copy from the new protocol to * remain compatible */ - @silent("deprecated") + @nowarn("msg=deprecated") override def cached(name: String): Option[Dns.Resolved] = { // adapt response to the old protocol val ipv4 = cacheRef.get().get((name, Ip(ipv6 = false))).toList.flatMap(_.records) @@ -110,7 +110,7 @@ object SimpleDnsCache { val until = ttl match { case Forever => Long.MaxValue case Never => clock() - 1 - case Ttl(ttl) => clock() + ttl.toMillis + case ttl: Ttl => clock() + ttl.value.toMillis } new Cache[K, V](queue + new ExpiryEntry[K](name, until), cache + (name -> CacheEntry(answer, until)), clock) @@ -131,7 +131,7 @@ object SimpleDnsCache { } } - private case class CacheEntry[T](answer: T, until: Long) { + private[io] case class CacheEntry[T](answer: T, until: Long) { def isValid(clock: Long): Boolean = clock < until } diff --git a/akka-actor/src/main/scala/akka/io/Tcp.scala b/akka-actor/src/main/scala/akka/io/Tcp.scala index a58196bfa5..398814f5fa 100644 --- a/akka-actor/src/main/scala/akka/io/Tcp.scala +++ b/akka-actor/src/main/scala/akka/io/Tcp.scala @@ -12,7 +12,7 @@ import java.nio.file.{ Path, Paths } import scala.collection.immutable import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.Config import akka.actor._ @@ -119,7 +119,7 @@ object Tcp extends ExtensionId[TcpExt] with ExtensionIdProvider { * @param localAddress optionally specifies a specific address to bind to * @param options Please refer to the `Tcp.SO` object for a list of all supported options. */ - @silent("deprecated") + @nowarn("msg=deprecated") final case class Connect( remoteAddress: InetSocketAddress, localAddress: Option[InetSocketAddress] = None, @@ -147,7 +147,7 @@ object Tcp extends ExtensionId[TcpExt] with ExtensionIdProvider { * * @param options Please refer to the `Tcp.SO` object for a list of all supported options. */ - @silent("deprecated") + @nowarn("msg=deprecated") final case class Bind( handler: ActorRef, localAddress: InetSocketAddress, diff --git a/akka-actor/src/main/scala/akka/io/TcpConnection.scala b/akka-actor/src/main/scala/akka/io/TcpConnection.scala index 8a2fe1ea5c..371d9cd63e 100644 --- a/akka-actor/src/main/scala/akka/io/TcpConnection.scala +++ b/akka-actor/src/main/scala/akka/io/TcpConnection.scala @@ -16,7 +16,7 @@ import scala.collection.immutable import scala.concurrent.duration._ import scala.util.control.{ NoStackTrace, NonFatal } -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor._ import akka.dispatch.{ RequiresMessageQueue, UnboundedMessageQueueSemantics } @@ -160,11 +160,11 @@ private[io] abstract class TcpConnection(val tcp: TcpExt, val channel: SocketCha case write: WriteCommand => if (writingSuspended) { if (TraceLogging) log.debug("Dropping write because writing is suspended") - sender() ! write.failureMessage.withCause(DroppingWriteBecauseWritingIsSuspendedException) + sender() ! CommandFailed(write).withCause(DroppingWriteBecauseWritingIsSuspendedException) } else if (writePending) { if (TraceLogging) log.debug("Dropping write because queue is full") - sender() ! write.failureMessage.withCause(DroppingWriteBecauseQueueIsFullException) + sender() ! CommandFailed(write).withCause(DroppingWriteBecauseQueueIsFullException) if (info.useResumeWriting) writingSuspended = true } else { @@ -207,7 +207,7 @@ private[io] abstract class TcpConnection(val tcp: TcpExt, val channel: SocketCha // AUXILIARIES and IMPLEMENTATION /** used in subclasses to start the common machinery above once a channel is connected */ - @silent("deprecated") + @nowarn("msg=deprecated") def completeConnect( registration: ChannelRegistration, commander: ActorRef, diff --git a/akka-actor/src/main/scala/akka/io/TcpIncomingConnection.scala b/akka-actor/src/main/scala/akka/io/TcpIncomingConnection.scala index 3abde08243..61b33d7744 100644 --- a/akka-actor/src/main/scala/akka/io/TcpIncomingConnection.scala +++ b/akka-actor/src/main/scala/akka/io/TcpIncomingConnection.scala @@ -8,7 +8,7 @@ import java.nio.channels.SocketChannel import scala.collection.immutable -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor.ActorRef import akka.io.Inet.SocketOption @@ -19,7 +19,7 @@ import akka.io.Inet.SocketOption * * INTERNAL API */ -@silent("deprecated") +@nowarn("msg=deprecated") private[io] class TcpIncomingConnection( _tcp: TcpExt, _channel: SocketChannel, diff --git a/akka-actor/src/main/scala/akka/io/TcpListener.scala b/akka-actor/src/main/scala/akka/io/TcpListener.scala index f02df15c69..e2c1f89004 100644 --- a/akka-actor/src/main/scala/akka/io/TcpListener.scala +++ b/akka-actor/src/main/scala/akka/io/TcpListener.scala @@ -78,7 +78,7 @@ private[io] class TcpListener( } else { e } - bindCommander ! bind.failureMessage.withCause(exception) + bindCommander ! CommandFailed(bind).withCause(exception) log.error(exception, "Bind failed for TCP channel on endpoint [{}]", bind.localAddress) context.stop(self) } diff --git a/akka-actor/src/main/scala/akka/io/TcpOutgoingConnection.scala b/akka-actor/src/main/scala/akka/io/TcpOutgoingConnection.scala index 356c1dc637..c21dfa170f 100644 --- a/akka-actor/src/main/scala/akka/io/TcpOutgoingConnection.scala +++ b/akka-actor/src/main/scala/akka/io/TcpOutgoingConnection.scala @@ -46,7 +46,7 @@ private[io] class TcpOutgoingConnection( timeout.foreach(context.setReceiveTimeout) //Initiate connection timeout if supplied private def stop(cause: Throwable): Unit = - stopWith(CloseInformation(Set(commander), connect.failureMessage.withCause(cause)), shouldAbort = true) + stopWith(CloseInformation(Set(commander), CommandFailed(connect).withCause(cause)), shouldAbort = true) private def reportConnectFailure(thunk: => Unit): Unit = { try { diff --git a/akka-actor/src/main/scala/akka/io/Udp.scala b/akka-actor/src/main/scala/akka/io/Udp.scala index b8be191c6a..3c95692123 100644 --- a/akka-actor/src/main/scala/akka/io/Udp.scala +++ b/akka-actor/src/main/scala/akka/io/Udp.scala @@ -9,7 +9,7 @@ import java.net.InetSocketAddress import scala.collection.immutable -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.Config import akka.actor._ @@ -100,7 +100,7 @@ object Udp extends ExtensionId[UdpExt] with ExtensionIdProvider { * The listener actor for the newly bound port will reply with a [[Bound]] * message, or the manager will reply with a [[CommandFailed]] message. */ - @silent("deprecated") + @nowarn("msg=deprecated") final case class Bind( handler: ActorRef, localAddress: InetSocketAddress, @@ -124,7 +124,7 @@ object Udp extends ExtensionId[UdpExt] with ExtensionIdProvider { * The “simple sender” will not stop itself, you will have to send it a [[akka.actor.PoisonPill]] * when you want to close the socket. */ - @silent("deprecated") + @nowarn("msg=deprecated") case class SimpleSender(options: immutable.Traversable[SocketOption] = Nil) extends Command object SimpleSender extends SimpleSender(Nil) diff --git a/akka-actor/src/main/scala/akka/io/UdpConnected.scala b/akka-actor/src/main/scala/akka/io/UdpConnected.scala index 5c9696aa57..b2f40500e6 100644 --- a/akka-actor/src/main/scala/akka/io/UdpConnected.scala +++ b/akka-actor/src/main/scala/akka/io/UdpConnected.scala @@ -9,7 +9,7 @@ import java.net.InetSocketAddress import scala.collection.immutable -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor._ import akka.io.Inet.SocketOption @@ -94,7 +94,7 @@ object UdpConnected extends ExtensionId[UdpConnectedExt] with ExtensionIdProvide * which is restricted to sending to and receiving from the given `remoteAddress`. * All received datagrams will be sent to the designated `handler` actor. */ - @silent("deprecated") + @nowarn("msg=deprecated") final case class Connect( handler: ActorRef, remoteAddress: InetSocketAddress, diff --git a/akka-actor/src/main/scala/akka/io/UdpConnection.scala b/akka-actor/src/main/scala/akka/io/UdpConnection.scala index 2742b22bdb..32940ec067 100644 --- a/akka-actor/src/main/scala/akka/io/UdpConnection.scala +++ b/akka-actor/src/main/scala/akka/io/UdpConnection.scala @@ -12,7 +12,7 @@ import java.nio.channels.SelectionKey._ import scala.annotation.tailrec import scala.util.control.NonFatal -import akka.actor.{ Actor, ActorLogging, ActorRef } +import akka.actor.{ actorRef2Scala, Actor, ActorLogging, ActorRef } import akka.actor.Status.Failure import akka.dispatch.{ RequiresMessageQueue, UnboundedMessageQueueSemantics } import akka.io.SelectionHandler._ diff --git a/akka-actor/src/main/scala/akka/io/UdpListener.scala b/akka-actor/src/main/scala/akka/io/UdpListener.scala index 820854fc88..7d5a8d77be 100644 --- a/akka-actor/src/main/scala/akka/io/UdpListener.scala +++ b/akka-actor/src/main/scala/akka/io/UdpListener.scala @@ -11,7 +11,7 @@ import java.nio.channels.SelectionKey._ import scala.annotation.tailrec import scala.util.control.NonFatal -import akka.actor.{ Actor, ActorLogging, ActorRef } +import akka.actor.{ actorRef2Scala, Actor, ActorLogging, ActorRef } import akka.dispatch.{ RequiresMessageQueue, UnboundedMessageQueueSemantics } import akka.io.Inet.DatagramChannelCreator import akka.io.SelectionHandler._ diff --git a/akka-actor/src/main/scala/akka/io/UdpSender.scala b/akka-actor/src/main/scala/akka/io/UdpSender.scala index 232053a7b2..eff42d2d88 100644 --- a/akka-actor/src/main/scala/akka/io/UdpSender.scala +++ b/akka-actor/src/main/scala/akka/io/UdpSender.scala @@ -4,19 +4,19 @@ package akka.io +import scala.collection.immutable +import scala.util.control.NonFatal + import akka.actor._ import akka.dispatch.{ RequiresMessageQueue, UnboundedMessageQueueSemantics } import akka.io.Inet.{ DatagramChannelCreator, SocketOption } import akka.io.Udp._ -import com.github.ghik.silencer.silent - -import scala.collection.immutable -import scala.util.control.NonFatal +import scala.annotation.nowarn /** * INTERNAL API */ -@silent("deprecated") +@nowarn("msg=deprecated") private[io] class UdpSender( val udp: UdpExt, channelRegistry: ChannelRegistry, diff --git a/akka-actor/src/main/scala/akka/io/WithUdpSend.scala b/akka-actor/src/main/scala/akka/io/WithUdpSend.scala index 61be77e98c..1e9dc9b9fd 100644 --- a/akka-actor/src/main/scala/akka/io/WithUdpSend.scala +++ b/akka-actor/src/main/scala/akka/io/WithUdpSend.scala @@ -9,7 +9,7 @@ import java.nio.channels.{ DatagramChannel, SelectionKey } import scala.util.control.NonFatal -import akka.actor.{ Actor, ActorLogging, ActorRef } +import akka.actor.{ actorRef2Scala, Actor, ActorLogging, ActorRef } import akka.io.SelectionHandler._ import akka.io.Udp.{ CommandFailed, Send } import akka.io.dns.DnsProtocol diff --git a/akka-actor/src/main/scala/akka/io/dns/DnsResourceRecords.scala b/akka-actor/src/main/scala/akka/io/dns/DnsResourceRecords.scala index 5428961e28..123d7e0fe1 100644 --- a/akka-actor/src/main/scala/akka/io/dns/DnsResourceRecords.scala +++ b/akka-actor/src/main/scala/akka/io/dns/DnsResourceRecords.scala @@ -147,8 +147,10 @@ private[dns] object ResourceRecord { val name = DomainName.parse(it, msg) val recType = it.getShort val recClass = it.getShort + // If the number of cases increase remember to add a `@switch` annotation e.g.: + // val ttl = (it.getInt: @switch) match { // According to https://www.ietf.org/rfc/rfc1035.txt: "TTL: positive values of a signed 32 bit number." - val ttl = (it.getInt: @switch) match { + val ttl = (it.getInt) match { case 0 => Ttl.never case nonZero => Ttl.fromPositive(nonZero.seconds) } diff --git a/akka-actor/src/main/scala/akka/io/dns/DnsSettings.scala b/akka-actor/src/main/scala/akka/io/dns/DnsSettings.scala index c548807846..074aaa8adb 100644 --- a/akka-actor/src/main/scala/akka/io/dns/DnsSettings.scala +++ b/akka-actor/src/main/scala/akka/io/dns/DnsSettings.scala @@ -78,7 +78,7 @@ private[dns] final class DnsSettings(system: ExtendedActorSystem, c: Config) { parsed match { case Success(value) => Some(value) case Failure(exception) => - val log = Logging(system, getClass) + val log = Logging(system, classOf[DnsSettings]) if (log.isWarningEnabled) { log.error(exception, "Error parsing /etc/resolv.conf, ignoring.") } @@ -192,7 +192,7 @@ object DnsSettings { // this method is used as a fallback in case JNDI results in an empty list // this method will not work when running modularised of course since it needs access to internal sun classes def getNameserversUsingReflection: Try[List[InetSocketAddress]] = { - system.dynamicAccess.getClassFor("sun.net.dns.ResolverConfiguration").flatMap { c => + system.dynamicAccess.getClassFor[Any]("sun.net.dns.ResolverConfiguration").flatMap { c => Try { val open = c.getMethod("open") val nameservers = c.getMethod("nameservers") diff --git a/akka-actor/src/main/scala/akka/io/dns/internal/AsyncDnsManager.scala b/akka-actor/src/main/scala/akka/io/dns/internal/AsyncDnsManager.scala index 6408e87130..e8ae50c880 100644 --- a/akka-actor/src/main/scala/akka/io/dns/internal/AsyncDnsManager.scala +++ b/akka-actor/src/main/scala/akka/io/dns/internal/AsyncDnsManager.scala @@ -10,10 +10,10 @@ import java.util.concurrent.TimeUnit import scala.concurrent.ExecutionContextExecutor import scala.concurrent.duration.Duration -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.Config -import akka.actor.{ Actor, ActorLogging, ActorRefFactory, Deploy, ExtendedActorSystem, Props, Timers } +import akka.actor.{ actorRef2Scala, Actor, ActorLogging, ActorRefFactory, Deploy, ExtendedActorSystem, Props, Timers } import akka.annotation.InternalApi import akka.dispatch.{ RequiresMessageQueue, UnboundedMessageQueueSemantics } import akka.io.{ Dns, DnsExt, DnsProvider } @@ -37,7 +37,7 @@ private[akka] object AsyncDnsManager { * INTERNAL API */ @InternalApi -@silent("deprecated") +@nowarn("msg=deprecated") private[io] final class AsyncDnsManager( name: String, system: ExtendedActorSystem, @@ -91,7 +91,7 @@ private[io] final class AsyncDnsManager( } // still support deprecated DNS API - @silent("deprecated") + @nowarn("msg=deprecated") override def receive: Receive = { case r: DnsProtocol.Resolve => log.debug("Resolution request for {} {} from {}", r.name, r.requestType, sender()) diff --git a/akka-actor/src/main/scala/akka/io/dns/internal/AsyncDnsProvider.scala b/akka-actor/src/main/scala/akka/io/dns/internal/AsyncDnsProvider.scala index 1f83fac387..6ef8ebcaa8 100644 --- a/akka-actor/src/main/scala/akka/io/dns/internal/AsyncDnsProvider.scala +++ b/akka-actor/src/main/scala/akka/io/dns/internal/AsyncDnsProvider.scala @@ -4,7 +4,7 @@ package akka.io.dns.internal -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.annotation.InternalApi import akka.io._ @@ -13,7 +13,7 @@ import akka.io._ * INTERNAL API */ @InternalApi -@silent("deprecated") +@nowarn("msg=deprecated") private[akka] class AsyncDnsProvider extends DnsProvider { override def cache: Dns = new SimpleDnsCache() override def actorClass = classOf[AsyncDnsResolver] diff --git a/akka-actor/src/main/scala/akka/io/dns/internal/AsyncDnsResolver.scala b/akka-actor/src/main/scala/akka/io/dns/internal/AsyncDnsResolver.scala index 36312c0773..62149c12ed 100644 --- a/akka-actor/src/main/scala/akka/io/dns/internal/AsyncDnsResolver.scala +++ b/akka-actor/src/main/scala/akka/io/dns/internal/AsyncDnsResolver.scala @@ -12,7 +12,7 @@ import scala.concurrent.Future import scala.util.Try import scala.util.control.NonFatal -import akka.actor.{ Actor, ActorLogging, ActorRef, ActorRefFactory } +import akka.actor.{ actorRef2Scala, Actor, ActorLogging, ActorRef, ActorRefFactory } import akka.annotation.InternalApi import akka.io.SimpleDnsCache import akka.io.dns._ diff --git a/akka-actor/src/main/scala/akka/io/dns/internal/DnsClient.scala b/akka-actor/src/main/scala/akka/io/dns/internal/DnsClient.scala index d10d5550f9..f7f7b8f285 100644 --- a/akka-actor/src/main/scala/akka/io/dns/internal/DnsClient.scala +++ b/akka-actor/src/main/scala/akka/io/dns/internal/DnsClient.scala @@ -10,9 +10,9 @@ import scala.collection.{ immutable => im } import scala.concurrent.duration._ import scala.util.Try -import com.github.ghik.silencer.silent +import scala.annotation.nowarn -import akka.actor.{ Actor, ActorLogging, ActorRef, NoSerializationVerificationNeeded, Props, Stash } +import akka.actor.{ actorRef2Scala, Actor, ActorLogging, ActorRef, NoSerializationVerificationNeeded, Props, Stash } import akka.actor.Status.Failure import akka.annotation.InternalApi import akka.io.{ IO, Tcp, Udp } @@ -73,7 +73,7 @@ import akka.pattern.{ BackoffOpts, BackoffSupervisor } /** * Silent to allow map update syntax */ - @silent() + @nowarn() def ready(socket: ActorRef): Receive = { case DropRequest(id) => log.debug("Dropping request [{}]", id) diff --git a/akka-actor/src/main/scala/akka/io/dns/internal/DnsMessage.scala b/akka-actor/src/main/scala/akka/io/dns/internal/DnsMessage.scala index b1b9860e1a..281e9393a3 100644 --- a/akka-actor/src/main/scala/akka/io/dns/internal/DnsMessage.scala +++ b/akka-actor/src/main/scala/akka/io/dns/internal/DnsMessage.scala @@ -8,7 +8,7 @@ import scala.collection.GenTraversableOnce import scala.collection.immutable.Seq import scala.util.{ Failure, Success, Try } -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.annotation.InternalApi import akka.io.dns.ResourceRecord @@ -157,7 +157,7 @@ private[internal] object Message { } import scala.language.implicitConversions - @silent("deprecated") + @nowarn("msg=deprecated") implicit def flattener[T](tried: Try[T]): GenTraversableOnce[T] = if (flags.isTruncated) tried.toOption else diff --git a/akka-actor/src/main/scala/akka/io/dns/internal/TcpDnsClient.scala b/akka-actor/src/main/scala/akka/io/dns/internal/TcpDnsClient.scala index b852905a47..d8a59d4a10 100644 --- a/akka-actor/src/main/scala/akka/io/dns/internal/TcpDnsClient.scala +++ b/akka-actor/src/main/scala/akka/io/dns/internal/TcpDnsClient.scala @@ -7,7 +7,7 @@ package akka.io.dns.internal import java.net.InetSocketAddress import akka.AkkaException -import akka.actor.{ Actor, ActorLogging, ActorRef, Stash } +import akka.actor.{ actorRef2Scala, Actor, ActorLogging, ActorRef, Stash } import akka.annotation.InternalApi import akka.io.Tcp import akka.io.dns.internal.DnsClient.Answer diff --git a/akka-actor/src/main/scala/akka/io/dns/internal/package.scala b/akka-actor/src/main/scala/akka/io/dns/internal/package.scala index 16c385b5b6..ee4f3e3cb1 100644 --- a/akka-actor/src/main/scala/akka/io/dns/internal/package.scala +++ b/akka-actor/src/main/scala/akka/io/dns/internal/package.scala @@ -28,7 +28,7 @@ package object internal { (a, b) match { case (Forever, Forever) => 0 case (Never, Never) => 0 - case (Ttl(v1), Ttl(v2)) => v1.compare(v2) + case (v1: Ttl, v2: Ttl) => v1.value.compare(v2.value) case (Never, _) => -1 case (_, Forever) => -1 case (Forever, _) => 1 diff --git a/akka-actor/src/main/scala/akka/japi/JavaAPI.scala b/akka-actor/src/main/scala/akka/japi/JavaAPI.scala index e8a4c2ff66..2e0e9af460 100644 --- a/akka-actor/src/main/scala/akka/japi/JavaAPI.scala +++ b/akka-actor/src/main/scala/akka/japi/JavaAPI.scala @@ -12,7 +12,7 @@ import scala.reflect.ClassTag import scala.runtime.AbstractPartialFunction import scala.util.control.NoStackTrace -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.util.Collections.EmptyImmutableSeq @@ -84,7 +84,7 @@ object Pair { * * This class is kept for compatibility, but for future API's please prefer [[akka.japi.function.Creator]]. */ -@silent("@SerialVersionUID has no effect") +@nowarn("msg=@SerialVersionUID has no effect") @SerialVersionUID(1L) trait Creator[T] extends Serializable { diff --git a/akka-actor/src/main/scala/akka/japi/function/Function.scala b/akka-actor/src/main/scala/akka/japi/function/Function.scala index 436da20772..c7550364fe 100644 --- a/akka-actor/src/main/scala/akka/japi/function/Function.scala +++ b/akka-actor/src/main/scala/akka/japi/function/Function.scala @@ -4,14 +4,14 @@ package akka.japi.function -import com.github.ghik.silencer.silent +import scala.annotation.nowarn /** * A Function interface. Used to create first-class-functions is Java. * `Serializable` is needed to be able to grab line number for Java 8 lambdas. * Supports throwing `Exception` in the apply, which the `java.util.function.Function` counterpart does not. */ -@silent("@SerialVersionUID has no effect") +@nowarn("msg=@SerialVersionUID has no effect") @SerialVersionUID(1L) trait Function[-T, +R] extends java.io.Serializable { @throws(classOf[Exception]) @@ -23,7 +23,7 @@ trait Function[-T, +R] extends java.io.Serializable { * `Serializable` is needed to be able to grab line number for Java 8 lambdas. * Supports throwing `Exception` in the apply, which the `java.util.function.BiFunction` counterpart does not. */ -@silent("@SerialVersionUID has no effect") +@nowarn("msg=@SerialVersionUID has no effect") @SerialVersionUID(1L) trait Function2[-T1, -T2, +R] extends java.io.Serializable { @throws(classOf[Exception]) @@ -35,7 +35,7 @@ trait Function2[-T1, -T2, +R] extends java.io.Serializable { * `Serializable` is needed to be able to grab line number for Java 8 lambdas. * Supports throwing `Exception` in the apply, which the `java.util.function.Consumer` counterpart does not. */ -@silent("@SerialVersionUID has no effect") +@nowarn("msg=@SerialVersionUID has no effect") @SerialVersionUID(1L) trait Procedure[-T] extends java.io.Serializable { @throws(classOf[Exception]) @@ -47,7 +47,7 @@ trait Procedure[-T] extends java.io.Serializable { * `Serializable` is needed to be able to grab line number for Java 8 lambdas. * Supports throwing `Exception` in the apply, which the `java.util.function.Effect` counterpart does not. */ -@silent("@SerialVersionUID has no effect") +@nowarn("msg=@SerialVersionUID has no effect") @SerialVersionUID(1L) trait Effect extends java.io.Serializable { @@ -60,7 +60,7 @@ trait Effect extends java.io.Serializable { * `Serializable` is needed to be able to grab line number for Java 8 lambdas. * Supports throwing `Exception` in the apply, which the `java.util.function.Predicate` counterpart does not. */ -@silent("@SerialVersionUID has no effect") +@nowarn("msg=@SerialVersionUID has no effect") @SerialVersionUID(1L) trait Predicate[-T] extends java.io.Serializable { def test(param: T): Boolean @@ -70,7 +70,7 @@ trait Predicate[-T] extends java.io.Serializable { * A constructor/factory, takes no parameters but creates a new value of type T every call. * Supports throwing `Exception` in the apply, which the `java.util.function.Creator` counterpart does not. */ -@silent("@SerialVersionUID has no effect") +@nowarn("msg=@SerialVersionUID has no effect") @SerialVersionUID(1L) trait Creator[+T] extends Serializable { diff --git a/akka-actor/src/main/scala/akka/pattern/AskSupport.scala b/akka-actor/src/main/scala/akka/pattern/AskSupport.scala index 287ed06e17..cb0c7962a3 100644 --- a/akka-actor/src/main/scala/akka/pattern/AskSupport.scala +++ b/akka-actor/src/main/scala/akka/pattern/AskSupport.scala @@ -11,17 +11,17 @@ import scala.annotation.tailrec import scala.concurrent.{ Future, Promise } import scala.language.implicitConversions import scala.util.{ Failure, Success } -import com.github.ghik.silencer.silent +import scala.annotation.nowarn +import scala.util.control.NoStackTrace + import akka.actor._ import akka.annotation.{ InternalApi, InternalStableApi } import akka.dispatch.ExecutionContexts import akka.dispatch.sysmsg._ -import akka.util.ByteString import akka.util.{ Timeout, Unsafe } +import akka.util.ByteString import akka.util.unused -import scala.util.control.NoStackTrace - /** * This is what is used to complete a Future that is returned from an ask/? call, * when it times out. A typical reason for `AskTimeoutException` is that the recipient @@ -529,13 +529,18 @@ private[akka] final class PromiseActorRef private ( * Stopped => stopped, path not yet created */ @volatile - @silent("never used") + @nowarn("msg=never used") private[this] var _stateDoNotCallMeDirectly: AnyRef = _ @volatile - @silent("never used") + @nowarn("msg=never used") private[this] var _watchedByDoNotCallMeDirectly: Set[ActorRef] = ActorCell.emptyActorRefSet + @nowarn private def _preventPrivateUnusedErasure = { + _stateDoNotCallMeDirectly + _watchedByDoNotCallMeDirectly + } + @inline private[this] def watchedBy: Set[ActorRef] = Unsafe.instance.getObjectVolatile(this, watchedByOffset).asInstanceOf[Set[ActorRef]] diff --git a/akka-actor/src/main/scala/akka/pattern/Backoff.scala b/akka-actor/src/main/scala/akka/pattern/Backoff.scala index 2fe6c4b616..94553091fa 100644 --- a/akka-actor/src/main/scala/akka/pattern/Backoff.scala +++ b/akka-actor/src/main/scala/akka/pattern/Backoff.scala @@ -6,7 +6,7 @@ package akka.pattern import scala.concurrent.duration.{ Duration, FiniteDuration } -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor.{ OneForOneStrategy, Props, SupervisorStrategy } import akka.annotation.DoNotInherit @@ -567,7 +567,7 @@ trait BackoffOptions { private[akka] def props: Props } -@silent("deprecated") +@nowarn("msg=deprecated") private final case class BackoffOptionsImpl( backoffType: BackoffType = RestartImpliesFailure, childProps: Props, diff --git a/akka-actor/src/main/scala/akka/pattern/BackoffOptions.scala b/akka-actor/src/main/scala/akka/pattern/BackoffOptions.scala index 9d9c3f5ab9..83a70a5234 100644 --- a/akka-actor/src/main/scala/akka/pattern/BackoffOptions.scala +++ b/akka-actor/src/main/scala/akka/pattern/BackoffOptions.scala @@ -5,6 +5,7 @@ package akka.pattern import scala.concurrent.duration.{ Duration, FiniteDuration } + import akka.actor.{ ActorRef, OneForOneStrategy, Props, SupervisorStrategy } import akka.annotation.{ DoNotInherit, InternalApi } import akka.pattern.internal.{ BackoffOnRestartSupervisor, BackoffOnStopSupervisor } diff --git a/akka-actor/src/main/scala/akka/pattern/CircuitBreaker.scala b/akka-actor/src/main/scala/akka/pattern/CircuitBreaker.scala index 2080968f4b..e758e59492 100644 --- a/akka-actor/src/main/scala/akka/pattern/CircuitBreaker.scala +++ b/akka-actor/src/main/scala/akka/pattern/CircuitBreaker.scala @@ -18,7 +18,7 @@ import scala.util.{ Failure, Success, Try } import scala.util.control.NoStackTrace import scala.util.control.NonFatal -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.AkkaException import akka.actor.Scheduler import akka.dispatch.ExecutionContexts.parasitic @@ -250,16 +250,19 @@ class CircuitBreaker( * Holds reference to current state of CircuitBreaker - *access only via helper methods* */ @volatile - @silent("never used") private[this] var _currentStateDoNotCallMeDirectly: State = Closed /** * Holds reference to current resetTimeout of CircuitBreaker - *access only via helper methods* */ @volatile - @silent("never used") private[this] var _currentResetTimeoutDoNotCallMeDirectly: FiniteDuration = resetTimeout + @nowarn private def _preventPrivateUnusedErasure = { + _currentStateDoNotCallMeDirectly + _currentResetTimeoutDoNotCallMeDirectly + } + /** * Helper method for access to underlying state via Unsafe * diff --git a/akka-actor/src/main/scala/akka/pattern/HandleBackoff.scala b/akka-actor/src/main/scala/akka/pattern/HandleBackoff.scala index c016c304fe..9306cb86f0 100644 --- a/akka-actor/src/main/scala/akka/pattern/HandleBackoff.scala +++ b/akka-actor/src/main/scala/akka/pattern/HandleBackoff.scala @@ -4,7 +4,7 @@ package akka.pattern -import akka.actor.{ Actor, ActorRef, Props } +import akka.actor.{ actorRef2Scala, Actor, ActorRef, Props } import akka.annotation.InternalApi /** diff --git a/akka-actor/src/main/scala/akka/pattern/Patterns.scala b/akka-actor/src/main/scala/akka/pattern/Patterns.scala index a329f7cf07..4029f1764c 100644 --- a/akka-actor/src/main/scala/akka/pattern/Patterns.scala +++ b/akka-actor/src/main/scala/akka/pattern/Patterns.scala @@ -9,6 +9,7 @@ import java.util.concurrent.{ Callable, CompletionStage, TimeUnit } import scala.compat.java8.FutureConverters._ import scala.concurrent.ExecutionContext + import akka.actor.{ ActorSelection, ClassicActorSystemProvider, Scheduler } import akka.util.JavaDurationConverters._ diff --git a/akka-actor/src/main/scala/akka/pattern/PipeToSupport.scala b/akka-actor/src/main/scala/akka/pattern/PipeToSupport.scala index b256c3aaf7..453ee3cce8 100644 --- a/akka-actor/src/main/scala/akka/pattern/PipeToSupport.scala +++ b/akka-actor/src/main/scala/akka/pattern/PipeToSupport.scala @@ -12,7 +12,7 @@ import scala.util.{ Failure, Success } import language.implicitConversions -import akka.actor.{ Actor, ActorRef, Status } +import akka.actor.{ actorRef2Scala, Actor, ActorRef, Status } import akka.actor.ActorSelection import akka.util.unused diff --git a/akka-actor/src/main/scala/akka/pattern/RetrySupport.scala b/akka-actor/src/main/scala/akka/pattern/RetrySupport.scala index ef840f79c1..352de3d5a0 100644 --- a/akka-actor/src/main/scala/akka/pattern/RetrySupport.scala +++ b/akka-actor/src/main/scala/akka/pattern/RetrySupport.scala @@ -182,7 +182,7 @@ object RetrySupport extends RetrySupport { } case None => retry(attempt, maxAttempts, delayFunction, nextAttempt) - case _ => + case null => Future.failed(new IllegalArgumentException("The delayFunction of retry should not return null.")) } diff --git a/akka-actor/src/main/scala/akka/pattern/StatusReply.scala b/akka-actor/src/main/scala/akka/pattern/StatusReply.scala index 954c186359..d517bb30df 100644 --- a/akka-actor/src/main/scala/akka/pattern/StatusReply.scala +++ b/akka-actor/src/main/scala/akka/pattern/StatusReply.scala @@ -4,16 +4,16 @@ package akka.pattern +import scala.concurrent.Future +import scala.util.{ Failure => ScalaFailure } +import scala.util.{ Success => ScalaSuccess } +import scala.util.Try +import scala.util.control.NoStackTrace + import akka.Done import akka.annotation.InternalApi import akka.dispatch.ExecutionContexts -import scala.concurrent.Future -import scala.util.Try -import scala.util.control.NoStackTrace -import scala.util.{ Failure => ScalaFailure } -import scala.util.{ Success => ScalaSuccess } - /** * Generic top-level message type for replies that signal failure or success. Convenient to use together with the * `askWithStatus` ask variants. @@ -160,8 +160,11 @@ object StatusReply { @InternalApi private[akka] def flattenStatusFuture[T](f: Future[StatusReply[T]]): Future[T] = f.transform { - case ScalaSuccess(StatusReply.Success(v)) => ScalaSuccess(v.asInstanceOf[T]) - case ScalaSuccess(StatusReply.Error(ex)) => ScalaFailure[T](ex) - case fail @ ScalaFailure(_) => fail.asInstanceOf[Try[T]] + case ScalaSuccess(s) => + s match { + case StatusReply.Success(v) => ScalaSuccess(v.asInstanceOf[T]) + case StatusReply.Error(ex) => ScalaFailure[T](ex) + } + case fail @ ScalaFailure(_) => fail.asInstanceOf[Try[T]] }(ExecutionContexts.parasitic) } diff --git a/akka-actor/src/main/scala/akka/pattern/internal/BackoffOnRestartSupervisor.scala b/akka-actor/src/main/scala/akka/pattern/internal/BackoffOnRestartSupervisor.scala index 415f4481c9..365218f8bd 100644 --- a/akka-actor/src/main/scala/akka/pattern/internal/BackoffOnRestartSupervisor.scala +++ b/akka-actor/src/main/scala/akka/pattern/internal/BackoffOnRestartSupervisor.scala @@ -42,11 +42,12 @@ import akka.pattern.{ import BackoffSupervisor._ import context._ - override val supervisorStrategy: OneForOneStrategy = + override val supervisorStrategy: OneForOneStrategy = { + val decider = super.supervisorStrategy.decider OneForOneStrategy(strategy.maxNrOfRetries, strategy.withinTimeRange, strategy.loggingEnabled) { case ex => val defaultDirective: Directive = - super.supervisorStrategy.decider.applyOrElse(ex, (_: Any) => Escalate) + decider.applyOrElse(ex, (_: Any) => Escalate) strategy.decider.applyOrElse(ex, (_: Any) => defaultDirective) match { // Whatever the final Directive is, we will translate all Restarts @@ -78,6 +79,7 @@ import akka.pattern.{ case other => other } } + } def waitChildTerminatedBeforeBackoff(childRef: ActorRef): Receive = { case Terminated(`childRef`) => diff --git a/akka-actor/src/main/scala/akka/pattern/internal/BackoffOnStopSupervisor.scala b/akka-actor/src/main/scala/akka/pattern/internal/BackoffOnStopSupervisor.scala index 0e760bffe3..d0d64b0e19 100644 --- a/akka-actor/src/main/scala/akka/pattern/internal/BackoffOnStopSupervisor.scala +++ b/akka-actor/src/main/scala/akka/pattern/internal/BackoffOnStopSupervisor.scala @@ -6,7 +6,7 @@ package akka.pattern.internal import scala.concurrent.duration.FiniteDuration -import akka.actor.{ Actor, ActorLogging, OneForOneStrategy, Props, SupervisorStrategy, Terminated } +import akka.actor.{ actorRef2Scala, Actor, ActorLogging, OneForOneStrategy, Props, SupervisorStrategy, Terminated } import akka.actor.SupervisorStrategy.{ Directive, Escalate } import akka.annotation.InternalApi import akka.pattern.{ @@ -43,16 +43,19 @@ import akka.pattern.{ import BackoffSupervisor._ import context.dispatcher - override val supervisorStrategy: SupervisorStrategy = strategy match { - case oneForOne: OneForOneStrategy => - OneForOneStrategy(oneForOne.maxNrOfRetries, oneForOne.withinTimeRange, oneForOne.loggingEnabled) { - case ex => - val defaultDirective: Directive = - super.supervisorStrategy.decider.applyOrElse(ex, (_: Any) => Escalate) + override val supervisorStrategy: SupervisorStrategy = { + val decider = super.supervisorStrategy.decider + strategy match { + case oneForOne: OneForOneStrategy => + OneForOneStrategy(oneForOne.maxNrOfRetries, oneForOne.withinTimeRange, oneForOne.loggingEnabled) { + case ex => + val defaultDirective: Directive = + decider.applyOrElse(ex, (_: Any) => Escalate) - strategy.decider.applyOrElse(ex, (_: Any) => defaultDirective) - } - case s => s + strategy.decider.applyOrElse(ex, (_: Any) => defaultDirective) + } + case s => s + } } def onTerminated: Receive = { diff --git a/akka-actor/src/main/scala/akka/routing/Balancing.scala b/akka-actor/src/main/scala/akka/routing/Balancing.scala index 338e62b098..d32ae74a4f 100644 --- a/akka-actor/src/main/scala/akka/routing/Balancing.scala +++ b/akka-actor/src/main/scala/akka/routing/Balancing.scala @@ -6,7 +6,7 @@ package akka.routing import scala.collection.immutable -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.Config import com.typesafe.config.ConfigFactory @@ -28,7 +28,7 @@ private[akka] object BalancingRoutingLogic { * INTERNAL API * Selects the first routee, balancing will be done by the dispatcher. */ -@silent("@SerialVersionUID has no effect") +@nowarn("msg=@SerialVersionUID has no effect") @SerialVersionUID(1L) private[akka] final class BalancingRoutingLogic extends RoutingLogic { override def select(message: Any, routees: immutable.IndexedSeq[Routee]): Routee = diff --git a/akka-actor/src/main/scala/akka/routing/Broadcast.scala b/akka-actor/src/main/scala/akka/routing/Broadcast.scala index 5e11bec239..d583028caf 100644 --- a/akka-actor/src/main/scala/akka/routing/Broadcast.scala +++ b/akka-actor/src/main/scala/akka/routing/Broadcast.scala @@ -6,7 +6,7 @@ package akka.routing import scala.collection.immutable -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.Config import akka.actor.ActorSystem @@ -21,7 +21,7 @@ object BroadcastRoutingLogic { /** * Broadcasts a message to all its routees. */ -@silent("@SerialVersionUID has no effect") +@nowarn("msg=@SerialVersionUID has no effect") @SerialVersionUID(1L) final class BroadcastRoutingLogic extends RoutingLogic { override def select(message: Any, routees: immutable.IndexedSeq[Routee]): Routee = diff --git a/akka-actor/src/main/scala/akka/routing/ConsistentHashing.scala b/akka-actor/src/main/scala/akka/routing/ConsistentHashing.scala index 7f2dcb60ea..f319a6ba61 100644 --- a/akka-actor/src/main/scala/akka/routing/ConsistentHashing.scala +++ b/akka-actor/src/main/scala/akka/routing/ConsistentHashing.scala @@ -172,7 +172,7 @@ final case class ConsistentHashingRoutingLogic( if (virtualNodesFactor == 0) system.settings.DefaultVirtualNodesFactor else virtualNodesFactor - private lazy val log = Logging(system, getClass) + private lazy val log = Logging(system, classOf[ConsistentHashingRoutingLogic]) /** * Setting the number of virtual nodes per node, used in [[akka.routing.ConsistentHash]] diff --git a/akka-actor/src/main/scala/akka/routing/Listeners.scala b/akka-actor/src/main/scala/akka/routing/Listeners.scala index d8d62451cd..739865f8c4 100644 --- a/akka-actor/src/main/scala/akka/routing/Listeners.scala +++ b/akka-actor/src/main/scala/akka/routing/Listeners.scala @@ -6,7 +6,7 @@ package akka.routing import java.util.{ Set, TreeSet } -import akka.actor.{ Actor, ActorRef } +import akka.actor.{ actorRef2Scala, Actor, ActorRef } sealed trait ListenerMessage final case class Listen(listener: ActorRef) extends ListenerMessage diff --git a/akka-actor/src/main/scala/akka/routing/MurmurHash.scala b/akka-actor/src/main/scala/akka/routing/MurmurHash.scala index 5b150c9668..bea88cd33f 100644 --- a/akka-actor/src/main/scala/akka/routing/MurmurHash.scala +++ b/akka-actor/src/main/scala/akka/routing/MurmurHash.scala @@ -21,7 +21,7 @@ package akka.routing import java.lang.Integer.{ rotateLeft => rotl } -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.util.ccompat._ @@ -133,7 +133,7 @@ object MurmurHash { * where the order of appearance of elements does not matter. * This is useful for hashing sets, for example. */ - @silent("deprecated") + @nowarn("msg=deprecated") def symmetricHash[T](xs: IterableOnce[T], seed: Int): Int = { var a, b, n = 0 var c = 1 diff --git a/akka-actor/src/main/scala/akka/routing/Random.scala b/akka-actor/src/main/scala/akka/routing/Random.scala index 8abc4b7f18..f09292f8c9 100644 --- a/akka-actor/src/main/scala/akka/routing/Random.scala +++ b/akka-actor/src/main/scala/akka/routing/Random.scala @@ -8,7 +8,7 @@ import java.util.concurrent.ThreadLocalRandom import scala.collection.immutable -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.Config import akka.actor.ActorSystem @@ -23,7 +23,7 @@ object RandomRoutingLogic { /** * Randomly selects one of the target routees to send a message to */ -@silent("@SerialVersionUID has no effect") +@nowarn("msg=@SerialVersionUID has no effect") @SerialVersionUID(1L) final class RandomRoutingLogic extends RoutingLogic { override def select(message: Any, routees: immutable.IndexedSeq[Routee]): Routee = diff --git a/akka-actor/src/main/scala/akka/routing/RoundRobin.scala b/akka-actor/src/main/scala/akka/routing/RoundRobin.scala index 44e7499557..47307b4868 100644 --- a/akka-actor/src/main/scala/akka/routing/RoundRobin.scala +++ b/akka-actor/src/main/scala/akka/routing/RoundRobin.scala @@ -8,7 +8,7 @@ import java.util.concurrent.atomic.AtomicLong import scala.collection.immutable -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.Config import akka.actor.ActorSystem @@ -24,7 +24,7 @@ object RoundRobinRoutingLogic { * Uses round-robin to select a routee. For concurrent calls, * round robin is just a best effort. */ -@silent("@SerialVersionUID has no effect") +@nowarn("msg=@SerialVersionUID has no effect") @SerialVersionUID(1L) final class RoundRobinRoutingLogic extends RoutingLogic { val next = new AtomicLong diff --git a/akka-actor/src/main/scala/akka/routing/RoutedActorCell.scala b/akka-actor/src/main/scala/akka/routing/RoutedActorCell.scala index d96601f7b8..185578d259 100644 --- a/akka-actor/src/main/scala/akka/routing/RoutedActorCell.scala +++ b/akka-actor/src/main/scala/akka/routing/RoutedActorCell.scala @@ -18,6 +18,7 @@ import akka.actor.PoisonPill import akka.actor.Props import akka.actor.SupervisorStrategy import akka.actor.Terminated +import akka.actor.actorRef2Scala import akka.dispatch.Envelope import akka.dispatch.MessageDispatcher import akka.util.ccompat._ diff --git a/akka-actor/src/main/scala/akka/routing/RoutedActorRef.scala b/akka-actor/src/main/scala/akka/routing/RoutedActorRef.scala index 65f9230330..7770397f95 100644 --- a/akka-actor/src/main/scala/akka/routing/RoutedActorRef.scala +++ b/akka-actor/src/main/scala/akka/routing/RoutedActorRef.scala @@ -4,7 +4,7 @@ package akka.routing -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.ConfigurationException import akka.actor.ActorPath @@ -24,7 +24,7 @@ import akka.dispatch.MessageDispatcher * A RoutedActorRef is an ActorRef that has a set of connected ActorRef and it uses a Router to * send a message to one (or more) of these actors. */ -@silent("deprecated") +@nowarn("msg=deprecated") private[akka] class RoutedActorRef( _system: ActorSystemImpl, _routerProps: Props, diff --git a/akka-actor/src/main/scala/akka/routing/RouterConfig.scala b/akka-actor/src/main/scala/akka/routing/RouterConfig.scala index 0a064eb292..22cc76e4c0 100644 --- a/akka-actor/src/main/scala/akka/routing/RouterConfig.scala +++ b/akka-actor/src/main/scala/akka/routing/RouterConfig.scala @@ -6,7 +6,7 @@ package akka.routing import scala.collection.immutable -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.ConfigurationException import akka.actor.ActorContext @@ -39,7 +39,7 @@ import akka.util.unused * someone tries sending a message to that reference before the constructor of * RoutedActorRef has returned, there will be a `NullPointerException`! */ -@silent("@SerialVersionUID has no effect") +@nowarn("msg=@SerialVersionUID has no effect") @SerialVersionUID(1L) trait RouterConfig extends Serializable { @@ -376,7 +376,7 @@ case object NoRouter extends NoRouter { /** * INTERNAL API */ -@silent("@SerialVersionUID has no effect") +@nowarn("msg=@SerialVersionUID has no effect") @SerialVersionUID(1L) private[akka] trait RouterManagementMesssage @@ -385,7 +385,7 @@ private[akka] trait RouterManagementMesssage * A [[Routees]] message is sent asynchronously to the "requester" containing information * about what routees the router is routing over. */ -@silent("@SerialVersionUID has no effect") +@nowarn("msg=@SerialVersionUID has no effect") @SerialVersionUID(1L) abstract class GetRoutees extends RouterManagementMesssage diff --git a/akka-actor/src/main/scala/akka/routing/SmallestMailbox.scala b/akka-actor/src/main/scala/akka/routing/SmallestMailbox.scala index e402ffd7d1..4ebabc6db5 100644 --- a/akka-actor/src/main/scala/akka/routing/SmallestMailbox.scala +++ b/akka-actor/src/main/scala/akka/routing/SmallestMailbox.scala @@ -9,7 +9,7 @@ import java.util.concurrent.ThreadLocalRandom import scala.annotation.tailrec import scala.collection.immutable -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.Config import akka.actor.ActorCell @@ -33,7 +33,7 @@ object SmallestMailboxRoutingLogic { * since their mailbox size is unknown * */ -@silent("@SerialVersionUID has no effect") +@nowarn("msg=@SerialVersionUID has no effect") @SerialVersionUID(1L) class SmallestMailboxRoutingLogic extends RoutingLogic { override def select(message: Any, routees: immutable.IndexedSeq[Routee]): Routee = @@ -83,7 +83,7 @@ class SmallestMailboxRoutingLogic extends RoutingLogic { } // TODO should we rewrite this not to use isTerminated? - @silent("deprecated") + @nowarn("msg=deprecated") protected def isTerminated(a: Routee): Boolean = a match { case ActorRefRoutee(ref) => ref.isTerminated case _ => false @@ -181,7 +181,7 @@ class SmallestMailboxRoutingLogic extends RoutingLogic { * @param routerDispatcher dispatcher to use for the router head actor, which handles * supervision, death watch and router management messages */ -@silent("@SerialVersionUID has no effect") +@nowarn("msg=@SerialVersionUID has no effect") @SerialVersionUID(1L) final case class SmallestMailboxPool( nrOfInstances: Int, diff --git a/akka-actor/src/main/scala/akka/serialization/AsyncSerializer.scala b/akka-actor/src/main/scala/akka/serialization/AsyncSerializer.scala index 404800cff7..1972744c4e 100644 --- a/akka-actor/src/main/scala/akka/serialization/AsyncSerializer.scala +++ b/akka-actor/src/main/scala/akka/serialization/AsyncSerializer.scala @@ -41,7 +41,7 @@ abstract class AsyncSerializerWithStringManifest(system: ExtendedActorSystem) extends SerializerWithStringManifest with AsyncSerializer { - private val log = Logging(system, getClass) + private val log = Logging(system, classOf[AsyncSerializerWithStringManifest]) final override def toBinary(o: AnyRef): Array[Byte] = { log.warning( diff --git a/akka-actor/src/main/scala/akka/serialization/Serializer.scala b/akka-actor/src/main/scala/akka/serialization/Serializer.scala index d786dd3dc8..c4265f3754 100644 --- a/akka-actor/src/main/scala/akka/serialization/Serializer.scala +++ b/akka-actor/src/main/scala/akka/serialization/Serializer.scala @@ -359,7 +359,7 @@ final case class DisabledJavaSerializer(system: ExtendedActorSystem) extends Ser private[this] val empty = Array.empty[Byte] - private[this] val log = Logging.withMarker(system, getClass) + private[this] val log = Logging.withMarker(system, classOf[DisabledJavaSerializer]) def includeManifest: Boolean = false diff --git a/akka-actor/src/main/scala/akka/util/Collections.scala b/akka-actor/src/main/scala/akka/util/Collections.scala index 210a8b53bb..671fbe0ed6 100644 --- a/akka-actor/src/main/scala/akka/util/Collections.scala +++ b/akka-actor/src/main/scala/akka/util/Collections.scala @@ -28,15 +28,20 @@ private[akka] object Collections { private[this] var _next: To = _ private[this] var _hasNext = false - @tailrec override final def hasNext: Boolean = - if (!_hasNext && superIterator.hasNext) { // If we need and are able to look for the next value - val potentiallyNext = superIterator.next() - if (isDefinedAt(potentiallyNext)) { - _next = apply(potentiallyNext) - _hasNext = true - true - } else hasNext //Attempt to find the next - } else _hasNext // Return if we found one + override final def hasNext: Boolean = { + @tailrec def tailrecHasNext(): Boolean = { + if (!_hasNext && superIterator.hasNext) { // If we need and are able to look for the next value + val potentiallyNext = superIterator.next() + if (isDefinedAt(potentiallyNext)) { + _next = apply(potentiallyNext) + _hasNext = true + true + } else tailrecHasNext() //Attempt to find the next + } else _hasNext // Return if we found one + } + + tailrecHasNext() + } override final def next(): To = if (hasNext) { diff --git a/akka-actor/src/main/scala/akka/util/FlightRecorderLoader.scala b/akka-actor/src/main/scala/akka/util/FlightRecorderLoader.scala index 335c280f60..d65fa69d7b 100644 --- a/akka-actor/src/main/scala/akka/util/FlightRecorderLoader.scala +++ b/akka-actor/src/main/scala/akka/util/FlightRecorderLoader.scala @@ -3,12 +3,12 @@ */ package akka.util -import akka.actor.{ ClassicActorSystemProvider, ExtendedActorSystem } -import akka.annotation.InternalApi - import scala.reflect.ClassTag import scala.util.{ Failure, Success } +import akka.actor.{ ClassicActorSystemProvider, ExtendedActorSystem } +import akka.annotation.InternalApi + /** * INTERNAL API */ diff --git a/akka-actor/src/main/scala/akka/util/Index.scala b/akka-actor/src/main/scala/akka/util/Index.scala index b53e511a61..aaca760c9b 100644 --- a/akka-actor/src/main/scala/akka/util/Index.scala +++ b/akka-actor/src/main/scala/akka/util/Index.scala @@ -10,7 +10,7 @@ import java.util.concurrent.{ ConcurrentHashMap, ConcurrentSkipListSet } import scala.collection.JavaConverters.collectionAsScalaIterableConverter import annotation.tailrec -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.util.ccompat.JavaConverters._ @@ -145,7 +145,7 @@ class Index[K, V](val mapSize: Int, val valueComparator: Comparator[V]) { if (set ne null) { set.synchronized { container.remove(key, set) - @silent("deprecated") + @nowarn("msg=deprecated") val ret = collectionAsScalaIterableConverter(set.clone()).asScala // Make copy since we need to clear the original set.clear() // Clear the original set to signal to any pending writers that there was a conflict Some(ret) diff --git a/akka-actor/src/main/scala/akka/util/ManifestInfo.scala b/akka-actor/src/main/scala/akka/util/ManifestInfo.scala index 2c71bf7029..2fe8dba11b 100644 --- a/akka-actor/src/main/scala/akka/util/ManifestInfo.scala +++ b/akka-actor/src/main/scala/akka/util/ManifestInfo.scala @@ -10,7 +10,7 @@ import java.util.jar.Manifest import scala.collection.immutable -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor.ActorSystem import akka.actor.ClassicActorSystemProvider @@ -74,7 +74,7 @@ object ManifestInfo extends ExtensionId[ManifestInfo] with ExtensionIdProvider { productName: String, dependencies: immutable.Seq[String], versions: Map[String, Version]): Option[String] = { - @silent("deprecated") + @nowarn("msg=deprecated") val filteredVersions = versions.filterKeys(dependencies.toSet) val values = filteredVersions.values.toSet if (values.size > 1) { @@ -137,7 +137,7 @@ final class ManifestInfo(val system: ExtendedActorSystem) extends Extension { } } catch { case ioe: IOException => - Logging(system, getClass).warning("Could not read manifest information. {}", ioe) + Logging(system, classOf[ManifestInfo]).warning("Could not read manifest information. {}", ioe) } manifests } @@ -170,7 +170,7 @@ final class ManifestInfo(val system: ExtendedActorSystem) extends Extension { ManifestInfo.checkSameVersion(productName, dependencies, versions) match { case Some(message) => if (logWarning) - Logging(system, getClass).warning(message) + Logging(system, classOf[ManifestInfo]).warning(message) if (throwException) throw new IllegalStateException(message) diff --git a/akka-actor/src/main/scala/akka/util/MessageBuffer.scala b/akka-actor/src/main/scala/akka/util/MessageBuffer.scala index 80ac99f0a3..2a6ad19393 100644 --- a/akka-actor/src/main/scala/akka/util/MessageBuffer.scala +++ b/akka-actor/src/main/scala/akka/util/MessageBuffer.scala @@ -4,7 +4,7 @@ package akka.util -import akka.actor.{ ActorRef, Dropped } +import akka.actor.{ actorRef2Scala, ActorRef, Dropped } import akka.annotation.InternalApi import akka.japi.function.Procedure2 diff --git a/akka-actor/src/main/scala/akka/util/Reflect.scala b/akka-actor/src/main/scala/akka/util/Reflect.scala index f188dab9a5..86489d9206 100644 --- a/akka-actor/src/main/scala/akka/util/Reflect.scala +++ b/akka-actor/src/main/scala/akka/util/Reflect.scala @@ -7,13 +7,13 @@ import java.lang.reflect.Constructor import java.lang.reflect.ParameterizedType import java.lang.reflect.Type -import akka.annotation.InternalApi - import scala.annotation.tailrec import scala.collection.immutable import scala.util.Try import scala.util.control.NonFatal +import akka.annotation.InternalApi + /** * Collection of internal reflection utilities which may or may not be * available (most services specific to HotSpot, but fails gracefully). diff --git a/akka-actor/src/main/scala/akka/util/Unused.scala b/akka-actor/src/main/scala/akka/util/Unused.scala index d8d293f6f6..de45b7c2c2 100644 --- a/akka-actor/src/main/scala/akka/util/Unused.scala +++ b/akka-actor/src/main/scala/akka/util/Unused.scala @@ -4,7 +4,7 @@ package akka.util -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.annotation.InternalApi @@ -24,5 +24,5 @@ import akka.annotation.InternalApi * * INTERNAL API */ -@silent("deprecated") +@nowarn("msg=deprecated") @InternalApi private[akka] class unused extends deprecated("unused", "") diff --git a/akka-actor/src/main/scala/akka/util/WallClock.scala b/akka-actor/src/main/scala/akka/util/WallClock.scala index c130dbb021..c57efca9c6 100644 --- a/akka-actor/src/main/scala/akka/util/WallClock.scala +++ b/akka-actor/src/main/scala/akka/util/WallClock.scala @@ -4,10 +4,10 @@ package akka.util -import akka.annotation.ApiMayChange import java.util.concurrent.atomic.AtomicLong import java.util.function.LongUnaryOperator +import akka.annotation.ApiMayChange import akka.annotation.InternalApi /** diff --git a/akka-bench-jmh/src/main/scala/akka/remote/artery/CodecBenchmark.scala b/akka-bench-jmh/src/main/scala/akka/remote/artery/CodecBenchmark.scala index 59d46a77ab..937f9d1dd7 100644 --- a/akka-bench-jmh/src/main/scala/akka/remote/artery/CodecBenchmark.scala +++ b/akka-bench-jmh/src/main/scala/akka/remote/artery/CodecBenchmark.scala @@ -15,7 +15,7 @@ import scala.concurrent.Await import scala.concurrent.Future import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.ConfigFactory import org.openjdk.jmh.annotations._ @@ -41,7 +41,7 @@ import akka.util.OptionVal class CodecBenchmark { import CodecBenchmark._ - @silent("immutable val") // JMH updates this via reflection + @nowarn("msg=immutable val") // JMH updates this via reflection @Param(Array(Standard, RemoteInstrument)) private var configType: String = _ @@ -70,10 +70,10 @@ class CodecBenchmark { override def publishDropped(inbound: InboundEnvelope, reason: String): Unit = () } - @silent("never used") private var remoteRefB: RemoteActorRef = _ - @silent("never used") private var resolvedRef: InternalActorRef = _ - @silent("never used") private var senderStringA: String = _ - @silent("never used") private var recipientStringB: String = _ + @nowarn("msg=never used") private var remoteRefB: RemoteActorRef = _ + @nowarn("msg=never used") private var resolvedRef: InternalActorRef = _ + @nowarn("msg=never used") private var senderStringA: String = _ + @nowarn("msg=never used") private var recipientStringB: String = _ private var encodeGraph: Flow[String, Unit, NotUsed] = _ private var decodeGraph: Flow[String, Unit, NotUsed] = _ diff --git a/akka-bench-jmh/src/main/scala/akka/serialization/jackson/JacksonSerializationBench.scala b/akka-bench-jmh/src/main/scala/akka/serialization/jackson/JacksonSerializationBench.scala index c09e718441..379d106137 100644 --- a/akka-bench-jmh/src/main/scala/akka/serialization/jackson/JacksonSerializationBench.scala +++ b/akka-bench-jmh/src/main/scala/akka/serialization/jackson/JacksonSerializationBench.scala @@ -13,7 +13,7 @@ import java.util.concurrent.TimeUnit import scala.concurrent.Await import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.ConfigFactory import org.openjdk.jmh.annotations._ @@ -186,11 +186,11 @@ class JacksonSerializationBench { var system: ActorSystem = _ var serialization: Serialization = _ - @silent("immutable val") // JMH updates this via reflection + @nowarn("msg=immutable val") // JMH updates this via reflection @Param(Array("jackson-json", "jackson-cbor")) // "java" private var serializerName: String = _ - @silent("immutable val") + @nowarn("msg=immutable val") @Param(Array("off", "gzip", "lz4")) private var compression: String = _ diff --git a/akka-cluster-metrics/src/main/scala/akka/cluster/metrics/ClusterMetricsCollector.scala b/akka-cluster-metrics/src/main/scala/akka/cluster/metrics/ClusterMetricsCollector.scala index af0aec299c..77a46bfa9f 100644 --- a/akka-cluster-metrics/src/main/scala/akka/cluster/metrics/ClusterMetricsCollector.scala +++ b/akka-cluster-metrics/src/main/scala/akka/cluster/metrics/ClusterMetricsCollector.scala @@ -8,7 +8,7 @@ import java.util.concurrent.ThreadLocalRandom import scala.collection.immutable -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor.Actor import akka.actor.ActorLogging @@ -96,7 +96,7 @@ trait ClusterMetricsEvent final case class ClusterMetricsChanged(nodeMetrics: Set[NodeMetrics]) extends ClusterMetricsEvent { /** Java API */ - @silent("deprecated") + @nowarn("msg=deprecated") def getNodeMetrics: java.lang.Iterable[NodeMetrics] = scala.collection.JavaConverters.asJavaIterableConverter(nodeMetrics).asJava } diff --git a/akka-cluster-metrics/src/main/scala/akka/cluster/metrics/ClusterMetricsRouting.scala b/akka-cluster-metrics/src/main/scala/akka/cluster/metrics/ClusterMetricsRouting.scala index bf71961638..8d83faadae 100644 --- a/akka-cluster-metrics/src/main/scala/akka/cluster/metrics/ClusterMetricsRouting.scala +++ b/akka-cluster-metrics/src/main/scala/akka/cluster/metrics/ClusterMetricsRouting.scala @@ -11,7 +11,7 @@ import java.util.concurrent.atomic.AtomicReference import scala.annotation.tailrec import scala.collection.immutable -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.Config import akka.actor.Actor @@ -420,7 +420,7 @@ object MetricsSelector { /** * A MetricsSelector is responsible for producing weights from the node metrics. */ -@silent("@SerialVersionUID has no effect") +@nowarn("msg=@SerialVersionUID has no effect") @SerialVersionUID(1L) trait MetricsSelector extends Serializable { @@ -434,7 +434,7 @@ trait MetricsSelector extends Serializable { * A MetricsSelector producing weights from remaining capacity. * The weights are typically proportional to the remaining capacity. */ -@silent("deprecated") +@nowarn("msg=deprecated") @SerialVersionUID(1L) abstract class CapacityMetricsSelector extends MetricsSelector { diff --git a/akka-cluster-metrics/src/main/scala/akka/cluster/metrics/Metric.scala b/akka-cluster-metrics/src/main/scala/akka/cluster/metrics/Metric.scala index e2abdbd0b1..9c92960263 100644 --- a/akka-cluster-metrics/src/main/scala/akka/cluster/metrics/Metric.scala +++ b/akka-cluster-metrics/src/main/scala/akka/cluster/metrics/Metric.scala @@ -8,7 +8,7 @@ import scala.util.Failure import scala.util.Success import scala.util.Try -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor.Address @@ -324,7 +324,7 @@ final case class NodeMetrics(address: Address, timestamp: Long, metrics: Set[Met /** * Java API */ - @silent("deprecated") + @nowarn("msg=deprecated") def getMetrics: java.lang.Iterable[Metric] = scala.collection.JavaConverters.asJavaIterableConverter(metrics).asJava diff --git a/akka-cluster-metrics/src/test/scala/akka/cluster/metrics/EWMASpec.scala b/akka-cluster-metrics/src/test/scala/akka/cluster/metrics/EWMASpec.scala index 4f434ff8d4..bbaa5e7d2b 100644 --- a/akka-cluster-metrics/src/test/scala/akka/cluster/metrics/EWMASpec.scala +++ b/akka-cluster-metrics/src/test/scala/akka/cluster/metrics/EWMASpec.scala @@ -8,11 +8,11 @@ import java.util.concurrent.ThreadLocalRandom import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.testkit.{ AkkaSpec, LongRunningTest } -@silent +@nowarn class EWMASpec extends AkkaSpec(MetricsConfig.defaultEnabled) with MetricsCollectorFactory { val collector = createMetricsCollector diff --git a/akka-cluster-metrics/src/test/scala/akka/cluster/metrics/MetricSpec.scala b/akka-cluster-metrics/src/test/scala/akka/cluster/metrics/MetricSpec.scala index 6cb9ffbd98..c7c704f3da 100644 --- a/akka-cluster-metrics/src/test/scala/akka/cluster/metrics/MetricSpec.scala +++ b/akka-cluster-metrics/src/test/scala/akka/cluster/metrics/MetricSpec.scala @@ -8,7 +8,7 @@ import java.lang.System.{ currentTimeMillis => newTimestamp } import scala.util.Failure -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpec @@ -17,7 +17,7 @@ import akka.cluster.metrics.StandardMetrics._ import akka.testkit.AkkaSpec import akka.testkit.ImplicitSender -@silent +@nowarn class MetricNumericConverterSpec extends AnyWordSpec with Matchers with MetricNumericConverter { "MetricNumericConverter" must { @@ -56,7 +56,7 @@ class MetricNumericConverterSpec extends AnyWordSpec with Matchers with MetricNu } } -@silent +@nowarn class NodeMetricsSpec extends AnyWordSpec with Matchers { val node1 = Address("akka", "sys", "a", 2554) @@ -238,7 +238,7 @@ class MetricsGossipSpec } } -@silent +@nowarn class MetricValuesSpec extends AkkaSpec(MetricsConfig.defaultEnabled) with MetricsCollectorFactory { import akka.cluster.metrics.StandardMetrics._ diff --git a/akka-cluster-metrics/src/test/scala/akka/cluster/metrics/MetricsCollectorSpec.scala b/akka-cluster-metrics/src/test/scala/akka/cluster/metrics/MetricsCollectorSpec.scala index 2cff3269b2..e9eb9f1b85 100644 --- a/akka-cluster-metrics/src/test/scala/akka/cluster/metrics/MetricsCollectorSpec.scala +++ b/akka-cluster-metrics/src/test/scala/akka/cluster/metrics/MetricsCollectorSpec.scala @@ -8,12 +8,12 @@ import scala.concurrent.duration._ import scala.language.postfixOps import scala.util.Try -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.cluster.metrics.StandardMetrics._ import akka.testkit._ -@silent +@nowarn class MetricsCollectorSpec extends AkkaSpec(MetricsConfig.defaultEnabled) with ImplicitSender diff --git a/akka-cluster-sharding-typed/src/main/scala/akka/cluster/sharding/typed/javadsl/ClusterSharding.scala b/akka-cluster-sharding-typed/src/main/scala/akka/cluster/sharding/typed/javadsl/ClusterSharding.scala index da1cc2f8ee..8d63ca684b 100644 --- a/akka-cluster-sharding-typed/src/main/scala/akka/cluster/sharding/typed/javadsl/ClusterSharding.scala +++ b/akka-cluster-sharding-typed/src/main/scala/akka/cluster/sharding/typed/javadsl/ClusterSharding.scala @@ -9,7 +9,7 @@ import java.time.Duration import java.util.Optional import java.util.concurrent.CompletionStage -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor.typed.ActorRef import akka.actor.typed.ActorSystem import akka.actor.typed.Behavior @@ -385,7 +385,7 @@ final class EntityContext[M]( } -@silent // for unused msgClass to make class type explicit in the Java API. Not using @unused as the user is likely to see it +@nowarn // for unused msgClass to make class type explicit in the Java API. Not using @unused as the user is likely to see it /** Allows starting a specific Sharded Entity by its entity identifier */ object StartEntity { diff --git a/akka-cluster-sharding-typed/src/test/scala/docs/akka/cluster/sharding/typed/ReplicatedShardingCompileOnlySpec.scala b/akka-cluster-sharding-typed/src/test/scala/docs/akka/cluster/sharding/typed/ReplicatedShardingCompileOnlySpec.scala index be5d3837b0..3b21e8e43b 100644 --- a/akka-cluster-sharding-typed/src/test/scala/docs/akka/cluster/sharding/typed/ReplicatedShardingCompileOnlySpec.scala +++ b/akka-cluster-sharding-typed/src/test/scala/docs/akka/cluster/sharding/typed/ReplicatedShardingCompileOnlySpec.scala @@ -14,9 +14,9 @@ import akka.cluster.sharding.typed.scaladsl.Entity import akka.cluster.sharding.typed.scaladsl.EntityRef import akka.persistence.typed.ReplicaId import akka.persistence.typed.ReplicationId -import com.github.ghik.silencer.silent +import scala.annotation.nowarn -@silent("never used") +@nowarn("msg=never used") object ReplicatedShardingCompileOnlySpec { sealed trait Command diff --git a/akka-cluster-sharding-typed/src/test/scala/docs/akka/cluster/sharding/typed/ShardingCompileOnlySpec.scala b/akka-cluster-sharding-typed/src/test/scala/docs/akka/cluster/sharding/typed/ShardingCompileOnlySpec.scala index 8d595d0b12..bfa85b184d 100644 --- a/akka-cluster-sharding-typed/src/test/scala/docs/akka/cluster/sharding/typed/ShardingCompileOnlySpec.scala +++ b/akka-cluster-sharding-typed/src/test/scala/docs/akka/cluster/sharding/typed/ShardingCompileOnlySpec.scala @@ -10,14 +10,14 @@ import akka.actor.typed.{ ActorRef, ActorSystem, Behavior } import akka.actor.typed.scaladsl.Behaviors import akka.cluster.sharding.typed.scaladsl.Entity import akka.persistence.typed.PersistenceId -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import docs.akka.persistence.typed.BlogPostEntity import docs.akka.persistence.typed.BlogPostEntity.Command import akka.cluster.sharding.typed.scaladsl.ClusterSharding import akka.cluster.sharding.typed.scaladsl.EntityTypeKey -@silent +@nowarn object ShardingCompileOnlySpec { val system = ActorSystem(Behaviors.empty, "Sharding") diff --git a/akka-cluster-sharding-typed/src/test/scala/docs/delivery/PointToPointDocExample.scala b/akka-cluster-sharding-typed/src/test/scala/docs/delivery/PointToPointDocExample.scala index e2e6cacddc..f7d5b8106a 100644 --- a/akka-cluster-sharding-typed/src/test/scala/docs/delivery/PointToPointDocExample.scala +++ b/akka-cluster-sharding-typed/src/test/scala/docs/delivery/PointToPointDocExample.scala @@ -6,7 +6,7 @@ package docs.delivery import java.util.UUID -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor.typed.ActorSystem @@ -18,7 +18,7 @@ import akka.actor.typed.scaladsl.Behaviors //#imports -@silent("never used") +@nowarn("msg=never used") object PointToPointDocExample { //#producer diff --git a/akka-cluster-sharding-typed/src/test/scala/docs/delivery/WorkPullingDocExample.scala b/akka-cluster-sharding-typed/src/test/scala/docs/delivery/WorkPullingDocExample.scala index 91e50f9d07..f32419e1fc 100644 --- a/akka-cluster-sharding-typed/src/test/scala/docs/delivery/WorkPullingDocExample.scala +++ b/akka-cluster-sharding-typed/src/test/scala/docs/delivery/WorkPullingDocExample.scala @@ -12,9 +12,9 @@ import scala.util.Success import akka.Done import akka.actor.typed.ActorRef -import com.github.ghik.silencer.silent +import scala.annotation.nowarn -@silent("never used") +@nowarn("msg=never used") object WorkPullingDocExample { //#imports diff --git a/akka-cluster-sharding/src/main/scala/akka/cluster/sharding/ShardCoordinator.scala b/akka-cluster-sharding/src/main/scala/akka/cluster/sharding/ShardCoordinator.scala index aeda53a673..e7b25db59e 100644 --- a/akka-cluster-sharding/src/main/scala/akka/cluster/sharding/ShardCoordinator.scala +++ b/akka-cluster-sharding/src/main/scala/akka/cluster/sharding/ShardCoordinator.scala @@ -8,7 +8,7 @@ import scala.collection.immutable import scala.concurrent.Future import scala.concurrent.duration._ import scala.util.Success -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor._ import akka.actor.DeadLetterSuppression import akka.annotation.DoNotInherit @@ -47,7 +47,7 @@ object ShardCoordinator { * INTERNAL API * Factory method for the [[akka.actor.Props]] of the [[ShardCoordinator]] actor. */ - @silent("deprecated") + @nowarn("msg=deprecated") private[akka] def props( typeName: String, settings: ClusterShardingSettings, diff --git a/akka-cluster-sharding/src/test/scala/akka/cluster/sharding/RememberEntitiesFailureSpec.scala b/akka-cluster-sharding/src/test/scala/akka/cluster/sharding/RememberEntitiesFailureSpec.scala index 0a84aadb94..a4109c18b3 100644 --- a/akka-cluster-sharding/src/test/scala/akka/cluster/sharding/RememberEntitiesFailureSpec.scala +++ b/akka-cluster-sharding/src/test/scala/akka/cluster/sharding/RememberEntitiesFailureSpec.scala @@ -16,7 +16,7 @@ import akka.testkit.AkkaSpec import akka.testkit.TestException import akka.testkit.TestProbe import akka.testkit.WithLogCapturing -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.ConfigFactory import org.scalatest.wordspec.AnyWordSpecLike import scala.concurrent.duration._ @@ -82,7 +82,7 @@ object RememberEntitiesFailureSpec { case class ShardStoreCreated(store: ActorRef, shardId: ShardId) case class CoordinatorStoreCreated(store: ActorRef) - @silent("never used") + @nowarn("msg=never used") class FakeStore(settings: ClusterShardingSettings, typeName: String) extends RememberEntitiesProvider { override def shardStoreProps(shardId: ShardId): Props = FakeShardStoreActor.props(shardId) override def coordinatorStoreProps(): Props = FakeCoordinatorStoreActor.props() diff --git a/akka-cluster-tools/src/main/scala/akka/cluster/client/protobuf/ClusterClientMessageSerializer.scala b/akka-cluster-tools/src/main/scala/akka/cluster/client/protobuf/ClusterClientMessageSerializer.scala index dcf5c54233..09b355f4e2 100644 --- a/akka-cluster-tools/src/main/scala/akka/cluster/client/protobuf/ClusterClientMessageSerializer.scala +++ b/akka-cluster-tools/src/main/scala/akka/cluster/client/protobuf/ClusterClientMessageSerializer.scala @@ -6,7 +6,7 @@ package akka.cluster.client.protobuf import java.io.NotSerializableException -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor.ExtendedActorSystem import akka.cluster.client.ClusterReceptionist @@ -18,7 +18,7 @@ import akka.util.ccompat.JavaConverters._ /** * INTERNAL API: Serializer of ClusterClient messages. */ -@silent("deprecated") +@nowarn("msg=deprecated") private[akka] class ClusterClientMessageSerializer(val system: ExtendedActorSystem) extends SerializerWithStringManifest with BaseSerializer { diff --git a/akka-cluster-tools/src/multi-jvm/scala/akka/cluster/client/ClusterClientHandoverSpec.scala b/akka-cluster-tools/src/multi-jvm/scala/akka/cluster/client/ClusterClientHandoverSpec.scala index 266eb2957b..025e50418e 100644 --- a/akka-cluster-tools/src/multi-jvm/scala/akka/cluster/client/ClusterClientHandoverSpec.scala +++ b/akka-cluster-tools/src/multi-jvm/scala/akka/cluster/client/ClusterClientHandoverSpec.scala @@ -6,7 +6,7 @@ package akka.cluster.client import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.ConfigFactory import akka.actor.{ ActorPath, ActorRef } @@ -38,7 +38,7 @@ class ClusterClientHandoverSpecMultiJvmNode1 extends ClusterClientHandoverSpec class ClusterClientHandoverSpecMultiJvmNode2 extends ClusterClientHandoverSpec class ClusterClientHandoverSpecMultiJvmNode3 extends ClusterClientHandoverSpec -@silent("deprecated") +@nowarn("msg=deprecated") class ClusterClientHandoverSpec extends MultiNodeSpec(ClusterClientHandoverSpec) with STMultiNodeSpec diff --git a/akka-cluster-tools/src/multi-jvm/scala/akka/cluster/client/ClusterClientSpec.scala b/akka-cluster-tools/src/multi-jvm/scala/akka/cluster/client/ClusterClientSpec.scala index 32af0a4a57..dfe2d499f3 100644 --- a/akka-cluster-tools/src/multi-jvm/scala/akka/cluster/client/ClusterClientSpec.scala +++ b/akka-cluster-tools/src/multi-jvm/scala/akka/cluster/client/ClusterClientSpec.scala @@ -7,7 +7,7 @@ package akka.cluster.client import scala.concurrent.Await import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.ConfigFactory import language.postfixOps @@ -163,7 +163,7 @@ class ClusterClientMultiJvmNode3 extends ClusterClientSpec class ClusterClientMultiJvmNode4 extends ClusterClientSpec class ClusterClientMultiJvmNode5 extends ClusterClientSpec -@silent("deprecated") +@nowarn("msg=deprecated") class ClusterClientSpec extends MultiNodeSpec(ClusterClientSpec) with STMultiNodeSpec with ImplicitSender { import ClusterClientSpec._ diff --git a/akka-cluster-tools/src/multi-jvm/scala/akka/cluster/client/ClusterClientStopSpec.scala b/akka-cluster-tools/src/multi-jvm/scala/akka/cluster/client/ClusterClientStopSpec.scala index 9d529bf0af..437df9820b 100644 --- a/akka-cluster-tools/src/multi-jvm/scala/akka/cluster/client/ClusterClientStopSpec.scala +++ b/akka-cluster-tools/src/multi-jvm/scala/akka/cluster/client/ClusterClientStopSpec.scala @@ -7,7 +7,7 @@ package akka.cluster.client import scala.concurrent.Await import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.ConfigFactory import akka.actor.{ Actor, Props } @@ -46,7 +46,7 @@ class ClusterClientStopMultiJvmNode1 extends ClusterClientStopSpec class ClusterClientStopMultiJvmNode2 extends ClusterClientStopSpec class ClusterClientStopMultiJvmNode3 extends ClusterClientStopSpec -@silent("deprecated") +@nowarn("msg=deprecated") class ClusterClientStopSpec extends MultiNodeSpec(ClusterClientStopSpec) with STMultiNodeSpec with ImplicitSender { import ClusterClientStopSpec._ diff --git a/akka-cluster-tools/src/test/scala/akka/cluster/client/protobuf/ClusterClientMessageSerializerSpec.scala b/akka-cluster-tools/src/test/scala/akka/cluster/client/protobuf/ClusterClientMessageSerializerSpec.scala index 0ba63235c0..fa96d02da8 100644 --- a/akka-cluster-tools/src/test/scala/akka/cluster/client/protobuf/ClusterClientMessageSerializerSpec.scala +++ b/akka-cluster-tools/src/test/scala/akka/cluster/client/protobuf/ClusterClientMessageSerializerSpec.scala @@ -4,13 +4,13 @@ package akka.cluster.client.protobuf -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor.ExtendedActorSystem import akka.cluster.client.ClusterReceptionist.Internal._ import akka.testkit.AkkaSpec -@silent("deprecated") +@nowarn("msg=deprecated") class ClusterClientMessageSerializerSpec extends AkkaSpec { val serializer = new ClusterClientMessageSerializer(system.asInstanceOf[ExtendedActorSystem]) diff --git a/akka-cluster-typed/src/main/scala/akka/cluster/ddata/typed/javadsl/ReplicatorMessageAdapter.scala b/akka-cluster-typed/src/main/scala/akka/cluster/ddata/typed/javadsl/ReplicatorMessageAdapter.scala index 81390aa19e..c2fb713931 100644 --- a/akka-cluster-typed/src/main/scala/akka/cluster/ddata/typed/javadsl/ReplicatorMessageAdapter.scala +++ b/akka-cluster-typed/src/main/scala/akka/cluster/ddata/typed/javadsl/ReplicatorMessageAdapter.scala @@ -10,7 +10,7 @@ import java.util.function.{ Function => JFunction } import scala.util.Failure import scala.util.Success -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor.typed.ActorRef import akka.actor.typed.javadsl.ActorContext @@ -115,7 +115,7 @@ class ReplicatorMessageAdapter[A, B <: ReplicatedData]( * `ActorRef[GetResponse]` that the the replicator will send the response message back through. * Use that `ActorRef[GetResponse]` as the `replyTo` parameter in the `Get` message. */ - @silent + @nowarn def askGet( createRequest: JFunction[ActorRef[Replicator.GetResponse[B]], Replicator.Get[B]], responseAdapter: JFunction[Replicator.GetResponse[B], A]): Unit = { diff --git a/akka-cluster-typed/src/test/scala/docs/akka/cluster/typed/BasicClusterExampleSpec.scala b/akka-cluster-typed/src/test/scala/docs/akka/cluster/typed/BasicClusterExampleSpec.scala index 49819b54ca..20b565e9b2 100644 --- a/akka-cluster-typed/src/test/scala/docs/akka/cluster/typed/BasicClusterExampleSpec.scala +++ b/akka-cluster-typed/src/test/scala/docs/akka/cluster/typed/BasicClusterExampleSpec.scala @@ -7,7 +7,7 @@ package docs.akka.cluster.typed import akka.actor.testkit.typed.scaladsl.ActorTestKit import akka.actor.testkit.typed.scaladsl.LogCapturing import akka.testkit.SocketUtil -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.ConfigFactory import org.scalatest.wordspec.AnyWordSpec import org.scalatest.matchers.should.Matchers @@ -90,7 +90,7 @@ akka { //#hasRole } - @silent("never used") + @nowarn("msg=never used") def illustrateDcAccess(): Unit = { val system: ActorSystem[_] = ??? diff --git a/akka-cluster/src/main/scala/akka/cluster/Cluster.scala b/akka-cluster/src/main/scala/akka/cluster/Cluster.scala index 647c2ec076..adf2cce188 100644 --- a/akka-cluster/src/main/scala/akka/cluster/Cluster.scala +++ b/akka-cluster/src/main/scala/akka/cluster/Cluster.scala @@ -14,7 +14,7 @@ import scala.concurrent.{ Await, ExecutionContext } import scala.concurrent.duration._ import scala.util.control.NonFatal -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.{ Config, ConfigFactory } import akka.ConfigurationException @@ -100,7 +100,7 @@ class Cluster(val system: ExtendedActorSystem) extends Extension { /** * Java API: roles that this member has */ - @silent("deprecated") + @nowarn("msg=deprecated") def getSelfRoles: java.util.Set[String] = scala.collection.JavaConverters.setAsJavaSetConverter(selfRoles).asJava @@ -179,7 +179,7 @@ class Cluster(val system: ExtendedActorSystem) extends Extension { override def maxFrequency: Double = systemScheduler.maxFrequency - @silent("deprecated") + @nowarn("msg=deprecated") override def schedule(initialDelay: FiniteDuration, interval: FiniteDuration, runnable: Runnable)( implicit executor: ExecutionContext): Cancellable = systemScheduler.schedule(initialDelay, interval, runnable) diff --git a/akka-cluster/src/main/scala/akka/cluster/ClusterActorRefProvider.scala b/akka-cluster/src/main/scala/akka/cluster/ClusterActorRefProvider.scala index 887934f97f..6d2d20c378 100644 --- a/akka-cluster/src/main/scala/akka/cluster/ClusterActorRefProvider.scala +++ b/akka-cluster/src/main/scala/akka/cluster/ClusterActorRefProvider.scala @@ -4,7 +4,7 @@ package akka.cluster -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.Config import com.typesafe.config.ConfigFactory @@ -127,7 +127,7 @@ private[akka] class ClusterDeployer(_settings: ActorSystem.Settings, _pm: Dynami } -@silent("@SerialVersionUID has no effect") +@nowarn("msg=@SerialVersionUID has no effect") @SerialVersionUID(1L) abstract class ClusterScope extends Scope diff --git a/akka-cluster/src/main/scala/akka/cluster/ClusterDaemon.scala b/akka-cluster/src/main/scala/akka/cluster/ClusterDaemon.scala index 67d219e170..5eb9e7ece5 100644 --- a/akka-cluster/src/main/scala/akka/cluster/ClusterDaemon.scala +++ b/akka-cluster/src/main/scala/akka/cluster/ClusterDaemon.scala @@ -10,7 +10,7 @@ import scala.concurrent.Promise import scala.concurrent.duration._ import scala.util.control.NonFatal -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.Config import akka.Done @@ -439,7 +439,7 @@ private[cluster] class ClusterCoreDaemon(publisher: ActorRef, joinConfigCompatCh } } - @silent("deprecated") + @nowarn("msg=deprecated") private def subscribeQuarantinedEvent(): Unit = { context.system.eventStream.subscribe(self, classOf[QuarantinedEvent]) context.system.eventStream.subscribe(self, classOf[ClassicQuarantinedEvent]) diff --git a/akka-cluster/src/main/scala/akka/cluster/ClusterEvent.scala b/akka-cluster/src/main/scala/akka/cluster/ClusterEvent.scala index 6591d67352..f8461f8dbb 100644 --- a/akka-cluster/src/main/scala/akka/cluster/ClusterEvent.scala +++ b/akka-cluster/src/main/scala/akka/cluster/ClusterEvent.scala @@ -8,7 +8,7 @@ import scala.collection.immutable import scala.collection.immutable.{ SortedSet, VectorBuilder } import scala.runtime.AbstractFunction5 -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import language.postfixOps import akka.actor.{ Actor, ActorRef, Address } @@ -74,7 +74,7 @@ object ClusterEvent { Map[String, Option[Address]], CurrentClusterState] { - @silent("deprecated") + @nowarn("msg=deprecated") def apply( members: immutable.SortedSet[Member] = immutable.SortedSet.empty, unreachable: Set[Member] = Set.empty, @@ -144,21 +144,21 @@ object ClusterEvent { /** * Java API: get current unreachable set. */ - @silent("deprecated") + @nowarn("msg=deprecated") def getUnreachable: java.util.Set[Member] = scala.collection.JavaConverters.setAsJavaSetConverter(unreachable).asJava /** * Java API: All data centers in the cluster */ - @silent("deprecated") + @nowarn("msg=deprecated") def getUnreachableDataCenters: java.util.Set[String] = scala.collection.JavaConverters.setAsJavaSetConverter(unreachableDataCenters).asJava /** * Java API: get current “seen-by” set. */ - @silent("deprecated") + @nowarn("msg=deprecated") def getSeenBy: java.util.Set[Address] = scala.collection.JavaConverters.setAsJavaSetConverter(seenBy).asJava @@ -186,7 +186,7 @@ object ClusterEvent { /** * Java API: All node roles in the cluster */ - @silent("deprecated") + @nowarn("msg=deprecated") def getAllRoles: java.util.Set[String] = scala.collection.JavaConverters.setAsJavaSetConverter(allRoles).asJava @@ -198,7 +198,7 @@ object ClusterEvent { /** * Java API: All data centers in the cluster */ - @silent("deprecated") + @nowarn("msg=deprecated") def getAllDataCenters: java.util.Set[String] = scala.collection.JavaConverters.setAsJavaSetConverter(allDataCenters).asJava diff --git a/akka-cluster/src/main/scala/akka/cluster/Member.scala b/akka-cluster/src/main/scala/akka/cluster/Member.scala index 13034002ce..95a712f99e 100644 --- a/akka-cluster/src/main/scala/akka/cluster/Member.scala +++ b/akka-cluster/src/main/scala/akka/cluster/Member.scala @@ -6,7 +6,7 @@ package akka.cluster import scala.runtime.AbstractFunction2 -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor.Address import akka.annotation.InternalApi @@ -51,7 +51,7 @@ class Member private[cluster] ( /** * Java API */ - @silent("deprecated") + @nowarn("msg=deprecated") def getRoles: java.util.Set[String] = scala.collection.JavaConverters.setAsJavaSetConverter(roles).asJava @@ -325,7 +325,7 @@ final case class UniqueAddress(address: Address, longUid: Long) extends Ordered[ * Stops `copy(Address, Long)` copy from being generated, use `apply` instead. */ @deprecated("Use Long UID constructor instead", since = "2.4.11") - @silent("deprecated") + @nowarn("msg=deprecated") def copy(address: Address = address, uid: Int = uid) = new UniqueAddress(address, uid.toLong) } diff --git a/akka-cluster/src/main/scala/akka/cluster/protobuf/ClusterMessageSerializer.scala b/akka-cluster/src/main/scala/akka/cluster/protobuf/ClusterMessageSerializer.scala index 92a4f0cd78..df1a3ce372 100644 --- a/akka-cluster/src/main/scala/akka/cluster/protobuf/ClusterMessageSerializer.scala +++ b/akka-cluster/src/main/scala/akka/cluster/protobuf/ClusterMessageSerializer.scala @@ -11,7 +11,7 @@ import scala.annotation.tailrec import scala.collection.immutable import scala.concurrent.duration.Deadline -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.{ Config, ConfigFactory, ConfigRenderOptions } import akka.actor.{ Address, ExtendedActorSystem } @@ -232,7 +232,7 @@ final class ClusterMessageSerializer(val system: ExtendedActorSystem) builder.build() } - @silent("deprecated") + @nowarn("msg=deprecated") private def clusterRouterPoolSettingsToProto(settings: ClusterRouterPoolSettings): cm.ClusterRouterPoolSettings = { val builder = cm.ClusterRouterPoolSettings.newBuilder() builder diff --git a/akka-cluster/src/main/scala/akka/cluster/routing/ClusterRouterConfig.scala b/akka-cluster/src/main/scala/akka/cluster/routing/ClusterRouterConfig.scala index c3c46a3ff1..d28dd5567a 100644 --- a/akka-cluster/src/main/scala/akka/cluster/routing/ClusterRouterConfig.scala +++ b/akka-cluster/src/main/scala/akka/cluster/routing/ClusterRouterConfig.scala @@ -9,7 +9,7 @@ import java.util.concurrent.atomic.AtomicInteger import scala.annotation.{ tailrec, varargs } import scala.collection.immutable -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.Config import com.typesafe.config.ConfigFactory @@ -102,7 +102,7 @@ final case class ClusterRouterGroupSettings( // For binary compatibility @deprecated("Use constructor with useRoles instead", since = "2.5.4") - @silent("deprecated") + @nowarn("msg=deprecated") def copy( totalInstances: Int = totalInstances, routeesPaths: immutable.Seq[String] = routeesPaths, @@ -197,7 +197,7 @@ final case class ClusterRouterPoolSettings( // For binary compatibility @deprecated("Use copy with useRoles instead", since = "2.5.4") - @silent("deprecated") + @nowarn("msg=deprecated") def copy( totalInstances: Int = totalInstances, maxInstancesPerNode: Int = maxInstancesPerNode, diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/SurviveNetworkInstabilitySpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/SurviveNetworkInstabilitySpec.scala index 7380a94807..e406fe161e 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/SurviveNetworkInstabilitySpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/SurviveNetworkInstabilitySpec.scala @@ -7,7 +7,7 @@ package akka.cluster import scala.concurrent.duration._ import scala.util.control.NoStackTrace -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.ConfigFactory import akka.actor.Actor @@ -94,14 +94,14 @@ abstract class SurviveNetworkInstabilitySpec private val remoteSettings = RARP(system).provider.remoteSettings - @silent + @nowarn def quarantinedEventClass: Class[_] = if (remoteSettings.Artery.Enabled) classOf[QuarantinedEvent] else classOf[akka.remote.QuarantinedEvent] - @silent + @nowarn def quarantinedEventFrom(event: Any): Address = { event match { case QuarantinedEvent(uniqueAddress) => uniqueAddress.address @@ -110,7 +110,7 @@ abstract class SurviveNetworkInstabilitySpec } - @silent + @nowarn def sysMsgBufferSize: Int = if (RARP(system).provider.remoteSettings.Artery.Enabled) remoteSettings.Artery.Advanced.SysMsgBufferSize diff --git a/akka-cluster/src/test/scala/akka/cluster/ClusterConfigSpec.scala b/akka-cluster/src/test/scala/akka/cluster/ClusterConfigSpec.scala index d55a081a00..838c9c33f5 100644 --- a/akka-cluster/src/test/scala/akka/cluster/ClusterConfigSpec.scala +++ b/akka-cluster/src/test/scala/akka/cluster/ClusterConfigSpec.scala @@ -6,7 +6,7 @@ package akka.cluster import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.ConfigFactory import language.postfixOps @@ -17,7 +17,7 @@ import akka.testkit.AkkaSpec import akka.util.Helpers.ConfigOps import akka.util.Version -@silent +@nowarn class ClusterConfigSpec extends AkkaSpec { "Clustering" must { diff --git a/akka-cluster/src/test/scala/akka/cluster/ReachabilityPerfSpec.scala b/akka-cluster/src/test/scala/akka/cluster/ReachabilityPerfSpec.scala index 9d4b558270..b0f33ae060 100644 --- a/akka-cluster/src/test/scala/akka/cluster/ReachabilityPerfSpec.scala +++ b/akka-cluster/src/test/scala/akka/cluster/ReachabilityPerfSpec.scala @@ -4,7 +4,7 @@ package akka.cluster -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpec @@ -28,7 +28,7 @@ class ReachabilityPerfSpec extends AnyWordSpec with Matchers { r.unreachable(observer, subject).reachable(observer, subject) } - @silent + @nowarn private def addUnreachable(base: Reachability, count: Int): Reachability = { val observers = base.versions.keySet.take(count) val subjects = Stream.continually(base.versions.keySet).flatten.iterator diff --git a/akka-cluster/src/test/scala/akka/cluster/protobuf/ClusterMessageSerializerSpec.scala b/akka-cluster/src/test/scala/akka/cluster/protobuf/ClusterMessageSerializerSpec.scala index f461236f2d..1b8a027ac7 100644 --- a/akka-cluster/src/test/scala/akka/cluster/protobuf/ClusterMessageSerializerSpec.scala +++ b/akka-cluster/src/test/scala/akka/cluster/protobuf/ClusterMessageSerializerSpec.scala @@ -6,7 +6,7 @@ package akka.cluster.protobuf import collection.immutable.SortedSet -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.ConfigFactory import akka.actor.{ Address, ExtendedActorSystem } @@ -17,7 +17,7 @@ import akka.routing.RoundRobinPool import akka.testkit.AkkaSpec import akka.util.Version -@silent +@nowarn class ClusterMessageSerializerSpec extends AkkaSpec("akka.actor.provider = cluster") { val serializer = new ClusterMessageSerializer(system.asInstanceOf[ExtendedActorSystem]) diff --git a/akka-discovery/src/main/scala/akka/discovery/ServiceDiscovery.scala b/akka-discovery/src/main/scala/akka/discovery/ServiceDiscovery.scala index 3531ad14ff..10d0043e13 100644 --- a/akka-discovery/src/main/scala/akka/discovery/ServiceDiscovery.scala +++ b/akka-discovery/src/main/scala/akka/discovery/ServiceDiscovery.scala @@ -67,8 +67,8 @@ object ServiceDiscovery { object ResolvedTarget { // Simply compare the bytes of the address. // This may not work in exotic cases such as IPv4 addresses encoded as IPv6 addresses. - import com.github.ghik.silencer.silent - @silent("deprecated") + import scala.annotation.nowarn + @nowarn("msg=deprecated") private implicit val inetAddressOrdering: Ordering[InetAddress] = Ordering.by[InetAddress, Iterable[Byte]](_.getAddress) diff --git a/akka-discovery/src/test/scala/akka/discovery/dns/DnsDiscoverySpec.scala b/akka-discovery/src/test/scala/akka/discovery/dns/DnsDiscoverySpec.scala index c65329087a..59f27218ef 100644 --- a/akka-discovery/src/test/scala/akka/discovery/dns/DnsDiscoverySpec.scala +++ b/akka-discovery/src/test/scala/akka/discovery/dns/DnsDiscoverySpec.scala @@ -13,7 +13,7 @@ import akka.discovery.{ Discovery, Lookup } import akka.discovery.ServiceDiscovery import akka.discovery.ServiceDiscovery.ResolvedTarget import akka.io.dns.DockerBindDnsService -import akka.testkit.{ AkkaSpec, SocketUtil, TestKit } +import akka.testkit.{ SocketUtil, TestKit } object DnsDiscoverySpec { @@ -37,7 +37,7 @@ object DnsDiscoverySpec { } -class DnsDiscoverySpec extends AkkaSpec(DnsDiscoverySpec.config) with DockerBindDnsService { +class DnsDiscoverySpec extends DockerBindDnsService(DnsDiscoverySpec.config) { import DnsDiscoverySpec._ diff --git a/akka-distributed-data/src/main/scala/akka/cluster/ddata/Replicator.scala b/akka-distributed-data/src/main/scala/akka/cluster/ddata/Replicator.scala index 32d6ba2ef1..853ae45500 100644 --- a/akka-distributed-data/src/main/scala/akka/cluster/ddata/Replicator.scala +++ b/akka-distributed-data/src/main/scala/akka/cluster/ddata/Replicator.scala @@ -22,7 +22,7 @@ import scala.util.Try import scala.util.control.NoStackTrace import scala.util.control.NonFatal -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.Config import akka.actor.Actor @@ -1488,9 +1488,9 @@ final class Replicator(settings: ReplicatorSettings) extends Actor with ActorLog // possibility to disable Gossip for testing purpose var fullStateGossipEnabled = true - @silent("deprecated") + @nowarn("msg=deprecated") val subscribers = new mutable.HashMap[KeyId, mutable.Set[ActorRef]] with mutable.MultiMap[KeyId, ActorRef] - @silent("deprecated") + @nowarn("msg=deprecated") val newSubscribers = new mutable.HashMap[KeyId, mutable.Set[ActorRef]] with mutable.MultiMap[KeyId, ActorRef] var subscriptionKeys = Map.empty[KeyId, KeyR] diff --git a/akka-distributed-data/src/main/scala/akka/cluster/ddata/protobuf/ReplicatedDataSerializer.scala b/akka-distributed-data/src/main/scala/akka/cluster/ddata/protobuf/ReplicatedDataSerializer.scala index 434184e6de..7c1e3ddf4a 100644 --- a/akka-distributed-data/src/main/scala/akka/cluster/ddata/protobuf/ReplicatedDataSerializer.scala +++ b/akka-distributed-data/src/main/scala/akka/cluster/ddata/protobuf/ReplicatedDataSerializer.scala @@ -14,7 +14,7 @@ import java.util.Comparator import scala.annotation.tailrec import scala.collection.immutable -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor.ActorRef import akka.actor.ExtendedActorSystem @@ -47,7 +47,7 @@ private object ReplicatedDataSerializer { def getKey(entry: A): Any final def compare(x: A, y: A): Int = compareKeys(getKey(x), getKey(y)) - @silent("deprecated") + @nowarn("msg=deprecated") private final def compareKeys(t1: Any, t2: Any): Int = (t1, t2) match { case (k1: String, k2: String) => k1.compareTo(k2) case (_: String, _) => -1 diff --git a/akka-persistence-typed-tests/src/test/scala/docs/akka/persistence/typed/ReplicatedEventSourcingCompileOnlySpec.scala b/akka-persistence-typed-tests/src/test/scala/docs/akka/persistence/typed/ReplicatedEventSourcingCompileOnlySpec.scala index db8903b75a..6a47ff5fb9 100644 --- a/akka-persistence-typed-tests/src/test/scala/docs/akka/persistence/typed/ReplicatedEventSourcingCompileOnlySpec.scala +++ b/akka-persistence-typed-tests/src/test/scala/docs/akka/persistence/typed/ReplicatedEventSourcingCompileOnlySpec.scala @@ -7,9 +7,9 @@ package docs.akka.persistence.typed import akka.persistence.typed.ReplicaId import akka.persistence.typed.ReplicationId import akka.persistence.typed.scaladsl.{ EventSourcedBehavior, ReplicatedEventSourcing } -import com.github.ghik.silencer.silent +import scala.annotation.nowarn -@silent("never used") +@nowarn("msg=never used") object ReplicatedEventSourcingCompileOnlySpec { //#replicas diff --git a/akka-persistence-typed/src/test/scala/akka/persistence/typed/scaladsl/PersistentActorCompileOnlyTest.scala b/akka-persistence-typed/src/test/scala/akka/persistence/typed/scaladsl/PersistentActorCompileOnlyTest.scala index d8e38d9bae..572d6f9114 100644 --- a/akka-persistence-typed/src/test/scala/akka/persistence/typed/scaladsl/PersistentActorCompileOnlyTest.scala +++ b/akka-persistence-typed/src/test/scala/akka/persistence/typed/scaladsl/PersistentActorCompileOnlyTest.scala @@ -8,7 +8,7 @@ import scala.concurrent.ExecutionContext import scala.concurrent.Future import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor.typed.{ ActorRef, Behavior } import akka.actor.typed.ActorSystem @@ -18,7 +18,7 @@ import akka.persistence.typed.PersistenceId import akka.persistence.typed.RecoveryCompleted // unused names in pattern match can be useful in the docs -@silent +@nowarn object PersistentActorCompileOnlyTest { import akka.persistence.typed.scaladsl.EventSourcedBehavior._ diff --git a/akka-persistence-typed/src/test/scala/docs/akka/persistence/typed/BasicPersistentBehaviorCompileOnly.scala b/akka-persistence-typed/src/test/scala/docs/akka/persistence/typed/BasicPersistentBehaviorCompileOnly.scala index a802717114..f0c5c12e50 100644 --- a/akka-persistence-typed/src/test/scala/docs/akka/persistence/typed/BasicPersistentBehaviorCompileOnly.scala +++ b/akka-persistence-typed/src/test/scala/docs/akka/persistence/typed/BasicPersistentBehaviorCompileOnly.scala @@ -25,10 +25,10 @@ import akka.persistence.typed.PersistenceId //#structure import akka.persistence.typed.RecoveryCompleted import akka.persistence.typed.SnapshotFailed -import com.github.ghik.silencer.silent +import scala.annotation.nowarn // unused variables in pattern match are useful in the docs -@silent +@nowarn object BasicPersistentBehaviorCompileOnly { import akka.persistence.typed.scaladsl.RetentionCriteria diff --git a/akka-persistence/src/main/scala/akka/persistence/Eventsourced.scala b/akka-persistence/src/main/scala/akka/persistence/Eventsourced.scala index a20441e381..86d79d229a 100644 --- a/akka-persistence/src/main/scala/akka/persistence/Eventsourced.scala +++ b/akka-persistence/src/main/scala/akka/persistence/Eventsourced.scala @@ -11,7 +11,7 @@ import scala.collection.immutable import scala.concurrent.duration.FiniteDuration import scala.util.control.NonFatal -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.ConfigFactory import akka.actor.{ Actor, ActorCell, DeadLetter, StashOverflowException } @@ -89,7 +89,7 @@ private[persistence] trait Eventsourced private var journalBatch = Vector.empty[PersistentEnvelope] // no longer used, but kept for binary compatibility - @silent("never used") + @nowarn("msg=never used") private val maxMessageBatchSize = { val journalPluginConfig = this match { case c: RuntimePluginConfig => c.journalPluginConfig diff --git a/akka-persistence/src/main/scala/akka/persistence/fsm/PersistentFSM.scala b/akka-persistence/src/main/scala/akka/persistence/fsm/PersistentFSM.scala index 80739fa0f6..edd75997d1 100644 --- a/akka-persistence/src/main/scala/akka/persistence/fsm/PersistentFSM.scala +++ b/akka-persistence/src/main/scala/akka/persistence/fsm/PersistentFSM.scala @@ -10,7 +10,7 @@ import scala.concurrent.ExecutionContextExecutor import scala.concurrent.duration._ import scala.reflect.ClassTag -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.Config import akka.actor._ @@ -124,7 +124,7 @@ trait PersistentFSM[S <: FSMState, D, E] extends PersistentActor with Persistent /** * Discover the latest recorded state */ - @silent("deprecated") + @nowarn("msg=deprecated") override def receiveRecover: Receive = { case domainEventTag(event) => startWith(stateName, applyEvent(event, stateData)) case StateChangeEvent(stateIdentifier, timeout) => startWith(statesMap(stateIdentifier), stateData, timeout) @@ -527,7 +527,7 @@ abstract class AbstractPersistentFSM[S <: FSMState, D, E] * Persistent Finite State Machine actor abstract base class with FSM Logging * */ -@silent("deprecated") +@nowarn("msg=deprecated") @deprecated("Use EventSourcedBehavior", "2.6.0") abstract class AbstractPersistentLoggingFSM[S <: FSMState, D, E] extends AbstractPersistentFSM[S, D, E] diff --git a/akka-persistence/src/main/scala/akka/persistence/journal/leveldb/LeveldbStore.scala b/akka-persistence/src/main/scala/akka/persistence/journal/leveldb/LeveldbStore.scala index eef88f6dd9..91e11d5e32 100644 --- a/akka-persistence/src/main/scala/akka/persistence/journal/leveldb/LeveldbStore.scala +++ b/akka-persistence/src/main/scala/akka/persistence/journal/leveldb/LeveldbStore.scala @@ -53,11 +53,11 @@ private[persistence] trait LeveldbStore override val compactionIntervals: Map[String, Long] = LeveldbStore.toCompactionIntervalMap(config.getObject("compaction-intervals")) - import com.github.ghik.silencer.silent - @silent("deprecated") + import scala.annotation.nowarn + @nowarn("msg=deprecated") private val persistenceIdSubscribers = new mutable.HashMap[String, mutable.Set[ActorRef]] with mutable.MultiMap[String, ActorRef] - @silent("deprecated") + @nowarn("msg=deprecated") private val tagSubscribers = new mutable.HashMap[String, mutable.Set[ActorRef]] with mutable.MultiMap[String, ActorRef] private var allPersistenceIdsSubscribers = Set.empty[ActorRef] diff --git a/akka-persistence/src/main/scala/akka/persistence/serialization/MessageSerializer.scala b/akka-persistence/src/main/scala/akka/persistence/serialization/MessageSerializer.scala index 1f03eb6e1c..5983bf5acc 100644 --- a/akka-persistence/src/main/scala/akka/persistence/serialization/MessageSerializer.scala +++ b/akka-persistence/src/main/scala/akka/persistence/serialization/MessageSerializer.scala @@ -11,7 +11,7 @@ import scala.collection.immutable.VectorBuilder import scala.concurrent.duration import scala.concurrent.duration.Duration -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor.{ ActorPath, ExtendedActorSystem } import akka.actor.Actor @@ -129,7 +129,7 @@ class MessageSerializer(val system: ExtendedActorSystem) extends BaseSerializer AtLeastOnceDeliverySnapshot(atLeastOnceDeliverySnapshot.getCurrentDeliveryId, unconfirmedDeliveries.result()) } - @silent("deprecated") + @nowarn("msg=deprecated") def stateChange(persistentStateChange: mf.PersistentStateChangeEvent): StateChangeEvent = { StateChangeEvent( persistentStateChange.getStateIdentifier, diff --git a/akka-persistence/src/test/scala/akka/persistence/PersistentActorSpec.scala b/akka-persistence/src/test/scala/akka/persistence/PersistentActorSpec.scala index 8ecc045c70..d08c21304c 100644 --- a/akka-persistence/src/test/scala/akka/persistence/PersistentActorSpec.scala +++ b/akka-persistence/src/test/scala/akka/persistence/PersistentActorSpec.scala @@ -12,7 +12,7 @@ import scala.concurrent.duration._ import scala.util.Random import scala.util.control.NoStackTrace -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.{ Config, ConfigFactory } import akka.actor._ @@ -401,7 +401,7 @@ object PersistentActorSpec { extends AsyncPersistSameEventTwicePersistentActor(name) with InmemRuntimePluginConfig - @silent // compiler knows persistAll(Nil)(lambda) will never invoke lambda + @nowarn // compiler knows persistAll(Nil)(lambda) will never invoke lambda class PersistAllNilPersistentActor(name: String) extends ExamplePersistentActor(name) { val receiveCommand: Receive = commonBehavior.orElse { diff --git a/akka-persistence/src/test/scala/akka/persistence/fsm/PersistentFSMSpec.scala b/akka-persistence/src/test/scala/akka/persistence/fsm/PersistentFSMSpec.scala index e4a20cb1d1..29d8314c2b 100644 --- a/akka-persistence/src/test/scala/akka/persistence/fsm/PersistentFSMSpec.scala +++ b/akka-persistence/src/test/scala/akka/persistence/fsm/PersistentFSMSpec.scala @@ -10,7 +10,7 @@ import scala.concurrent.duration._ import scala.language.postfixOps import scala.reflect.ClassTag -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.{ Config, ConfigFactory } import org.apache.commons.io.FileUtils @@ -19,7 +19,7 @@ import akka.persistence._ import akka.persistence.fsm.PersistentFSM._ import akka.testkit._ -@silent("deprecated") +@nowarn("msg=deprecated") abstract class PersistentFSMSpec(config: Config) extends PersistenceSpec(config) with ImplicitSender { import PersistentFSMSpec._ @@ -401,7 +401,7 @@ abstract class PersistentFSMSpec(config: Config) extends PersistenceSpec(config) } } -@silent("deprecated") +@nowarn("msg=deprecated") object PersistentFSMSpec { //#customer-states sealed trait UserState extends FSMState diff --git a/akka-remote-tests/src/multi-jvm/scala/akka/io/DnsSpec.scala b/akka-remote-tests/src/multi-jvm/scala/akka/io/DnsSpec.scala index d0df72f36d..ff289cece3 100644 --- a/akka-remote-tests/src/multi-jvm/scala/akka/io/DnsSpec.scala +++ b/akka-remote-tests/src/multi-jvm/scala/akka/io/DnsSpec.scala @@ -8,7 +8,7 @@ import java.net.Inet4Address import java.net.Inet6Address import java.net.InetAddress -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.remote.RemotingMultiNodeSpec import akka.remote.testkit.MultiNodeConfig @@ -20,7 +20,7 @@ object DnsSpec extends MultiNodeConfig { class DnsSpecMultiJvmNode1 extends DnsSpec // This is a multi-jvm tests because it is modifying global System.properties -@silent("deprecated") +@nowarn("msg=deprecated") class DnsSpec extends RemotingMultiNodeSpec(DnsSpec) { def initialParticipants = roles.size diff --git a/akka-remote-tests/src/multi-jvm/scala/akka/remote/TransportFailSpec.scala b/akka-remote-tests/src/multi-jvm/scala/akka/remote/TransportFailSpec.scala index 284587c510..388fa996d5 100644 --- a/akka-remote-tests/src/multi-jvm/scala/akka/remote/TransportFailSpec.scala +++ b/akka-remote-tests/src/multi-jvm/scala/akka/remote/TransportFailSpec.scala @@ -8,7 +8,7 @@ import java.util.concurrent.atomic.AtomicBoolean import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.Config import com.typesafe.config.ConfigFactory @@ -98,7 +98,7 @@ object TransportFailSpec { * This was fixed by not stopping the ReliableDeliverySupervisor so that the * receive buffer was preserved. */ -@silent("deprecated") +@nowarn("msg=deprecated") abstract class TransportFailSpec extends RemotingMultiNodeSpec(TransportFailConfig) { import TransportFailConfig._ import TransportFailSpec._ diff --git a/akka-remote-tests/src/multi-jvm/scala/akka/remote/artery/SurviveNetworkPartitionSpec.scala b/akka-remote-tests/src/multi-jvm/scala/akka/remote/artery/SurviveNetworkPartitionSpec.scala index d382235bfa..0d24dffbbc 100644 --- a/akka-remote-tests/src/multi-jvm/scala/akka/remote/artery/SurviveNetworkPartitionSpec.scala +++ b/akka-remote-tests/src/multi-jvm/scala/akka/remote/artery/SurviveNetworkPartitionSpec.scala @@ -6,7 +6,7 @@ package akka.remote.artery import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.ConfigFactory import akka.actor._ @@ -37,7 +37,7 @@ object SurviveNetworkPartitionSpec extends MultiNodeConfig { class SurviveNetworkPartitionSpecMultiJvmNode1 extends SurviveNetworkPartitionSpec class SurviveNetworkPartitionSpecMultiJvmNode2 extends SurviveNetworkPartitionSpec -@silent("deprecated") +@nowarn("msg=deprecated") abstract class SurviveNetworkPartitionSpec extends RemotingMultiNodeSpec(SurviveNetworkPartitionSpec) { import SurviveNetworkPartitionSpec._ diff --git a/akka-remote-tests/src/multi-jvm/scala/akka/remote/classic/RemoteGatePiercingSpec.scala b/akka-remote-tests/src/multi-jvm/scala/akka/remote/classic/RemoteGatePiercingSpec.scala index 718c2f4358..62a4bea1a3 100644 --- a/akka-remote-tests/src/multi-jvm/scala/akka/remote/classic/RemoteGatePiercingSpec.scala +++ b/akka-remote-tests/src/multi-jvm/scala/akka/remote/classic/RemoteGatePiercingSpec.scala @@ -7,7 +7,7 @@ package akka.remote.classic import scala.concurrent.Await import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.ConfigFactory import akka.actor.{ ActorIdentity, Identify, _ } @@ -48,7 +48,7 @@ object RemoteGatePiercingSpec extends MultiNodeConfig { class RemoteGatePiercingSpecMultiJvmNode1 extends RemoteGatePiercingSpec class RemoteGatePiercingSpecMultiJvmNode2 extends RemoteGatePiercingSpec -@silent("deprecated") +@nowarn("msg=deprecated") abstract class RemoteGatePiercingSpec extends RemotingMultiNodeSpec(RemoteGatePiercingSpec) { import RemoteGatePiercingSpec._ diff --git a/akka-remote-tests/src/multi-jvm/scala/akka/remote/classic/RemoteNodeRestartGateSpec.scala b/akka-remote-tests/src/multi-jvm/scala/akka/remote/classic/RemoteNodeRestartGateSpec.scala index 8b25797f23..4244605bd3 100644 --- a/akka-remote-tests/src/multi-jvm/scala/akka/remote/classic/RemoteNodeRestartGateSpec.scala +++ b/akka-remote-tests/src/multi-jvm/scala/akka/remote/classic/RemoteNodeRestartGateSpec.scala @@ -7,7 +7,7 @@ package akka.remote.classic import scala.concurrent.Await import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.ConfigFactory import akka.actor.{ ActorIdentity, Identify, _ } @@ -45,7 +45,7 @@ object RemoteNodeRestartGateSpec extends MultiNodeConfig { class RemoteNodeRestartGateSpecMultiJvmNode1 extends RemoteNodeRestartGateSpec class RemoteNodeRestartGateSpecMultiJvmNode2 extends RemoteNodeRestartGateSpec -@silent("deprecated") +@nowarn("msg=deprecated") abstract class RemoteNodeRestartGateSpec extends RemotingMultiNodeSpec(RemoteNodeRestartGateSpec) { import RemoteNodeRestartGateSpec._ diff --git a/akka-remote-tests/src/multi-jvm/scala/akka/remote/classic/Ticket15109Spec.scala b/akka-remote-tests/src/multi-jvm/scala/akka/remote/classic/Ticket15109Spec.scala index 14d389ca42..6c1048f259 100644 --- a/akka-remote-tests/src/multi-jvm/scala/akka/remote/classic/Ticket15109Spec.scala +++ b/akka-remote-tests/src/multi-jvm/scala/akka/remote/classic/Ticket15109Spec.scala @@ -7,7 +7,7 @@ package akka.remote.classic import scala.concurrent.Await import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.ConfigFactory import akka.actor.{ ActorIdentity, Identify, _ } @@ -47,7 +47,7 @@ object Ticket15109Spec extends MultiNodeConfig { class Ticket15109SpecMultiJvmNode1 extends Ticket15109Spec class Ticket15109SpecMultiJvmNode2 extends Ticket15109Spec -@silent("deprecated") +@nowarn("msg=deprecated") abstract class Ticket15109Spec extends RemotingMultiNodeSpec(Ticket15109Spec) { import Ticket15109Spec._ diff --git a/akka-remote/src/main/scala/akka/remote/Endpoint.scala b/akka-remote/src/main/scala/akka/remote/Endpoint.scala index d56c1cd728..2c3085402c 100644 --- a/akka-remote/src/main/scala/akka/remote/Endpoint.scala +++ b/akka-remote/src/main/scala/akka/remote/Endpoint.scala @@ -14,7 +14,7 @@ import scala.concurrent.duration.Deadline import scala.concurrent.duration.Duration import scala.util.control.NonFatal -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.{ AkkaException, OnlyCauseStackTrace } import akka.actor._ @@ -54,7 +54,7 @@ private[remote] trait InboundMessageDispatcher { /** * INTERNAL API */ -@silent("deprecated") +@nowarn("msg=deprecated") private[remote] class DefaultMessageDispatcher( private val system: ExtendedActorSystem, private val provider: RemoteActorRefProvider, @@ -245,7 +245,7 @@ private[remote] object ReliableDeliverySupervisor { /** * INTERNAL API */ -@silent("deprecated") +@nowarn("msg=deprecated") private[remote] class ReliableDeliverySupervisor( handleOrActive: Option[AkkaProtocolHandle], val localAddress: Address, @@ -536,7 +536,7 @@ private[remote] class ReliableDeliverySupervisor( /** * INTERNAL API */ -@silent("deprecated") +@nowarn("msg=deprecated") private[remote] abstract class EndpointActor( val localAddress: Address, val remoteAddress: Address, @@ -563,7 +563,7 @@ private[remote] abstract class EndpointActor( /** * INTERNAL API */ -@silent("deprecated") +@nowarn("msg=deprecated") private[remote] object EndpointWriter { def props( @@ -620,7 +620,7 @@ private[remote] object EndpointWriter { /** * INTERNAL API */ -@silent("deprecated") +@nowarn("msg=deprecated") private[remote] class EndpointWriter( handleOrActive: Option[AkkaProtocolHandle], localAddress: Address, @@ -1041,7 +1041,7 @@ private[remote] class EndpointWriter( /** * INTERNAL API */ -@silent("deprecated") +@nowarn("msg=deprecated") private[remote] object EndpointReader { def props( @@ -1073,7 +1073,7 @@ private[remote] object EndpointReader { /** * INTERNAL API */ -@silent("deprecated") +@nowarn("msg=deprecated") private[remote] class EndpointReader( localAddress: Address, remoteAddress: Address, diff --git a/akka-remote/src/main/scala/akka/remote/RemoteActorRefProvider.scala b/akka-remote/src/main/scala/akka/remote/RemoteActorRefProvider.scala index cf49dd4485..544dff3495 100644 --- a/akka-remote/src/main/scala/akka/remote/RemoteActorRefProvider.scala +++ b/akka-remote/src/main/scala/akka/remote/RemoteActorRefProvider.scala @@ -9,7 +9,7 @@ import scala.util.Failure import scala.util.control.Exception.Catcher import scala.util.control.NonFatal -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.ConfigurationException import akka.Done @@ -676,7 +676,7 @@ private[akka] class RemoteActorRef private[akka] ( // used by artery to direct messages to separate specialized streams @volatile private[remote] var cachedSendQueueIndex: Int = -1 - @silent("deprecated") + @nowarn("msg=deprecated") def getChild(name: Iterator[String]): InternalActorRef = { val s = name.toStream s.headOption match { diff --git a/akka-remote/src/main/scala/akka/remote/RemoteMetricsExtension.scala b/akka-remote/src/main/scala/akka/remote/RemoteMetricsExtension.scala index 5df784b5bd..6a8a82c750 100644 --- a/akka-remote/src/main/scala/akka/remote/RemoteMetricsExtension.scala +++ b/akka-remote/src/main/scala/akka/remote/RemoteMetricsExtension.scala @@ -8,7 +8,7 @@ import java.util.concurrent.ConcurrentHashMap import scala.annotation.tailrec -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor.ActorSelectionMessage import akka.actor.ActorSystem @@ -25,7 +25,7 @@ import akka.routing.RouterEnvelope * Extension that keeps track of remote metrics, such * as max size of different message types. */ -@silent("deprecated") +@nowarn("msg=deprecated") private[akka] object RemoteMetricsExtension extends ExtensionId[RemoteMetrics] with ExtensionIdProvider { override def get(system: ActorSystem): RemoteMetrics = super.get(system) override def get(system: ClassicActorSystemProvider): RemoteMetrics = super.get(system) @@ -62,7 +62,7 @@ private[akka] class RemoteMetricsOff extends RemoteMetrics { /** * INTERNAL API */ -@silent("deprecated") +@nowarn("msg=deprecated") private[akka] class RemoteMetricsOn(system: ExtendedActorSystem) extends RemoteMetrics { private val logFrameSizeExceeding: Int = diff --git a/akka-remote/src/main/scala/akka/remote/RemoteSettings.scala b/akka-remote/src/main/scala/akka/remote/RemoteSettings.scala index 44a459629d..e8899fb874 100644 --- a/akka-remote/src/main/scala/akka/remote/RemoteSettings.scala +++ b/akka-remote/src/main/scala/akka/remote/RemoteSettings.scala @@ -7,7 +7,7 @@ package akka.remote import scala.collection.immutable import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.Config import akka.ConfigurationException @@ -47,7 +47,7 @@ final class RemoteSettings(val config: Config) { /** * INTERNAL API */ - @silent("deprecated") + @nowarn("msg=deprecated") @InternalApi private[akka] def untrustedMode: Boolean = if (Artery.Enabled) Artery.UntrustedMode else UntrustedMode @deprecated("Classic remoting is deprecated, use Artery", "2.6.0") @@ -69,7 +69,7 @@ final class RemoteSettings(val config: Config) { @deprecated("Classic remoting is deprecated, use Artery", "2.6.0") val Dispatcher: String = getString("akka.remote.classic.use-dispatcher") - @silent("deprecated") + @nowarn("msg=deprecated") def configureDispatcher(props: Props): Props = if (Artery.Enabled) { if (Artery.Advanced.Dispatcher.isEmpty) props else props.withDispatcher(Artery.Advanced.Dispatcher) diff --git a/akka-remote/src/main/scala/akka/remote/RemoteWatcher.scala b/akka-remote/src/main/scala/akka/remote/RemoteWatcher.scala index a11e9a1595..49cd401353 100644 --- a/akka-remote/src/main/scala/akka/remote/RemoteWatcher.scala +++ b/akka-remote/src/main/scala/akka/remote/RemoteWatcher.scala @@ -7,7 +7,7 @@ package akka.remote import scala.collection.mutable import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor._ import akka.annotation.InternalApi @@ -113,18 +113,18 @@ private[akka] class RemoteWatcher( if (artery) (ArteryHeartbeat, ArteryHeartbeatRsp(AddressUidExtension(context.system).longAddressUid)) else { // For classic remoting the 'int' part is sufficient - @silent("deprecated") + @nowarn("msg=deprecated") val addressUid = AddressUidExtension(context.system).addressUid (Heartbeat, HeartbeatRsp(addressUid)) } // actors that this node is watching, map of watchee -> Set(watchers) - @silent("deprecated") + @nowarn("msg=deprecated") val watching = new mutable.HashMap[InternalActorRef, mutable.Set[InternalActorRef]]() with mutable.MultiMap[InternalActorRef, InternalActorRef] // nodes that this node is watching, i.e. expecting heartbeats from these nodes. Map of address -> Set(watchee) on this address - @silent("deprecated") + @nowarn("msg=deprecated") val watcheeByNodes = new mutable.HashMap[Address, mutable.Set[InternalActorRef]]() with mutable.MultiMap[Address, InternalActorRef] def watchingNodes = watcheeByNodes.keySet diff --git a/akka-remote/src/main/scala/akka/remote/Remoting.scala b/akka-remote/src/main/scala/akka/remote/Remoting.scala index 43c2246cc1..da509772b4 100644 --- a/akka-remote/src/main/scala/akka/remote/Remoting.scala +++ b/akka-remote/src/main/scala/akka/remote/Remoting.scala @@ -15,7 +15,7 @@ import scala.concurrent.duration._ import scala.util.{ Failure, Success } import scala.util.control.NonFatal -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.Config import akka.Done @@ -78,7 +78,7 @@ private[akka] trait HeartbeatMessage extends PriorityMessage /** * INTERNAL API */ -@silent("deprecated") +@nowarn("msg=deprecated") private[remote] object Remoting { final val EndpointManagerName = "endpointManager" @@ -134,7 +134,7 @@ private[remote] object Remoting { /** * INTERNAL API */ -@silent("deprecated") +@nowarn("msg=deprecated") @ccompatUsedUntil213 private[remote] class Remoting(_system: ExtendedActorSystem, _provider: RemoteActorRefProvider) extends RemoteTransport(_system, _provider) { @@ -288,7 +288,7 @@ private[remote] class Remoting(_system: ExtendedActorSystem, _provider: RemoteAc /** * INTERNAL API */ -@silent("deprecated") +@nowarn("msg=deprecated") private[remote] object EndpointManager { // Messages between Remoting and EndpointManager @@ -481,7 +481,7 @@ private[remote] object EndpointManager { /** * INTERNAL API */ -@silent("deprecated") +@nowarn("msg=deprecated") private[remote] class EndpointManager(conf: Config, log: LoggingAdapter) extends Actor with RequiresMessageQueue[UnboundedMessageQueueSemantics] { @@ -780,7 +780,7 @@ private[remote] class EndpointManager(conf: Config, log: LoggingAdapter) case ShutdownAndFlush => // Shutdown all endpoints and signal to sender() when ready (and whether all endpoints were shut down gracefully) - @silent("deprecated") + @nowarn("msg=deprecated") def shutdownAll[T](resources: IterableOnce[T])(shutdown: T => Future[Boolean]): Future[Boolean] = { Future.sequence(resources.toList.map(shutdown)).map(_.forall(identity)).recover { case NonFatal(_) => false diff --git a/akka-remote/src/main/scala/akka/remote/RemotingLifecycleEvent.scala b/akka-remote/src/main/scala/akka/remote/RemotingLifecycleEvent.scala index e32fb0ace1..a41aedfb00 100644 --- a/akka-remote/src/main/scala/akka/remote/RemotingLifecycleEvent.scala +++ b/akka-remote/src/main/scala/akka/remote/RemotingLifecycleEvent.scala @@ -6,20 +6,20 @@ package akka.remote import scala.runtime.AbstractFunction2 -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor.{ ActorSystem, Address } import akka.event.{ Logging, LoggingAdapter } import akka.event.Logging.LogLevel -@silent("@SerialVersionUID has no effect") +@nowarn("msg=@SerialVersionUID has no effect") @SerialVersionUID(1L) @deprecated("Classic remoting is deprecated, use Artery", "2.6.0") sealed trait RemotingLifecycleEvent extends Serializable { def logLevel: Logging.LogLevel } -@silent("@SerialVersionUID has no effect") +@nowarn("msg=@SerialVersionUID has no effect") @SerialVersionUID(1L) @deprecated("Classic remoting is deprecated, use Artery", "2.6.0") sealed trait AssociationEvent extends RemotingLifecycleEvent { @@ -66,7 +66,7 @@ final case class AssociationErrorEvent( } @SerialVersionUID(1L) -@silent("deprecated") +@nowarn("msg=deprecated") final case class RemotingListenEvent(listenAddresses: Set[Address]) extends RemotingLifecycleEvent { def getListenAddresses: java.util.Set[Address] = scala.collection.JavaConverters.setAsJavaSetConverter(listenAddresses).asJava @@ -115,7 +115,7 @@ final case class QuarantinedEvent(address: Address, longUid: Long) extends Remot @deprecated("Use long uid", "2.4.x") def uid: Int = longUid.toInt - @silent("deprecated") + @nowarn("msg=deprecated") @deprecated("Use long uid copy method", "2.4.x") def copy(address: Address = address, uid: Int = uid) = new QuarantinedEvent(address, uid.toLong) } @@ -144,7 +144,7 @@ final case class ThisActorSystemQuarantinedEvent(localAddress: Address, remoteAd /** * INTERNAL API */ -@silent("deprecated") +@nowarn("msg=deprecated") private[remote] class EventPublisher(system: ActorSystem, log: LoggingAdapter, logLevel: Logging.LogLevel) { def notifyListeners(message: RemotingLifecycleEvent): Unit = { system.eventStream.publish(message) diff --git a/akka-remote/src/main/scala/akka/remote/artery/ArterySettings.scala b/akka-remote/src/main/scala/akka/remote/artery/ArterySettings.scala index d6da853bec..74fb4c1a7e 100644 --- a/akka-remote/src/main/scala/akka/remote/artery/ArterySettings.scala +++ b/akka-remote/src/main/scala/akka/remote/artery/ArterySettings.scala @@ -8,7 +8,7 @@ import java.net.InetAddress import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.Config import com.typesafe.config.ConfigFactory @@ -102,10 +102,10 @@ private[akka] final class ArterySettings private (config: Config) { val TestMode: Boolean = getBoolean("test-mode") val Dispatcher: String = getString("use-dispatcher") val ControlStreamDispatcher: String = getString("use-control-stream-dispatcher") - @silent("deprecated") + @nowarn("msg=deprecated") val MaterializerSettings: ActorMaterializerSettings = ActorMaterializerSettings(config.getConfig("materializer")).withDispatcher(Dispatcher) - @silent("deprecated") + @nowarn("msg=deprecated") val ControlStreamMaterializerSettings: ActorMaterializerSettings = ActorMaterializerSettings(config.getConfig("materializer")).withDispatcher(ControlStreamDispatcher) diff --git a/akka-remote/src/main/scala/akka/remote/artery/ArteryTransport.scala b/akka-remote/src/main/scala/akka/remote/artery/ArteryTransport.scala index 59bab80451..8dcdbb97e8 100644 --- a/akka-remote/src/main/scala/akka/remote/artery/ArteryTransport.scala +++ b/akka-remote/src/main/scala/akka/remote/artery/ArteryTransport.scala @@ -17,7 +17,7 @@ import scala.concurrent.duration._ import scala.util.Try import scala.util.control.NoStackTrace -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.Done import akka.NotUsed @@ -558,7 +558,7 @@ private[remote] abstract class ArteryTransport(_system: ExtendedActorSystem, _pr // and can result in forming two separate clusters (cluster split). // Instead, the downing strategy should act on ThisActorSystemQuarantinedEvent, e.g. // use it as a STONITH signal. - @silent("deprecated") + @nowarn("msg=deprecated") val lifecycleEvent = ThisActorSystemQuarantinedEvent(localAddress, from) system.eventStream.publish(lifecycleEvent) @@ -671,7 +671,7 @@ private[remote] abstract class ArteryTransport(_system: ExtendedActorSystem, _pr private[remote] def isShutdown: Boolean = hasBeenShutdown.get() - @silent // ThrottleMode from classic is deprecated, we can replace when removing classic + @nowarn // ThrottleMode from classic is deprecated, we can replace when removing classic override def managementCommand(cmd: Any): Future[Boolean] = { cmd match { case SetThrottle(address, direction, Blackhole) => diff --git a/akka-remote/src/main/scala/akka/remote/artery/Association.scala b/akka-remote/src/main/scala/akka/remote/artery/Association.scala index 71ee0182c3..219e98afa0 100644 --- a/akka-remote/src/main/scala/akka/remote/artery/Association.scala +++ b/akka-remote/src/main/scala/akka/remote/artery/Association.scala @@ -18,7 +18,7 @@ import scala.concurrent.Promise import scala.concurrent.duration._ import scala.util.control.NoStackTrace -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import org.agrona.concurrent.ManyToOneConcurrentArrayQueue import akka.Done @@ -249,7 +249,7 @@ private[remote] class Association( * Holds reference to shared state of Association - *access only via helper methods* */ @volatile - @silent("never used") + @nowarn("msg=never used") private[this] var _sharedStateDoNotCallMeDirectly: AssociationState = AssociationState() /** @@ -338,7 +338,7 @@ private[remote] class Association( outboundEnvelopePool.acquire().init(recipient, message.asInstanceOf[AnyRef], sender) // volatile read to see latest queue array - @silent("never used") + @nowarn("msg=never used") val unused = queuesVisibility def dropped(queueIndex: Int, qSize: Int, env: OutboundEnvelope): Unit = { @@ -791,7 +791,7 @@ private[remote] class Association( } private def getOrCreateQueueWrapper(queueIndex: Int, capacity: Int): QueueWrapper = { - @silent("never used") + @nowarn("msg=never used") val unused = queuesVisibility // volatile read to see latest queues array queues(queueIndex) match { case existing: QueueWrapper => existing diff --git a/akka-remote/src/main/scala/akka/remote/routing/RemoteRouterConfig.scala b/akka-remote/src/main/scala/akka/remote/routing/RemoteRouterConfig.scala index 871eab0f6f..d187d61ac0 100644 --- a/akka-remote/src/main/scala/akka/remote/routing/RemoteRouterConfig.scala +++ b/akka-remote/src/main/scala/akka/remote/routing/RemoteRouterConfig.scala @@ -6,7 +6,7 @@ package akka.remote.routing import java.util.concurrent.atomic.AtomicInteger -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.ConfigFactory import akka.actor.ActorCell @@ -41,7 +41,7 @@ final case class RemoteRouterConfig(local: Pool, nodes: Iterable[Address]) exten def this(local: Pool, nodes: Array[Address]) = this(local, nodes: Iterable[Address]) // need this iterator as instance variable since Resizer may call createRoutees several times - @silent @transient private val nodeAddressIter: Iterator[Address] = Stream.continually(nodes).flatten.iterator + @nowarn @transient private val nodeAddressIter: Iterator[Address] = Stream.continually(nodes).flatten.iterator // need this counter as instance variable since Resizer may call createRoutees several times @transient private val childNameCounter = new AtomicInteger diff --git a/akka-remote/src/main/scala/akka/remote/transport/AkkaPduCodec.scala b/akka-remote/src/main/scala/akka/remote/transport/AkkaPduCodec.scala index b9f9fb9107..03a613d101 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/AkkaPduCodec.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/AkkaPduCodec.scala @@ -4,7 +4,7 @@ package akka.remote.transport -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.AkkaException import akka.actor.{ ActorRef, Address, AddressFromURIString, InternalActorRef } @@ -27,7 +27,7 @@ private[remote] class PduCodecException(msg: String, cause: Throwable) extends A * Companion object of the [[akka.remote.transport.AkkaPduCodec]] trait. Contains the representation case classes * of decoded Akka Protocol Data Units (PDUs). */ -@silent("deprecated") +@nowarn("msg=deprecated") private[remote] object AkkaPduCodec { /** @@ -58,7 +58,7 @@ private[remote] object AkkaPduCodec { * * A Codec that is able to convert Akka PDUs (Protocol Data Units) from and to [[akka.util.ByteString]]s. */ -@silent("deprecated") +@nowarn("msg=deprecated") private[remote] trait AkkaPduCodec { import AkkaPduCodec._ @@ -118,7 +118,7 @@ private[remote] trait AkkaPduCodec { /** * INTERNAL API */ -@silent("deprecated") +@nowarn("msg=deprecated") private[remote] object AkkaPduProtobufCodec extends AkkaPduCodec { import AkkaPduCodec._ diff --git a/akka-remote/src/main/scala/akka/remote/transport/AkkaProtocolTransport.scala b/akka-remote/src/main/scala/akka/remote/transport/AkkaProtocolTransport.scala index 22fd8daed3..e90c23a5a4 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/AkkaProtocolTransport.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/AkkaProtocolTransport.scala @@ -11,7 +11,7 @@ import scala.concurrent.{ Future, Promise } import scala.concurrent.duration._ import scala.util.control.NonFatal -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.Config import akka.{ AkkaException, OnlyCauseStackTrace } @@ -60,7 +60,7 @@ private[remote] class AkkaProtocolSettings(config: Config) { } } -@silent("deprecated") +@nowarn("msg=deprecated") private[remote] object AkkaProtocolTransport { //Couldn't these go into the Remoting Extension/ RemoteSettings instead? val AkkaScheme: String = "akka" val AkkaOverhead: Int = 0 //Don't know yet @@ -103,7 +103,7 @@ final case class HandshakeInfo(origin: Address, uid: Int, cookie: Option[String] * @param codec * the codec that will be used to encode/decode Akka PDUs */ -@silent("deprecated") +@nowarn("msg=deprecated") private[remote] class AkkaProtocolTransport( wrappedTransport: Transport, private val system: ActorSystem, @@ -133,7 +133,7 @@ private[remote] class AkkaProtocolTransport( } } -@silent("deprecated") +@nowarn("msg=deprecated") private[transport] class AkkaProtocolManager( private val wrappedTransport: Transport, private val settings: AkkaProtocolSettings) @@ -156,7 +156,7 @@ private[transport] class AkkaProtocolManager( val failureDetector = createTransportFailureDetector() // Using the 'int' addressUid rather than the 'long' is sufficient for Classic Remoting - @silent("deprecated") + @nowarn("msg=deprecated") val addressUid = AddressUidExtension(context.system).addressUid context.actorOf( @@ -188,7 +188,7 @@ private[transport] class AkkaProtocolManager( val failureDetector = createTransportFailureDetector() // Using the 'int' addressUid rather than the 'long' is sufficient for Classic Remoting - @silent("deprecated") + @nowarn("msg=deprecated") val addressUid = AddressUidExtension(context.system).addressUid context.actorOf( @@ -210,7 +210,7 @@ private[transport] class AkkaProtocolManager( } -@silent("deprecated") +@nowarn("msg=deprecated") private[remote] class AkkaProtocolHandle( _localAddress: Address, _remoteAddress: Address, @@ -228,7 +228,7 @@ private[remote] class AkkaProtocolHandle( def disassociate(info: DisassociateInfo): Unit = stateActor ! DisassociateUnderlying(info) } -@silent("deprecated") +@nowarn("msg=deprecated") private[remote] object ProtocolStateActor { sealed trait AssociationState @@ -331,7 +331,7 @@ private[remote] object ProtocolStateActor { failureDetector).withDeploy(Deploy.local) } -@silent("deprecated") +@nowarn("msg=deprecated") private[remote] class ProtocolStateActor( initialData: InitialProtocolStateData, private val localHandshakeInfo: HandshakeInfo, diff --git a/akka-remote/src/main/scala/akka/remote/transport/FailureInjectorTransportAdapter.scala b/akka-remote/src/main/scala/akka/remote/transport/FailureInjectorTransportAdapter.scala index 6591c3454d..679d3492d5 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/FailureInjectorTransportAdapter.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/FailureInjectorTransportAdapter.scala @@ -11,7 +11,7 @@ import scala.concurrent.{ Future, Promise } import scala.util.control.NoStackTrace import FailureInjectorTransportAdapter._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.AkkaException import akka.actor.{ Address, ExtendedActorSystem } @@ -61,7 +61,7 @@ private[remote] object FailureInjectorTransportAdapter { /** * INTERNAL API */ -@silent("deprecated") +@nowarn("msg=deprecated") private[remote] class FailureInjectorTransportAdapter( wrappedTransport: Transport, val extendedSystem: ExtendedActorSystem) @@ -162,7 +162,7 @@ private[remote] class FailureInjectorTransportAdapter( /** * INTERNAL API */ -@silent("deprecated") +@nowarn("msg=deprecated") private[remote] final case class FailureInjectorHandle( _wrappedHandle: AssociationHandle, private val gremlinAdapter: FailureInjectorTransportAdapter) @@ -189,7 +189,7 @@ private[remote] final case class FailureInjectorHandle( @deprecated( message = "Use method that states reasons to make sure disassociation reasons are logged.", since = "2.5.3") - @silent("deprecated") + @nowarn("msg=deprecated") override def disassociate(): Unit = wrappedHandle.disassociate() diff --git a/akka-remote/src/main/scala/akka/remote/transport/ThrottlerTransportAdapter.scala b/akka-remote/src/main/scala/akka/remote/transport/ThrottlerTransportAdapter.scala index 50f9748d69..0f6bcffa14 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/ThrottlerTransportAdapter.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/ThrottlerTransportAdapter.scala @@ -15,7 +15,7 @@ import scala.math.min import scala.util.{ Failure, Success } import scala.util.control.NonFatal -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor._ import akka.dispatch.{ RequiresMessageQueue, UnboundedMessageQueueSemantics } @@ -235,7 +235,7 @@ class ThrottlerTransportAdapter(_wrappedTransport: Transport, _system: ExtendedA /** * INTERNAL API */ -@silent("deprecated") +@nowarn("msg=deprecated") private[transport] object ThrottlerManager { final case class Checkin(origin: Address, handle: ThrottlerHandle) extends NoSerializationVerificationNeeded @@ -253,7 +253,7 @@ private[transport] object ThrottlerManager { /** * INTERNAL API */ -@silent("deprecated") +@nowarn("msg=deprecated") private[transport] class ThrottlerManager(wrappedTransport: Transport) extends ActorTransportAdapterManager with ActorLogging { @@ -352,7 +352,7 @@ private[transport] class ThrottlerManager(wrappedTransport: Transport) } // silent because of use of isTerminated - @silent("deprecated") + @nowarn("msg=deprecated") private def askModeWithDeathCompletion(target: ActorRef, mode: ThrottleMode)( implicit timeout: Timeout): Future[SetThrottleAck.type] = { if (target.isTerminated) Future.successful(SetThrottleAck) @@ -424,7 +424,7 @@ private[transport] object ThrottledAssociation { /** * INTERNAL API */ -@silent("deprecated") +@nowarn("msg=deprecated") private[transport] class ThrottledAssociation( val manager: ActorRef, val associationHandler: AssociationEventListener, @@ -588,7 +588,7 @@ private[transport] class ThrottledAssociation( /** * INTERNAL API */ -@silent("deprecated") +@nowarn("msg=deprecated") private[transport] final case class ThrottlerHandle(_wrappedHandle: AssociationHandle, throttlerActor: ActorRef) extends AbstractTransportAdapterHandle(_wrappedHandle, SchemeIdentifier) { diff --git a/akka-remote/src/main/scala/akka/remote/transport/Transport.scala b/akka-remote/src/main/scala/akka/remote/transport/Transport.scala index bf09408b62..802a395b0e 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/Transport.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/Transport.scala @@ -7,7 +7,7 @@ package akka.remote.transport import scala.concurrent.{ Future, Promise } import scala.util.control.NoStackTrace -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.AkkaException import akka.actor.{ ActorRef, Address, NoSerializationVerificationNeeded } @@ -284,7 +284,7 @@ trait AssociationHandle { * be notified, but this is not guaranteed. The Transport that provides the handle MUST guarantee that disassociate() * could be called arbitrarily many times. */ - @silent("deprecated") + @nowarn("msg=deprecated") def disassociate(reason: String, log: LoggingAdapter): Unit = { if (log.isDebugEnabled) log.debug( diff --git a/akka-remote/src/main/scala/akka/remote/transport/netty/NettySSLSupport.scala b/akka-remote/src/main/scala/akka/remote/transport/netty/NettySSLSupport.scala index e0ad4e913b..f97f4e55be 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/netty/NettySSLSupport.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/netty/NettySSLSupport.scala @@ -4,7 +4,7 @@ package akka.remote.transport.netty -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.Config import org.jboss.netty.handler.ssl.SslHandler @@ -44,7 +44,7 @@ private[akka] class SSLSettings(config: Config) { * The `SSLEngine` is created via the configured [[SSLEngineProvider]]. */ @ccompatUsedUntil213 -@silent("deprecated") +@nowarn("msg=deprecated") private[akka] object NettySSLSupport { /** diff --git a/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala b/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala index e2f46abd3d..a9b53ef190 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/netty/NettyTransport.scala @@ -21,7 +21,7 @@ import scala.util.Try import scala.util.control.NoStackTrace import scala.util.control.NonFatal -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.Config import org.jboss.netty.bootstrap.Bootstrap import org.jboss.netty.bootstrap.ClientBootstrap @@ -170,7 +170,7 @@ class NettyTransportSettings(config: Config) { val PortSelector: Int = getInt("port") @deprecated("WARNING: This should only be used by professionals.", "2.4") - @silent("deprecated") + @nowarn("msg=deprecated") val BindPortSelector: Int = getString("bind-port") match { case "" => PortSelector case value => value.toInt @@ -213,7 +213,7 @@ class NettyTransportSettings(config: Config) { /** * INTERNAL API */ -@silent("deprecated") +@nowarn("msg=deprecated") private[netty] trait CommonHandlers extends NettyHelpers { protected val transport: NettyTransport @@ -256,7 +256,7 @@ private[netty] trait CommonHandlers extends NettyHelpers { /** * INTERNAL API */ -@silent("deprecated") +@nowarn("msg=deprecated") private[netty] abstract class ServerHandler( protected final val transport: NettyTransport, private final val associationListenerFuture: Future[AssociationEventListener]) @@ -288,7 +288,7 @@ private[netty] abstract class ServerHandler( /** * INTERNAL API */ -@silent("deprecated") +@nowarn("msg=deprecated") private[netty] abstract class ClientHandler(protected final val transport: NettyTransport, remoteAddress: Address) extends NettyClientHelpers with CommonHandlers { @@ -498,7 +498,7 @@ class NettyTransport(val settings: NettyTransportSettings, val system: ExtendedA } override def listen: Future[(Address, Promise[AssociationEventListener])] = { - @silent("deprecated") + @nowarn("msg=deprecated") val bindPort = settings.BindPortSelector for { @@ -516,7 +516,7 @@ class NettyTransport(val settings: NettyTransportSettings, val system: ExtendedA serverChannel = newServerChannel - @silent("deprecated") + @nowarn("msg=deprecated") val port = if (settings.PortSelector == 0) None else Some(settings.PortSelector) addressFromSocketAddress( diff --git a/akka-remote/src/main/scala/akka/remote/transport/netty/TcpSupport.scala b/akka-remote/src/main/scala/akka/remote/transport/netty/TcpSupport.scala index 97c4d83d81..a71e84511d 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/netty/TcpSupport.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/netty/TcpSupport.scala @@ -8,7 +8,7 @@ import java.net.InetSocketAddress import scala.concurrent.{ Future, Promise } -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import org.jboss.netty.buffer.{ ChannelBuffer, ChannelBuffers } import org.jboss.netty.channel._ @@ -30,7 +30,7 @@ private[remote] object ChannelLocalActor extends ChannelLocal[Option[HandleEvent /** * INTERNAL API */ -@silent("deprecated") +@nowarn("msg=deprecated") private[remote] trait TcpHandlers extends CommonHandlers { protected def log: LoggingAdapter @@ -66,7 +66,7 @@ private[remote] trait TcpHandlers extends CommonHandlers { /** * INTERNAL API */ -@silent("deprecated") +@nowarn("msg=deprecated") private[remote] class TcpServerHandler( _transport: NettyTransport, _associationListenerFuture: Future[AssociationEventListener], @@ -82,7 +82,7 @@ private[remote] class TcpServerHandler( /** * INTERNAL API */ -@silent("deprecated") +@nowarn("msg=deprecated") private[remote] class TcpClientHandler(_transport: NettyTransport, remoteAddress: Address, val log: LoggingAdapter) extends ClientHandler(_transport, remoteAddress) with TcpHandlers { @@ -95,7 +95,7 @@ private[remote] class TcpClientHandler(_transport: NettyTransport, remoteAddress /** * INTERNAL API */ -@silent("deprecated") +@nowarn("msg=deprecated") private[remote] class TcpAssociationHandle( val localAddress: Address, val remoteAddress: Address, diff --git a/akka-remote/src/test/scala/akka/remote/AccrualFailureDetectorSpec.scala b/akka-remote/src/test/scala/akka/remote/AccrualFailureDetectorSpec.scala index 8749069243..69d77d7b4d 100644 --- a/akka-remote/src/test/scala/akka/remote/AccrualFailureDetectorSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/AccrualFailureDetectorSpec.scala @@ -7,12 +7,12 @@ package akka.remote import scala.collection.immutable.TreeMap import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.remote.FailureDetector.Clock import akka.testkit.AkkaSpec -@silent +@nowarn class AccrualFailureDetectorSpec extends AkkaSpec("akka.loglevel = INFO") { "An AccrualFailureDetector" must { diff --git a/akka-remote/src/test/scala/akka/remote/AckedDeliverySpec.scala b/akka-remote/src/test/scala/akka/remote/AckedDeliverySpec.scala index 402fc48561..0130b0b090 100644 --- a/akka-remote/src/test/scala/akka/remote/AckedDeliverySpec.scala +++ b/akka-remote/src/test/scala/akka/remote/AckedDeliverySpec.scala @@ -8,11 +8,11 @@ import java.util.concurrent.ThreadLocalRandom import scala.annotation.tailrec -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.testkit.AkkaSpec -@silent("deprecated") +@nowarn("msg=deprecated") object AckedDeliverySpec { final case class Sequenced(seq: SeqNo, body: String) extends HasSequenceNumber { @@ -21,7 +21,7 @@ object AckedDeliverySpec { } -@silent("deprecated") +@nowarn("msg=deprecated") class AckedDeliverySpec extends AkkaSpec { import AckedDeliverySpec._ diff --git a/akka-remote/src/test/scala/akka/remote/RemoteConfigSpec.scala b/akka-remote/src/test/scala/akka/remote/RemoteConfigSpec.scala index d73e313204..43a27b699a 100644 --- a/akka-remote/src/test/scala/akka/remote/RemoteConfigSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/RemoteConfigSpec.scala @@ -6,7 +6,7 @@ package akka.remote import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import language.postfixOps import akka.remote.transport.AkkaProtocolSettings @@ -15,7 +15,7 @@ import akka.testkit.AkkaSpec import akka.util.Helpers import akka.util.Helpers.ConfigOps -@silent // classic deprecated +@nowarn // classic deprecated class RemoteConfigSpec extends AkkaSpec(""" akka.actor.provider = remote akka.remote.classic.netty.tcp.port = 0 diff --git a/akka-remote/src/test/scala/akka/remote/RemoteFeaturesSpec.scala b/akka-remote/src/test/scala/akka/remote/RemoteFeaturesSpec.scala index 4f15c3b04d..a9bc60fd55 100644 --- a/akka-remote/src/test/scala/akka/remote/RemoteFeaturesSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/RemoteFeaturesSpec.scala @@ -6,7 +6,7 @@ package akka.remote import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.Config import com.typesafe.config.ConfigFactory @@ -57,7 +57,7 @@ abstract class RemoteFeaturesSpec(c: Config) extends ArteryMultiNodeSpec(c) with protected val remoteSystem1 = newRemoteSystem(name = Some("RS1"), extraConfig = Some(common(useUnsafe))) - @silent("deprecated") + @nowarn("msg=deprecated") private def mute(): Unit = { Seq(system, remoteSystem1).foreach( muteDeadLetters( diff --git a/akka-remote/src/test/scala/akka/remote/Ticket1978CommunicationSpec.scala b/akka-remote/src/test/scala/akka/remote/Ticket1978CommunicationSpec.scala index 7491dfb92b..4d0c206133 100644 --- a/akka-remote/src/test/scala/akka/remote/Ticket1978CommunicationSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/Ticket1978CommunicationSpec.scala @@ -12,7 +12,7 @@ import scala.concurrent.{ Await, Future } import scala.concurrent.duration._ import scala.reflect.classTag -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config._ import akka.actor._ @@ -24,7 +24,7 @@ import akka.remote.transport.netty.SSLSettings import akka.testkit._ import akka.util.Timeout -@silent("deprecated") +@nowarn("msg=deprecated") object Configuration { // set this in your JAVA_OPTS to see all ssl debug info: "-Djavax.net.debug=ssl,keymanager" // The certificate will expire in 2109 @@ -124,7 +124,7 @@ class Ticket1978CrappyRSAWithMD5OnlyHereToMakeSureThingsWorkSpec class Ticket1978NonExistingRNGSecureSpec extends Ticket1978CommunicationSpec(CipherConfig(false, AkkaSpec.testConf, "NonExistingRNG", 12345, 12346, None)) -@silent("deprecated") +@nowarn("msg=deprecated") abstract class Ticket1978CommunicationSpec(val cipherConfig: CipherConfig) extends AkkaSpec(cipherConfig.config) with ImplicitSender { diff --git a/akka-remote/src/test/scala/akka/remote/TypedActorRemoteDeploySpec.scala b/akka-remote/src/test/scala/akka/remote/TypedActorRemoteDeploySpec.scala index 22d421a034..1bc17e65a0 100644 --- a/akka-remote/src/test/scala/akka/remote/TypedActorRemoteDeploySpec.scala +++ b/akka-remote/src/test/scala/akka/remote/TypedActorRemoteDeploySpec.scala @@ -8,7 +8,7 @@ import scala.concurrent.{ Await, Future } import scala.concurrent.duration._ import TypedActorRemoteDeploySpec._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config._ import akka.actor.{ ActorSystem, Deploy, TypedActor, TypedProps } @@ -29,10 +29,10 @@ object TypedActorRemoteDeploySpec { } class RemoteNameServiceImpl extends RemoteNameService { - @silent + @nowarn def getName: Future[String] = Future.successful(TypedActor.context.system.name) - @silent + @nowarn def getNameSelfDeref: Future[String] = TypedActor.self[RemoteNameService].getName } @@ -43,7 +43,7 @@ class TypedActorRemoteDeploySpec extends AkkaSpec(conf) { val remoteSystem = ActorSystem(remoteName, conf) val remoteAddress = RARP(remoteSystem).provider.getDefaultAddress - @silent + @nowarn def verify[T](f: RemoteNameService => Future[T], expected: T) = { val ts = TypedActor(system) val echoService: RemoteNameService = diff --git a/akka-remote/src/test/scala/akka/remote/artery/LruBoundedCacheSpec.scala b/akka-remote/src/test/scala/akka/remote/artery/LruBoundedCacheSpec.scala index 8738a75f3d..3d1c6d33bf 100644 --- a/akka-remote/src/test/scala/akka/remote/artery/LruBoundedCacheSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/artery/LruBoundedCacheSpec.scala @@ -6,12 +6,12 @@ package akka.remote.artery import scala.util.Random -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.testkit.AkkaSpec import akka.util.Unsafe -@silent +@nowarn class LruBoundedCacheSpec extends AkkaSpec { class TestCache(_capacity: Int, threshold: Int, hashSeed: String = "") diff --git a/akka-remote/src/test/scala/akka/remote/artery/RemoteDeathWatchSpec.scala b/akka-remote/src/test/scala/akka/remote/artery/RemoteDeathWatchSpec.scala index aca0e21d88..2d1516ecbc 100644 --- a/akka-remote/src/test/scala/akka/remote/artery/RemoteDeathWatchSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/artery/RemoteDeathWatchSpec.scala @@ -6,7 +6,7 @@ package akka.remote.artery import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.ConfigFactory import akka.actor._ @@ -86,7 +86,7 @@ class RemoteDeathWatchSpec val path = RootActorPath(Address("akka", system.name, "unknownhost", 2552)) / "user" / "subject" system.actorOf(Props(new Actor { - @silent + @nowarn val watchee = RARP(context.system).provider.resolveActorRef(path) context.watch(watchee) diff --git a/akka-remote/src/test/scala/akka/remote/artery/RemoteMessageSerializationSpec.scala b/akka-remote/src/test/scala/akka/remote/artery/RemoteMessageSerializationSpec.scala index 7165e386ec..8a97576e44 100644 --- a/akka-remote/src/test/scala/akka/remote/artery/RemoteMessageSerializationSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/artery/RemoteMessageSerializationSpec.scala @@ -8,7 +8,7 @@ import java.io.NotSerializableException import java.util.concurrent.ThreadLocalRandom import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor.{ Actor, ActorRef, Dropped, PoisonPill, Props } import akka.remote.{ AssociationErrorEvent, DisassociatedEvent, OversizedPayloadException, RARP } import akka.testkit.{ EventFilter, ImplicitSender, TestActors, TestProbe } @@ -93,7 +93,7 @@ class RemoteMessageSerializationSpec extends ArteryMultiNodeSpec with ImplicitSe case x => sender() ! x } }), bigBounceId) - @silent + @nowarn val bigBounceHere = RARP(system).provider.resolveActorRef(s"akka://${remoteSystem.name}@localhost:$remotePort/user/$bigBounceId") diff --git a/akka-remote/src/test/scala/akka/remote/classic/ActorsLeakSpec.scala b/akka-remote/src/test/scala/akka/remote/classic/ActorsLeakSpec.scala index a3e468e5b7..45c74f65a8 100644 --- a/akka-remote/src/test/scala/akka/remote/classic/ActorsLeakSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/classic/ActorsLeakSpec.scala @@ -10,7 +10,7 @@ import scala.collection.immutable import scala.concurrent.Await import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.ConfigFactory import akka.actor._ @@ -131,7 +131,7 @@ class ActorsLeakSpec extends AkkaSpec(ActorsLeakSpec.config) with ImplicitSender val beforeQuarantineActors = targets.flatMap(collectLiveActors).toSet // it must not quarantine the current connection - @silent + @nowarn val addressUid = AddressUidExtension(remoteSystem).addressUid + 1 RARP(system).provider.transport.quarantine(remoteAddress, Some(addressUid), "test") diff --git a/akka-remote/src/test/scala/akka/remote/classic/RemoteDeathWatchSpec.scala b/akka-remote/src/test/scala/akka/remote/classic/RemoteDeathWatchSpec.scala index 62f11a4b34..38ce385153 100644 --- a/akka-remote/src/test/scala/akka/remote/classic/RemoteDeathWatchSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/classic/RemoteDeathWatchSpec.scala @@ -6,7 +6,7 @@ package akka.remote.classic import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.ConfigFactory import akka.actor.{ RootActorPath, _ } @@ -14,7 +14,7 @@ import akka.event.Logging.Warning import akka.remote.{ QuarantinedEvent, RARP, RemoteActorRef } import akka.testkit.{ SocketUtil, _ } -@silent // classic deprecated +@nowarn // classic deprecated class RemoteDeathWatchSpec extends AkkaSpec(ConfigFactory.parseString(""" akka { @@ -94,7 +94,7 @@ akka.actor.warn-about-java-serializer-usage = off val path = RootActorPath(Address(protocol, system.name, "unknownhost", 2552)) / "user" / "subject" system.actorOf(Props(new Actor { - @silent + @nowarn val watchee = RARP(context.system).provider.resolveActorRef(path) context.watch(watchee) diff --git a/akka-remote/src/test/scala/akka/remote/classic/RemoteDeploymentAllowListSpec.scala b/akka-remote/src/test/scala/akka/remote/classic/RemoteDeploymentAllowListSpec.scala index a8e0616202..5bde414162 100644 --- a/akka-remote/src/test/scala/akka/remote/classic/RemoteDeploymentAllowListSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/classic/RemoteDeploymentAllowListSpec.scala @@ -5,7 +5,7 @@ package akka.remote.classic import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config._ import akka.actor._ import akka.remote.EndpointException @@ -104,7 +104,7 @@ object RemoteDeploymentAllowListSpec { } } -@silent("deprecated") +@nowarn("msg=deprecated") class RemoteDeploymentAllowListSpec extends AkkaSpec(RemoteDeploymentAllowListSpec.cfg) with ImplicitSender diff --git a/akka-remote/src/test/scala/akka/remote/classic/RemoteSettingsSpec.scala b/akka-remote/src/test/scala/akka/remote/classic/RemoteSettingsSpec.scala index 44d47493ed..c466a94e80 100644 --- a/akka-remote/src/test/scala/akka/remote/classic/RemoteSettingsSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/classic/RemoteSettingsSpec.scala @@ -4,14 +4,14 @@ package akka.remote.classic -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.ConfigFactory import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpec import akka.remote.RemoteSettings -@silent("deprecated") +@nowarn("msg=deprecated") class RemoteSettingsSpec extends AnyWordSpec with Matchers { "Remote settings" must { diff --git a/akka-remote/src/test/scala/akka/remote/classic/RemoteWatcherSpec.scala b/akka-remote/src/test/scala/akka/remote/classic/RemoteWatcherSpec.scala index 08a42472a7..ec026592e7 100644 --- a/akka-remote/src/test/scala/akka/remote/classic/RemoteWatcherSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/classic/RemoteWatcherSpec.scala @@ -7,7 +7,7 @@ package akka.remote.classic import scala.concurrent.duration._ import scala.language.postfixOps -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor._ import akka.remote._ @@ -68,7 +68,7 @@ object RemoteWatcherSpec { } -@silent("deprecated") +@nowarn("msg=deprecated") class RemoteWatcherSpec extends AkkaSpec(""" akka { loglevel = INFO @@ -93,7 +93,7 @@ class RemoteWatcherSpec extends AkkaSpec(""" val remoteSystem = ActorSystem("RemoteSystem", system.settings.config) val remoteAddress = remoteSystem.asInstanceOf[ExtendedActorSystem].provider.getDefaultAddress - @silent + @nowarn def remoteAddressUid = AddressUidExtension(remoteSystem).addressUid Seq(system, remoteSystem).foreach( diff --git a/akka-remote/src/test/scala/akka/remote/classic/RemotingSpec.scala b/akka-remote/src/test/scala/akka/remote/classic/RemotingSpec.scala index 50f5ebe74b..fb10fa2c5e 100644 --- a/akka-remote/src/test/scala/akka/remote/classic/RemotingSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/classic/RemotingSpec.scala @@ -11,7 +11,7 @@ import scala.concurrent.{ Await, Future } import scala.concurrent.duration._ import scala.util.control.NonFatal -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config._ import akka.actor._ @@ -134,7 +134,7 @@ object RemotingSpec { } } -@silent +@nowarn class RemotingSpec extends AkkaSpec(RemotingSpec.cfg) with ImplicitSender with DefaultTimeout { import RemotingSpec._ diff --git a/akka-remote/src/test/scala/akka/remote/classic/transport/AkkaProtocolSpec.scala b/akka-remote/src/test/scala/akka/remote/classic/transport/AkkaProtocolSpec.scala index 3eb5428009..cf4def7dfb 100644 --- a/akka-remote/src/test/scala/akka/remote/classic/transport/AkkaProtocolSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/classic/transport/AkkaProtocolSpec.scala @@ -9,7 +9,7 @@ import java.util.concurrent.TimeoutException import scala.concurrent.{ Await, Promise } import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.ConfigFactory import akka.actor.Address @@ -44,7 +44,7 @@ object AkkaProtocolSpec { } -@silent("deprecated") +@nowarn("msg=deprecated") class AkkaProtocolSpec extends AkkaSpec("""akka.actor.provider = remote """) with ImplicitSender { val conf = ConfigFactory.parseString(""" diff --git a/akka-remote/src/test/scala/akka/remote/classic/transport/GenericTransportSpec.scala b/akka-remote/src/test/scala/akka/remote/classic/transport/GenericTransportSpec.scala index 2902bb632f..af5827915a 100644 --- a/akka-remote/src/test/scala/akka/remote/classic/transport/GenericTransportSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/classic/transport/GenericTransportSpec.scala @@ -6,7 +6,7 @@ package akka.remote.classic.transport import scala.concurrent.{ Await, Future } -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor.{ Address, ExtendedActorSystem } import akka.remote.RemoteActorRefProvider @@ -17,7 +17,7 @@ import akka.remote.transport.Transport._ import akka.testkit.{ AkkaSpec, DefaultTimeout, ImplicitSender } import akka.util.ByteString -@silent("deprecated") +@nowarn("msg=deprecated") abstract class GenericTransportSpec(withAkkaProtocol: Boolean = false) extends AkkaSpec(""" akka.remote.artery.enabled = false diff --git a/akka-remote/src/test/scala/akka/remote/classic/transport/SystemMessageDeliveryStressTest.scala b/akka-remote/src/test/scala/akka/remote/classic/transport/SystemMessageDeliveryStressTest.scala index 817886e20c..5d6120702f 100644 --- a/akka-remote/src/test/scala/akka/remote/classic/transport/SystemMessageDeliveryStressTest.scala +++ b/akka-remote/src/test/scala/akka/remote/classic/transport/SystemMessageDeliveryStressTest.scala @@ -7,7 +7,7 @@ package akka.remote.classic.transport import scala.concurrent.Await import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.{ Config, ConfigFactory } import akka.actor.{ Actor, ActorRef, ActorSystem, ExtendedActorSystem, Props, RootActorPath, _ } @@ -102,7 +102,7 @@ object SystemMessageDeliveryStressTest { } -@silent("deprecated") +@nowarn("msg=deprecated") abstract class SystemMessageDeliveryStressTest(msg: String, cfg: String) extends AkkaSpec(ConfigFactory.parseString(cfg).withFallback(SystemMessageDeliveryStressTest.baseConfig)) with ImplicitSender diff --git a/akka-remote/src/test/scala/akka/remote/classic/transport/TestTransportSpec.scala b/akka-remote/src/test/scala/akka/remote/classic/transport/TestTransportSpec.scala index 9af3e149ca..c89df82deb 100644 --- a/akka-remote/src/test/scala/akka/remote/classic/transport/TestTransportSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/classic/transport/TestTransportSpec.scala @@ -6,7 +6,7 @@ package akka.remote.classic.transport import scala.concurrent._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor.Address import akka.remote.transport.{ AssociationHandle, TestTransport } @@ -16,7 +16,7 @@ import akka.remote.transport.Transport._ import akka.testkit._ import akka.util.ByteString -@silent("deprecated") +@nowarn("msg=deprecated") class TestTransportSpec extends AkkaSpec with DefaultTimeout with ImplicitSender { val addressA: Address = Address("test", "testsytemA", "testhostA", 4321) diff --git a/akka-remote/src/test/scala/akka/remote/classic/transport/ThrottlerTransportAdapterSpec.scala b/akka-remote/src/test/scala/akka/remote/classic/transport/ThrottlerTransportAdapterSpec.scala index ddd5298404..8589811f02 100644 --- a/akka-remote/src/test/scala/akka/remote/classic/transport/ThrottlerTransportAdapterSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/classic/transport/ThrottlerTransportAdapterSpec.scala @@ -7,7 +7,7 @@ package akka.remote.classic.transport import scala.concurrent.Await import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.{ Config, ConfigFactory } import akka.actor._ @@ -74,7 +74,7 @@ object ThrottlerTransportAdapterSpec { final case class Lost(msg: String) } -@silent("deprecated") +@nowarn("msg=deprecated") class ThrottlerTransportAdapterSpec extends AkkaSpec(configA) with ImplicitSender with DefaultTimeout { val systemB = ActorSystem("systemB", system.settings.config) @@ -161,7 +161,7 @@ class ThrottlerTransportAdapterSpec extends AkkaSpec(configA) with ImplicitSende override def afterTermination(): Unit = shutdown(systemB) } -@silent("deprecated") +@nowarn("msg=deprecated") class ThrottlerTransportAdapterGenericSpec extends GenericTransportSpec(withAkkaProtocol = true) { def transportName = "ThrottlerTransportAdapter" diff --git a/akka-serialization-jackson/src/test/scala/akka/serialization/jackson/JacksonSerializerSpec.scala b/akka-serialization-jackson/src/test/scala/akka/serialization/jackson/JacksonSerializerSpec.scala index 600f73b4d8..f564594389 100644 --- a/akka-serialization-jackson/src/test/scala/akka/serialization/jackson/JacksonSerializerSpec.scala +++ b/akka-serialization-jackson/src/test/scala/akka/serialization/jackson/JacksonSerializerSpec.scala @@ -40,7 +40,7 @@ import com.fasterxml.jackson.databind.exc.InvalidTypeIdException import com.fasterxml.jackson.databind.json.JsonMapper import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule import com.fasterxml.jackson.module.scala.JsonScalaEnumeration -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.ConfigFactory import org.scalatest.BeforeAndAfterAll import org.scalatest.matchers.should.Matchers @@ -164,7 +164,7 @@ class JacksonCborSerializerSpec extends JacksonSerializerSpec("jackson-cbor") { } } -@silent // this test uses Jackson deprecated APIs +@nowarn // this test uses Jackson deprecated APIs class JacksonJsonSerializerSpec extends JacksonSerializerSpec("jackson-json") { def serializeToJsonString(obj: AnyRef, sys: ActorSystem = system): String = { diff --git a/akka-stream-testkit/src/main/scala/akka/stream/testkit/scaladsl/StreamTestKit.scala b/akka-stream-testkit/src/main/scala/akka/stream/testkit/scaladsl/StreamTestKit.scala index ab7b881205..c631897feb 100644 --- a/akka-stream-testkit/src/main/scala/akka/stream/testkit/scaladsl/StreamTestKit.scala +++ b/akka-stream-testkit/src/main/scala/akka/stream/testkit/scaladsl/StreamTestKit.scala @@ -102,7 +102,7 @@ object StreamTestKit { .append(logic.attributes.attributeList.mkString(", ")) .append("],\n") } - builder.setLength(builder.length() - 2) + builder.setLength(builder.length - 2) shell match { case running: RunningInterpreter => builder.append("\n ],\n connections: [\n") @@ -119,7 +119,7 @@ object StreamTestKit { .append(connection.state) .append(")\n") } - builder.setLength(builder.length() - 2) + builder.setLength(builder.length - 2) case _ => } diff --git a/akka-stream-testkit/src/test/scala/akka/stream/impl/fusing/GraphInterpreterSpecKit.scala b/akka-stream-testkit/src/test/scala/akka/stream/impl/fusing/GraphInterpreterSpecKit.scala index f2b070f5ad..1a090f1ba0 100644 --- a/akka-stream-testkit/src/test/scala/akka/stream/impl/fusing/GraphInterpreterSpecKit.scala +++ b/akka-stream-testkit/src/test/scala/akka/stream/impl/fusing/GraphInterpreterSpecKit.scala @@ -8,7 +8,7 @@ import scala.collection.{ Map => SMap } import scala.concurrent.ExecutionContextExecutor import scala.concurrent.duration.FiniteDuration -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor.ActorSystem import akka.actor.Cancellable @@ -79,7 +79,7 @@ private[akka] object NoMaterializer extends Materializer { throw new UnsupportedOperationException("NoMaterializer does not have settings") } -@silent +@nowarn object GraphInterpreterSpecKit { /** @@ -101,7 +101,7 @@ object GraphInterpreterSpecKit { if (attributes.nonEmpty && attributes.length != stages.length) throw new IllegalArgumentException("Attributes must be either empty or one per stage") - @silent("deprecated") + @nowarn("msg=deprecated") val defaultAttributes = ActorMaterializerSettings(system).toAttributes var inOwners = SMap.empty[Inlet[_], GraphStageLogic] @@ -251,7 +251,7 @@ trait GraphInterpreterSpecKit extends StreamSpec { import GraphInterpreterSpecKit._ val logger = Logging(system, "InterpreterSpecKit") - @silent("deprecated") + @nowarn("msg=deprecated") val defaultAttributes = ActorMaterializerSettings(system).toAttributes abstract class Builder { diff --git a/akka-stream-testkit/src/test/scala/akka/stream/testkit/ChainSetup.scala b/akka-stream-testkit/src/test/scala/akka/stream/testkit/ChainSetup.scala index 88376e9d3f..790ec1f333 100644 --- a/akka-stream-testkit/src/test/scala/akka/stream/testkit/ChainSetup.scala +++ b/akka-stream-testkit/src/test/scala/akka/stream/testkit/ChainSetup.scala @@ -4,7 +4,7 @@ package akka.stream.testkit -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import org.reactivestreams.Publisher import akka.NotUsed @@ -21,14 +21,14 @@ class ChainSetup[In, Out, M]( materializer: Materializer, toPublisher: (Source[Out, _], Materializer) => Publisher[Out])(implicit val system: ActorSystem) { - @silent("deprecated") + @nowarn("msg=deprecated") def this( stream: Flow[In, In, NotUsed] => Flow[In, Out, M], settings: ActorMaterializerSettings, toPublisher: (Source[Out, _], Materializer) => Publisher[Out])(implicit system: ActorSystem) = this(stream, settings, ActorMaterializer(settings)(system), toPublisher)(system) - @silent("deprecated") + @nowarn("msg=deprecated") def this( stream: Flow[In, In, NotUsed] => Flow[In, Out, M], settings: ActorMaterializerSettings, diff --git a/akka-stream-testkit/src/test/scala/akka/stream/testkit/ScriptedTest.scala b/akka-stream-testkit/src/test/scala/akka/stream/testkit/ScriptedTest.scala index 54cf16086f..c3c3531523 100644 --- a/akka-stream-testkit/src/test/scala/akka/stream/testkit/ScriptedTest.scala +++ b/akka-stream-testkit/src/test/scala/akka/stream/testkit/ScriptedTest.scala @@ -9,7 +9,7 @@ import java.util.concurrent.ThreadLocalRandom import scala.annotation.tailrec import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import org.reactivestreams.Publisher import org.scalatest.matchers.should.Matchers @@ -235,7 +235,7 @@ trait ScriptedTest extends Matchers { } - @silent("deprecated") + @nowarn("msg=deprecated") def runScript[In, Out, M](script: Script[In, Out])(op: Flow[In, In, NotUsed] => Flow[In, Out, M])( implicit system: ActorSystem): Unit = runScript(script, SystemMaterializer(system).materializer.settings)(op)(system) diff --git a/akka-stream-tests/src/test/scala/akka/stream/ActorMaterializerSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/ActorMaterializerSpec.scala index 606addde07..2dd1fc22fe 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/ActorMaterializerSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/ActorMaterializerSpec.scala @@ -9,7 +9,7 @@ import scala.concurrent.Future import scala.concurrent.duration._ import scala.util.{ Failure, Try } -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.ConfigFactory import akka.Done @@ -32,7 +32,7 @@ object IndirectMaterializerCreation extends ExtensionId[IndirectMaterializerCrea def lookup: ExtensionId[IndirectMaterializerCreation] = this } -@silent +@nowarn class IndirectMaterializerCreation(ex: ExtendedActorSystem) extends Extension { // extension instantiation blocked on materializer (which has Await.result inside) implicit val mat: ActorMaterializer = ActorMaterializer()(ex) @@ -43,7 +43,7 @@ class IndirectMaterializerCreation(ex: ExtendedActorSystem) extends Extension { } -@silent +@nowarn class ActorMaterializerSpec extends StreamSpec with ImplicitSender { "ActorMaterializer" must { @@ -157,7 +157,7 @@ class ActorMaterializerSpec extends StreamSpec with ImplicitSender { object ActorMaterializerSpec { - @silent("deprecated") + @nowarn("msg=deprecated") class ActorWithMaterializer(p: TestProbe) extends Actor { private val settings: ActorMaterializerSettings = ActorMaterializerSettings(context.system).withDispatcher("akka.test.stream-dispatcher") diff --git a/akka-stream-tests/src/test/scala/akka/stream/impl/FixedBufferSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/impl/FixedBufferSpec.scala index bea0b9b108..2e95f1e56a 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/impl/FixedBufferSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/impl/FixedBufferSpec.scala @@ -4,14 +4,14 @@ package akka.stream.impl -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.stream.ActorAttributes import akka.stream.ActorAttributes.MaxFixedBufferSize import akka.stream.ActorMaterializerSettings import akka.stream.testkit.StreamSpec -@silent("deprecated") +@nowarn("msg=deprecated") class FixedBufferSpec extends StreamSpec { for (size <- List(1, 3, 4)) { diff --git a/akka-stream-tests/src/test/scala/akka/stream/impl/fusing/InterpreterSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/impl/fusing/InterpreterSpec.scala index e2d8b84e43..c7c8475704 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/impl/fusing/InterpreterSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/impl/fusing/InterpreterSpec.scala @@ -4,7 +4,7 @@ package akka.stream.impl.fusing -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.stream._ import akka.stream.impl.fusing.GraphStages.SimpleLinearGraphStage @@ -536,7 +536,7 @@ class InterpreterSpec extends StreamSpec with GraphInterpreterSpecKit { } - @silent + @nowarn private[akka] final case class Doubler[T]() extends SimpleLinearGraphStage[T] { override def createLogic(inheritedAttributes: Attributes): GraphStageLogic = @@ -568,7 +568,7 @@ class InterpreterSpec extends StreamSpec with GraphInterpreterSpecKit { } - @silent + @nowarn private[akka] final case class KeepGoing[T]() extends SimpleLinearGraphStage[T] { override def createLogic(inheritedAttributes: Attributes): GraphStageLogic = diff --git a/akka-stream-tests/src/test/scala/akka/stream/io/DeprecatedTlsSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/io/DeprecatedTlsSpec.scala index 106f43cb1b..679513fb3e 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/io/DeprecatedTlsSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/io/DeprecatedTlsSpec.scala @@ -16,7 +16,7 @@ import scala.concurrent.Future import scala.concurrent.duration._ import scala.util.Random -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.sslconfig.akka.AkkaSSLConfig import akka.NotUsed @@ -97,7 +97,7 @@ object DeprecatedTlsSpec { """ } -@silent("deprecated") +@nowarn("msg=deprecated") class DeprecatedTlsSpec extends StreamSpec(DeprecatedTlsSpec.configOverrides) with WithLogCapturing { import DeprecatedTlsSpec._ import GraphDSL.Implicits._ diff --git a/akka-stream-tests/src/test/scala/akka/stream/io/FileSinkSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/io/FileSinkSpec.scala index 961a8c9f0c..3ec21d91e7 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/io/FileSinkSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/io/FileSinkSpec.scala @@ -12,7 +12,7 @@ import scala.concurrent.{ Await, Future } import scala.concurrent.duration._ import scala.util.Success -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.google.common.jimfs.{ Configuration, Jimfs } import org.scalatest.concurrent.ScalaFutures @@ -26,7 +26,7 @@ import akka.stream.testkit.Utils._ import akka.stream.testkit.scaladsl.StreamTestKit._ import akka.util.ByteString -@silent +@nowarn class FileSinkSpec extends StreamSpec(UnboundedMailboxConfig) with ScalaFutures { val settings = ActorMaterializerSettings(system).withDispatcher("akka.actor.default-dispatcher") diff --git a/akka-stream-tests/src/test/scala/akka/stream/io/FileSourceSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/io/FileSourceSpec.scala index a086a1ea2f..fa9cda7ef2 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/io/FileSourceSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/io/FileSourceSpec.scala @@ -11,7 +11,7 @@ import java.util.Random import scala.concurrent.Future import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.google.common.jimfs.{ Configuration, Jimfs } import akka.actor.ActorSystem @@ -31,7 +31,7 @@ object FileSourceSpec { final case class Settings(chunkSize: Int, readAhead: Int) } -@silent +@nowarn class FileSourceSpec extends StreamSpec(UnboundedMailboxConfig) { val settings = ActorMaterializerSettings(system).withDispatcher("akka.actor.default-dispatcher") diff --git a/akka-stream-tests/src/test/scala/akka/stream/io/InputStreamSourceSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/io/InputStreamSourceSpec.scala index bf805a3cf3..f2f34f7e52 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/io/InputStreamSourceSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/io/InputStreamSourceSpec.scala @@ -9,7 +9,7 @@ import java.util.concurrent.CountDownLatch import scala.util.Success -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.Done import akka.stream.{ AbruptStageTerminationException, ActorMaterializer, ActorMaterializerSettings, IOResult } @@ -20,7 +20,7 @@ import akka.stream.testkit.scaladsl.StreamTestKit._ import akka.stream.testkit.scaladsl.TestSink import akka.util.ByteString -@silent +@nowarn class InputStreamSourceSpec extends StreamSpec(UnboundedMailboxConfig) { val settings = ActorMaterializerSettings(system).withDispatcher("akka.actor.default-dispatcher") diff --git a/akka-stream-tests/src/test/scala/akka/stream/io/OutputStreamSinkSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/io/OutputStreamSinkSpec.scala index ea984fb240..11dd9f1f93 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/io/OutputStreamSinkSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/io/OutputStreamSinkSpec.scala @@ -8,7 +8,7 @@ import java.io.OutputStream import scala.util.Success -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import org.scalatest.concurrent.ScalaFutures import akka.Done @@ -20,7 +20,7 @@ import akka.stream.testkit.scaladsl.StreamTestKit._ import akka.testkit.TestProbe import akka.util.ByteString -@silent +@nowarn class OutputStreamSinkSpec extends StreamSpec(UnboundedMailboxConfig) with ScalaFutures { val settings = ActorMaterializerSettings(system).withDispatcher("akka.actor.default-dispatcher") diff --git a/akka-stream-tests/src/test/scala/akka/stream/io/TcpSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/io/TcpSpec.scala index 118633731d..c0bc7285ac 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/io/TcpSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/io/TcpSpec.scala @@ -15,7 +15,7 @@ import scala.concurrent.Future import scala.concurrent.Promise import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.Config import com.typesafe.config.ConfigFactory import org.scalatest.concurrent.PatienceConfiguration @@ -50,7 +50,7 @@ import akka.testkit.TestProbe import akka.testkit.WithLogCapturing import akka.util.ByteString -@silent("never used") +@nowarn("msg=never used") class NonResolvingDnsActor(cache: SimpleDnsCache, config: Config) extends Actor { def receive = { case msg => @@ -58,7 +58,7 @@ class NonResolvingDnsActor(cache: SimpleDnsCache, config: Config) extends Actor } } -@silent("never used") +@nowarn("msg=never used") class NonResolvingDnsManager(ext: akka.io.DnsExt) extends Actor { def receive = { @@ -67,7 +67,7 @@ class NonResolvingDnsManager(ext: akka.io.DnsExt) extends Actor { } } -@silent("deprecated") +@nowarn("msg=deprecated") class FailingDnsResolver extends DnsProvider { override val cache: Dns = new Dns { override def cached(name: String): Option[Dns.Resolved] = None @@ -968,7 +968,7 @@ class TcpSpec extends StreamSpec(""" test() } - @silent("deprecated") + @nowarn("msg=deprecated") def test(): Unit = { // cert is valid until 2025, so if this tests starts failing after that you need to create a new one val (sslContext, firstSession) = initSslMess() @@ -1004,7 +1004,7 @@ class TcpSpec extends StreamSpec(""" result.futureValue(PatienceConfiguration.Timeout(10.seconds)) should ===("hello") } - @silent("deprecated") + @nowarn("msg=deprecated") def initSslMess() = { // #setting-up-ssl-context import java.security.KeyStore diff --git a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/AttributesSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/AttributesSpec.scala index 4057a14f47..60f7b0dec8 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/AttributesSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/AttributesSpec.scala @@ -6,7 +6,7 @@ package akka.stream.scaladsl import java.util.concurrent.{ CompletionStage, TimeUnit } -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.ConfigFactory import akka.{ Done, NotUsed } @@ -104,7 +104,7 @@ object AttributesSpec { case class WhateverAttribute(label: String) extends Attribute } -@silent // tests deprecated APIs +@nowarn // tests deprecated APIs class AttributesSpec extends StreamSpec( ConfigFactory diff --git a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/BidiFlowSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/BidiFlowSpec.scala index 6fae23be0c..75449a3cd9 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/BidiFlowSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/BidiFlowSpec.scala @@ -8,7 +8,7 @@ import scala.collection.immutable import scala.concurrent.Await import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.NotUsed import akka.stream._ @@ -16,7 +16,7 @@ import akka.stream.testkit.StreamSpec import akka.stream.testkit.scaladsl.StreamTestKit._ import akka.util.ByteString -@silent // tests deprecated APIs +@nowarn // tests deprecated APIs class BidiFlowSpec extends StreamSpec { import Attributes._ import GraphDSL.Implicits._ diff --git a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowCompileSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowCompileSpec.scala index 95b54eb32a..7b29cab6db 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowCompileSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowCompileSpec.scala @@ -7,13 +7,13 @@ package akka.stream.scaladsl import scala.collection.immutable.Seq import scala.concurrent.Future -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import org.reactivestreams.Publisher import akka.NotUsed import akka.stream.testkit.StreamSpec -@silent // unused vars are used in shouldNot compile tests +@nowarn // unused vars are used in shouldNot compile tests class FlowCompileSpec extends StreamSpec { val intSeq = Source(Seq(1, 2, 3)) diff --git a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowDispatcherSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowDispatcherSpec.scala index a1323b1891..76b01c6857 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowDispatcherSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowDispatcherSpec.scala @@ -4,14 +4,14 @@ package akka.stream.scaladsl -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.stream.ActorMaterializer import akka.stream.ActorMaterializerSettings import akka.stream.testkit.StreamSpec import akka.testkit.TestProbe -@silent("deprecated") +@nowarn("msg=deprecated") class FlowDispatcherSpec extends StreamSpec(s"my-dispatcher = $${akka.test.stream-dispatcher}") { val defaultSettings = ActorMaterializerSettings(system) diff --git a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowFromFutureSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowFromFutureSpec.scala index 7ff467c163..a1263d9edc 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowFromFutureSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowFromFutureSpec.scala @@ -9,12 +9,12 @@ import scala.concurrent.Promise import scala.concurrent.duration._ import scala.util.control.NoStackTrace -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.stream.testkit._ import akka.stream.testkit.scaladsl.StreamTestKit._ -@silent("deprecated") // testing deprecated API +@nowarn("msg=deprecated") // testing deprecated API class FlowFromFutureSpec extends StreamSpec { "A Flow based on a Future" must { diff --git a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowPrefixAndTailSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowPrefixAndTailSpec.scala index a42ac62eb4..47a238d2c1 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowPrefixAndTailSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowPrefixAndTailSpec.scala @@ -9,7 +9,7 @@ import scala.concurrent.Await import scala.concurrent.duration._ import scala.util.control.NoStackTrace -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.stream._ import akka.stream.testkit._ @@ -116,7 +116,7 @@ class FlowPrefixAndTailSpec extends StreamSpec(""" "signal error if substream has been not subscribed in time" in assertAllStagesStopped { val ms = 300 - @silent("deprecated") + @nowarn("msg=deprecated") val tightTimeoutMaterializer = ActorMaterializer( ActorMaterializerSettings(system).withSubscriptionTimeoutSettings( @@ -135,7 +135,7 @@ class FlowPrefixAndTailSpec extends StreamSpec(""" s"Substream Source(TailSource) has not been materialized in ${ms} milliseconds") } "not fail the stream if substream has not been subscribed in time and configured subscription timeout is noop" in assertAllStagesStopped { - @silent("deprecated") + @nowarn("msg=deprecated") val tightTimeoutMaterializer = ActorMaterializer( ActorMaterializerSettings(system).withSubscriptionTimeoutSettings( diff --git a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowPrependSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowPrependSpec.scala index 761d6c97ca..5a0509990b 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowPrependSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowPrependSpec.scala @@ -5,9 +5,9 @@ package akka.stream.scaladsl import akka.testkit.AkkaSpec -import com.github.ghik.silencer.silent +import scala.annotation.nowarn -@silent // for keeping imports +@nowarn // for keeping imports class FlowPrependSpec extends AkkaSpec { //#prepend diff --git a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowRecoverWithSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowRecoverWithSpec.scala index 2a18bd8543..c2d50006e1 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowRecoverWithSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowRecoverWithSpec.scala @@ -6,7 +6,7 @@ package akka.stream.scaladsl import scala.util.control.NoStackTrace -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.stream._ import akka.stream.stage.{ GraphStage, GraphStageLogic } @@ -15,7 +15,7 @@ import akka.stream.testkit.Utils._ import akka.stream.testkit.scaladsl.StreamTestKit._ import akka.stream.testkit.scaladsl.TestSink -@silent // tests deprecated APIs +@nowarn // tests deprecated APIs class FlowRecoverWithSpec extends StreamSpec { val settings = ActorMaterializerSettings(system).withInputBuffer(initialSize = 1, maxSize = 1) diff --git a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowSlidingSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowSlidingSpec.scala index 91c69dd053..eb7e29538e 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowSlidingSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowSlidingSpec.scala @@ -4,7 +4,7 @@ package akka.stream.scaladsl -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import org.scalacheck.Gen import org.scalatestplus.scalacheck.ScalaCheckPropertyChecks @@ -13,7 +13,7 @@ import akka.stream.{ ActorMaterializer, ActorMaterializerSettings } import akka.stream.testkit._ import akka.stream.testkit.scaladsl.StreamTestKit._ -@silent +@nowarn class FlowSlidingSpec extends StreamSpec with ScalaCheckPropertyChecks { import system.dispatcher val settings = ActorMaterializerSettings(system).withInputBuffer(initialSize = 2, maxSize = 16) diff --git a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowSpec.scala index cf2bab2001..443b073000 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowSpec.scala @@ -11,7 +11,7 @@ import scala.concurrent.Await import scala.concurrent.duration._ import scala.util.control.NoStackTrace -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.ConfigFactory import org.reactivestreams.{ Publisher, Subscriber } @@ -35,7 +35,7 @@ object FlowSpec { } -@silent // tests type assignments compile +@nowarn // tests type assignments compile class FlowSpec extends StreamSpec(ConfigFactory.parseString("akka.actor.debug.receive=off\nakka.loglevel=INFO")) { import FlowSpec._ diff --git a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowZipSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowZipSpec.scala index a366d2efa7..e3d7acec73 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowZipSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowZipSpec.scala @@ -6,10 +6,10 @@ package akka.stream.scaladsl import akka.stream.testkit.scaladsl.StreamTestKit._ import akka.stream.testkit.{ BaseTwoStreamsSetup, TestSubscriber } -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import org.reactivestreams.Publisher -@silent // keep unused imports +@nowarn // keep unused imports class FlowZipSpec extends BaseTwoStreamsSetup { //#zip diff --git a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowZipWithIndexSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowZipWithIndexSpec.scala index 084a86f488..2974b0d2c3 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowZipWithIndexSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowZipWithIndexSpec.scala @@ -7,9 +7,9 @@ package akka.stream.scaladsl import akka.stream.testkit.scaladsl.StreamTestKit._ import akka.stream.{ ActorMaterializer, ActorMaterializerSettings, Materializer } import akka.stream.testkit.{ StreamSpec, TestSubscriber } -import com.github.ghik.silencer.silent +import scala.annotation.nowarn -@silent // keep unused imports +@nowarn // keep unused imports class FlowZipWithIndexSpec extends StreamSpec { //#zip-with-index diff --git a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowZipWithSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowZipWithSpec.scala index 3ec35ed72e..8a4d41f9ea 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowZipWithSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/FlowZipWithSpec.scala @@ -9,9 +9,9 @@ import org.reactivestreams.Publisher import scala.concurrent.duration._ import akka.testkit.EventFilter -import com.github.ghik.silencer.silent +import scala.annotation.nowarn -@silent // keep unused imports +@nowarn // keep unused imports class FlowZipWithSpec extends BaseTwoStreamsSetup { //#zip-with diff --git a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/GraphBackedFlowSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/GraphBackedFlowSpec.scala index dce4746219..42ce1c6401 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/GraphBackedFlowSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/GraphBackedFlowSpec.scala @@ -4,7 +4,7 @@ package akka.stream.scaladsl -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import org.reactivestreams.Subscriber import akka.stream._ @@ -38,7 +38,7 @@ object GraphFlowSpec { val stdResult = Set(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) } -@silent +@nowarn class GraphFlowSpec extends StreamSpec { import GraphFlowSpec._ diff --git a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/GraphDSLCompileSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/GraphDSLCompileSpec.scala index 471baeb708..880878db22 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/GraphDSLCompileSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/GraphDSLCompileSpec.scala @@ -4,7 +4,7 @@ package akka.stream.scaladsl -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.NotUsed import akka.stream._ @@ -17,7 +17,7 @@ object GraphDSLCompileSpec { class Apple extends Fruit } -@silent // tests deprecated APIs +@nowarn // tests deprecated APIs class GraphDSLCompileSpec extends StreamSpec { import GraphDSLCompileSpec._ diff --git a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/GraphMergePreferredSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/GraphMergePreferredSpec.scala index 484c681488..9f0e35095c 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/GraphMergePreferredSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/GraphMergePreferredSpec.scala @@ -7,12 +7,12 @@ package akka.stream.scaladsl import scala.concurrent.Await import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.stream._ import akka.stream.testkit.TwoStreamsSetup -@silent // stream usage +@nowarn // stream usage class GraphMergePreferredSpec extends TwoStreamsSetup { import GraphDSL.Implicits._ diff --git a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/GraphMergeSortedSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/GraphMergeSortedSpec.scala index 4dd6ebe177..9f4f612d91 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/GraphMergeSortedSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/GraphMergeSortedSpec.scala @@ -4,7 +4,7 @@ package akka.stream.scaladsl -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import org.scalacheck.Gen import org.scalacheck.Shrink import org.scalatestplus.scalacheck.ScalaCheckPropertyChecks @@ -12,7 +12,7 @@ import org.scalatestplus.scalacheck.ScalaCheckPropertyChecks import akka.stream._ import akka.stream.testkit.TwoStreamsSetup -@silent // tests deprecated apis +@nowarn // tests deprecated apis class GraphMergeSortedSpec extends TwoStreamsSetup with ScalaCheckPropertyChecks { override type Outputs = Int diff --git a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/LazilyAsyncSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/LazilyAsyncSpec.scala index fdf0a5b62b..6f35aed689 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/LazilyAsyncSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/LazilyAsyncSpec.scala @@ -8,7 +8,7 @@ import java.util.concurrent.atomic.AtomicBoolean import scala.concurrent.Future -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import org.scalatest.concurrent.ScalaFutures import akka.Done @@ -17,7 +17,7 @@ import akka.stream.testkit.TestSubscriber import akka.stream.testkit.scaladsl.StreamTestKit._ import akka.testkit.DefaultTimeout -@silent("deprecated") // tests deprecated methods +@nowarn("msg=deprecated") // tests deprecated methods class LazilyAsyncSpec extends StreamSpec with DefaultTimeout with ScalaFutures { import system.dispatcher diff --git a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/LazyFlowSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/LazyFlowSpec.scala index d20ec5bf23..e44a5cfc65 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/LazyFlowSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/LazyFlowSpec.scala @@ -8,7 +8,7 @@ import scala.collection.immutable import scala.concurrent.Future import scala.concurrent.Promise import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.{ Done, NotUsed } import akka.stream.AbruptStageTerminationException import akka.stream.Materializer @@ -21,7 +21,7 @@ import akka.stream.testkit.scaladsl.TestSink import akka.stream.testkit.scaladsl.TestSource import akka.testkit.TestProbe -@silent("deprecated") // tests deprecated API as well +@nowarn("msg=deprecated") // tests deprecated API as well class LazyFlowSpec extends StreamSpec(""" akka.stream.materializer.initial-input-buffer-size = 1 akka.stream.materializer.max-input-buffer-size = 1 diff --git a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/LazySinkSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/LazySinkSpec.scala index 87fa0dbd27..08dab96974 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/LazySinkSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/LazySinkSpec.scala @@ -12,7 +12,7 @@ import scala.concurrent.Future import scala.concurrent.Promise import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.NotUsed import akka.stream._ @@ -25,7 +25,7 @@ import akka.stream.testkit.Utils._ import akka.stream.testkit.scaladsl.StreamTestKit._ import akka.stream.testkit.scaladsl.TestSink -@silent("deprecated") +@nowarn("msg=deprecated") class LazySinkSpec extends StreamSpec(""" akka.stream.materializer.initial-input-buffer-size = 1 akka.stream.materializer.max-input-buffer-size = 1 diff --git a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/SetupSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/SetupSpec.scala index a2d87ae29c..61dea1deb8 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/SetupSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/SetupSpec.scala @@ -4,12 +4,12 @@ package akka.stream.scaladsl -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.NotUsed import akka.stream.testkit.StreamSpec -@silent("deprecated") +@nowarn("msg=deprecated") class SetupSpec extends StreamSpec { import system.dispatcher diff --git a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/SinkForeachParallelSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/SinkForeachParallelSpec.scala index 8cdedb4b7f..d01be4f27a 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/SinkForeachParallelSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/SinkForeachParallelSpec.scala @@ -11,7 +11,7 @@ import scala.concurrent.Await import scala.concurrent.duration._ import scala.util.control.NoStackTrace -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.stream.ActorAttributes._ import akka.stream.Supervision._ @@ -20,7 +20,7 @@ import akka.stream.testkit.scaladsl.StreamTestKit._ import akka.testkit.TestLatch import akka.testkit.TestProbe -@silent // tests deprecated APIs +@nowarn // tests deprecated APIs class SinkForeachParallelSpec extends StreamSpec { "A ForeachParallel" must { diff --git a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/SinkSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/SinkSpec.scala index d2ab4a510d..d0a91b6c62 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/SinkSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/SinkSpec.scala @@ -7,7 +7,7 @@ package akka.stream.scaladsl import scala.concurrent.{ Await, Future } import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import org.reactivestreams.Publisher import org.scalatest.concurrent.ScalaFutures @@ -154,7 +154,7 @@ class SinkSpec extends StreamSpec with DefaultTimeout with ScalaFutures { val s: Sink[Int, Future[Int]] = Sink.head[Int].async.addAttributes(none).named("name") s.traversalBuilder.attributes.filtered[Name] shouldEqual List(Name("name"), Name("headSink")) - @silent("deprecated") + @nowarn("msg=deprecated") val res = s.traversalBuilder.attributes.getFirst[Attributes.AsyncBoundary.type] res shouldEqual (Some(AsyncBoundary)) } @@ -177,7 +177,7 @@ class SinkSpec extends StreamSpec with DefaultTimeout with ScalaFutures { import Attributes._ val s: Sink[Int, Future[Int]] = Sink.head[Int].withAttributes(none).async - @silent("deprecated") + @nowarn("msg=deprecated") val res = s.traversalBuilder.attributes.getFirst[Name](Name("default")) res shouldEqual Name("default") } @@ -192,7 +192,7 @@ class SinkSpec extends StreamSpec with DefaultTimeout with ScalaFutures { "given multiple attributes of a class when getting first attribute with default value should get first attribute" in { import Attributes._ val s: Sink[Int, Future[Int]] = Sink.head[Int].withAttributes(none).async.named("name").named("another_name") - @silent("deprecated") + @nowarn("msg=deprecated") val res = s.traversalBuilder.attributes.getFirst[Name](Name("default")) res shouldEqual Name("name") } @@ -212,7 +212,7 @@ class SinkSpec extends StreamSpec with DefaultTimeout with ScalaFutures { "The ignore sink" should { "fail its materialized value on abrupt materializer termination" in { - @silent("deprecated") + @nowarn("msg=deprecated") val mat = ActorMaterializer() val matVal = Source.maybe[Int].runWith(Sink.ignore)(mat) diff --git a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/SourceSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/SourceSpec.scala index c45c202d61..38c133abaa 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/SourceSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/SourceSpec.scala @@ -7,7 +7,7 @@ package akka.stream.scaladsl import akka.Done import akka.stream.testkit.Utils.TE import akka.testkit.DefaultTimeout -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import org.scalatest.time.Millis import org.scalatest.time.Span @@ -23,7 +23,7 @@ import akka.testkit.EventFilter import scala.collection.immutable -@silent // tests assigning to typed val +@nowarn // tests assigning to typed val class SourceSpec extends StreamSpec with DefaultTimeout { implicit val config: PatienceConfig = PatienceConfig(timeout = Span(timeout.duration.toMillis, Millis)) diff --git a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/TakeLastSinkSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/TakeLastSinkSpec.scala index 94ba23406f..04684c0b95 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/TakeLastSinkSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/TakeLastSinkSpec.scala @@ -7,12 +7,12 @@ package akka.stream.scaladsl import scala.collection.immutable import scala.concurrent.{ Await, Future } -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.stream.{ AbruptTerminationException, ActorMaterializer, ActorMaterializerSettings } import akka.stream.testkit.{ StreamSpec, TestPublisher } -@silent +@nowarn class TakeLastSinkSpec extends StreamSpec { val settings = ActorMaterializerSettings(system).withInputBuffer(initialSize = 2, maxSize = 16) diff --git a/akka-stream/src/main/scala/akka/stream/ActorMaterializer.scala b/akka-stream/src/main/scala/akka/stream/ActorMaterializer.scala index 89995c8d19..2f4eb3122b 100644 --- a/akka-stream/src/main/scala/akka/stream/ActorMaterializer.scala +++ b/akka-stream/src/main/scala/akka/stream/ActorMaterializer.scala @@ -9,7 +9,7 @@ import java.util.concurrent.TimeUnit import scala.concurrent.duration._ import scala.util.control.NoStackTrace -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.Config import com.typesafe.config.ConfigFactory @@ -420,7 +420,7 @@ object ActorMaterializerSettings { * * The constructor is not public API, use create or apply on the [[ActorMaterializerSettings]] companion instead. */ -@silent("deprecated") +@nowarn("msg=deprecated") final class ActorMaterializerSettings @InternalApi private ( /* * Important note: `initialInputBufferSize`, `maxInputBufferSize`, `dispatcher` and @@ -803,7 +803,7 @@ object IOSettings { apply(tcpWriteBufferSize) } -@silent("deprecated") +@nowarn("msg=deprecated") final class IOSettings private ( @deprecated("Use attribute 'TcpAttributes.TcpWriteBufferSize' to read the concrete setting value", "2.6.0") val tcpWriteBufferSize: Int) { @@ -863,7 +863,7 @@ object StreamSubscriptionTimeoutSettings { * Leaked publishers and subscribers are cleaned up when they are not used within a given * deadline, configured by [[StreamSubscriptionTimeoutSettings]]. */ -@silent("deprecated") +@nowarn("msg=deprecated") final class StreamSubscriptionTimeoutSettings( @deprecated( "Use attribute 'ActorAttributes.StreamSubscriptionTimeoutMode' to read the concrete setting value", diff --git a/akka-stream/src/main/scala/akka/stream/IOResult.scala b/akka-stream/src/main/scala/akka/stream/IOResult.scala index 154206f40b..9d2fd29367 100644 --- a/akka-stream/src/main/scala/akka/stream/IOResult.scala +++ b/akka-stream/src/main/scala/akka/stream/IOResult.scala @@ -7,7 +7,7 @@ package akka.stream import scala.util.{ Failure, Success, Try } import scala.util.control.NoStackTrace -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.Done @@ -17,7 +17,7 @@ import akka.Done * @param count Numeric value depending on context, for example IO operations performed or bytes processed. * @param status Status of the result. Can be either [[akka.Done]] or an exception. */ -@silent("deprecated") // Status +@nowarn("msg=deprecated") // Status final case class IOResult( count: Long, @deprecated("status is always set to Success(Done)", "2.6.0") status: Try[Done]) { diff --git a/akka-stream/src/main/scala/akka/stream/Materializer.scala b/akka-stream/src/main/scala/akka/stream/Materializer.scala index 152235ddaf..6b24ab113d 100644 --- a/akka-stream/src/main/scala/akka/stream/Materializer.scala +++ b/akka-stream/src/main/scala/akka/stream/Materializer.scala @@ -7,7 +7,7 @@ package akka.stream import scala.concurrent.ExecutionContextExecutor import scala.concurrent.duration.FiniteDuration -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor.ActorRef import akka.actor.ActorSystem @@ -25,7 +25,7 @@ import akka.event.LoggingAdapter * * Not for user extension */ -@silent("deprecated") // Name(symbol) is deprecated but older Scala versions don't have a string signature, since "2.5.8" +@nowarn("msg=deprecated") // Name(symbol) is deprecated but older Scala versions don't have a string signature, since "2.5.8" @DoNotInherit abstract class Materializer { @@ -203,7 +203,7 @@ object Materializer { * * You can pass either a classic actor context or a typed actor context. */ - @silent("deprecated") + @nowarn("msg=deprecated") def apply(contextProvider: ClassicActorContextProvider): Materializer = ActorMaterializer(None, None)(contextProvider.classicActorContext) diff --git a/akka-stream/src/main/scala/akka/stream/StreamRefSettings.scala b/akka-stream/src/main/scala/akka/stream/StreamRefSettings.scala index bbe2eadd95..347de2d527 100644 --- a/akka-stream/src/main/scala/akka/stream/StreamRefSettings.scala +++ b/akka-stream/src/main/scala/akka/stream/StreamRefSettings.scala @@ -8,14 +8,14 @@ import java.util.concurrent.TimeUnit import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.Config import akka.actor.ActorSystem import akka.annotation.DoNotInherit import akka.stream.impl.streamref.StreamRefSettingsImpl -@silent("deprecated") +@nowarn("msg=deprecated") object StreamRefSettings { /** Java API */ @@ -56,7 +56,7 @@ object StreamRefSettings { * More detailed documentation about each of the settings is available in `reference.conf`. */ @DoNotInherit -@silent("deprecated") +@nowarn("msg=deprecated") trait StreamRefSettings { @deprecated("Use attribute 'StreamRefAttributes.BufferCapacity' to read the concrete setting value", "2.6.0") def bufferCapacity: Int diff --git a/akka-stream/src/main/scala/akka/stream/SystemMaterializer.scala b/akka-stream/src/main/scala/akka/stream/SystemMaterializer.scala index 066d3d433e..ee4be05e03 100644 --- a/akka-stream/src/main/scala/akka/stream/SystemMaterializer.scala +++ b/akka-stream/src/main/scala/akka/stream/SystemMaterializer.scala @@ -7,7 +7,7 @@ package akka.stream import scala.concurrent.Await import scala.concurrent.Promise -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor.ActorSystem import akka.actor.ClassicActorSystemProvider @@ -46,13 +46,13 @@ final class SystemMaterializer(system: ExtendedActorSystem) extends Extension { /** * INTERNAL API */ - @InternalApi @silent("deprecated") + @InternalApi @nowarn("msg=deprecated") private[akka] val materializerSettings = ActorMaterializerSettings(system) private implicit val materializerTimeout: Timeout = system.settings.config.getDuration("akka.stream.materializer.creation-timeout").asScala - @InternalApi @silent("deprecated") + @InternalApi @nowarn("msg=deprecated") private val materializerGuardian = system.systemActorOf( MaterializerGuardian .props(systemMaterializerPromise, materializerSettings) @@ -75,7 +75,7 @@ final class SystemMaterializer(system: ExtendedActorSystem) extends Extension { * INTERNAL API */ @InternalApi - @silent("deprecated") + @nowarn("msg=deprecated") private[akka] def createAdditionalLegacySystemMaterializer( namePrefix: String, settings: ActorMaterializerSettings): Materializer = { diff --git a/akka-stream/src/main/scala/akka/stream/impl/ActorMaterializerImpl.scala b/akka-stream/src/main/scala/akka/stream/impl/ActorMaterializerImpl.scala index dea7b2d6c3..9ee98bd9c9 100644 --- a/akka-stream/src/main/scala/akka/stream/impl/ActorMaterializerImpl.scala +++ b/akka-stream/src/main/scala/akka/stream/impl/ActorMaterializerImpl.scala @@ -9,7 +9,7 @@ import java.util.concurrent.atomic.AtomicBoolean import scala.collection.immutable import scala.concurrent.ExecutionContextExecutor import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor._ import akka.annotation.DoNotInherit import akka.annotation.InternalApi @@ -27,7 +27,7 @@ import akka.util.OptionVal * * INTERNAL API */ -@silent("deprecated") +@nowarn("msg=deprecated") @DoNotInherit private[akka] abstract class ExtendedActorMaterializer extends ActorMaterializer { override def withNamePrefix(name: String): ExtendedActorMaterializer @@ -160,7 +160,7 @@ private[akka] class SubFusingActorMaterializerImpl( override private[akka] def actorOf(context: MaterializationContext, props: Props): ActorRef = delegate.actorOf(context, props) - @silent("deprecated") + @nowarn("msg=deprecated") override def settings: ActorMaterializerSettings = delegate.settings } diff --git a/akka-stream/src/main/scala/akka/stream/impl/MaterializerGuardian.scala b/akka-stream/src/main/scala/akka/stream/impl/MaterializerGuardian.scala index 8cfbb880dc..0d512e1e5a 100644 --- a/akka-stream/src/main/scala/akka/stream/impl/MaterializerGuardian.scala +++ b/akka-stream/src/main/scala/akka/stream/impl/MaterializerGuardian.scala @@ -6,7 +6,7 @@ package akka.stream.impl import scala.concurrent.Promise -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor.Actor import akka.actor.Props @@ -37,7 +37,7 @@ private[akka] object MaterializerGuardian { /** * INTERNAL API */ -@silent("deprecated") +@nowarn("msg=deprecated") @InternalApi private[akka] final class MaterializerGuardian( systemMaterializerPromise: Promise[Materializer], diff --git a/akka-stream/src/main/scala/akka/stream/impl/PhasedFusingActorMaterializer.scala b/akka-stream/src/main/scala/akka/stream/impl/PhasedFusingActorMaterializer.scala index b8650ed08e..21f8800180 100644 --- a/akka-stream/src/main/scala/akka/stream/impl/PhasedFusingActorMaterializer.scala +++ b/akka-stream/src/main/scala/akka/stream/impl/PhasedFusingActorMaterializer.scala @@ -11,7 +11,7 @@ import scala.collection.immutable.Map import scala.concurrent.ExecutionContextExecutor import scala.concurrent.duration.FiniteDuration -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import org.reactivestreams.Processor import org.reactivestreams.Publisher import org.reactivestreams.Subscriber @@ -610,7 +610,7 @@ private final case class SavedIslandData( /** * INTERNAL API */ - @silent("deprecated") + @nowarn("msg=deprecated") @InternalApi private[akka] override def actorOf(context: MaterializationContext, props: Props): ActorRef = { val effectiveProps = props.dispatcher match { case Dispatchers.DefaultDispatcherId => diff --git a/akka-stream/src/main/scala/akka/stream/impl/StreamSubscriptionTimeout.scala b/akka-stream/src/main/scala/akka/stream/impl/StreamSubscriptionTimeout.scala index 96e6ef6b3a..2b8ae501f3 100644 --- a/akka-stream/src/main/scala/akka/stream/impl/StreamSubscriptionTimeout.scala +++ b/akka-stream/src/main/scala/akka/stream/impl/StreamSubscriptionTimeout.scala @@ -7,7 +7,7 @@ package akka.stream.impl import scala.concurrent.duration.FiniteDuration import scala.util.control.NoStackTrace -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import org.reactivestreams._ import akka.actor._ @@ -58,7 +58,7 @@ import akka.stream.StreamSubscriptionTimeoutTerminationMode.{ CancelTermination, * * See `akka.stream.materializer.subscription-timeout` for configuration options. */ -@silent("deprecated") +@nowarn("msg=deprecated") @InternalApi private[akka] trait StreamSubscriptionTimeoutSupport { this: Actor with ActorLogging => @@ -114,7 +114,7 @@ import akka.stream.StreamSubscriptionTimeoutTerminationMode.{ CancelTermination, /** * Called by the actor when a subscription has timed out. Expects the actual `Publisher` or `Processor` target. */ - @silent("deprecated") + @nowarn("msg=deprecated") protected def subscriptionTimedOut(target: Publisher[_]): Unit = subscriptionTimeoutSettings.mode match { case NoopTermination => // ignore... case WarnTermination => warn(target, subscriptionTimeoutSettings.timeout) diff --git a/akka-stream/src/main/scala/akka/stream/impl/fusing/Ops.scala b/akka-stream/src/main/scala/akka/stream/impl/fusing/Ops.scala index acc4837ac7..ce89040b07 100644 --- a/akka-stream/src/main/scala/akka/stream/impl/fusing/Ops.scala +++ b/akka-stream/src/main/scala/akka/stream/impl/fusing/Ops.scala @@ -20,7 +20,7 @@ import akka.stream.scaladsl.{ DelayStrategy, Source } import akka.stream.stage._ import akka.stream.{ Supervision, _ } import akka.util.{ unused, OptionVal } -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import scala.annotation.tailrec import scala.collection.immutable @@ -2068,7 +2068,7 @@ private[stream] object Collect { }) } - @silent // compiler complaining about aggregator = _: T + @nowarn // compiler complaining about aggregator = _: T override def onPush(): Unit = { val elem = grab(in) try { diff --git a/akka-stream/src/main/scala/akka/stream/impl/io/TcpStages.scala b/akka-stream/src/main/scala/akka/stream/impl/io/TcpStages.scala index 4870a86a4d..7554f51468 100644 --- a/akka-stream/src/main/scala/akka/stream/impl/io/TcpStages.scala +++ b/akka-stream/src/main/scala/akka/stream/impl/io/TcpStages.scala @@ -12,7 +12,7 @@ import scala.collection.immutable import scala.concurrent.{ Future, Promise } import scala.concurrent.duration.{ Duration, FiniteDuration } -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.{ Done, NotUsed } import akka.actor.{ ActorRef, Terminated } @@ -246,7 +246,7 @@ private[stream] object ConnectionSourceStage { // After that remains immutable private var connection: ActorRef = _ - @silent("deprecated") + @nowarn("msg=deprecated") private val writeBufferSize = inheritedAttributes .get[TcpAttributes.TcpWriteBufferSize]( TcpAttributes.TcpWriteBufferSize( diff --git a/akka-stream/src/main/scala/akka/stream/impl/streamref/SinkRefImpl.scala b/akka-stream/src/main/scala/akka/stream/impl/streamref/SinkRefImpl.scala index 04fe38a869..97aa522aae 100644 --- a/akka-stream/src/main/scala/akka/stream/impl/streamref/SinkRefImpl.scala +++ b/akka-stream/src/main/scala/akka/stream/impl/streamref/SinkRefImpl.scala @@ -6,7 +6,7 @@ package akka.stream.impl.streamref import scala.util.{ Failure, Success, Try } -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.Done import akka.NotUsed @@ -65,7 +65,7 @@ private[stream] final class SinkRefStageImpl[In] private[akka] (val initialPartn private[this] val streamRefsMaster = StreamRefsMaster(eagerMaterializer.system) // settings --- - @silent("deprecated") // can't remove this settings access without breaking compat + @nowarn("msg=deprecated") // can't remove this settings access without breaking compat private[this] val subscriptionTimeout = { import StreamRefAttributes._ val settings = eagerMaterializer.settings.streamRefSettings diff --git a/akka-stream/src/main/scala/akka/stream/impl/streamref/SourceRefImpl.scala b/akka-stream/src/main/scala/akka/stream/impl/streamref/SourceRefImpl.scala index 8fe31ac690..55ea31c1ec 100644 --- a/akka-stream/src/main/scala/akka/stream/impl/streamref/SourceRefImpl.scala +++ b/akka-stream/src/main/scala/akka/stream/impl/streamref/SourceRefImpl.scala @@ -4,7 +4,7 @@ package akka.stream.impl.streamref -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.NotUsed import akka.actor.{ ActorRef, Terminated } @@ -124,24 +124,24 @@ private[stream] final class SourceRefStageImpl[Out](val initialPartnerRef: Optio // settings --- import StreamRefAttributes._ - @silent("deprecated") // can't remove this settings access without breaking compat + @nowarn("msg=deprecated") // can't remove this settings access without breaking compat private[this] val settings = eagerMaterializer.settings.streamRefSettings - @silent("deprecated") // can't remove this settings access without breaking compat + @nowarn("msg=deprecated") // can't remove this settings access without breaking compat private[this] val subscriptionTimeout = inheritedAttributes.get[StreamRefAttributes.SubscriptionTimeout]( SubscriptionTimeout(settings.subscriptionTimeout)) - @silent("deprecated") // can't remove this settings access without breaking compat + @nowarn("msg=deprecated") // can't remove this settings access without breaking compat private[this] val bufferCapacity = inheritedAttributes .get[StreamRefAttributes.BufferCapacity](StreamRefAttributes.BufferCapacity(settings.bufferCapacity)) .capacity - @silent("deprecated") // can't remove this settings access without breaking compat + @nowarn("msg=deprecated") // can't remove this settings access without breaking compat private[this] val demandRedeliveryInterval = inheritedAttributes .get[StreamRefAttributes.DemandRedeliveryInterval](DemandRedeliveryInterval(settings.demandRedeliveryInterval)) .timeout - @silent("deprecated") // can't remove this settings access without breaking compat + @nowarn("msg=deprecated") // can't remove this settings access without breaking compat private[this] val finalTerminationSignalDeadline = inheritedAttributes .get[StreamRefAttributes.FinalTerminationSignalDeadline]( diff --git a/akka-stream/src/main/scala/akka/stream/javadsl/BidiFlow.scala b/akka-stream/src/main/scala/akka/stream/javadsl/BidiFlow.scala index 6ede57639f..242d1e1795 100644 --- a/akka-stream/src/main/scala/akka/stream/javadsl/BidiFlow.scala +++ b/akka-stream/src/main/scala/akka/stream/javadsl/BidiFlow.scala @@ -6,7 +6,7 @@ package akka.stream.javadsl import scala.concurrent.duration.FiniteDuration -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.NotUsed import akka.japi.function @@ -110,7 +110,7 @@ object BidiFlow { * every second in one direction, but no elements are flowing in the other direction. I.e. this operator considers * the *joint* frequencies of the elements in both directions. */ - @silent("deprecated") + @nowarn("msg=deprecated") def bidirectionalIdleTimeout[I, O](timeout: java.time.Duration): BidiFlow[I, I, O, O, NotUsed] = { import akka.util.JavaDurationConverters._ bidirectionalIdleTimeout(timeout.asScala) diff --git a/akka-stream/src/main/scala/akka/stream/javadsl/Flow.scala b/akka-stream/src/main/scala/akka/stream/javadsl/Flow.scala index f99711e973..d797564fea 100755 --- a/akka-stream/src/main/scala/akka/stream/javadsl/Flow.scala +++ b/akka-stream/src/main/scala/akka/stream/javadsl/Flow.scala @@ -15,7 +15,7 @@ import scala.compat.java8.FutureConverters._ import scala.concurrent.duration.FiniteDuration import scala.reflect.ClassTag -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import org.reactivestreams.Processor import akka.Done @@ -1260,7 +1260,7 @@ final class Flow[In, Out, Mat](delegate: scaladsl.Flow[In, Out, Mat]) extends Gr * `n` must be positive, and `d` must be greater than 0 seconds, otherwise * IllegalArgumentException is thrown. */ - @silent("deprecated") + @nowarn("msg=deprecated") def groupedWithin(n: Int, d: java.time.Duration): javadsl.Flow[In, java.util.List[Out], Mat] = groupedWithin(n, d.asScala) @@ -1308,7 +1308,7 @@ final class Flow[In, Out, Mat](delegate: scaladsl.Flow[In, Out, Mat]) extends Gr * `maxWeight` must be positive, and `d` must be greater than 0 seconds, otherwise * IllegalArgumentException is thrown. */ - @silent("deprecated") + @nowarn("msg=deprecated") def groupedWeightedWithin( maxWeight: Long, costFn: function.Function[Out, java.lang.Long], @@ -1370,7 +1370,7 @@ final class Flow[In, Out, Mat](delegate: scaladsl.Flow[In, Out, Mat]) extends Gr * @param of time to shift all messages * @param strategy Strategy that is used when incoming elements cannot fit inside the buffer */ - @silent("deprecated") + @nowarn("msg=deprecated") def delay(of: java.time.Duration, strategy: DelayOverflowStrategy): Flow[In, Out, Mat] = delay(of.asScala, strategy) @@ -1452,7 +1452,7 @@ final class Flow[In, Out, Mat](delegate: scaladsl.Flow[In, Out, Mat]) extends Gr * * '''Cancels when''' downstream cancels */ - @silent("deprecated") + @nowarn("msg=deprecated") def dropWithin(d: java.time.Duration): javadsl.Flow[In, Out, Mat] = dropWithin(d.asScala) @@ -1623,7 +1623,7 @@ final class Flow[In, Out, Mat](delegate: scaladsl.Flow[In, Out, Mat]) extends Gr * '''Cancels when''' downstream cancels * */ - @silent("deprecated") + @nowarn("msg=deprecated") def recoverWith(pf: PartialFunction[Throwable, _ <: Graph[SourceShape[Out], NotUsed]]): javadsl.Flow[In, Out, Mat] = new Flow(delegate.recoverWith(pf)) @@ -1786,7 +1786,7 @@ final class Flow[In, Out, Mat](delegate: scaladsl.Flow[In, Out, Mat]) extends Gr * * See also [[Flow.limit]], [[Flow.limitWeighted]] */ - @silent("deprecated") + @nowarn("msg=deprecated") def takeWithin(d: java.time.Duration): javadsl.Flow[In, Out, Mat] = takeWithin(d.asScala) @@ -3043,7 +3043,7 @@ final class Flow[In, Out, Mat](delegate: scaladsl.Flow[In, Out, Mat]) extends Gr * * '''Cancels when''' downstream cancels */ - @silent("deprecated") + @nowarn("msg=deprecated") def initialTimeout(timeout: java.time.Duration): javadsl.Flow[In, Out, Mat] = initialTimeout(timeout.asScala) @@ -3076,7 +3076,7 @@ final class Flow[In, Out, Mat](delegate: scaladsl.Flow[In, Out, Mat]) extends Gr * * '''Cancels when''' downstream cancels */ - @silent("deprecated") + @nowarn("msg=deprecated") def completionTimeout(timeout: java.time.Duration): javadsl.Flow[In, Out, Mat] = completionTimeout(timeout.asScala) @@ -3111,7 +3111,7 @@ final class Flow[In, Out, Mat](delegate: scaladsl.Flow[In, Out, Mat]) extends Gr * * '''Cancels when''' downstream cancels */ - @silent("deprecated") + @nowarn("msg=deprecated") def idleTimeout(timeout: java.time.Duration): javadsl.Flow[In, Out, Mat] = idleTimeout(timeout.asScala) @@ -3146,7 +3146,7 @@ final class Flow[In, Out, Mat](delegate: scaladsl.Flow[In, Out, Mat]) extends Gr * * '''Cancels when''' downstream cancels */ - @silent("deprecated") + @nowarn("msg=deprecated") def backpressureTimeout(timeout: java.time.Duration): javadsl.Flow[In, Out, Mat] = backpressureTimeout(timeout.asScala) @@ -3189,7 +3189,7 @@ final class Flow[In, Out, Mat](delegate: scaladsl.Flow[In, Out, Mat]) extends Gr * * '''Cancels when''' downstream cancels */ - @silent("deprecated") + @nowarn("msg=deprecated") def keepAlive(maxIdle: java.time.Duration, injectedElem: function.Creator[Out]): javadsl.Flow[In, Out, Mat] = keepAlive(maxIdle.asScala, injectedElem) @@ -3597,7 +3597,7 @@ final class Flow[In, Out, Mat](delegate: scaladsl.Flow[In, Out, Mat]) extends Gr * * '''Cancels when''' downstream cancels */ - @silent("deprecated") + @nowarn("msg=deprecated") def initialDelay(delay: java.time.Duration): javadsl.Flow[In, Out, Mat] = initialDelay(delay.asScala) diff --git a/akka-stream/src/main/scala/akka/stream/javadsl/Source.scala b/akka-stream/src/main/scala/akka/stream/javadsl/Source.scala index 4bbbb0a678..108333f887 100755 --- a/akka-stream/src/main/scala/akka/stream/javadsl/Source.scala +++ b/akka-stream/src/main/scala/akka/stream/javadsl/Source.scala @@ -17,7 +17,7 @@ import scala.concurrent.{ Future, Promise } import scala.concurrent.duration.FiniteDuration import scala.reflect.ClassTag -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import org.reactivestreams.{ Publisher, Subscriber } import akka.{ Done, NotUsed } import akka.actor.{ ActorRef, Cancellable, ClassicActorSystemProvider } @@ -237,7 +237,7 @@ object Source { * element is produced it will not receive that tick element later. It will * receive new tick elements as soon as it has requested more elements. */ - @silent("deprecated") + @nowarn("msg=deprecated") def tick[O](initialDelay: java.time.Duration, interval: java.time.Duration, tick: O): javadsl.Source[O, Cancellable] = Source.tick(initialDelay.asScala, interval.asScala, tick) @@ -2001,7 +2001,7 @@ final class Source[Out, Mat](delegate: scaladsl.Source[Out, Mat]) extends Graph[ */ @Deprecated @deprecated("Use recoverWithRetries instead.", "2.6.6") - @silent("deprecated") + @nowarn("msg=deprecated") def recoverWith(pf: PartialFunction[Throwable, _ <: Graph[SourceShape[Out], NotUsed]]): Source[Out, Mat] = new Source(delegate.recoverWith(pf)) @@ -2028,7 +2028,7 @@ final class Source[Out, Mat](delegate: scaladsl.Source[Out, Mat]) extends Graph[ */ @Deprecated @deprecated("Use recoverWithRetries instead.", "2.6.6") - @silent("deprecated") + @nowarn("msg=deprecated") def recoverWith( clazz: Class[_ <: Throwable], supplier: Supplier[Graph[SourceShape[Out], NotUsed]]): Source[Out, Mat] = @@ -2700,7 +2700,7 @@ final class Source[Out, Mat](delegate: scaladsl.Source[Out, Mat]) extends Graph[ * `n` must be positive, and `d` must be greater than 0 seconds, otherwise * IllegalArgumentException is thrown. */ - @silent("deprecated") + @nowarn("msg=deprecated") def groupedWithin(n: Int, d: java.time.Duration): javadsl.Source[java.util.List[Out @uncheckedVariance], Mat] = groupedWithin(n, d.asScala) @@ -2748,7 +2748,7 @@ final class Source[Out, Mat](delegate: scaladsl.Source[Out, Mat]) extends Graph[ * `maxWeight` must be positive, and `d` must be greater than 0 seconds, otherwise * IllegalArgumentException is thrown. */ - @silent("deprecated") + @nowarn("msg=deprecated") def groupedWeightedWithin( maxWeight: Long, costFn: function.Function[Out, java.lang.Long], @@ -2810,7 +2810,7 @@ final class Source[Out, Mat](delegate: scaladsl.Source[Out, Mat]) extends Graph[ * @param of time to shift all messages * @param strategy Strategy that is used when incoming elements cannot fit inside the buffer */ - @silent("deprecated") + @nowarn("msg=deprecated") def delay(of: java.time.Duration, strategy: DelayOverflowStrategy): Source[Out, Mat] = delay(of.asScala, strategy) @@ -2892,7 +2892,7 @@ final class Source[Out, Mat](delegate: scaladsl.Source[Out, Mat]) extends Graph[ * * '''Cancels when''' downstream cancels */ - @silent("deprecated") + @nowarn("msg=deprecated") def dropWithin(d: java.time.Duration): javadsl.Source[Out, Mat] = dropWithin(d.asScala) @@ -3018,7 +3018,7 @@ final class Source[Out, Mat](delegate: scaladsl.Source[Out, Mat]) extends Graph[ * * '''Cancels when''' downstream cancels or timer fires */ - @silent("deprecated") + @nowarn("msg=deprecated") def takeWithin(d: java.time.Duration): javadsl.Source[Out, Mat] = takeWithin(d.asScala) @@ -3608,7 +3608,7 @@ final class Source[Out, Mat](delegate: scaladsl.Source[Out, Mat]) extends Graph[ * * '''Cancels when''' downstream cancels */ - @silent("deprecated") + @nowarn("msg=deprecated") def initialTimeout(timeout: java.time.Duration): javadsl.Source[Out, Mat] = initialTimeout(timeout.asScala) @@ -3641,7 +3641,7 @@ final class Source[Out, Mat](delegate: scaladsl.Source[Out, Mat]) extends Graph[ * * '''Cancels when''' downstream cancels */ - @silent("deprecated") + @nowarn("msg=deprecated") def completionTimeout(timeout: java.time.Duration): javadsl.Source[Out, Mat] = completionTimeout(timeout.asScala) @@ -3676,7 +3676,7 @@ final class Source[Out, Mat](delegate: scaladsl.Source[Out, Mat]) extends Graph[ * * '''Cancels when''' downstream cancels */ - @silent("deprecated") + @nowarn("msg=deprecated") def idleTimeout(timeout: java.time.Duration): javadsl.Source[Out, Mat] = idleTimeout(timeout.asScala) @@ -3711,7 +3711,7 @@ final class Source[Out, Mat](delegate: scaladsl.Source[Out, Mat]) extends Graph[ * * '''Cancels when''' downstream cancels */ - @silent("deprecated") + @nowarn("msg=deprecated") def backpressureTimeout(timeout: java.time.Duration): javadsl.Source[Out, Mat] = backpressureTimeout(timeout.asScala) @@ -3754,7 +3754,7 @@ final class Source[Out, Mat](delegate: scaladsl.Source[Out, Mat]) extends Graph[ * * '''Cancels when''' downstream cancels */ - @silent("deprecated") + @nowarn("msg=deprecated") def keepAlive(maxIdle: java.time.Duration, injectedElem: function.Creator[Out]): javadsl.Source[Out, Mat] = keepAlive(maxIdle.asScala, injectedElem) @@ -4160,7 +4160,7 @@ final class Source[Out, Mat](delegate: scaladsl.Source[Out, Mat]) extends Graph[ * * '''Cancels when''' downstream cancels */ - @silent("deprecated") + @nowarn("msg=deprecated") def initialDelay(delay: java.time.Duration): javadsl.Source[Out, Mat] = initialDelay(delay.asScala) diff --git a/akka-stream/src/main/scala/akka/stream/javadsl/StreamConverters.scala b/akka-stream/src/main/scala/akka/stream/javadsl/StreamConverters.scala index 6ddd67ab48..70b833f118 100644 --- a/akka-stream/src/main/scala/akka/stream/javadsl/StreamConverters.scala +++ b/akka-stream/src/main/scala/akka/stream/javadsl/StreamConverters.scala @@ -10,7 +10,7 @@ import java.util.stream.Collector import scala.concurrent.duration.FiniteDuration -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.NotUsed import akka.japi.function @@ -112,7 +112,7 @@ object StreamConverters { * * @param readTimeout the max time the read operation on the materialized InputStream should block */ - @silent("deprecated") + @nowarn("msg=deprecated") def asInputStream(readTimeout: java.time.Duration): Sink[ByteString, InputStream] = { import akka.util.JavaDurationConverters._ asInputStream(readTimeout.asScala) @@ -190,7 +190,7 @@ object StreamConverters { * * @param writeTimeout the max time the write operation on the materialized OutputStream should block */ - @silent("deprecated") + @nowarn("msg=deprecated") def asOutputStream(writeTimeout: java.time.Duration): javadsl.Source[ByteString, OutputStream] = { import akka.util.JavaDurationConverters._ asOutputStream(writeTimeout.asScala) diff --git a/akka-stream/src/main/scala/akka/stream/javadsl/SubFlow.scala b/akka-stream/src/main/scala/akka/stream/javadsl/SubFlow.scala index e7e8b1634e..9b83a5310e 100755 --- a/akka-stream/src/main/scala/akka/stream/javadsl/SubFlow.scala +++ b/akka-stream/src/main/scala/akka/stream/javadsl/SubFlow.scala @@ -13,7 +13,7 @@ import scala.compat.java8.FutureConverters._ import scala.concurrent.duration.FiniteDuration import scala.reflect.ClassTag -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.NotUsed import akka.event.{ LogMarker, LoggingAdapter, MarkerLoggingAdapter } @@ -697,7 +697,7 @@ class SubFlow[In, Out, Mat]( * `n` must be positive, and `d` must be greater than 0 seconds, otherwise * IllegalArgumentException is thrown. */ - @silent("deprecated") + @nowarn("msg=deprecated") def groupedWithin(n: Int, d: java.time.Duration): SubFlow[In, java.util.List[Out @uncheckedVariance], Mat] = groupedWithin(n, d.asScala) @@ -745,7 +745,7 @@ class SubFlow[In, Out, Mat]( * `maxWeight` must be positive, and `d` must be greater than 0 seconds, otherwise * IllegalArgumentException is thrown. */ - @silent("deprecated") + @nowarn("msg=deprecated") def groupedWeightedWithin( maxWeight: Long, costFn: function.Function[Out, java.lang.Long], @@ -807,7 +807,7 @@ class SubFlow[In, Out, Mat]( * @param of time to shift all messages * @param strategy Strategy that is used when incoming elements cannot fit inside the buffer */ - @silent("deprecated") + @nowarn("msg=deprecated") def delay(of: java.time.Duration, strategy: DelayOverflowStrategy): SubFlow[In, Out, Mat] = delay(of.asScala, strategy) @@ -889,7 +889,7 @@ class SubFlow[In, Out, Mat]( * * '''Cancels when''' downstream cancels */ - @silent("deprecated") + @nowarn("msg=deprecated") def dropWithin(d: java.time.Duration): SubFlow[In, Out, Mat] = dropWithin(d.asScala) @@ -1130,7 +1130,7 @@ class SubFlow[In, Out, Mat]( * * '''Cancels when''' downstream cancels or timer fires */ - @silent("deprecated") + @nowarn("msg=deprecated") def takeWithin(d: java.time.Duration): SubFlow[In, Out, Mat] = takeWithin(d.asScala) @@ -1807,7 +1807,7 @@ class SubFlow[In, Out, Mat]( * * '''Cancels when''' downstream cancels */ - @silent("deprecated") + @nowarn("msg=deprecated") def initialTimeout(timeout: java.time.Duration): SubFlow[In, Out, Mat] = initialTimeout(timeout.asScala) @@ -1840,7 +1840,7 @@ class SubFlow[In, Out, Mat]( * * '''Cancels when''' downstream cancels */ - @silent("deprecated") + @nowarn("msg=deprecated") def completionTimeout(timeout: java.time.Duration): SubFlow[In, Out, Mat] = completionTimeout(timeout.asScala) @@ -1875,7 +1875,7 @@ class SubFlow[In, Out, Mat]( * * '''Cancels when''' downstream cancels */ - @silent("deprecated") + @nowarn("msg=deprecated") def idleTimeout(timeout: java.time.Duration): SubFlow[In, Out, Mat] = idleTimeout(timeout.asScala) @@ -1910,7 +1910,7 @@ class SubFlow[In, Out, Mat]( * * '''Cancels when''' downstream cancels */ - @silent("deprecated") + @nowarn("msg=deprecated") def backpressureTimeout(timeout: java.time.Duration): SubFlow[In, Out, Mat] = backpressureTimeout(timeout.asScala) @@ -1953,7 +1953,7 @@ class SubFlow[In, Out, Mat]( * * '''Cancels when''' downstream cancels */ - @silent("deprecated") + @nowarn("msg=deprecated") def keepAlive(maxIdle: java.time.Duration, injectedElem: function.Creator[Out]): SubFlow[In, Out, Mat] = keepAlive(maxIdle.asScala, injectedElem) @@ -2321,7 +2321,7 @@ class SubFlow[In, Out, Mat]( * * '''Cancels when''' downstream cancels */ - @silent("deprecated") + @nowarn("msg=deprecated") def initialDelay(delay: java.time.Duration): SubFlow[In, Out, Mat] = initialDelay(delay.asScala) diff --git a/akka-stream/src/main/scala/akka/stream/javadsl/SubSource.scala b/akka-stream/src/main/scala/akka/stream/javadsl/SubSource.scala index a2981c7763..fc97db3157 100755 --- a/akka-stream/src/main/scala/akka/stream/javadsl/SubSource.scala +++ b/akka-stream/src/main/scala/akka/stream/javadsl/SubSource.scala @@ -13,7 +13,7 @@ import scala.compat.java8.FutureConverters._ import scala.concurrent.duration.FiniteDuration import scala.reflect.ClassTag -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.NotUsed import akka.event.{ LogMarker, LoggingAdapter, MarkerLoggingAdapter } @@ -686,7 +686,7 @@ class SubSource[Out, Mat]( * `n` must be positive, and `d` must be greater than 0 seconds, otherwise * IllegalArgumentException is thrown. */ - @silent("deprecated") + @nowarn("msg=deprecated") def groupedWithin(n: Int, d: java.time.Duration): SubSource[java.util.List[Out @uncheckedVariance], Mat] = groupedWithin(n, d.asScala) @@ -734,7 +734,7 @@ class SubSource[Out, Mat]( * `maxWeight` must be positive, and `d` must be greater than 0 seconds, otherwise * IllegalArgumentException is thrown. */ - @silent("deprecated") + @nowarn("msg=deprecated") def groupedWeightedWithin( maxWeight: Long, costFn: function.Function[Out, java.lang.Long], @@ -783,7 +783,7 @@ class SubSource[Out, Mat]( * * '''Cancels when''' downstream cancels */ - @silent("deprecated") + @nowarn("msg=deprecated") def dropWithin(d: java.time.Duration): SubSource[Out, Mat] = dropWithin(d.asScala) @@ -900,7 +900,7 @@ class SubSource[Out, Mat]( * @param of time to shift all messages * @param strategy Strategy that is used when incoming elements cannot fit inside the buffer */ - @silent("deprecated") + @nowarn("msg=deprecated") def delay(of: java.time.Duration, strategy: DelayOverflowStrategy): SubSource[Out, Mat] = delay(of.asScala, strategy) @@ -1110,7 +1110,7 @@ class SubSource[Out, Mat]( * * '''Cancels when''' downstream cancels or timer fires */ - @silent("deprecated") + @nowarn("msg=deprecated") def takeWithin(d: java.time.Duration): SubSource[Out, Mat] = takeWithin(d.asScala) @@ -1786,7 +1786,7 @@ class SubSource[Out, Mat]( * * '''Cancels when''' downstream cancels */ - @silent("deprecated") + @nowarn("msg=deprecated") def initialTimeout(timeout: java.time.Duration): SubSource[Out, Mat] = initialTimeout(timeout.asScala) @@ -1819,7 +1819,7 @@ class SubSource[Out, Mat]( * * '''Cancels when''' downstream cancels */ - @silent("deprecated") + @nowarn("msg=deprecated") def completionTimeout(timeout: java.time.Duration): SubSource[Out, Mat] = completionTimeout(timeout.asScala) @@ -1854,7 +1854,7 @@ class SubSource[Out, Mat]( * * '''Cancels when''' downstream cancels */ - @silent("deprecated") + @nowarn("msg=deprecated") def idleTimeout(timeout: java.time.Duration): SubSource[Out, Mat] = idleTimeout(timeout.asScala) @@ -1889,7 +1889,7 @@ class SubSource[Out, Mat]( * * '''Cancels when''' downstream cancels */ - @silent("deprecated") + @nowarn("msg=deprecated") def backpressureTimeout(timeout: java.time.Duration): SubSource[Out, Mat] = backpressureTimeout(timeout.asScala) @@ -1932,7 +1932,7 @@ class SubSource[Out, Mat]( * * '''Cancels when''' downstream cancels */ - @silent("deprecated") + @nowarn("msg=deprecated") def keepAlive(maxIdle: java.time.Duration, injectedElem: function.Creator[Out]): SubSource[Out, Mat] = keepAlive(maxIdle.asScala, injectedElem) @@ -2296,7 +2296,7 @@ class SubSource[Out, Mat]( * * '''Cancels when''' downstream cancels */ - @silent("deprecated") + @nowarn("msg=deprecated") def initialDelay(delay: java.time.Duration): SubSource[Out, Mat] = initialDelay(delay.asScala) diff --git a/akka-stream/src/main/scala/akka/stream/javadsl/Tcp.scala b/akka-stream/src/main/scala/akka/stream/javadsl/Tcp.scala index abae3e1ae1..4223ae79e3 100644 --- a/akka-stream/src/main/scala/akka/stream/javadsl/Tcp.scala +++ b/akka-stream/src/main/scala/akka/stream/javadsl/Tcp.scala @@ -20,7 +20,7 @@ import scala.concurrent.duration._ import scala.util.Failure import scala.util.Success -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.{ Done, NotUsed } import akka.actor.ActorSystem @@ -440,7 +440,7 @@ class Tcp(system: ExtendedActorSystem) extends akka.actor.Extension { negotiateNewSession: NegotiateNewSession, backlog: Int, options: JIterable[SocketOption], - @silent // unused #26689 + @nowarn // unused #26689 halfClose: Boolean, idleTimeout: Duration): Source[IncomingConnection, CompletionStage[ServerBinding]] = Source.fromGraph( diff --git a/akka-stream/src/main/scala/akka/stream/scaladsl/Tcp.scala b/akka-stream/src/main/scala/akka/stream/scaladsl/Tcp.scala index af688bb587..a85beef35f 100644 --- a/akka-stream/src/main/scala/akka/stream/scaladsl/Tcp.scala +++ b/akka-stream/src/main/scala/akka/stream/scaladsl/Tcp.scala @@ -18,7 +18,7 @@ import scala.util.Success import scala.util.Try import scala.util.control.NoStackTrace -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.Done import akka.NotUsed @@ -133,7 +133,7 @@ final class Tcp(system: ExtendedActorSystem) extends akka.actor.Extension { interface: String, port: Int, backlog: Int = defaultBacklog, - @silent // Traversable deprecated in 2.13 + @nowarn // Traversable deprecated in 2.13 options: immutable.Traversable[SocketOption] = Nil, halfClose: Boolean = false, idleTimeout: Duration = Duration.Inf): Source[IncomingConnection, Future[ServerBinding]] = @@ -175,7 +175,7 @@ final class Tcp(system: ExtendedActorSystem) extends akka.actor.Extension { interface: String, port: Int, backlog: Int = defaultBacklog, - @silent // Traversable deprecated in 2.13 + @nowarn // Traversable deprecated in 2.13 options: immutable.Traversable[SocketOption] = Nil, halfClose: Boolean = false, idleTimeout: Duration = Duration.Inf)(implicit m: Materializer): Future[ServerBinding] = { @@ -209,7 +209,7 @@ final class Tcp(system: ExtendedActorSystem) extends akka.actor.Extension { def outgoingConnection( remoteAddress: InetSocketAddress, localAddress: Option[InetSocketAddress] = None, - @silent // Traversable deprecated in 2.13 + @nowarn // Traversable deprecated in 2.13 options: immutable.Traversable[SocketOption] = Nil, halfClose: Boolean = true, connectTimeout: Duration = Duration.Inf, @@ -285,13 +285,13 @@ final class Tcp(system: ExtendedActorSystem) extends akka.actor.Extension { sslContext: SSLContext, negotiateNewSession: NegotiateNewSession, localAddress: Option[InetSocketAddress] = None, - @silent // Traversable deprecated in 2.13 + @nowarn // Traversable deprecated in 2.13 options: immutable.Traversable[SocketOption] = Nil, connectTimeout: Duration = Duration.Inf, idleTimeout: Duration = Duration.Inf): Flow[ByteString, ByteString, Future[OutgoingConnection]] = { val connection = outgoingConnection(remoteAddress, localAddress, options, true, connectTimeout, idleTimeout) - @silent("deprecated") + @nowarn("msg=deprecated") val tls = TLS(sslContext, negotiateNewSession, TLSRole.client) connection.join(tlsWrapping.atop(tls).reversed) } @@ -362,10 +362,10 @@ final class Tcp(system: ExtendedActorSystem) extends akka.actor.Extension { sslContext: SSLContext, negotiateNewSession: NegotiateNewSession, backlog: Int = defaultBacklog, - @silent // Traversable deprecated in 2.13 + @nowarn // Traversable deprecated in 2.13 options: immutable.Traversable[SocketOption] = Nil, idleTimeout: Duration = Duration.Inf): Source[IncomingConnection, Future[ServerBinding]] = { - @silent("deprecated") + @nowarn("msg=deprecated") val tls = tlsWrapping.atop(TLS(sslContext, negotiateNewSession, TLSRole.server)).reversed bind(interface, port, backlog, options, halfClose = false, idleTimeout).map { incomingConnection => @@ -496,7 +496,7 @@ final class Tcp(system: ExtendedActorSystem) extends akka.actor.Extension { sslContext: SSLContext, negotiateNewSession: NegotiateNewSession, backlog: Int = defaultBacklog, - @silent // Traversable deprecated in 2.13 + @nowarn // Traversable deprecated in 2.13 options: immutable.Traversable[SocketOption] = Nil, idleTimeout: Duration = Duration.Inf)(implicit m: Materializer): Future[ServerBinding] = { bindTls(interface, port, sslContext, negotiateNewSession, backlog, options, idleTimeout) diff --git a/akka-stream/src/main/scala/akka/stream/stage/GraphStage.scala b/akka-stream/src/main/scala/akka/stream/stage/GraphStage.scala index 5fe7550abf..bb26ad8f13 100644 --- a/akka-stream/src/main/scala/akka/stream/stage/GraphStage.scala +++ b/akka-stream/src/main/scala/akka/stream/stage/GraphStage.scala @@ -9,7 +9,9 @@ import scala.annotation.tailrec import scala.collection.{ immutable, mutable } import scala.concurrent.{ Future, Promise } import scala.concurrent.duration.FiniteDuration -import com.github.ghik.silencer.silent + +import scala.annotation.nowarn + import akka.{ Done, NotUsed } import akka.actor._ import akka.annotation.InternalApi @@ -1929,7 +1931,7 @@ trait OutHandler { require(cause ne null, "Cancellation cause must not be null") require(thisStage.lastCancellationCause eq null, "onDownstreamFinish(cause) must not be called recursively") thisStage.lastCancellationCause = cause - (onDownstreamFinish(): @silent("deprecated")) // if not overridden, call old deprecated variant + (onDownstreamFinish(): @nowarn("msg=deprecated")) // if not overridden, call old deprecated variant } finally thisStage.lastCancellationCause = null } } diff --git a/akka-testkit/src/main/scala/akka/testkit/CallingThreadDispatcher.scala b/akka-testkit/src/main/scala/akka/testkit/CallingThreadDispatcher.scala index ad93659f3e..c7453532a6 100644 --- a/akka-testkit/src/main/scala/akka/testkit/CallingThreadDispatcher.scala +++ b/akka-testkit/src/main/scala/akka/testkit/CallingThreadDispatcher.scala @@ -155,7 +155,7 @@ object CallingThreadDispatcher { class CallingThreadDispatcher(_configurator: MessageDispatcherConfigurator) extends MessageDispatcher(_configurator) { import CallingThreadDispatcher._ - val log = akka.event.Logging(eventStream, getClass) + val log = akka.event.Logging(eventStream, classOf[CallingThreadDispatcher]) override def id: String = Id diff --git a/akka-testkit/src/main/scala/akka/testkit/TestActorRef.scala b/akka-testkit/src/main/scala/akka/testkit/TestActorRef.scala index 0c14acbab8..484eba0d17 100644 --- a/akka-testkit/src/main/scala/akka/testkit/TestActorRef.scala +++ b/akka-testkit/src/main/scala/akka/testkit/TestActorRef.scala @@ -9,7 +9,7 @@ import java.util.concurrent.atomic.AtomicLong import scala.concurrent.Await import scala.reflect.ClassTag -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor._ import akka.dispatch._ @@ -22,40 +22,53 @@ import akka.pattern.ask * * @since 1.1 */ -@silent // 'early initializers' are deprecated on 2.13 and will be replaced with trait parameters on 2.14. https://github.com/akka/akka/issues/26753 -class TestActorRef[T <: Actor](_system: ActorSystem, _props: Props, _supervisor: ActorRef, name: String) extends { - val props = - _props.withDispatcher( - if (_props.deploy.dispatcher == Deploy.NoDispatcherGiven) CallingThreadDispatcher.Id - else _props.dispatcher) - val dispatcher = _system.dispatchers.lookup(props.dispatcher) - private val disregard = _supervisor match { - case l: LocalActorRef => l.underlying.reserveChild(name) - case r: RepointableActorRef => - r.underlying match { - case _: UnstartedCell => - throw new IllegalStateException( - "cannot attach a TestActor to an unstarted top-level actor, ensure that it is started by sending a message and observing the reply") - case c: ActorCell => c.reserveChild(name) - case o => +@nowarn // 'early initializers' are deprecated on 2.13 and will be replaced with trait parameters on 2.14. https://github.com/akka/akka/issues/26753 +class TestActorRef[T <: Actor](_system: ActorSystem, _props: Props, _supervisor: ActorRef, name: String) + extends LocalActorRef({ + val disregard = _supervisor match { + case l: LocalActorRef => l.underlying.reserveChild(name) + case r: RepointableActorRef => + r.underlying match { + case _: UnstartedCell => + throw new IllegalStateException( + "cannot attach a TestActor to an unstarted top-level actor, ensure that it is started by sending a message and observing the reply") + case c: ActorCell => c.reserveChild(name) + case o => + _system.log.error( + "trying to attach child {} to unknown type of supervisor cell {}, this is not going to end well", + name, + o.getClass) + } + case s => _system.log.error( - "trying to attach child {} to unknown type of supervisor cell {}, this is not going to end well", + "trying to attach child {} to unknown type of supervisor {}, this is not going to end well", name, - o.getClass) + s.getClass) } - case s => - _system.log.error( - "trying to attach child {} to unknown type of supervisor {}, this is not going to end well", - name, - s.getClass) - } -} with LocalActorRef( - _system.asInstanceOf[ActorSystemImpl], - props, - dispatcher, - _system.mailboxes.getMailboxType(props, dispatcher.configurator.config), - _supervisor.asInstanceOf[InternalActorRef], - _supervisor.path / name) { + + _system.asInstanceOf[ActorSystemImpl] + }, { + _props.withDispatcher( + if (_props.deploy.dispatcher == Deploy.NoDispatcherGiven) CallingThreadDispatcher.Id + else _props.dispatcher) + }, { + val props = _props.withDispatcher( + if (_props.deploy.dispatcher == Deploy.NoDispatcherGiven) CallingThreadDispatcher.Id + else _props.dispatcher) + _system.dispatchers.lookup(props.dispatcher) + }, { + val props = _props.withDispatcher( + if (_props.deploy.dispatcher == Deploy.NoDispatcherGiven) CallingThreadDispatcher.Id + else _props.dispatcher) + val dispatcher = _system.dispatchers.lookup(props.dispatcher) + _system.mailboxes.getMailboxType(props, dispatcher.configurator.config) + }, _supervisor.asInstanceOf[InternalActorRef], _supervisor.path / name) { + + val props = _props.withDispatcher( + if (_props.deploy.dispatcher == Deploy.NoDispatcherGiven) CallingThreadDispatcher.Id + else _props.dispatcher) + + val dispatcher = _system.dispatchers.lookup(props.dispatcher) // we need to start ourselves since the creation of an actor has been split into initialization and starting underlying.start() diff --git a/akka-testkit/src/main/scala/akka/testkit/TestActors.scala b/akka-testkit/src/main/scala/akka/testkit/TestActors.scala index fee46cbd2c..1f042a7bb8 100644 --- a/akka-testkit/src/main/scala/akka/testkit/TestActors.scala +++ b/akka-testkit/src/main/scala/akka/testkit/TestActors.scala @@ -4,7 +4,7 @@ package akka.testkit -import akka.actor.{ Actor, ActorRef, Props } +import akka.actor.{ actorRef2Scala, Actor, ActorRef, Props } /** * A collection of common actor patterns used in tests. diff --git a/akka-testkit/src/main/scala/akka/testkit/TestEventListener.scala b/akka-testkit/src/main/scala/akka/testkit/TestEventListener.scala index dd4d72058c..5c834092fa 100644 --- a/akka-testkit/src/main/scala/akka/testkit/TestEventListener.scala +++ b/akka-testkit/src/main/scala/akka/testkit/TestEventListener.scala @@ -11,7 +11,7 @@ import scala.concurrent.duration.Duration import scala.reflect.ClassTag import scala.util.matching.Regex -import akka.actor.{ ActorSystem, DeadLetter, UnhandledMessage } +import akka.actor.{ actorRef2Scala, ActorSystem, DeadLetter, UnhandledMessage } import akka.actor.Dropped import akka.actor.NoSerializationVerificationNeeded import akka.dispatch.sysmsg.{ SystemMessage, Terminate } diff --git a/akka-testkit/src/main/scala/akka/testkit/TestKit.scala b/akka-testkit/src/main/scala/akka/testkit/TestKit.scala index 49b05b3b62..835f50cb75 100644 --- a/akka-testkit/src/main/scala/akka/testkit/TestKit.scala +++ b/akka-testkit/src/main/scala/akka/testkit/TestKit.scala @@ -16,7 +16,7 @@ import scala.language.postfixOps import scala.reflect.ClassTag import scala.util.control.NonFatal -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor._ import akka.actor.DeadLetter @@ -160,8 +160,8 @@ trait TestKitBase { import TestActor.{ Message, NullMessage, RealMessage, Spawn } - implicit val system: ActorSystem - val testKitSettings = TestKitExtension(system) + implicit def system: ActorSystem + def testKitSettings = TestKitExtension(system) private val queue = new LinkedBlockingDeque[Message]() private[akka] var lastMessage: Message = NullMessage @@ -177,7 +177,7 @@ trait TestKitBase { * ActorRef of the test actor. Access is provided to enable e.g. * registration as message target. */ - val testActor: ActorRef = { + lazy val testActor: ActorRef = { val impl = system.asInstanceOf[ExtendedActorSystem] val ref = impl.systemActorOf( TestActor.props(queue).withDispatcher(CallingThreadDispatcher.Id), @@ -261,12 +261,14 @@ trait TestKitBase { case x if x eq Duration.Undefined => duration case x if !x.isFinite => throw new IllegalArgumentException("`end` cannot be infinite") case f: FiniteDuration => f - now + case _ => throw new IllegalArgumentException("`end` cannot be infinite") } private def remainingOrDilated(max: Duration): FiniteDuration = max match { case x if x eq Duration.Undefined => remainingOrDefault case x if !x.isFinite => throw new IllegalArgumentException("max duration cannot be infinite") case f: FiniteDuration => f.dilated + case _ => throw new IllegalArgumentException("max duration cannot be infinite") } /** @@ -965,8 +967,10 @@ trait TestKitBase { * * @since 1.1 */ -@silent // 'early initializers' are deprecated on 2.13 and will be replaced with trait parameters on 2.14. https://github.com/akka/akka/issues/26753 -class TestKit(_system: ActorSystem) extends { implicit val system: ActorSystem = _system } with TestKitBase +@nowarn // 'early initializers' are deprecated on 2.13 and will be replaced with trait parameters on 2.14. https://github.com/akka/akka/issues/26753 +class TestKit(_system: ActorSystem) extends TestKitBase { + implicit val system: ActorSystem = _system +} object TestKit { diff --git a/akka-testkit/src/main/scala/akka/testkit/javadsl/TestKit.scala b/akka-testkit/src/main/scala/akka/testkit/javadsl/TestKit.scala index c65209088e..22d64f7c27 100644 --- a/akka-testkit/src/main/scala/akka/testkit/javadsl/TestKit.scala +++ b/akka-testkit/src/main/scala/akka/testkit/javadsl/TestKit.scala @@ -10,7 +10,7 @@ import java.util.function.{ Supplier, Function => JFunction } import scala.annotation.varargs import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import akka.actor._ import akka.annotation.InternalApi @@ -535,7 +535,7 @@ class TestKit(system: ActorSystem) { * Use this variant to implement more complicated or conditional * processing. */ - @silent("deprecated") + @nowarn("msg=deprecated") def expectMsgPF[T](max: java.time.Duration, hint: String, f: JFunction[Any, T]): T = expectMsgPF(max.asScala, hint, f) /** @@ -729,7 +729,7 @@ class TestKit(system: ActorSystem) { * @return the last received message, i.e. the first one for which the * partial function returned true */ - @silent("deprecated") + @nowarn("msg=deprecated") def fishForMessage(max: java.time.Duration, hint: String, f: JFunction[Any, Boolean]): Any = fishForMessage(max.asScala, hint, f) @@ -747,7 +747,7 @@ class TestKit(system: ActorSystem) { /** * Same as `fishForMessage`, but gets a different partial function and returns properly typed message. */ - @silent("deprecated") + @nowarn("msg=deprecated") def fishForSpecificMessage[T](max: java.time.Duration, hint: String, f: JFunction[Any, T]): T = fishForSpecificMessage(max.asScala, hint, f) diff --git a/akka-testkit/src/test/scala/akka/testkit/AkkaSpec.scala b/akka-testkit/src/test/scala/akka/testkit/AkkaSpec.scala index 3e5cbf05ac..7352b0b9e0 100644 --- a/akka-testkit/src/test/scala/akka/testkit/AkkaSpec.scala +++ b/akka-testkit/src/test/scala/akka/testkit/AkkaSpec.scala @@ -74,7 +74,7 @@ abstract class AkkaSpec(_system: ActorSystem) def this() = this(ActorSystem(TestKitUtils.testNameFromCallStack(classOf[AkkaSpec], "".r), AkkaSpec.testConf)) - val log: LoggingAdapter = Logging(system, this.getClass) + val log: LoggingAdapter = Logging(system, Logging.simpleName(this)) override val invokeBeforeAllAndAfterAllEvenIfNoTestsAreExpected = true diff --git a/akka-testkit/src/test/scala/akka/testkit/AkkaSpecSpec.scala b/akka-testkit/src/test/scala/akka/testkit/AkkaSpecSpec.scala index 7cc2ecfb9b..a4c7470bfc 100644 --- a/akka-testkit/src/test/scala/akka/testkit/AkkaSpecSpec.scala +++ b/akka-testkit/src/test/scala/akka/testkit/AkkaSpecSpec.scala @@ -7,7 +7,7 @@ package akka.testkit import scala.concurrent.Await import scala.concurrent.duration._ -import com.github.ghik.silencer.silent +import scala.annotation.nowarn import com.typesafe.config.ConfigFactory import language.postfixOps import org.scalatest.matchers.should.Matchers @@ -17,7 +17,7 @@ import akka.actor._ import akka.actor.DeadLetter import akka.pattern.ask -@silent +@nowarn class AkkaSpecSpec extends AnyWordSpec with Matchers { "An AkkaSpec" must { @@ -42,11 +42,11 @@ class AkkaSpecSpec extends AnyWordSpec with Matchers { "akka.actor.debug.event-stream" -> true, "akka.loglevel" -> "DEBUG", "akka.stdout-loglevel" -> "DEBUG") - val system = ActorSystem("AkkaSpec1", ConfigFactory.parseMap(conf.asJava).withFallback(AkkaSpec.testConf)) + val localSystem = ActorSystem("AkkaSpec1", ConfigFactory.parseMap(conf.asJava).withFallback(AkkaSpec.testConf)) var refs = Seq.empty[ActorRef] - val spec = new AkkaSpec(system) { refs = Seq(testActor, system.actorOf(Props.empty, "name")) } + val spec = new AkkaSpec(localSystem) { refs = Seq(testActor, localSystem.actorOf(Props.empty, "name")) } refs.foreach(_.isTerminated should not be true) - TestKit.shutdownActorSystem(system) + TestKit.shutdownActorSystem(localSystem) spec.awaitCond(refs.forall(_.isTerminated), 2 seconds) } diff --git a/akka-testkit/src/test/scala/akka/testkit/TestActorsSpec.scala b/akka-testkit/src/test/scala/akka/testkit/TestActorsSpec.scala index fb103b6a14..e7cbc17d5d 100644 --- a/akka-testkit/src/test/scala/akka/testkit/TestActorsSpec.scala +++ b/akka-testkit/src/test/scala/akka/testkit/TestActorsSpec.scala @@ -4,6 +4,7 @@ package akka.testkit +import akka.actor.actorRef2Scala class TestActorsSpec extends AkkaSpec with ImplicitSender { import TestActors.{ echoActorProps, forwardActorProps } diff --git a/akka-testkit/src/test/scala/akka/testkit/TestProbeSpec.scala b/akka-testkit/src/test/scala/akka/testkit/TestProbeSpec.scala index bdcbd4fdf3..e7ac9529fd 100644 --- a/akka-testkit/src/test/scala/akka/testkit/TestProbeSpec.scala +++ b/akka-testkit/src/test/scala/akka/testkit/TestProbeSpec.scala @@ -141,7 +141,7 @@ class TestProbeSpec extends AkkaSpec with DefaultTimeout with Eventually { "be able to expect primitive types" in { for (_ <- 1 to 7) testActor ! 42 - expectMsgType[Int] should ===(42) + (expectMsgType[Int]: Int) should ===(42) expectMsgAnyClassOf(classOf[Int]) should ===(42) expectMsgAllClassOf(classOf[Int]) should ===(Seq(42)) expectMsgAllConformingOf(classOf[Int]) should ===(Seq(42)) @@ -173,7 +173,7 @@ class TestProbeSpec extends AkkaSpec with DefaultTimeout with Eventually { probe.ref ! "done" val msg: String = probe.fishForSpecificMessage() { - case msg @ "fishForMe" => msg + case msg: String if msg == "fishForMe" => msg } msg should be("fishForMe") diff --git a/akka-testkit/src/test/scala/akka/testkit/metrics/MetricsKitOps.scala b/akka-testkit/src/test/scala/akka/testkit/metrics/MetricsKitOps.scala index c548670037..6a41aeda7b 100644 --- a/akka-testkit/src/test/scala/akka/testkit/metrics/MetricsKitOps.scala +++ b/akka-testkit/src/test/scala/akka/testkit/metrics/MetricsKitOps.scala @@ -9,6 +9,7 @@ import java.util import com.codahale.metrics._ import com.codahale.metrics.jvm import com.codahale.metrics.jvm.MemoryUsageGaugeSet +import org.scalatest.Notifying /** * User Land operations provided by the [[MetricsKit]]. @@ -16,15 +17,15 @@ import com.codahale.metrics.jvm.MemoryUsageGaugeSet * Extracted to give easy overview of user-API detached from MetricsKit internals. */ private[akka] trait MetricsKitOps extends MetricKeyDSL { - this: MetricsKit => + this: MetricsKit with Notifying => - type MetricKey = MetricKeyDSL#MetricKey + type MetricKeyType = MetricKeyDSL#MetricKey /** Simple thread-safe counter, backed by `java.util.concurrent.LongAdder` so can pretty efficiently work even when hit by multiple threads */ - def counter(key: MetricKey): Counter = registry.counter(key.toString) + def counter(key: MetricKeyType): Counter = registry.counter(key.toString) /** Simple averaging Gauge, which exposes an arithmetic mean of the values added to it. */ - def averageGauge(key: MetricKey): AveragingGauge = getOrRegister(key.toString, new AveragingGauge) + def averageGauge(key: MetricKeyType): AveragingGauge = getOrRegister(key.toString, new AveragingGauge) /** * Used to measure timing of known number of operations over time. @@ -32,7 +33,7 @@ private[akka] trait MetricsKitOps extends MetricKeyDSL { * * Do not use for short running pieces of code. */ - def timedWithKnownOps[T](key: MetricKey, ops: Long)(run: => T): T = { + def timedWithKnownOps[T](key: MetricKeyType, ops: Long)(run: => T): T = { val c = getOrRegister(key.toString, new KnownOpsInTimespanTimer(expectedOps = ops)) try run finally c.stop() @@ -46,7 +47,7 @@ private[akka] trait MetricsKitOps extends MetricKeyDSL { * @param unitString just for human readable output, during console printing */ def hdrHistogram( - key: MetricKey, + key: MetricKeyType, highestTrackableValue: Long, numberOfSignificantValueDigits: Int, unitString: String = ""): HdrHistogram = @@ -59,7 +60,7 @@ private[akka] trait MetricsKitOps extends MetricKeyDSL { * * Backed by codahale `ExponentiallyDecayingReservoir`. */ - def histogram(key: MetricKey): Histogram = { + def histogram(key: MetricKeyType): Histogram = { registry.histogram((key / "histogram").toString) } @@ -77,7 +78,7 @@ private[akka] trait MetricsKitOps extends MetricKeyDSL { * * Also allows to `MemoryUsageSnapshotting.getHeapSnapshot` to obtain memory usage numbers at given point in time. */ - def measureMemory(key: MetricKey): MemoryUsageGaugeSet with MemoryUsageSnapshotting = { + def measureMemory(key: MetricKeyType): MemoryUsageGaugeSet with MemoryUsageSnapshotting = { val gaugeSet = new jvm.MemoryUsageGaugeSet() with MemoryUsageSnapshotting { val prefix = key / "mem" } @@ -87,11 +88,11 @@ private[akka] trait MetricsKitOps extends MetricKeyDSL { } /** Enable GC measurements */ - def measureGc(key: MetricKey) = + def measureGc(key: MetricKeyType) = registry.registerAll(new jvm.GarbageCollectorMetricSet() with MetricsPrefix { val prefix = key / "gc" }) /** Enable File Descriptor measurements */ - def measureFileDescriptors(key: MetricKey) = + def measureFileDescriptors(key: MetricKeyType) = registry.registerAll(new FileDescriptorMetricSet() with MetricsPrefix { val prefix = key / "file-descriptors" }) } diff --git a/build.sbt b/build.sbt index f74162f08e..f76c5bd015 100644 --- a/build.sbt +++ b/build.sbt @@ -12,7 +12,6 @@ enablePlugins( JavaFormatterPlugin) disablePlugins(MimaPlugin) - // check format and headers TaskKey[Unit]("verifyCodeFmt") := { javafmtCheckAll.all(ScopeFilter(inAnyProject)).result.value.toEither.left.foreach { _ => @@ -31,12 +30,9 @@ addCommandAlias("applyCodeStyle", "headerCreateAll; javafmtAll; scalafmtAll") addCommandAlias( name = "fixall", - value = - ";scalafixEnable; scalafixAll; scalafmtAll; test:compile; multi-jvm:compile; reload") + value = ";scalafixEnable; scalafixAll; scalafmtAll; test:compile; multi-jvm:compile; reload") -addCommandAlias( - name = "sortImports", - value = ";scalafixEnable; scalafixAll SortImports; scalafmtAll") +addCommandAlias(name = "sortImports", value = ";scalafixEnable; scalafixAll SortImports; scalafmtAll") import akka.AkkaBuild._ import akka.{ AkkaBuild, Dependencies, OSGi, Protobuf, SigarLoader, VersionGenerator } @@ -107,7 +103,15 @@ lazy val root = Project(id = "akka", base = file(".")) .aggregate(aggregatedProjects: _*) .enablePlugins(PublishRsyncPlugin) .settings(rootSettings: _*) - .settings(unidocRootIgnoreProjects := Seq(remoteTests, benchJmh, protobuf, protobufV3, akkaScalaNightly, docs)) + .settings( + unidocRootIgnoreProjects := Seq( + remoteTests, + benchJmh, + protobuf, + protobufV3, + akkaScalaNightly, + docs, + serialversionRemoverPlugin)) .settings(unmanagedSources in (Compile, headerCreate) := (baseDirectory.value / "project").**("*.scala").get) .enablePlugins(CopyrightHeaderForBuild) @@ -120,6 +124,7 @@ lazy val actor = akkaModule("akka-actor") (scalaSource in Compile).value.getParentFile / s"scala-$ver" }) .settings(VersionGenerator.settings) + .settings(serialversionRemoverPluginSettings) .enablePlugins(BoilerplatePlugin) lazy val actorTests = akkaModule("akka-actor-tests") @@ -571,6 +576,25 @@ lazy val billOfMaterials = Project("akka-bill-of-materials", file("akka-bill-of- bomIncludeProjects := userProjects, description := s"${description.value} (depending on Scala ${CrossVersion.binaryScalaVersion(scalaVersion.value)})") +lazy val serialversionRemoverPlugin = + Project(id = "serialVersionRemoverPlugin", base = file("plugins/serialversion-remover-plugin")).settings( + scalaVersion := akka.Dependencies.scala3Version, + libraryDependencies += ("org.scala-lang" %% "scala3-compiler" % akka.Dependencies.scala3Version), + Compile / doc / sources := Nil, + publishArtifact in Compile := false) + +lazy val serialversionRemoverPluginSettings = { + if (akka.Dependencies.getScalaVersion() == akka.Dependencies.scala3Version) { + Seq( + autoCompilerPlugins := true, + scalacOptions in Compile += ( + "-Xplugin:" + (Keys.`package` in (serialversionRemoverPlugin, Compile)).value.getAbsolutePath.toString + )) + } else { + Seq() + } +} + def akkaModule(name: String): Project = Project(id = name, base = file(name)) .enablePlugins(ReproducibleBuildsPlugin) diff --git a/plugins/serialversion-remover-plugin/src/main/resources/plugin.properties b/plugins/serialversion-remover-plugin/src/main/resources/plugin.properties new file mode 100644 index 0000000000..69ed17b5ba --- /dev/null +++ b/plugins/serialversion-remover-plugin/src/main/resources/plugin.properties @@ -0,0 +1 @@ +pluginClass=akka.SerialVersionRemoverPlugin diff --git a/plugins/serialversion-remover-plugin/src/main/scala/akka/Plugin.scala b/plugins/serialversion-remover-plugin/src/main/scala/akka/Plugin.scala new file mode 100644 index 0000000000..331d68e702 --- /dev/null +++ b/plugins/serialversion-remover-plugin/src/main/scala/akka/Plugin.scala @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2021 Lightbend Inc. + */ + +package akka + +import dotty.tools.dotc.ast.Trees._ +import dotty.tools.dotc.ast.tpd +import dotty.tools.dotc.core.Contexts.Context +import dotty.tools.dotc.core.Symbols._ +import dotty.tools.dotc.plugins.{ PluginPhase, StandardPlugin } +import dotty.tools.backend.jvm.GenBCode +import dotty.tools.dotc.core.Flags._ +import dotty.tools.dotc.typer.FrontEnd + +class SerialVersionRemoverPlugin extends StandardPlugin { + + val name = "serialversion-remover-plugin" + val description = "Remove SerialVersionUid annotation from traits" + + def init(options: List[String]): List[PluginPhase] = { + (new SerialVersionRemoverPhase()) :: Nil + } +} + +class SerialVersionRemoverPhase extends PluginPhase { + import tpd._ + + val phaseName = "serialversion-remover" + + override val runsBefore = Set(GenBCode.name) + + override def transformTypeDef(tree: TypeDef)(implicit ctx: Context): Tree = { + val symbol = tree.symbol + if (tree.symbol.getAnnotation(defn.SerialVersionUIDAnnot).isDefined && tree.symbol.is(Trait)) { + tree.symbol.removeAnnotation(defn.SerialVersionUIDAnnot) + } + + tree + } + +} diff --git a/project/AkkaBuild.scala b/project/AkkaBuild.scala index 9024946b39..b040628b3d 100644 --- a/project/AkkaBuild.scala +++ b/project/AkkaBuild.scala @@ -5,7 +5,7 @@ package akka import java.io.FileReader -import java.io.{FileInputStream, InputStreamReader} +import java.io.{ FileInputStream, InputStreamReader } import java.util.Properties import java.time.format.DateTimeFormatter import java.time.ZonedDateTime @@ -25,20 +25,18 @@ object AkkaBuild { val parallelExecutionByDefault = false // TODO: enable this once we're sure it does not break things - lazy val buildSettings = Def.settings( - organization := "com.typesafe.akka", - Dependencies.Versions) + lazy val buildSettings = Def.settings(organization := "com.typesafe.akka", Dependencies.Versions) lazy val rootSettings = Def.settings( UnidocRoot.akkaSettings, Protobuf.settings, - parallelExecution in GlobalScope := System.getProperty("akka.parallelExecution", parallelExecutionByDefault.toString).toBoolean, + parallelExecution in GlobalScope := System + .getProperty("akka.parallelExecution", parallelExecutionByDefault.toString) + .toBoolean, // used for linking to API docs (overwrites `project-info.version`) - ThisBuild / projectInfoVersion := { if (isSnapshot.value) "snapshot" else version.value } - ) + ThisBuild / projectInfoVersion := { if (isSnapshot.value) "snapshot" else version.value }) - lazy val mayChangeSettings = Seq( - description := """|This module of Akka is marked as + lazy val mayChangeSettings = Seq(description := """|This module of Akka is marked as |'may change', which means that it is in early |access mode, which also means that it is not covered |by commercial support. An module marked 'may change' doesn't @@ -59,18 +57,20 @@ object AkkaBuild { (outputPath / "[artifact]-[revision](-[classifier]).[ext]").absolutePath val resolver = Resolver.file("user-publish-m2-local", new File(path)) - (resolver, Seq( - otherResolvers := resolver :: publishTo.value.toList, - publishM2Configuration := Classpaths.publishConfig( - publishMavenStyle.value, - deliverPattern(crossTarget.value), - if (isSnapshot.value) "integration" else "release", - ivyConfigurations.value.map(c => ConfigRef(c.name)).toVector, - artifacts = packagedArtifacts.value.toVector, - resolverName = resolver.name, - checksums = checksums.in(publishM2).value.toVector, - logging = ivyLoggingLevel.value, - overwrite = true))) + ( + resolver, + Seq( + otherResolvers := resolver :: publishTo.value.toList, + publishM2Configuration := Classpaths.publishConfig( + publishMavenStyle.value, + deliverPattern(crossTarget.value), + if (isSnapshot.value) "integration" else "release", + ivyConfigurations.value.map(c => ConfigRef(c.name)).toVector, + artifacts = packagedArtifacts.value.toVector, + resolverName = resolver.name, + checksums = checksums.in(publishM2).value.toVector, + logging = ivyLoggingLevel.value, + overwrite = true))) } lazy val resolverSettings = Def.settings( @@ -82,18 +82,31 @@ object AkkaBuild { if (System.getProperty("akka.build.useSnapshotSonatypeResolver", "false").toBoolean) resolvers += Resolver.sonatypeRepo("snapshots") else Seq.empty, - pomIncludeRepository := (_ => false), // do not leak internal repositories during staging + pomIncludeRepository := (_ => false) // do not leak internal repositories during staging ) private def allWarnings: Boolean = System.getProperty("akka.allwarnings", "false").toBoolean - final val DefaultScalacOptions = Seq( - "-encoding", "UTF-8", - "-feature", - "-unchecked", - "-Xlog-reflective-calls", - // 'blessed' since 2.13.1 - "-language:higherKinds") + final val DefaultScalacOptions = { + if (Dependencies.getScalaVersion().startsWith("3.0")) { + Seq( + "-encoding", + "UTF-8", + "-feature", + "-unchecked", + // 'blessed' since 2.13.1 + "-language:higherKinds") + } else { + Seq( + "-encoding", + "UTF-8", + "-feature", + "-unchecked", + "-Xlog-reflective-calls", + // 'blessed' since 2.13.1 + "-language:higherKinds") + } + } // -XDignore.symbol.file suppresses sun.misc.Unsafe warnings final val DefaultJavacOptions = Seq("-encoding", "UTF-8", "-Xlint:unchecked", "-XDignore.symbol.file") @@ -107,30 +120,26 @@ object AkkaBuild { JdkOptions.targetJdkScalacOptions(targetSystemJdk.value, optionalDir(jdk8home.value), fullJavaHomes.value), scalacOptions in Compile ++= (if (allWarnings) Seq("-deprecation") else Nil), scalacOptions in Test := (scalacOptions in Test).value.filterNot(opt => - opt == "-Xlog-reflective-calls" || opt.contains("genjavadoc")), + opt == "-Xlog-reflective-calls" || opt.contains("genjavadoc")), javacOptions in Compile ++= { DefaultJavacOptions ++ - JdkOptions.targetJdkJavacOptions(targetSystemJdk.value, optionalDir(jdk8home.value), fullJavaHomes.value) + JdkOptions.targetJdkJavacOptions(targetSystemJdk.value, optionalDir(jdk8home.value), fullJavaHomes.value) }, javacOptions in Test ++= DefaultJavacOptions ++ JdkOptions.targetJdkJavacOptions(targetSystemJdk.value, optionalDir(jdk8home.value), fullJavaHomes.value), javacOptions in Compile ++= (if (allWarnings) Seq("-Xlint:deprecation") else Nil), javacOptions in doc := Seq(), - crossVersion := CrossVersion.binary, - ivyLoggingLevel in ThisBuild := UpdateLogging.Quiet, - licenses := Seq(("Apache-2.0", url("https://www.apache.org/licenses/LICENSE-2.0.html"))), homepage := Some(url("https://akka.io/")), description := "Akka is a toolkit for building highly concurrent, distributed, and resilient message-driven applications for Java and Scala.", - scmInfo := Some(ScmInfo( - url("https://github.com/akka/akka"), - "scm:git:https://github.com/akka/akka.git", - "scm:git:git@github.com:akka/akka.git", - )), + scmInfo := Some( + ScmInfo( + url("https://github.com/akka/akka"), + "scm:git:https://github.com/akka/akka.git", + "scm:git:git@github.com:akka/akka.git")), apiURL := Some(url(s"https://doc.akka.io/api/akka/${version.value}")), - initialCommands := """|import language.postfixOps |import akka.actor._ @@ -146,12 +155,10 @@ object AkkaBuild { |implicit def ec = system.dispatcher |implicit val timeout: Timeout = Timeout(5 seconds) |""".stripMargin, - /** * Test settings */ fork in Test := true, - // default JVM config for tests javaOptions in Test ++= { val defaults = Seq( @@ -159,10 +166,10 @@ object AkkaBuild { "-XX:+UseG1GC", // most tests actually don't really use _that_ much memory (>1g usually) // twice used (and then some) keeps G1GC happy - very few or to no full gcs - "-Xms3g", "-Xmx3g", + "-Xms3g", + "-Xmx3g", // increase stack size (todo why?) "-Xss2m", - // ## extra memory/gc tuning // this breaks jstat, but could avoid costly syncs to disc see http://www.evanjones.ca/jvm-mmap-pause.html "-XX:+PerfDisableSharedMem", @@ -171,7 +178,6 @@ object AkkaBuild { "-XX:MaxGCPauseMillis=300", // nio direct memory limit for artery/aeron (probably) "-XX:MaxDirectMemorySize=256m", - // faster random source "-Djava.security.egd=file:/dev/./urandom") @@ -180,17 +186,14 @@ object AkkaBuild { else defaults }, - // all system properties passed to sbt prefixed with "akka." will be passed on to the forked jvms as is javaOptions in Test := { val base = (javaOptions in Test).value val akkaSysProps: Seq[String] = - sys.props.filter(_._1.startsWith("akka")) - .map { case (key, value) => s"-D$key=$value" }(breakOut) + sys.props.filter(_._1.startsWith("akka")).map { case (key, value) => s"-D$key=$value" }(breakOut) base ++ akkaSysProps }, - // with forked tests the working directory is set to each module's home directory // rather than the Akka root, some tests depend on Akka root being working dir, so reset testGrouping in Test := { @@ -199,31 +202,32 @@ object AkkaBuild { original.map { group => group.runPolicy match { case Tests.SubProcess(forkOptions) => - group.copy(runPolicy = Tests.SubProcess(forkOptions.withWorkingDirectory( - workingDirectory = Some(new File(System.getProperty("user.dir")))))) + // format: off + group.copy(runPolicy = Tests.SubProcess( + forkOptions.withWorkingDirectory(workingDirectory = Some(new File(System.getProperty("user.dir")))))) + // format: on case _ => group } } }, - - parallelExecution in Test := System.getProperty("akka.parallelExecution", parallelExecutionByDefault.toString).toBoolean, + parallelExecution in Test := System + .getProperty("akka.parallelExecution", parallelExecutionByDefault.toString) + .toBoolean, logBuffered in Test := System.getProperty("akka.logBufferedTests", "false").toBoolean, - // show full stack traces and test case durations testOptions in Test += Tests.Argument("-oDF"), - mavenLocalResolverSettings, docLintingSettings, JdkOptions.targetJdkSettings, - // a workaround for https://github.com/akka/akka/issues/27661 // see also project/Protobuf.scala that introduces /../ to make "intellij happy" MultiJvm / assembly / fullClasspath := { val old = (MultiJvm / assembly / fullClasspath).value.toVector val files = old.map(_.data.getCanonicalFile).distinct - files map { x => Attributed.blank(x) } - }, - ) + files.map { x => + Attributed.blank(x) + } + }) private def optionalDir(path: String): Option[File] = Option(path).filter(_.nonEmpty).map { path => @@ -239,9 +243,7 @@ object AkkaBuild { javacOptions in doc ++= { if (JdkOptions.isJdk8) Seq("-Xdoclint:none") else Seq("-Xdoclint:none", "--ignore-source-errors") - } - ) - + }) def loadSystemProperties(fileName: String): Unit = { import scala.collection.JavaConverters._ diff --git a/project/AkkaDisciplinePlugin.scala b/project/AkkaDisciplinePlugin.scala index 105eea7482..058d8d0658 100644 --- a/project/AkkaDisciplinePlugin.scala +++ b/project/AkkaDisciplinePlugin.scala @@ -63,22 +63,48 @@ object AkkaDisciplinePlugin extends AutoPlugin { "akka-stream-tests-tck", "akka-testkit") - lazy val silencerSettings = { - val silencerVersion = "1.7.1" - val libs = Seq( - compilerPlugin(("com.github.ghik" %% "silencer-plugin" % silencerVersion).cross(CrossVersion.patch)), - ("com.github.ghik" %% "silencer-lib" % silencerVersion % Provided).cross(CrossVersion.patch)) - Seq(libraryDependencies ++= (if (autoScalaLibrary.value) libs else Nil)) + val defaultScalaOptions = "-Wconf:cat=unused-nowarn:s,any:e" + + lazy val nowarnSettings = { + Dependencies.getScalaVersion() match { + case three if three.startsWith("3.0") => + Seq(Compile / scalacOptions := Seq(), Compile / doc / scalacOptions := Seq()) + case _ => + Seq( + Compile / scalacOptions += defaultScalaOptions, + Test / scalacOptions += defaultScalaOptions, + Compile / doc / scalacOptions := Seq()) + } + } + + /** + * We are a little less strict in docs + */ + val docs = { + Dependencies.getScalaVersion() match { + case _ => + Seq( + Compile / scalacOptions -= defaultScalaOptions, + Compile / scalacOptions += "-Wconf:cat=unused:s,cat=deprecation:s,cat=unchecked:s,any:e", + Test / scalacOptions --= Seq("-Xlint", "-unchecked", "-deprecation"), + Test / scalacOptions -= defaultScalaOptions, + Test / scalacOptions += "-Wconf:cat=unused:s,cat=deprecation:s,cat=unchecked:s,any:e", + Compile / doc / scalacOptions := Seq()) + } } lazy val disciplineSettings = if (enabled) { - silencerSettings ++ Seq( + nowarnSettings ++ Seq( Compile / scalacOptions ++= Seq("-Xfatal-warnings"), Test / scalacOptions --= testUndicipline, Compile / javacOptions ++= ( - if (!nonFatalJavaWarningsFor(name.value)) Seq("-Werror", "-Xlint:deprecation", "-Xlint:unchecked") - else Seq.empty + if (Dependencies.getScalaVersion().startsWith("3.0")) { + Seq() + } else { + if (!nonFatalJavaWarningsFor(name.value)) Seq("-Werror", "-Xlint:deprecation", "-Xlint:unchecked") + else Seq.empty + } ), Compile / javacOptions in doc := Seq("-Xdoclint:none"), Compile / scalacOptions ++= (CrossVersion.partialVersion(scalaVersion.value) match { @@ -107,7 +133,7 @@ object AkkaDisciplinePlugin extends AutoPlugin { Compile / console / scalacOptions --= disciplineScalacOptions.toSeq) } else { // we still need these in opt-out since the annotations are present - silencerSettings ++ Seq(Compile / scalacOptions += "-deprecation") + nowarnSettings ++ Seq(Compile / scalacOptions += "-deprecation") } val testUndicipline = Seq("-Ywarn-dead-code" // '???' used in compile only specs @@ -133,23 +159,4 @@ object AkkaDisciplinePlugin extends AutoPlugin { "-Ypartial-unification", "-Ywarn-extra-implicit") - /** - * We are a little less strict in docs - */ - val docs = Seq( - scalacOptions ++= Seq( - // In docs, 'unused' variables can be useful for naming and showing the type - "-P:silencer:globalFilters=is never used", - // Import statements are often duplicated across multiple snippets in one file - "-P:silencer:globalFilters=Unused import", - // We keep documentation for this old API around for a while: - "-P:silencer:globalFilters=in object Dns is deprecated", - "-P:silencer:globalFilters=in class Dns is deprecated", - // Because we sometimes wrap things in a class: - "-P:silencer:globalFilters=The outer reference in this type test cannot be checked at run time", - // Because we show some things that are deprecated in - // 2.13 but don't have a replacement that was in 2.12: - "-P:silencer:globalFilters=deprecated \\(since 2.13.0\\)" - ) - ) } diff --git a/project/AutomaticModuleName.scala b/project/AutomaticModuleName.scala index 88c4dc9e89..788704f520 100644 --- a/project/AutomaticModuleName.scala +++ b/project/AutomaticModuleName.scala @@ -4,7 +4,7 @@ package akka -import sbt.{Def, _} +import sbt.{ Def, _ } import sbt.Keys._ /** @@ -15,10 +15,9 @@ import sbt.Keys._ * The names carry a lot of implications and DO NOT have to always align 1:1 with the group ids or package names, * though there should be of course a strong relationship between them. */ -object AutomaticModuleName { +object AutomaticModuleName { private val AutomaticModuleName = "Automatic-Module-Name" - def settings(name: String): Seq[Def.Setting[Task[Seq[PackageOption]]]] = Seq( - packageOptions in (Compile, packageBin) += Package.ManifestAttributes(AutomaticModuleName -> name) - ) + def settings(name: String): Seq[Def.Setting[Task[Seq[PackageOption]]]] = + Seq(packageOptions in (Compile, packageBin) += Package.ManifestAttributes(AutomaticModuleName -> name)) } diff --git a/project/CopyrightHeader.scala b/project/CopyrightHeader.scala index 94f0488306..a4403206d2 100644 --- a/project/CopyrightHeader.scala +++ b/project/CopyrightHeader.scala @@ -30,13 +30,14 @@ trait CopyrightHeader extends AutoPlugin { override def projectSettings: Seq[Def.Setting[_]] = Def.settings(headerMappingSettings, additional) - def additional: Seq[Def.Setting[_]] = Def.settings((compile in Compile) := { - (headerCreate in Compile).value - (compile in Compile).value - }, (compile in Test) := { - (headerCreate in Test).value - (compile in Test).value - }) + def additional: Seq[Def.Setting[_]] = + Def.settings((compile in Compile) := { + (headerCreate in Compile).value + (compile in Compile).value + }, (compile in Test) := { + (headerCreate in Test).value + (compile in Test).value + }) // We hard-code this so PR's created in year X will not suddenly fail in X+1. // Of course we should remember to update it early in the year. diff --git a/project/CopyrightHeaderForBoilerplate.scala b/project/CopyrightHeaderForBoilerplate.scala index 3acd7ec9b4..510c724e73 100644 --- a/project/CopyrightHeaderForBoilerplate.scala +++ b/project/CopyrightHeaderForBoilerplate.scala @@ -7,12 +7,12 @@ package akka import de.heikoseeberger.sbtheader.HeaderPlugin import de.heikoseeberger.sbtheader.HeaderPlugin.autoImport._ import sbt.Keys.sourceDirectory -import sbt.{Compile, Def, Plugins, Test, inConfig, _} +import sbt.{ Compile, Def, Plugins, Test, inConfig, _ } import spray.boilerplate.BoilerplatePlugin object CopyrightHeaderForBoilerplate extends CopyrightHeader { override def requires: Plugins = BoilerplatePlugin && HeaderPlugin - + override protected def headerMappingSettings: Seq[Def.Setting[_]] = { super.headerMappingSettings Seq(Compile, Test).flatMap { config => @@ -20,10 +20,7 @@ object CopyrightHeaderForBoilerplate extends CopyrightHeader { Seq( headerSources in config ++= (((sourceDirectory in config).value / "boilerplate") ** "*.template").get, - headerMappings := headerMappings.value ++ Map( - HeaderFileType("template") -> cStyleComment - ) - ) + headerMappings := headerMappings.value ++ Map(HeaderFileType("template") -> cStyleComment)) } } } diff --git a/project/CopyrightHeaderForBuild.scala b/project/CopyrightHeaderForBuild.scala index 035bbf4ad5..6e75543a95 100644 --- a/project/CopyrightHeaderForBuild.scala +++ b/project/CopyrightHeaderForBuild.scala @@ -4,9 +4,9 @@ package akka -import de.heikoseeberger.sbtheader.HeaderPlugin.autoImport.{HeaderFileType, headerMappings, headerSources} +import de.heikoseeberger.sbtheader.HeaderPlugin.autoImport.{ headerMappings, headerSources, HeaderFileType } import sbt.Keys.baseDirectory -import sbt.{Compile, Def, PluginTrigger, Test, inConfig, _} +import sbt.{ Compile, Def, PluginTrigger, Test, inConfig, _ } object CopyrightHeaderForBuild extends CopyrightHeader { override def trigger: PluginTrigger = noTrigger @@ -16,10 +16,7 @@ object CopyrightHeaderForBuild extends CopyrightHeader { inConfig(config) { Seq( headerSources in config ++= (((baseDirectory in config).value / "project") ** "*.scala").get, - headerMappings := headerMappings.value ++ Map( - HeaderFileType.scala -> cStyleComment - ) - ) + headerMappings := headerMappings.value ++ Map(HeaderFileType.scala -> cStyleComment)) } } } diff --git a/project/CopyrightHeaderForJdk9.scala b/project/CopyrightHeaderForJdk9.scala index f9d0bff210..e5e0bfa165 100644 --- a/project/CopyrightHeaderForJdk9.scala +++ b/project/CopyrightHeaderForJdk9.scala @@ -6,8 +6,7 @@ package akka import de.heikoseeberger.sbtheader.HeaderPlugin.autoImport.headerSources import sbt.Keys.sourceDirectory -import sbt.{Compile, Def, Test, _} - +import sbt.{ Compile, Def, Test, _ } object CopyrightHeaderForJdk9 extends CopyrightHeader { @@ -22,7 +21,6 @@ object CopyrightHeaderForJdk9 extends CopyrightHeader { headerSources in Compile ++= (((sourceDirectory in Compile).value / JAVA_SOURCE_DIRECTORY) ** "*.java").get, headerSources in Test ++= - (((sourceDirectory in Test).value / JAVA_TEST_SOURCE_DIRECTORY) ** "*.java").get, - ) + (((sourceDirectory in Test).value / JAVA_TEST_SOURCE_DIRECTORY) ** "*.java").get) } } diff --git a/project/CopyrightHeaderForProtobuf.scala b/project/CopyrightHeaderForProtobuf.scala index 0c25a2037a..dadb548b48 100644 --- a/project/CopyrightHeaderForProtobuf.scala +++ b/project/CopyrightHeaderForProtobuf.scala @@ -4,9 +4,9 @@ package akka -import de.heikoseeberger.sbtheader.HeaderPlugin.autoImport.{HeaderFileType, headerMappings, headerSources} +import de.heikoseeberger.sbtheader.HeaderPlugin.autoImport.{ headerMappings, headerSources, HeaderFileType } import sbt.Keys.sourceDirectory -import sbt.{Compile, Def, Test, inConfig, _} +import sbt.{ Compile, Def, Test, inConfig, _ } object CopyrightHeaderForProtobuf extends CopyrightHeader { override protected def headerMappingSettings: Seq[Def.Setting[_]] = { @@ -16,10 +16,7 @@ object CopyrightHeaderForProtobuf extends CopyrightHeader { Seq( headerSources in config ++= (((sourceDirectory in config).value / "protobuf") ** "*.proto").get, - headerMappings := headerMappings.value ++ Map( - HeaderFileType("proto") -> cStyleComment - ) - ) + headerMappings := headerMappings.value ++ Map(HeaderFileType("proto") -> cStyleComment)) } } } diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 28e21757d2..6a1098fdf5 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -7,6 +7,7 @@ package akka import sbt._ import Keys._ import scala.language.implicitConversions +import dotty.tools.sbtplugin.DottyPlugin.autoImport.DottyCompatModuleID object Dependencies { import DependencyHelpers._ @@ -27,33 +28,51 @@ object Dependencies { val jacksonVersion = "2.10.5" val jacksonDatabindVersion = "2.10.5.1" - val scala212Version = "2.12.11" + val scala212Version = "2.12.13" val scala213Version = "2.13.3" + val scala3Version = "3.0.0-M3" val reactiveStreamsVersion = "1.0.3" val sslConfigVersion = "0.4.2" - val scalaTestVersion = "3.1.4" + val scalaTestVersion = { + if (getScalaVersion().startsWith("3.0")) { + "3.2.3" + } else { + "3.1.4" + } + } + val scalaTestScalaCheckVersion = { + if (getScalaVersion().startsWith("3.0")) { + "1-15" + } else { + "1-14" + } + } val scalaCheckVersion = "1.15.1" + def getScalaVersion() = { + // don't mandate patch not specified to allow builds to migrate + System.getProperty("akka.build.scalaVersion", "default") match { + case twoThirteen if twoThirteen.startsWith("2.13") => scala213Version + case twoTwelve if twoTwelve.startsWith("2.12") => scala212Version + case three if three.startsWith("3.0") => scala3Version + case "default" => scala212Version + case other => + throw new IllegalArgumentException(s"Unsupported scala version [$other]. Must be 2.12, 2.13 or 3.0.") + } + } + val Versions = Seq( crossScalaVersions := Seq(scala212Version, scala213Version), - scalaVersion := { - // don't allow full override to keep compatible with the version of silencer - // don't mandate patch not specified to allow builds to migrate - System.getProperty("akka.build.scalaVersion", "default") match { - case twoThirteen if twoThirteen.startsWith("2.13") => scala213Version - case twoTwelve if twoTwelve.startsWith("2.12") => scala212Version - case "default" => crossScalaVersions.value.head - case other => throw new IllegalArgumentException(s"Unsupported scala version [$other]. Must be 2.12 or 2.13.") - } - }, + scalaVersion := getScalaVersion(), java8CompatVersion := { CrossVersion.partialVersion(scalaVersion.value) match { // java8-compat is only used in a couple of places for 2.13, // it is probably possible to remove the dependency if needed. + case Some((3, _)) => "0.9.0" case Some((2, n)) if n >= 13 => "0.9.0" case _ => "0.8.0" } @@ -81,14 +100,18 @@ object Dependencies { val reactiveStreams = "org.reactivestreams" % "reactive-streams" % reactiveStreamsVersion // CC0 // ssl-config - val sslConfigCore = "com.typesafe" %% "ssl-config-core" % sslConfigVersion // ApacheV2 + val sslConfigCore = DottyCompatModuleID("com.typesafe" %% "ssl-config-core" % sslConfigVersion) + .withDottyCompat(getScalaVersion()) // ApacheV2 val lmdb = "org.lmdbjava" % "lmdbjava" % "0.7.0" // ApacheV2, OpenLDAP Public License val junit = "junit" % "junit" % junitVersion // Common Public License 1.0 // For Java 8 Conversions - val java8Compat = Def.setting { "org.scala-lang.modules" %% "scala-java8-compat" % java8CompatVersion.value } // Scala License + val java8Compat = Def.setting { + DottyCompatModuleID("org.scala-lang.modules" %% "scala-java8-compat" % java8CompatVersion.value) + .withDottyCompat(getScalaVersion()) + } // Scala License val aeronDriver = "io.aeron" % "aeron-driver" % aeronVersion // ApacheV2 val aeronClient = "io.aeron" % "aeron-client" % aeronVersion // ApacheV2 @@ -122,15 +145,14 @@ object Dependencies { val logback = Compile.logback % "test" // EPL 1.0 val scalatest = "org.scalatest" %% "scalatest" % scalaTestVersion % "test" // ApacheV2 - val scalacheck = "org.scalacheck" %% "scalacheck" % scalaCheckVersion % "test" // New BSD // The 'scalaTestPlus' projects are independently versioned, // but the version of each module starts with the scalatest // version it was intended to work with val scalatestJUnit = "org.scalatestplus" %% "junit-4-13" % (scalaTestVersion + ".0") % "test" // ApacheV2 val scalatestTestNG = "org.scalatestplus" %% "testng-6-7" % (scalaTestVersion + ".0") % "test" // ApacheV2 - val scalatestScalaCheck = "org.scalatestplus" %% "scalacheck-1-14" % (scalaTestVersion + ".0") % "test" // ApacheV2 - val scalatestMockito = "org.scalatestplus" %% "mockito-3-3" % (scalaTestVersion + ".0") % "test" // ApacheV2 + val scalatestScalaCheck = "org.scalatestplus" %% s"scalacheck-${scalaTestScalaCheckVersion}" % (scalaTestVersion + ".0") % "test" // ApacheV2 + val scalatestMockito = "org.scalatestplus" %% "mockito-3-4" % (scalaTestVersion + ".0") % "test" // ApacheV2 val pojosr = "com.googlecode.pojosr" % "de.kalpatec.pojosr.framework" % "0.2.1" % "test" // ApacheV2 val tinybundles = "org.ops4j.pax.tinybundles" % "tinybundles" % "3.0.0" % "test" // ApacheV2 @@ -202,7 +224,6 @@ object Dependencies { Test.scalatestScalaCheck, Test.commonsCodec, Test.commonsMath, - Test.scalacheck, Test.jimfs, Test.dockerClient, Provided.activation // dockerClient needs javax.activation.DataSource in JDK 11+ @@ -302,20 +323,14 @@ object Dependencies { lazy val stream = l ++= Seq[sbt.ModuleID](reactiveStreams, sslConfigCore, Test.scalatest) - lazy val streamTestkit = l ++= Seq(Test.scalatest, Test.scalacheck, Test.junit) + lazy val streamTestkit = l ++= Seq(Test.scalatest, Test.scalatestScalaCheck, Test.junit) - lazy val streamTests = l ++= Seq( - Test.scalatest, - Test.scalacheck, - Test.scalatestScalaCheck, - Test.junit, - Test.commonsIo, - Test.jimfs) + lazy val streamTests = l ++= Seq(Test.scalatest, Test.scalatestScalaCheck, Test.junit, Test.commonsIo, Test.jimfs) lazy val streamTestsTck = l ++= Seq( Test.scalatest, Test.scalatestTestNG, - Test.scalacheck, + Test.scalatestScalaCheck, Test.junit, Test.reactiveStreamsTck) diff --git a/project/GitHub.scala b/project/GitHub.scala index 62e1b9c0c6..7cef7243ef 100644 --- a/project/GitHub.scala +++ b/project/GitHub.scala @@ -7,9 +7,10 @@ package akka object GitHub { def envTokenOrThrow: Option[String] = - sys.env.get("PR_VALIDATOR_GH_TOKEN") orElse { + sys.env.get("PR_VALIDATOR_GH_TOKEN").orElse { if (sys.env.contains("ghprbPullId")) { - throw new Exception("No PR_VALIDATOR_GH_TOKEN env var provided during GitHub Pull Request Builder build, unable to reach GitHub!") + throw new Exception( + "No PR_VALIDATOR_GH_TOKEN env var provided during GitHub Pull Request Builder build, unable to reach GitHub!") } else { None } diff --git a/project/JavaFormatter.scala b/project/JavaFormatter.scala index 65f73d7479..1168a7fa6c 100644 --- a/project/JavaFormatter.scala +++ b/project/JavaFormatter.scala @@ -22,13 +22,14 @@ object JavaFormatter extends AutoPlugin { import sbt._ import sbt.io._ - override def projectSettings: Seq[Def.Setting[_]] = Seq( - //below is for sbt java formatter - (excludeFilter in javafmt) := { - val ignoreSupport = - new ProjectFileIgnoreSupport((baseDirectory in ThisBuild).value / ignoreConfigFileName, descriptor) - val simpleFileFilter = new SimpleFileFilter(file => ignoreSupport.isIgnoredByFileOrPackages(file)) - simpleFileFilter || (excludeFilter in javafmt).value - }, - javafmtOnCompile := formatOnCompile) + override def projectSettings: Seq[Def.Setting[_]] = + Seq( + //below is for sbt java formatter + (excludeFilter in javafmt) := { + val ignoreSupport = + new ProjectFileIgnoreSupport((baseDirectory in ThisBuild).value / ignoreConfigFileName, descriptor) + val simpleFileFilter = new SimpleFileFilter(file => ignoreSupport.isIgnoredByFileOrPackages(file)) + simpleFileFilter || (excludeFilter in javafmt).value + }, + javafmtOnCompile := formatOnCompile) } diff --git a/project/MultiNode.scala b/project/MultiNode.scala index 19b3a2995f..e8d4206db2 100644 --- a/project/MultiNode.scala +++ b/project/MultiNode.scala @@ -75,9 +75,9 @@ object MultiNode extends AutoPlugin { scalacOptions in MultiJvm := (scalacOptions in Test).value, logLevel in multiJvmCreateLogger := Level.Debug, // to see ssh establishment assemblyMergeStrategy in assembly in MultiJvm := { - case n if n.endsWith("logback-test.xml") ⇒ MergeStrategy.first + case n if n.endsWith("logback-test.xml") => MergeStrategy.first case n if n.toLowerCase.matches("meta-inf.*\\.default") => MergeStrategy.first - case n => (assemblyMergeStrategy in assembly in MultiJvm).value.apply(n) + case n => (assemblyMergeStrategy in assembly in MultiJvm).value.apply(n) }, multiJvmCreateLogger in MultiJvm := { // to use normal sbt logging infra instead of custom sbt-multijvm-one val previous = (multiJvmCreateLogger in MultiJvm).value diff --git a/project/ParadoxBrowse.scala b/project/ParadoxBrowse.scala index 6f1968d5b7..f64f169a98 100644 --- a/project/ParadoxBrowse.scala +++ b/project/ParadoxBrowse.scala @@ -19,13 +19,11 @@ object ParadoxBrowse extends AutoPlugin { override def trigger = allRequirements override def requires = ParadoxPlugin - override lazy val projectSettings = Seq( - paradoxBrowse := { - import java.awt.Desktop - val rootDocFile = (paradox in Compile).value / "index.html" - val log = streams.value.log - if (Desktop.isDesktopSupported) Desktop.getDesktop.open(rootDocFile) - else log.info(s"Couldn't open default browser, but docs are at $rootDocFile") - } - ) + override lazy val projectSettings = Seq(paradoxBrowse := { + import java.awt.Desktop + val rootDocFile = (paradox in Compile).value / "index.html" + val log = streams.value.log + if (Desktop.isDesktopSupported) Desktop.getDesktop.open(rootDocFile) + else log.info(s"Couldn't open default browser, but docs are at $rootDocFile") + }) } diff --git a/project/ProjectFileIgnoreSupport.scala b/project/ProjectFileIgnoreSupport.scala index d135a3de61..ffd2b6a22c 100644 --- a/project/ProjectFileIgnoreSupport.scala +++ b/project/ProjectFileIgnoreSupport.scala @@ -12,39 +12,28 @@ import sbt.internal.sbtscalafix.Compat class ProjectFileIgnoreSupport(ignoreConfigFile: File, descriptor: String) { private val stdoutLogger = Compat.ConsoleLogger(System.out) - private val javaSourceDirectories = Set( - "java", - Jdk9.JAVA_SOURCE_DIRECTORY, - Jdk9.JAVA_TEST_SOURCE_DIRECTORY - ) + private val javaSourceDirectories = Set("java", Jdk9.JAVA_SOURCE_DIRECTORY, Jdk9.JAVA_TEST_SOURCE_DIRECTORY) - private val scalaSourceDirectories = Set( - "scala", - Jdk9.SCALA_SOURCE_DIRECTORY, - Jdk9.SCALA_TEST_SOURCE_DIRECTORY - ) + private val scalaSourceDirectories = Set("scala", Jdk9.SCALA_SOURCE_DIRECTORY, Jdk9.SCALA_TEST_SOURCE_DIRECTORY) private lazy val ignoreConfig = { - require(ignoreConfigFile.exists(), s"Expected ignore configuration for $descriptor at ${ignoreConfigFile.getAbsolutePath} but was missing") + require( + ignoreConfigFile.exists(), + s"Expected ignore configuration for $descriptor at ${ignoreConfigFile.getAbsolutePath} but was missing") ConfigFactory.parseFile(ignoreConfigFile) } private lazy val ignoredFiles: Set[String] = { import scala.collection.JavaConverters._ stdoutLogger.debug(s"Loading ignored-files from $ignoreConfigFile:[${ignoreConfig.origin().url().toURI.getPath}]") - ignoreConfig - .getStringList("ignored-files") - .asScala - .toSet + ignoreConfig.getStringList("ignored-files").asScala.toSet } private lazy val ignoredPackages: Set[String] = { import scala.collection.JavaConverters._ - stdoutLogger.debug(s"Loading ignored-packages from $ignoreConfigFile:[${ignoreConfig.origin().url().toURI.getPath}]") - ignoreConfig - .getStringList("ignored-packages") - .asScala - .toSet + stdoutLogger.debug( + s"Loading ignored-packages from $ignoreConfigFile:[${ignoreConfig.origin().url().toURI.getPath}]") + ignoreConfig.getStringList("ignored-packages").asScala.toSet } def isIgnoredByFileOrPackages(file: File): Boolean = @@ -64,7 +53,8 @@ class ProjectFileIgnoreSupport(ignoreConfigFile: File, descriptor: String) { case Some(packageName) => val ignored = packageName.startsWith(pkg) if (ignored) { - stdoutLogger.debug(s"$descriptor ignored file with pkg:$pkg for package:$packageName file:[${file.toPath}] ") + stdoutLogger.debug( + s"$descriptor ignored file with pkg:$pkg for package:$packageName file:[${file.toPath}] ") } ignored case None => false @@ -74,9 +64,10 @@ class ProjectFileIgnoreSupport(ignoreConfigFile: File, descriptor: String) { } private def getPackageName(fileName: String): Option[String] = { - def getPackageName0(sourceDirectories:Set[String]): String = { - import java.io.{File => JFile} - val packageName = fileName.split(JFile.separatorChar) + def getPackageName0(sourceDirectories: Set[String]): String = { + import java.io.{ File => JFile } + val packageName = fileName + .split(JFile.separatorChar) .dropWhile(part => !sourceDirectories(part)) .drop(1) .dropRight(1) diff --git a/project/ScalaFixForJdk9Plugin.scala b/project/ScalaFixForJdk9Plugin.scala index 6ff5de2f3a..88887b6a80 100644 --- a/project/ScalaFixForJdk9Plugin.scala +++ b/project/ScalaFixForJdk9Plugin.scala @@ -4,7 +4,7 @@ package akka -import sbt.{AutoPlugin, PluginTrigger, Plugins, ScalafixSupport} +import sbt.{ AutoPlugin, PluginTrigger, Plugins, ScalafixSupport } import scalafix.sbt.ScalafixPlugin object ScalaFixForJdk9Plugin extends AutoPlugin with ScalafixSupport { override def trigger: PluginTrigger = allRequirements @@ -14,18 +14,13 @@ object ScalaFixForJdk9Plugin extends AutoPlugin with ScalafixSupport { import ScalafixPlugin.autoImport.scalafixConfigSettings import sbt._ - lazy val scalafixIgnoredSetting: Seq[Setting[_]] = Seq( - ignore(TestJdk9) - ) + lazy val scalafixIgnoredSetting: Seq[Setting[_]] = Seq(ignore(TestJdk9)) override def projectSettings: Seq[Def.Setting[_]] = Seq(CompileJdk9, TestJdk9).flatMap(c => inConfig(c)(scalafixConfigSettings(c))) ++ - scalafixIgnoredSetting ++ Seq( + scalafixIgnoredSetting ++ Seq( updateProjectCommands( alias = "fixall", value = ";scalafixEnable;scalafixAll;scalafmtAll;test:compile;multi-jvm:compile;reload"), - updateProjectCommands( - alias = "sortImports", - value = ";scalafixEnable;scalafixAll SortImports;scalafmtAll") - ) + updateProjectCommands(alias = "sortImports", value = ";scalafixEnable;scalafixAll SortImports;scalafmtAll")) } diff --git a/project/ScalafixForMultiNodePlugin.scala b/project/ScalafixForMultiNodePlugin.scala index c595732f11..3459a83938 100644 --- a/project/ScalafixForMultiNodePlugin.scala +++ b/project/ScalafixForMultiNodePlugin.scala @@ -5,7 +5,7 @@ package akka import com.typesafe.sbt.MultiJvmPlugin -import sbt.{AutoPlugin, Def, PluginTrigger, Plugins, ScalafixSupport, Setting, inConfig} +import sbt.{ inConfig, AutoPlugin, Def, PluginTrigger, Plugins, ScalafixSupport, Setting } import scalafix.sbt.ScalafixPlugin import scalafix.sbt.ScalafixPlugin.autoImport.scalafixConfigSettings @@ -16,18 +16,11 @@ object ScalafixForMultiNodePlugin extends AutoPlugin with ScalafixSupport { import MultiJvmPlugin.autoImport._ - lazy val scalafixIgnoredSetting: Seq[Setting[_]] = Seq( - ignore(MultiJvm) - ) + lazy val scalafixIgnoredSetting: Seq[Setting[_]] = Seq(ignore(MultiJvm)) override def projectSettings: Seq[Def.Setting[_]] = Seq(MultiJvm).flatMap(c => inConfig(c)(scalafixConfigSettings(c))) ++ - scalafixIgnoredSetting ++ Seq( - updateProjectCommands( - alias = "fixall", - value = ";scalafixEnable;scalafixAll;scalafmtAll"), - updateProjectCommands( - alias = "sortImports", - value = ";scalafixEnable;scalafixAll SortImports;scalafmtAll") - ) + scalafixIgnoredSetting ++ Seq( + updateProjectCommands(alias = "fixall", value = ";scalafixEnable;scalafixAll;scalafmtAll"), + updateProjectCommands(alias = "sortImports", value = ";scalafixEnable;scalafixAll SortImports;scalafmtAll")) } diff --git a/project/SigarLoader.scala b/project/SigarLoader.scala index 10d9874e4e..32045b013b 100644 --- a/project/SigarLoader.scala +++ b/project/SigarLoader.scala @@ -33,19 +33,17 @@ object SigarLoader { // Prepare Sigar agent options. sigarArtifact := { val report = update.value - val artifactList = report.matching( - moduleFilter(organization = sigarLoader.organization, name = sigarLoader.name)) + val artifactList = + report.matching(moduleFilter(organization = sigarLoader.organization, name = sigarLoader.name)) require(artifactList.size == 1, "Expecting single artifact, while found: " + artifactList) artifactList.head }, sigarFolder := target.value / "native", sigarOptions := "-javaagent:" + sigarArtifact.value + "=" + sigarFolderProperty + "=" + sigarFolder.value, // - fork in Test := true) ++ ( - // Invoke Sigar agent at JVM init time, to extract and load native Sigar library. - if (sigarTestEnabled) Seq( - javaOptions in Test += sigarOptions.value) - else Seq()) + fork in Test := true) ++ (// Invoke Sigar agent at JVM init time, to extract and load native Sigar library. + if (sigarTestEnabled) Seq(javaOptions in Test += sigarOptions.value) + else Seq()) } } diff --git a/project/TestExtras.scala b/project/TestExtras.scala index 0478dc9d6e..4e707c3af0 100644 --- a/project/TestExtras.scala +++ b/project/TestExtras.scala @@ -11,9 +11,12 @@ object TestExtras { object Filter { object Keys { - val excludeTestNames = settingKey[Set[String]]("Names of tests to be excluded. Not supported by MultiJVM tests. Example usage: -Dakka.test.names.exclude=TimingSpec") - val excludeTestTags = settingKey[Set[String]]("Tags of tests to be excluded. It will not be used if you specify -Dakka.test.tags.only. Example usage: -Dakka.test.tags.exclude=long-running") - val onlyTestTags = settingKey[Set[String]]("Tags of tests to be ran. Example usage: -Dakka.test.tags.only=long-running") + val excludeTestNames = settingKey[Set[String]]( + "Names of tests to be excluded. Not supported by MultiJVM tests. Example usage: -Dakka.test.names.exclude=TimingSpec") + val excludeTestTags = settingKey[Set[String]]( + "Tags of tests to be excluded. It will not be used if you specify -Dakka.test.tags.only. Example usage: -Dakka.test.tags.exclude=long-running") + val onlyTestTags = + settingKey[Set[String]]("Tags of tests to be ran. Example usage: -Dakka.test.tags.only=long-running") val checkTestsHaveRun = taskKey[Unit]("Verify a number of notable tests have actually run"); } @@ -34,22 +37,19 @@ object TestExtras { else Set.empty }, onlyTestTags := Params.testTagsOnly, - // add filters for tests excluded by name - testOptions in Test ++= excludeTestNames.value.toSeq.map(exclude => Tests.Filter(test => !test.contains(exclude))), - + testOptions in Test ++= excludeTestNames.value.toSeq.map(exclude => + Tests.Filter(test => !test.contains(exclude))), // add arguments for tests excluded by tag testOptions in Test ++= { val tags = excludeTestTags.value if (tags.isEmpty) Seq.empty else Seq(Tests.Argument("-l", tags.mkString(" "))) }, - // add arguments for running only tests by tag testOptions in Test ++= { val tags = onlyTestTags.value if (tags.isEmpty) Seq.empty else Seq(Tests.Argument("-n", tags.mkString(" "))) }, - checkTestsHaveRun := { def shouldExist(description: String, filename: String): Unit = require(file(filename).exists, s"$description should be run as part of the build") @@ -57,10 +57,9 @@ object TestExtras { List( "The java JavaExtension.java" -> "akka-actor-tests/target/test-reports/TEST-akka.actor.JavaExtension.xml", "The jdk9-only FlowPublisherSinkSpec.scala" -> "akka-stream-tests/target/test-reports/TEST-akka.stream.scaladsl.FlowPublisherSinkSpec.xml", - "The jdk9-only JavaFlowSupportCompileTest.java" -> "akka-stream-tests/target/test-reports/TEST-akka.stream.javadsl.JavaFlowSupportCompileTest.xml", - ).foreach((shouldExist _).tupled) - } - ) + "The jdk9-only JavaFlowSupportCompileTest.java" -> "akka-stream-tests/target/test-reports/TEST-akka.stream.javadsl.JavaFlowSupportCompileTest.xml") + .foreach((shouldExist _).tupled) + }) } def containsOrNotExcludesTag(tag: String) = { diff --git a/project/ValidatePullRequest.scala b/project/ValidatePullRequest.scala index 91db702b47..5eb0f322e1 100644 --- a/project/ValidatePullRequest.scala +++ b/project/ValidatePullRequest.scala @@ -25,52 +25,45 @@ object AkkaValidatePullRequest extends AutoPlugin { override def trigger = allRequirements override def requires = ValidatePullRequest - val ValidatePR = config("pr-validation") extend Test + val ValidatePR = config("pr-validation").extend(Test) override lazy val projectConfigurations = Seq(ValidatePR) val additionalTasks = settingKey[Seq[TaskKey[_]]]("Additional tasks for pull request validation") - override lazy val globalSettings = Seq( - credentials ++= { - // todo this should probably be supplied properly - GitHub.envTokenOrThrow.map { token => - Credentials("GitHub API", "api.github.com", "", token) - } - }, - additionalTasks := Seq.empty - ) + override lazy val globalSettings = Seq(credentials ++= { + // todo this should probably be supplied properly + GitHub.envTokenOrThrow.map { token => + Credentials("GitHub API", "api.github.com", "", token) + } + }, additionalTasks := Seq.empty) override lazy val buildSettings = Seq( validatePullRequest / includeFilter := PathGlobFilter("akka-*/**"), validatePullRequestBuildAll / excludeFilter := PathGlobFilter("project/MiMa.scala"), - prValidatorGithubRepository := Some("akka/akka") - ) + prValidatorGithubRepository := Some("akka/akka")) override lazy val projectSettings = inConfig(ValidatePR)(Defaults.testTasks) ++ Seq( - testOptions in ValidatePR += Tests.Argument(TestFrameworks.ScalaTest, "-l", "performance"), - testOptions in ValidatePR += Tests.Argument(TestFrameworks.ScalaTest, "-l", "long-running"), - testOptions in ValidatePR += Tests.Argument(TestFrameworks.ScalaTest, "-l", "timing"), - - // make it fork just like regular test running - fork in ValidatePR := (fork in Test).value, - testGrouping in ValidatePR := (testGrouping in Test).value, - javaOptions in ValidatePR := (javaOptions in Test).value, - - prValidatorTasks := Seq(test in ValidatePR) ++ additionalTasks.value, - prValidatorEnforcedBuildAllTasks := Seq(test in Test) ++ additionalTasks.value - ) + testOptions in ValidatePR += Tests.Argument(TestFrameworks.ScalaTest, "-l", "performance"), + testOptions in ValidatePR += Tests.Argument(TestFrameworks.ScalaTest, "-l", "long-running"), + testOptions in ValidatePR += Tests.Argument(TestFrameworks.ScalaTest, "-l", "timing"), + // make it fork just like regular test running + fork in ValidatePR := (fork in Test).value, + testGrouping in ValidatePR := (testGrouping in Test).value, + javaOptions in ValidatePR := (javaOptions in Test).value, + prValidatorTasks := Seq(test in ValidatePR) ++ additionalTasks.value, + prValidatorEnforcedBuildAllTasks := Seq(test in Test) ++ additionalTasks.value) } /** -* This autoplugin adds Multi Jvm tests to validatePullRequest task. -* It is needed, because ValidatePullRequest autoplugin does not depend on MultiNode and -* therefore test:executeTests is not yet modified to include multi-jvm tests when ValidatePullRequest -* build strategy is being determined. -* -* Making ValidatePullRequest depend on MultiNode is impossible, as then ValidatePullRequest -* autoplugin would trigger only on projects which have both of these plugins enabled. -*/ + * This autoplugin adds Multi Jvm tests to validatePullRequest task. + * It is needed, because ValidatePullRequest autoplugin does not depend on MultiNode and + * therefore test:executeTests is not yet modified to include multi-jvm tests when ValidatePullRequest + * build strategy is being determined. + * + * Making ValidatePullRequest depend on MultiNode is impossible, as then ValidatePullRequest + * autoplugin would trigger only on projects which have both of these plugins enabled. + */ object MultiNodeWithPrValidation extends AutoPlugin { import AkkaValidatePullRequest._ import com.typesafe.sbt.MultiJvmPlugin.MultiJvmKeys.MultiJvm @@ -83,9 +76,9 @@ object MultiNodeWithPrValidation extends AutoPlugin { } /** -* This autoplugin adds MiMa binary issue reporting to validatePullRequest task, -* when a project has MimaPlugin autoplugin enabled. -*/ + * This autoplugin adds MiMa binary issue reporting to validatePullRequest task, + * when a project has MimaPlugin autoplugin enabled. + */ object MimaWithPrValidation extends AutoPlugin { import AkkaValidatePullRequest._ @@ -96,24 +89,20 @@ object MimaWithPrValidation extends AutoPlugin { } /** - * This autoplugin adds Paradox doc generation to validatePullRequest task, - * when a project has ParadoxPlugin autoplugin enabled. - */ + * This autoplugin adds Paradox doc generation to validatePullRequest task, + * when a project has ParadoxPlugin autoplugin enabled. + */ object ParadoxWithPrValidation extends AutoPlugin { import AkkaValidatePullRequest._ override def trigger = allRequirements override def requires = AkkaValidatePullRequest && ParadoxPlugin - override lazy val projectSettings = Seq( - additionalTasks += paradox in Compile - ) + override lazy val projectSettings = Seq(additionalTasks += paradox in Compile) } object UnidocWithPrValidation extends AutoPlugin { import AkkaValidatePullRequest._ override def trigger = noTrigger - override lazy val projectSettings = Seq( - additionalTasks += unidoc in Compile - ) + override lazy val projectSettings = Seq(additionalTasks += unidoc in Compile) } diff --git a/project/VersionGenerator.scala b/project/VersionGenerator.scala index 384d594047..df6295bc15 100644 --- a/project/VersionGenerator.scala +++ b/project/VersionGenerator.scala @@ -12,12 +12,11 @@ import sbt.Keys._ */ object VersionGenerator { - val settings: Seq[Setting[_]] = inConfig(Compile)(Seq( - resourceGenerators += generateVersion(resourceManaged, _ / "version.conf", - """|akka.version = "%s" + val settings: Seq[Setting[_]] = inConfig(Compile)( + Seq( + resourceGenerators += generateVersion(resourceManaged, _ / "version.conf", """|akka.version = "%s" |"""), - sourceGenerators += generateVersion(sourceManaged, _ / "akka" / "Version.scala", - """|package akka + sourceGenerators += generateVersion(sourceManaged, _ / "akka" / "Version.scala", """|package akka | |object Version { | val current: String = "%s" diff --git a/project/build.properties b/project/build.properties index 0837f7a132..d91c272d4e 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=1.3.13 +sbt.version=1.4.6 diff --git a/project/plugins.sbt b/project/plugins.sbt index 6f2c06214d..7f2a9f5b79 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -28,3 +28,4 @@ addSbtPlugin("com.hpe.sbt" % "sbt-pull-request-validator" % "1.0.0") addSbtPlugin("net.bzzt" % "sbt-reproducible-builds" % "0.25") addSbtPlugin("com.dwijnand" % "sbt-dynver" % "4.1.1") addSbtPlugin("com.lightbend.sbt" % "sbt-publish-rsync" % "0.2") +addSbtPlugin("ch.epfl.lamp" % "sbt-dotty" % "0.5.1")