This is an automated email from the ASF dual-hosted git repository. nightowl888 pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/lucenenet.git
commit 27136637cae941776058edaff6d6e516b285a068 Author: Shad Storhaug <[email protected]> AuthorDate: Sun Jun 28 19:47:39 2020 +0700 Lucene.Net.Util.AttributeSource: Optimized string building for converting Attribute interface name to Attribute class name (#295, #261) --- src/Lucene.Net/Util/AttributeSource.cs | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/Lucene.Net/Util/AttributeSource.cs b/src/Lucene.Net/Util/AttributeSource.cs index 6e27b51..5e352f7 100644 --- a/src/Lucene.Net/Util/AttributeSource.cs +++ b/src/Lucene.Net/Util/AttributeSource.cs @@ -137,16 +137,34 @@ namespace Lucene.Net.Util } // LUCENENET specific - factored this out so we can reuse - private static WeakReference<Type> CreateAttributeWeakReference(Type attClass, out Type clazz) + private static WeakReference<Type> CreateAttributeWeakReference(Type attributeInterfaceType, out Type clazz) { try { - string name = attClass.FullName.Replace(attClass.Name, attClass.Name.Substring(1)) + ", " + attClass.GetTypeInfo().Assembly.FullName; - return new WeakReference<Type>(clazz = Type.GetType(name, true)); + string name = ConvertAttributeInterfaceToClassName(attributeInterfaceType); + return new WeakReference<Type>(clazz = attributeInterfaceType.Assembly.GetType(name, true)); } catch (Exception e) { - throw new ArgumentException("Could not find implementing class for " + attClass.Name, e); + throw new ArgumentException("Could not find implementing class for " + attributeInterfaceType.Name, e); + } + } + + private static string ConvertAttributeInterfaceToClassName(Type attributeInterfaceType) + { + int lastPlus = attributeInterfaceType.FullName.LastIndexOf('+'); + if (lastPlus == -1) + { + return string.Concat( + attributeInterfaceType.Namespace, + ".", + attributeInterfaceType.Name.Substring(1)); + } + else + { + return string.Concat( + attributeInterfaceType.FullName.Substring(0, lastPlus + 1), + attributeInterfaceType.Name.Substring(1)); } } }
