Return-Path: X-Original-To: apmail-lucenenet-commits-archive@www.apache.org Delivered-To: apmail-lucenenet-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 8C55710D75 for ; Tue, 12 Nov 2013 22:59:15 +0000 (UTC) Received: (qmail 30697 invoked by uid 500); 12 Nov 2013 22:59:15 -0000 Delivered-To: apmail-lucenenet-commits-archive@lucenenet.apache.org Received: (qmail 30672 invoked by uid 500); 12 Nov 2013 22:59:15 -0000 Mailing-List: contact commits-help@lucenenet.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: lucene-net-dev@lucenenet.apache.org Delivered-To: mailing list commits@lucenenet.apache.org Received: (qmail 30665 invoked by uid 99); 12 Nov 2013 22:59:15 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 12 Nov 2013 22:59:15 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 23C4A823A72; Tue, 12 Nov 2013 22:59:15 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: paulirwin@apache.org To: commits@lucenenet.apache.org Message-Id: <5a3e14306da14f27a812c9f4799656e1@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: git commit: Bugfix to SPIClassIterator to support unloaded referenced assemblies Date: Tue, 12 Nov 2013 22:59:15 +0000 (UTC) Updated Branches: refs/heads/branch_4x eef5d7a0b -> 4865dce05 Bugfix to SPIClassIterator to support unloaded referenced assemblies i.e. Facets assembly for codecs Project: http://git-wip-us.apache.org/repos/asf/lucenenet/repo Commit: http://git-wip-us.apache.org/repos/asf/lucenenet/commit/4865dce0 Tree: http://git-wip-us.apache.org/repos/asf/lucenenet/tree/4865dce0 Diff: http://git-wip-us.apache.org/repos/asf/lucenenet/diff/4865dce0 Branch: refs/heads/branch_4x Commit: 4865dce05ff9fc4b9264f670955f97300ec0f1e5 Parents: eef5d7a Author: Paul Irwin Authored: Tue Nov 12 17:58:23 2013 -0500 Committer: Paul Irwin Committed: Tue Nov 12 17:58:23 2013 -0500 ---------------------------------------------------------------------- src/core/Util/SPIClassIterator.cs | 38 ++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lucenenet/blob/4865dce0/src/core/Util/SPIClassIterator.cs ---------------------------------------------------------------------- diff --git a/src/core/Util/SPIClassIterator.cs b/src/core/Util/SPIClassIterator.cs index 0d865fa..f58e870 100644 --- a/src/core/Util/SPIClassIterator.cs +++ b/src/core/Util/SPIClassIterator.cs @@ -12,17 +12,22 @@ namespace Lucene.Net.Util /// public class SPIClassIterator : IEnumerable { - private static List _types; + private static HashSet _types; static SPIClassIterator() { - _types = new List(); + _types = new HashSet(); - foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) + // .NET Port Hack: We do a 2-level deep check here because if the assembly you're + // hoping would be loaded hasn't been loaded yet into the app domain, + // it is unavailable. So we go to the next level on each and check each referenced + // assembly. + + foreach (var loadedAssembly in AppDomain.CurrentDomain.GetAssemblies()) { try { - foreach (var type in assembly.GetTypes()) + foreach (var type in loadedAssembly.GetTypes()) { try { @@ -39,6 +44,31 @@ namespace Lucene.Net.Util { // swallow } + + foreach (var assemblyName in loadedAssembly.GetReferencedAssemblies()) + { + try + { + var assembly = Assembly.Load(assemblyName); + + foreach (var type in assembly.GetTypes()) + { + try + { + if (typeof(S).IsAssignableFrom(type) && !type.IsAbstract && !type.IsInterface && type.GetConstructor(Type.EmptyTypes) != null) + _types.Add(type); + } + catch + { + // swallow + } + } + } + catch + { + // swallow + } + } } }