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