ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Steve Loughran <ste...@apache.org>
Subject Re: svn commit: r495399 - in /ant/core/trunk: WHATSNEW src/main/org/apache/tools/ant/ComponentHelper.java
Date Fri, 12 Jan 2007 12:11:58 GMT
stevel@apache.org wrote:
> Author: stevel
> Date: Thu Jan 11 14:01:51 2007
> New Revision: 495399
> 
> URL: http://svn.apache.org/viewvc?view=rev&rev=495399
> Log:
> Extra diagnostics. Dump all types in a namespace if the one you ask for isnt known. Good
for identifying typos, and helps you differentiate "library not yet loaded" from "task unknown"
> 
> Modified:
>     ant/core/trunk/WHATSNEW
>     ant/core/trunk/src/main/org/apache/tools/ant/ComponentHelper.java
> 
> Modified: ant/core/trunk/WHATSNEW
> URL: http://svn.apache.org/viewvc/ant/core/trunk/WHATSNEW?view=diff&rev=495399&r1=495398&r2=495399
> ==============================================================================
> --- ant/core/trunk/WHATSNEW (original)
> +++ ant/core/trunk/WHATSNEW Thu Jan 11 14:01:51 2007
> @@ -63,6 +63,10 @@
>  
>  * Allow <mapper refid> to refer directly to a FileNameMapper instance.
>  
> +* If you try and use a type in a namespace (or an antlib), and the type is not
> +  recognized but there are other definitions in that namespace, Ant lists what
> +  the known definitions are. This helps you find spelling errors. 


>      /**
> -     * Print unknown definition.
> +     * Print unknown definition.forking
>       */
>      private void printUnknownDefinition(
>          PrintWriter out, String componentName, String dirListing) {
>          boolean isAntlib = componentName.indexOf(MagicNames.ANTLIB_PREFIX) == 0;
> +        String uri=ProjectHelper.extractUriFromComponentName(componentName);
>          out.println("Cause: The name is undefined.");
>          out.println("Action: Check the spelling.");
>          out.println("Action: Check that any custom tasks/types have been declared.");
>          out.println("Action: Check that any <presetdef>/<macrodef>"
>                      + " declarations have taken place.");
> -        if (isAntlib) {
> -            out.println();
> -            out.println("This appears to be an antlib declaration. ");
> -            out.println("Action: Check that the implementing library exists in one of:");
> -            out.println(dirListing);
> +        if(uri.length()>0) {
> +            List matches = antTypeTable.findMatches(uri);
> +            if(matches.size()>0) {
> +                out.println();
> +                out.println("The definitions in the namespace "+uri+" are:");
> +                for(Iterator it=matches.iterator();it.hasNext();) {
> +                    AntTypeDefinition def=(AntTypeDefinition) it.next();
> +                    String local = ProjectHelper.extractNameFromComponentName(def.getName());
> +                    out.println("    "+local);
> +                }
> +            } else {
> +                out.println("No types or tasks have been defined in this namespace yet");
> +                if (isAntlib) {
> +                    out.println();
> +                    out.println("This appears to be an antlib declaration. ");
> +                    out.println("Action: Check that the implementing library exists
in one of:");
> +                    out.println(dirListing);
> +                }
> +            }
>          }
>      }
>  

This is what the trace is:
BUILD FAILED - at 11/01/07 22:07
/home/slo/Projects/SmartFrog/Forge/core/components/database/build.xml:67:
Problem: failed to create task or type 
antlib:org.smartfrog.tools.ant:unknown
Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any <presetdef>/ <macrodef> declarations have taken 
place.

The definitions in the namespace antlib:org.smartfrog.tools.ant are:
     parse
     waitfordaemon
     gui
     ping
     stopdaemon
     undeploy
     tourl
     daemonfound
     daemon-debug
     run
     faultingwaitfor
     deploy
     functionaltest
     console-debug
     gui-debug
     startdaemon
     security
     management-console
     sign

It lets you see what is in a namespace, and whether anything at all is 
in there.

I've pulled the bit that tells you how to add an antlib to the classpath 
if there is stuff in the namespace. Instead I assume that the lib is 
loaded, and that you've just got the spelling wrong. If someone declares 
presets or macros in the same namespace then
that will be an invalid assumption.

I'd like to sort the listing, but that would mean implementing a 
comparator for the type definitions, or converting their short names to 
a string list and sorting that.

-steve

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org


Mime
View raw message