package com.chrisfolger.needsmoredojo.intellij.refactoring;
import com.chrisfolger.needsmoredojo.core.amd.filesystem.SourcesLocator;
import com.chrisfolger.needsmoredojo.core.settings.DojoSettings;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.refactoring.listeners.RefactoringElementListener;
import com.intellij.refactoring.listeners.RefactoringElementListenerProvider;
import org.jetbrains.annotations.Nullable;
public class MoveRefactoringProvider implements RefactoringElementListenerProvider
{
@Nullable
@Override
public RefactoringElementListener getListener(PsiElement psiElement)
{
if(!(psiElement instanceof PsiFile))
{
return null;
}
PsiFile file = (PsiFile) psiElement;
String extension = file.getVirtualFile().getExtension();
if(!extension.equals("js"))
{
return null;
}
if(!file.getText().contains("define"))
{
return null; // not a dojo module
}
if(!ServiceManager.getService(file.getProject(), DojoSettings.class).isNeedsMoreDojoEnabled())
{
return null; // don't want to refactor if we've disabled Needs More Dojo.
}
if(!ServiceManager.getService(file.getProject(), DojoSettings.class).isRefactoringEnabled())
{
return null;
}
VirtualFile[] sources = SourcesLocator.getProjectSourceDirectories(file.getProject(), true);
if(sources.length == 0 || sources[0] == null)
{
// no project sources, so we can't really refactor
return null;
}
return new MoveRefactoringListener(file, file.getName());
}
}