{
  "isError" : false,
  "request" : { },
  "response" : {
    "chains" : [ {
      "errorCode" : "E08252",
      "innerLock" : {
        "displayName" : "com.example.polymorphic::lockB",
        "origin" : "FIELD_ROOTED",
        "originLocation" : {
          "column" : 6,
          "file" : "file://<workspace-root>/Polymorphic.ek9",
          "line" : 20
        },
        "originSymbol" : {
          "category" : "VARIABLE",
          "displayName" : "lockB",
          "fullyQualifiedName" : "com.example.polymorphic::lockB",
          "location" : {
            "column" : 6,
            "file" : "file://<workspace-root>/Polymorphic.ek9",
            "line" : 20
          },
          "name" : "lockB"
        },
        "stableId" : "field:com.example.polymorphic::lockB@20:6"
      },
      "outerLock" : {
        "displayName" : "com.example.polymorphic::lockA",
        "origin" : "FIELD_ROOTED",
        "originLocation" : {
          "column" : 6,
          "file" : "file://<workspace-root>/Polymorphic.ek9",
          "line" : 12
        },
        "originSymbol" : {
          "category" : "VARIABLE",
          "displayName" : "lockA",
          "fullyQualifiedName" : "com.example.polymorphic::lockA",
          "location" : {
            "column" : 6,
            "file" : "file://<workspace-root>/Polymorphic.ek9",
            "line" : 12
          },
          "name" : "lockA"
        },
        "stableId" : "field:com.example.polymorphic::lockA@12:6"
      },
      "path" : "SAME_THREAD",
      "steps" : [ {
        "contextFunction" : {
          "category" : "FUNCTION",
          "displayName" : "polymorphicGetterMultipleConcretes",
          "fullyQualifiedName" : "com.example.polymorphic::polymorphicGetterMultipleConcretes",
          "location" : {
            "column" : 4,
            "file" : "file://<workspace-root>/Polymorphic.ek9",
            "line" : 29
          },
          "name" : "polymorphicGetterMultipleConcretes"
        },
        "description" : "outer enter on holderA...lockA",
        "kind" : "ENTER",
        "location" : {
          "column" : 32,
          "file" : "file://<workspace-root>/Polymorphic.ek9",
          "line" : 41
        }
      }, {
        "contextFunction" : {
          "category" : "FUNCTION",
          "displayName" : "polymorphicGetterMultipleConcretes",
          "fullyQualifiedName" : "com.example.polymorphic::polymorphicGetterMultipleConcretes",
          "location" : {
            "column" : 4,
            "file" : "file://<workspace-root>/Polymorphic.ek9",
            "line" : 29
          },
          "name" : "polymorphicGetterMultipleConcretes"
        },
        "description" : "entered MutexKey body protecting holderA...lockA",
        "kind" : "KEY_BODY_ENTRY",
        "location" : {
          "column" : 18,
          "file" : "file://<workspace-root>/Polymorphic.ek9",
          "line" : 38
        },
        "stepTarget" : {
          "category" : "FUNCTION",
          "displayName" : "fn",
          "fullyQualifiedName" : "com.example.polymorphic::fn",
          "location" : {
            "column" : 18,
            "file" : "file://<workspace-root>/Polymorphic.ek9",
            "line" : 38
          },
          "name" : "fn"
        }
      }, {
        "contextFunction" : {
          "category" : "FUNCTION",
          "displayName" : "polymorphicGetterMultipleConcretes",
          "fullyQualifiedName" : "com.example.polymorphic::polymorphicGetterMultipleConcretes",
          "location" : {
            "column" : 4,
            "file" : "file://<workspace-root>/Polymorphic.ek9",
            "line" : 29
          },
          "name" : "polymorphicGetterMultipleConcretes"
        },
        "description" : "nested enter on holderB...lockB (path: SAME_THREAD)",
        "kind" : "ENTER",
        "location" : {
          "column" : 34,
          "file" : "file://<workspace-root>/Polymorphic.ek9",
          "line" : 39
        }
      } ]
    } ],
    "meta" : {
      "serverMs" : "<timing>"
    },
    "status" : "available"
  },
  "scenario" : "polymorphic_chain",
  "tool" : "query_deadlock_chain"
}
