void (final Charset charset, @Nullable Runnable whenChanged, boolean fireEventsWhenChanged) { final Charset old = getStoredCharset(); storeCharset(charset); if (Comparing.equal(charset, old)) return; byte[] bom = charset == null ? null : CharsetToolkit.getMandatoryBom(charset); byte[] existingBOM = getBOM(); if (bom == null && charset != null && existingBOM != null) { bom = CharsetToolkit.canHaveBom(charset, existingBOM) ? existingBOM : null; } setBOM(bom); if (old != null) { //do not send on detect if (whenChanged != null) whenChanged.run(); if (fireEventsWhenChanged) { VirtualFileManager.getInstance().notifyPropertyChanged(this, PROP_ENCODING, old, charset); } } }