
org.opalj.br.ConstantFieldValue.scala Maven / Gradle / Ivy
The newest version!
/* BSD 2-Clause License - see OPAL/LICENSE for details. */
package org.opalj
package br
import org.opalj.value.IsDoubleValue
import org.opalj.value.IsFloatValue
import org.opalj.value.IsIntegerValue
import org.opalj.value.IsLongValue
import org.opalj.value.IsStringValue
import org.opalj.value.KnownTypedValue
/**
* A representation of the constant value of a field.
*
* @author Michael Eichberg
*/
sealed abstract class ConstantFieldValue[T >: Nothing]
extends Attribute
with ConstantValue[T]
with KnownTypedValue {
override def similar(other: Attribute, config: SimilarityTestConfiguration): Boolean = this == other
}
final case class ConstantLong(value: Long) extends ConstantFieldValue[Long] with IsLongValue {
override def constantValue: Option[Long] = Some(value)
override def toLong: Long = value
override def valueToString: String = value.toString
override def toJava: String = valueToString+"l"
override def runtimeValueType: LongType = LongType
override def kindId: Int = ConstantLong.KindId
}
object ConstantLong {
final val KindId = 1
}
final case class ConstantInteger(value: Int) extends ConstantFieldValue[Int] with IsIntegerValue {
override def constantValue: Option[Int] = Some(value)
override def lowerBound: Int = value
override def upperBound: Int = value
override def toBoolean: Boolean = value != 0
override def toByte: Byte = value.toByte
override def toChar: Char = value.toChar
override def toShort: Short = value.toShort
override def toInt: Int = value
override def valueToString: String = value.toString
override def toJava: String = valueToString
override def runtimeValueType: IntegerType = IntegerType
override def kindId: Int = ConstantInteger.KindId
}
object ConstantInteger {
final val KindId = 2
}
final case class ConstantDouble(value: Double) extends ConstantFieldValue[Double] with IsDoubleValue {
override def constantValue: Option[Double] = Some(value)
override def toDouble: Double = value
override def valueToString: String = value.toString
override def toJava: String = valueToString+"d"
override def runtimeValueType: DoubleType = DoubleType
override def kindId: Int = ConstantDouble.KindId
override def equals(other: Any): Boolean = {
other match {
case ConstantDouble(thatValue) =>
(this.value == thatValue) || (this.value.isNaN && thatValue.isNaN)
case _ =>
false
}
}
}
object ConstantDouble {
final val KindId = 3
}
final case class ConstantFloat(value: Float) extends ConstantFieldValue[Float] with IsFloatValue {
override def constantValue: Option[Float] = Some(value)
override def toFloat: Float = value
override def valueToString: String = value.toString
override def toJava: String = valueToString+"f"
override def runtimeValueType: FloatType = FloatType
override def kindId: Int = ConstantFloat.KindId
override def equals(other: Any): Boolean = {
other match {
case ConstantFloat(thatValue) =>
(this.value == thatValue) || (this.value.isNaN && thatValue.isNaN)
case _ =>
false
}
}
}
object ConstantFloat {
final val KindId = 4
}
final case class ConstantString(
value: String
) extends ConstantFieldValue[String]
with IsStringValue {
override def toUTF8: String = value
override def valueToString: String = value.toString
override def toJava: String = s""""$valueToString""""
override def runtimeValueType: ObjectType.String.type = ObjectType.String
override def kindId: Int = ConstantString.KindId
override def constantValue: Option[String] = Some(value)
override def toCanonicalForm: IsStringValue = this
}
object ConstantString {
final val KindId = 5
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy