SF.net SVN: ant-contrib: [145] cpptasks/trunk/src

[email protected] Fri, 21 Sep 2007 10:57:00 -0700
Newsgroups gmane.comp.java.ant-contrib.devel
Message-ID <[email protected]>
Revision: 145
          http://ant-contrib.svn.sourceforge.net/ant-contrib/?rev=145&view=rev
Author:   darius42
Date:     2007-09-21 10:57:00 -0700 (Fri, 21 Sep 2007)

Log Message:
-----------
Fix for bug 1794867 - LinkerDef wasn't correctly handling references.
Refactored code so that it relies on the correct behavior in ProcessorDef.

Modified Paths:
--------------
    cpptasks/trunk/src/main/java/net/sf/antcontrib/cpptasks/LinkerDef.java
    cpptasks/trunk/src/main/java/net/sf/antcontrib/cpptasks/ProcessorDef.java
    cpptasks/trunk/src/test/java/net/sf/antcontrib/cpptasks/TestLinkerDef.java

Modified: cpptasks/trunk/src/main/java/net/sf/antcontrib/cpptasks/LinkerDef.java
===================================================================
--- cpptasks/trunk/src/main/java/net/sf/antcontrib/cpptasks/LinkerDef.java	2007-09-11 08:52:26 UTC (rev 144)
+++ cpptasks/trunk/src/main/java/net/sf/antcontrib/cpptasks/LinkerDef.java	2007-09-21 17:57:00 UTC (rev 145)
@@ -115,30 +115,6 @@
         sysLibrarySets.addElement(libset);
     }
     
-    
-    public ProcessorConfiguration createConfiguration(CCTask task,
-            LinkType linkType, ProcessorDef baseDef, 
-			TargetDef targetPlatform,
-			VersionInfo versionInfo) {
-        //
-        //    must combine some local context (the linkType)
-        //       with the referenced element
-        //
-        //    get a pointer to the definition (either local or referenced)
-        ProcessorDef thisDef = this;
-        if (isReference()) {
-            thisDef = ((ProcessorDef) getCheckedRef(ProcessorDef.class,
-                    "ProcessorDef"));
-        }
-        //
-        //    find the appropriate processor (combines local linkType
-        //       with possibly remote linker name)
-        Processor proc = getProcessor();
-        proc = proc.getLinker(linkType);
-        ProcessorDef[] defaultProviders = getDefaultProviders(baseDef);
-        return proc.createConfiguration(task, linkType, defaultProviders,
-                thisDef, targetPlatform, versionInfo);
-    }
     public void execute() throws org.apache.tools.ant.BuildException {
         throw new org.apache.tools.ant.BuildException(
                 "Not an actual task, but looks like one for documentation purposes");
@@ -281,6 +257,12 @@
         }
         return linker;
     }
+    
+    public Processor getProcessor(LinkType linkType) {
+      Processor proc = getProcessor();
+      return proc.getLinker(linkType);
+    }
+   
     public int getStack(LinkerDef[] defaultProviders, int index) {
         if (isReference()) {
             return ((LinkerDef) getCheckedRef(LinkerDef.class, "LinkerDef"))

Modified: cpptasks/trunk/src/main/java/net/sf/antcontrib/cpptasks/ProcessorDef.java
===================================================================
--- cpptasks/trunk/src/main/java/net/sf/antcontrib/cpptasks/ProcessorDef.java	2007-09-11 08:52:26 UTC (rev 144)
+++ cpptasks/trunk/src/main/java/net/sf/antcontrib/cpptasks/ProcessorDef.java	2007-09-21 17:57:00 UTC (rev 145)
@@ -188,7 +188,7 @@
                     baseDef, targetPlatform, versionInfo);
         }
         ProcessorDef[] defaultProviders = getDefaultProviders(baseDef);
-        Processor proc = getProcessor();
+        Processor proc = getProcessor(linkType);
         return proc.createConfiguration(task, linkType, defaultProviders, this, targetPlatform, versionInfo);
     }
     /**
@@ -358,7 +358,18 @@
         }
         return processor;
     }
+
     /**
+     * Obtains the appropriate processor (compiler, linker) based on the 
+     * LinkType.
+     *
+     * @return processor
+     */
+    protected Processor getProcessor(LinkType linkType) {
+      // by default ignore the linkType.
+      return getProcessor();
+    }
+    /**
      * Gets a boolean value indicating whether all targets must be rebuilt
      * regardless of dependency analysis.
      * 

Modified: cpptasks/trunk/src/test/java/net/sf/antcontrib/cpptasks/TestLinkerDef.java
===================================================================
--- cpptasks/trunk/src/test/java/net/sf/antcontrib/cpptasks/TestLinkerDef.java	2007-09-11 08:52:26 UTC (rev 144)
+++ cpptasks/trunk/src/test/java/net/sf/antcontrib/cpptasks/TestLinkerDef.java	2007-09-21 17:57:00 UTC (rev 145)
@@ -26,8 +26,10 @@
 import net.sf.antcontrib.cpptasks.types.LibrarySet;
 import net.sf.antcontrib.cpptasks.types.LinkerArgument;
 import net.sf.antcontrib.cpptasks.types.SystemLibrarySet;
+import org.apache.tools.ant.Project;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.types.FlexInteger;
+import org.apache.tools.ant.types.Reference;
 
 /**
  * Tests for LinkerDef class.
@@ -152,6 +154,35 @@
   }
 
   /**
+   * Verify linkerarg's that appear in the base linker are effective when 
+   * creating the command line for a linker that extends it, even if the 
+   * linker is brought in through a reference.
+   */
+  public void testExtendsLinkerArgsViaReference() {
+    Project project = new Project();
+    LinkerDef baseLinker = new LinkerDef();
+    baseLinker.setProject(project);
+    baseLinker.setId("base");
+    project.addReference("base", baseLinker);
+    LinkerArgument linkerArg = new LinkerArgument();
+    linkerArg.setValue("/base");
+    baseLinker.addConfiguredLinkerArg(linkerArg);
+
+    LinkerDef extendedLinker = (LinkerDef) createExtendedProcessorDef(
+        baseLinker);
+    extendedLinker.setProject(project);
+    extendedLinker.setId("extended");
+    project.addReference("extended", extendedLinker);
+
+    LinkerDef linkerRef = new LinkerDef();
+    linkerRef.setProject(project);
+    linkerRef.setRefid(new Reference(project, "extended"));
+    String[] preArgs = getPreArguments(linkerRef);
+    assertEquals(1, preArgs.length);
+    assertEquals("/base", preArgs[0]);
+  }
+
+  /**
    * Tests that fileset's that appear in the base linker are effective when
    * creating the command line for a linker that extends it.
    * @throws IOException if unable to create or delete temporary file


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/