1 package org.apache.maven.shared.runtime;
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.net.MalformedURLException;
23 import java.net.URL;
24
25 import org.codehaus.plexus.util.StringUtils;
26
27 /**
28 * Provides various utility methods for working with classes.
29 *
30 * @author <a href="mailto:markh@apache.org">Mark Hobson</a>
31 * @version $Id: ClassUtils.java 831910 2009-11-02 15:05:33Z markh $
32 */
33 final class ClassUtils
34 {
35 // constructors -----------------------------------------------------------
36
37 /**
38 * {@code ClassUtils} is not intended to be instantiated.
39 */
40 private ClassUtils()
41 {
42 throw new AssertionError();
43 }
44
45 // public methods ---------------------------------------------------------
46
47 /**
48 * Gets a URL to the specified class's default package. For example, if the class {@code foo.Bar} is supplied, then
49 * a URL to the directory above {@code foo} is returned.
50 *
51 * @param klass
52 * the class to obtain the base URL for
53 * @return a URL to the class's default package
54 * @throws MalformedURLException
55 * if the base URL cannot be determined
56 */
57 public static URL getBaseURL( Class<?> klass )
58 throws MalformedURLException
59 {
60 URL url = getURL( klass );
61
62 String className = klass.getName();
63
64 int n = StringUtils.countMatches( className, "." );
65 String relativePath = StringUtils.repeat( "../", n );
66
67 return new URL( url, relativePath );
68 }
69
70 /**
71 * Gets a URL to the specified class.
72 *
73 * @param klass
74 * the class to obtain the URL for
75 * @return a URL to the class, or {@code null} if it cannot be found
76 */
77 public static URL getURL( Class<?> klass )
78 {
79 ClassLoader classLoader = klass.getClassLoader();
80
81 String path = klass.getName().replace( '.', '/' ) + ".class";
82
83 return classLoader.getResource( path );
84 }
85 }