View Javadoc

1   package org.apache.maven.surefire.util;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *     http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import java.lang.reflect.Constructor;
23  import java.lang.reflect.InvocationTargetException;
24  import java.lang.reflect.Method;
25  
26  /**
27   * @author Kristian Rosenvold
28   */
29  public class ReflectionUtils
30  {
31      private static final Class[] NO_ARGS = new Class[0];
32  
33      private static final Object[] NO_ARGS_VALUES = new Object[0];
34  
35  
36      public static Method getMethod( Object instance, String methodName, Class[] parameters )
37      {
38          return getMethod( instance.getClass(), methodName, parameters );
39      }
40  
41      public static Method getMethod( Class clazz, String methodName, Class[] parameters )
42      {
43          try
44          {
45              return clazz.getMethod( methodName, parameters );
46          }
47          catch ( NoSuchMethodException e )
48          {
49              throw new NestedRuntimeException( "When finding method " + methodName, e );
50          }
51      }
52  
53      public static Method tryGetMethod( Class clazz, String methodName, Class[] parameters )
54      {
55          try
56          {
57              return clazz.getMethod( methodName, parameters );
58          }
59          catch ( NoSuchMethodException e )
60          {
61              return null;
62          }
63      }
64  
65  
66      public static Object invokeGetter( Object instance, String methodName )
67      {
68          final Method method = getMethod( instance, methodName, NO_ARGS );
69          return invokeMethodWithArray( instance, method, NO_ARGS_VALUES );
70      }
71  
72      public static Constructor getConstructor( Class clazz, Class[] arguments )
73      {
74          try
75          {
76              return clazz.getConstructor( arguments );
77          }
78          catch ( NoSuchMethodException e )
79          {
80              throw new SurefireReflectionException( e );
81          }
82      }
83  
84      public static Object newInstance( Constructor constructor, Object[] params )
85      {
86          try
87          {
88              return constructor.newInstance( params );
89          }
90          catch ( InvocationTargetException e )
91          {
92              throw new SurefireReflectionException( e );
93          }
94          catch ( InstantiationException e )
95          {
96              throw new SurefireReflectionException( e );
97          }
98          catch ( IllegalAccessException e )
99          {
100             throw new SurefireReflectionException( e );
101         }
102     }
103 
104     public static Object instantiate( ClassLoader classLoader, String classname )
105     {
106         try
107         {
108 
109             Class clazz = loadClass( classLoader, classname );
110             return clazz.newInstance();
111         }
112         catch ( InstantiationException e )
113         {
114             throw new SurefireReflectionException( e );
115         }
116         catch ( IllegalAccessException e )
117         {
118             throw new SurefireReflectionException( e );
119         }
120     }
121 
122     public static Object instantiateOneArg( ClassLoader classLoader, String className, Class param1Class,
123                                             Object param1 )
124     {
125 
126         try
127         {
128             Class aClass = loadClass( classLoader, className );
129             Constructor constructor = ReflectionUtils.getConstructor( aClass, new Class[]{ param1Class } );
130             return constructor.newInstance( new Object[]{ param1 } );
131         }
132         catch ( InvocationTargetException e )
133         {
134             throw new SurefireReflectionException( e );
135         }
136         catch ( InstantiationException e )
137         {
138             throw new SurefireReflectionException( e );
139         }
140         catch ( IllegalAccessException e )
141         {
142             throw new SurefireReflectionException( e );
143         }
144     }
145     public static Object instantiateTwoArgs( ClassLoader classLoader, String className, Class param1Class,
146                                             Object param1, Class param2Class, Object param2 )
147     {
148 
149         try
150         {
151             Class aClass = loadClass( classLoader, className );
152             Constructor constructor = ReflectionUtils.getConstructor( aClass, new Class[]{ param1Class, param2Class } );
153             return constructor.newInstance( new Object[]{ param1, param2 } );
154         }
155         catch ( InvocationTargetException e )
156         {
157             throw new SurefireReflectionException( e );
158         }
159         catch ( InstantiationException e )
160         {
161             throw new SurefireReflectionException( e );
162         }
163         catch ( IllegalAccessException e )
164         {
165             throw new SurefireReflectionException( e );
166         }
167     }
168     
169     
170     public static void invokeSetter( Object o, String name, Class value1clazz, Object value )
171 
172     {
173         final Method setter = getMethod( o, name, new Class[]{ value1clazz } );
174         invokeSetter( o, setter, value );
175     }
176 
177     public static Object invokeSetter( Object target, Method method, Object value )
178 
179     {
180         return invokeMethodWithArray( target, method, new Object[]{ value } );
181     }
182 
183     public static Object invokeMethodWithArray( Object target, Method method, Object[] args )
184 
185     {
186         try
187         {
188             return method.invoke( target, args );
189         }
190         catch ( IllegalAccessException e )
191         {
192             throw new SurefireReflectionException( e );
193         }
194         catch ( InvocationTargetException e )
195         {
196             throw new SurefireReflectionException( e );
197         }
198 
199     }
200 
201     public static Object instantiateObject( String className, Class[] types, Object[] params, ClassLoader classLoader )
202     {
203         Class clazz = loadClass( classLoader, className );
204         final Constructor constructor = getConstructor( clazz, types );
205         return newInstance( constructor, params );
206     }
207 
208     public static Class tryLoadClass( ClassLoader classLoader, String className )
209     {
210         try
211         {
212             return classLoader.loadClass( className );
213         }
214         catch ( NoClassDefFoundError ignore )
215         {
216         }
217         catch ( ClassNotFoundException ignore )
218         {
219         }
220         return null;
221     }
222 
223     public static Class loadClass( ClassLoader classLoader, String className )
224     {
225         try
226         {
227             return classLoader.loadClass( className );
228         }
229         catch ( NoClassDefFoundError e )
230         {
231             throw new SurefireReflectionException( e );
232         }
233         catch ( ClassNotFoundException e )
234         {
235             throw new SurefireReflectionException( e );
236         }
237     }
238 }