Author: sisbell
Date: Sun Dec 2 11:31:32 2007
New Revision: 600361
URL: http://svn.apache.org/viewvc?rev=600361&view=rev
Log:
Implementation for dynamically loading compiler classes based on annotations.
Also changed CompilerAnnotation to specify multiple vendor and framework
versions.
Modified:
incubator/nmaven/branches/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-compiler-ext/src/main/java/org/apache/maven/dotnet/compiler/ext/CSharpCompiler.java
incubator/nmaven/branches/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-compiler/src/main/java/org/apache/maven/dotnet/compiler/CompilerAnnotation.java
incubator/nmaven/branches/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-compiler/src/main/java/org/apache/maven/dotnet/compiler/impl/DotnetCompilerContextImpl.java
Modified:
incubator/nmaven/branches/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-compiler-ext/src/main/java/org/apache/maven/dotnet/compiler/ext/CSharpCompiler.java
URL:
http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-compiler-ext/src/main/java/org/apache/maven/dotnet/compiler/ext/CSharpCompiler.java?rev=600361&r1=600360&r2=600361&view=diff
==============================================================================
---
incubator/nmaven/branches/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-compiler-ext/src/main/java/org/apache/maven/dotnet/compiler/ext/CSharpCompiler.java
(original)
+++
incubator/nmaven/branches/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-compiler-ext/src/main/java/org/apache/maven/dotnet/compiler/ext/CSharpCompiler.java
Sun Dec 2 11:31:32 2007
@@ -17,8 +17,8 @@
import org.apache.maven.dotnet.compiler.ProgrammingLanguage;
import org.apache.maven.dotnet.compiler.Vendor;
[EMAIL PROTECTED](getProgrammingLanguaqe = ProgrammingLanguage.C_SHARP,
getVendor = Vendor.MICROSOFT,
- getDotnetCompilerPlatformVersion =
DotnetCompilerPlatformVersion.VERSION_2_0_50727)
[EMAIL PROTECTED](programmingLanguaqe = ProgrammingLanguage.C_SHARP, vendors =
{Vendor.MICROSOFT, Vendor.NOVELL, Vendor.ANY},
+ dotnetCompilerPlatformVersions =
{DotnetCompilerPlatformVersion.VERSION_2_0_50727,
DotnetCompilerPlatformVersion.VERSION_3_0})
public class CSharpCompiler
implements org.apache.maven.dotnet.compiler.Compiler
{
@@ -43,12 +43,11 @@
Set<Artifact> modules = compilerContext.getDirectModuleDependencies();
File sourceDirectory = config.getSourceDirectory();
- // File artifactFilePath = new File(config.getTargetDirectory(), )
+ // File artifactFilePath = new File(config.getTargetDirectory(), )
String targetArtifactType =
config.getArtifactType().getTargetCompileType();
-
Set<String> commands = new HashSet<String>();
- // commands.add( "/out:" + artifactFilePath );
+ // commands.add( "/out:" + artifactFilePath );
commands.add( "/target:" + targetArtifactType );
commands.add( "/recurse:" + sourceDirectory + File.separator + "**" );
if ( modules != null && !modules.isEmpty() )
@@ -98,7 +97,7 @@
}
if ( config.getVendor().equals( Vendor.MICROSOFT ) &&
- config.getCompilerPlatformVersion().equals(
DotnetCompilerPlatformVersion.VERSION_3_0) )
+ config.getCompilerPlatformVersion().equals(
DotnetCompilerPlatformVersion.VERSION_3_0 ) )
{
String wcfRef = "/reference:" + System.getenv( "SystemRoot" ) +
"\\Microsoft.NET\\Framework\\v3.0\\Windows Communication
Foundation\\";
@@ -135,8 +134,7 @@
}
if ( !config.isTestCompile() )
{
- commands.add(
- "/doc:" + new File( config.getTargetDirectory(),
"comments.xml" ).getAbsolutePath() );
+ commands.add( "/doc:" + new File( config.getTargetDirectory(),
"comments.xml" ).getAbsolutePath() );
}
return commands;
}
@@ -152,7 +150,7 @@
//commandExecutor.setLogger( logger );
try
{
- commandExecutor.executeCommand(getCompilerFileName(),
getCommands() );
+ commandExecutor.executeCommand( getCompilerFileName(),
getCommands() );
}
catch ( CompilerException e )
{
Modified:
incubator/nmaven/branches/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-compiler/src/main/java/org/apache/maven/dotnet/compiler/CompilerAnnotation.java
URL:
http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-compiler/src/main/java/org/apache/maven/dotnet/compiler/CompilerAnnotation.java?rev=600361&r1=600360&r2=600361&view=diff
==============================================================================
---
incubator/nmaven/branches/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-compiler/src/main/java/org/apache/maven/dotnet/compiler/CompilerAnnotation.java
(original)
+++
incubator/nmaven/branches/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-compiler/src/main/java/org/apache/maven/dotnet/compiler/CompilerAnnotation.java
Sun Dec 2 11:31:32 2007
@@ -1,10 +1,15 @@
package org.apache.maven.dotnet.compiler;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
[EMAIL PROTECTED](RetentionPolicy.RUNTIME)
+
public @interface CompilerAnnotation
{
- ProgrammingLanguage getProgrammingLanguaqe();
+ ProgrammingLanguage programmingLanguaqe();
- Vendor getVendor();
+ Vendor[] vendors();
- DotnetCompilerPlatformVersion getDotnetCompilerPlatformVersion();
+ DotnetCompilerPlatformVersion[] dotnetCompilerPlatformVersions();
}
Modified:
incubator/nmaven/branches/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-compiler/src/main/java/org/apache/maven/dotnet/compiler/impl/DotnetCompilerContextImpl.java
URL:
http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-compiler/src/main/java/org/apache/maven/dotnet/compiler/impl/DotnetCompilerContextImpl.java?rev=600361&r1=600360&r2=600361&view=diff
==============================================================================
---
incubator/nmaven/branches/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-compiler/src/main/java/org/apache/maven/dotnet/compiler/impl/DotnetCompilerContextImpl.java
(original)
+++
incubator/nmaven/branches/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-compiler/src/main/java/org/apache/maven/dotnet/compiler/impl/DotnetCompilerContextImpl.java
Sun Dec 2 11:31:32 2007
@@ -1,9 +1,13 @@
package org.apache.maven.dotnet.compiler.impl;
import java.io.File;
+import java.io.IOException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
+import java.util.Enumeration;
+import java.util.jar.JarFile;
+import java.util.jar.JarEntry;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.dotnet.compiler.Compiler;
@@ -13,6 +17,7 @@
import org.apache.maven.dotnet.compiler.DotnetCompilerPlatformVersion;
import org.apache.maven.dotnet.compiler.PlatformUnsupportedException;
import org.apache.maven.dotnet.compiler.Vendor;
+import org.apache.maven.dotnet.compiler.CompilerAnnotation;
import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.logging.Logger;
import org.codehaus.plexus.util.StringUtils;
@@ -194,6 +199,63 @@
}
}//end for loop
}
+ String[] classPathJars = System.getProperty( "java.class.path" ).split(
"[\\" + File.separator + "]" );
+ for ( String classPathJar : classPathJars )
+ {
+ if ( classPathJar.contains( "dotnet-compiler-" ) )
+ {
+ JarFile jarFile = null;
+ try
+ {
+ jarFile = new JarFile( classPathJar );
+ }
+ catch ( IOException e )
+ {
+ e.printStackTrace();
+ }
+ Enumeration jarEntries = jarFile.entries();
+
+ while ( jarEntries.hasMoreElements() )
+ {
+ JarEntry jarEntry = (JarEntry) jarEntries.nextElement();
+ if ( jarEntry.isDirectory() )
+ {
+ continue;
+ }
+
+ String className = null;
+ try
+ {
+ Class c = Class.forName( jarEntry.getName() );
+ className = c.getName();
+ CompilerAnnotation annotation =
+ (CompilerAnnotation) c.getAnnotation(
CompilerAnnotation.class );
+ if ( annotation != null )
+ {
+ if ( isMatchBetween( (DotnetCompilerConfig)
compilerConfig, annotation ) )
+ {
+ compiler = (Compiler) c.newInstance();
+ compiler.init( this );
+ }
+ }
+ }
+ catch ( ClassNotFoundException e )
+ {
+ e.printStackTrace();
+ }
+ catch ( InstantiationException e )
+ {
+ throw new PlatformUnsupportedException(
+ "NMAVEN-061-005: Unable to create NetCompiler:
Class Name = " + className, e );
+ }
+ catch ( IllegalAccessException e )
+ {
+ throw new PlatformUnsupportedException(
+ "NMAVEN-061-006: Unable to create NetCompiler:
Class Name = " + className, e );
+ }
+ }
+ }
+ }
/*
String className = compilerCapability.getPluginClassName();
@@ -253,6 +315,14 @@
protected void turnOnAssemblyExistsCheck()
{
this.assemblyExistsCheck = true;
+ }
+
+ private static boolean isMatchBetween( DotnetCompilerConfig
compilerConfig, CompilerAnnotation compilerAnnotation )
+ {
+ return Arrays.asList( compilerAnnotation.vendors() ).contains(
compilerConfig.getVendor() ) &&
+ Arrays.asList( compilerAnnotation.dotnetCompilerPlatformVersions()
).contains(
+ compilerConfig.getCompilerPlatformVersion() ) &&
+ compilerAnnotation.programmingLanguaqe().equals(
compilerConfig.getProgrammingLanguage() );
}
private String getGacRootForMono()