Fixed django file reference default roots and rebind.

This commit is contained in:
Dmitry Trofimov
2012-12-10 15:18:36 +01:00
parent cbd78c0ec4
commit bf1143ba51
5 changed files with 24 additions and 18 deletions
@@ -39,11 +39,16 @@ public class RootFileReferenceSet extends FileReferenceSet {
final PsiFile file = getContainingFile();
if (file != null) {
if (isAbsolutePathReference() && !ApplicationManager.getApplication().isUnitTestMode()) {
VirtualFile root = LocalFileSystem.getInstance().getRoot();
PsiDirectory directory = file.getManager().findDirectory(root);
if (directory != null) {
return Lists.<PsiFileSystemItem>newArrayList(directory);
if (isAbsolutePathReference()) {
if (!ApplicationManager.getApplication().isUnitTestMode()) {
VirtualFile root = LocalFileSystem.getInstance().getRoot();
PsiDirectory directory = file.getManager().findDirectory(root);
if (directory != null) {
return Lists.<PsiFileSystemItem>newArrayList(directory);
}
}
else {
return Lists.newArrayList();
}
}
else {
@@ -17,17 +17,16 @@ package com.jetbrains.python.templateLanguages;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleUtilCore;
import com.intellij.openapi.util.SystemInfo;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiFileSystemItem;
import com.intellij.psi.PsiManager;
import com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReference;
import com.intellij.util.containers.ContainerUtil;
import com.jetbrains.python.PythonStringUtil;
import com.jetbrains.python.psi.PyStringLiteralExpression;
import com.jetbrains.python.psi.PyStringLiteralFileReferenceSet;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Collection;
import java.util.List;
@@ -60,6 +59,11 @@ public class PyTemplateFileReferenceSet extends PyStringLiteralFileReferenceSet
return contexts;
}
@Override
public String getSeparatorString() {
return TemplateFileReferenceSet.detectSeparator(getElement()); //we need it not to change slashes during rebind
}
protected List<VirtualFile> getRoots(Module module) {
return TemplatesService.getInstance(module).getTemplateFolders();
}
@@ -40,11 +40,8 @@ import java.util.Collection;
* @author yole
*/
public class TemplateFileReference extends WeakFileReference {
@NotNull private final FileReferenceSet myReferenceSet;
public TemplateFileReference(@NotNull FileReferenceSet fileReferenceSet, TextRange range, int index, String text) {
super(fileReferenceSet, range, index, text);
myReferenceSet = fileReferenceSet;
}
@Nullable
@@ -85,7 +82,7 @@ public class TemplateFileReference extends WeakFileReference {
dstItem = _dstItem;
}
final Collection<PsiFileSystemItem> contexts = myReferenceSet.getDefaultContexts();
final Collection<PsiFileSystemItem> contexts = getFileReferenceSet().getDefaultContexts();
switch (contexts.size()) {
case 0:
break;
@@ -96,7 +93,7 @@ public class TemplateFileReference extends WeakFileReference {
if (VfsUtil.isAncestor(contextFile, dstVFile, true)) {
final String path = VfsUtilCore.getRelativePath(dstVFile, contextFile, '/');
if (path != null) {
return rename(path.replace("/", myReferenceSet.getSeparatorString()));
return rename(path.replace("/", getFileReferenceSet().getSeparatorString()));
}
}
}
+2 -2
View File
@@ -528,8 +528,8 @@
key="inspection.relation.display-name" groupKey="django" enabledByDefault="true" level="WARNING"
implementationClass="com.jetbrains.django.lang.template.inspection.DjangoRelationInspection"/>
<moduleService serviceInterface="com.jetbrains.django.model.TemplateManager"
serviceImplementation="com.jetbrains.django.model.TemplateManager"/>
<moduleService serviceInterface="com.jetbrains.django.model.DjangoTemplateManager"
serviceImplementation="com.jetbrains.django.model.DjangoTemplateManager"/>
<projectService serviceInterface="com.jetbrains.django.model.TagLibrary"
serviceImplementation="com.jetbrains.django.model.TagLibrary"/>
@@ -8,7 +8,7 @@ import com.intellij.psi.PsiElement;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.IncorrectOperationException;
import com.jetbrains.django.lang.template.psi.impl.DjangoTemplateFileImpl;
import com.jetbrains.django.model.TemplateManager;
import com.jetbrains.django.model.DjangoTemplateManager;
import com.jetbrains.django.ref.BaseReference;
import com.jetbrains.python.PythonStringUtil;
import com.jetbrains.python.buildout.config.psi.impl.BuildoutCfgFile;
@@ -70,7 +70,7 @@ public class BuildoutPartReference extends BaseReference {
public PsiElement bindToElement(@NotNull PsiElement element) throws IncorrectOperationException {
Module module = ModuleUtil.findModuleForPsiElement(myElement);
if (module != null) {
String name = TemplateManager.getRelativeName(module, (DjangoTemplateFileImpl)element);
String name = DjangoTemplateManager.getRelativeName(module, (DjangoTemplateFileImpl)element);
if (name != null) {
return myElement.replace(PyElementGenerator.getInstance(myElement.getProject()).createStringLiteralFromString(name));
}