Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion auth/.js/src/main/scala/io/udash/auth/AuthApplication.scala
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ package io.udash.auth
import io.udash._

object AuthApplication {
implicit class ApplicationAuthExt[HierarchyRoot >: Null <: GState[HierarchyRoot]](val application: Application[HierarchyRoot]) extends AnyVal {
implicit final class ApplicationAuthExt[HierarchyRoot >: Null <: GState[HierarchyRoot]](
val application: Application[HierarchyRoot]
) extends AnyVal {
/**
* Adds the default listener of authorization failure in routing (redirects to provided state).
*
Expand Down
2 changes: 1 addition & 1 deletion auth/src/main/scala/io/udash/auth/Permission.scala
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ trait Permission {

object Permission {
/** Single permission as a combinator resolved implicitly. */
implicit class Single(private val permission: Permission) extends AnyVal with PermissionCombinator {
implicit final class Single(private val permission: Permission) extends AnyVal with PermissionCombinator {
override def check(ctx: UserCtx): Boolean =
ctx.has(permission)

Expand Down
2 changes: 1 addition & 1 deletion auth/src/main/scala/io/udash/auth/PermissionId.scala
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ package io.udash.auth
import com.avsystem.commons.serialization.{HasGenCodec, transparent}

@transparent
case class PermissionId(value: String) extends AnyVal
final case class PermissionId(value: String) extends AnyVal
object PermissionId extends HasGenCodec[PermissionId]
4 changes: 4 additions & 0 deletions auth/src/main/scala/io/udash/auth/exceptions.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,12 @@ package io.udash.auth

import com.avsystem.commons.serialization.HasGenCodec

import scala.annotation.nowarn

@nowarn("msg=Case classes should be marked as final")
case class UnauthenticatedException() extends RuntimeException(s"User has to be authenticated to access this content.")
object UnauthenticatedException extends HasGenCodec[UnauthenticatedException]

@nowarn("msg=Case classes should be marked as final")
case class UnauthorizedException() extends RuntimeException(s"Provided user context does not have access to this content.")
object UnauthorizedException extends HasGenCodec[UnauthorizedException]
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import japgolly.scalajs.benchmark.gui._
import scalatags.JsDom.all._

object PropertyParameters {
case class Entity(i: Int, s: String, r: Entity)
final case class Entity(i: Int, s: String, r: Entity)
object Entity extends HasModelPropertyCreator[Entity]

private def listenProperty(p: ReadableProperty[String]) = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ object UdashCarousel {
* @param keyboard Should the carousel react to keyboard events.
* @param active Should the animation be active.
*/
case class AnimationOptions(
final case class AnimationOptions(
interval: Duration = 5 seconds, pause: PauseOption = PauseOption.Hover, wrap: Boolean = true,
keyboard: Boolean = true, active: Boolean = true
) {
Expand Down Expand Up @@ -285,7 +285,7 @@ object UdashCarousel {
* @param imgSrc Slide image source url.
* @param caption Slide caption content.
*/
case class UdashCarouselSlide(imgSrc: Url)(caption: Modifier*) {
final case class UdashCarouselSlide(imgSrc: Url)(caption: Modifier*) {
import io.udash.css.CssView._

lazy val render: Node = {
Expand All @@ -296,4 +296,4 @@ case class UdashCarouselSlide(imgSrc: Url)(caption: Modifier*) {
)
).render
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -133,13 +133,13 @@ object UdashDropdown {
/** Default dropdown elements. */
sealed trait DefaultDropdownItem extends AbstractCase
object DefaultDropdownItem {
case class Text(text: String) extends DefaultDropdownItem
case class Link(title: String, url: Url) extends DefaultDropdownItem
case class Button(title: String, clickCallback: () => Any) extends DefaultDropdownItem
case class Header(title: String) extends DefaultDropdownItem
case class Disabled(item: DefaultDropdownItem) extends DefaultDropdownItem
case class Raw(element: Element) extends DefaultDropdownItem
case class Dynamic(factory: Binding.NestedInterceptor => Element) extends DefaultDropdownItem
final case class Text(text: String) extends DefaultDropdownItem
final case class Link(title: String, url: Url) extends DefaultDropdownItem
final case class Button(title: String, clickCallback: () => Any) extends DefaultDropdownItem
final case class Header(title: String) extends DefaultDropdownItem
final case class Disabled(item: DefaultDropdownItem) extends DefaultDropdownItem
final case class Raw(element: Element) extends DefaultDropdownItem
final case class Dynamic(factory: Binding.NestedInterceptor => Element) extends DefaultDropdownItem
case object Divider extends DefaultDropdownItem
}

Expand Down
8 changes: 5 additions & 3 deletions core/.js/src/main/scala/io/udash/bindings/Bindings.scala
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
package io.udash.bindings

import com.avsystem.commons._
import com.avsystem.commons.*
import io.udash.bindings.Bindings.{AttrOps, AttrPairOps, HasCssName, PropertyOps}
import io.udash.bindings.modifiers._
import io.udash.bindings.modifiers.*
import io.udash.properties.seq.ReadableSeqProperty
import io.udash.properties.single.ReadableProperty
import org.scalajs.dom._
import org.scalajs.dom.*
import scalatags.JsDom
import scalatags.generic.{Attr, AttrPair, AttrValue, Modifier}

import scala.annotation.nowarn
import scala.scalajs.js

trait Bindings {
Expand All @@ -28,6 +29,7 @@ trait Bindings {

implicit def seqFromNode(el: Node): Seq[Node] = Seq(el)
implicit def seqFromElement(el: Element): Seq[Element] = Seq(el)
@nowarn("msg=Implicit parameters")
implicit def seqNodeFromOpt[T](el: Opt[T])(implicit ev: T => Modifier[Element]): Modifier[Element] =
new JsDom.all.SeqNode(el.toSeq)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package io.udash.bindings
import org.scalajs.dom.Node

package object modifiers {
implicit class ElementExts(private val el: Node) extends AnyVal {
implicit final class ElementExts(private val el: Node) extends AnyVal {
def replaceChildren(oldChildren: Seq[Node], newChildren: Seq[Node]): Unit = {
if (oldChildren == null || oldChildren.isEmpty) newChildren.foreach(el.appendChild)
else {
Expand Down
2 changes: 1 addition & 1 deletion core/.js/src/main/scala/io/udash/core/Definitions.scala
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import scalatags.generic.Modifier
/**
* Url wrapper - just for avoiding strings.
*/
case class Url(value: String) extends AnyVal
final case class Url(value: String) extends AnyVal
object Url extends HasModelPropertyCreator[Url]

/**
Expand Down
4 changes: 2 additions & 2 deletions core/.js/src/test/scala/io/udash/testing/TestState.scala
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ sealed abstract class TestState(val parentState: Option[ContainerTestState]) ext
sealed abstract class ContainerTestState(parentState: Option[ContainerTestState]) extends TestState(parentState)
sealed abstract class FinalTestState(parentState: Option[ContainerTestState]) extends TestState(parentState)

case class RootState(sth: Option[Int]) extends ContainerTestState(None)
case class ClassState(arg: String, arg2: Int) extends FinalTestState(Some(RootState(None)))
final case class RootState(sth: Option[Int]) extends ContainerTestState(None)
final case class ClassState(arg: String, arg2: Int) extends FinalTestState(Some(RootState(None)))
case object ObjectState extends ContainerTestState(Some(RootState(None)))
case object ThrowExceptionState extends ContainerTestState(Some(RootState(None)))
case object NextObjectState extends FinalTestState(Some(ObjectState))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ object PropertyErrorManualTest {
trait B {
def c: Seq[C]
}
case class C(d: D)
final case class C(d: D)
trait D {
def errorField: ClassicClass
}
Expand Down
8 changes: 4 additions & 4 deletions core/src/main/scala/io/udash/properties/Properties.scala
Original file line number Diff line number Diff line change
Expand Up @@ -31,20 +31,20 @@ trait Properties {
}

object Properties extends Properties {
class Any2Property[A] private[properties](private val value: A) extends AnyVal {
final class Any2Property[A] private[properties](private val value: A) extends AnyVal {
def toProperty[B >: A : PropertyCreator]: ReadableProperty[B] = PropertyCreator[B].newImmutableProperty(value)
def toModelProperty[B >: A : ModelPropertyCreator]: ReadableModelProperty[B] = ModelPropertyCreator[B].newImmutableProperty(value)
}

class Any2SeqProperty[A] private[properties](private val value: Seq[A]) extends AnyVal {
final class Any2SeqProperty[A] private[properties](private val value: Seq[A]) extends AnyVal {
def toSeqProperty: ReadableSeqProperty[A] = new ImmutableSeqProperty[A, Seq](value)
}

class PropertySeq2SeqProperty[A] private[properties](private val value: ISeq[ReadableProperty[A]]) extends AnyVal {
final class PropertySeq2SeqProperty[A] private[properties](private val value: ISeq[ReadableProperty[A]]) extends AnyVal {
def combineToSeqProperty: ReadableSeqProperty[A] = new PropertySeqCombinedReadableSeqProperty[A](value)
}

class BooleanPropertyOps private[properties](private val underlying: Property[Boolean]) extends AnyVal {
final class BooleanPropertyOps private[properties](private val underlying: Property[Boolean]) extends AnyVal {
/** Toggles the value of the underlying boolean-backed property.
* @param force If true, the value change listeners will be fired even if value didn't change.
* */
Expand Down
2 changes: 1 addition & 1 deletion core/src/test/scala/io/udash/properties/BlankTest.scala
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ class BlankTest extends UdashCoreTest {
}

object BlankTest {
case class Entity(i: Int, s: String)
final case class Entity(i: Int, s: String)
object Entity extends HasModelPropertyCreator[Entity] {
implicit val default: Blank[Entity] = Blank.Simple(Entity(5, "asd"))
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,6 @@ class HasGenCodecAndModelPropertyCreatorTest extends UdashCoreTest {
}

object HasGenCodecAndModelPropertyCreatorTest {
case class Entity(i: Int, s: String, e: Option[Entity])
final case class Entity(i: Int, s: String, e: Option[Entity])
object Entity extends HasGenCodecAndModelPropertyCreator[Entity]
}
Original file line number Diff line number Diff line change
Expand Up @@ -150,9 +150,9 @@ class ImmutablePropertyTest extends UdashCoreTest {
}

object ImmutablePropertyTest {
case class Nested(s: Nested)
final case class Nested(s: Nested)
object Nested extends HasModelPropertyCreator[Nested]

case class ModelEntity(s: String, i: Seq[Int], v: Vector[Int], m: ModelEntity)
final case class ModelEntity(s: String, i: Seq[Int], v: Vector[Int], m: ModelEntity)
object ModelEntity extends HasModelPropertyCreator[ModelEntity]
}
4 changes: 2 additions & 2 deletions core/src/test/scala/io/udash/properties/PropertyTest.scala
Original file line number Diff line number Diff line change
Expand Up @@ -1436,14 +1436,14 @@ class PropertyTest extends UdashCoreTest {
}

private object ReqModels {
case class Simple(i: Int, s: Simple)
final case class Simple(i: Int, s: Simple)
object Simple extends HasModelPropertyCreator[Simple]

trait ReqT {
def t: ReqT
}
object ReqT extends HasModelPropertyCreator[ReqT]

case class SimpleSeq(i: Seq[SimpleSeq], s: SimpleSeq)
final case class SimpleSeq(i: Seq[SimpleSeq], s: SimpleSeq)
object SimpleSeq extends HasModelPropertyCreator[SimpleSeq]
}
4 changes: 2 additions & 2 deletions css/src/main/scala/io/udash/css/CssBase.scala
Original file line number Diff line number Diff line change
Expand Up @@ -188,12 +188,12 @@ trait CssBase {
}

object CssBase {
class AnimationNameExt(private val n: Attrs.animationName.type) extends AnyVal {
final class AnimationNameExt(private val n: Attrs.animationName.type) extends AnyVal {
def apply(s: CssStyle): AV =
AV(n.attr, s.classNames.mkString(" "))
}

class FontFamilyExt(private val n: Attrs.fontFamily.type) extends AnyVal {
final class FontFamilyExt(private val n: Attrs.fontFamily.type) extends AnyVal {
def apply(s: CssStyle): AV =
AV(n.attr, s.classNames.mkString(" "))
}
Expand Down
16 changes: 10 additions & 6 deletions css/src/main/scala/io/udash/css/CssStyle.scala
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,19 @@ sealed trait CssStyle {
def commonPrefixClass: Option[String] = None
def classNames: Seq[String] = commonPrefixClass.toList :+ className
}
case class CssStyleName(className: String) extends CssStyle
case class CssPrefixedStyleName(prefixClass: String, actualClassSuffix: String) extends CssStyle {

final case class CssStyleName(className: String) extends CssStyle

final case class CssPrefixedStyleName(prefixClass: String, actualClassSuffix: String) extends CssStyle {
val className = s"$prefixClass-$actualClassSuffix"
override val commonPrefixClass: Option[String] = Some(prefixClass)
}
case class CssStyleNameWithSharedCompanion(companionClass: String, commonPrefix: String, className: String) extends CssStyle {

final case class CssStyleNameWithSharedCompanion(companionClass: String, commonPrefix: String, className: String) extends CssStyle {
override val commonPrefixClass: Option[String] = Some(commonPrefix)
override def classNames: Seq[String] = Seq(companionClass, className)
}
case class CssStyleImpl(className: String, impl: StyleS) extends CssStyle
case class CssKeyframes(className: String, steps: Seq[(Double, StyleS)]) extends CssStyle
case class CssFontFace(className: String, font: FontFace[Option[String]]) extends CssStyle

final case class CssStyleImpl(className: String, impl: StyleS) extends CssStyle
final case class CssKeyframes(className: String, steps: Seq[(Double, StyleS)]) extends CssStyle
final case class CssFontFace(className: String, font: FontFace[Option[String]]) extends CssStyle
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,4 @@ object SVG {
}
}

case class Size(width: Int, height: Int)
final case class Size(width: Int, height: Int)
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ case object FrontendState extends ContainerRoutingState(Some(ContentState))

case object FrontendIntroState extends RoutingState(Some(FrontendState))

case class FrontendRoutingState(additionalArgument: Option[String]) extends RoutingState(Some(FrontendState))
final case class FrontendRoutingState(additionalArgument: Option[String]) extends RoutingState(Some(FrontendState))

case object FrontendMVPState extends RoutingState(Some(FrontendState))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ sealed trait MenuEntry {
def name: String
}

case class MenuContainer(override val name: String, children: Seq[MenuLink]) extends MenuEntry
case class MenuLink(override val name: String, state: RoutingState, fragment: OptArg[String] = OptArg.Empty) extends MenuEntry
final case class MenuContainer(override val name: String, children: Seq[MenuLink]) extends MenuEntry
final case class MenuLink(override val name: String, state: RoutingState, fragment: OptArg[String] = OptArg.Empty) extends MenuEntry

class GuideMenu(entries: Seq[MenuEntry], property: Property[String]) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import scalatags.JsDom.all._

object IntroFormDemo extends AutoDemo {

case class IntroFormDemoModel(minimum: Int, between: Int, maximum: Int)
final case class IntroFormDemoModel(minimum: Int, between: Int, maximum: Int)

object IntroFormDemoModel extends HasModelPropertyCreator[IntroFormDemoModel]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@ import scala.concurrent.duration.DurationLong
import scala.language.postfixOps
import scala.util.{Failure, Success}

case class ExceptionsDemoModel(
final case class ExceptionsDemoModel(
exception: String,
translatableException: TranslationKey0,
unknownException: String
unknownException: String,
)
object ExceptionsDemoModel extends HasModelPropertyCreator[ExceptionsDemoModel]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import io.udash.i18n.TranslationKey0
import io.udash.rpc.serialization.{DefaultExceptionCodecRegistry, ExceptionCodecRegistry}

object GuideExceptions {
case class ExampleException(msg: String) extends Exception(msg)
case class TranslatableExampleException(trKey: TranslationKey0) extends Exception
final case class ExampleException(msg: String) extends Exception(msg)
final case class TranslatableExampleException(trKey: TranslationKey0) extends Exception

val registry: ExceptionCodecRegistry = (new DefaultExceptionCodecRegistry).setup { registry =>
registry.register(GenCodec.materialize[ExampleException])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package io.udash.web.guide.demos.activity

import com.avsystem.commons.serialization.HasGenCodec

case class Call(rpcName: String, method: String, args: Seq[String]) {
final case class Call(rpcName: String, method: String, args: Seq[String]) {
override def toString: String = s"$rpcName.$method args: ${args.mkString("[", ", ", "]")}"
}
object Call extends HasGenCodec[Call]
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ package io.udash.web.guide.demos.rest

import io.udash.rest.RestDataCompanion

case class RestExampleClass(i: Int, s: String, inner: InnerClass)
final case class RestExampleClass(i: Int, s: String, inner: InnerClass)
object RestExampleClass extends RestDataCompanion[RestExampleClass]

case class InnerClass(d: Double, s: String)
final case class InnerClass(d: Double, s: String)
object InnerClass extends RestDataCompanion[InnerClass]
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import io.udash.rpc._
import scala.concurrent.Future

object GenCodecServerRPC extends DefaultServerRpcCompanion[GenCodecServerRPC] {
case class DemoCaseClass(i: Int, s: String, intAsDouble: Double)
final case class DemoCaseClass(i: Int, s: String, intAsDouble: Double)
object DemoCaseClass extends HasGenCodec[DemoCaseClass]

sealed trait Fruit
Expand Down
2 changes: 1 addition & 1 deletion project/Dependencies.scala
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ object Dependencies {
val scalaCssVersion = "1.0.0"

val servletVersion = "4.0.1"
val avsCommonsVersion = "2.22.0"
val avsCommonsVersion = "2.23.0"

val atmosphereJSVersion = "3.1.3"
val atmosphereVersion = "2.7.15"
Expand Down
4 changes: 2 additions & 2 deletions rest/.jvm/src/test/scala/io/udash/rest/examples/UserApi.scala
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,12 @@ trait UserApi {
}
object UserApi extends DefaultRestApiCompanion[UserApi]

case class UserId(id: Long) extends AnyVal
final case class UserId(id: Long) extends AnyVal
object UserId extends RestDataWrapperCompanion[Long, UserId]

@description("Representation of system user")
@example(User(UserId(0), "Fred"))
case class User(id: UserId, @description("User name") name: String)
final case class User(id: UserId, @description("User name") name: String)
object User extends RestDataCompanion[User]

trait GroupApi
Expand Down
2 changes: 1 addition & 1 deletion rest/src/main/scala/io/udash/rest/openapi/OpenApi.scala
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,7 @@ object Schema extends HasGenObjectCodec[Schema] {
Schema(allOf = List(ref), nullable = true)
}

implicit class RefOrOps(private val refOrSchema: RefOr[Schema]) extends AnyVal {
implicit final class RefOrOps(private val refOrSchema: RefOr[Schema]) extends AnyVal {
/**
* Transforms a potential schema reference into an actual [[Schema]] by wrapping the reference into
* `allOf` property of the new schema, e.g. `{"$$ref": "#/components/schemas/Entity"}` becomes
Expand Down
Loading