diff --git a/python/src/com/jetbrains/python/buildout/BuildoutFacet.java b/python/src/com/jetbrains/python/buildout/BuildoutFacet.java index 90ca99752777..ce7758247bf3 100644 --- a/python/src/com/jetbrains/python/buildout/BuildoutFacet.java +++ b/python/src/com/jetbrains/python/buildout/BuildoutFacet.java @@ -38,7 +38,7 @@ import java.util.regex.Pattern; * User: dcheryasov * Date: Jul 25, 2010 3:23:50 PM */ -public class BuildoutFacet extends Facet implements PythonPathContributingFacet { +public class BuildoutFacet extends Facet implements PythonPathContributingFacet { private static final Logger LOG = Logger.getInstance("#com.jetbrains.python.buildout.BuildoutFacet"); @NonNls private static final String BUILDOUT_CFG = "buildout.cfg"; @@ -60,10 +60,14 @@ public class BuildoutFacet extends Facet implements VirtualFile bin = baseDir.findChild("bin"); if (bin != null && bin.isDirectory()) { final String exe; - if (SystemInfo.isWindows || SystemInfo.isOS2) exe = "buildout.exe"; - else exe = "buildout"; + if (SystemInfo.isWindows || SystemInfo.isOS2) { + exe = "buildout.exe"; + } + else { + exe = "buildout"; + } VirtualFile runner = bin.findChild(exe); - if (runner != null && ! runner.isDirectory()) { + if (runner != null && !runner.isDirectory()) { return runner; } } @@ -97,6 +101,7 @@ public class BuildoutFacet extends Facet implements /** * Extracts paths from given script, assuming sys.path[0:0] assignment. + * * @param script * @return extracted paths, or null if extraction fails. */ @@ -120,7 +125,9 @@ public class BuildoutFacet extends Facet implements ret.add(value); pos = scanner.end(); } - else break; // we've matched the ']', it's group(4) + else { + break; + } // we've matched the ']', it's group(4) } if (did_nothing) return null; } @@ -170,19 +177,26 @@ public class BuildoutFacet extends Facet implements @Nullable - public BuildoutCfgFile getConfigFile() { + public File getConfigFile() { final String scriptName = getConfiguration().getScriptName(); if (!StringUtil.isEmpty(scriptName)) { - File cfg = new File(new File(scriptName).getParentFile().getParentFile(), BUILDOUT_CFG); - if (cfg.exists()) { - final VirtualFile vFile = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(cfg); - if (vFile != null) { - final PsiFile psiFile = PsiManager.getInstance(getModule().getProject()).findFile(vFile); - if (psiFile instanceof BuildoutCfgFile) { - return (BuildoutCfgFile) psiFile; - } + return new File(new File(scriptName).getParentFile().getParentFile(), BUILDOUT_CFG); + } + return null; + } + + @Nullable + public BuildoutCfgFile getConfigPsiFile() { + File cfg = getConfigFile(); + if (cfg.exists()) { + final VirtualFile vFile = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(cfg); + if (vFile != null) { + final PsiFile psiFile = PsiManager.getInstance(getModule().getProject()).findFile(vFile); + if (psiFile instanceof BuildoutCfgFile) { + return (BuildoutCfgFile)psiFile; } } + } return null; } diff --git a/python/src/com/jetbrains/python/buildout/BuildoutUtil.java b/python/src/com/jetbrains/python/buildout/BuildoutUtil.java new file mode 100644 index 000000000000..b06a358785b0 --- /dev/null +++ b/python/src/com/jetbrains/python/buildout/BuildoutUtil.java @@ -0,0 +1,55 @@ +package com.jetbrains.python.buildout; + +import com.intellij.openapi.util.io.FileUtil; +import com.intellij.psi.PsiFile; +import com.intellij.psi.PsiFileFactory; +import com.jetbrains.python.buildout.config.BuildoutCfgLanguage; +import com.jetbrains.python.buildout.config.psi.impl.BuildoutCfgFile; +import com.jetbrains.python.buildout.config.psi.impl.BuildoutCfgSection; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.io.File; +import java.util.List; + +/** + * @author traff + */ +public class BuildoutUtil { + private static final String RECIPE = "recipe"; + private static final String DJANGO_RECIPE = "djangorecipe"; + + @Nullable + public static BuildoutCfgSection getDjangoSection(@NotNull BuildoutCfgFile configFile) { + List parts = configFile.getParts(); + for (String part : parts) { + final BuildoutCfgSection section = configFile.findSectionByName(part); + if (section != null && DJANGO_RECIPE.equals(section.getOptionValue(RECIPE))) { + return section; + } + } + return null; + } + + @Nullable + public static BuildoutCfgFile readBuildOutCfgFile(BuildoutFacet buildoutFacet) { + File cfg = buildoutFacet.getConfigFile(); + if (cfg != null && cfg.exists()) { + try { + char[] scriptText = FileUtil.loadFileText(cfg); + final PsiFile configFile = PsiFileFactory + .getInstance(buildoutFacet.getModule().getProject()).createFileFromText("buildout.cfg", + BuildoutCfgLanguage.INSTANCE, new String(scriptText)); + if (configFile != null && configFile instanceof BuildoutCfgFile) { + return (BuildoutCfgFile)configFile; + } + } + catch (Exception e) { + } + } + return null; + + + } +} + diff --git a/python/src/com/jetbrains/python/buildout/config/psi/BuildoutCfgASTFactory.java b/python/src/com/jetbrains/python/buildout/config/psi/BuildoutCfgASTFactory.java index c6752c218281..4514cc5dc27b 100644 --- a/python/src/com/jetbrains/python/buildout/config/psi/BuildoutCfgASTFactory.java +++ b/python/src/com/jetbrains/python/buildout/config/psi/BuildoutCfgASTFactory.java @@ -36,10 +36,7 @@ public class BuildoutCfgASTFactory implements BuildoutCfgElementTypes, BuildoutC if (type == SECTION_NAME) { return new BuildoutCfgSectionHeaderName(node); } - //if (type == KEY_CHARACTERS || type == VALUE_CHARACTERS) { - // return new BuildoutCfgCharacters(node); - //} - + return new BuildoutCfgPsiElement(node); } } diff --git a/python/src/com/jetbrains/python/buildout/config/psi/impl/BuildoutCfgCharacters.java b/python/src/com/jetbrains/python/buildout/config/psi/impl/BuildoutCfgCharacters.java deleted file mode 100644 index 5446f9223377..000000000000 --- a/python/src/com/jetbrains/python/buildout/config/psi/impl/BuildoutCfgCharacters.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.jetbrains.python.buildout.config.psi.impl; - -import com.intellij.lang.ASTNode; -import org.jetbrains.annotations.NotNull; - -/** - * @author traff - */ -public class BuildoutCfgCharacters extends BuildoutCfgPsiElement { - public BuildoutCfgCharacters(@NotNull final ASTNode node) { - super(node); - } - - public String getCharacters() { - return null; - } - - - @Override - public String toString() { - return "BuildoutCfgCharacters:" + getNode().getElementType().toString(); - } -}