fixed NullPointerException on Select in editor action

This commit is contained in:
Ekaterina Tuzova
2014-08-15 15:30:26 +04:00
parent 45e05f16bd
commit f4c507109c
2 changed files with 43 additions and 18 deletions
@@ -36,11 +36,11 @@ import java.util.regex.Pattern;
public class StudyDirectoryProjectGenerator extends PythonProjectGenerator implements DirectoryProjectGenerator {
private static final Logger LOG = Logger.getInstance(StudyDirectoryProjectGenerator.class.getName());
private static final String REPO_URL = "https://github.com/JetBrains/pycharm-courses/archive/master.zip";
private static final String USER_NAME = "medvector";
private static final String USER_NAME = "PyCharm";
private static final String COURSE_META_FILE = "course.json";
private static final String COURSE_NAME_ATTRIBUTE = "name";
private static final Pattern CACHE_PATTERN = Pattern.compile("(name=(.*)) (path=(.*course.json)) (author=(.*)) (description=(.*))");
private static final String REPOSITORY_NAME = "initial-python-course";
private static final String REPOSITORY_NAME = "pycharm-courses";
public static final String AUTHOR_ATTRIBUTE = "author";
private final File myCoursesDir = new File(PathManager.getConfigPath(), "courses");
private static final String CACHE_NAME = "courseNames.txt";
@@ -5,11 +5,10 @@ import com.intellij.ide.structureView.StructureViewBuilder;
import com.intellij.openapi.actionSystem.ActionManager;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.EditorFactory;
import com.intellij.openapi.editor.colors.EditorColorsManager;
import com.intellij.openapi.fileEditor.FileEditor;
import com.intellij.openapi.fileEditor.FileEditorLocation;
import com.intellij.openapi.fileEditor.FileEditorState;
import com.intellij.openapi.fileEditor.FileEditorStateLevel;
import com.intellij.openapi.editor.impl.DocumentImpl;
import com.intellij.openapi.fileEditor.*;
import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx;
import com.intellij.openapi.fileEditor.impl.text.PsiAwareTextEditorImpl;
import com.intellij.openapi.fileEditor.impl.text.TextEditorProvider;
@@ -17,6 +16,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.pom.Navigatable;
import com.intellij.ui.HideableTitledPanel;
import com.jetbrains.python.edu.StudyDocumentListener;
import com.jetbrains.python.edu.StudyTaskManager;
@@ -40,7 +40,7 @@ import java.util.Map;
* Implementation of StudyEditor which has panel with special buttons and task text
* also @see {@link com.jetbrains.python.edu.editor.StudyFileEditorProvider}
*/
public class StudyEditor implements FileEditor {
public class StudyEditor implements TextEditor {
private static final String TASK_TEXT_HEADER = "Task Text";
private final FileEditor myDefaultEditor;
private final JComponent myComponent;
@@ -49,6 +49,7 @@ public class StudyEditor implements FileEditor {
private JButton myPrevTaskButton;
private JButton myRefreshButton;
private static final Map<Document, StudyDocumentListener> myDocumentListeners = new HashMap<Document, StudyDocumentListener>();
private Project myProject;
public JButton getCheckButton() {
return myCheckButton;
@@ -77,14 +78,15 @@ public class StudyEditor implements FileEditor {
}
public StudyEditor(@NotNull final Project project, @NotNull final VirtualFile file) {
myDefaultEditor = TextEditorProvider.getInstance().createEditor(project, file);
myProject = project;
myDefaultEditor = TextEditorProvider.getInstance().createEditor(myProject, file);
myComponent = myDefaultEditor.getComponent();
JPanel studyPanel = new JPanel();
studyPanel.setLayout(new BoxLayout(studyPanel, BoxLayout.Y_AXIS));
TaskFile taskFile = StudyTaskManager.getInstance(project).getTaskFile(file);
TaskFile taskFile = StudyTaskManager.getInstance(myProject).getTaskFile(file);
if (taskFile != null) {
Task currentTask = taskFile.getTask();
String taskText = currentTask.getResourceText(project, currentTask.getText(), false);
String taskText = currentTask.getResourceText(myProject, currentTask.getText(), false);
final JLabel taskTextLabel = new JLabel(taskText);
taskTextLabel.setBorder(new EmptyBorder(15, 20, 0, 100));
int fontSize = EditorColorsManager.getInstance().getGlobalScheme().getEditorFontSize();
@@ -97,13 +99,13 @@ public class StudyEditor implements FileEditor {
JPanel taskActionsPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
studyButtonPanel.add(taskActionsPanel);
studyButtonPanel.add(new JPanel());
initializeButtons(project, taskActionsPanel, taskFile);
initializeButtons(taskActionsPanel, taskFile);
studyPanel.add(studyButtonPanel);
myComponent.add(studyPanel, BorderLayout.NORTH);
}
}
private void initializeButtons(@NotNull final Project project, @NotNull final JPanel taskActionsPanel, @NotNull final TaskFile taskFile) {
private void initializeButtons(@NotNull final JPanel taskActionsPanel, @NotNull final TaskFile taskFile) {
myCheckButton = addButton(taskActionsPanel, "Check task", StudyIcons.Resolve);
myPrevTaskButton = addButton(taskActionsPanel, "Prev Task", StudyIcons.Prev);
myNextTaskButton = addButton(taskActionsPanel, "Next Task", StudyIcons.Next);
@@ -114,7 +116,7 @@ public class StudyEditor implements FileEditor {
@Override
public void actionPerformed(ActionEvent e) {
StudyRunAction studyRunAction = (StudyRunAction)ActionManager.getInstance().getAction("StudyRunAction");
studyRunAction.run(project);
studyRunAction.run(myProject);
}
});
JButton watchInputButton = addButton(taskActionsPanel, "Watch test input", StudyIcons.WatchInput);
@@ -122,7 +124,7 @@ public class StudyEditor implements FileEditor {
@Override
public void actionPerformed(ActionEvent e) {
StudyEditInputAction studyEditInputAction = (StudyEditInputAction)ActionManager.getInstance().getAction("WatchInputAction");
studyEditInputAction.showInput(project);
studyEditInputAction.showInput(myProject);
}
});
}
@@ -130,7 +132,7 @@ public class StudyEditor implements FileEditor {
@Override
public void actionPerformed(ActionEvent e) {
StudyCheckAction studyCheckAction = (StudyCheckAction)ActionManager.getInstance().getAction("CheckAction");
studyCheckAction.check(project);
studyCheckAction.check(myProject);
}
});
@@ -138,7 +140,7 @@ public class StudyEditor implements FileEditor {
@Override
public void actionPerformed(ActionEvent e) {
StudyNextStudyTaskAction studyNextTaskAction = (StudyNextStudyTaskAction)ActionManager.getInstance().getAction("NextTaskAction");
studyNextTaskAction.navigateTask(project);
studyNextTaskAction.navigateTask(myProject);
}
});
myPrevTaskButton.addActionListener(new ActionListener() {
@@ -146,14 +148,14 @@ public class StudyEditor implements FileEditor {
public void actionPerformed(ActionEvent e) {
StudyPreviousStudyTaskAction
prevTaskAction = (StudyPreviousStudyTaskAction)ActionManager.getInstance().getAction("PreviousTaskAction");
prevTaskAction.navigateTask(project);
prevTaskAction.navigateTask(myProject);
}
});
myRefreshButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
StudyRefreshTaskAction studyRefreshTaskAction = (StudyRefreshTaskAction)ActionManager.getInstance().getAction("RefreshTaskAction");
studyRefreshTaskAction.refresh(project);
studyRefreshTaskAction.refresh(myProject);
}
});
}
@@ -293,4 +295,27 @@ public class StudyEditor implements FileEditor {
public static void removeListener(Document document) {
myDocumentListeners.remove(document);
}
@NotNull
@Override
public Editor getEditor() {
if (myDefaultEditor instanceof TextEditor)
return ((TextEditor)myDefaultEditor).getEditor();
return EditorFactory.getInstance().createViewer(new DocumentImpl(""), myProject);
}
@Override
public boolean canNavigateTo(@NotNull Navigatable navigatable) {
if (myDefaultEditor instanceof TextEditor) {
((TextEditor)myDefaultEditor).canNavigateTo(navigatable);
}
return false;
}
@Override
public void navigateTo(@NotNull Navigatable navigatable) {
if (myDefaultEditor instanceof TextEditor) {
((TextEditor)myDefaultEditor).navigateTo(navigatable);
}
}
}