docs: @Check
  	@SuppressWarnings({"checkstyle:nestedifdepth", "checkstyle:npathcomplexity", "checkstyle:cyclomaticcomplexity"})
  	public void checkUnsynchronizedField(XtendField field) {
  		if (doCheckValidMemberName(field) && !isIgnored(POTENTIAL_FIELD_SYNCHRONIZATION_PROBLEM)) {
  			final JvmField jvmField = this.associations.getJvmField(field);
  			if (jvmField == null || jvmField.eContainer() == null || jvmField.isConstant() || jvmField.isFinal()) {
  				return;
  			}
  			final EObject scope = getOutermostType(field);
  			if ((scope instanceof SarlAgent || scope instanceof SarlBehavior
  					|| scope instanceof SarlSkill) && isLocallyAssigned(jvmField, scope)) {
  				final Collection<Setting> usages = XbaseUsageCrossReferencer.find(jvmField, scope);
  				final Set<XtendMember> blocks = new HashSet<>();
  				boolean isAccessibleFromOutside = jvmField.getVisibility() != JvmVisibility.PRIVATE;
  				final Collection<Setting> pbUsages = new ArrayList<>();
  				for (final Setting usage : usages) {
  					final XtendMember member = EcoreUtil2.getContainerOfType(usage.getEObject(), XtendMember.class);
  					if (member instanceof XtendFunction) {
  						final XtendFunction fct = (XtendFunction) member;
  						blocks.add(member);
  						if (member.getVisibility() != JvmVisibility.PRIVATE) {
  							isAccessibleFromOutside = true;
  						}
  						if (!fct.isSynchonized()) {
  							pbUsages.add(usage);
  						}
  					} else if (member instanceof SarlBehaviorUnit) {
  						blocks.add(member);
  						isAccessibleFromOutside = true;
  						pbUsages.add(usage);
  					}
  				}
  				for (final Setting usage : pbUsages) {
  					boolean synchronizationIssue = false;
  					if (isAccessibleFromOutside || blocks.size() > 1) {
  						synchronizationIssue = true;
  					} else {
  						// TODO: Refine the function call detection
  						synchronizationIssue = true;
  					}
  					// Check if the field is already locally synchronized
  					if (synchronizationIssue) {
  						final XSynchronizedExpression syncExpr = EcoreUtil2.getContainerOfType(
  								usage.getEObject(), XSynchronizedExpression.class);
  						if (syncExpr != null) {
  							synchronizationIssue = false;
  						}
  					}
  					if (synchronizationIssue
  							&& !isIgnored(POTENTIAL_FIELD_SYNCHRONIZATION_PROBLEM,
  									usage.getEObject())) {
  						addIssue(
  								MessageFormat.format(Messages.SARLValidator_91, field.getName()),
  								usage.getEObject(),
  								usage.getEStructuralFeature(),
  								POTENTIAL_FIELD_SYNCHRONIZATION_PROBLEM);
  					}
  				}
  			}
  		}
  	}