@Override
  protected EditorEx createEditor() {
    final EditorEx ex = super.createEditor();

    if (myLanguage != null) {
      final FileType fileType = myLanguage.getAssociatedFileType();
      ex.setHighlighter(HighlighterFactory.createHighlighter(myProject, fileType));
    }
    ex.setEmbeddedIntoDialogWrapper(true);

    return ex;
  }
 @Nullable
 private static LanguageFileType substituteFileType(
     Language language, VirtualFile vFile, Project project) {
   LanguageFileType fileType = null;
   if (vFile != null && project != null) {
     Language substLanguage =
         LanguageSubstitutors.INSTANCE.substituteLanguage(language, vFile, project);
     if (substLanguage != language) {
       fileType = substLanguage.getAssociatedFileType();
     }
   }
   return fileType;
 }
  @NotNull
  public static FileType substituteFileType(
      VirtualFile file, @NotNull FileType fileType, Project project) {
    if (project == null) {
      return fileType;
    }
    if (fileType instanceof LanguageFileType) {
      final Language language = ((LanguageFileType) fileType).getLanguage();
      final Language substitutedLanguage =
          LanguageSubstitutors.INSTANCE.substituteLanguage(language, file, project);
      LanguageFileType substFileType = substitutedLanguage.getAssociatedFileType();
      if (!substitutedLanguage.equals(language) && substFileType != null) {
        return new SubstitutedFileType(fileType, substFileType);
      }
    }

    return fileType;
  }
  public LanguageTextField(
      @Nullable Language language,
      @Nullable Project project,
      @NotNull String value,
      @NotNull DocumentCreator documentCreator,
      boolean oneLineMode) {
    super(
        documentCreator.createDocument(value, language, project),
        project,
        language != null ? language.getAssociatedFileType() : StdFileTypes.PLAIN_TEXT,
        language == null,
        oneLineMode);

    myLanguage = language;
    myProject = project;

    setEnabled(language != null);
  }
  private static Document createDocument(
      String value,
      @Nullable Language language,
      Project project,
      @NotNull SimpleDocumentCreator documentCreator) {
    if (language != null) {
      final PsiFileFactory factory = PsiFileFactory.getInstance(project);
      final FileType fileType = language.getAssociatedFileType();
      assert fileType != null;

      final long stamp = LocalTimeCounter.currentTime();
      final PsiFile psiFile =
          factory.createFileFromText(
              "Dummy." + fileType.getDefaultExtension(), fileType, value, stamp, true, false);
      documentCreator.customizePsiFile(psiFile);
      final Document document = PsiDocumentManager.getInstance(project).getDocument(psiFile);
      assert document != null;
      return document;
    } else {
      return EditorFactory.getInstance().createDocument(value);
    }
  }