Accessing FunctionList from FKismetCompilerContext(Extending BlueprintCompilation)

Hello to give little more context I’ll write what i’m trying to do.
I’m trying to add extension to blueprint compilation that will fail compilation if given “event/function” won’t be implemented.

My current idea is to try accessing FKismetFunctionContext from FKismetCompilerContext and call IsValid method from it but sadly can’t find way to get to FunctionList in FKismetCompilerContext, and here comes my question does anybody knows how I could access this array or have better idea to solve this?

PS. My project is created on UE5

If there is some individual that would like to do same thing someday, here is my solution to this:

I didn’t find way to access FKismetFunctionContext but I found way to get to functions other way, because my function was in interface I was implementing I found this function through interface graphs and work with graph’s nodes to determine if these are connected correctly.

My code:

TArray<FBPInterfaceDescription>* ImplementedInterfaces = &CompilationContext.Blueprint->ImplementedInterfaces;
	for(FBPInterfaceDescription& ImplementedInterface : ImplementedInterfaces[0])
	{
		TSubclassOf<UInterface> ItemInterface = UItemInterface::StaticClass();
		if (ImplementedInterface.Interface != ItemInterface)
		{
			continue;
		}

		// Best example to understand what graph is, is to look in BP at for Event Graph it contains plenty of different nodes that do various things
		TArray<TObjectPtr<UEdGraph>> InterfaceGraphs = ImplementedInterface.Graphs;
		for (TObjectPtr<UEdGraph> InterfaceGraph : InterfaceGraphs)
		{
			TArray<UK2Node_VariableGet*> Nodes_VariableGet;
			// Find in graph nodes whose purpose of is to return variable
			InterfaceGraph->GetNodesOfClass<UK2Node_VariableGet> (Nodes_VariableGet);

			for(UK2Node_VariableGet* Node_VariableGet : Nodes_VariableGet)
			{
				if(Node_VariableGet->VariableReference.IsLocalScope())
				{
					CompilationContext.MessageLog.AddTokenizedMessage(FTokenizedMessage::Create(EMessageSeverity::Error,
						FText::FromString("Your node responsible for getting FItemData shouldn't be local variable please set it as member variable.")));
					continue;
				}


				FProperty* VariableProperty = Node_VariableGet->GetPropertyForVariable();
				FStructProperty* VariableStructProperty = CastField<FStructProperty> (VariableProperty);
				if(!VariableStructProperty)
				{
					continue;
				}

				// UScriptStruct is class used as base for generating every struct representation in UE by UnrealHeaderTool
				UScriptStruct* VariableStruct = VariableStructProperty->Struct;
				if(VariableStruct != FItemData::StaticStruct())
				{
					continue;
				}

				if(!Node_VariableGet->Pins.IsValidIndex(0))
				{
					CompilationContext.MessageLog.AddTokenizedMessage(FTokenizedMessage::Create(EMessageSeverity::Error,
						FText::FromString("Your node responsible for getting FItemData somehow doesn't have only one OutPin if you've splited pin please combine it back.")));
					continue;
				}

				UEdGraphPin* Node_Pin = Node_VariableGet->Pins[0];
				if (!Node_Pin->LinkedTo.IsValidIndex(0))
				{
					CompilationContext.MessageLog.AddTokenizedMessage(FTokenizedMessage::Create(EMessageSeverity::Error,
						FText::FromString("Your node responsible for getting FItemData isn't connected to any Pin please connect it to Output Pin.")));
					continue;
				}

				UEdGraphPin* FunctionOutPin = Node_Pin->LinkedTo[0];
				if (FunctionOutPin->GetName() != FString("outItemData"))
				{
					CompilationContext.MessageLog.AddTokenizedMessage(FTokenizedMessage::Create(EMessageSeverity::Error,
						FText::FromString("Your node responsible for getting FItemData isn't connected to function out pin please connect it.")));
					continue;
				}

				return;
			}
			FString FunctionGraphName = InterfaceGraph->GetName();
			CompilationContext.MessageLog.AddTokenizedMessage(FTokenizedMessage::Create(EMessageSeverity::Error,
				FText::FromString("Please implement " + FunctionGraphName + " method, by creating variable of given type as member variable and returning it in this method")));
		}
	}