protected override Entity InternalResolve <TNode>( GraphStructuredProgram <TNode> program, ResolvedMethod <TNode> sourceMethod, Reference reference) { var classMethodReference = (ClassMethodReference)reference; var resolvedOwner = Resolve(program, sourceMethod, classMethodReference.Owner); if (resolvedOwner is ResolvedClassId owningClassId) { var owner = program.FindClassById(owningClassId); var method = program.GetOrCreateMethod(owner, classMethodReference.Name); var methodId = program.GetOrCreateMethodId(classMethodReference.Name); var resolvedReference = new ResolvedClassMethodReference <TNode>(owningClassId, methodId); resolvedReference.Method = method; return(resolvedReference); } if (resolvedOwner is SecondaryEntity owningEntity) { var methodId = program.GetOrCreateMethodId(classMethodReference.Name); var resolvedReference = new ResolvedObjectMethodReference <TNode>(owningEntity, methodId); resolvedReference.FindClassMethod = program.FindMethodById; sourceMethod.StoreAdditionalVariable(resolvedReference); return(resolvedReference); } return(null); }
protected override Entity RestoreImplementation <TNode>( GraphStructuredProgram <TNode> program, ResolvedMethod <TNode> method, Entity entity) { var objectMethodReference = (ResolvedObjectMethodReference <TNode>)entity; var restoredOwner = (SecondaryEntity)Restore(program, method, objectMethodReference.OwningObject); var restored = new ResolvedObjectMethodReference <TNode>(restoredOwner, objectMethodReference.MethodId) { FindClassMethod = program.FindMethodById }; method.StoreAdditionalVariable(restored); return(restored); }