You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by mb...@apache.org on 2006/11/22 00:50:00 UTC

svn commit: r477969 - in /ant/core/trunk/src/main/org/apache/tools/ant: ComponentHelper.java types/DataType.java

Author: mbenson
Date: Tue Nov 21 15:49:59 2006
New Revision: 477969

URL: http://svn.apache.org/viewvc?view=rev&rev=477969
Log:
reorder ComponentHelper imports, refactor getElementName to minimize
code duplication

Modified:
    ant/core/trunk/src/main/org/apache/tools/ant/ComponentHelper.java
    ant/core/trunk/src/main/org/apache/tools/ant/types/DataType.java

Modified: ant/core/trunk/src/main/org/apache/tools/ant/ComponentHelper.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/ComponentHelper.java?view=diff&rev=477969&r1=477968&r2=477969
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/ComponentHelper.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/ComponentHelper.java Tue Nov 21 15:49:59 2006
@@ -18,6 +18,15 @@
 
 package org.apache.tools.ant;
 
+import java.lang.ref.WeakReference;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.lang.reflect.InvocationTargetException;
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.File;
+import java.io.StringWriter;
+import java.io.PrintWriter;
 import java.util.Enumeration;
 import java.util.Hashtable;
 import java.util.HashSet;
@@ -25,16 +34,7 @@
 import java.util.Properties;
 import java.util.Set;
 import java.util.Stack;
-
 import java.util.Vector;
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.File;
-import java.io.StringWriter;
-import java.io.PrintWriter;
-import java.lang.ref.WeakReference;
-import java.lang.reflect.Modifier;
-import java.lang.reflect.InvocationTargetException;
 
 import org.apache.tools.ant.taskdefs.Typedef;
 import org.apache.tools.ant.taskdefs.Definer;
@@ -136,6 +136,9 @@
      * @return the project component for a specific project.
      */
     public static ComponentHelper getComponentHelper(Project project) {
+        if (project == null) {
+            return null;
+        }
         // Singleton for now, it may change ( per/classloader )
         ComponentHelper ph = (ComponentHelper) project.getReference(
                 COMPONENT_HELPER_REFERENCE);
@@ -606,32 +609,69 @@
      * <p>
      * This is useful for logging purposes.
      *
-     * @param element The element to describe.
-     *                Must not be <code>null</code>.
-     * @param brief   whether to use a brief description.
+     * @param o     The element to describe.
+     *              Must not be <code>null</code>.
+     * @param brief whether to use a brief description.
      * @return a description of the element type.
      *
      * @since Ant 1.7
      */
-    public String getElementName(Object element, boolean brief) {
+    public String getElementName(Object o, boolean brief) {
         //  PR: I do not know what to do if the object class
         //      has multiple defines
         //      but this is for logging only...
-        String name = null;
-        Class elementClass = element.getClass();
+        Class elementClass = o.getClass();
         String elementClassname = elementClass.getName();
         for (Iterator i = antTypeTable.values().iterator(); i.hasNext();) {
             AntTypeDefinition def = (AntTypeDefinition) i.next();
             if (elementClassname.equals(def.getClassName())
-                &&
-                (elementClass == def.getExposedClass(project))) {
-                name = def.getName();
+                    && (elementClass == def.getExposedClass(project))) {
+                String name = def.getName();
                 return brief ? name : "The <" + name + "> type";
             }
         }
-        name = elementClass.getName();
-        return brief
-            ? name.substring(name.lastIndexOf('.') + 1) : "Class " + name;
+        return getUnmappedElementName(o.getClass(), brief);
+    }
+
+    /**
+     * Convenient way to get some element name even when you may not have a
+     * Project context.
+     * @param p       The optional Project instance.
+     * @param o       The element to describe.
+     *                Must not be <code>null</code>.
+     * @param brief   whether to use a brief description.
+     * @return a description of the element type.
+     * @since Ant 1.7
+     */
+    public static String getElementName(Project p, Object o, boolean brief) {
+        if (p == null) {
+            p = getProject(o);
+        }
+        return p == null ? getUnmappedElementName(o.getClass(), brief)
+                : getComponentHelper(p).getElementName(o, brief);
+    }
+
+    private static String getUnmappedElementName(Class c, boolean brief) {
+        if (brief) {
+            String name = c.getName();
+            return name.substring(name.lastIndexOf('.') + 1);
+        }
+        return c.toString();
+    }
+
+    private static Project getProject(Object o) {
+        if (o instanceof ProjectComponent) {
+            return ((ProjectComponent) o).getProject();
+        }
+        try {
+            Method m = o.getClass().getMethod("getProject", null);
+            if (Project.class == m.getReturnType()) {
+                return (Project) m.invoke(o, null);
+            }
+        } catch (Exception e) {
+            //too bad
+        }
+        return null;
     }
 
     /**

Modified: ant/core/trunk/src/main/org/apache/tools/ant/types/DataType.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/types/DataType.java?view=diff&rev=477969&r1=477968&r2=477969
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/types/DataType.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/types/DataType.java Tue Nov 21 15:49:59 2006
@@ -120,13 +120,7 @@
      * @return <code>String</code> name.
      */
     protected String getDataTypeName() {
-        Project p = getProject();
-        if (p != null) {
-            return ComponentHelper.getComponentHelper(p)
-                .getElementName(this, true);
-        }
-        String classname = getClass().getName();
-        return classname.substring(classname.lastIndexOf('.') + 1);
+        return ComponentHelper.getElementName(getProject(), this, true);
     }
 
     /**



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