1 package org.apache.maven.shared.transfer.collection.internal;
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.InvocationTargetException;
23
24 import org.apache.maven.shared.transfer.collection.DependencyCollectionException;
25
26 /**
27 * Invokes method on objects using reflection.
28 */
29 final class Invoker
30 {
31 private Invoker()
32 {
33 // do not instantiate
34 }
35
36 public static <T> T invoke( Object object, String method )
37 throws DependencyCollectionException
38 {
39 try
40 {
41 @SuppressWarnings( "unchecked" )
42 T invoke = (T) object.getClass().getMethod( method ).invoke( object );
43 return invoke;
44 }
45 catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
46 {
47 throw new DependencyCollectionException( e.getMessage(), e );
48 }
49 }
50
51 public static <T> T invoke( Class<?> objectClazz, String staticMethod, Class<?> argClazz, Object arg )
52 throws DependencyCollectionException
53 {
54 try
55 {
56 @SuppressWarnings( "unchecked" )
57 T invoke = (T) objectClazz.getMethod( staticMethod, argClazz ).invoke( null, arg );
58 return invoke;
59 }
60 catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
61 {
62 throw new DependencyCollectionException( e.getMessage(), e );
63 }
64 }
65
66 /**
67 * <strong>Note:</strong> Ensure that argClasses and args have the same number of elements
68 *
69 * @param objectClazz the class of the static method
70 * @param staticMethod the static method to call
71 * @param argClasses the classes of the argument, used to select the right static method
72 * @param args the actual arguments to be passed
73 * @return the result of the method invocation
74 * @throws DependencyCollectionException if any checked exception occurs
75 */
76 public static <T> T invoke( Class<?> objectClazz, String staticMethod, Class<?>[] argClasses, Object[] args )
77 throws DependencyCollectionException
78 {
79 if ( args.length != argClasses.length )
80 {
81 throw new IllegalArgumentException( "The number of elements in argClasses and args are not the same." );
82 }
83
84 try
85 {
86 @SuppressWarnings( "unchecked" )
87 T invoke = (T) objectClazz.getMethod( staticMethod, argClasses ).invoke( null, args );
88 return invoke;
89 }
90 catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
91 {
92 throw new DependencyCollectionException( e.getMessage(), e );
93 }
94 }
95
96 }