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";