Merge branch 'master' of git.labs.intellij.net:idea/ultimate

This commit is contained in:
Dmitry Jemerov
2011-01-20 20:26:38 +01:00
4 changed files with 67 additions and 27 deletions
+10 -16
View File
@@ -27,28 +27,22 @@
<string>@@version@@</string>
<key>CFBundleVersion</key>
<string>@@build@@</string>
<key>LSArchitecturePriority</key>
<array>
<string>i386</string>
<string>x86_64</string>
<string>ppc</string>
</array>
<key>Java</key>
<dict>
<dict>
<key>ClassPath</key>
<string>$APP_PACKAGE/lib/bootstrap.jar:$APP_PACKAGE/lib/extensions.jar:$APP_PACKAGE/lib/util.jar:$APP_PACKAGE/lib/jdom.jar:$APP_PACKAGE/lib/log4j.jar</string>
<key>JVMVersion</key>
<string>@@jdk_req@@</string>
<key>JVMArchs</key>
<array>
<string>i386</string>
<string>x86_64</string>
<string>ppc</string>
</array>
<key>LSArchitecturePriority</key>
<array>
<string>i386</string>
<string>x86_64</string>
<string>ppc</string>
</array>
<key>MainClass</key>
<string>com.intellij.idea.Main</string>
<key>Properties</key>
@@ -86,6 +80,6 @@
<key>WorkingDirectory</key>
<string>$APP_PACKAGE/bin</string>
</dict>
</dict>
</dict>
</plist>
@@ -1,11 +0,0 @@
#!/usr/bin/env python
from django.core.management import execute_manager
try:
import settings # Assumed to be in the same directory.
except ImportError:
import sys
sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__)
sys.exit(1)
if __name__ == "__main__":
execute_manager(settings)
@@ -37,6 +37,7 @@
<completion.contributor language="Python" implementationClass="com.jetbrains.python.codeInsight.PyKeywordCompletionContributor"/>
<completion.contributor language="Python" implementationClass="com.jetbrains.python.codeInsight.PySpecialMethodNamesCompletionContributor"/>
<completion.contributor language="Python" implementationClass="com.jetbrains.python.codeInsight.PySuperMethodCompletionContributor"/>
<completion.contributor language="Python" implementationClass="com.jetbrains.python.codeInsight.PySuperAttributesCompletionContributor"/>
<completion.contributor language="Python" implementationClass="com.jetbrains.python.codeInsight.PyDictKeyNamesCompletionContributor"/>
<lang.tokenSeparatorGenerator language="Python" implementationClass="com.jetbrains.python.PyTokenSeparatorGenerator"/>
<lang.elementManipulator forClass="com.jetbrains.python.psi.PyReferenceExpression" implementationClass="com.jetbrains.python.psi.impl.PyReferenceExpressionManipulator"/>
@@ -0,0 +1,56 @@
package com.jetbrains.python.codeInsight;
import com.google.common.collect.Lists;
import com.intellij.codeInsight.completion.*;
import com.intellij.codeInsight.lookup.LookupElementBuilder;
import com.intellij.patterns.PlatformPatterns;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiWhiteSpace;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.ProcessingContext;
import com.jetbrains.python.psi.*;
import org.jetbrains.annotations.NotNull;
import java.util.List;
/**
* @author traff
*/
public class PySuperAttributesCompletionContributor extends CompletionContributor {
public PySuperAttributesCompletionContributor() {
extend(CompletionType.BASIC,
PlatformPatterns.psiElement().withParent(PyReferenceExpression.class),
new CompletionProvider<CompletionParameters>() {
@Override
protected void addCompletions(@NotNull CompletionParameters parameters,
ProcessingContext context,
@NotNull CompletionResultSet result) {
PsiElement position = parameters.getOriginalPosition();
PyClass containingClass = PsiTreeUtil.getParentOfType(position, PyClass.class);
if (containingClass == null && position instanceof PsiWhiteSpace) {
position = PsiTreeUtil.prevLeaf(position);
containingClass = PsiTreeUtil.getParentOfType(position, PyClass.class);
}
if (containingClass == null) {
return;
}
PyFunction func = PsiTreeUtil.getParentOfType(position, PyFunction.class);
if (func != null) {
return;
}
List<String> seenNames = Lists.newArrayList();
for (PyTargetExpression expr : containingClass.getClassAttributes()) {
seenNames.add(expr.getName());
}
for (PyClass ancestor : containingClass.iterateAncestors()) {
for (PyTargetExpression expr : ancestor.getClassAttributes()) {
if (!seenNames.contains(expr.getName())) {
result.addElement(LookupElementBuilder.create(expr, expr.getName() + " = "));
seenNames.add(expr.getName());
}
}
}
}
});
}
}