You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cz...@apache.org on 2012/05/14 15:21:05 UTC

svn commit: r1338189 [4/4] - in /felix/sandbox/cziegeler: eventadmin-tests/src/test/java/org/apache/felix/eventadmin/tests/ scrplugin/annotations/ scrplugin/annotations/src/main/java/org/apache/felix/scr/annotations/ scrplugin/annotations/src/main/java...

Modified: felix/sandbox/cziegeler/scrplugin/maven-scr-plugin/src/main/java/org/apache/felix/scrplugin/mojo/MavenLog.java
URL: http://svn.apache.org/viewvc/felix/sandbox/cziegeler/scrplugin/maven-scr-plugin/src/main/java/org/apache/felix/scrplugin/mojo/MavenLog.java?rev=1338189&r1=1338188&r2=1338189&view=diff
==============================================================================
--- felix/sandbox/cziegeler/scrplugin/maven-scr-plugin/src/main/java/org/apache/felix/scrplugin/mojo/MavenLog.java (original)
+++ felix/sandbox/cziegeler/scrplugin/maven-scr-plugin/src/main/java/org/apache/felix/scrplugin/mojo/MavenLog.java Mon May 14 13:21:02 2012
@@ -18,144 +18,154 @@
  */
 package org.apache.felix.scrplugin.mojo;
 
-
 import org.apache.felix.scrplugin.Log;
 
-
 /**
  * The <code>MavenLog</code> class implements the {@link Log} interface using
  * the Maven logger created on instantiation.
  */
-public class MavenLog implements Log
-{
+public class MavenLog implements Log {
 
     private final org.apache.maven.plugin.logging.Log mavenLog;
 
-
-    MavenLog( org.apache.maven.plugin.logging.Log mavenLog )
-    {
+    MavenLog(final org.apache.maven.plugin.logging.Log mavenLog) {
         this.mavenLog = mavenLog;
     }
 
-
-    public void debug( String content, Throwable error )
-    {
-        mavenLog.debug( content, error );
+    /**
+     * @see org.apache.felix.scrplugin.Log#debug(java.lang.String,
+     *      java.lang.Throwable)
+     */
+    public void debug(final String content, final Throwable error) {
+        mavenLog.debug(content, error);
     }
 
-
-    public void debug( String content )
-    {
-        mavenLog.debug( content );
+    /**
+     * @see org.apache.felix.scrplugin.Log#debug(java.lang.String)
+     */
+    public void debug(final String content) {
+        mavenLog.debug(content);
     }
 
-
-    public void debug( Throwable error )
-    {
-        mavenLog.debug( error );
+    /**
+     * @see org.apache.felix.scrplugin.Log#debug(java.lang.Throwable)
+     */
+    public void debug(final Throwable error) {
+        mavenLog.debug(error);
     }
 
-
-    public void error( String content, Throwable error )
-    {
-        mavenLog.error( content, error );
+    /**
+     * @see org.apache.felix.scrplugin.Log#error(java.lang.String, java.lang.Throwable)
+     */
+    public void error(final String content, final Throwable error) {
+        mavenLog.error(content, error);
     }
 
-
-    public void error( String content, String location, int lineNumber )
-    {
-        if ( isErrorEnabled() )
-        {
-            final String message = formatMessage( content, location, lineNumber );
-            mavenLog.error( message );
-        }
+    /**
+     * @see org.apache.felix.scrplugin.Log#error(java.lang.String, java.lang.String, int)
+     */
+    public void error(final String content,
+            final String location,
+            final int lineNumber) {
+        final String message = formatMessage(content, location, lineNumber);
+        mavenLog.error(message);
     }
 
-
-    public void error( String content )
-    {
-        mavenLog.error( content );
+    /**
+     * @see org.apache.felix.scrplugin.Log#error(java.lang.String)
+     */
+    public void error(final String content) {
+        mavenLog.error(content);
     }
 
-
-    public void error( Throwable error )
-    {
-        mavenLog.error( error );
+    /**
+     * @see org.apache.felix.scrplugin.Log#error(java.lang.Throwable)
+     */
+    public void error(final Throwable error) {
+        mavenLog.error(error);
     }
 
-
-    public void info( String content, Throwable error )
-    {
-        mavenLog.info( content, error );
+    /**
+     * @see org.apache.felix.scrplugin.Log#info(java.lang.String, java.lang.Throwable)
+     */
+    public void info(final String content, final Throwable error) {
+        mavenLog.info(content, error);
     }
 
-
-    public void info( String content )
-    {
-        mavenLog.info( content );
+    /**
+     * @see org.apache.felix.scrplugin.Log#info(java.lang.String)
+     */
+    public void info(final String content) {
+        mavenLog.info(content);
     }
 
-
-    public void info( Throwable error )
-    {
-        mavenLog.info( error );
+    /**
+     * @see org.apache.felix.scrplugin.Log#info(java.lang.Throwable)
+     */
+    public void info(final Throwable error) {
+        mavenLog.info(error);
     }
 
-
-    public boolean isDebugEnabled()
-    {
+    /**
+     * @see org.apache.felix.scrplugin.Log#isDebugEnabled()
+     */
+    public boolean isDebugEnabled() {
         return mavenLog.isDebugEnabled();
     }
 
-
-    public boolean isErrorEnabled()
-    {
+    /**
+     * @see org.apache.felix.scrplugin.Log#isErrorEnabled()
+     */
+    public boolean isErrorEnabled() {
         return mavenLog.isErrorEnabled();
     }
 
-
-    public boolean isInfoEnabled()
-    {
+    /**
+     * @see org.apache.felix.scrplugin.Log#isInfoEnabled()
+     */
+    public boolean isInfoEnabled() {
         return mavenLog.isInfoEnabled();
     }
 
-
-    public boolean isWarnEnabled()
-    {
+    /**
+     * @see org.apache.felix.scrplugin.Log#isWarnEnabled()
+     */
+    public boolean isWarnEnabled() {
         return mavenLog.isWarnEnabled();
     }
 
-
-    public void warn( String content, Throwable error )
-    {
-        mavenLog.warn( content, error );
-    }
-
-
-    public void warn( String content, String location, int lineNumber )
-    {
-        if ( isWarnEnabled() )
-        {
-            final String message = formatMessage( content, location, lineNumber );
-            mavenLog.warn( message );
-        }
-    }
-
-
-    public void warn( String content )
-    {
-        mavenLog.warn( content );
+    /**
+     * @see org.apache.felix.scrplugin.Log#warn(java.lang.String, java.lang.Throwable)
+     */
+    public void warn(final String content, final Throwable error) {
+        mavenLog.warn(content, error);
+    }
+
+    /**
+     * @see org.apache.felix.scrplugin.Log#warn(java.lang.String, java.lang.String, int)
+     */
+    public void warn(final String content, final String location,
+            final int lineNumber) {
+        final String message = formatMessage(content, location, lineNumber);
+        mavenLog.warn(message);
+    }
+
+    /**
+     * @see org.apache.felix.scrplugin.Log#warn(java.lang.String)
+     */
+    public void warn(final String content) {
+        mavenLog.warn(content);
+    }
+
+    /**
+     * @see org.apache.felix.scrplugin.Log#warn(java.lang.Throwable)
+     */
+    public void warn(final Throwable error) {
+        mavenLog.warn(error);
     }
 
-
-    public void warn( Throwable error )
-    {
-        mavenLog.warn( error );
-    }
-
-
-    private String formatMessage( String content, String location, int lineNumber )
-    {
+    private String formatMessage(final String content, final String location,
+            final int lineNumber) {
         return content + " at " + location + ":" + lineNumber;
     }
 }

Added: felix/sandbox/cziegeler/scrplugin/maven-scr-plugin/src/main/java/org/apache/felix/scrplugin/mojo/MavenProjectScanner.java
URL: http://svn.apache.org/viewvc/felix/sandbox/cziegeler/scrplugin/maven-scr-plugin/src/main/java/org/apache/felix/scrplugin/mojo/MavenProjectScanner.java?rev=1338189&view=auto
==============================================================================
--- felix/sandbox/cziegeler/scrplugin/maven-scr-plugin/src/main/java/org/apache/felix/scrplugin/mojo/MavenProjectScanner.java (added)
+++ felix/sandbox/cziegeler/scrplugin/maven-scr-plugin/src/main/java/org/apache/felix/scrplugin/mojo/MavenProjectScanner.java Mon May 14 13:21:02 2012
@@ -0,0 +1,163 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.scrplugin.mojo;
+
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.felix.scrplugin.Log;
+import org.apache.felix.scrplugin.helper.StringUtils;
+import org.apache.felix.scrplugin.scanner.Source;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.util.DirectoryScanner;
+
+
+public class MavenProjectScanner {
+
+    private final MavenProject project;
+
+    private final String includeString;
+
+    private final String excludeString;
+
+    private final Log log;
+
+    public MavenProjectScanner( final MavenProject project,
+            final String includeString,
+            final String excludeString,
+            final Log log) {
+        this.project = project;
+        this.includeString = includeString;
+        this.excludeString = excludeString;
+        this.log = log;
+    }
+
+    /**
+     * Return all sources.
+     */
+    public Collection<Source> getSources() {
+        final ArrayList<Source> files = new ArrayList<Source>();
+
+        @SuppressWarnings("unchecked")
+        final Iterator<String> i = project.getCompileSourceRoots().iterator();
+
+        // FELIX-509: check for excludes
+        String[] includes = new String[] { "**/*.java" };
+        if ( includeString != null ) {
+        	includes = StringUtils.split( includeString, "," );
+        }
+
+        final String[] excludes;
+        if ( excludeString != null ) {
+            excludes = StringUtils.split( excludeString, "," );
+        } else {
+            excludes = null;
+        }
+
+        while ( i.hasNext() ) {
+            final String tree = i.next();
+            final File directory = new File( tree );
+            if ( !directory.exists() ) {
+                log.warn("Source tree does not exist. Ignoring " + tree);
+                continue;
+            }
+            log.debug( "Scanning source tree " + tree );
+            final DirectoryScanner scanner = new DirectoryScanner();
+            scanner.setBasedir( directory );
+
+            if ( excludes != null && excludes.length > 0 ) {
+                scanner.setExcludes( excludes );
+            }
+            scanner.addDefaultExcludes();
+            scanner.setIncludes( includes );
+
+            scanner.scan();
+
+            for ( final String fileName : scanner.getIncludedFiles() ) {
+                files.add( new Source() {
+
+                    public File getFile() {
+                        return new File(directory, fileName);
+                    }
+
+                    public String getClassName() {
+                        // remove ".java"
+                        String name = fileName.substring(0, fileName.length() - 5);
+                        return name.replace(File.separatorChar, '/').replace('/', '.');
+                    }
+                });
+            }
+        }
+
+        return files;
+    }
+
+    /**
+     * Return all dependencies
+     */
+    public List<File> getDependencies() {
+        final ArrayList<File> dependencies = new ArrayList<File>();
+
+        @SuppressWarnings("unchecked")
+        final Iterator<Artifact> it = project.getArtifacts().iterator();
+        while ( it.hasNext() ) {
+            final Artifact declared = it.next();
+            this.log.debug( "Checking artifact " + declared );
+            if ( this.isJavaArtifact( declared ) ) {
+                if ( Artifact.SCOPE_COMPILE.equals( declared.getScope() )
+                    || Artifact.SCOPE_RUNTIME.equals( declared.getScope() )
+                    || Artifact.SCOPE_PROVIDED.equals( declared.getScope() )
+                    || Artifact.SCOPE_SYSTEM.equals( declared.getScope() ) ) {
+                    this.log.debug( "Resolving artifact " + declared );
+                    if ( declared.getFile() != null ) {
+                        dependencies.add( declared.getFile() );
+                    } else {
+                        this.log.debug( "Unable to resolve artifact " + declared );
+                    }
+                } else {
+                    this.log.debug( "Artifact " + declared + " has not scope compile or runtime, but "
+                        + declared.getScope() );
+                }
+            } else {
+                this.log.debug( "Artifact " + declared + " is not a java artifact, type is " + declared.getType() );
+            }
+        }
+
+        return dependencies;
+    }
+
+
+    /**
+     * Check if the artifact is a java artifact (jar or bundle)
+     */
+    private boolean isJavaArtifact( Artifact artifact ) {
+        if ( "jar".equals( artifact.getType() ) ) {
+            return true;
+        }
+        if ( "bundle".equals( artifact.getType() ) ) {
+            return true;
+        }
+        return false;
+    }
+}

Propchange: felix/sandbox/cziegeler/scrplugin/maven-scr-plugin/src/main/java/org/apache/felix/scrplugin/mojo/MavenProjectScanner.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: felix/sandbox/cziegeler/scrplugin/maven-scr-plugin/src/main/java/org/apache/felix/scrplugin/mojo/MavenProjectScanner.java
------------------------------------------------------------------------------
    svn:keywords = author date id revision rev url

Propchange: felix/sandbox/cziegeler/scrplugin/maven-scr-plugin/src/main/java/org/apache/felix/scrplugin/mojo/MavenProjectScanner.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: felix/sandbox/cziegeler/scrplugin/maven-scr-plugin/src/main/java/org/apache/felix/scrplugin/mojo/SCRDescriptorMojo.java
URL: http://svn.apache.org/viewvc/felix/sandbox/cziegeler/scrplugin/maven-scr-plugin/src/main/java/org/apache/felix/scrplugin/mojo/SCRDescriptorMojo.java?rev=1338189&r1=1338188&r2=1338189&view=diff
==============================================================================
--- felix/sandbox/cziegeler/scrplugin/maven-scr-plugin/src/main/java/org/apache/felix/scrplugin/mojo/SCRDescriptorMojo.java (original)
+++ felix/sandbox/cziegeler/scrplugin/maven-scr-plugin/src/main/java/org/apache/felix/scrplugin/mojo/SCRDescriptorMojo.java Mon May 14 13:21:02 2012
@@ -22,14 +22,25 @@ import java.io.File;
 import java.io.IOException;
 import java.net.URL;
 import java.net.URLClassLoader;
-import java.util.*;
-
-import org.apache.felix.scrplugin.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.felix.scrplugin.Options;
+import org.apache.felix.scrplugin.Project;
+import org.apache.felix.scrplugin.SCRDescriptorException;
+import org.apache.felix.scrplugin.SCRDescriptorFailureException;
+import org.apache.felix.scrplugin.SCRDescriptorGenerator;
+import org.apache.felix.scrplugin.description.SpecVersion;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.versioning.ArtifactVersion;
 import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
 import org.apache.maven.model.Resource;
-import org.apache.maven.plugin.*;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.project.MavenProject;
 import org.codehaus.plexus.util.StringUtils;
 
@@ -67,7 +78,7 @@ public class SCRDescriptorMojo extends A
      *
      * @see #checkAnnotationArtifact(Artifact)
      */
-    private static final ArtifactVersion SCR_ANN_MIN_VERSION = new DefaultArtifactVersion("1.5.1");
+    private static final ArtifactVersion SCR_ANN_MIN_VERSION = new DefaultArtifactVersion("1.6.0");
 
     /**
      * @parameter expression="${project.build.directory}/scr-plugin-generated"
@@ -125,14 +136,14 @@ public class SCRDescriptorMojo extends A
      */
     protected boolean strictMode;
 
-    
+
     /**
      * The comma separated list of tokens to include when processing sources.
-     * 
+     *
      * @parameter alias="includes"
      */
     private String sourceIncludes;
-    
+
     /**
      * The comma separated list of tokens to exclude when processing sources.
      *
@@ -149,14 +160,12 @@ public class SCRDescriptorMojo extends A
 
     /**
      * Allows to define additional implementations of the interface
-     * {@link org.apache.felix.scrplugin.tags.annotation.AnnotationTagProvider}
-     * that provide mappings from custom annotations to
-     * {@link org.apache.felix.scrplugin.tags.JavaTag} implementations.
-     * List of full qualified class file names.
+     * {@link org.apache.felix.scrplugin.AnnotationProcessor}
+     * that provide mappings from custom annotations to descriptions.
      *
      * @parameter
      */
-    private String[] annotationTagProviders = {};
+    private String[] annotationProcessors = {};
 
     /**
      * The version of the DS spec this plugin generates a descriptor for.
@@ -166,41 +175,47 @@ public class SCRDescriptorMojo extends A
     private String specVersion;
 
 
-    public void execute() throws MojoExecutionException, MojoFailureException
-    {
-        try
-        {
-            final org.apache.felix.scrplugin.Log scrLog = new MavenLog( getLog() );
-
-            final ClassLoader classLoader = new URLClassLoader( getClassPath(), this.getClass().getClassLoader() );
-            final JavaClassDescriptorManager jManager = new MavenJavaClassDescriptorManager( project, scrLog,
-                classLoader, this.annotationTagProviders, this.sourceIncludes, this.sourceExcludes, this.parseJavadoc,
-                this.processAnnotations );
+    public void execute() throws MojoExecutionException, MojoFailureException {
+        // create the log for the generator
+        final org.apache.felix.scrplugin.Log scrLog = new MavenLog( getLog() );
+        // create the class loader
+        final ClassLoader classLoader = new URLClassLoader( getClassPath(), this.getClass().getClassLoader() );
+
+        // create project
+        final MavenProjectScanner scanner = new MavenProjectScanner(this.project, this.sourceIncludes, this.sourceExcludes, scrLog);
+
+        final Project project = new Project();
+        project.setClassLoader(classLoader);
+        project.setDependencies(scanner.getDependencies());
+        project.setSources(scanner.getSources());
+
+        // create options
+        final Options options = new Options();
+        options.setGenerateAccessors( generateAccessors );
+        options.setStrictMode( strictMode );
+        options.setProperties( properties );
+        options.setSpecVersion( SpecVersion.fromName(specVersion) );
+        options.setAnnotationProcessors(annotationProcessors);
+        try {
 
             final SCRDescriptorGenerator generator = new SCRDescriptorGenerator( scrLog );
 
             // setup from plugin configuration
             generator.setOutputDirectory( outputDirectory );
-            generator.setDescriptorManager( jManager );
+            generator.setOptions(options);
+            generator.setProject(project);
             generator.setFinalName( finalName );
             generator.setMetaTypeName( metaTypeName );
-            generator.setGenerateAccessors( generateAccessors );
-            generator.setStrictMode( strictMode );
-            generator.setProperties( properties );
-            generator.setSpecVersion( specVersion );
 
-            if ( generator.execute() )
-            {
+            if ( generator.execute() ) {
                 setServiceComponentHeader();
                 addResources();
             }
+
         }
-        catch ( SCRDescriptorException sde )
-        {
+        catch ( final SCRDescriptorException sde ) {
             throw new MojoExecutionException( sde.getMessage(), sde.getCause() );
-        }
-        catch ( SCRDescriptorFailureException sdfe )
-        {
+        } catch ( SCRDescriptorFailureException sdfe ) {
             throw ( MojoFailureException ) new MojoFailureException( sdfe.getMessage() ).initCause( sdfe );
         }
     }
@@ -210,12 +225,9 @@ public class SCRDescriptorMojo extends A
         List<Artifact> artifacts = this.project.getCompileArtifacts();
         ArrayList<URL> path = new ArrayList<URL>();
 
-        try
-        {
+        try {
             path.add(new File( this.project.getBuild().getOutputDirectory() ).toURI().toURL());
-        }
-        catch ( IOException ioe )
-        {
+        } catch ( final IOException ioe ) {
             throw new MojoFailureException( "Unable to add target directory to classloader.");
         }
 
@@ -247,8 +259,7 @@ public class SCRDescriptorMojo extends A
      * @throws MojoFailureException If the artifact refers to the SCR Annotation
      *             library with a version less than {@link #SCR_ANN_MIN_VERSION}
      */
-    private void assertMinScrAnnotationArtifactVersion(Artifact a) throws MojoFailureException
-    {
+    private void assertMinScrAnnotationArtifactVersion(Artifact a) throws MojoFailureException {
         if (SCR_ANN_ARTIFACTID.equals(a.getArtifactId()) && SCR_ANN_GROUPID.equals(a.getGroupId()))
         {
             // assert minimal version number