From bf1143ba518b47c85a32d53edce75d4f0b6d4cbf Mon Sep 17 00:00:00 2001 From: Dmitry Trofimov Date: Mon, 10 Dec 2012 15:18:36 +0100 Subject: [PATCH] Fixed django file reference default roots and rebind. --- .../python/psi/RootFileReferenceSet.java | 15 ++++++++++----- .../PyTemplateFileReferenceSet.java | 12 ++++++++---- .../templateLanguages/TemplateFileReference.java | 7 ++----- python/src/META-INF/python-plugin-common.xml | 4 ++-- .../config/ref/BuildoutPartReference.java | 4 ++-- 5 files changed, 24 insertions(+), 18 deletions(-) diff --git a/python/openapi/src/com/jetbrains/python/psi/RootFileReferenceSet.java b/python/openapi/src/com/jetbrains/python/psi/RootFileReferenceSet.java index 1144c8f34853..b9125dc37426 100644 --- a/python/openapi/src/com/jetbrains/python/psi/RootFileReferenceSet.java +++ b/python/openapi/src/com/jetbrains/python/psi/RootFileReferenceSet.java @@ -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.newArrayList(directory); + if (isAbsolutePathReference()) { + if (!ApplicationManager.getApplication().isUnitTestMode()) { + VirtualFile root = LocalFileSystem.getInstance().getRoot(); + PsiDirectory directory = file.getManager().findDirectory(root); + if (directory != null) { + return Lists.newArrayList(directory); + } + } + else { + return Lists.newArrayList(); } } else { diff --git a/python/openapi/src/com/jetbrains/python/templateLanguages/PyTemplateFileReferenceSet.java b/python/openapi/src/com/jetbrains/python/templateLanguages/PyTemplateFileReferenceSet.java index 0936cea18bbb..7eaeb53aa291 100644 --- a/python/openapi/src/com/jetbrains/python/templateLanguages/PyTemplateFileReferenceSet.java +++ b/python/openapi/src/com/jetbrains/python/templateLanguages/PyTemplateFileReferenceSet.java @@ -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 getRoots(Module module) { return TemplatesService.getInstance(module).getTemplateFolders(); } diff --git a/python/openapi/src/com/jetbrains/python/templateLanguages/TemplateFileReference.java b/python/openapi/src/com/jetbrains/python/templateLanguages/TemplateFileReference.java index c924421a2f6c..6dce0f0ad5b8 100644 --- a/python/openapi/src/com/jetbrains/python/templateLanguages/TemplateFileReference.java +++ b/python/openapi/src/com/jetbrains/python/templateLanguages/TemplateFileReference.java @@ -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 contexts = myReferenceSet.getDefaultContexts(); + final Collection 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())); } } } diff --git a/python/src/META-INF/python-plugin-common.xml b/python/src/META-INF/python-plugin-common.xml index ad2d3f0e7b7f..41d5ed05ab8c 100644 --- a/python/src/META-INF/python-plugin-common.xml +++ b/python/src/META-INF/python-plugin-common.xml @@ -528,8 +528,8 @@ key="inspection.relation.display-name" groupKey="django" enabledByDefault="true" level="WARNING" implementationClass="com.jetbrains.django.lang.template.inspection.DjangoRelationInspection"/> - + diff --git a/python/src/com/jetbrains/python/buildout/config/ref/BuildoutPartReference.java b/python/src/com/jetbrains/python/buildout/config/ref/BuildoutPartReference.java index bae7efb20d8f..2bac680a90c7 100644 --- a/python/src/com/jetbrains/python/buildout/config/ref/BuildoutPartReference.java +++ b/python/src/com/jetbrains/python/buildout/config/ref/BuildoutPartReference.java @@ -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)); }