blob: 4891dac5306bc65a0c5ff5ba23c0bbe6426d1fc3 [file] [log] [blame]
crazybobleed0c4b8b2007-09-06 02:47:04 +00001/**
2 * Copyright (C) 2007 Google Inc.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
limpbizkit@gmail.com9a227be2010-07-03 15:51:31 +000017package com.google.inject.internal.util;
crazybobleed0c4b8b2007-09-06 02:47:04 +000018
sberlind9c913a2011-06-26 21:02:54 +000019import static com.google.common.base.Preconditions.checkNotNull;
sberlindfee9fd2010-10-30 14:15:06 +000020
21import java.lang.reflect.Constructor;
22import java.lang.reflect.Field;
23import java.lang.reflect.Member;
24import java.lang.reflect.Method;
crazybobleed0c4b8b2007-09-06 02:47:04 +000025import java.lang.reflect.Modifier;
26
sberlindfee9fd2010-10-30 14:15:06 +000027
crazybobleed0c4b8b2007-09-06 02:47:04 +000028/**
29 * Class utilities.
30 */
limpbizkit@gmail.com9a227be2010-07-03 15:51:31 +000031public final class Classes {
crazybobleed0c4b8b2007-09-06 02:47:04 +000032
33 public static boolean isInnerClass(Class<?> clazz) {
limpbizkiteb061772008-06-30 01:47:50 +000034 return !Modifier.isStatic(clazz.getModifiers())
35 && clazz.getEnclosingClass() != null;
crazybobleed0c4b8b2007-09-06 02:47:04 +000036 }
37
38 public static boolean isConcrete(Class<?> clazz) {
39 int modifiers = clazz.getModifiers();
40 return !clazz.isInterface() && !Modifier.isAbstract(modifiers);
41 }
sberlindfee9fd2010-10-30 14:15:06 +000042
43 /**
44 * Formats a member as concise string, such as {@code java.util.ArrayList.size},
45 * {@code java.util.ArrayList<init>()} or {@code java.util.List.remove()}.
46 */
47 public static String toString(Member member) {
48 Class<? extends Member> memberType = Classes.memberType(member);
49
50 if (memberType == Method.class) {
51 return member.getDeclaringClass().getName() + "." + member.getName() + "()";
52 } else if (memberType == Field.class) {
53 return member.getDeclaringClass().getName() + "." + member.getName();
54 } else if (memberType == Constructor.class) {
55 return member.getDeclaringClass().getName() + ".<init>()";
56 } else {
57 throw new AssertionError();
58 }
59 }
60
61 /**
62 * Returns {@code Field.class}, {@code Method.class} or {@code Constructor.class}.
63 */
64 public static Class<? extends Member> memberType(Member member) {
65 checkNotNull(member, "member");
66
67 if (member instanceof Field) {
68 return Field.class;
69
70 } else if (member instanceof Method) {
71 return Method.class;
72
73 } else if (member instanceof Constructor) {
74 return Constructor.class;
75
76 } else {
77 throw new IllegalArgumentException(
78 "Unsupported implementation class for Member, " + member.getClass());
79 }
80 }
crazybobleed0c4b8b2007-09-06 02:47:04 +000081}