1   package com.stateofflow.eclipse.metrics.bindings;
2   
3   import org.eclipse.jdt.core.dom.IMethodBinding;
4   import org.eclipse.jdt.core.dom.IPackageBinding;
5   import org.eclipse.jdt.core.dom.ITypeBinding;
6   import org.eclipse.jdt.core.dom.Modifier;
7   
8   public class VisibilityAnalyser {
9       public static boolean isVisibleInHierarchy(final IMethodBinding memberBinding, final IPackageBinding packageBinding) {
10          final int otherflags = memberBinding.getModifiers();
11          final ITypeBinding declaringType = memberBinding.getDeclaringClass();
12          if (Modifier.isPublic(otherflags) || Modifier.isProtected(otherflags) || isInterface(declaringType)) {
13              return true;
14          } else if (Modifier.isPrivate(otherflags)) {
15              return false;
16          }
17          return hasSamePackage(packageBinding, declaringType);
18      }
19  
20      private static boolean hasSamePackage(final IPackageBinding pack, final ITypeBinding declaringType) {
21          return declaringType != null && pack == declaringType.getPackage();
22      }
23  
24      private static boolean isInterface(final ITypeBinding declaringType) {
25          return declaringType != null && declaringType.isInterface();
26      }
27  }
28