You are viewing a plain text version of this content. The canonical link for it is here.
Posted to nmaven-commits@incubator.apache.org by br...@apache.org on 2008/07/01 01:39:34 UTC

svn commit: r672971 - in /incubator/nmaven/branches/NMAVEN_0.14: assemblies/NMaven.Solution/ plugins/maven-compile-plugin/src/main/java/org/apache/maven/dotnet/plugin/compile/ plugins/netplugins/NMaven.Plugin.Solution/src/main/csharp/NMaven/Plugin/Solu...

Author: brett
Date: Mon Jun 30 18:39:33 2008
New Revision: 672971

URL: http://svn.apache.org/viewvc?rev=672971&view=rev
Log:
[NMAVEN-110] Ability to generate .vbproj files in the Solution generator
Submitted by: Maria Catherine Tan

Modified:
    incubator/nmaven/branches/NMAVEN_0.14/assemblies/NMaven.Solution/IProjectReference.cs
    incubator/nmaven/branches/NMAVEN_0.14/assemblies/NMaven.Solution/ProjectGeneratorImpl.cs
    incubator/nmaven/branches/NMAVEN_0.14/assemblies/NMaven.Solution/ProjectReferenceImpl.cs
    incubator/nmaven/branches/NMAVEN_0.14/plugins/maven-compile-plugin/src/main/java/org/apache/maven/dotnet/plugin/compile/TestSourceProcessorMojo.java
    incubator/nmaven/branches/NMAVEN_0.14/plugins/netplugins/NMaven.Plugin.Solution/src/main/csharp/NMaven/Plugin/Solution/SolutionMojo.cs

Modified: incubator/nmaven/branches/NMAVEN_0.14/assemblies/NMaven.Solution/IProjectReference.cs
URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/NMAVEN_0.14/assemblies/NMaven.Solution/IProjectReference.cs?rev=672971&r1=672970&r2=672971&view=diff
==============================================================================
--- incubator/nmaven/branches/NMAVEN_0.14/assemblies/NMaven.Solution/IProjectReference.cs (original)
+++ incubator/nmaven/branches/NMAVEN_0.14/assemblies/NMaven.Solution/IProjectReference.cs Mon Jun 30 18:39:33 2008
@@ -25,12 +25,12 @@
 namespace NMaven.Solution
 {
 	/// <summary>
-	/// Provides services for obtaining information about a project (.csproj) reference
+	/// Provides services for obtaining information about a project (.csproj or .vbproj) reference
 	/// </summary>
 	public interface IProjectReference
 	{
         		
-		FileInfo CSProjectFile
+		FileInfo ProjectFile
 		{
 			get;
 			set;

Modified: incubator/nmaven/branches/NMAVEN_0.14/assemblies/NMaven.Solution/ProjectGeneratorImpl.cs
URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/NMAVEN_0.14/assemblies/NMaven.Solution/ProjectGeneratorImpl.cs?rev=672971&r1=672970&r2=672971&view=diff
==============================================================================
--- incubator/nmaven/branches/NMAVEN_0.14/assemblies/NMaven.Solution/ProjectGeneratorImpl.cs (original)
+++ incubator/nmaven/branches/NMAVEN_0.14/assemblies/NMaven.Solution/ProjectGeneratorImpl.cs Mon Jun 30 18:39:33 2008
@@ -39,12 +39,22 @@
 	/// </summary>
 	internal sealed class ProjectGeneratorImpl : IProjectGenerator
 	{
+        private Dictionary<String, String> directoryToFileNameExtensionMapping;
+
+        private Dictionary<String, String> directoryToImportProject;
 		
         /// <summary>
         /// Constructor
         /// </summary>
 		internal ProjectGeneratorImpl()
 		{
+            directoryToFileNameExtensionMapping = new Dictionary<string,string>();
+            directoryToFileNameExtensionMapping.Add("csharp", ".csproj");
+            directoryToFileNameExtensionMapping.Add("vb", ".vbproj");
+
+            directoryToImportProject = new Dictionary<string, string>();
+            directoryToImportProject.Add("csharp", @"$(MSBuildBinPath)\Microsoft.CSharp.Targets");
+            directoryToImportProject.Add("vb", @"$(MSBuildBinPath)\Microsoft.VisualBasic.Targets");
 		}
 		
 	    public IProjectReference GenerateProjectFor(NMaven.Model.Pom.Model model, 
@@ -68,11 +78,12 @@
 			                                         @"..\..\..\target\obj\",
 			                                         projectReferences,
 			                                         localRepository);
-			FileInfo fileInfo = new FileInfo(sourceFileDirectory.FullName + @"\" + projectFileName + ".csproj");
+            String fileNameExtension = directoryToFileNameExtensionMapping[sourceFileDirectory.Name];
+            FileInfo fileInfo = new FileInfo(sourceFileDirectory.FullName + @"\" + projectFileName + fileNameExtension);
 		    project.Save(fileInfo.FullName);
 
             IProjectReference projectReference = Factory.createDefaultProjectReference();
-		    projectReference.CSProjectFile = fileInfo;
+		    projectReference.ProjectFile = fileInfo;
 		    projectReference.ProjectGuid = projectGuid;
 		    projectReference.ProjectName = projectFileName;
 			return projectReference;	    	
@@ -90,12 +101,23 @@
 			Guid solutionGuid = Guid.NewGuid();
 			foreach(IProjectReference projectReference in projectReferences) 
 			{
-				writer.Write("Project(\"{");
-				writer.Write("FAE04EC0-301F-11D3-BF4B-00C04F79EFBC");
+                string projectType = null;
+                string projectFileExtension = projectReference.ProjectFile.Extension;
+                if (projectFileExtension == ".csproj")
+                {
+                    projectType = "FAE04EC0-301F-11D3-BF4B-00C04F79EFBC";
+                }
+                else if (projectFileExtension == ".vbproj")
+                {
+                    projectType = "F184B08F-C81C-45F6-A57F-5ABD9991F28F";
+                }
+
+                writer.Write("Project(\"{");
+                writer.Write(projectType);
 				writer.Write("}\") = \"");
 				writer.Write(projectReference.ProjectName);
 				writer.Write("\", \"");
-				writer.Write(projectReference.CSProjectFile.FullName);
+				writer.Write(projectReference.ProjectFile.FullName);
 				writer.Write("\", \"{");
 				writer.Write(projectReference.ProjectGuid.ToString());
 				writer.WriteLine("}\"");
@@ -142,9 +164,11 @@
             Engine engine = new Engine(Environment.GetEnvironmentVariable("SystemRoot") + @"\Microsoft.NET\Framework\v2.0.50727");
             Project project = new Project(engine);
 
+            string outputType = GetOutputType(model.packaging, "test".Equals(sourceFileDirectory.Parent.Name));
+
             Console.WriteLine("ProjectGuid = " + projectGuid.ToString() + ", RootNameSpace = " +
                 model.groupId + ", AssemblyName = " + assemblyName + ", BaseIntPath = " +
-                baseIntermediateOutputPath + ", OutputType = " + GetOutputType(model.packaging) + 
+                baseIntermediateOutputPath + ", OutputType = " + outputType + 
                 ", Packaging = " + model.packaging);
             //Main Properties
             BuildPropertyGroup groupProject = project.AddNewPropertyGroup(false);
@@ -154,14 +178,14 @@
             groupProject.AddNewProperty("RootNameSpace", model.groupId);
             groupProject.AddNewProperty("AssemblyName", assemblyName);
             groupProject.AddNewProperty("BaseIntermediateOutputPath", baseIntermediateOutputPath);
-            groupProject.AddNewProperty("OutputType", GetOutputType(model.packaging));
+            groupProject.AddNewProperty("OutputType", outputType);
             
             //Debug Properties
             groupProject = project.AddNewPropertyGroup(false);
             buildProperty.Condition = " '$(Configuration)' == '' ";
             groupProject.AddNewProperty( "OutputPath", assemblyOutputPath, false);
-            
-            project.AddNewImport(@"$(MSBuildBinPath)\Microsoft.CSharp.Targets", null);
+
+            project.AddNewImport(directoryToImportProject[sourceFileDirectory.Name], null);
             DirectoryInfo configDirectory = new DirectoryInfo(Environment.CurrentDirectory + @"\src\main\config");
             if(configDirectory.Exists)
             {
@@ -187,7 +211,7 @@
 			BuildItemGroup itemGroup = project.AddNewItemGroup();
 			foreach(IProjectReference projectReference in projectReferences)
 			{
-				BuildItem buildItem = itemGroup.AddNewItem("ProjectReference", projectReference.CSProjectFile.FullName);
+				BuildItem buildItem = itemGroup.AddNewItem("ProjectReference", projectReference.ProjectFile.FullName);
 				buildItem.SetMetadata("Project", "{" + projectReference.ProjectGuid.ToString() + "}");
 				buildItem.SetMetadata("Name", projectName);		
 			}
@@ -313,15 +337,15 @@
             }
 		}
 		
-		private String GetOutputType(String type)
-		{
-			if (type.Equals("library") || type.Equals("netplugin") || type.Equals("visual-studio-addin")
+		private String GetOutputType(String type,bool isATest)
+        {
+            if (type.Equals("library") || type.Equals("netplugin") || type.Equals("visual-studio-addin")
                 || type.Equals("sharp-develop-addin") || type.Equals("nar")) return "Library";
-			else if (type.Equals("exe")) return "Exe";
-			else if (type.Equals("winexe")) return "WinExe";
-			else if (type.Equals("module")) return "Module";
-			return null;
-		}
+            else if (type.Equals("exe")) return isATest ? "Library" : "Exe";
+            else if (type.Equals("winexe")) return "WinExe";
+            else if (type.Equals("module")) return "Module";
+            return null;
+        }
 		
 		private String GetExtension(String type)
 		{

Modified: incubator/nmaven/branches/NMAVEN_0.14/assemblies/NMaven.Solution/ProjectReferenceImpl.cs
URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/NMAVEN_0.14/assemblies/NMaven.Solution/ProjectReferenceImpl.cs?rev=672971&r1=672970&r2=672971&view=diff
==============================================================================
--- incubator/nmaven/branches/NMAVEN_0.14/assemblies/NMaven.Solution/ProjectReferenceImpl.cs (original)
+++ incubator/nmaven/branches/NMAVEN_0.14/assemblies/NMaven.Solution/ProjectReferenceImpl.cs Mon Jun 30 18:39:33 2008
@@ -30,7 +30,7 @@
 	internal sealed class ProjectReferenceImpl : IProjectReference
 	{
 		
-		private FileInfo csProjFile;
+		private FileInfo projFile;
 		
 		private string projectName;
 		
@@ -40,16 +40,16 @@
 		{
 		}
 		
-		public FileInfo CSProjectFile
+		public FileInfo ProjectFile
 		{
 			get
 			{
-				return csProjFile;	
+				return projFile;	
 			}
 			
 			set
 			{
-				csProjFile = value;	
+				projFile = value;	
 			}
 		}
 		

Modified: incubator/nmaven/branches/NMAVEN_0.14/plugins/maven-compile-plugin/src/main/java/org/apache/maven/dotnet/plugin/compile/TestSourceProcessorMojo.java
URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/NMAVEN_0.14/plugins/maven-compile-plugin/src/main/java/org/apache/maven/dotnet/plugin/compile/TestSourceProcessorMojo.java?rev=672971&r1=672970&r2=672971&view=diff
==============================================================================
--- incubator/nmaven/branches/NMAVEN_0.14/plugins/maven-compile-plugin/src/main/java/org/apache/maven/dotnet/plugin/compile/TestSourceProcessorMojo.java (original)
+++ incubator/nmaven/branches/NMAVEN_0.14/plugins/maven-compile-plugin/src/main/java/org/apache/maven/dotnet/plugin/compile/TestSourceProcessorMojo.java Mon Jun 30 18:39:33 2008
@@ -77,6 +77,7 @@
         List<String> excludeList = new ArrayList<String>();
         excludeList.add( "*.suo" );
         excludeList.add( "*.csproj" );
+        excludeList.add( "*.vbproj" );
         excludeList.add( "*.sln" );
         excludeList.add( "obj/**" );
         for ( int i = 0; i < testExcludes.length; ++i )

Modified: incubator/nmaven/branches/NMAVEN_0.14/plugins/netplugins/NMaven.Plugin.Solution/src/main/csharp/NMaven/Plugin/Solution/SolutionMojo.cs
URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/NMAVEN_0.14/plugins/netplugins/NMaven.Plugin.Solution/src/main/csharp/NMaven/Plugin/Solution/SolutionMojo.cs?rev=672971&r1=672970&r2=672971&view=diff
==============================================================================
--- incubator/nmaven/branches/NMAVEN_0.14/plugins/netplugins/NMaven.Plugin.Solution/src/main/csharp/NMaven/Plugin/Solution/SolutionMojo.cs (original)
+++ incubator/nmaven/branches/NMAVEN_0.14/plugins/netplugins/NMaven.Plugin.Solution/src/main/csharp/NMaven/Plugin/Solution/SolutionMojo.cs Mon Jun 30 18:39:33 2008
@@ -99,35 +99,41 @@
 			} 
 			else
 			{
-				IProjectReference mainProjectReference = null;
-				if(new DirectoryInfo(currentDirectory.FullName + @"\src\main\csharp\").Exists)
-				{
-					mainProjectReference = 
-			 			projectGenerator.GenerateProjectFor(model,
-			 	                                    new DirectoryInfo(currentDirectory.FullName + @"\src\main\csharp\"),
-			 	                                    model.artifactId, null, new DirectoryInfo(localRepository));
-					Console.WriteLine("NMAVEN-000-000: Generated project: File Name = "
-					                  + mainProjectReference.CSProjectFile.FullName);
-					projectReferences.Add(mainProjectReference);
-				}
-				if(new DirectoryInfo( currentDirectory.FullName + @"\src\test\csharp\").Exists)
-				{
-					List<IProjectReference> mainRef = new List<IProjectReference>();
-					if(mainProjectReference != null)
-					{
-						mainRef.Add(mainProjectReference);
-					}
-					IProjectReference projectReference = 
-			 			projectGenerator.GenerateProjectFor(model,
-			 	                                    new DirectoryInfo(currentDirectory.FullName + @"\src\test\csharp\"),
-			 	                                    model.artifactId + "-Test", mainRef, new DirectoryInfo(localRepository));
-					Console.WriteLine("NMAVEN-000-000: Generated test project: File Name = "
-					                  + projectReference.CSProjectFile.FullName);
-					projectReferences.Add(projectReference);					
-				}
+                createMainAndTestProjectFiles(currentDirectory, model, projectReferences, projectGenerator, "csharp");
+                createMainAndTestProjectFiles(currentDirectory, model, projectReferences, projectGenerator, "vb");
 			}	
 			return projectReferences;
 		}
+
+        private void createMainAndTestProjectFiles(DirectoryInfo currentDirectory, NMaven.Model.Pom.Model model, List<IProjectReference> projectReferences, IProjectGenerator projectGenerator, string projType)
+        {
+            IProjectReference mainProjectReference = null;
+            if (new DirectoryInfo(currentDirectory.FullName + @"\src\main\" + projType + @"\").Exists)
+            {
+                mainProjectReference =
+                    projectGenerator.GenerateProjectFor(model,
+                                                new DirectoryInfo(currentDirectory.FullName + @"\src\main\" + projType + @"\"),
+                                                model.artifactId, null, new DirectoryInfo(localRepository));
+                Console.WriteLine("NMAVEN-000-000: Generated project: File Name = "
+                                  + mainProjectReference.ProjectFile.FullName);
+                projectReferences.Add(mainProjectReference);
+            }
+            if (new DirectoryInfo(currentDirectory.FullName + @"\src\test\" + projType + @"\").Exists)
+            {
+                List<IProjectReference> mainRef = new List<IProjectReference>();
+                if (mainProjectReference != null)
+                {
+                    mainRef.Add(mainProjectReference);
+                }
+                IProjectReference projectReference =
+                    projectGenerator.GenerateProjectFor(model,
+                                                new DirectoryInfo(currentDirectory.FullName + @"\src\test\" + projType + @"\"),
+                                                model.artifactId + "-Test", mainRef, new DirectoryInfo(localRepository));
+                Console.WriteLine("NMAVEN-000-000: Generated test project: File Name = "
+                                  + projectReference.ProjectFile.FullName);
+                projectReferences.Add(projectReference);
+            }
+        }
 		
 		private string GetArgFor(string name, string[] args)
 		{