private void adjustOutgoingVisibility(final CompilationUnitRewrite rewrite, final IField field, final ModifierKeyword threshold, final VariableDeclarationFragment fragment, final FieldDeclaration declaration) {
private void adjustOutgoingVisibility(final CompilationUnitRewrite rewrite, final IField field, final ModifierKeyword threshold, final VariableDeclarationFragment fragment, final FieldDeclaration declaration) throws JavaModelException {
	private void adjustOutgoingVisibility(final CompilationUnitRewrite rewrite, final IField field, final ModifierKeyword threshold, final VariableDeclarationFragment fragment, final FieldDeclaration declaration) {		Assert.isNotNull(rewrite);		Assert.isNotNull(field);		Assert.isTrue(isVisibilityKeyword(threshold));		Assert.isNotNull(fragment);		Assert.isNotNull(declaration);		if (hasLowerVisibility((List) declaration.getStructuralProperty(declaration.getModifiersProperty()), threshold) && needsVisibilityAdjustment(field, threshold)) {			if (fGetters) {				try {					final IMethod getter= GetterSetterUtil.getGetter(field);					if (getter != null && getter.exists()) {						final MethodDeclaration method= ASTNodeSearchUtil.getMethodDeclarationNode(getter, rewrite.getRoot());						if (method != null) {							adjustOutgoingVisibility(rewrite, getter, method, threshold, method.resolveBinding(), "MemberVisibilityAdjustor.change_visibility_method_warning"); //$NON-NLS-1$							fAdjustments.put(field, new OutgoingAccessorVisibilityAdjustment(field, getter, true, threshold, new RefactoringStatus()));						}					}				} catch (JavaModelException exception) {					JavaPlugin.log(exception);				}			} else if (fSetters) {				try {					final IMethod setter= GetterSetterUtil.getSetter(field);					if (setter != null && setter.exists()) {						final MethodDeclaration method= ASTNodeSearchUtil.getMethodDeclarationNode(setter, rewrite.getRoot());						if (method != null) {							adjustOutgoingVisibility(rewrite, setter, method, threshold, method.resolveBinding(), "MemberVisibilityAdjustor.change_visibility_method_warning"); //$NON-NLS-1$							fAdjustments.put(field, new OutgoingAccessorVisibilityAdjustment(field, setter, false, threshold, new RefactoringStatus()));						}					}				} catch (JavaModelException exception) {					JavaPlugin.log(exception);				}			}			adjustOutgoingVisibility(rewrite, field, declaration, threshold, fragment.resolveBinding(), "MemberVisibilityAdjustor.change_visibility_field_warning"); //$NON-NLS-1$		}	}