<refactoring.elementListenerProvider implementation="com.jetbrains.edu.coursecreator.CCRefactoringElementListenerProvider"/>
<errorHandler implementation="com.intellij.diagnostic.ITNReporter"/>
<renameHandler implementation="com.jetbrains.edu.coursecreator.CCRenameHandler"/>
+ <renameInputValidator implementation="com.jetbrains.edu.coursecreator.CCRenameInputValidator"/>
</extensions>
<application-components>
myDocumentListeners.remove(document);
}
- public boolean isTaskFile(VirtualFile file) {
+ @Nullable
+ public Task getTask(VirtualFile file) {
if (myCourse == null || file == null) {
- return false;
+ return null;
}
VirtualFile taskDir = file.getParent();
if (taskDir != null) {
int lessonIndex = EduUtils.getIndex(lessonDirName, EduNames.LESSON);
List<Lesson> lessons = myCourse.getLessons();
if (!EduUtils.indexIsValid(lessonIndex, lessons)) {
- return false;
+ return null;
}
Lesson lesson = lessons.get(lessonIndex);
int taskIndex = EduUtils.getIndex(taskDirName, EduNames.TASK);
List<Task> tasks = lesson.getTaskList();
if (!EduUtils.indexIsValid(taskIndex, tasks)) {
- return false;
+ return null;
}
- Task task = tasks.get(taskIndex);
- return task.isTaskFile(file.getName());
+ return tasks.get(taskIndex);
}
}
}
- return false;
+ return null;
+ }
+
+ public boolean isAnswerFile(VirtualFile file) {
+ Task task = getTask(file);
+ String fileName = getRealTaskFileName(file.getName());
+ return task != null && fileName != null && task.isTaskFile(fileName);
+ }
+
+ public boolean isTaskFile(VirtualFile file) {
+ Task task = getTask(file);
+ return task != null && task.isTaskFile(file.getName());
}
@Nullable
public static CCProjectService getInstance(@NotNull Project project) {
return ServiceManager.getService(project, CCProjectService.class);
}
-
}
--- /dev/null
+package com.jetbrains.edu.coursecreator;
+
+import com.intellij.patterns.ElementPattern;
+import com.intellij.patterns.PlatformPatterns;
+import com.intellij.psi.PsiElement;
+import com.intellij.refactoring.rename.RenameInputValidator;
+import com.intellij.util.ProcessingContext;
+
+public class CCRenameInputValidator implements RenameInputValidator {
+ @Override
+ public ElementPattern<? extends PsiElement> getPattern() {
+ return PlatformPatterns.psiFile();
+ }
+
+ @Override
+ public boolean isInputValid(String newName, PsiElement element, ProcessingContext context) {
+ if (!CCUtils.isAnswerFile(element)) {
+ return true;
+ }
+ return newName.contains(".answer.");
+ }
+}
package com.jetbrains.edu.coursecreator;
import com.intellij.lang.Language;
+import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.psi.PsiElement;
+import com.intellij.psi.PsiFile;
import com.jetbrains.edu.courseFormat.Course;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
Language language = Language.findLanguageByID(course.getLanguage());
return language == null ? null : CCLanguageManager.INSTANCE.forLanguage(language);
}
+
+ public static boolean isAnswerFile(PsiElement element) {
+ if (!(element instanceof PsiFile)) {
+ return false;
+ }
+ VirtualFile file = ((PsiFile)element).getVirtualFile();
+ return CCProjectService.getInstance(element.getProject()).isAnswerFile(file);
+ }
}