Skip to content

Commit fc0b1f5

Browse files
Merge pull request #310 from opalj/fix/reflective-field-accesses
Fix class cast exception
2 parents 784aba2 + d3a56fe commit fc0b1f5

File tree

1 file changed

+15
-10
lines changed

1 file changed

+15
-10
lines changed

OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/fieldaccess/reflection/ReflectionRelatedFieldAccessesAnalysis.scala

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -971,16 +971,21 @@ class MethodHandleInvokeAnalysis private[analyses] (
971971
if (definition.isMethodHandleConst) {
972972
definition.asMethodHandleConst.value match {
973973
case handle: InstanceFieldAccessMethodHandle =>
974-
matchers += MatcherUtil.retrieveSuitableNonEssentialMatcher[V](
975-
actualParams.flatMap(_.head),
976-
v => new ActualReceiverBasedFieldMatcher(v.value.asReferenceValue)
977-
)
978-
matchers ++= MethodHandlesUtil.retrieveMatchersForMethodHandleConst(
979-
handle.declaringClassType,
980-
handle.name,
981-
handle.fieldType,
982-
isStatic = false
983-
)
974+
val receiver = actualParams.flatMap(_.head)
975+
if (receiver.forall(r => r.value.isPrimitiveValue)) {
976+
matchers = Set(NoFieldsMatcher)
977+
} else {
978+
matchers += MatcherUtil.retrieveSuitableNonEssentialMatcher[V](
979+
receiver,
980+
v => new ActualReceiverBasedFieldMatcher(v.value.asReferenceValue)
981+
)
982+
matchers ++= MethodHandlesUtil.retrieveMatchersForMethodHandleConst(
983+
handle.declaringClassType,
984+
handle.name,
985+
handle.fieldType,
986+
isStatic = false
987+
)
988+
}
984989

985990
case handle: StaticFieldAccessMethodHandle =>
986991
matchers ++= MethodHandlesUtil.retrieveMatchersForMethodHandleConst(

0 commit comments

Comments
 (0)