@Override
 public LanguageLevel getLanguageLevel(@NotNull PsiDirectory dir) {
   synchronized (PsiLock.LOCK) {
     LanguageLevel level = dir.getUserData(LANG_LEVEL_IN_DIRECTORY);
     if (level == null) {
       level = getLanguageLevelInner(dir);
       dir.putUserData(LANG_LEVEL_IN_DIRECTORY, level);
     }
     return level;
   }
 }