Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -319,26 +319,36 @@ public static RuntimeMethodHandle GetMethodHandleFromIntPtr(IntPtr ptr)

public static (string assemblyName, string nameSpace, string shortClassName, string methodName) ParseFQN(string fqn)
{
var assembly = fqn.Substring(fqn.IndexOf('[') + 1, fqn.IndexOf(']') - 1).Trim();
fqn = fqn.Substring(fqn.IndexOf(']') + 1).Trim();
var methodName = fqn.Substring(fqn.IndexOf(':') + 1);
var className = fqn.Substring(0, fqn.IndexOf(':')).Trim();

var nameSpace = "";
var shortClassName = className;
var idx = fqn.LastIndexOf(".");
if (idx != -1)
{
nameSpace = fqn.Substring(0, idx);
shortClassName = className.Substring(idx + 1);
}
ReadOnlySpan<char> fqnSpan = fqn.AsSpan();
ReadOnlySpan<char> assemblyStart = fqnSpan.Slice(fqnSpan.IndexOf('[') + 1);
int assemblyEnd = assemblyStart.IndexOf(']');

if (assemblyEnd == -1 || assemblyStart.Length == fqnSpan.Length)
throw new InvalidOperationException($"No assembly name specified {fqn}");

string assembly = assemblyStart.Slice(assemblyEnd -1).Trim().ToString();
ReadOnlySpan<char> classAndMethod = assemblyStart.Slice(assemblyEnd + 1).Trim();

int classNameEnd = classAndMethod.IndexOf(':');
if (classNameEnd == -1)
throw new InvalidOperationException($"No class name specified {fqn}");

ReadOnlySpan<char> classSpan = classAndMethod.Slice(0, classNameEnd).Trim();
string methodName = classAndMethod.Slice(classNameEnd + 1).Trim().ToString();

if (string.IsNullOrEmpty(assembly))
throw new InvalidOperationException("No assembly name specified " + fqn);
if (string.IsNullOrEmpty(className))
throw new InvalidOperationException("No class name specified " + fqn);
if (string.IsNullOrEmpty(methodName))
throw new InvalidOperationException("No method name specified " + fqn);
throw new InvalidOperationException($"No method name specified {fqn}");

int namespaceEnd = classSpan.LastIndexOf('.');
string shortClassName;
string nameSpace = string.Empty;
if (namespaceEnd != -1)
{
shortClassName = classSpan.Slice(namespaceEnd + 1).ToString();
nameSpace = classSpan.Slice(0, namespaceEnd).ToString();
} else {
shortClassName = classSpan.ToString();
}
return (assembly, nameSpace, shortClassName, methodName);
}
}
Expand Down