code: @CopyMethod
  	static int getEffectiveModifierFlags(Modifiers m) {
  		int explicit = getExplicitModifierFlags(m);
  		int out = explicit;
  		Node declaration = m.getParent();
  		
  		// Interfaces and Enums can only be static by their very nature.
  		if (declaration instanceof TypeDeclaration && !(declaration instanceof ClassDeclaration)) {
  			out |= Modifier.STATIC;
  		}
  		
  		// We consider top-level types as static, because semantically that makes sense.
  		if (declaration instanceof ClassDeclaration && ((ClassDeclaration)declaration).upIfTopLevelToCompilationUnit() != null) {
  			out |= Modifier.STATIC;
  		}
  		
  		// We consider interfaces as abstract, because semantically that makes sense.
  		if (declaration instanceof TypeDeclaration && ((TypeDeclaration)declaration).isInterface()) {
  			out |= Modifier.ABSTRACT;
  		}
  		
  		// Types in interfaces are always static.
  		if (declaration instanceof ClassDeclaration) {
  			TypeDeclaration container = ((ClassDeclaration)declaration).upUpToTypeDeclaration();
  			if (container != null && container.isInterface()) out |= Modifier.STATIC;
  		}
  		
  		if (declaration instanceof MethodDeclaration) {
  			TypeDeclaration container = ((MethodDeclaration)declaration).upUpToTypeDeclaration();
  			if (container != null && container.isInterface() && (explicit & Modifier.STATIC) == 0) {
  				out |= Modifier.PUBLIC | Modifier.ABSTRACT;
  			}
  		}
  		
  		if (declaration instanceof VariableDeclaration) {
  			TypeDeclaration container = ((VariableDeclaration)declaration).upUpToTypeDeclaration();
  			if (container != null && container.isInterface()) {
  				out |= Modifier.PUBLIC | Modifier.FINAL | Modifier.STATIC;
  			}
  		}
  		
  		return out;
  	}
docs: Returns the keyword-based modifiers the way {@link java.lang.reflect.Modifiers} works. Also sets flags that are implicitly true due to the nature
  of the node that the modifiers are attached to (for example, inner interfaces are implicitly static and thus if the Modifiers object is a child of
  such a declaration, its static bit will be set. Similarly, method declarations in interfaces are abstract and public whether or not those keywords
  have been applied to the node).