1d0c4b8bfd97912e9ba6a364e26abe54c52a89ba8crazyboblee/** 2d0c4b8bfd97912e9ba6a364e26abe54c52a89ba8crazyboblee * Copyright (C) 2007 Google Inc. 3d0c4b8bfd97912e9ba6a364e26abe54c52a89ba8crazyboblee * 4d0c4b8bfd97912e9ba6a364e26abe54c52a89ba8crazyboblee * Licensed under the Apache License, Version 2.0 (the "License"); 5d0c4b8bfd97912e9ba6a364e26abe54c52a89ba8crazyboblee * you may not use this file except in compliance with the License. 6d0c4b8bfd97912e9ba6a364e26abe54c52a89ba8crazyboblee * You may obtain a copy of the License at 7d0c4b8bfd97912e9ba6a364e26abe54c52a89ba8crazyboblee * 8d0c4b8bfd97912e9ba6a364e26abe54c52a89ba8crazyboblee * http://www.apache.org/licenses/LICENSE-2.0 9d0c4b8bfd97912e9ba6a364e26abe54c52a89ba8crazyboblee * 10d0c4b8bfd97912e9ba6a364e26abe54c52a89ba8crazyboblee * Unless required by applicable law or agreed to in writing, software 11d0c4b8bfd97912e9ba6a364e26abe54c52a89ba8crazyboblee * distributed under the License is distributed on an "AS IS" BASIS, 12d0c4b8bfd97912e9ba6a364e26abe54c52a89ba8crazyboblee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d0c4b8bfd97912e9ba6a364e26abe54c52a89ba8crazyboblee * See the License for the specific language governing permissions and 14d0c4b8bfd97912e9ba6a364e26abe54c52a89ba8crazyboblee * limitations under the License. 15d0c4b8bfd97912e9ba6a364e26abe54c52a89ba8crazyboblee */ 16d0c4b8bfd97912e9ba6a364e26abe54c52a89ba8crazyboblee 179a227bef3b82a045323ef2cf38ec60b2e42cf0felimpbizkit@gmail.compackage com.google.inject.internal.util; 18d0c4b8bfd97912e9ba6a364e26abe54c52a89ba8crazyboblee 19d9c913acca55023ef5d76a32c3d4a51ee6b420cbsberlinimport static com.google.common.base.Preconditions.checkNotNull; 20dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin 21dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlinimport java.lang.reflect.Constructor; 22dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlinimport java.lang.reflect.Field; 23dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlinimport java.lang.reflect.Member; 24dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlinimport java.lang.reflect.Method; 25d0c4b8bfd97912e9ba6a364e26abe54c52a89ba8crazybobleeimport java.lang.reflect.Modifier; 26d0c4b8bfd97912e9ba6a364e26abe54c52a89ba8crazyboblee 27d0c4b8bfd97912e9ba6a364e26abe54c52a89ba8crazyboblee/** 28d0c4b8bfd97912e9ba6a364e26abe54c52a89ba8crazyboblee * Class utilities. 29d0c4b8bfd97912e9ba6a364e26abe54c52a89ba8crazyboblee */ 309a227bef3b82a045323ef2cf38ec60b2e42cf0felimpbizkit@gmail.compublic final class Classes { 31d0c4b8bfd97912e9ba6a364e26abe54c52a89ba8crazyboblee 32d0c4b8bfd97912e9ba6a364e26abe54c52a89ba8crazyboblee public static boolean isInnerClass(Class<?> clazz) { 33eb06177abdd178c9cc05312be7147e2ccc20becflimpbizkit return !Modifier.isStatic(clazz.getModifiers()) 34eb06177abdd178c9cc05312be7147e2ccc20becflimpbizkit && clazz.getEnclosingClass() != null; 35d0c4b8bfd97912e9ba6a364e26abe54c52a89ba8crazyboblee } 36d0c4b8bfd97912e9ba6a364e26abe54c52a89ba8crazyboblee 37d0c4b8bfd97912e9ba6a364e26abe54c52a89ba8crazyboblee public static boolean isConcrete(Class<?> clazz) { 38d0c4b8bfd97912e9ba6a364e26abe54c52a89ba8crazyboblee int modifiers = clazz.getModifiers(); 39d0c4b8bfd97912e9ba6a364e26abe54c52a89ba8crazyboblee return !clazz.isInterface() && !Modifier.isAbstract(modifiers); 40d0c4b8bfd97912e9ba6a364e26abe54c52a89ba8crazyboblee } 41dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin 42dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin /** 43dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin * Formats a member as concise string, such as {@code java.util.ArrayList.size}, 44dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin * {@code java.util.ArrayList<init>()} or {@code java.util.List.remove()}. 45dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin */ 46dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin public static String toString(Member member) { 47dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin Class<? extends Member> memberType = Classes.memberType(member); 48dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin 49dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin if (memberType == Method.class) { 50dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin return member.getDeclaringClass().getName() + "." + member.getName() + "()"; 51dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin } else if (memberType == Field.class) { 52dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin return member.getDeclaringClass().getName() + "." + member.getName(); 53dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin } else if (memberType == Constructor.class) { 54dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin return member.getDeclaringClass().getName() + ".<init>()"; 55dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin } else { 56dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin throw new AssertionError(); 57dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin } 58dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin } 59dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin 60dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin /** 61dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin * Returns {@code Field.class}, {@code Method.class} or {@code Constructor.class}. 62dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin */ 63dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin public static Class<? extends Member> memberType(Member member) { 64dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin checkNotNull(member, "member"); 65dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin 66dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin if (member instanceof Field) { 67dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin return Field.class; 68dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin 69dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin } else if (member instanceof Method) { 70dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin return Method.class; 71dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin 72dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin } else if (member instanceof Constructor) { 73dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin return Constructor.class; 74dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin 75dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin } else { 76dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin throw new IllegalArgumentException( 77dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin "Unsupported implementation class for Member, " + member.getClass()); 78dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin } 79dfee9fd5f78c5f1f769713b603e4e92a0b7b01e3sberlin } 80d0c4b8bfd97912e9ba6a364e26abe54c52a89ba8crazyboblee} 81