forked from openrs2/openrs2
parent
84f18c4d10
commit
0f78c9582c
@ -1,88 +0,0 @@ |
|||||||
package dev.openrs2.deob.analysis; |
|
||||||
|
|
||||||
import java.util.Objects; |
|
||||||
import java.util.Set; |
|
||||||
|
|
||||||
import com.google.common.base.MoreObjects; |
|
||||||
import com.google.common.base.Preconditions; |
|
||||||
import com.google.common.collect.ImmutableSet; |
|
||||||
import org.objectweb.asm.tree.analysis.BasicValue; |
|
||||||
import org.objectweb.asm.tree.analysis.Value; |
|
||||||
|
|
||||||
public final class IntValue implements Value { |
|
||||||
public static IntValue newConstant(BasicValue basicValue, int intValue) { |
|
||||||
return newConstant(basicValue, ImmutableSet.of(intValue)); |
|
||||||
} |
|
||||||
|
|
||||||
public static IntValue newConstant(BasicValue basicValue, Set<Integer> intValues) { |
|
||||||
Preconditions.checkArgument(basicValue == BasicValue.INT_VALUE); |
|
||||||
Preconditions.checkArgument(!intValues.isEmpty()); |
|
||||||
return new IntValue(basicValue, intValues); |
|
||||||
} |
|
||||||
|
|
||||||
public static IntValue newUnknown(BasicValue basicValue) { |
|
||||||
Preconditions.checkNotNull(basicValue); |
|
||||||
return new IntValue(basicValue, ImmutableSet.of()); |
|
||||||
} |
|
||||||
|
|
||||||
private final BasicValue basicValue; |
|
||||||
private final Set<Integer> intValues; |
|
||||||
|
|
||||||
private IntValue(BasicValue basicValue, Set<Integer> intValues) { |
|
||||||
this.basicValue = basicValue; |
|
||||||
this.intValues = intValues; |
|
||||||
} |
|
||||||
|
|
||||||
public BasicValue getBasicValue() { |
|
||||||
return basicValue; |
|
||||||
} |
|
||||||
|
|
||||||
public boolean isUnknown() { |
|
||||||
return intValues.isEmpty(); |
|
||||||
} |
|
||||||
|
|
||||||
public boolean isSingleConstant() { |
|
||||||
return intValues.size() == 1; |
|
||||||
} |
|
||||||
|
|
||||||
public int getIntValue() { |
|
||||||
Preconditions.checkState(isSingleConstant()); |
|
||||||
return intValues.iterator().next(); |
|
||||||
} |
|
||||||
|
|
||||||
public Set<Integer> getIntValues() { |
|
||||||
Preconditions.checkArgument(!isUnknown()); |
|
||||||
return intValues; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public int getSize() { |
|
||||||
return basicValue.getSize(); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public boolean equals(Object o) { |
|
||||||
if (this == o) { |
|
||||||
return true; |
|
||||||
} |
|
||||||
if (o == null || getClass() != o.getClass()) { |
|
||||||
return false; |
|
||||||
} |
|
||||||
IntValue intValue1 = (IntValue) o; |
|
||||||
return basicValue.equals(intValue1.basicValue) && |
|
||||||
Objects.equals(intValues, intValue1.intValues); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public int hashCode() { |
|
||||||
return Objects.hash(basicValue, intValues); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public String toString() { |
|
||||||
return MoreObjects.toStringHelper(this) |
|
||||||
.add("basicValue", basicValue) |
|
||||||
.add("intValues", intValues) |
|
||||||
.toString(); |
|
||||||
} |
|
||||||
} |
|
@ -0,0 +1,25 @@ |
|||||||
|
package dev.openrs2.deob.analysis |
||||||
|
|
||||||
|
import org.objectweb.asm.tree.analysis.BasicValue |
||||||
|
import org.objectweb.asm.tree.analysis.Value |
||||||
|
|
||||||
|
sealed class IntValue : Value { |
||||||
|
data class Unknown(override val basicValue: BasicValue) : IntValue() |
||||||
|
data class Constant(override val basicValue: BasicValue, val values: Set<Int>) : IntValue() { |
||||||
|
val singleton: Int? |
||||||
|
|
||||||
|
init { |
||||||
|
require(values.isNotEmpty()) |
||||||
|
|
||||||
|
singleton = if (values.size == 1) values.first() else null |
||||||
|
} |
||||||
|
|
||||||
|
constructor(basicValue: BasicValue, value: Int) : this(basicValue, setOf(value)) |
||||||
|
} |
||||||
|
|
||||||
|
abstract val basicValue: BasicValue |
||||||
|
|
||||||
|
override fun getSize(): Int { |
||||||
|
return basicValue.size |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue