You are viewing a plain text version of this content. The canonical link for it is here.
Posted to npanday-commits@incubator.apache.org by br...@apache.org on 2012/02/08 08:53:38 UTC

svn commit: r1241821 - /incubator/npanday/trunk/dotnet/assemblies/NPanday.ProjectImporter/Engine/src/main/csharp/Converter/Algorithms/AbstractPomConverter.cs

Author: brett
Date: Wed Feb  8 08:53:37 2012
New Revision: 1241821

URL: http://svn.apache.org/viewvc?rev=1241821&view=rev
Log:
add some additional guards against index errors, and logging to GAC reference resolution exception cases

Modified:
    incubator/npanday/trunk/dotnet/assemblies/NPanday.ProjectImporter/Engine/src/main/csharp/Converter/Algorithms/AbstractPomConverter.cs

Modified: incubator/npanday/trunk/dotnet/assemblies/NPanday.ProjectImporter/Engine/src/main/csharp/Converter/Algorithms/AbstractPomConverter.cs
URL: http://svn.apache.org/viewvc/incubator/npanday/trunk/dotnet/assemblies/NPanday.ProjectImporter/Engine/src/main/csharp/Converter/Algorithms/AbstractPomConverter.cs?rev=1241821&r1=1241820&r2=1241821&view=diff
==============================================================================
--- incubator/npanday/trunk/dotnet/assemblies/NPanday.ProjectImporter/Engine/src/main/csharp/Converter/Algorithms/AbstractPomConverter.cs (original)
+++ incubator/npanday/trunk/dotnet/assemblies/NPanday.ProjectImporter/Engine/src/main/csharp/Converter/Algorithms/AbstractPomConverter.cs Wed Feb  8 08:53:37 2012
@@ -760,9 +760,17 @@ namespace NPanday.ProjectImporter.Conver
                 // Assembly is found at the gac
 
                 //exclude ProcessArchitecture when loading assembly on a non-32 bit machine
-                refs = GacUtility.GetInstance().GetAssemblyInfo(reference.Name, reference.Version, null);
+                List<string> versionRefs = GacUtility.GetInstance().GetAssemblyInfo(reference.Name, reference.Version, null);
+                if (versionRefs.Count == 0)
+                {
+                    throw new Exception("Unable to find assembly for '" + reference.Name + "' version '" + reference.Version + "', original refs were: " + string.Join(", ", refs.ToArray()));
+                }
+                else if (versionRefs.Count > 1)
+                {
+                    log.Warn("Found more than one reference for a single version, using the first only: " + string.Join(", ", versionRefs.ToArray()));
+                }
 
-                System.Reflection.Assembly a = System.Reflection.Assembly.ReflectionOnlyLoad(new System.Reflection.AssemblyName(refs[0]).FullName);
+                System.Reflection.Assembly a = System.Reflection.Assembly.ReflectionOnlyLoad(new System.Reflection.AssemblyName(versionRefs[0]).FullName);
 
                 Dependency refDependency = new Dependency();
                 refDependency.artifactId = reference.Name;
@@ -779,9 +787,16 @@ namespace NPanday.ProjectImporter.Conver
                 else
                 {
                     int start = a.FullName.IndexOf("PublicKeyToken=");
-                    int length = (a.FullName.Length) - start;
-                    refDependency.classifier = a.FullName.Substring(start, length);
-                    refDependency.classifier = refDependency.classifier.Replace("PublicKeyToken=", "");
+                    if (start < 0)
+                    {
+                        int length = (a.FullName.Length) - start;
+                        refDependency.classifier = a.FullName.Substring(start, length);
+                        refDependency.classifier = refDependency.classifier.Replace("PublicKeyToken=", "");
+                    }
+                    else
+                    {
+                        log.Warn("No public key token found for GAC dependency, excluding classifier: " + a.FullName);
+                    }
                 }
 
                 return refDependency;
@@ -814,7 +829,7 @@ namespace NPanday.ProjectImporter.Conver
                          ), "Add Reference", MessageBoxButtons.OK, MessageBoxIcon.Warning);
 
                         isPathReference = true;
-                    }
+                    }   
 
                 }
 
@@ -827,8 +842,14 @@ namespace NPanday.ProjectImporter.Conver
                 {
                     refDependency.artifactId = reference.Name;
                    
+                    // TODO: not a very good parsing of .references - if we have .references, don't we already know it?
                     //get version from the name above the last path
                     string[] pathTokens = reference.HintFullPath.Split("\\\\".ToCharArray());
+                    if (pathTokens.Length < 3)
+                    {
+                        // should only hit this if it is in .references, and it was incorrectly constructed
+                        throw new Exception("Invalid hint path: " + reference.HintFullPath);
+                    }
                     refDependency.groupId = pathTokens[pathTokens.Length - 3];
                     refDependency.version = pathTokens[pathTokens.Length-2].Replace(reference.Name+"-","") ?? "1.0.0.0";
                     //refDependency.version = reference.Version ?? "1.0.0.0";