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 jf...@apache.org on 2011/07/02 03:52:53 UTC
svn commit: r1142150 - in /incubator/npanday/trunk:
components/dotnet-assembler/src/main/java/npanday/assembler/
components/dotnet-assembler/src/main/java/npanday/assembler/impl/
components/dotnet-core/src/main/resources/META-INF/npanday/ plugins/maven...
Author: jfallows
Date: Sat Jul 2 03:52:53 2011
New Revision: 1142150
URL: http://svn.apache.org/viewvc?rev=1142150&view=rev
Log:
Fix NPANDAY-450 by adding support for Portable Class Libraries
Modified:
incubator/npanday/trunk/components/dotnet-assembler/src/main/java/npanday/assembler/AssemblyInfo.java
incubator/npanday/trunk/components/dotnet-assembler/src/main/java/npanday/assembler/impl/AssemblerContextImpl.java
incubator/npanday/trunk/components/dotnet-assembler/src/main/java/npanday/assembler/impl/DefaultAssemblyInfoMarshaller.java
incubator/npanday/trunk/components/dotnet-core/src/main/resources/META-INF/npanday/compiler-plugins.xml
incubator/npanday/trunk/plugins/maven-compile-plugin/src/main/java/npanday/plugin/compile/AssemblyInfoGeneratorMojo.java
Modified: incubator/npanday/trunk/components/dotnet-assembler/src/main/java/npanday/assembler/AssemblyInfo.java
URL: http://svn.apache.org/viewvc/incubator/npanday/trunk/components/dotnet-assembler/src/main/java/npanday/assembler/AssemblyInfo.java?rev=1142150&r1=1142149&r2=1142150&view=diff
==============================================================================
--- incubator/npanday/trunk/components/dotnet-assembler/src/main/java/npanday/assembler/AssemblyInfo.java (original)
+++ incubator/npanday/trunk/components/dotnet-assembler/src/main/java/npanday/assembler/AssemblyInfo.java Sat Jul 2 03:52:53 2011
@@ -19,6 +19,7 @@
package npanday.assembler;
import java.io.File;
+import java.util.Collections;
import java.util.Map;
/**
@@ -83,8 +84,12 @@ public class AssemblyInfo
private File keyFile;
+ private TargetFramework targetFramework;
+
private Map<String, String> customStringAttributes;
+ private static final Map<String, String> EMPTY_CUSTOM_STRING_ATTRIBUTES = Collections.emptyMap();;
+
/**
* Default constructor
*/
@@ -104,7 +109,8 @@ public class AssemblyInfo
.append( "\r\nCopyright: " ).append( copyright )
.append( "\r\nTrademark: " ).append( trademark )
.append( "\r\nCulture: " ).append( culture )
- .append( "\r\nConfiguration: " ).append( configuration );
+ .append( "\r\nConfiguration: " ).append( configuration )
+ .append( "\r\nTargetFramework: " ).append( targetFramework );
return sb.toString();
}
@@ -135,7 +141,7 @@ public class AssemblyInfo
public String getVersion()
{
- return ( version != null ) ? version : "";
+ return version;
}
public void setVersion( String version )
@@ -145,7 +151,7 @@ public class AssemblyInfo
public String getInformationalVersion()
{
- return ( informationalVersion != null ) ? informationalVersion : "";
+ return informationalVersion;
}
public void setInformationalVersion( String informationalVersion )
@@ -156,7 +162,7 @@ public class AssemblyInfo
public String getDescription()
{
- return ( description != null ) ? description : "";
+ return description;
}
public void setDescription( String description )
@@ -166,7 +172,7 @@ public class AssemblyInfo
public String getTitle()
{
- return ( title != null ) ? title : "";
+ return title;
}
public void setTitle( String title )
@@ -176,7 +182,7 @@ public class AssemblyInfo
public String getCompany()
{
- return ( company != null ) ? company : "";
+ return company;
}
public void setCompany( String company )
@@ -186,7 +192,7 @@ public class AssemblyInfo
public String getProduct()
{
- return ( product != null ) ? product : "";
+ return product;
}
public void setProduct( String product )
@@ -196,7 +202,7 @@ public class AssemblyInfo
public String getCopyright()
{
- return ( copyright != null ) ? copyright : "";
+ return copyright;
}
public void setCopyright( String copyright )
@@ -206,7 +212,7 @@ public class AssemblyInfo
public String getTrademark()
{
- return ( trademark != null ) ? trademark : "";
+ return trademark;
}
public void setTrademark( String trademark )
@@ -216,7 +222,7 @@ public class AssemblyInfo
public String getCulture()
{
- return ( culture != null ) ? culture : "";
+ return culture;
}
public void setCulture( String culture )
@@ -226,7 +232,7 @@ public class AssemblyInfo
public String getConfiguration()
{
- return ( configuration != null ) ? configuration : "";
+ return configuration;
}
public void setConfiguration( String configuration )
@@ -234,9 +240,19 @@ public class AssemblyInfo
this.configuration = configuration;
}
+ public void setTargetFramework( TargetFramework targetFramework )
+ {
+ this.targetFramework = targetFramework;
+ }
+
+ public TargetFramework getTargetFramework()
+ {
+ return targetFramework;
+ }
+
public Map<String, String> getCustomStringAttributes()
{
- return customStringAttributes;
+ return (customStringAttributes != null) ? customStringAttributes : EMPTY_CUSTOM_STRING_ATTRIBUTES;
}
public void setCustomStringAttributes(Map<String, String> attributes)
@@ -293,6 +309,10 @@ public class AssemblyInfo
{
return false;
}
+ if ( targetFramework != null ? !targetFramework.equals( that.targetFramework ) : that.targetFramework != null )
+ {
+ return false;
+ }
return true;
}
@@ -310,7 +330,81 @@ public class AssemblyInfo
result = 29 * result + ( trademark != null ? trademark.hashCode() : 0 );
result = 29 * result + ( culture != null ? culture.hashCode() : 0 );
result = 29 * result + ( configuration != null ? configuration.hashCode() : 0 );
+ result = 29 * result + ( targetFramework != null ? targetFramework.hashCode() : 0 );
return result;
}
+ public static class TargetFramework
+ {
+ /**
+ * Target framework name
+ */
+ private String frameworkName;
+
+ /**
+ * Target framework display name
+ */
+ private String frameworkDisplayName;
+
+ public void setFrameworkName(String frameworkName)
+ {
+ this.frameworkName = frameworkName;
+ }
+
+ public String getFrameworkName()
+ {
+ return this.frameworkName;
+ }
+
+ public void setFrameworkDisplayName(String frameworkDisplayName)
+ {
+ this.frameworkDisplayName = frameworkDisplayName;
+ }
+
+ public String getFrameworkDisplayName()
+ {
+ return this.frameworkDisplayName;
+ }
+
+ public boolean equals( Object o )
+ {
+ if ( this == o )
+ {
+ return true;
+ }
+ if ( o == null || getClass() != o.getClass() )
+ {
+ return false;
+ }
+
+ final TargetFramework that = (TargetFramework) o;
+ if ( frameworkName != null ? !frameworkName.equals( that.frameworkName ) : that.frameworkName != null )
+ {
+ return false;
+ }
+ if ( frameworkDisplayName != null ? !frameworkDisplayName.equals( that.frameworkDisplayName ) : that.frameworkDisplayName != null )
+ {
+ return false;
+ }
+ return true;
+ }
+
+ public int hashCode()
+ {
+ int result;
+ result = ( frameworkName != null ? frameworkName.hashCode() : 0 );
+ result = 29 * result + ( frameworkDisplayName != null ? frameworkDisplayName.hashCode() : 0 );
+ return result;
+ }
+
+ public String toString()
+ {
+ StringBuffer sb = new StringBuffer();
+ sb.append( "FrameworkName: " ).append( frameworkName )
+ .append( "\r\nFrameworkDisplayName: " ).append( frameworkDisplayName );
+ return sb.toString();
+ }
+
+ }
+
}
Modified: incubator/npanday/trunk/components/dotnet-assembler/src/main/java/npanday/assembler/impl/AssemblerContextImpl.java
URL: http://svn.apache.org/viewvc/incubator/npanday/trunk/components/dotnet-assembler/src/main/java/npanday/assembler/impl/AssemblerContextImpl.java?rev=1142150&r1=1142149&r2=1142150&view=diff
==============================================================================
--- incubator/npanday/trunk/components/dotnet-assembler/src/main/java/npanday/assembler/impl/AssemblerContextImpl.java (original)
+++ incubator/npanday/trunk/components/dotnet-assembler/src/main/java/npanday/assembler/impl/AssemblerContextImpl.java Sat Jul 2 03:52:53 2011
@@ -89,12 +89,12 @@ public final class AssemblerContextImpl
{
String basedir = mavenProject.getBasedir().toString();
AssemblyInfo assemblyInfo = new AssemblyInfo();
- String description = mavenProject.getDescription();
- String version = mavenProject.getVersion();
+ String description = ( mavenProject.getDescription() != null ) ? mavenProject.getDescription() : "";
+ String version = ( mavenProject.getVersion() != null ) ? mavenProject.getVersion() : "";
String name = mavenProject.getName();
Organization org = mavenProject.getOrganization();
String company = ( org != null ) ? org.getName() : "";
- String copyright = null;
+ String copyright = "";
String informationalVersion = "";
String configuration = "";
Modified: incubator/npanday/trunk/components/dotnet-assembler/src/main/java/npanday/assembler/impl/DefaultAssemblyInfoMarshaller.java
URL: http://svn.apache.org/viewvc/incubator/npanday/trunk/components/dotnet-assembler/src/main/java/npanday/assembler/impl/DefaultAssemblyInfoMarshaller.java?rev=1142150&r1=1142149&r2=1142150&view=diff
==============================================================================
--- incubator/npanday/trunk/components/dotnet-assembler/src/main/java/npanday/assembler/impl/DefaultAssemblyInfoMarshaller.java (original)
+++ incubator/npanday/trunk/components/dotnet-assembler/src/main/java/npanday/assembler/impl/DefaultAssemblyInfoMarshaller.java Sat Jul 2 03:52:53 2011
@@ -21,6 +21,7 @@ package npanday.assembler.impl;
import npanday.assembler.AssemblyInfoException;
import npanday.assembler.AssemblyInfoMarshaller;
import npanday.assembler.AssemblyInfo;
+import npanday.assembler.AssemblyInfo.TargetFramework;
import npanday.model.assembly.plugins.AssemblyPlugin;
import java.io.OutputStream;
@@ -56,33 +57,48 @@ final class DefaultAssemblyInfoMarshalle
public void marshal( AssemblyInfo assemblyInfo, MavenProject mavenProject, OutputStream outputStream )
throws AssemblyInfoException, IOException
{
- String src = mavenProject.getBuild().getDirectory() + "/build-sources";
StringBuffer sb = new StringBuffer();
sb.append( "using System.Reflection;\r\n" )
- .append( "using System.Runtime.CompilerServices;\r\n" )
- .append( createEntry( "Description", assemblyInfo.getDescription() ) )
- .append( createEntry( "Title", assemblyInfo.getTitle() ) )
- .append( createEntry( "Company", assemblyInfo.getCompany() ) )
- .append( createEntry( "Product", assemblyInfo.getProduct() ) )
- .append( createEntry( "Copyright", assemblyInfo.getCopyright().replace( "\"", "\\" ) ) )
- .append( createEntry( "Trademark", assemblyInfo.getTrademark() ) )
- .append( createEntry( "Culture", assemblyInfo.getCulture() ) )
- .append( createEntry( "Version", assemblyInfo.getVersion() ) )
- .append( createEntry( "InformationalVersion", assemblyInfo.getInformationalVersion() ) )
- .append( createEntry( "Configuration", assemblyInfo.getConfiguration() ) );
- if ( assemblyInfo.getKeyName() != null )
+ .append( "using System.Runtime.CompilerServices;\r\n" );
+ appendEntry( sb, "Description", assemblyInfo.getDescription() );
+ appendEntry( sb, "Title", assemblyInfo.getTitle() );
+ appendEntry( sb, "Company", assemblyInfo.getCompany() );
+ appendEntry( sb, "Product", assemblyInfo.getProduct() );
+ if (assemblyInfo.getCopyright() != null)
+ {
+ appendEntry( sb, "Copyright", assemblyInfo.getCopyright().replace( "\"", "\\" ) );
+ }
+ appendEntry( sb, "Trademark", assemblyInfo.getTrademark() );
+ appendEntry( sb, "Culture", assemblyInfo.getCulture() );
+ appendEntry( sb, "Version", assemblyInfo.getVersion() );
+ appendEntry( sb, "InformationalVersion", assemblyInfo.getInformationalVersion() );
+ appendEntry( sb, "Configuration", assemblyInfo.getConfiguration() );
+ appendEntry( sb, "KeyName", assemblyInfo.getKeyName() );
+
+ if ( assemblyInfo.getKeyFile() != null )
{
- sb.append( createEntry( "KeyName", assemblyInfo.getKeyName() ) );
+ appendEntry( sb, "KeyFile", assemblyInfo.getKeyFile().getAbsolutePath().replace( "\\", "\\\\" ) );
}
- if ( assemblyInfo.getKeyFile() != null )
+
+ TargetFramework targetFramework = assemblyInfo.getTargetFramework();
+ if (targetFramework != null)
{
- sb.append( createEntry( "KeyFile", assemblyInfo.getKeyFile().getAbsolutePath().replace( "\\", "\\\\" ) ) );
+ String frameworkName = targetFramework.getFrameworkName();
+ String frameworkDisplayName = targetFramework.getFrameworkDisplayName();
+ sb.append( "[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute" )
+ .append( "(\"" ).append( frameworkName ).append("\"");
+ if (frameworkDisplayName != null)
+ {
+ sb.append(",FrameworkDisplayName=\"").append(frameworkDisplayName).append("\"");
+ }
+ sb.append( ")]" ).append("\r\n" );
}
boolean wroteCustomStringAttribute = false;
for(Entry<String, String> e: assemblyInfo.getCustomStringAttributes().entrySet()) {
if(StringUtils.isEmpty(e.getValue()))
continue;
+
sb.append(createCustomStringEntry(e.getKey(), e.getValue()));
wroteCustomStringAttribute = true;
}
@@ -100,12 +116,17 @@ final class DefaultAssemblyInfoMarshalle
FileOutputStream man = null;
try
{
- String groupIdAsDir = mavenProject.getGroupId().replace( ".", File.separator );
- File file = new File( src + "/META-INF/" + groupIdAsDir );
- file.mkdirs();
- man = new FileOutputStream(
- src + "/META-INF/" + groupIdAsDir + File.separator + "AssemblyInfo." + plugin.getExtension() );
- man.write( sb.toString().getBytes() );
+ if ( outputStream == null )
+ {
+ String src = mavenProject.getBuild().getDirectory() + "/build-sources";
+ String groupIdAsDir = mavenProject.getGroupId().replace( ".", File.separator );
+ File file = new File( src + "/META-INF/" + groupIdAsDir );
+ file.mkdirs();
+ man = new FileOutputStream(
+ src + "/META-INF/" + groupIdAsDir + File.separator + "AssemblyInfo." + plugin.getExtension() );
+ outputStream = man;
+ }
+ outputStream.write( sb.toString().getBytes() );
}
catch ( IOException e )
{
@@ -222,18 +243,19 @@ final class DefaultAssemblyInfoMarshalle
}
/**
- * Returns an assembly entry with a name-value pair surrounded by brackets.
+ * Appends an assembly entry with a name-value pair surrounded by brackets.
*
+ * @param sb the string buffer to be appended
* @param name the name of the assembly entry
* @param value the value of the assembly entry
- * @return an assembly entry with a name-value pair surrounded by brackets
*/
- private String createEntry( String name, String value )
+ private void appendEntry( StringBuffer sb, String name, String value )
{
- StringBuffer sb = new StringBuffer();
- sb.append( "[assembly: Assembly" ).append( name ).append( "(\"" ).append( value ).append( "\")]" ).append(
- "\r\n" );
- return sb.toString();
+ if (value != null)
+ {
+ sb.append( "[assembly: Assembly" ).append( name ).append( "(\"" ).append( value ).append( "\")]" ).append(
+ "\r\n" );
+ }
}
private String createCustomStringEntry( String name, String value )
Modified: incubator/npanday/trunk/components/dotnet-core/src/main/resources/META-INF/npanday/compiler-plugins.xml
URL: http://svn.apache.org/viewvc/incubator/npanday/trunk/components/dotnet-core/src/main/resources/META-INF/npanday/compiler-plugins.xml?rev=1142150&r1=1142149&r2=1142150&view=diff
==============================================================================
--- incubator/npanday/trunk/components/dotnet-core/src/main/resources/META-INF/npanday/compiler-plugins.xml (original)
+++ incubator/npanday/trunk/components/dotnet-core/src/main/resources/META-INF/npanday/compiler-plugins.xml Sat Jul 2 03:52:53 2011
@@ -209,6 +209,78 @@ under the License.
</commandFilter>
</compilerPlugin>
<compilerPlugin>
+ <identifier>MS-CS:4.0:Portable</identifier>
+ <pluginClass>npanday.executable.compiler.impl.CSharpCompilerForProfile</pluginClass>
+ <vendor>MICROSOFT</vendor>
+ <executable>csc</executable>
+ <language>C_SHARP</language>
+ <profile>PORTABLE</profile>
+ <frameworkVersions>
+ <frameworkVersion>4.0</frameworkVersion>
+ </frameworkVersions>
+ <platforms>
+ <platform>
+ <operatingSystem>Windows</operatingSystem>
+ <architecture>x86</architecture>
+ </platform>
+ </platforms>
+ <defaultAssemblyPath>C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.0</defaultAssemblyPath>
+ <assemblies>
+ <assembly>mscorlib</assembly>
+ <assembly>System</assembly>
+ <assembly>System.ComponentModel.Composition</assembly>
+ <assembly>System.Core</assembly>
+ <assembly>System.Net</assembly>
+ <assembly>System.Runtime.Serialization</assembly>
+ <assembly>System.ServiceModel</assembly>
+ <assembly>System.Windows</assembly>
+ <assembly>System.Xml</assembly>
+ <assembly>System.Xml.Serialization</assembly>
+ </assemblies>
+ <commandFilter>
+ <includes>
+ <include>out</include>
+ <include>target</include>
+ <include>delaysign</include>
+ <include>doc</include>
+ <include>keyfile</include>
+ <include>keycontainer</include>
+ <include>platform</include>
+ <include>recurse</include>
+ <include>reference</include>
+ <include>addmodule</include>
+ <include>win32res</include>
+ <include>win32icon</include>
+ <include>resource</include>
+ <include>linkresource</include>
+ <include>debug</include>
+ <include>optimize</include>
+ <include>warnaserror</include>
+ <include>warn</include>
+ <include>nowarn</include>
+ <include>checked</include>
+ <include>unsafe</include>
+ <include>define</include>
+ <include>langversion</include>
+ <include>help</include>
+ <include>nologo</include>
+ <include>noconfig</include>
+ <include>baseaddress</include>
+ <include>bugreport</include>
+ <include>codepage</include>
+ <include>utf8output</include>
+ <include>main</include>
+ <include>fullpaths</include>
+ <include>filealign</include>
+ <include>pdb</include>
+ <include>nostdlib</include>
+ <include>lib</include>
+ <include>errorreport</include>
+ <include>moduleassemblyname</include>
+ </includes>
+ </commandFilter>
+ </compilerPlugin>
+ <compilerPlugin>
<identifier>MS-VB</identifier>
<pluginClass>npanday.executable.compiler.impl.DefaultCompiler</pluginClass>
<vendor>MICROSOFT</vendor>
Modified: incubator/npanday/trunk/plugins/maven-compile-plugin/src/main/java/npanday/plugin/compile/AssemblyInfoGeneratorMojo.java
URL: http://svn.apache.org/viewvc/incubator/npanday/trunk/plugins/maven-compile-plugin/src/main/java/npanday/plugin/compile/AssemblyInfoGeneratorMojo.java?rev=1142150&r1=1142149&r2=1142150&view=diff
==============================================================================
--- incubator/npanday/trunk/plugins/maven-compile-plugin/src/main/java/npanday/plugin/compile/AssemblyInfoGeneratorMojo.java (original)
+++ incubator/npanday/trunk/plugins/maven-compile-plugin/src/main/java/npanday/plugin/compile/AssemblyInfoGeneratorMojo.java Sat Jul 2 03:52:53 2011
@@ -26,16 +26,19 @@ import org.codehaus.plexus.util.FileUtil
import java.io.IOException;
import java.io.File;
+import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import npanday.InitializationException;
+import npanday.PlatformUnsupportedException;
import npanday.vendor.*;
import npanday.assembler.AssemblerContext;
import npanday.assembler.AssemblyInfoMarshaller;
import npanday.assembler.AssemblyInfoException;
import npanday.assembler.AssemblyInfo;
+import npanday.assembler.AssemblyInfo.TargetFramework;
/**
* Generates an AssemblyInfo.* class based on information within the pom file.
@@ -110,6 +113,20 @@ public class AssemblyInfoGeneratorMojo
private String sourceDirectory;
/**
+ * The framework name to target.
+ *
+ * @parameter expression = "${frameworkName}"
+ */
+ private String frameworkName;
+
+ /**
+ * The framework display name to target.
+ *
+ * @parameter expression = "${frameworkDisplayName}"
+ */
+ private String frameworkDisplayName;
+
+ /**
* @component
*/
private AssemblerContext assemblerContext;
@@ -139,6 +156,57 @@ public class AssemblyInfoGeneratorMojo
return;
}
+
+ // auto-generate the target framework attribute metadata (needed for .NETPortable)
+ if ( frameworkName != null )
+ {
+ TargetFramework targetFramework = new TargetFramework();
+ targetFramework.setFrameworkName(frameworkName);
+ targetFramework.setFrameworkDisplayName(frameworkDisplayName);
+
+ AssemblyInfo assemblyInfo = new AssemblyInfo();
+ assemblyInfo.setTargetFramework(targetFramework);
+
+ try
+ {
+ FileOutputStream assemblyAttrs = null;
+ try
+ {
+ String sourcesDir = project.getBuild().getDirectory() + "/build-sources";
+ String groupIdAsDir = project.getGroupId().replace( ".", File.separator );
+
+ File assemblyAttrsDir = new File( sourcesDir + "/META-INF/" + groupIdAsDir );
+ String assemblyAttrsExt = assemblerContext.getClassExtensionFor( language.trim() );
+
+ assemblyAttrsDir.mkdirs();
+ assemblyAttrs = new FileOutputStream(
+ assemblyAttrsDir + File.separator + frameworkName + ".AssemblyAttributes." + assemblyAttrsExt );
+
+ AssemblyInfoMarshaller marshaller = assemblerContext.getAssemblyInfoMarshallerFor( language.trim() );
+ marshaller.marshal( assemblyInfo, project, assemblyAttrs );
+ }
+ finally
+ {
+ if ( assemblyAttrs != null )
+ {
+ assemblyAttrs .close();
+ }
+ }
+ }
+ catch ( IOException e )
+ {
+ throw new MojoExecutionException( "NPANDAY-902-008: Problem generating assembly attributes class", e );
+ }
+ catch ( AssemblyInfoException e )
+ {
+ throw new MojoExecutionException( "NPANDAY-902-009: Problem generating assembly attributes class", e );
+ }
+ catch ( PlatformUnsupportedException e )
+ {
+ throw new MojoExecutionException( "NPANDAY-902-010: Problem generating assembly attributes class", e );
+ }
+ }
+
File srcFile = new File( sourceDirectory );
if ( srcFile.exists() )
{