You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2012/10/14 13:18:22 UTC

svn commit: r1398053 - in /maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/introspection: IntrospectionException.java ReflectionValueExtractor.java

Author: rfscholte
Date: Sun Oct 14 11:18:22 2012
New Revision: 1398053

URL: http://svn.apache.org/viewvc?rev=1398053&view=rev
Log:
evaluate() should never throw Exception, all exceptions are now wrapped in a new IntrospectionException

Added:
    maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/introspection/IntrospectionException.java
Modified:
    maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/introspection/ReflectionValueExtractor.java

Added: maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/introspection/IntrospectionException.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/introspection/IntrospectionException.java?rev=1398053&view=auto
==============================================================================
--- maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/introspection/IntrospectionException.java (added)
+++ maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/introspection/IntrospectionException.java Sun Oct 14 11:18:22 2012
@@ -0,0 +1,46 @@
+package org.apache.maven.shared.utils.introspection;
+
+/*
+ * 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.
+ */
+
+public class IntrospectionException
+    extends Exception
+{
+
+    public IntrospectionException()
+    {
+        super();
+    }
+
+    public IntrospectionException( String message, Throwable cause )
+    {
+        super( message, cause );
+    }
+
+    public IntrospectionException( String message )
+    {
+        super( message );
+    }
+
+    public IntrospectionException( Throwable cause )
+    {
+        super( cause );
+    }
+    
+}

Modified: maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/introspection/ReflectionValueExtractor.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/introspection/ReflectionValueExtractor.java?rev=1398053&r1=1398052&r2=1398053&view=diff
==============================================================================
--- maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/introspection/ReflectionValueExtractor.java (original)
+++ maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/introspection/ReflectionValueExtractor.java Sun Oct 14 11:18:22 2012
@@ -26,6 +26,7 @@ import java.util.WeakHashMap;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import org.apache.maven.shared.utils.StringUtils;
+import org.apache.maven.shared.utils.introspection.MethodMap.AmbiguousException;
 
 
 /**
@@ -41,7 +42,7 @@ import org.apache.maven.shared.utils.Str
  */
 public class ReflectionValueExtractor
 {
-    private static final Class[] CLASS_ARGS = new Class[0];
+    private static final Class<?>[] CLASS_ARGS = new Class[0];
 
     private static final Object[] OBJECT_ARGS = new Object[0];
 
@@ -79,10 +80,10 @@ public class ReflectionValueExtractor
      * @param expression not null expression
      * @param root       not null object
      * @return the object defined by the expression
-     * @throws Exception if any
+     * @throws IntrospectionException if any
      */
     public static Object evaluate( String expression, Object root )
-        throws Exception
+        throws IntrospectionException
     {
         return evaluate( expression, root, true );
     }
@@ -100,11 +101,10 @@ public class ReflectionValueExtractor
      * @param expression not null expression
      * @param root       not null object
      * @return the object defined by the expression
-     * @throws Exception if any
+     * @throws IntrospectionException if any
      */
-    // TODO: don't throw Exception
     public static Object evaluate( String expression, Object root, boolean trimRootToken )
-        throws Exception
+        throws IntrospectionException
     {
         // if the root token refers to the supplied root object parameter, remove it.
         if ( trimRootToken )
@@ -142,8 +142,32 @@ public class ReflectionValueExtractor
             {
                 String methodBase = StringUtils.capitalizeFirstLetter( matcher.group( 1 ) );
                 String methodName = "get" + methodBase;
-                method = classMap.findMethod( methodName, CLASS_ARGS );
-                value = method.invoke( value, OBJECT_ARGS );
+                try
+                {
+                    method = classMap.findMethod( methodName, CLASS_ARGS );
+                }
+                catch ( AmbiguousException e )
+                {
+                    throw new IntrospectionException( e );
+                }
+                
+                try
+                {
+                    value = method.invoke( value, OBJECT_ARGS );
+                }
+                catch ( IllegalArgumentException e )
+                {
+                    throw new IntrospectionException( e );
+                }
+                catch ( IllegalAccessException e )
+                {
+                    throw new IntrospectionException( e );
+                }
+                catch ( InvocationTargetException e )
+                {
+                    throw new IntrospectionException( e );
+                }                
+                
                 classMap = getClassMap( value.getClass() );
 
                 if ( classMap.getCachedClass().isArray() )
@@ -157,11 +181,18 @@ public class ReflectionValueExtractor
                     // use get method on List interface
                     localParams = new Object[1];
                     localParams[0] = Integer.valueOf( matcher.group( 2 ) );
-                    method = classMap.findMethod( "get", localParams );
+                    try
+                    {
+                        method = classMap.findMethod( "get", localParams );
+                    }
+                    catch ( AmbiguousException e )
+                    {
+                        throw new IntrospectionException( e );
+                    }
                 }
                 else
                 {
-                    throw new Exception( "The token '" + token
+                    throw new IntrospectionException( "The token '" + token
                                              + "' refers to a java.util.List or an array, but the value seems is an instance of '"
                                              + value.getClass() + "'." );
                 }
@@ -174,8 +205,31 @@ public class ReflectionValueExtractor
                 {
                     String methodBase = StringUtils.capitalizeFirstLetter( matcher.group( 1 ) );
                     String methodName = "get" + methodBase;
-                    method = classMap.findMethod( methodName, CLASS_ARGS );
-                    value = method.invoke( value, OBJECT_ARGS );
+                    try
+                    {
+                        method = classMap.findMethod( methodName, CLASS_ARGS );
+                    }
+                    catch ( AmbiguousException e )
+                    {
+                        throw new IntrospectionException( e );
+                    }
+                    
+                    try
+                    {
+                        value = method.invoke( value, OBJECT_ARGS );
+                    }
+                    catch ( IllegalArgumentException e )
+                    {
+                        throw new IntrospectionException( e );
+                    }
+                    catch ( IllegalAccessException e )
+                    {
+                        throw new IntrospectionException( e );
+                    }
+                    catch ( InvocationTargetException e )
+                    {
+                        throw new IntrospectionException( e );
+                    }
                     classMap = getClassMap( value.getClass() );
 
                     if ( value instanceof Map )
@@ -183,11 +237,18 @@ public class ReflectionValueExtractor
                         // use get method on List interface
                         localParams = new Object[1];
                         localParams[0] = matcher.group( 2 );
-                        method = classMap.findMethod( "get", localParams );
+                        try
+                        {
+                            method = classMap.findMethod( "get", localParams );
+                        }
+                        catch ( AmbiguousException e )
+                        {
+                            throw new IntrospectionException( e );
+                        }
                     }
                     else
                     {
-                        throw new Exception( "The token '" + token
+                        throw new IntrospectionException( "The token '" + token
                                                  + "' refers to a java.util.Map, but the value seems is an instance of '"
                                                  + value.getClass() + "'." );
                     }
@@ -196,14 +257,28 @@ public class ReflectionValueExtractor
                 {
                     String methodBase = StringUtils.capitalizeFirstLetter( token );
                     String methodName = "get" + methodBase;
-                    method = classMap.findMethod( methodName, CLASS_ARGS );
+                    try
+                    {
+                        method = classMap.findMethod( methodName, CLASS_ARGS );
+                    }
+                    catch ( AmbiguousException e )
+                    {
+                        throw new IntrospectionException( e );
+                    }
 
                     if ( method == null )
                     {
                         // perhaps this is a boolean property??
                         methodName = "is" + methodBase;
 
-                        method = classMap.findMethod( methodName, CLASS_ARGS );
+                        try
+                        {
+                            method = classMap.findMethod( methodName, CLASS_ARGS );
+                        }
+                        catch ( AmbiguousException e )
+                        {
+                            throw new IntrospectionException( e );
+                        }
                     }
                 }
             }
@@ -225,7 +300,15 @@ public class ReflectionValueExtractor
                     return null;
                 }
 
-                throw e;
+                throw new IntrospectionException( e );
+            }
+            catch ( IllegalArgumentException e )
+            {
+                throw new IntrospectionException( e );
+            }
+            catch ( IllegalAccessException e )
+            {
+                throw new IntrospectionException( e );
             }
         }