diff --git a/python/src/com/jetbrains/python/inspections/quickfix/AddEncodingQuickFix.java b/python/src/com/jetbrains/python/inspections/quickfix/AddEncodingQuickFix.java
index 82f61cfb1b57..3e3e55028abe 100644
--- a/python/src/com/jetbrains/python/inspections/quickfix/AddEncodingQuickFix.java
+++ b/python/src/com/jetbrains/python/inspections/quickfix/AddEncodingQuickFix.java
@@ -25,9 +25,9 @@ import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.fileEditor.TextEditor;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiComment;
-import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
+import com.intellij.psi.PsiWhiteSpace;
import com.jetbrains.python.PyBundle;
import com.jetbrains.python.inspections.PyEncodingUtil;
import com.jetbrains.python.psi.LanguageLevel;
@@ -71,20 +71,20 @@ public class AddEncodingQuickFix implements LocalQuickFix {
if (firstLine instanceof PsiComment && firstLine.getText().startsWith("#!")) {
firstLine = firstLine.getNextSibling();
}
+ final LanguageLevel languageLevel = LanguageLevel.forElement(file);
final String commentText = String.format(PyEncodingUtil.ENCODING_FORMAT_PATTERN[myEncodingFormatIndex], myDefaultEncoding);
final PyElementGenerator elementGenerator = PyElementGenerator.getInstance(project);
- PsiComment encodingComment = elementGenerator.createFromText(LanguageLevel.forElement(file), PsiComment.class, commentText);
+ PsiComment encodingComment = elementGenerator.createFromText(languageLevel, PsiComment.class, commentText);
encodingComment = (PsiComment)file.addBefore(encodingComment, firstLine);
final FileEditor fileEditor = FileEditorManager.getInstance(project).getSelectedEditor(element.getContainingFile().getVirtualFile());
if (fileEditor instanceof TextEditor) {
+ if (encodingComment.getNextSibling() == null || !encodingComment.getNextSibling().textContains('\n')) {
+ file.addAfter(elementGenerator.createFromText(languageLevel, PsiWhiteSpace.class, "\n"), encodingComment);
+ }
final Editor editor = ((TextEditor)fileEditor).getEditor();
final Document document = editor.getDocument();
final int insertedLineNumber = document.getLineNumber(encodingComment.getTextOffset());
- if (insertedLineNumber == document.getLineCount() - 1) {
- PsiDocumentManager.getInstance(project).doPostponedOperationsAndUnblockDocument(document);
- document.insertString(document.getLineEndOffset(insertedLineNumber), "\n");
- }
editor.getCaretModel().moveToLogicalPosition(new LogicalPosition(insertedLineNumber + 1, 0));
}
}
diff --git a/python/testData/inspections/AddEncodingInEmptyFile.py b/python/testData/inspections/AddEncodingAtLastLine.py
similarity index 74%
rename from python/testData/inspections/AddEncodingInEmptyFile.py
rename to python/testData/inspections/AddEncodingAtLastLine.py
index 376db9193fc4..a7868cf286f9 100644
--- a/python/testData/inspections/AddEncodingInEmptyFile.py
+++ b/python/testData/inspections/AddEncodingAtLastLine.py
@@ -1 +1 @@
-
+#!/usr/bin/env python
\ No newline at end of file
diff --git a/python/testData/inspections/AddEncodingInEmptyFile_after.py b/python/testData/inspections/AddEncodingAtLastLine_after.py
similarity index 50%
rename from python/testData/inspections/AddEncodingInEmptyFile_after.py
rename to python/testData/inspections/AddEncodingAtLastLine_after.py
index 76ea4ea7c759..5e9beaa6da1d 100644
--- a/python/testData/inspections/AddEncodingInEmptyFile_after.py
+++ b/python/testData/inspections/AddEncodingAtLastLine_after.py
@@ -1,2 +1,3 @@
+#!/usr/bin/env python
# coding=utf-8
\ No newline at end of file
diff --git a/python/testSrc/com/jetbrains/python/PyQuickFixTest.java b/python/testSrc/com/jetbrains/python/PyQuickFixTest.java
index c7e8d138aa83..6cc2e578fb30 100644
--- a/python/testSrc/com/jetbrains/python/PyQuickFixTest.java
+++ b/python/testSrc/com/jetbrains/python/PyQuickFixTest.java
@@ -356,8 +356,8 @@ public class PyQuickFixTest extends PyTestCase {
}
// PY-13297
- public void testAddEncodingInEmptyFile() {
- doInspectionTest("AddEncodingInEmptyFile.py", PyMandatoryEncodingInspection.class,
+ public void testAddEncodingAtLastLine() {
+ doInspectionTest("AddEncodingAtLastLine.py", PyMandatoryEncodingInspection.class,
PyBundle.message("QFIX.add.encoding"), true, true);
}