You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by ni...@apache.org on 2020/06/30 21:50:39 UTC
[lucenenet] 03/27: Lucene.Net.Util.AttributeSource: Optimized
string building for converting Attribute interface name to Attribute class
name (#295, #261)
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 <sh...@shadstorhaug.com>
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));
}
}
}