1 11 package org.eclipse.jdt.internal.corext.refactoring.typeconstraints; 12 13 import java.util.Arrays ; 14 import java.util.HashSet ; 15 import java.util.Set ; 16 17 import org.eclipse.jdt.core.dom.ITypeBinding; 18 import org.eclipse.jdt.core.dom.Modifier; 19 20 import org.eclipse.jdt.internal.corext.dom.Bindings; 21 22 25 public final class TypeBindings { 26 27 private TypeBindings() {} 28 29 private static boolean isNullBinding(ITypeBinding binding){ 30 return binding == null; 31 } 32 33 public static boolean isEqualTo(ITypeBinding binding, ITypeBinding otherBinding){ 34 if (isNullBinding(binding)) return false; 36 else 37 return Bindings.equals(binding, otherBinding); 38 } 39 40 public static boolean isSubtypeBindingOf(ITypeBinding binding, ITypeBinding otherBinding){ 41 if (isNullBinding(binding) || isNullBinding(otherBinding)) return false; 43 return isSubtypeOf(binding, otherBinding); 44 } 45 46 private static boolean isSubtypeOf(ITypeBinding b1, ITypeBinding b2){ 47 if (b1.isNullType()) return true; 49 else if (b1.isPrimitive() || b2.isPrimitive()) return false; 51 else if (isThisType(b2, "java.lang.Object")) return true; 53 else if (Modifier.isFinal(b2.getModifiers())) 54 return false; 55 else if (b1.isArray()){ 56 if (b2.isArray()) 57 return isSubtypeOf(b1.getElementType(), b2.getElementType()); 58 else{ 59 return isThisType(b2, "java.lang.Cloneable") || isThisType(b2, "java.io.Serializable"); } 62 } else if (b2.isArray()) 63 return false; 64 else 65 return (getSuperTypes(b1).contains(b2)); } 67 68 private static boolean isThisType(ITypeBinding binding, String qualifiedName){ 69 return binding.getQualifiedName().equals(qualifiedName); 70 } 71 72 75 public static Set getSuperTypes(ITypeBinding type) { 76 Set result= new HashSet (); 77 ITypeBinding superClass= type.getSuperclass(); 78 if (superClass != null){ 79 result.add(superClass); 80 result.addAll(getSuperTypes(superClass)); 81 } 82 ITypeBinding[] superInterfaces= type.getInterfaces(); 83 result.addAll(Arrays.asList(superInterfaces)); 84 for (int i= 0; i < superInterfaces.length; i++) { 85 result.addAll(getSuperTypes(superInterfaces[i])); 86 } 87 return result; 88 } 89 90 public static String toString(ITypeBinding binding){ 91 if (isNullBinding(binding)) 92 return "<NULL BINDING>"; return Bindings.asString(binding); 94 } 95 96 public static boolean isClassBinding(ITypeBinding typeBinding){ 97 return typeBinding != null && typeBinding.isClass(); 98 } 99 } 100 | Popular Tags |