From 166b126019761b83bc42937d2920cd8f3ddc937c Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 7 Aug 2012 12:08:52 +0200 Subject: [PATCH 01/21] show module names in second completion (PY-7066) --- .../PyClassNameCompletionContributor.java | 31 +++++++++++++++---- .../imports/ImportFromExistingAction.java | 7 ++--- .../imports/PythonReferenceImporter.java | 16 ++++++---- .../src/com/jetbrains/python/psi/PyUtil.java | 4 +-- .../python/psi/types/PyModuleType.java | 29 ++++++++--------- .../className/module/module.after.py | 3 ++ .../completion/className/module/module.py | 1 + .../python/PyClassNameCompletionTest.java | 9 +++++- 8 files changed, 65 insertions(+), 35 deletions(-) create mode 100644 python/testData/completion/className/module/module.after.py create mode 100644 python/testData/completion/className/module/module.py diff --git a/python/src/com/jetbrains/python/codeInsight/completion/PyClassNameCompletionContributor.java b/python/src/com/jetbrains/python/codeInsight/completion/PyClassNameCompletionContributor.java index 705a85a806f9..1ed586de4420 100644 --- a/python/src/com/jetbrains/python/codeInsight/completion/PyClassNameCompletionContributor.java +++ b/python/src/com/jetbrains/python/codeInsight/completion/PyClassNameCompletionContributor.java @@ -9,18 +9,22 @@ import com.intellij.openapi.command.WriteCommandAction; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.Conditions; -import com.intellij.openapi.util.Iconable; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; +import com.intellij.psi.search.FileTypeIndex; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.stubs.StubIndex; import com.intellij.psi.stubs.StubIndexKey; import com.intellij.psi.util.PsiTreeUtil; +import com.jetbrains.python.PythonFileType; import com.jetbrains.python.codeInsight.imports.AddImportHelper; +import com.jetbrains.python.codeInsight.imports.PythonReferenceImporter; import com.jetbrains.python.psi.*; import com.jetbrains.python.psi.impl.PyPsiUtils; import com.jetbrains.python.psi.search.PyProjectScopeBuilder; import com.jetbrains.python.psi.stubs.PyClassNameIndex; import com.jetbrains.python.psi.stubs.PyFunctionNameIndex; +import com.jetbrains.python.psi.types.PyModuleType; import java.util.Collection; @@ -40,9 +44,25 @@ public class PyClassNameCompletionContributor extends CompletionContributor { if (PsiTreeUtil.getParentOfType(element, PyImportStatementBase.class) != null) { return; } - addVariantsFromIndex(result, parameters.getOriginalFile(), PyClassNameIndex.KEY, CLASS_INSERT_HANDLER, + addVariantsFromIndex(result, parameters.getOriginalFile(), PyClassNameIndex.KEY, IMPORTING_INSERT_HANDLER, Conditions.alwaysTrue()); addVariantsFromIndex(result, parameters.getOriginalFile(), PyFunctionNameIndex.KEY, FUNCTION_INSERT_HANDLER, TOPLEVEL_FUNCTION); + addVariantsFromModules(result, parameters.getOriginalFile()); + } + } + + private static void addVariantsFromModules(CompletionResultSet result, PsiFile targetFile) { + Collection files = FileTypeIndex.getFiles(PythonFileType.INSTANCE, PyProjectScopeBuilder.excludeSdkTestsScope(targetFile)); + for (VirtualFile file : files) { + PsiFile pyFile = targetFile.getManager().findFile(file); + if (pyFile == null) continue; + PsiFileSystemItem importable = (PsiFileSystemItem) PyUtil.turnInitIntoDir(pyFile); + if (PythonReferenceImporter.isImportableModule(targetFile, importable)) { + LookupElementBuilder element = PyModuleType.buildFileLookupElement(importable, null); + if (element != null) { + result.addElement(element.withInsertHandler(IMPORTING_INSERT_HANDLER)); + } + } } } @@ -65,8 +85,7 @@ public class PyClassNameCompletionContributor extends CompletionContributor { for (final String elementName : CompletionUtil.sortMatching(resultSet.getPrefixMatcher(), keys)) { for (T element : StubIndex.getInstance().get(key, elementName, project, scope)) { if (condition.value(element)) { - resultSet.addElement(LookupElementBuilder.create(element) - .withIcon(element.getIcon(Iconable.ICON_FLAG_CLOSED)) + resultSet.addElement(LookupElementBuilder.createWithIcon(element) .withTailText(" " + ((NavigationItem)element).getPresentation().getLocationString(), true) .withInsertHandler(insertHandler)); } @@ -74,9 +93,9 @@ public class PyClassNameCompletionContributor extends CompletionContributor { } } - private static final InsertHandler CLASS_INSERT_HANDLER = new InsertHandler() { + private static final InsertHandler IMPORTING_INSERT_HANDLER = new InsertHandler() { public void handleInsert(final InsertionContext context, final LookupElement item) { - addImportForLookupElement(context, item, context.getTailOffset() - 1); + addImportForLookupElement(context, item, context.getTailOffset() - 1); } }; diff --git a/python/src/com/jetbrains/python/codeInsight/imports/ImportFromExistingAction.java b/python/src/com/jetbrains/python/codeInsight/imports/ImportFromExistingAction.java index f3042d1074ac..7104fd0ccc0d 100644 --- a/python/src/com/jetbrains/python/codeInsight/imports/ImportFromExistingAction.java +++ b/python/src/com/jetbrains/python/codeInsight/imports/ImportFromExistingAction.java @@ -9,7 +9,6 @@ import com.intellij.openapi.editor.colors.EditorColorsManager; import com.intellij.openapi.editor.colors.EditorColorsScheme; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ProjectFileIndex; -import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.ui.popup.PopupChooserBuilder; import com.intellij.openapi.util.AsyncResult; import com.intellij.openapi.util.Comparing; @@ -124,7 +123,7 @@ public class ImportFromExistingAction implements QuestionAction { final Project project = myTarget.getProject(); final PyElementGenerator gen = PyElementGenerator.getInstance(project); AddImportHelper.ImportPriority priority = AddImportHelper.getImportPriority(myTarget, item.getFile()); - if (isRoot(project, item.getFile())) { + if (isRoot(item.getFile())) { AddImportHelper.addImportStatement(myTarget.getContainingFile(), myName, null, priority); } else { @@ -170,11 +169,11 @@ public class ImportFromExistingAction implements QuestionAction { } } - public static boolean isRoot(Project project, PsiFileSystemItem directory) { + public static boolean isRoot(PsiFileSystemItem directory) { if (directory == null) return true; VirtualFile vFile = directory.getVirtualFile(); if (vFile == null) return true; - ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex(); + ProjectFileIndex fileIndex = ProjectFileIndex.SERVICE.getInstance(directory.getProject()); return Comparing.equal(fileIndex.getClassRootForFile(vFile), vFile) || Comparing.equal(fileIndex.getContentRootForFile(vFile), vFile) || Comparing.equal(fileIndex.getSourceRootForFile(vFile), vFile); diff --git a/python/src/com/jetbrains/python/codeInsight/imports/PythonReferenceImporter.java b/python/src/com/jetbrains/python/codeInsight/imports/PythonReferenceImporter.java index d6115ac1811f..7ab97445ebed 100644 --- a/python/src/com/jetbrains/python/codeInsight/imports/PythonReferenceImporter.java +++ b/python/src/com/jetbrains/python/codeInsight/imports/PythonReferenceImporter.java @@ -157,7 +157,7 @@ public class PythonReferenceImporter implements ReferenceImporter { if (isIndexableTopLevel(symbol)) { // we only want top-level symbols PsiFileSystemItem srcfile = symbol instanceof PsiFileSystemItem ? ((PsiFileSystemItem)symbol).getParent() : symbol.getContainingFile(); if (srcfile != null && srcfile != existing_import_file && srcfile != node.getContainingFile() && - (ImportFromExistingAction.isRoot(project, srcfile) || PyNames.isIdentifier(FileUtil.getNameWithoutExtension(srcfile.getName()))) && + (ImportFromExistingAction.isRoot(srcfile) || PyNames.isIdentifier(FileUtil.getNameWithoutExtension(srcfile.getName()))) && !isShadowedModule(srcfile)) { PyQualifiedName import_path = ResolveImportUtil.findCanonicalImportPath(srcfile, node); if (import_path != null && !seen_file_names.contains(import_path.toString())) { @@ -216,11 +216,7 @@ public class PythonReferenceImporter implements ReferenceImporter { List result = new ArrayList(); PsiFile[] files = FilenameIndex.getFilesByName(project, reftext + ".py", scope); for (PsiFile file : files) { - PsiDirectory parent = file.getParent(); - if (parent != null && file != targetFile && - (parent.findFile(PyNames.INIT_DOT_PY) != null || - ImportFromExistingAction.isRoot(project, parent) || - parent == targetFile.getParent())) { + if (isImportableModule(targetFile, file)) { result.add(file); } } @@ -235,6 +231,14 @@ public class PythonReferenceImporter implements ReferenceImporter { return result; } + public static boolean isImportableModule(PsiFile targetFile, PsiFileSystemItem file) { + PsiDirectory parent = (PsiDirectory)file.getParent(); + return parent != null && file != targetFile && + (parent.findFile(PyNames.INIT_DOT_PY) != null || + ImportFromExistingAction.isRoot(parent) || + parent == targetFile.getParent()); + } + private static boolean isIndexableTopLevel(PsiElement symbol) { if (symbol instanceof PsiFileSystemItem) { return true; diff --git a/python/src/com/jetbrains/python/psi/PyUtil.java b/python/src/com/jetbrains/python/psi/PyUtil.java index 27f2b1eae848..86f27b4630cb 100644 --- a/python/src/com/jetbrains/python/psi/PyUtil.java +++ b/python/src/com/jetbrains/python/psi/PyUtil.java @@ -633,8 +633,8 @@ public class PyUtil { @Nullable public static PsiElement turnInitIntoDir(PsiElement target) { - if (target instanceof PyFile && PyNames.INIT_DOT_PY.equals(((PyFile)target).getName())) { - return ((PyFile)target).getContainingDirectory(); + if (target instanceof PyFile && isPackage((PsiFile) target)) { + return ((PsiFile)target).getContainingDirectory(); } return target; } diff --git a/python/src/com/jetbrains/python/psi/types/PyModuleType.java b/python/src/com/jetbrains/python/psi/types/PyModuleType.java index 3baebf8100bd..3fd2245a8471 100644 --- a/python/src/com/jetbrains/python/psi/types/PyModuleType.java +++ b/python/src/com/jetbrains/python/psi/types/PyModuleType.java @@ -273,7 +273,7 @@ public class PyModuleType implements PyType { // Modules don't descend from obje return result.toArray(); } - private void addImportedSubmodules(PyExpression location, Set names_already, List result) { + private void addImportedSubmodules(PyExpression location, Set exiatingNames, List result) { PsiFile file = location.getContainingFile(); if (file instanceof PyFile) { PyFile pyFile = (PyFile)file; @@ -286,10 +286,10 @@ public class PyModuleType implements PyType { // Modules don't descend from obje } LookupElement element = null; if (target instanceof PsiFileSystemItem) { - element = buildFileLookupElement(location, names_already, (PsiFileSystemItem) target); + element = buildFileLookupElement((PsiFileSystemItem) target, exiatingNames); } else if (target instanceof PsiNamedElement) { - element = LookupElementBuilder.create((PsiNamedElement)target).withIcon(target.getIcon(0)); + element = LookupElementBuilder.createWithIcon((PsiNamedElement)target); } if (element != null) { result.add(element); @@ -304,26 +304,23 @@ public class PyModuleType implements PyType { // Modules don't descend from obje Set names_already) { List result = new ArrayList(); for (PsiFileSystemItem item : getSubmodulesList(directory)) { - LookupElement lookupElement = buildFileLookupElement(location, names_already, item); - if (lookupElement != null) { - result.add(lookupElement); + if (item != location.getContainingFile().getOriginalFile()) { + LookupElement lookupElement = buildFileLookupElement(item, names_already); + if (lookupElement != null) { + result.add(lookupElement); + } } } return result; } @Nullable - private static LookupElement buildFileLookupElement(PsiElement location, - Set names_already, - PsiFileSystemItem item) { - if (item == location.getContainingFile().getOriginalFile()) return null; - String s = item.getName(); - int pos = s.lastIndexOf('.'); // it may not contain a dot, except in extension; cut it off. - if (pos > 0) s = s.substring(0, pos); + public static LookupElementBuilder buildFileLookupElement(PsiFileSystemItem item, @Nullable Set existingNames) { + String s = FileUtil.getNameWithoutExtension(item.getName()); if (!PyNames.isIdentifier(s)) return null; - if (names_already != null) { - if (names_already.contains(s)) return null; - else names_already.add(s); + if (existingNames != null) { + if (existingNames.contains(s)) return null; + else existingNames.add(s); } return LookupElementBuilder.create(item, s) .withTypeText(getPresentablePath((PsiDirectory)item.getParent())) diff --git a/python/testData/completion/className/module/module.after.py b/python/testData/completion/className/module/module.after.py new file mode 100644 index 000000000000..ed09c232ace0 --- /dev/null +++ b/python/testData/completion/className/module/module.after.py @@ -0,0 +1,3 @@ +import exceptions + +exceptions \ No newline at end of file diff --git a/python/testData/completion/className/module/module.py b/python/testData/completion/className/module/module.py new file mode 100644 index 000000000000..5ad0df6e0856 --- /dev/null +++ b/python/testData/completion/className/module/module.py @@ -0,0 +1 @@ +exc \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PyClassNameCompletionTest.java b/python/testSrc/com/jetbrains/python/PyClassNameCompletionTest.java index cb99ad2876e1..853fd36f5c29 100644 --- a/python/testSrc/com/jetbrains/python/PyClassNameCompletionTest.java +++ b/python/testSrc/com/jetbrains/python/PyClassNameCompletionTest.java @@ -33,11 +33,18 @@ public class PyClassNameCompletionTest extends PyTestCase { doTest(); } + public void testModule() { + doTest(); + } + private void doTest() { final String path = "/completion/className/" + getTestName(true); myFixture.copyDirectoryToProject(path, ""); myFixture.configureFromTempProjectFile(getTestName(true) + ".py"); myFixture.complete(CompletionType.BASIC, 2); - myFixture.checkResultByFile(path + "/" + getTestName(true) + ".after.py"); + if (myFixture.getLookupElements() != null) { + myFixture.finishLookup(); + } + myFixture.checkResultByFile(path + "/" + getTestName(true) + ".after.py", true); } } From 59bd0dd4d57ef0c277cc12d1dd47a86d7a7b3d08 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 7 Aug 2012 12:46:11 +0200 Subject: [PATCH 02/21] fix parsing of generator in argument list to actually match Python grammaer (PY-6926) --- .../python/parsing/ExpressionParsing.java | 50 +++++++++++-------- python/testData/psi/GeneratorList.py | 1 + python/testData/psi/GeneratorList.txt | 31 ++++++++++++ .../jetbrains/python/PythonParsingTest.java | 5 ++ 4 files changed, 65 insertions(+), 22 deletions(-) create mode 100644 python/testData/psi/GeneratorList.py create mode 100644 python/testData/psi/GeneratorList.txt diff --git a/python/src/com/jetbrains/python/parsing/ExpressionParsing.java b/python/src/com/jetbrains/python/parsing/ExpressionParsing.java index 52d27dc59974..9d68a7616b64 100644 --- a/python/src/com/jetbrains/python/parsing/ExpressionParsing.java +++ b/python/src/com/jetbrains/python/parsing/ExpressionParsing.java @@ -131,20 +131,26 @@ public class ExpressionParsing extends Parsing { } private void parseComprehension(PsiBuilder.Marker expr, - final IElementType endToken, + @Nullable final IElementType endToken, final IElementType exprType, final boolean leaveEndTokenOutside) { assertCurrentToken(PyTokenTypes.FOR_KEYWORD); while (true) { myBuilder.advanceLexer(); parseExpression(true, true); - parseComprehensionRange(); + parseComprehensionRange(exprType == PyElementTypes.GENERATOR_EXPRESSION); while (myBuilder.getTokenType() == PyTokenTypes.IF_KEYWORD) { myBuilder.advanceLexer(); if (!parseOldExpression()) { myBuilder.error(message("PARSE.expected.expression")); } } + if (atToken(PyTokenTypes.FOR_KEYWORD)) { + continue; + } + if (endToken == null) { + break; + } if (atToken(endToken)) { if (leaveEndTokenOutside) { expr.done(exprType); @@ -154,18 +160,22 @@ public class ExpressionParsing extends Parsing { nextToken(); break; } - if (atToken(PyTokenTypes.FOR_KEYWORD)) { - continue; - } myBuilder.error(message("PARSE.expected.for.or.bracket")); break; } expr.done(exprType); } - protected void parseComprehensionRange() { + protected void parseComprehensionRange(boolean generatorExpression) { checkMatches(PyTokenTypes.IN_KEYWORD, "'in' expected"); - if (!parseTupleExpression(false, false, true)) { + boolean result; + if (generatorExpression) { + result = parseORTestExpression(false, false); + } + else { + result = parseTupleExpression(false, false, true); + } + if (!result) { myBuilder.error("expression expected"); } } @@ -449,20 +459,18 @@ public class ExpressionParsing extends Parsing { LOG.assertTrue(myBuilder.getTokenType() == PyTokenTypes.LPAR); final PsiBuilder.Marker arglist = myBuilder.mark(); myBuilder.advanceLexer(); - final PsiBuilder.Marker genexpr = myBuilder.mark(); + PsiBuilder.Marker genexpr = myBuilder.mark(); int argNumber = 0; - boolean needBracket = true; while (myBuilder.getTokenType() != PyTokenTypes.RPAR) { argNumber++; if (argNumber > 1) { - if (argNumber == 2 && myBuilder.getTokenType() == PyTokenTypes.FOR_KEYWORD && genexpr != null) { - parseComprehension(genexpr, PyTokenTypes.RPAR, PyElementTypes.GENERATOR_EXPRESSION, true); - needBracket = false; - break; + if (argNumber == 2 && atToken(PyTokenTypes.FOR_KEYWORD) && genexpr != null) { + parseComprehension(genexpr, null, PyElementTypes.GENERATOR_EXPRESSION, true); + genexpr = null; + continue; } - else if (myBuilder.getTokenType() == PyTokenTypes.COMMA) { - myBuilder.advanceLexer(); - if (myBuilder.getTokenType() == PyTokenTypes.RPAR) { + else if (matchToken(PyTokenTypes.COMMA)) { + if (atToken(PyTokenTypes.RPAR)) { break; } } @@ -500,12 +508,10 @@ public class ExpressionParsing extends Parsing { } } - if (needBracket) { - if (genexpr != null) { - genexpr.drop(); - } - checkMatches(PyTokenTypes.RPAR, message("PARSE.expected.rpar")); + if (genexpr != null) { + genexpr.drop(); } + checkMatches(PyTokenTypes.RPAR, message("PARSE.expected.rpar")); arglist.done(PyElementTypes.ARGUMENT_LIST); } @@ -642,7 +648,7 @@ public class ExpressionParsing extends Parsing { return true; } - private boolean parseORTestExpression(boolean stopOnIn, boolean isTargetExpression) { + protected boolean parseORTestExpression(boolean stopOnIn, boolean isTargetExpression) { PsiBuilder.Marker expr = myBuilder.mark(); if (!parseANDTestExpression(stopOnIn, isTargetExpression)) { expr.drop(); diff --git a/python/testData/psi/GeneratorList.py b/python/testData/psi/GeneratorList.py new file mode 100644 index 000000000000..a908e0983f6b --- /dev/null +++ b/python/testData/psi/GeneratorList.py @@ -0,0 +1 @@ +list(int(i) for i in '1', '2') diff --git a/python/testData/psi/GeneratorList.txt b/python/testData/psi/GeneratorList.txt new file mode 100644 index 000000000000..09ae09603402 --- /dev/null +++ b/python/testData/psi/GeneratorList.txt @@ -0,0 +1,31 @@ +PyFile:GeneratorList.py + PyExpressionStatement + PyCallExpression: list + PyReferenceExpression: list + PsiElement(Py:IDENTIFIER)('list') + PyArgumentList + PsiElement(Py:LPAR)('(') + PyGeneratorExpression + PyCallExpression: int + PyReferenceExpression: int + PsiElement(Py:IDENTIFIER)('int') + PyArgumentList + PsiElement(Py:LPAR)('(') + PyReferenceExpression: i + PsiElement(Py:IDENTIFIER)('i') + PsiElement(Py:RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(Py:FOR_KEYWORD)('for') + PsiWhiteSpace(' ') + PyTargetExpression: i + PsiElement(Py:IDENTIFIER)('i') + PsiWhiteSpace(' ') + PsiElement(Py:IN_KEYWORD)('in') + PsiWhiteSpace(' ') + PyStringLiteralExpression: 1 + PsiElement(Py:SINGLE_QUOTED_STRING)(''1'') + PsiElement(Py:COMMA)(',') + PsiWhiteSpace(' ') + PyStringLiteralExpression: 2 + PsiElement(Py:SINGLE_QUOTED_STRING)(''2'') + PsiElement(Py:RPAR)(')') \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PythonParsingTest.java b/python/testSrc/com/jetbrains/python/PythonParsingTest.java index c2fa80fa7408..cf3edd5f3324 100644 --- a/python/testSrc/com/jetbrains/python/PythonParsingTest.java +++ b/python/testSrc/com/jetbrains/python/PythonParsingTest.java @@ -338,6 +338,11 @@ public class PythonParsingTest extends ParsingTestCase { doTest(); } + // PY-6926 + public void testGeneratorList() { + doTest(); + } + public void doTest() { doTest(LanguageLevel.PYTHON25); } From 844281a05be7d5077a8bc23ca16de83fb5831236 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 7 Aug 2012 12:47:41 +0200 Subject: [PATCH 03/21] cleanup --- .../python/parsing/ExpressionParsing.java | 24 ++++++------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/python/src/com/jetbrains/python/parsing/ExpressionParsing.java b/python/src/com/jetbrains/python/parsing/ExpressionParsing.java index 9d68a7616b64..47971220e18e 100644 --- a/python/src/com/jetbrains/python/parsing/ExpressionParsing.java +++ b/python/src/com/jetbrains/python/parsing/ExpressionParsing.java @@ -110,7 +110,7 @@ public class ExpressionParsing extends Parsing { builder.error(message("PARSE.expected.expression")); } if (builder.getTokenType() == PyTokenTypes.FOR_KEYWORD) { - parseComprehension(expr, PyTokenTypes.RBRACKET, PyElementTypes.LIST_COMP_EXPRESSION, false); + parseComprehension(expr, PyTokenTypes.RBRACKET, PyElementTypes.LIST_COMP_EXPRESSION); } else { while (builder.getTokenType() != PyTokenTypes.RBRACKET) { @@ -132,8 +132,7 @@ public class ExpressionParsing extends Parsing { private void parseComprehension(PsiBuilder.Marker expr, @Nullable final IElementType endToken, - final IElementType exprType, - final boolean leaveEndTokenOutside) { + final IElementType exprType) { assertCurrentToken(PyTokenTypes.FOR_KEYWORD); while (true) { myBuilder.advanceLexer(); @@ -148,16 +147,7 @@ public class ExpressionParsing extends Parsing { if (atToken(PyTokenTypes.FOR_KEYWORD)) { continue; } - if (endToken == null) { - break; - } - if (atToken(endToken)) { - if (leaveEndTokenOutside) { - expr.done(exprType); - nextToken(); - return; - } - nextToken(); + if (endToken == null || matchToken(endToken)) { break; } myBuilder.error(message("PARSE.expected.for.or.bracket")); @@ -207,7 +197,7 @@ public class ExpressionParsing extends Parsing { } else if (atToken(PyTokenTypes.FOR_KEYWORD)) { firstExprMarker.drop(); - parseComprehension(expr, PyTokenTypes.RBRACE, PyElementTypes.SET_COMP_EXPRESSION, false); + parseComprehension(expr, PyTokenTypes.RBRACE, PyElementTypes.SET_COMP_EXPRESSION); } else { myBuilder.error("expression expected"); @@ -228,7 +218,7 @@ public class ExpressionParsing extends Parsing { } firstKeyValueMarker.done(PyElementTypes.KEY_VALUE_EXPRESSION); if (myBuilder.getTokenType() == PyTokenTypes.FOR_KEYWORD) { - parseComprehension(startMarker, PyTokenTypes.RBRACE, PyElementTypes.DICT_COMP_EXPRESSION, false); + parseComprehension(startMarker, PyTokenTypes.RBRACE, PyElementTypes.DICT_COMP_EXPRESSION); } else { while (myBuilder.getTokenType() != PyTokenTypes.RBRACE) { @@ -280,7 +270,7 @@ public class ExpressionParsing extends Parsing { else { parseYieldOrTupleExpression(isTargetExpression); if (myBuilder.getTokenType() == PyTokenTypes.FOR_KEYWORD) { - parseComprehension(expr, PyTokenTypes.RPAR, PyElementTypes.GENERATOR_EXPRESSION, false); + parseComprehension(expr, PyTokenTypes.RPAR, PyElementTypes.GENERATOR_EXPRESSION); } else { checkMatches(PyTokenTypes.RPAR, message("PARSE.expected.rpar")); @@ -465,7 +455,7 @@ public class ExpressionParsing extends Parsing { argNumber++; if (argNumber > 1) { if (argNumber == 2 && atToken(PyTokenTypes.FOR_KEYWORD) && genexpr != null) { - parseComprehension(genexpr, null, PyElementTypes.GENERATOR_EXPRESSION, true); + parseComprehension(genexpr, null, PyElementTypes.GENERATOR_EXPRESSION); genexpr = null; continue; } From ac79b9b1439c683fdb4d214334e699204ae674e3 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 7 Aug 2012 12:58:27 +0200 Subject: [PATCH 04/21] highlight "Generator expression must be parenthesized if not sole argument" (PY-6926) --- python/src/META-INF/python-plugin-common.xml | 1 + .../GeneratorInArgumentListAnnotator.java | 21 +++++++++++++++++++ .../highlighting/parenthesizedGenerator.py | 3 +++ .../python/PythonHighlightingTest.java | 4 ++++ 4 files changed, 29 insertions(+) create mode 100644 python/src/com/jetbrains/python/validation/GeneratorInArgumentListAnnotator.java create mode 100644 python/testData/highlighting/parenthesizedGenerator.py diff --git a/python/src/META-INF/python-plugin-common.xml b/python/src/META-INF/python-plugin-common.xml index e4e39577202e..5d883ba630b4 100644 --- a/python/src/META-INF/python-plugin-common.xml +++ b/python/src/META-INF/python-plugin-common.xml @@ -761,6 +761,7 @@ + diff --git a/python/src/com/jetbrains/python/validation/GeneratorInArgumentListAnnotator.java b/python/src/com/jetbrains/python/validation/GeneratorInArgumentListAnnotator.java new file mode 100644 index 000000000000..e642916f7db4 --- /dev/null +++ b/python/src/com/jetbrains/python/validation/GeneratorInArgumentListAnnotator.java @@ -0,0 +1,21 @@ +package com.jetbrains.python.validation; + +import com.jetbrains.python.psi.PyArgumentList; +import com.jetbrains.python.psi.PyExpression; +import com.jetbrains.python.psi.PyGeneratorExpression; + +/** + * @author yole + */ +public class GeneratorInArgumentListAnnotator extends PyAnnotator { + @Override + public void visitPyArgumentList(PyArgumentList node) { + if (node.getArguments().length > 1) { + for (PyExpression expression : node.getArguments()) { + if (expression instanceof PyGeneratorExpression) { + markError(expression, "Generator expression must be parenthesized if not sole argument"); + } + } + } + } +} diff --git a/python/testData/highlighting/parenthesizedGenerator.py b/python/testData/highlighting/parenthesizedGenerator.py new file mode 100644 index 000000000000..a6f95e866d96 --- /dev/null +++ b/python/testData/highlighting/parenthesizedGenerator.py @@ -0,0 +1,3 @@ +list(int(i) for i in '1', '2') +list(int(i) for i in ['1', '2']) +list((int(i) for i in '1'), '2') diff --git a/python/testSrc/com/jetbrains/python/PythonHighlightingTest.java b/python/testSrc/com/jetbrains/python/PythonHighlightingTest.java index 7d7ea69b38e6..5372367b7242 100644 --- a/python/testSrc/com/jetbrains/python/PythonHighlightingTest.java +++ b/python/testSrc/com/jetbrains/python/PythonHighlightingTest.java @@ -157,6 +157,10 @@ public class PythonHighlightingTest extends PyTestCase { doTest(LanguageLevel.PYTHON32, true, false); } + public void testParenthesizedGenerator() { + doTest(false, false); + } + public void testYieldInNestedFunction() { // highlight func declaration first, lest we get an "Extra fragment highlighted" error. EditorColorsManager manager = EditorColorsManager.getInstance(); From 9e3c799e6594e15878e6d984526ecd8ea30acd25 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 7 Aug 2012 13:36:32 +0200 Subject: [PATCH 05/21] move implementation details to inner class --- .../validation/UnsupportedFeaturesUtil.java | 36 ++++++++++++++ .../python/validation/VersionsParser.java | 47 ------------------- 2 files changed, 36 insertions(+), 47 deletions(-) delete mode 100644 python/src/com/jetbrains/python/validation/VersionsParser.java diff --git a/python/src/com/jetbrains/python/validation/UnsupportedFeaturesUtil.java b/python/src/com/jetbrains/python/validation/UnsupportedFeaturesUtil.java index b18f3f44cc1a..5b1e2b1182a5 100644 --- a/python/src/com/jetbrains/python/validation/UnsupportedFeaturesUtil.java +++ b/python/src/com/jetbrains/python/validation/UnsupportedFeaturesUtil.java @@ -7,11 +7,14 @@ import com.intellij.psi.util.PsiTreeUtil; import com.jetbrains.python.PyTokenTypes; import com.jetbrains.python.PythonHelpersLocator; import com.jetbrains.python.psi.*; +import org.xml.sax.Attributes; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; +import org.xml.sax.helpers.DefaultHandler; import org.xml.sax.helpers.XMLReaderFactory; +import java.io.CharArrayWriter; import java.io.FileReader; import java.io.IOException; import java.util.*; @@ -124,5 +127,38 @@ public class UnsupportedFeaturesUtil { } return false; } + + private static class VersionsParser extends DefaultHandler { + private CharArrayWriter myContent = new CharArrayWriter(); + private LanguageLevel myCurrentLevel; + + public void startElement(String namespaceURI, + String localName, + String qName, + Attributes attr) throws SAXException { + myContent.reset(); + if (localName.equals("python")) { + BUILTINS.put(LanguageLevel.fromPythonVersion(attr.getValue("version")), new HashSet()); + MODULES.put(LanguageLevel.fromPythonVersion(attr.getValue("version")), new HashSet()); + myCurrentLevel = LanguageLevel.fromPythonVersion(attr.getValue("version")); + } + } + + public void endElement(String namespaceURI, + String localName, + String qName) throws SAXException { + if (localName.equals("func")) { + BUILTINS.get(myCurrentLevel).add(myContent.toString()); + } + if (localName.equals("module")) { + MODULES.get(myCurrentLevel).add(myContent.toString()); + } + } + + public void characters(char[] ch, int start, int length) + throws SAXException { + myContent.write(ch, start, length); + } + } } diff --git a/python/src/com/jetbrains/python/validation/VersionsParser.java b/python/src/com/jetbrains/python/validation/VersionsParser.java deleted file mode 100644 index 492567c34472..000000000000 --- a/python/src/com/jetbrains/python/validation/VersionsParser.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.jetbrains.python.validation; - -import com.jetbrains.python.psi.LanguageLevel; -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; -import org.xml.sax.helpers.DefaultHandler; - -import java.io.CharArrayWriter; -import java.util.HashSet; - -/** - * User: catherine - */ -public class VersionsParser extends DefaultHandler { - - private CharArrayWriter myContent = new CharArrayWriter(); - private LanguageLevel myCurrentLevel; - - public void startElement(String namespaceURI, - String localName, - String qName, - Attributes attr) throws SAXException { - myContent.reset(); - if (localName.equals("python")) { - UnsupportedFeaturesUtil.BUILTINS.put(LanguageLevel.fromPythonVersion(attr.getValue("version")), new HashSet()); - UnsupportedFeaturesUtil.MODULES.put(LanguageLevel.fromPythonVersion(attr.getValue("version")), new HashSet()); - myCurrentLevel = LanguageLevel.fromPythonVersion(attr.getValue("version")); - } - } - - public void endElement(String namespaceURI, - String localName, - String qName) throws SAXException { - if (localName.equals("func")) { - UnsupportedFeaturesUtil.BUILTINS.get(myCurrentLevel).add(myContent.toString()); - } - if (localName.equals("module")) { - UnsupportedFeaturesUtil.MODULES.get(myCurrentLevel).add(myContent.toString()); - } - } - - public void characters(char[] ch, int start, int length) - throws SAXException { - myContent.write(ch, start, length); - } -} - From ef8b7735cd842e0099d3d42fb53c0bdf01936ae6 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 7 Aug 2012 13:42:27 +0200 Subject: [PATCH 06/21] show variables in second completion (PY-7066) --- .../PyClassNameCompletionContributor.java | 18 ++++++++++-------- .../className/variable/variable.after.py | 3 +++ .../completion/className/variable/variable.py | 1 + .../python/PyClassNameCompletionTest.java | 4 ++++ 4 files changed, 18 insertions(+), 8 deletions(-) create mode 100644 python/testData/completion/className/variable/variable.after.py create mode 100644 python/testData/completion/className/variable/variable.py diff --git a/python/src/com/jetbrains/python/codeInsight/completion/PyClassNameCompletionContributor.java b/python/src/com/jetbrains/python/codeInsight/completion/PyClassNameCompletionContributor.java index 1ed586de4420..aa7dfaedca4b 100644 --- a/python/src/com/jetbrains/python/codeInsight/completion/PyClassNameCompletionContributor.java +++ b/python/src/com/jetbrains/python/codeInsight/completion/PyClassNameCompletionContributor.java @@ -24,6 +24,7 @@ import com.jetbrains.python.psi.impl.PyPsiUtils; import com.jetbrains.python.psi.search.PyProjectScopeBuilder; import com.jetbrains.python.psi.stubs.PyClassNameIndex; import com.jetbrains.python.psi.stubs.PyFunctionNameIndex; +import com.jetbrains.python.psi.stubs.PyVariableNameIndex; import com.jetbrains.python.psi.types.PyModuleType; import java.util.Collection; @@ -44,10 +45,11 @@ public class PyClassNameCompletionContributor extends CompletionContributor { if (PsiTreeUtil.getParentOfType(element, PyImportStatementBase.class) != null) { return; } - addVariantsFromIndex(result, parameters.getOriginalFile(), PyClassNameIndex.KEY, IMPORTING_INSERT_HANDLER, - Conditions.alwaysTrue()); - addVariantsFromIndex(result, parameters.getOriginalFile(), PyFunctionNameIndex.KEY, FUNCTION_INSERT_HANDLER, TOPLEVEL_FUNCTION); - addVariantsFromModules(result, parameters.getOriginalFile()); + final PsiFile originalFile = parameters.getOriginalFile(); + addVariantsFromIndex(result, originalFile, PyClassNameIndex.KEY, IMPORTING_INSERT_HANDLER, Conditions.alwaysTrue()); + addVariantsFromIndex(result, originalFile, PyFunctionNameIndex.KEY, FUNCTION_INSERT_HANDLER, IS_TOPLEVEL); + addVariantsFromIndex(result, originalFile, PyVariableNameIndex.KEY, IMPORTING_INSERT_HANDLER, IS_TOPLEVEL); + addVariantsFromModules(result, originalFile); } } @@ -66,10 +68,10 @@ public class PyClassNameCompletionContributor extends CompletionContributor { } } - private static Condition TOPLEVEL_FUNCTION = new Condition() { + private static Condition IS_TOPLEVEL = new Condition() { @Override - public boolean value(PyFunction pyFunction) { - return PyPsiUtils.isTopLevel(pyFunction); + public boolean value(PsiElement element) { + return PyPsiUtils.isTopLevel(element); } }; @@ -77,7 +79,7 @@ public class PyClassNameCompletionContributor extends CompletionContributor { final PsiFile targetFile, final StubIndexKey key, final InsertHandler insertHandler, - final Condition condition) { + final Condition condition) { final Project project = targetFile.getProject(); GlobalSearchScope scope = PyProjectScopeBuilder.excludeSdkTestsScope(targetFile); diff --git a/python/testData/completion/className/variable/variable.after.py b/python/testData/completion/className/variable/variable.after.py new file mode 100644 index 000000000000..702427db1c07 --- /dev/null +++ b/python/testData/completion/className/variable/variable.after.py @@ -0,0 +1,3 @@ +from datetime import MAXYEAR + +MAXYEAR \ No newline at end of file diff --git a/python/testData/completion/className/variable/variable.py b/python/testData/completion/className/variable/variable.py new file mode 100644 index 000000000000..6d897ffa11d8 --- /dev/null +++ b/python/testData/completion/className/variable/variable.py @@ -0,0 +1 @@ +MAXY \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PyClassNameCompletionTest.java b/python/testSrc/com/jetbrains/python/PyClassNameCompletionTest.java index 853fd36f5c29..5184b36cd024 100644 --- a/python/testSrc/com/jetbrains/python/PyClassNameCompletionTest.java +++ b/python/testSrc/com/jetbrains/python/PyClassNameCompletionTest.java @@ -37,6 +37,10 @@ public class PyClassNameCompletionTest extends PyTestCase { doTest(); } + public void testVariable() { + doTest(); + } + private void doTest() { final String path = "/completion/className/" + getTestName(true); myFixture.copyDirectoryToProject(path, ""); From 154b10fde0a0defcdbbc666ffe80c3a2184cbbfa Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 7 Aug 2012 14:07:57 +0200 Subject: [PATCH 07/21] diagnostics --- .../src/com/jetbrains/python/psi/impl/PyBaseElementImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/src/com/jetbrains/python/psi/impl/PyBaseElementImpl.java b/python/src/com/jetbrains/python/psi/impl/PyBaseElementImpl.java index b1767d0b2e0c..4bea56bffe8f 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyBaseElementImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyBaseElementImpl.java @@ -99,7 +99,7 @@ public class PyBaseElementImpl extends StubBasedPsiElemen protected T childToPsiNotNull(TokenSet filterSet, int index) { final PyElement child = childToPsi(filterSet, index); if (child == null) { - throw new RuntimeException("child must not be null"); + throw new RuntimeException("child must not be null: expression text " + getText()); } //noinspection unchecked return (T)child; @@ -109,7 +109,7 @@ public class PyBaseElementImpl extends StubBasedPsiElemen protected T childToPsiNotNull(IElementType elType) { final PyElement child = childToPsi(elType); if (child == null) { - throw new RuntimeException("child must not be null"); + throw new RuntimeException("child must not be null; expression text " + getText()); } //noinspection unchecked return (T)child; From af2fc97a8e8f5226b2c72cc1023e67f3371cd545 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 7 Aug 2012 14:39:20 +0200 Subject: [PATCH 08/21] handle backslashes in introduce variable initializer correctly (PY-6908); formatter removes spaces around dot --- .../PythonFormattingModelBuilder.java | 1 + .../introduce/IntroduceHandler.java | 2 +- python/testData/formatter/spaceAroundDot.py | 1 + .../testData/formatter/spaceAroundDot_after.py | 1 + .../introduceVariable/backslash.after.py | 3 +++ .../refactoring/introduceVariable/backslash.py | 3 +++ .../com/jetbrains/python/PyFormatterTest.java | 18 +++++++++++------- .../refactoring/PyIntroduceVariableTest.java | 4 ++++ 8 files changed, 25 insertions(+), 8 deletions(-) create mode 100644 python/testData/formatter/spaceAroundDot.py create mode 100644 python/testData/formatter/spaceAroundDot_after.py create mode 100644 python/testData/refactoring/introduceVariable/backslash.after.py create mode 100644 python/testData/refactoring/introduceVariable/backslash.py diff --git a/python/src/com/jetbrains/python/formatter/PythonFormattingModelBuilder.java b/python/src/com/jetbrains/python/formatter/PythonFormattingModelBuilder.java index cca6044b7358..f69f627f9c54 100644 --- a/python/src/com/jetbrains/python/formatter/PythonFormattingModelBuilder.java +++ b/python/src/com/jetbrains/python/formatter/PythonFormattingModelBuilder.java @@ -69,6 +69,7 @@ public class PythonFormattingModelBuilder implements FormattingModelBuilder, Cus .before(COLON).spaceIf(pySettings.SPACE_BEFORE_PY_COLON) .after(COMMA).spaceIf(commonSettings.SPACE_AFTER_COMMA) .before(COMMA).spaceIf(commonSettings.SPACE_BEFORE_COMMA) + .around(DOT).spaces(0) .before(SEMICOLON).spaceIf(commonSettings.SPACE_BEFORE_SEMICOLON) .withinPairInside(LPAR, RPAR, ARGUMENT_LIST).spaceIf(commonSettings.SPACE_WITHIN_METHOD_CALL_PARENTHESES) .before(LBRACKET).spaceIf(pySettings.SPACE_BEFORE_LBRACKET) diff --git a/python/src/com/jetbrains/python/refactoring/introduce/IntroduceHandler.java b/python/src/com/jetbrains/python/refactoring/introduce/IntroduceHandler.java index dbf51bb1a95e..72f9416fd1d2 100644 --- a/python/src/com/jetbrains/python/refactoring/introduce/IntroduceHandler.java +++ b/python/src/com/jetbrains/python/refactoring/introduce/IntroduceHandler.java @@ -435,7 +435,7 @@ abstract public class IntroduceHandler implements RefactoringActionHandler { @Override public void visitWhiteSpace(PsiWhiteSpace space) { - myResult.append(space.getText().replace('\n', ' ')); + myResult.append(space.getText().replace('\n', ' ').replace("\\", "")); } @Override diff --git a/python/testData/formatter/spaceAroundDot.py b/python/testData/formatter/spaceAroundDot.py new file mode 100644 index 000000000000..220956833d76 --- /dev/null +++ b/python/testData/formatter/spaceAroundDot.py @@ -0,0 +1 @@ +foo . bar \ No newline at end of file diff --git a/python/testData/formatter/spaceAroundDot_after.py b/python/testData/formatter/spaceAroundDot_after.py new file mode 100644 index 000000000000..4d5f9756e551 --- /dev/null +++ b/python/testData/formatter/spaceAroundDot_after.py @@ -0,0 +1 @@ +foo.bar \ No newline at end of file diff --git a/python/testData/refactoring/introduceVariable/backslash.after.py b/python/testData/refactoring/introduceVariable/backslash.after.py new file mode 100644 index 000000000000..324232e5f27a --- /dev/null +++ b/python/testData/refactoring/introduceVariable/backslash.after.py @@ -0,0 +1,3 @@ +def f(x): + a = x.foo.bar + return a.baz() \ No newline at end of file diff --git a/python/testData/refactoring/introduceVariable/backslash.py b/python/testData/refactoring/introduceVariable/backslash.py new file mode 100644 index 000000000000..611cd134f551 --- /dev/null +++ b/python/testData/refactoring/introduceVariable/backslash.py @@ -0,0 +1,3 @@ +def f(x): + return x.foo\ + .bar.baz() \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PyFormatterTest.java b/python/testSrc/com/jetbrains/python/PyFormatterTest.java index d450579fb31f..d579e7cc7693 100644 --- a/python/testSrc/com/jetbrains/python/PyFormatterTest.java +++ b/python/testSrc/com/jetbrains/python/PyFormatterTest.java @@ -50,13 +50,13 @@ public class PyFormatterTest extends PyTestCase { public void testBlankLineBeforeFunction() { doTest(); } - + public void testStarArgument() { // PY-1395 doTest(); } public void testDictLiteral() { // PY-1461 - doTest(); + doTest(); } public void testListAssignment() { // PY-1522 @@ -121,12 +121,12 @@ public class PyFormatterTest extends PyTestCase { CodeStyleSettingsManager.getInstance().getSettings(myFixture.getProject()).SPACE_BEFORE_METHOD_PARENTHESES = true; doTest(); } - + public void testOptionalAlignForMethodParameters() { // PY-3995 CodeStyleSettingsManager.getInstance().getSettings(myFixture.getProject()).ALIGN_MULTILINE_PARAMETERS = false; doTest(); } - + public void testNoAlignForMethodArguments() { // PY-3995 doTest(); } @@ -135,7 +135,7 @@ public class PyFormatterTest extends PyTestCase { CodeStyleSettingsManager.getInstance().getSettings(myFixture.getProject()).ALIGN_MULTILINE_PARAMETERS_IN_CALLS = true; doTest(); } - + public void testLambdaColon() { doTest(); } @@ -148,6 +148,10 @@ public class PyFormatterTest extends PyTestCase { doTest(); } + public void testSpaceAroundDot() { // PY-6908 + doTest(); + } + public void testPsiFormatting() { // IDEA-69724 String initial = "def method_name(\n" + @@ -158,7 +162,7 @@ public class PyFormatterTest extends PyTestCase { " # Extract from here to ...\n" + " desired_impulse_response = {'dirac, 'gaussian', logistic_derivative'}\n" + "return desired, o"; - + final PsiFile file = PyElementGenerator.getInstance(myFixture.getProject()).createDummyFile(LanguageLevel.PYTHON30, initial); final PsiElement reformatted = CodeStyleManager.getInstance(myFixture.getProject()).reformat(file); @@ -176,7 +180,7 @@ public class PyFormatterTest extends PyTestCase { assertEquals(expected, reformatted.getText()); } - private void doTest() { + private void doTest() { myFixture.configureByFile("formatter/" + getTestName(true) + ".py"); ApplicationManager.getApplication().runWriteAction(new Runnable() { @Override diff --git a/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceVariableTest.java b/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceVariableTest.java index 83af8626b36a..f1cbd040ffa7 100644 --- a/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceVariableTest.java +++ b/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceVariableTest.java @@ -80,6 +80,10 @@ public class PyIntroduceVariableTest extends PyIntroduceTestCase { doTest(); } + public void testBackslash() { // PY-6908 + doTest(); + } + private void doTestCannotPerform() { boolean thrownExpectedException = false; try { From 3395553b3c67c75af046e7c66c43360d865d2276 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 7 Aug 2012 14:40:44 +0200 Subject: [PATCH 09/21] test fix --- .../validation/GeneratorInArgumentListAnnotator.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/python/src/com/jetbrains/python/validation/GeneratorInArgumentListAnnotator.java b/python/src/com/jetbrains/python/validation/GeneratorInArgumentListAnnotator.java index e642916f7db4..d342a9db0ee4 100644 --- a/python/src/com/jetbrains/python/validation/GeneratorInArgumentListAnnotator.java +++ b/python/src/com/jetbrains/python/validation/GeneratorInArgumentListAnnotator.java @@ -1,5 +1,7 @@ package com.jetbrains.python.validation; +import com.intellij.lang.ASTNode; +import com.jetbrains.python.PyTokenTypes; import com.jetbrains.python.psi.PyArgumentList; import com.jetbrains.python.psi.PyExpression; import com.jetbrains.python.psi.PyGeneratorExpression; @@ -13,7 +15,10 @@ public class GeneratorInArgumentListAnnotator extends PyAnnotator { if (node.getArguments().length > 1) { for (PyExpression expression : node.getArguments()) { if (expression instanceof PyGeneratorExpression) { - markError(expression, "Generator expression must be parenthesized if not sole argument"); + ASTNode firstChildNode = expression.getNode().getFirstChildNode(); + if (firstChildNode.getElementType() != PyTokenTypes.LPAR) { + markError(expression, "Generator expression must be parenthesized if not sole argument"); + } } } } From e04ae9a185051111904f3f717f08691d47ffb471 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 7 Aug 2012 14:55:35 +0200 Subject: [PATCH 10/21] check for multiple * parameters in parameter list (PY-6456) --- .../python/validation/ParameterListAnnotator.java | 6 ++++++ python/testData/highlighting/starArgs.py | 8 ++++++++ .../com/jetbrains/python/PythonHighlightingTest.java | 4 ++++ 3 files changed, 18 insertions(+) create mode 100644 python/testData/highlighting/starArgs.py diff --git a/python/src/com/jetbrains/python/validation/ParameterListAnnotator.java b/python/src/com/jetbrains/python/validation/ParameterListAnnotator.java index 1dde9d20cb1a..b985831dc6e5 100644 --- a/python/src/com/jetbrains/python/validation/ParameterListAnnotator.java +++ b/python/src/com/jetbrains/python/validation/ParameterListAnnotator.java @@ -34,6 +34,9 @@ public class ParameterListAnnotator extends PyAnnotator { if (hadKeywordContainer) { markError(parameter, PyBundle.message("ANN.starred.param.after.kwparam")); } + if (hadSingleStar) { + markError(parameter, "Multiple * arguments are not allowed"); + } hadPositionalContainer = true; } else if (parameter.isKeywordContainer()) { @@ -81,6 +84,9 @@ public class ParameterListAnnotator extends PyAnnotator { @Override public void visitSingleStarParameter(PySingleStarParameter param, boolean first, boolean last) { + if (hadPositionalContainer || hadSingleStar) { + markError(param, "Multiple * arguments are not allowed"); + } hadSingleStar = true; if (last) { markError(param, PyBundle.message("ANN.named.arguments.after.star")); diff --git a/python/testData/highlighting/starArgs.py b/python/testData/highlighting/starArgs.py new file mode 100644 index 000000000000..a0bbacb393c6 --- /dev/null +++ b/python/testData/highlighting/starArgs.py @@ -0,0 +1,8 @@ +def f1(*args, *, a): + pass + +def f2(*, *, d): + pass + +def f3(*, *args): + pass diff --git a/python/testSrc/com/jetbrains/python/PythonHighlightingTest.java b/python/testSrc/com/jetbrains/python/PythonHighlightingTest.java index 5372367b7242..de14792f8a33 100644 --- a/python/testSrc/com/jetbrains/python/PythonHighlightingTest.java +++ b/python/testSrc/com/jetbrains/python/PythonHighlightingTest.java @@ -161,6 +161,10 @@ public class PythonHighlightingTest extends PyTestCase { doTest(false, false); } + public void testStarArgs() { // PY-6456 + doTest(LanguageLevel.PYTHON32, true, false); + } + public void testYieldInNestedFunction() { // highlight func declaration first, lest we get an "Extra fragment highlighted" error. EditorColorsManager manager = EditorColorsManager.getInstance(); From c1dcb3954e1c53613acc5a40773e21eebd83bc1d Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 7 Aug 2012 15:16:13 +0200 Subject: [PATCH 11/21] fix handling of star arguments in override method (PY-6455) --- .../override/PyOverrideImplementUtil.java | 34 +++++++++++-------- python/testData/override/singleStar.py | 6 ++++ python/testData/override/singleStar_after.py | 7 ++++ python/testData/override/starArgs.py | 6 ++++ python/testData/override/starArgs_after.py | 7 ++++ .../com/jetbrains/python/PyOverrideTest.java | 8 +++++ 6 files changed, 54 insertions(+), 14 deletions(-) create mode 100644 python/testData/override/singleStar.py create mode 100644 python/testData/override/singleStar_after.py create mode 100644 python/testData/override/starArgs.py create mode 100644 python/testData/override/starArgs_after.py diff --git a/python/src/com/jetbrains/python/codeInsight/override/PyOverrideImplementUtil.java b/python/src/com/jetbrains/python/codeInsight/override/PyOverrideImplementUtil.java index f2a12d3c2eac..7143c5b9d762 100644 --- a/python/src/com/jetbrains/python/codeInsight/override/PyOverrideImplementUtil.java +++ b/python/src/com/jetbrains/python/codeInsight/override/PyOverrideImplementUtil.java @@ -18,9 +18,6 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiWhiteSpace; import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.util.ArrayUtil; -import com.intellij.util.Function; -import com.intellij.util.containers.ContainerUtil; import com.jetbrains.python.PyNames; import com.jetbrains.python.psi.*; import com.jetbrains.python.psi.impl.PyFunctionBuilder; @@ -163,17 +160,24 @@ public class PyOverrideImplementUtil { assert baseClass != null; StringBuilder statementBody = new StringBuilder(); - String[] paramTexts = ContainerUtil.map(baseParams, new Function() { - @Override - public String fun(PyParameter pyParameter) { - final PyNamedParameter pyNamedParameter = pyParameter.getAsNamed(); - if (pyNamedParameter != null) { - return pyNamedParameter.getRepr(false); + boolean hadStar = false; + List parameters = new ArrayList(); + for (PyParameter parameter: baseParams) { + final PyNamedParameter pyNamedParameter = parameter.getAsNamed(); + if (pyNamedParameter != null) { + String repr = pyNamedParameter.getRepr(false); + parameters.add(hadStar ? pyNamedParameter.getName() + "=" + repr : repr); + if (pyNamedParameter.isPositionalContainer()) { + hadStar = true; } - return pyParameter.getText(); } - }, ArrayUtil.EMPTY_STRING_ARRAY); - int startIndex = 0; + else if (parameter instanceof PySingleStarParameter) { + hadStar = true; + } + else { + parameters.add(parameter.getText()); + } + } if (PyNames.FAKE_OLD_BASE.equals(baseFunction.getContainingClass().getName())) { statementBody.append(PyNames.PASS); @@ -190,12 +194,14 @@ public class PyOverrideImplementUtil { statementBody.append(pyClass.getName()).append(", ").append(PyUtil.getFirstParameterName(baseFunction)); } statementBody.append(").").append(baseFunction.getName()).append("("); - startIndex = 1; + if (parameters.size() > 0) { + parameters.remove(0); + } } else { statementBody.append(getReferenceText(pyClass, baseClass)).append(".").append(baseFunction.getName()).append("("); } - statementBody.append(StringUtil.join(paramTexts, startIndex, paramTexts.length, ", ")); + statementBody.append(StringUtil.join(parameters, ", ")); statementBody.append(")"); } diff --git a/python/testData/override/singleStar.py b/python/testData/override/singleStar.py new file mode 100644 index 000000000000..b4bbc7da9fef --- /dev/null +++ b/python/testData/override/singleStar.py @@ -0,0 +1,6 @@ +class A: + def f1(self, *, a = 1): + pass + +class B(A): + pass diff --git a/python/testData/override/singleStar_after.py b/python/testData/override/singleStar_after.py new file mode 100644 index 000000000000..f45f38e6066a --- /dev/null +++ b/python/testData/override/singleStar_after.py @@ -0,0 +1,7 @@ +class A: + def f1(self, *, a = 1): + pass + +class B(A): + def f1(self, *, a=1): + super().f1(a=a) diff --git a/python/testData/override/starArgs.py b/python/testData/override/starArgs.py new file mode 100644 index 000000000000..b3cf3608be61 --- /dev/null +++ b/python/testData/override/starArgs.py @@ -0,0 +1,6 @@ +class A: + def f2(self, *args, a = 1): + pass + +class B(A): + pass diff --git a/python/testData/override/starArgs_after.py b/python/testData/override/starArgs_after.py new file mode 100644 index 000000000000..ddb36c4c3005 --- /dev/null +++ b/python/testData/override/starArgs_after.py @@ -0,0 +1,7 @@ +class A: + def f2(self, *args, a = 1): + pass + +class B(A): + def f2(self, *args, a=1): + super().f2(*args, a=a) diff --git a/python/testSrc/com/jetbrains/python/PyOverrideTest.java b/python/testSrc/com/jetbrains/python/PyOverrideTest.java index e0fea8e21358..68f643fb9b10 100644 --- a/python/testSrc/com/jetbrains/python/PyOverrideTest.java +++ b/python/testSrc/com/jetbrains/python/PyOverrideTest.java @@ -85,4 +85,12 @@ public class PyOverrideTest extends PyTestCase { public void testReturnAnnotation() { // PY-2690 doTest3k(); } + + public void testSingleStar() { // PY-6455 + doTest3k(); + } + + public void testStarArgs() { // PY-6455 + doTest3k(); + } } From d7eacea0b47cc8fcdf63907d03d6404e24903d13 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 7 Aug 2012 15:24:22 +0200 Subject: [PATCH 12/21] __qualname__ is a well-known built-in attribute (PY-6745) --- python/src/com/jetbrains/python/PyNames.java | 1 + 1 file changed, 1 insertion(+) diff --git a/python/src/com/jetbrains/python/PyNames.java b/python/src/com/jetbrains/python/PyNames.java index 42b0295216af..2192d910f269 100644 --- a/python/src/com/jetbrains/python/PyNames.java +++ b/python/src/com/jetbrains/python/PyNames.java @@ -129,6 +129,7 @@ public class PyNames { "__mro__", "__name__", "__path__", + "__qualname__", "__self__", "__slots__", "__version__" From 5ce3afc367e1da8247b790510f39d29b6ece041f Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Tue, 7 Aug 2012 17:27:44 +0400 Subject: [PATCH 13/21] Fail jar task on duplicates by default --- python/build/pycharm_build.gant | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/build/pycharm_build.gant b/python/build/pycharm_build.gant index 0595df2dcad0..b2f380afb366 100644 --- a/python/build/pycharm_build.gant +++ b/python/build/pycharm_build.gant @@ -287,7 +287,7 @@ private layoutFull(Map args, String target, Set usedJars) { module("forms_rt") } - jar([name: "resources_en.jar", duplicate: "preserve"]) { + jar("resources_en.jar") { // custom resources go first fileset(dir: "$home/python/resources") { include(name: "**/tips/**") From c66feb721a83effaa47160402a69d7449e4c641a Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 7 Aug 2012 15:29:43 +0200 Subject: [PATCH 14/21] turn off auto-import popup by default --- .../com/jetbrains/python/codeInsight/PyCodeInsightSettings.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/src/com/jetbrains/python/codeInsight/PyCodeInsightSettings.java b/python/src/com/jetbrains/python/codeInsight/PyCodeInsightSettings.java index ef801966b6fe..db352b253d65 100644 --- a/python/src/com/jetbrains/python/codeInsight/PyCodeInsightSettings.java +++ b/python/src/com/jetbrains/python/codeInsight/PyCodeInsightSettings.java @@ -19,7 +19,7 @@ public class PyCodeInsightSettings implements PersistentStateComponent Date: Tue, 7 Aug 2012 15:42:20 +0200 Subject: [PATCH 15/21] don't suggest keywords as names in introduce refactoring (PY-6605) --- .../refactoring/introduce/IntroduceHandler.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/python/src/com/jetbrains/python/refactoring/introduce/IntroduceHandler.java b/python/src/com/jetbrains/python/refactoring/introduce/IntroduceHandler.java index 72f9416fd1d2..6bd8bcc2cd50 100644 --- a/python/src/com/jetbrains/python/refactoring/introduce/IntroduceHandler.java +++ b/python/src/com/jetbrains/python/refactoring/introduce/IntroduceHandler.java @@ -26,6 +26,7 @@ import com.intellij.refactoring.introduce.inplace.OccurrencesChooser; import com.intellij.refactoring.util.CommonRefactoringUtil; import com.intellij.util.Function; import com.jetbrains.python.PyBundle; +import com.jetbrains.python.PyNames; import com.jetbrains.python.psi.*; import com.jetbrains.python.psi.impl.PyPsiUtils; import com.jetbrains.python.psi.resolve.PyResolveContext; @@ -156,7 +157,15 @@ abstract public class IntroduceHandler implements RefactoringActionHandler { } protected Collection generateSuggestedNames(PyExpression expression) { - Collection candidates = new LinkedHashSet(); + Collection candidates = new LinkedHashSet() { + @Override + public boolean add(String s) { + if (PyNames.isReserved(s)) { + return false; + } + return super.add(s); + } + }; String text = expression.getText(); if (expression instanceof PyCallExpression) { final PyExpression callee = ((PyCallExpression)expression).getCallee(); From e735ebc7ef45ac1dd03d4d15103c16e4362b71da Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 7 Aug 2012 16:00:52 +0200 Subject: [PATCH 16/21] introduce variable handles multiline string literals (PY-6698) --- .../introduce/IntroduceHandler.java | 22 +++++++++++++++++++ .../multipartString.after.py | 3 +++ .../introduceVariable/multipartString.py | 2 ++ .../refactoring/PyIntroduceVariableTest.java | 4 ++++ 4 files changed, 31 insertions(+) create mode 100644 python/testData/refactoring/introduceVariable/multipartString.after.py create mode 100644 python/testData/refactoring/introduceVariable/multipartString.py diff --git a/python/src/com/jetbrains/python/refactoring/introduce/IntroduceHandler.java b/python/src/com/jetbrains/python/refactoring/introduce/IntroduceHandler.java index 6bd8bcc2cd50..d20dacd695d1 100644 --- a/python/src/com/jetbrains/python/refactoring/introduce/IntroduceHandler.java +++ b/python/src/com/jetbrains/python/refactoring/introduce/IntroduceHandler.java @@ -3,6 +3,7 @@ package com.jetbrains.python.refactoring.introduce; import com.intellij.codeInsight.CodeInsightUtilBase; import com.intellij.codeInsight.template.impl.TemplateManagerImpl; import com.intellij.codeInsight.template.impl.TemplateState; +import com.intellij.lang.ASTNode; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.Result; @@ -18,6 +19,7 @@ import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiWhiteSpace; +import com.intellij.psi.TokenType; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.refactoring.IntroduceTargetChooser; import com.intellij.refactoring.RefactoringActionHandler; @@ -447,6 +449,26 @@ abstract public class IntroduceHandler implements RefactoringActionHandler { myResult.append(space.getText().replace('\n', ' ').replace("\\", "")); } + @Override + public void visitPyStringLiteralExpression(PyStringLiteralExpression node) { + ASTNode child = node.getNode().getFirstChildNode(); + while (child != null) { + String text = child.getText(); + if (child.getElementType() == TokenType.WHITE_SPACE) { + if (text.contains("\n")) { + if (!text.contains("\\")) { + myResult.append("\\"); + } + myResult.append(text); + } + } + else { + myResult.append(text); + } + child = child.getTreeNext(); + } + } + @Override public void visitElement(PsiElement element) { if (element.getChildren().length == 0) { diff --git a/python/testData/refactoring/introduceVariable/multipartString.after.py b/python/testData/refactoring/introduceVariable/multipartString.after.py new file mode 100644 index 000000000000..61e219ffd869 --- /dev/null +++ b/python/testData/refactoring/introduceVariable/multipartString.after.py @@ -0,0 +1,3 @@ +a = "foo"\ + "bar" +x(a) diff --git a/python/testData/refactoring/introduceVariable/multipartString.py b/python/testData/refactoring/introduceVariable/multipartString.py new file mode 100644 index 000000000000..1547d77f250d --- /dev/null +++ b/python/testData/refactoring/introduceVariable/multipartString.py @@ -0,0 +1,2 @@ +x("foo" + "bar") diff --git a/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceVariableTest.java b/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceVariableTest.java index f1cbd040ffa7..1ce1af50e248 100644 --- a/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceVariableTest.java +++ b/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceVariableTest.java @@ -84,6 +84,10 @@ public class PyIntroduceVariableTest extends PyIntroduceTestCase { doTest(); } + public void testMultipartString() { // PY-6698 + doTest(); + } + private void doTestCannotPerform() { boolean thrownExpectedException = false; try { From bb59f0adb33546d701a7666b47dcd9093bec02fe Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 7 Aug 2012 16:24:03 +0200 Subject: [PATCH 17/21] return weak type of class as return type of constructor call if the actual return type of __new__ is unknown (PY-6671) --- .../python/psi/impl/PyCallExpressionImpl.java | 6 ++++++ .../testData/completion/unknownNewReturnType.after.py | 11 +++++++++++ python/testData/completion/unknownNewReturnType.py | 11 +++++++++++ .../com/jetbrains/python/PythonCompletionTest.java | 4 ++++ 4 files changed, 32 insertions(+) create mode 100644 python/testData/completion/unknownNewReturnType.after.py create mode 100644 python/testData/completion/unknownNewReturnType.py diff --git a/python/src/com/jetbrains/python/psi/impl/PyCallExpressionImpl.java b/python/src/com/jetbrains/python/psi/impl/PyCallExpressionImpl.java index 9b709512be2a..0f22c649c5fe 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyCallExpressionImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyCallExpressionImpl.java @@ -162,6 +162,12 @@ public class PyCallExpressionImpl extends PyElementImpl implements PyCallExpress } } if (t != null && !(t instanceof PyNoneType)) { + if (t instanceof PyTypeReference) { + PyType resolved = ((PyTypeReference)t).resolve(callee, context); + if (resolved == null) { + return new PyWeakClassType(cls, false); + } + } return t; } } diff --git a/python/testData/completion/unknownNewReturnType.after.py b/python/testData/completion/unknownNewReturnType.after.py new file mode 100644 index 000000000000..30573b8db2c9 --- /dev/null +++ b/python/testData/completion/unknownNewReturnType.after.py @@ -0,0 +1,11 @@ +def foo(): return foo() + +class Template(object): + def __new__(cls): + return foo() + + def xyzzy(self): + pass + +t = Template() +t.xyzzy() diff --git a/python/testData/completion/unknownNewReturnType.py b/python/testData/completion/unknownNewReturnType.py new file mode 100644 index 000000000000..b7a0bf3c8539 --- /dev/null +++ b/python/testData/completion/unknownNewReturnType.py @@ -0,0 +1,11 @@ +def foo(): return foo() + +class Template(object): + def __new__(cls): + return foo() + + def xyzzy(self): + pass + +t = Template() +t.x diff --git a/python/testSrc/com/jetbrains/python/PythonCompletionTest.java b/python/testSrc/com/jetbrains/python/PythonCompletionTest.java index 9ae96c3b879c..c91ecf6fd1e3 100644 --- a/python/testSrc/com/jetbrains/python/PythonCompletionTest.java +++ b/python/testSrc/com/jetbrains/python/PythonCompletionTest.java @@ -584,4 +584,8 @@ public class PythonCompletionTest extends PyTestCase { public void testNoInitForSubmodules() { doMultiFileTest(); } + + public void testUnknownNewReturnType() { // PY-6671 + doTest(); + } } From 75fecdc523228e2aa1d7ce5804c0c86676ff168b Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 7 Aug 2012 17:40:30 +0200 Subject: [PATCH 18/21] python-openapi module extracted --- python/build/pycharm_build.gant | 2 +- python/openapi/python-openapi.iml | 13 ++ .../com/jetbrains/python/PythonFileType.java | 15 -- .../com/jetbrains/python/PythonLanguage.java | 21 ++ .../jetbrains/python/psi/AccessDirection.java | 0 .../python/psi/CallArgumentsMapping.java | 0 .../com/jetbrains/python/psi/Callable.java | 0 .../python/psi/ComprehensionComponent.java | 0 .../python/psi/ComprhForComponent.java | 0 .../python/psi/ComprhIfComponent.java | 0 .../jetbrains/python/psi/FutureFeature.java | 0 .../jetbrains/python/psi/LanguageLevel.java | 5 +- .../com/jetbrains/python/psi/NameDefiner.java | 1 - .../com/jetbrains/python/psi/Property.java | 0 .../jetbrains/python/psi/PyAnnotation.java | 0 .../jetbrains/python/psi/PyArgumentList.java | 0 .../python/psi/PyAssertStatement.java | 0 .../python/psi/PyAssignmentStatement.java | 0 .../python/psi/PyAugAssignmentStatement.java | 0 .../python/psi/PyBinaryExpression.java | 0 .../python/psi/PyBoolLiteralExpression.java | 0 .../python/psi/PyBreakStatement.java | 0 .../python/psi/PyCallExpression.java | 0 .../src/com/jetbrains/python/psi/PyClass.java | 0 .../com/jetbrains/python/psi/PyClassRef.java | 0 .../python/psi/PyComprehensionElement.java | 0 .../python/psi/PyConditionalExpression.java | 0 .../psi/PyConditionalStatementPart.java | 0 .../python/psi/PyContinueStatement.java | 0 .../jetbrains/python/psi/PyDecoratable.java | 0 .../com/jetbrains/python/psi/PyDecorator.java | 0 .../jetbrains/python/psi/PyDecoratorList.java | 0 .../jetbrains/python/psi/PyDelStatement.java | 0 .../python/psi/PyDictCompExpression.java | 0 .../python/psi/PyDictLiteralExpression.java | 0 .../python/psi/PyDocStringOwner.java | 0 .../com/jetbrains/python/psi/PyElement.java | 0 .../python/psi/PyElementGenerator.java | 0 .../jetbrains/python/psi/PyElementType.java | 0 .../python/psi/PyElementVisitor.java | 0 .../com/jetbrains/python/psi/PyElsePart.java | 0 .../python/psi/PyEmptyExpression.java | 0 .../jetbrains/python/psi/PyExceptPart.java | 0 .../jetbrains/python/psi/PyExecStatement.java | 0 .../jetbrains/python/psi/PyExpression.java | 0 .../python/psi/PyExpressionCodeFragment.java | 0 .../python/psi/PyExpressionStatement.java | 0 .../src/com/jetbrains/python/psi/PyFile.java | 0 .../jetbrains/python/psi/PyFinallyPart.java | 0 .../com/jetbrains/python/psi/PyForPart.java | 0 .../jetbrains/python/psi/PyForStatement.java | 0 .../python/psi/PyFromImportStatement.java | 0 .../com/jetbrains/python/psi/PyFunction.java | 0 .../python/psi/PyGeneratorExpression.java | 0 .../python/psi/PyGlobalStatement.java | 0 .../com/jetbrains/python/psi/PyIfPart.java | 0 .../jetbrains/python/psi/PyIfStatement.java | 0 .../jetbrains/python/psi/PyImportElement.java | 0 .../python/psi/PyImportStatement.java | 0 .../python/psi/PyImportStatementBase.java | 0 .../python/psi/PyKeyValueExpression.java | 0 .../python/psi/PyKeywordArgument.java | 0 .../python/psi/PyKnownDecoratorProvider.java | 0 .../python/psi/PyLambdaExpression.java | 0 .../python/psi/PyListCompExpression.java | 0 .../python/psi/PyListLiteralExpression.java | 0 .../python/psi/PyLiteralExpression.java | 0 .../jetbrains/python/psi/PyLoopStatement.java | 0 .../python/psi/PyNamedParameter.java | 0 .../python/psi/PyNoneLiteralExpression.java | 0 .../python/psi/PyNonlocalStatement.java | 0 .../psi/PyNumericLiteralExpression.java | 0 .../com/jetbrains/python/psi/PyParameter.java | 0 .../jetbrains/python/psi/PyParameterList.java | 0 .../python/psi/PyParenthesizedExpression.java | 0 .../jetbrains/python/psi/PyPassStatement.java | 0 .../python/psi/PyPrefixExpression.java | 0 .../python/psi/PyPrintStatement.java | 0 .../jetbrains/python/psi/PyPrintTarget.java | 0 .../python/psi/PyQualifiedExpression.java | 0 .../python/psi/PyRaiseStatement.java | 0 .../python/psi/PyRecursiveElementVisitor.java | 0 .../python/psi/PyReferenceExpression.java | 0 .../python/psi/PyReferenceOwner.java | 0 .../python/psi/PyReprExpression.java | 0 .../python/psi/PyReturnStatement.java | 0 .../python/psi/PySequenceExpression.java | 0 .../python/psi/PySetCompExpression.java | 0 .../python/psi/PySetLiteralExpression.java | 2 - .../python/psi/PySingleStarParameter.java | 0 .../python/psi/PySliceExpression.java | 0 .../com/jetbrains/python/psi/PySliceItem.java | 0 .../jetbrains/python/psi/PyStarArgument.java | 0 .../python/psi/PyStarExpression.java | 0 .../python/psi/PyStarImportElement.java | 0 .../com/jetbrains/python/psi/PyStatement.java | 0 .../jetbrains/python/psi/PyStatementList.java | 0 .../jetbrains/python/psi/PyStatementPart.java | 0 .../python/psi/PyStatementWithElse.java | 0 .../python/psi/PyStringLiteralExpression.java | 0 .../python/psi/PyStubElementType.java | 0 .../python/psi/PySubscriptionExpression.java | 0 .../python/psi/PyTargetExpression.java | 0 .../python/psi/PyTryExceptStatement.java | 0 .../com/jetbrains/python/psi/PyTryPart.java | 0 .../python/psi/PyTupleExpression.java | 0 .../python/psi/PyTupleParameter.java | 0 .../jetbrains/python/psi/PyTypedElement.java | 0 .../com/jetbrains/python/psi/PyWhilePart.java | 0 .../python/psi/PyWhileStatement.java | 0 .../com/jetbrains/python/psi/PyWithItem.java | 0 .../jetbrains/python/psi/PyWithStatement.java | 0 .../python/psi/PyYieldExpression.java | 0 python/python.iml | 1 + python/src/META-INF/python-plugin-common.xml | 1 + .../python/PyEditorHighlighterProvider.java | 23 +++ .../com/jetbrains/python/PythonLanguage.java | 54 ------ .../python/PythonParserDefinition.java | 7 +- .../jetbrains/python/PythonStringUtil.java | 1 - .../python/actions/AddFunctionQuickFix.java | 1 - .../actions/ComparisonWithNoneQuickFix.java | 1 - .../actions/ExecuteInConsoleAction.java | 1 - .../PyProblemFileHighlightFilter.java | 1 - .../codeInsight/controlflow/ScopeOwner.java | 12 -- .../dataflow/PyReachingDefsDfaInstance.java | 2 - .../intentions/PyFlipComparisonIntention.java | 1 - .../debugger/PySignatureCacheManagerImpl.java | 5 - .../PyClassGroupingRuleProvider.java | 1 - .../PythonFormattingModelBuilder.java | 5 +- .../PyComparisonWithNoneInspection.java | 1 - .../PyTrailingSemicolonInspection.java | 2 - .../PyUnreachableCodeInspection.java | 1 - .../python/psi/PyFileElementType.java | 5 +- .../psi/impl/PyAssertStatementImpl.java | 1 - .../impl/PyAugAssignmentStatementImpl.java | 1 - .../impl/PyConditionalStatementPartImpl.java | 1 - .../python/psi/impl/PyDelStatementImpl.java | 1 - .../impl/PyExpressionCodeFragmentImpl.java | 1 - .../psi/impl/PyExpressionStatementImpl.java | 1 - .../python/psi/impl/PyForPartImpl.java | 1 - .../python/psi/impl/PyIfStatementImpl.java | 4 - .../psi/impl/PyListCompExpressionImpl.java | 4 - .../psi/impl/PyListLiteralExpressionImpl.java | 2 - .../python/psi/impl/PyPrintStatementImpl.java | 2 - .../python/psi/impl/PyQualifiedName.java | 182 ------------------ .../psi/impl/PyReturnStatementImpl.java | 1 - .../python/psi/impl/PySliceItemImpl.java | 1 - .../psi/impl/PyTargetExpressionImpl.java | 1 - .../psi/impl/PyTryExceptStatementImpl.java | 3 - .../psi/impl/PyTupleExpressionImpl.java | 4 - .../python/psi/impl/PyWhileStatementImpl.java | 3 - .../python/psi/impl/PyWithItemImpl.java | 1 - .../psi/impl/PythonLanguageLevelPusher.java | 11 +- .../stubs/CustomTargetExpressionStub.java | 20 -- .../stubs/CustomTargetExpressionStubType.java | 26 --- .../stubs/PyDecoratorCallElementType.java | 3 - .../python/psi/impl/stubs/PyFileStubImpl.java | 3 +- .../impl/stubs/PyParameterListStubImpl.java | 1 - .../python/psi/resolve/PyResolveContext.java | 77 -------- .../psi/resolve/QualifiedResolveResult.java | 24 --- .../psi/resolve/RatedResolveResult.java | 79 -------- .../python/psi/stubs/PyAnnotationStub.java | 10 - .../stubs/PyClassNameIndexInsensitive.java | 1 - .../python/psi/stubs/PyClassStub.java | 16 -- .../python/psi/stubs/PyDecoratorListStub.java | 12 -- .../python/psi/stubs/PyDecoratorStub.java | 20 -- .../python/psi/stubs/PyExceptPartStub.java | 10 - .../python/psi/stubs/PyFileStub.java | 16 -- .../psi/stubs/PyFromImportStatementStub.java | 16 -- .../python/psi/stubs/PyFunctionStub.java | 9 - .../python/psi/stubs/PyImportElementStub.java | 16 -- .../psi/stubs/PyImportStatementStub.java | 10 - .../psi/stubs/PyNamedParameterStub.java | 13 -- .../python/psi/stubs/PyParameterListStub.java | 10 - .../psi/stubs/PySingleStarParameterStub.java | 10 - .../psi/stubs/PyTargetExpressionStub.java | 46 ----- .../psi/stubs/PyTupleParameterStub.java | 11 -- .../jetbrains/python/psi/types/PyType.java | 64 ------ .../python/psi/types/TypeEvalContext.java | 136 ------------- .../PyExtractSuperclassHandler.java | 1 - .../classes/pullUp/PyPullUpDialog.java | 1 - .../classes/pullUp/PyPullUpHandler.java | 1 - .../rename/RenamePyVariableProcessor.java | 1 - .../structureView/PyStructureViewFactory.java | 4 - .../com/jetbrains/python/toolbox/Maybe.java | 69 ------- .../python/validation/GlobalAnnotator.java | 1 - .../validation/PyAnnotatingVisitor.java | 21 +- .../validation/PyDefinitionsAnnotator.java | 1 - .../jetbrains/python/PyTypeParserTest.java | 1 - .../python/PythonConsoleParsingTest.java | 1 - 190 files changed, 96 insertions(+), 1076 deletions(-) create mode 100644 python/openapi/python-openapi.iml rename python/{ => openapi}/src/com/jetbrains/python/PythonFileType.java (78%) create mode 100644 python/openapi/src/com/jetbrains/python/PythonLanguage.java rename python/{ => openapi}/src/com/jetbrains/python/psi/AccessDirection.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/CallArgumentsMapping.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/Callable.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/ComprehensionComponent.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/ComprhForComponent.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/ComprhIfComponent.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/FutureFeature.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/LanguageLevel.java (96%) rename python/{ => openapi}/src/com/jetbrains/python/psi/NameDefiner.java (96%) rename python/{ => openapi}/src/com/jetbrains/python/psi/Property.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyAnnotation.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyArgumentList.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyAssertStatement.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyAssignmentStatement.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyAugAssignmentStatement.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyBinaryExpression.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyBoolLiteralExpression.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyBreakStatement.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyCallExpression.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyClass.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyClassRef.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyComprehensionElement.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyConditionalExpression.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyConditionalStatementPart.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyContinueStatement.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyDecoratable.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyDecorator.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyDecoratorList.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyDelStatement.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyDictCompExpression.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyDictLiteralExpression.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyDocStringOwner.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyElement.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyElementGenerator.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyElementType.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyElementVisitor.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyElsePart.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyEmptyExpression.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyExceptPart.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyExecStatement.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyExpression.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyExpressionCodeFragment.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyExpressionStatement.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyFile.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyFinallyPart.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyForPart.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyForStatement.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyFromImportStatement.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyFunction.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyGeneratorExpression.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyGlobalStatement.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyIfPart.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyIfStatement.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyImportElement.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyImportStatement.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyImportStatementBase.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyKeyValueExpression.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyKeywordArgument.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyKnownDecoratorProvider.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyLambdaExpression.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyListCompExpression.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyListLiteralExpression.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyLiteralExpression.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyLoopStatement.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyNamedParameter.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyNoneLiteralExpression.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyNonlocalStatement.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyNumericLiteralExpression.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyParameter.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyParameterList.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyParenthesizedExpression.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyPassStatement.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyPrefixExpression.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyPrintStatement.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyPrintTarget.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyQualifiedExpression.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyRaiseStatement.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyRecursiveElementVisitor.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyReferenceExpression.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyReferenceOwner.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyReprExpression.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyReturnStatement.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PySequenceExpression.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PySetCompExpression.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PySetLiteralExpression.java (83%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PySingleStarParameter.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PySliceExpression.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PySliceItem.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyStarArgument.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyStarExpression.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyStarImportElement.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyStatement.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyStatementList.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyStatementPart.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyStatementWithElse.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyStringLiteralExpression.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyStubElementType.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PySubscriptionExpression.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyTargetExpression.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyTryExceptStatement.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyTryPart.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyTupleExpression.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyTupleParameter.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyTypedElement.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyWhilePart.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyWhileStatement.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyWithItem.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyWithStatement.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/psi/PyYieldExpression.java (100%) create mode 100644 python/src/com/jetbrains/python/PyEditorHighlighterProvider.java delete mode 100644 python/src/com/jetbrains/python/PythonLanguage.java delete mode 100644 python/src/com/jetbrains/python/codeInsight/controlflow/ScopeOwner.java delete mode 100644 python/src/com/jetbrains/python/psi/impl/PyQualifiedName.java delete mode 100644 python/src/com/jetbrains/python/psi/impl/stubs/CustomTargetExpressionStub.java delete mode 100644 python/src/com/jetbrains/python/psi/impl/stubs/CustomTargetExpressionStubType.java delete mode 100644 python/src/com/jetbrains/python/psi/resolve/PyResolveContext.java delete mode 100644 python/src/com/jetbrains/python/psi/resolve/QualifiedResolveResult.java delete mode 100644 python/src/com/jetbrains/python/psi/resolve/RatedResolveResult.java delete mode 100644 python/src/com/jetbrains/python/psi/stubs/PyAnnotationStub.java delete mode 100644 python/src/com/jetbrains/python/psi/stubs/PyClassStub.java delete mode 100644 python/src/com/jetbrains/python/psi/stubs/PyDecoratorListStub.java delete mode 100644 python/src/com/jetbrains/python/psi/stubs/PyDecoratorStub.java delete mode 100644 python/src/com/jetbrains/python/psi/stubs/PyExceptPartStub.java delete mode 100644 python/src/com/jetbrains/python/psi/stubs/PyFileStub.java delete mode 100644 python/src/com/jetbrains/python/psi/stubs/PyFromImportStatementStub.java delete mode 100644 python/src/com/jetbrains/python/psi/stubs/PyFunctionStub.java delete mode 100644 python/src/com/jetbrains/python/psi/stubs/PyImportElementStub.java delete mode 100644 python/src/com/jetbrains/python/psi/stubs/PyImportStatementStub.java delete mode 100644 python/src/com/jetbrains/python/psi/stubs/PyNamedParameterStub.java delete mode 100644 python/src/com/jetbrains/python/psi/stubs/PyParameterListStub.java delete mode 100644 python/src/com/jetbrains/python/psi/stubs/PySingleStarParameterStub.java delete mode 100644 python/src/com/jetbrains/python/psi/stubs/PyTargetExpressionStub.java delete mode 100644 python/src/com/jetbrains/python/psi/stubs/PyTupleParameterStub.java delete mode 100644 python/src/com/jetbrains/python/psi/types/PyType.java delete mode 100644 python/src/com/jetbrains/python/psi/types/TypeEvalContext.java delete mode 100644 python/src/com/jetbrains/python/toolbox/Maybe.java diff --git a/python/build/pycharm_build.gant b/python/build/pycharm_build.gant index 0595df2dcad0..253efe639aba 100644 --- a/python/build/pycharm_build.gant +++ b/python/build/pycharm_build.gant @@ -53,7 +53,7 @@ private List pycharmPlatformApiModules() { private List pycharmImplementationModules() { - return ["yaml", "graph", "coverage-common", "python", "python-ide"] + return ["yaml", "graph", "coverage-common", "python", "python-ide", "python-openapi"] } class Paths { diff --git a/python/openapi/python-openapi.iml b/python/openapi/python-openapi.iml new file mode 100644 index 000000000000..794de36364c4 --- /dev/null +++ b/python/openapi/python-openapi.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/python/src/com/jetbrains/python/PythonFileType.java b/python/openapi/src/com/jetbrains/python/PythonFileType.java similarity index 78% rename from python/src/com/jetbrains/python/PythonFileType.java rename to python/openapi/src/com/jetbrains/python/PythonFileType.java index ae26ed922ed0..abef86b8d2f8 100644 --- a/python/src/com/jetbrains/python/PythonFileType.java +++ b/python/openapi/src/com/jetbrains/python/PythonFileType.java @@ -1,18 +1,12 @@ package com.jetbrains.python; import com.intellij.lang.Language; -import com.intellij.openapi.editor.colors.EditorColorsScheme; -import com.intellij.openapi.editor.highlighter.EditorHighlighter; -import com.intellij.openapi.fileTypes.EditorHighlighterProvider; -import com.intellij.openapi.fileTypes.FileType; -import com.intellij.openapi.fileTypes.FileTypeEditorHighlighterProviders; import com.intellij.openapi.fileTypes.LanguageFileType; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.IconLoader; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.CharsetToolkit; import com.intellij.openapi.vfs.VirtualFile; -import com.jetbrains.python.lexer.PythonEditorHighlighter; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -42,15 +36,6 @@ public class PythonFileType extends LanguageFileType { public PythonFileType(Language language) { super(language); _icon = IconLoader.getIcon("/com/jetbrains/python/icons/pythonFile.png"); - - FileTypeEditorHighlighterProviders.INSTANCE.addExplicitExtension(this, new EditorHighlighterProvider() { - @Override - public EditorHighlighter getEditorHighlighter(@Nullable Project project, - @NotNull FileType fileType, @Nullable VirtualFile virtualFile, - @NotNull EditorColorsScheme colors) { - return new PythonEditorHighlighter(colors, project, virtualFile); - } - }); } @NotNull diff --git a/python/openapi/src/com/jetbrains/python/PythonLanguage.java b/python/openapi/src/com/jetbrains/python/PythonLanguage.java new file mode 100644 index 000000000000..019b59495bab --- /dev/null +++ b/python/openapi/src/com/jetbrains/python/PythonLanguage.java @@ -0,0 +1,21 @@ +package com.jetbrains.python; + +import com.intellij.lang.Language; + +/** + * @author yole + */ +public class PythonLanguage extends Language { + public static PythonLanguage getInstance() { + return (PythonLanguage)PythonFileType.INSTANCE.getLanguage(); + } + + @Override + public boolean isCaseSensitive() { + return true; // http://jetbrains-feed.appspot.com/message/372001 + } + + protected PythonLanguage() { + super("Python"); + } +} diff --git a/python/src/com/jetbrains/python/psi/AccessDirection.java b/python/openapi/src/com/jetbrains/python/psi/AccessDirection.java similarity index 100% rename from python/src/com/jetbrains/python/psi/AccessDirection.java rename to python/openapi/src/com/jetbrains/python/psi/AccessDirection.java diff --git a/python/src/com/jetbrains/python/psi/CallArgumentsMapping.java b/python/openapi/src/com/jetbrains/python/psi/CallArgumentsMapping.java similarity index 100% rename from python/src/com/jetbrains/python/psi/CallArgumentsMapping.java rename to python/openapi/src/com/jetbrains/python/psi/CallArgumentsMapping.java diff --git a/python/src/com/jetbrains/python/psi/Callable.java b/python/openapi/src/com/jetbrains/python/psi/Callable.java similarity index 100% rename from python/src/com/jetbrains/python/psi/Callable.java rename to python/openapi/src/com/jetbrains/python/psi/Callable.java diff --git a/python/src/com/jetbrains/python/psi/ComprehensionComponent.java b/python/openapi/src/com/jetbrains/python/psi/ComprehensionComponent.java similarity index 100% rename from python/src/com/jetbrains/python/psi/ComprehensionComponent.java rename to python/openapi/src/com/jetbrains/python/psi/ComprehensionComponent.java diff --git a/python/src/com/jetbrains/python/psi/ComprhForComponent.java b/python/openapi/src/com/jetbrains/python/psi/ComprhForComponent.java similarity index 100% rename from python/src/com/jetbrains/python/psi/ComprhForComponent.java rename to python/openapi/src/com/jetbrains/python/psi/ComprhForComponent.java diff --git a/python/src/com/jetbrains/python/psi/ComprhIfComponent.java b/python/openapi/src/com/jetbrains/python/psi/ComprhIfComponent.java similarity index 100% rename from python/src/com/jetbrains/python/psi/ComprhIfComponent.java rename to python/openapi/src/com/jetbrains/python/psi/ComprhIfComponent.java diff --git a/python/src/com/jetbrains/python/psi/FutureFeature.java b/python/openapi/src/com/jetbrains/python/psi/FutureFeature.java similarity index 100% rename from python/src/com/jetbrains/python/psi/FutureFeature.java rename to python/openapi/src/com/jetbrains/python/psi/FutureFeature.java diff --git a/python/src/com/jetbrains/python/psi/LanguageLevel.java b/python/openapi/src/com/jetbrains/python/psi/LanguageLevel.java similarity index 96% rename from python/src/com/jetbrains/python/psi/LanguageLevel.java rename to python/openapi/src/com/jetbrains/python/psi/LanguageLevel.java index fdecc612c6fc..04590189fce0 100644 --- a/python/src/com/jetbrains/python/psi/LanguageLevel.java +++ b/python/openapi/src/com/jetbrains/python/psi/LanguageLevel.java @@ -5,7 +5,6 @@ import com.intellij.openapi.util.Key; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; -import com.jetbrains.python.psi.impl.PythonLanguageLevelPusher; import org.jetbrains.annotations.NotNull; /** @@ -21,6 +20,8 @@ public enum LanguageLevel { PYTHON32(32, true, false, true, true), PYTHON33(33, true, false, true, true); + public static LanguageLevel FORCE_LANGUAGE_LEVEL = null; + public static LanguageLevel getDefault() { return PYTHON26; } @@ -113,7 +114,7 @@ public enum LanguageLevel { if (level != null) return level; if (ApplicationManager.getApplication().isUnitTestMode()) { - final LanguageLevel languageLevel = PythonLanguageLevelPusher.FORCE_LANGUAGE_LEVEL; + final LanguageLevel languageLevel = FORCE_LANGUAGE_LEVEL; if (languageLevel != null) { return languageLevel; } diff --git a/python/src/com/jetbrains/python/psi/NameDefiner.java b/python/openapi/src/com/jetbrains/python/psi/NameDefiner.java similarity index 96% rename from python/src/com/jetbrains/python/psi/NameDefiner.java rename to python/openapi/src/com/jetbrains/python/psi/NameDefiner.java index 4ef295dcd1a3..f5537c7d0c44 100644 --- a/python/src/com/jetbrains/python/psi/NameDefiner.java +++ b/python/openapi/src/com/jetbrains/python/psi/NameDefiner.java @@ -1,7 +1,6 @@ package com.jetbrains.python.psi; import com.intellij.psi.PsiElement; -import com.jetbrains.python.PythonDialectsTokenSetContributor; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/python/src/com/jetbrains/python/psi/Property.java b/python/openapi/src/com/jetbrains/python/psi/Property.java similarity index 100% rename from python/src/com/jetbrains/python/psi/Property.java rename to python/openapi/src/com/jetbrains/python/psi/Property.java diff --git a/python/src/com/jetbrains/python/psi/PyAnnotation.java b/python/openapi/src/com/jetbrains/python/psi/PyAnnotation.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyAnnotation.java rename to python/openapi/src/com/jetbrains/python/psi/PyAnnotation.java diff --git a/python/src/com/jetbrains/python/psi/PyArgumentList.java b/python/openapi/src/com/jetbrains/python/psi/PyArgumentList.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyArgumentList.java rename to python/openapi/src/com/jetbrains/python/psi/PyArgumentList.java diff --git a/python/src/com/jetbrains/python/psi/PyAssertStatement.java b/python/openapi/src/com/jetbrains/python/psi/PyAssertStatement.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyAssertStatement.java rename to python/openapi/src/com/jetbrains/python/psi/PyAssertStatement.java diff --git a/python/src/com/jetbrains/python/psi/PyAssignmentStatement.java b/python/openapi/src/com/jetbrains/python/psi/PyAssignmentStatement.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyAssignmentStatement.java rename to python/openapi/src/com/jetbrains/python/psi/PyAssignmentStatement.java diff --git a/python/src/com/jetbrains/python/psi/PyAugAssignmentStatement.java b/python/openapi/src/com/jetbrains/python/psi/PyAugAssignmentStatement.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyAugAssignmentStatement.java rename to python/openapi/src/com/jetbrains/python/psi/PyAugAssignmentStatement.java diff --git a/python/src/com/jetbrains/python/psi/PyBinaryExpression.java b/python/openapi/src/com/jetbrains/python/psi/PyBinaryExpression.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyBinaryExpression.java rename to python/openapi/src/com/jetbrains/python/psi/PyBinaryExpression.java diff --git a/python/src/com/jetbrains/python/psi/PyBoolLiteralExpression.java b/python/openapi/src/com/jetbrains/python/psi/PyBoolLiteralExpression.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyBoolLiteralExpression.java rename to python/openapi/src/com/jetbrains/python/psi/PyBoolLiteralExpression.java diff --git a/python/src/com/jetbrains/python/psi/PyBreakStatement.java b/python/openapi/src/com/jetbrains/python/psi/PyBreakStatement.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyBreakStatement.java rename to python/openapi/src/com/jetbrains/python/psi/PyBreakStatement.java diff --git a/python/src/com/jetbrains/python/psi/PyCallExpression.java b/python/openapi/src/com/jetbrains/python/psi/PyCallExpression.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyCallExpression.java rename to python/openapi/src/com/jetbrains/python/psi/PyCallExpression.java diff --git a/python/src/com/jetbrains/python/psi/PyClass.java b/python/openapi/src/com/jetbrains/python/psi/PyClass.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyClass.java rename to python/openapi/src/com/jetbrains/python/psi/PyClass.java diff --git a/python/src/com/jetbrains/python/psi/PyClassRef.java b/python/openapi/src/com/jetbrains/python/psi/PyClassRef.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyClassRef.java rename to python/openapi/src/com/jetbrains/python/psi/PyClassRef.java diff --git a/python/src/com/jetbrains/python/psi/PyComprehensionElement.java b/python/openapi/src/com/jetbrains/python/psi/PyComprehensionElement.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyComprehensionElement.java rename to python/openapi/src/com/jetbrains/python/psi/PyComprehensionElement.java diff --git a/python/src/com/jetbrains/python/psi/PyConditionalExpression.java b/python/openapi/src/com/jetbrains/python/psi/PyConditionalExpression.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyConditionalExpression.java rename to python/openapi/src/com/jetbrains/python/psi/PyConditionalExpression.java diff --git a/python/src/com/jetbrains/python/psi/PyConditionalStatementPart.java b/python/openapi/src/com/jetbrains/python/psi/PyConditionalStatementPart.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyConditionalStatementPart.java rename to python/openapi/src/com/jetbrains/python/psi/PyConditionalStatementPart.java diff --git a/python/src/com/jetbrains/python/psi/PyContinueStatement.java b/python/openapi/src/com/jetbrains/python/psi/PyContinueStatement.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyContinueStatement.java rename to python/openapi/src/com/jetbrains/python/psi/PyContinueStatement.java diff --git a/python/src/com/jetbrains/python/psi/PyDecoratable.java b/python/openapi/src/com/jetbrains/python/psi/PyDecoratable.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyDecoratable.java rename to python/openapi/src/com/jetbrains/python/psi/PyDecoratable.java diff --git a/python/src/com/jetbrains/python/psi/PyDecorator.java b/python/openapi/src/com/jetbrains/python/psi/PyDecorator.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyDecorator.java rename to python/openapi/src/com/jetbrains/python/psi/PyDecorator.java diff --git a/python/src/com/jetbrains/python/psi/PyDecoratorList.java b/python/openapi/src/com/jetbrains/python/psi/PyDecoratorList.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyDecoratorList.java rename to python/openapi/src/com/jetbrains/python/psi/PyDecoratorList.java diff --git a/python/src/com/jetbrains/python/psi/PyDelStatement.java b/python/openapi/src/com/jetbrains/python/psi/PyDelStatement.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyDelStatement.java rename to python/openapi/src/com/jetbrains/python/psi/PyDelStatement.java diff --git a/python/src/com/jetbrains/python/psi/PyDictCompExpression.java b/python/openapi/src/com/jetbrains/python/psi/PyDictCompExpression.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyDictCompExpression.java rename to python/openapi/src/com/jetbrains/python/psi/PyDictCompExpression.java diff --git a/python/src/com/jetbrains/python/psi/PyDictLiteralExpression.java b/python/openapi/src/com/jetbrains/python/psi/PyDictLiteralExpression.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyDictLiteralExpression.java rename to python/openapi/src/com/jetbrains/python/psi/PyDictLiteralExpression.java diff --git a/python/src/com/jetbrains/python/psi/PyDocStringOwner.java b/python/openapi/src/com/jetbrains/python/psi/PyDocStringOwner.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyDocStringOwner.java rename to python/openapi/src/com/jetbrains/python/psi/PyDocStringOwner.java diff --git a/python/src/com/jetbrains/python/psi/PyElement.java b/python/openapi/src/com/jetbrains/python/psi/PyElement.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyElement.java rename to python/openapi/src/com/jetbrains/python/psi/PyElement.java diff --git a/python/src/com/jetbrains/python/psi/PyElementGenerator.java b/python/openapi/src/com/jetbrains/python/psi/PyElementGenerator.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyElementGenerator.java rename to python/openapi/src/com/jetbrains/python/psi/PyElementGenerator.java diff --git a/python/src/com/jetbrains/python/psi/PyElementType.java b/python/openapi/src/com/jetbrains/python/psi/PyElementType.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyElementType.java rename to python/openapi/src/com/jetbrains/python/psi/PyElementType.java diff --git a/python/src/com/jetbrains/python/psi/PyElementVisitor.java b/python/openapi/src/com/jetbrains/python/psi/PyElementVisitor.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyElementVisitor.java rename to python/openapi/src/com/jetbrains/python/psi/PyElementVisitor.java diff --git a/python/src/com/jetbrains/python/psi/PyElsePart.java b/python/openapi/src/com/jetbrains/python/psi/PyElsePart.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyElsePart.java rename to python/openapi/src/com/jetbrains/python/psi/PyElsePart.java diff --git a/python/src/com/jetbrains/python/psi/PyEmptyExpression.java b/python/openapi/src/com/jetbrains/python/psi/PyEmptyExpression.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyEmptyExpression.java rename to python/openapi/src/com/jetbrains/python/psi/PyEmptyExpression.java diff --git a/python/src/com/jetbrains/python/psi/PyExceptPart.java b/python/openapi/src/com/jetbrains/python/psi/PyExceptPart.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyExceptPart.java rename to python/openapi/src/com/jetbrains/python/psi/PyExceptPart.java diff --git a/python/src/com/jetbrains/python/psi/PyExecStatement.java b/python/openapi/src/com/jetbrains/python/psi/PyExecStatement.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyExecStatement.java rename to python/openapi/src/com/jetbrains/python/psi/PyExecStatement.java diff --git a/python/src/com/jetbrains/python/psi/PyExpression.java b/python/openapi/src/com/jetbrains/python/psi/PyExpression.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyExpression.java rename to python/openapi/src/com/jetbrains/python/psi/PyExpression.java diff --git a/python/src/com/jetbrains/python/psi/PyExpressionCodeFragment.java b/python/openapi/src/com/jetbrains/python/psi/PyExpressionCodeFragment.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyExpressionCodeFragment.java rename to python/openapi/src/com/jetbrains/python/psi/PyExpressionCodeFragment.java diff --git a/python/src/com/jetbrains/python/psi/PyExpressionStatement.java b/python/openapi/src/com/jetbrains/python/psi/PyExpressionStatement.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyExpressionStatement.java rename to python/openapi/src/com/jetbrains/python/psi/PyExpressionStatement.java diff --git a/python/src/com/jetbrains/python/psi/PyFile.java b/python/openapi/src/com/jetbrains/python/psi/PyFile.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyFile.java rename to python/openapi/src/com/jetbrains/python/psi/PyFile.java diff --git a/python/src/com/jetbrains/python/psi/PyFinallyPart.java b/python/openapi/src/com/jetbrains/python/psi/PyFinallyPart.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyFinallyPart.java rename to python/openapi/src/com/jetbrains/python/psi/PyFinallyPart.java diff --git a/python/src/com/jetbrains/python/psi/PyForPart.java b/python/openapi/src/com/jetbrains/python/psi/PyForPart.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyForPart.java rename to python/openapi/src/com/jetbrains/python/psi/PyForPart.java diff --git a/python/src/com/jetbrains/python/psi/PyForStatement.java b/python/openapi/src/com/jetbrains/python/psi/PyForStatement.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyForStatement.java rename to python/openapi/src/com/jetbrains/python/psi/PyForStatement.java diff --git a/python/src/com/jetbrains/python/psi/PyFromImportStatement.java b/python/openapi/src/com/jetbrains/python/psi/PyFromImportStatement.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyFromImportStatement.java rename to python/openapi/src/com/jetbrains/python/psi/PyFromImportStatement.java diff --git a/python/src/com/jetbrains/python/psi/PyFunction.java b/python/openapi/src/com/jetbrains/python/psi/PyFunction.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyFunction.java rename to python/openapi/src/com/jetbrains/python/psi/PyFunction.java diff --git a/python/src/com/jetbrains/python/psi/PyGeneratorExpression.java b/python/openapi/src/com/jetbrains/python/psi/PyGeneratorExpression.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyGeneratorExpression.java rename to python/openapi/src/com/jetbrains/python/psi/PyGeneratorExpression.java diff --git a/python/src/com/jetbrains/python/psi/PyGlobalStatement.java b/python/openapi/src/com/jetbrains/python/psi/PyGlobalStatement.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyGlobalStatement.java rename to python/openapi/src/com/jetbrains/python/psi/PyGlobalStatement.java diff --git a/python/src/com/jetbrains/python/psi/PyIfPart.java b/python/openapi/src/com/jetbrains/python/psi/PyIfPart.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyIfPart.java rename to python/openapi/src/com/jetbrains/python/psi/PyIfPart.java diff --git a/python/src/com/jetbrains/python/psi/PyIfStatement.java b/python/openapi/src/com/jetbrains/python/psi/PyIfStatement.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyIfStatement.java rename to python/openapi/src/com/jetbrains/python/psi/PyIfStatement.java diff --git a/python/src/com/jetbrains/python/psi/PyImportElement.java b/python/openapi/src/com/jetbrains/python/psi/PyImportElement.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyImportElement.java rename to python/openapi/src/com/jetbrains/python/psi/PyImportElement.java diff --git a/python/src/com/jetbrains/python/psi/PyImportStatement.java b/python/openapi/src/com/jetbrains/python/psi/PyImportStatement.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyImportStatement.java rename to python/openapi/src/com/jetbrains/python/psi/PyImportStatement.java diff --git a/python/src/com/jetbrains/python/psi/PyImportStatementBase.java b/python/openapi/src/com/jetbrains/python/psi/PyImportStatementBase.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyImportStatementBase.java rename to python/openapi/src/com/jetbrains/python/psi/PyImportStatementBase.java diff --git a/python/src/com/jetbrains/python/psi/PyKeyValueExpression.java b/python/openapi/src/com/jetbrains/python/psi/PyKeyValueExpression.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyKeyValueExpression.java rename to python/openapi/src/com/jetbrains/python/psi/PyKeyValueExpression.java diff --git a/python/src/com/jetbrains/python/psi/PyKeywordArgument.java b/python/openapi/src/com/jetbrains/python/psi/PyKeywordArgument.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyKeywordArgument.java rename to python/openapi/src/com/jetbrains/python/psi/PyKeywordArgument.java diff --git a/python/src/com/jetbrains/python/psi/PyKnownDecoratorProvider.java b/python/openapi/src/com/jetbrains/python/psi/PyKnownDecoratorProvider.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyKnownDecoratorProvider.java rename to python/openapi/src/com/jetbrains/python/psi/PyKnownDecoratorProvider.java diff --git a/python/src/com/jetbrains/python/psi/PyLambdaExpression.java b/python/openapi/src/com/jetbrains/python/psi/PyLambdaExpression.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyLambdaExpression.java rename to python/openapi/src/com/jetbrains/python/psi/PyLambdaExpression.java diff --git a/python/src/com/jetbrains/python/psi/PyListCompExpression.java b/python/openapi/src/com/jetbrains/python/psi/PyListCompExpression.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyListCompExpression.java rename to python/openapi/src/com/jetbrains/python/psi/PyListCompExpression.java diff --git a/python/src/com/jetbrains/python/psi/PyListLiteralExpression.java b/python/openapi/src/com/jetbrains/python/psi/PyListLiteralExpression.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyListLiteralExpression.java rename to python/openapi/src/com/jetbrains/python/psi/PyListLiteralExpression.java diff --git a/python/src/com/jetbrains/python/psi/PyLiteralExpression.java b/python/openapi/src/com/jetbrains/python/psi/PyLiteralExpression.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyLiteralExpression.java rename to python/openapi/src/com/jetbrains/python/psi/PyLiteralExpression.java diff --git a/python/src/com/jetbrains/python/psi/PyLoopStatement.java b/python/openapi/src/com/jetbrains/python/psi/PyLoopStatement.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyLoopStatement.java rename to python/openapi/src/com/jetbrains/python/psi/PyLoopStatement.java diff --git a/python/src/com/jetbrains/python/psi/PyNamedParameter.java b/python/openapi/src/com/jetbrains/python/psi/PyNamedParameter.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyNamedParameter.java rename to python/openapi/src/com/jetbrains/python/psi/PyNamedParameter.java diff --git a/python/src/com/jetbrains/python/psi/PyNoneLiteralExpression.java b/python/openapi/src/com/jetbrains/python/psi/PyNoneLiteralExpression.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyNoneLiteralExpression.java rename to python/openapi/src/com/jetbrains/python/psi/PyNoneLiteralExpression.java diff --git a/python/src/com/jetbrains/python/psi/PyNonlocalStatement.java b/python/openapi/src/com/jetbrains/python/psi/PyNonlocalStatement.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyNonlocalStatement.java rename to python/openapi/src/com/jetbrains/python/psi/PyNonlocalStatement.java diff --git a/python/src/com/jetbrains/python/psi/PyNumericLiteralExpression.java b/python/openapi/src/com/jetbrains/python/psi/PyNumericLiteralExpression.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyNumericLiteralExpression.java rename to python/openapi/src/com/jetbrains/python/psi/PyNumericLiteralExpression.java diff --git a/python/src/com/jetbrains/python/psi/PyParameter.java b/python/openapi/src/com/jetbrains/python/psi/PyParameter.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyParameter.java rename to python/openapi/src/com/jetbrains/python/psi/PyParameter.java diff --git a/python/src/com/jetbrains/python/psi/PyParameterList.java b/python/openapi/src/com/jetbrains/python/psi/PyParameterList.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyParameterList.java rename to python/openapi/src/com/jetbrains/python/psi/PyParameterList.java diff --git a/python/src/com/jetbrains/python/psi/PyParenthesizedExpression.java b/python/openapi/src/com/jetbrains/python/psi/PyParenthesizedExpression.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyParenthesizedExpression.java rename to python/openapi/src/com/jetbrains/python/psi/PyParenthesizedExpression.java diff --git a/python/src/com/jetbrains/python/psi/PyPassStatement.java b/python/openapi/src/com/jetbrains/python/psi/PyPassStatement.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyPassStatement.java rename to python/openapi/src/com/jetbrains/python/psi/PyPassStatement.java diff --git a/python/src/com/jetbrains/python/psi/PyPrefixExpression.java b/python/openapi/src/com/jetbrains/python/psi/PyPrefixExpression.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyPrefixExpression.java rename to python/openapi/src/com/jetbrains/python/psi/PyPrefixExpression.java diff --git a/python/src/com/jetbrains/python/psi/PyPrintStatement.java b/python/openapi/src/com/jetbrains/python/psi/PyPrintStatement.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyPrintStatement.java rename to python/openapi/src/com/jetbrains/python/psi/PyPrintStatement.java diff --git a/python/src/com/jetbrains/python/psi/PyPrintTarget.java b/python/openapi/src/com/jetbrains/python/psi/PyPrintTarget.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyPrintTarget.java rename to python/openapi/src/com/jetbrains/python/psi/PyPrintTarget.java diff --git a/python/src/com/jetbrains/python/psi/PyQualifiedExpression.java b/python/openapi/src/com/jetbrains/python/psi/PyQualifiedExpression.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyQualifiedExpression.java rename to python/openapi/src/com/jetbrains/python/psi/PyQualifiedExpression.java diff --git a/python/src/com/jetbrains/python/psi/PyRaiseStatement.java b/python/openapi/src/com/jetbrains/python/psi/PyRaiseStatement.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyRaiseStatement.java rename to python/openapi/src/com/jetbrains/python/psi/PyRaiseStatement.java diff --git a/python/src/com/jetbrains/python/psi/PyRecursiveElementVisitor.java b/python/openapi/src/com/jetbrains/python/psi/PyRecursiveElementVisitor.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyRecursiveElementVisitor.java rename to python/openapi/src/com/jetbrains/python/psi/PyRecursiveElementVisitor.java diff --git a/python/src/com/jetbrains/python/psi/PyReferenceExpression.java b/python/openapi/src/com/jetbrains/python/psi/PyReferenceExpression.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyReferenceExpression.java rename to python/openapi/src/com/jetbrains/python/psi/PyReferenceExpression.java diff --git a/python/src/com/jetbrains/python/psi/PyReferenceOwner.java b/python/openapi/src/com/jetbrains/python/psi/PyReferenceOwner.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyReferenceOwner.java rename to python/openapi/src/com/jetbrains/python/psi/PyReferenceOwner.java diff --git a/python/src/com/jetbrains/python/psi/PyReprExpression.java b/python/openapi/src/com/jetbrains/python/psi/PyReprExpression.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyReprExpression.java rename to python/openapi/src/com/jetbrains/python/psi/PyReprExpression.java diff --git a/python/src/com/jetbrains/python/psi/PyReturnStatement.java b/python/openapi/src/com/jetbrains/python/psi/PyReturnStatement.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyReturnStatement.java rename to python/openapi/src/com/jetbrains/python/psi/PyReturnStatement.java diff --git a/python/src/com/jetbrains/python/psi/PySequenceExpression.java b/python/openapi/src/com/jetbrains/python/psi/PySequenceExpression.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PySequenceExpression.java rename to python/openapi/src/com/jetbrains/python/psi/PySequenceExpression.java diff --git a/python/src/com/jetbrains/python/psi/PySetCompExpression.java b/python/openapi/src/com/jetbrains/python/psi/PySetCompExpression.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PySetCompExpression.java rename to python/openapi/src/com/jetbrains/python/psi/PySetCompExpression.java diff --git a/python/src/com/jetbrains/python/psi/PySetLiteralExpression.java b/python/openapi/src/com/jetbrains/python/psi/PySetLiteralExpression.java similarity index 83% rename from python/src/com/jetbrains/python/psi/PySetLiteralExpression.java rename to python/openapi/src/com/jetbrains/python/psi/PySetLiteralExpression.java index 41f3970b2464..ddd0a8ebdbdc 100644 --- a/python/src/com/jetbrains/python/psi/PySetLiteralExpression.java +++ b/python/openapi/src/com/jetbrains/python/psi/PySetLiteralExpression.java @@ -1,7 +1,5 @@ package com.jetbrains.python.psi; -import org.jetbrains.annotations.Nullable; - /** * Represents a Python 3 set literal expression, for example, {1, 2, 3} * diff --git a/python/src/com/jetbrains/python/psi/PySingleStarParameter.java b/python/openapi/src/com/jetbrains/python/psi/PySingleStarParameter.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PySingleStarParameter.java rename to python/openapi/src/com/jetbrains/python/psi/PySingleStarParameter.java diff --git a/python/src/com/jetbrains/python/psi/PySliceExpression.java b/python/openapi/src/com/jetbrains/python/psi/PySliceExpression.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PySliceExpression.java rename to python/openapi/src/com/jetbrains/python/psi/PySliceExpression.java diff --git a/python/src/com/jetbrains/python/psi/PySliceItem.java b/python/openapi/src/com/jetbrains/python/psi/PySliceItem.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PySliceItem.java rename to python/openapi/src/com/jetbrains/python/psi/PySliceItem.java diff --git a/python/src/com/jetbrains/python/psi/PyStarArgument.java b/python/openapi/src/com/jetbrains/python/psi/PyStarArgument.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyStarArgument.java rename to python/openapi/src/com/jetbrains/python/psi/PyStarArgument.java diff --git a/python/src/com/jetbrains/python/psi/PyStarExpression.java b/python/openapi/src/com/jetbrains/python/psi/PyStarExpression.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyStarExpression.java rename to python/openapi/src/com/jetbrains/python/psi/PyStarExpression.java diff --git a/python/src/com/jetbrains/python/psi/PyStarImportElement.java b/python/openapi/src/com/jetbrains/python/psi/PyStarImportElement.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyStarImportElement.java rename to python/openapi/src/com/jetbrains/python/psi/PyStarImportElement.java diff --git a/python/src/com/jetbrains/python/psi/PyStatement.java b/python/openapi/src/com/jetbrains/python/psi/PyStatement.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyStatement.java rename to python/openapi/src/com/jetbrains/python/psi/PyStatement.java diff --git a/python/src/com/jetbrains/python/psi/PyStatementList.java b/python/openapi/src/com/jetbrains/python/psi/PyStatementList.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyStatementList.java rename to python/openapi/src/com/jetbrains/python/psi/PyStatementList.java diff --git a/python/src/com/jetbrains/python/psi/PyStatementPart.java b/python/openapi/src/com/jetbrains/python/psi/PyStatementPart.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyStatementPart.java rename to python/openapi/src/com/jetbrains/python/psi/PyStatementPart.java diff --git a/python/src/com/jetbrains/python/psi/PyStatementWithElse.java b/python/openapi/src/com/jetbrains/python/psi/PyStatementWithElse.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyStatementWithElse.java rename to python/openapi/src/com/jetbrains/python/psi/PyStatementWithElse.java diff --git a/python/src/com/jetbrains/python/psi/PyStringLiteralExpression.java b/python/openapi/src/com/jetbrains/python/psi/PyStringLiteralExpression.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyStringLiteralExpression.java rename to python/openapi/src/com/jetbrains/python/psi/PyStringLiteralExpression.java diff --git a/python/src/com/jetbrains/python/psi/PyStubElementType.java b/python/openapi/src/com/jetbrains/python/psi/PyStubElementType.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyStubElementType.java rename to python/openapi/src/com/jetbrains/python/psi/PyStubElementType.java diff --git a/python/src/com/jetbrains/python/psi/PySubscriptionExpression.java b/python/openapi/src/com/jetbrains/python/psi/PySubscriptionExpression.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PySubscriptionExpression.java rename to python/openapi/src/com/jetbrains/python/psi/PySubscriptionExpression.java diff --git a/python/src/com/jetbrains/python/psi/PyTargetExpression.java b/python/openapi/src/com/jetbrains/python/psi/PyTargetExpression.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyTargetExpression.java rename to python/openapi/src/com/jetbrains/python/psi/PyTargetExpression.java diff --git a/python/src/com/jetbrains/python/psi/PyTryExceptStatement.java b/python/openapi/src/com/jetbrains/python/psi/PyTryExceptStatement.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyTryExceptStatement.java rename to python/openapi/src/com/jetbrains/python/psi/PyTryExceptStatement.java diff --git a/python/src/com/jetbrains/python/psi/PyTryPart.java b/python/openapi/src/com/jetbrains/python/psi/PyTryPart.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyTryPart.java rename to python/openapi/src/com/jetbrains/python/psi/PyTryPart.java diff --git a/python/src/com/jetbrains/python/psi/PyTupleExpression.java b/python/openapi/src/com/jetbrains/python/psi/PyTupleExpression.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyTupleExpression.java rename to python/openapi/src/com/jetbrains/python/psi/PyTupleExpression.java diff --git a/python/src/com/jetbrains/python/psi/PyTupleParameter.java b/python/openapi/src/com/jetbrains/python/psi/PyTupleParameter.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyTupleParameter.java rename to python/openapi/src/com/jetbrains/python/psi/PyTupleParameter.java diff --git a/python/src/com/jetbrains/python/psi/PyTypedElement.java b/python/openapi/src/com/jetbrains/python/psi/PyTypedElement.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyTypedElement.java rename to python/openapi/src/com/jetbrains/python/psi/PyTypedElement.java diff --git a/python/src/com/jetbrains/python/psi/PyWhilePart.java b/python/openapi/src/com/jetbrains/python/psi/PyWhilePart.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyWhilePart.java rename to python/openapi/src/com/jetbrains/python/psi/PyWhilePart.java diff --git a/python/src/com/jetbrains/python/psi/PyWhileStatement.java b/python/openapi/src/com/jetbrains/python/psi/PyWhileStatement.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyWhileStatement.java rename to python/openapi/src/com/jetbrains/python/psi/PyWhileStatement.java diff --git a/python/src/com/jetbrains/python/psi/PyWithItem.java b/python/openapi/src/com/jetbrains/python/psi/PyWithItem.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyWithItem.java rename to python/openapi/src/com/jetbrains/python/psi/PyWithItem.java diff --git a/python/src/com/jetbrains/python/psi/PyWithStatement.java b/python/openapi/src/com/jetbrains/python/psi/PyWithStatement.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyWithStatement.java rename to python/openapi/src/com/jetbrains/python/psi/PyWithStatement.java diff --git a/python/src/com/jetbrains/python/psi/PyYieldExpression.java b/python/openapi/src/com/jetbrains/python/psi/PyYieldExpression.java similarity index 100% rename from python/src/com/jetbrains/python/psi/PyYieldExpression.java rename to python/openapi/src/com/jetbrains/python/psi/PyYieldExpression.java diff --git a/python/python.iml b/python/python.iml index 84970a37960d..8c3b0a2091e0 100644 --- a/python/python.iml +++ b/python/python.iml @@ -38,6 +38,7 @@ + diff --git a/python/src/META-INF/python-plugin-common.xml b/python/src/META-INF/python-plugin-common.xml index 5d883ba630b4..cd196ba34e3a 100644 --- a/python/src/META-INF/python-plugin-common.xml +++ b/python/src/META-INF/python-plugin-common.xml @@ -8,6 +8,7 @@ + diff --git a/python/src/com/jetbrains/python/PyEditorHighlighterProvider.java b/python/src/com/jetbrains/python/PyEditorHighlighterProvider.java new file mode 100644 index 000000000000..6f8d9f76283b --- /dev/null +++ b/python/src/com/jetbrains/python/PyEditorHighlighterProvider.java @@ -0,0 +1,23 @@ +package com.jetbrains.python; + +import com.intellij.openapi.editor.colors.EditorColorsScheme; +import com.intellij.openapi.editor.highlighter.EditorHighlighter; +import com.intellij.openapi.fileTypes.EditorHighlighterProvider; +import com.intellij.openapi.fileTypes.FileType; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.vfs.VirtualFile; +import com.jetbrains.python.lexer.PythonEditorHighlighter; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** +* @author yole +*/ +public class PyEditorHighlighterProvider implements EditorHighlighterProvider { + @Override + public EditorHighlighter getEditorHighlighter(@Nullable Project project, + @NotNull FileType fileType, @Nullable VirtualFile virtualFile, + @NotNull EditorColorsScheme colors) { + return new PythonEditorHighlighter(colors, project, virtualFile); + } +} diff --git a/python/src/com/jetbrains/python/PythonLanguage.java b/python/src/com/jetbrains/python/PythonLanguage.java deleted file mode 100644 index f36f77d3c0c9..000000000000 --- a/python/src/com/jetbrains/python/PythonLanguage.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.jetbrains.python; - -import com.intellij.lang.Language; -import com.intellij.psi.tree.IStubFileElementType; -import com.jetbrains.python.psi.PyFileElementType; -import com.jetbrains.python.validation.*; - -import java.util.Set; -import java.util.concurrent.CopyOnWriteArraySet; - -/** - * @author yole - */ -public class PythonLanguage extends Language { - private IStubFileElementType myFileElementType; - private final Set> _annotators = new CopyOnWriteArraySet>(); - - public static PythonLanguage getInstance() { - return (PythonLanguage)PythonFileType.INSTANCE.getLanguage(); - } - - @Override - public boolean isCaseSensitive() { - return true; // http://jetbrains-feed.appspot.com/message/372001 - } - - { - _annotators.add(AssignTargetAnnotator.class); - _annotators.add(ParameterListAnnotator.class); - _annotators.add(HighlightingAnnotator.class); - _annotators.add(ReturnAnnotator.class); - _annotators.add(TryExceptAnnotator.class); - _annotators.add(BreakContinueAnnotator.class); - _annotators.add(GlobalAnnotator.class); - _annotators.add(ImportAnnotator.class); - _annotators.add(StringLiteralQuotesAnnotator.class); - _annotators.add(PyBuiltinAnnotator.class); - _annotators.add(UnsupportedFeatures.class); - } - - - protected PythonLanguage() { - super("Python"); - myFileElementType = new PyFileElementType(this); - } - - public IStubFileElementType getFileElementType() { - return myFileElementType; - } - - public Set> getAnnotators() { - return _annotators; - } -} diff --git a/python/src/com/jetbrains/python/PythonParserDefinition.java b/python/src/com/jetbrains/python/PythonParserDefinition.java index 21197db5b606..5767ae379d60 100644 --- a/python/src/com/jetbrains/python/PythonParserDefinition.java +++ b/python/src/com/jetbrains/python/PythonParserDefinition.java @@ -15,6 +15,7 @@ import com.intellij.psi.tree.TokenSet; import com.jetbrains.python.lexer.PythonIndentingLexer; import com.jetbrains.python.parsing.PyParser; import com.jetbrains.python.psi.PyElementType; +import com.jetbrains.python.psi.PyFileElementType; import com.jetbrains.python.psi.PyStubElementType; import com.jetbrains.python.psi.impl.PyFileImpl; import org.jetbrains.annotations.NotNull; @@ -24,15 +25,11 @@ import org.jetbrains.annotations.NotNull; * @author Keith Lea */ public class PythonParserDefinition implements ParserDefinition { - private final PythonLanguage language; - private final TokenSet myWhitespaceTokens; private final TokenSet myCommentTokens; private final TokenSet myStringLiteralTokens; public PythonParserDefinition() { - language = (PythonLanguage)PythonFileType.INSTANCE.getLanguage(); - myWhitespaceTokens = TokenSet.create(PyTokenTypes.LINE_BREAK, PyTokenTypes.SPACE, PyTokenTypes.TAB, PyTokenTypes.FORMFEED); myCommentTokens = TokenSet.create(PyTokenTypes.END_OF_LINE_COMMENT); myStringLiteralTokens = TokenSet.orSet(PyTokenTypes.STRING_NODES, TokenSet.create(PyElementTypes.STRING_LITERAL_EXPRESSION)); @@ -44,7 +41,7 @@ public class PythonParserDefinition implements ParserDefinition { } public IFileElementType getFileNodeType() { - return language.getFileElementType(); + return PyFileElementType.INSTANCE; } @NotNull diff --git a/python/src/com/jetbrains/python/PythonStringUtil.java b/python/src/com/jetbrains/python/PythonStringUtil.java index 7b77e915d97f..d12bc8a8b99f 100644 --- a/python/src/com/jetbrains/python/PythonStringUtil.java +++ b/python/src/com/jetbrains/python/PythonStringUtil.java @@ -20,7 +20,6 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import static com.intellij.openapi.util.text.StringUtil.endsWith; -import static com.intellij.openapi.util.text.StringUtil.joinOrNull; import static com.intellij.openapi.util.text.StringUtil.startsWith; /** diff --git a/python/src/com/jetbrains/python/actions/AddFunctionQuickFix.java b/python/src/com/jetbrains/python/actions/AddFunctionQuickFix.java index 85e4185a9c85..8859868c8471 100644 --- a/python/src/com/jetbrains/python/actions/AddFunctionQuickFix.java +++ b/python/src/com/jetbrains/python/actions/AddFunctionQuickFix.java @@ -5,7 +5,6 @@ import com.intellij.codeInsight.template.TemplateBuilder; import com.intellij.codeInsight.template.TemplateBuilderFactory; import com.intellij.codeInspection.LocalQuickFix; import com.intellij.codeInspection.ProblemDescriptor; -import com.intellij.facet.FacetFinder; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.MessageType; import com.intellij.psi.PsiElement; diff --git a/python/src/com/jetbrains/python/actions/ComparisonWithNoneQuickFix.java b/python/src/com/jetbrains/python/actions/ComparisonWithNoneQuickFix.java index 370beed505ad..dab9a68c05c1 100644 --- a/python/src/com/jetbrains/python/actions/ComparisonWithNoneQuickFix.java +++ b/python/src/com/jetbrains/python/actions/ComparisonWithNoneQuickFix.java @@ -6,7 +6,6 @@ import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; import com.jetbrains.python.PyBundle; import com.jetbrains.python.PyTokenTypes; -import com.jetbrains.python.PythonLanguage; import com.jetbrains.python.psi.PyBinaryExpression; import com.jetbrains.python.psi.PyElementGenerator; import com.jetbrains.python.psi.PyElementType; diff --git a/python/src/com/jetbrains/python/actions/ExecuteInConsoleAction.java b/python/src/com/jetbrains/python/actions/ExecuteInConsoleAction.java index 19f998fb5af4..5112b1be49c0 100644 --- a/python/src/com/jetbrains/python/actions/ExecuteInConsoleAction.java +++ b/python/src/com/jetbrains/python/actions/ExecuteInConsoleAction.java @@ -26,7 +26,6 @@ import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiDocumentManager; -import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.util.Consumer; import com.intellij.util.NotNullFunction; diff --git a/python/src/com/jetbrains/python/codeInsight/PyProblemFileHighlightFilter.java b/python/src/com/jetbrains/python/codeInsight/PyProblemFileHighlightFilter.java index b36c8bac0b18..3bf74182228d 100644 --- a/python/src/com/jetbrains/python/codeInsight/PyProblemFileHighlightFilter.java +++ b/python/src/com/jetbrains/python/codeInsight/PyProblemFileHighlightFilter.java @@ -1,7 +1,6 @@ package com.jetbrains.python.codeInsight; import com.intellij.openapi.fileTypes.FileType; -import com.intellij.openapi.fileTypes.FileTypeManager; import com.intellij.openapi.util.Condition; import com.intellij.openapi.vfs.VirtualFile; import com.jetbrains.python.PythonFileType; diff --git a/python/src/com/jetbrains/python/codeInsight/controlflow/ScopeOwner.java b/python/src/com/jetbrains/python/codeInsight/controlflow/ScopeOwner.java deleted file mode 100644 index f7d1a8631e63..000000000000 --- a/python/src/com/jetbrains/python/codeInsight/controlflow/ScopeOwner.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.jetbrains.python.codeInsight.controlflow; - -import com.jetbrains.python.psi.PyElement; - -/** - * Marker interface for Python elements which define a scope. - * - * @see ControlFlowCache - * @author oleg - */ -public interface ScopeOwner extends PyElement { -} diff --git a/python/src/com/jetbrains/python/codeInsight/dataflow/PyReachingDefsDfaInstance.java b/python/src/com/jetbrains/python/codeInsight/dataflow/PyReachingDefsDfaInstance.java index bd7cc022adc9..7aa0543440a2 100644 --- a/python/src/com/jetbrains/python/codeInsight/dataflow/PyReachingDefsDfaInstance.java +++ b/python/src/com/jetbrains/python/codeInsight/dataflow/PyReachingDefsDfaInstance.java @@ -4,7 +4,6 @@ import com.intellij.codeInsight.controlflow.Instruction; import com.intellij.codeInsight.dataflow.map.DFAMap; import com.intellij.codeInsight.dataflow.map.DfaMapInstance; import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; import com.intellij.psi.util.PsiTreeUtil; import com.jetbrains.python.codeInsight.controlflow.ReadWriteInstruction; import com.jetbrains.python.codeInsight.dataflow.scope.ScopeUtil; @@ -16,7 +15,6 @@ import com.jetbrains.python.psi.PyFunction; import com.jetbrains.python.psi.impl.PyExceptPartNavigator; import org.jetbrains.annotations.NotNull; -import java.util.Collection; import java.util.Map; /** diff --git a/python/src/com/jetbrains/python/codeInsight/intentions/PyFlipComparisonIntention.java b/python/src/com/jetbrains/python/codeInsight/intentions/PyFlipComparisonIntention.java index 9e60ffdc9ea1..3e6be16fd645 100644 --- a/python/src/com/jetbrains/python/codeInsight/intentions/PyFlipComparisonIntention.java +++ b/python/src/com/jetbrains/python/codeInsight/intentions/PyFlipComparisonIntention.java @@ -10,7 +10,6 @@ import com.intellij.util.IncorrectOperationException; import com.intellij.util.containers.HashMap; import com.jetbrains.python.PyBundle; import com.jetbrains.python.PyTokenTypes; -import com.jetbrains.python.PythonLanguage; import com.jetbrains.python.psi.PyBinaryExpression; import com.jetbrains.python.psi.PyElementGenerator; import com.jetbrains.python.psi.PyElementType; diff --git a/python/src/com/jetbrains/python/debugger/PySignatureCacheManagerImpl.java b/python/src/com/jetbrains/python/debugger/PySignatureCacheManagerImpl.java index e76c715dda5a..6e59a94c1b3f 100644 --- a/python/src/com/jetbrains/python/debugger/PySignatureCacheManagerImpl.java +++ b/python/src/com/jetbrains/python/debugger/PySignatureCacheManagerImpl.java @@ -1,7 +1,6 @@ package com.jetbrains.python.debugger; import com.google.common.collect.Lists; -import com.google.common.collect.Maps; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; @@ -14,16 +13,12 @@ import com.jetbrains.django.util.VirtualFileUtil; import com.jetbrains.python.psi.PyClass; import com.jetbrains.python.psi.PyFunction; import com.jetbrains.python.psi.PyNamedParameter; -import com.jetbrains.python.psi.PyUtil; -import com.jetbrains.python.psi.search.PyProjectScopeBuilder; import org.apache.commons.lang.StringUtils; -import org.codehaus.groovy.util.StringUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.io.IOException; import java.util.List; -import java.util.Map; /** * @author traff diff --git a/python/src/com/jetbrains/python/findUsages/PyClassGroupingRuleProvider.java b/python/src/com/jetbrains/python/findUsages/PyClassGroupingRuleProvider.java index c7bc959452f7..93584df6d7de 100644 --- a/python/src/com/jetbrains/python/findUsages/PyClassGroupingRuleProvider.java +++ b/python/src/com/jetbrains/python/findUsages/PyClassGroupingRuleProvider.java @@ -7,7 +7,6 @@ import com.intellij.usages.PsiNamedElementUsageGroupBase; import com.intellij.usages.Usage; import com.intellij.usages.UsageGroup; import com.intellij.usages.impl.FileStructureGroupRuleProvider; -import com.intellij.usages.impl.rules.FileGroupingRule; import com.intellij.usages.rules.PsiElementUsage; import com.intellij.usages.rules.UsageGroupingRule; import com.jetbrains.python.psi.PyClass; diff --git a/python/src/com/jetbrains/python/formatter/PythonFormattingModelBuilder.java b/python/src/com/jetbrains/python/formatter/PythonFormattingModelBuilder.java index f69f627f9c54..2cff072e78ed 100644 --- a/python/src/com/jetbrains/python/formatter/PythonFormattingModelBuilder.java +++ b/python/src/com/jetbrains/python/formatter/PythonFormattingModelBuilder.java @@ -2,12 +2,13 @@ package com.jetbrains.python.formatter; import com.intellij.formatting.*; import com.intellij.lang.ASTNode; +import com.intellij.lang.LanguageParserDefinitions; import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.codeStyle.CodeStyleSettings; import com.intellij.psi.codeStyle.CommonCodeStyleSettings; -import com.intellij.psi.tree.IStubFileElementType; +import com.intellij.psi.tree.IFileElementType; import com.intellij.psi.tree.TokenSet; import com.jetbrains.python.PythonDialectsTokenSetProvider; import com.jetbrains.python.PythonLanguage; @@ -40,7 +41,7 @@ public class PythonFormattingModelBuilder implements FormattingModelBuilder, Cus } protected SpacingBuilder createSpacingBuilder(CodeStyleSettings settings) { - final IStubFileElementType file = PythonLanguage.getInstance().getFileElementType(); + final IFileElementType file = LanguageParserDefinitions.INSTANCE.forLanguage(PythonLanguage.getInstance()).getFileNodeType(); final PyCodeStyleSettings pySettings = settings.getCustomSettings(PyCodeStyleSettings.class); final TokenSet STATEMENT_OR_DECLARATION = TokenSet.orSet(PythonDialectsTokenSetProvider.INSTANCE.getStatementTokens(), CLASS_OR_FUNCTION); diff --git a/python/src/com/jetbrains/python/inspections/PyComparisonWithNoneInspection.java b/python/src/com/jetbrains/python/inspections/PyComparisonWithNoneInspection.java index 53a49fc15889..6733ffe9da27 100644 --- a/python/src/com/jetbrains/python/inspections/PyComparisonWithNoneInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyComparisonWithNoneInspection.java @@ -1,6 +1,5 @@ package com.jetbrains.python.inspections; -import com.intellij.codeInspection.LocalInspectionTool; import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.psi.PsiElementVisitor; diff --git a/python/src/com/jetbrains/python/inspections/PyTrailingSemicolonInspection.java b/python/src/com/jetbrains/python/inspections/PyTrailingSemicolonInspection.java index 81dedcee785a..85fab9e70a82 100644 --- a/python/src/com/jetbrains/python/inspections/PyTrailingSemicolonInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyTrailingSemicolonInspection.java @@ -1,6 +1,5 @@ package com.jetbrains.python.inspections; -import com.intellij.codeInspection.LocalInspectionTool; import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.lang.ASTNode; @@ -10,7 +9,6 @@ import com.intellij.psi.PsiWhiteSpace; import com.jetbrains.python.PyBundle; import com.jetbrains.python.PyTokenTypes; import com.jetbrains.python.actions.RemoveTrailingSemicolonQuickFix; -import com.jetbrains.python.psi.PyElementVisitor; import com.jetbrains.python.psi.PyStatement; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; diff --git a/python/src/com/jetbrains/python/inspections/PyUnreachableCodeInspection.java b/python/src/com/jetbrains/python/inspections/PyUnreachableCodeInspection.java index b44332c60b9f..ee09da465e32 100644 --- a/python/src/com/jetbrains/python/inspections/PyUnreachableCodeInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyUnreachableCodeInspection.java @@ -13,7 +13,6 @@ import com.jetbrains.python.codeInsight.controlflow.ControlFlowCache; import com.jetbrains.python.codeInsight.controlflow.ScopeOwner; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.List; diff --git a/python/src/com/jetbrains/python/psi/PyFileElementType.java b/python/src/com/jetbrains/python/psi/PyFileElementType.java index 3a1667ef1859..e5e3c33fffbc 100644 --- a/python/src/com/jetbrains/python/psi/PyFileElementType.java +++ b/python/src/com/jetbrains/python/psi/PyFileElementType.java @@ -12,6 +12,7 @@ import com.intellij.psi.stubs.StubInputStream; import com.intellij.psi.stubs.StubOutputStream; import com.intellij.psi.tree.IStubFileElementType; import com.intellij.util.io.StringRef; +import com.jetbrains.python.PythonLanguage; import com.jetbrains.python.console.parsing.PythonConsoleData; import com.jetbrains.python.console.parsing.PyConsoleParser; import com.jetbrains.python.console.PydevConsoleRunner; @@ -33,7 +34,9 @@ import java.util.List; * @author yole */ public class PyFileElementType extends IStubFileElementType { - public PyFileElementType(Language language) { + public static PyFileElementType INSTANCE = new PyFileElementType(PythonLanguage.getInstance()); + + protected PyFileElementType(Language language) { super(language); } diff --git a/python/src/com/jetbrains/python/psi/impl/PyAssertStatementImpl.java b/python/src/com/jetbrains/python/psi/impl/PyAssertStatementImpl.java index b7415675cda1..107ca2e5bf1b 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyAssertStatementImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyAssertStatementImpl.java @@ -1,7 +1,6 @@ package com.jetbrains.python.psi.impl; import com.intellij.lang.ASTNode; -import com.jetbrains.python.PyElementTypes; import com.jetbrains.python.PythonDialectsTokenSetProvider; import com.jetbrains.python.psi.PyAssertStatement; import com.jetbrains.python.psi.PyElementVisitor; diff --git a/python/src/com/jetbrains/python/psi/impl/PyAugAssignmentStatementImpl.java b/python/src/com/jetbrains/python/psi/impl/PyAugAssignmentStatementImpl.java index 5b62663d9c31..82cf3bc7c26a 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyAugAssignmentStatementImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyAugAssignmentStatementImpl.java @@ -6,7 +6,6 @@ import com.jetbrains.python.PyTokenTypes; import com.jetbrains.python.PythonDialectsTokenSetProvider; import com.jetbrains.python.psi.PyUtil; import org.jetbrains.annotations.NotNull; -import com.jetbrains.python.PyElementTypes; import com.jetbrains.python.psi.PyAugAssignmentStatement; import com.jetbrains.python.psi.PyElementVisitor; import com.jetbrains.python.psi.PyExpression; diff --git a/python/src/com/jetbrains/python/psi/impl/PyConditionalStatementPartImpl.java b/python/src/com/jetbrains/python/psi/impl/PyConditionalStatementPartImpl.java index 722a6cbf5d87..1a0871a9a163 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyConditionalStatementPartImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyConditionalStatementPartImpl.java @@ -4,7 +4,6 @@ import com.jetbrains.python.PythonDialectsTokenSetProvider; import com.jetbrains.python.psi.PyConditionalStatementPart; import com.jetbrains.python.psi.PyElementVisitor; import com.jetbrains.python.psi.PyExpression; -import com.jetbrains.python.PyElementTypes; import com.intellij.lang.ASTNode; /** diff --git a/python/src/com/jetbrains/python/psi/impl/PyDelStatementImpl.java b/python/src/com/jetbrains/python/psi/impl/PyDelStatementImpl.java index d46979f0a2e3..d03112b5ad6d 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyDelStatementImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyDelStatementImpl.java @@ -1,7 +1,6 @@ package com.jetbrains.python.psi.impl; import com.intellij.lang.ASTNode; -import com.jetbrains.python.PyElementTypes; import com.jetbrains.python.PythonDialectsTokenSetProvider; import com.jetbrains.python.psi.PyDelStatement; import com.jetbrains.python.psi.PyElementVisitor; diff --git a/python/src/com/jetbrains/python/psi/impl/PyExpressionCodeFragmentImpl.java b/python/src/com/jetbrains/python/psi/impl/PyExpressionCodeFragmentImpl.java index ac9cd551d970..e7014db74523 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyExpressionCodeFragmentImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyExpressionCodeFragmentImpl.java @@ -2,7 +2,6 @@ package com.jetbrains.python.psi.impl; import com.intellij.openapi.fileTypes.FileTypeManager; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Key; import com.intellij.psi.FileViewProvider; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiManager; diff --git a/python/src/com/jetbrains/python/psi/impl/PyExpressionStatementImpl.java b/python/src/com/jetbrains/python/psi/impl/PyExpressionStatementImpl.java index 765a3ed29474..91258b6b0565 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyExpressionStatementImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyExpressionStatementImpl.java @@ -4,7 +4,6 @@ import com.intellij.lang.ASTNode; import com.jetbrains.python.PythonDialectsTokenSetProvider; import com.jetbrains.python.psi.PyElementVisitor; import org.jetbrains.annotations.NotNull; -import com.jetbrains.python.PyElementTypes; import com.jetbrains.python.psi.PyExpression; import com.jetbrains.python.psi.PyExpressionStatement; diff --git a/python/src/com/jetbrains/python/psi/impl/PyForPartImpl.java b/python/src/com/jetbrains/python/psi/impl/PyForPartImpl.java index 2361ddbdba04..488f25890ecb 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyForPartImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyForPartImpl.java @@ -3,7 +3,6 @@ package com.jetbrains.python.psi.impl; import com.intellij.lang.ASTNode; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiWhiteSpace; -import com.jetbrains.python.PyElementTypes; import com.jetbrains.python.PyTokenTypes; import com.jetbrains.python.PythonDialectsTokenSetProvider; import com.jetbrains.python.psi.PyElementType; diff --git a/python/src/com/jetbrains/python/psi/impl/PyIfStatementImpl.java b/python/src/com/jetbrains/python/psi/impl/PyIfStatementImpl.java index 17b673b6a500..d08c12830b6b 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyIfStatementImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyIfStatementImpl.java @@ -1,10 +1,6 @@ package com.jetbrains.python.psi.impl; import com.intellij.lang.ASTNode; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.psi.PsiElement; -import com.intellij.psi.ResolveState; -import com.intellij.psi.scope.PsiScopeProcessor; import com.jetbrains.python.PyElementTypes; import com.jetbrains.python.psi.*; import org.jetbrains.annotations.NotNull; diff --git a/python/src/com/jetbrains/python/psi/impl/PyListCompExpressionImpl.java b/python/src/com/jetbrains/python/psi/impl/PyListCompExpressionImpl.java index 70042c8b459e..f5d7e2e8052c 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyListCompExpressionImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyListCompExpressionImpl.java @@ -1,10 +1,6 @@ package com.jetbrains.python.psi.impl; import com.intellij.lang.ASTNode; -import com.intellij.psi.PsiElement; -import com.intellij.psi.ResolveState; -import com.intellij.psi.scope.PsiScopeProcessor; -import com.jetbrains.python.psi.ComprhForComponent; import com.jetbrains.python.psi.PyElementVisitor; import com.jetbrains.python.psi.PyListCompExpression; import com.jetbrains.python.psi.types.PyType; diff --git a/python/src/com/jetbrains/python/psi/impl/PyListLiteralExpressionImpl.java b/python/src/com/jetbrains/python/psi/impl/PyListLiteralExpressionImpl.java index 2ab8f344d4cf..c3b49b4938b1 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyListLiteralExpressionImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyListLiteralExpressionImpl.java @@ -3,13 +3,11 @@ package com.jetbrains.python.psi.impl; import com.intellij.lang.ASTNode; import com.intellij.psi.PsiElement; import com.intellij.util.IncorrectOperationException; -import com.jetbrains.python.PyElementTypes; import com.jetbrains.python.PythonDialectsTokenSetProvider; import com.jetbrains.python.psi.*; import com.jetbrains.python.psi.types.PyType; import com.jetbrains.python.psi.types.TypeEvalContext; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; public class PyListLiteralExpressionImpl extends PyElementImpl implements PyListLiteralExpression { public PyListLiteralExpressionImpl(ASTNode astNode) { diff --git a/python/src/com/jetbrains/python/psi/impl/PyPrintStatementImpl.java b/python/src/com/jetbrains/python/psi/impl/PyPrintStatementImpl.java index d79c1224788c..778bf6372294 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyPrintStatementImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyPrintStatementImpl.java @@ -1,10 +1,8 @@ package com.jetbrains.python.psi.impl; import com.intellij.lang.ASTNode; -import com.intellij.psi.PsiElementVisitor; import com.jetbrains.python.psi.PyElementVisitor; import com.jetbrains.python.psi.PyPrintStatement; -import org.jetbrains.annotations.NotNull; /** * @author yole diff --git a/python/src/com/jetbrains/python/psi/impl/PyQualifiedName.java b/python/src/com/jetbrains/python/psi/impl/PyQualifiedName.java deleted file mode 100644 index a13d4a8adf63..000000000000 --- a/python/src/com/jetbrains/python/psi/impl/PyQualifiedName.java +++ /dev/null @@ -1,182 +0,0 @@ -package com.jetbrains.python.psi.impl; - -import com.intellij.openapi.util.text.StringUtil; -import com.intellij.psi.stubs.StubInputStream; -import com.intellij.psi.stubs.StubOutputStream; -import com.intellij.util.io.StringRef; -import com.jetbrains.python.psi.PyExpression; -import com.jetbrains.python.psi.PyQualifiedExpression; -import com.jetbrains.python.psi.PyReferenceExpression; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; - -/** - * @author yole - */ -public class PyQualifiedName { - @NotNull private final List myComponents; - - private PyQualifiedName(int count) { - myComponents = new ArrayList(count); - } - - @Nullable - public static PyQualifiedName fromReferenceChain(List components) { - PyQualifiedName qName = new PyQualifiedName(components.size()); - for (PyExpression component : components) { - final String refName = (component instanceof PyQualifiedExpression) ? ((PyQualifiedExpression)component).getReferencedName() : null; - if (refName == null) { - return null; - } - qName.myComponents.add(refName); - } - return qName; - } - - public static PyQualifiedName fromComponents(Collection components) { - PyQualifiedName qName = new PyQualifiedName(components.size()); - qName.myComponents.addAll(components); - return qName; - } - - public static PyQualifiedName fromComponents(String... components) { - PyQualifiedName result = new PyQualifiedName(components.length); - Collections.addAll(result.myComponents, components); - return result; - } - - public PyQualifiedName append(String name) { - PyQualifiedName result = new PyQualifiedName(myComponents.size()+1); - result.myComponents.addAll(myComponents); - result.myComponents.add(name); - return result; - } - - @NotNull - public PyQualifiedName removeLastComponent() { - return removeTail(1); - } - - @NotNull - public PyQualifiedName removeTail(int count) { - int size = myComponents.size(); - PyQualifiedName result = new PyQualifiedName(size); - result.myComponents.addAll(myComponents); - for (int i = 0; i < count && result.myComponents.size() > 0; i++) { - result.myComponents.remove(result.myComponents.size()-1); - } - return result; - } - - @NotNull - public List getComponents() { - return myComponents; - } - - public int getComponentCount() { - return myComponents.size(); - } - - public boolean matches(String... components) { - if (myComponents.size() != components.length) { - return false; - } - for (int i = 0; i < myComponents.size(); i++) { - if (!myComponents.get(i).equals(components[i])) { - return false; - } - } - return true; - } - - public boolean matchesPrefix(PyQualifiedName prefix) { - if (getComponentCount() < prefix.getComponentCount()) { - return false; - } - for (int i = 0; i < prefix.getComponentCount(); i++) { - final String component = getComponents().get(i); - if (component == null || !component.equals(prefix.getComponents().get(i))) { - return false; - } - } - return true; - } - - public boolean endsWith(@NotNull String suffix) { - return suffix.equals(getLastComponent()); - } - - public static void serialize(@Nullable PyQualifiedName qName, StubOutputStream dataStream) throws IOException { - if (qName == null) { - dataStream.writeVarInt(0); - } - else { - dataStream.writeVarInt(qName.getComponentCount()); - for (String s : qName.myComponents) { - dataStream.writeName(s); - } - } - } - - @Nullable - public static PyQualifiedName deserialize(StubInputStream dataStream) throws IOException { - PyQualifiedName qName; - int size = dataStream.readVarInt(); - if (size == 0) { - qName = null; - } - else { - qName = new PyQualifiedName(size); - for (int i = 0; i < size; i++) { - final StringRef name = dataStream.readName(); - qName.myComponents.add(name == null ? null : name.getString()); - } - } - return qName; - } - - @Nullable - public String getLastComponent() { - if (myComponents.size() == 0) { - return null; - } - return myComponents.get(myComponents.size()-1); - } - - @Override - public String toString() { - return join("."); - } - - public String join(final String separator) { - return StringUtil.join(myComponents, separator); - } - - public static PyQualifiedName fromDottedString(@NotNull String refName) { - return fromComponents(refName.split("\\.")); - } - - @Nullable - public static PyQualifiedName fromExpression(PyExpression expr) { - return expr instanceof PyReferenceExpression ? ((PyReferenceExpression) expr).asQualifiedName() : null; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - PyQualifiedName that = (PyQualifiedName)o; - return myComponents.equals(that.myComponents); - } - - @Override - public int hashCode() { - return myComponents.hashCode(); - } -} diff --git a/python/src/com/jetbrains/python/psi/impl/PyReturnStatementImpl.java b/python/src/com/jetbrains/python/psi/impl/PyReturnStatementImpl.java index ef3715435b74..045fb06d0d5d 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyReturnStatementImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyReturnStatementImpl.java @@ -3,7 +3,6 @@ package com.jetbrains.python.psi.impl; import com.intellij.lang.ASTNode; import com.jetbrains.python.PythonDialectsTokenSetProvider; import org.jetbrains.annotations.Nullable; -import com.jetbrains.python.PyElementTypes; import com.jetbrains.python.psi.PyElementVisitor; import com.jetbrains.python.psi.PyExpression; import com.jetbrains.python.psi.PyReturnStatement; diff --git a/python/src/com/jetbrains/python/psi/impl/PySliceItemImpl.java b/python/src/com/jetbrains/python/psi/impl/PySliceItemImpl.java index 26c6fdc41cb4..0eaf8cf25cc1 100644 --- a/python/src/com/jetbrains/python/psi/impl/PySliceItemImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PySliceItemImpl.java @@ -1,7 +1,6 @@ package com.jetbrains.python.psi.impl; import com.intellij.lang.ASTNode; -import com.jetbrains.python.PyElementTypes; import com.jetbrains.python.PythonDialectsTokenSetProvider; import com.jetbrains.python.psi.PyExpression; import com.jetbrains.python.psi.PySliceItem; diff --git a/python/src/com/jetbrains/python/psi/impl/PyTargetExpressionImpl.java b/python/src/com/jetbrains/python/psi/impl/PyTargetExpressionImpl.java index 9fcc48367e15..caa61b938938 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyTargetExpressionImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyTargetExpressionImpl.java @@ -38,7 +38,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; -import java.util.HashMap; import java.util.List; /** diff --git a/python/src/com/jetbrains/python/psi/impl/PyTryExceptStatementImpl.java b/python/src/com/jetbrains/python/psi/impl/PyTryExceptStatementImpl.java index 4af79f5091b0..9c8544ce0f6c 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyTryExceptStatementImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyTryExceptStatementImpl.java @@ -1,9 +1,6 @@ package com.jetbrains.python.psi.impl; import com.intellij.lang.ASTNode; -import com.intellij.psi.PsiElement; -import com.intellij.psi.ResolveState; -import com.intellij.psi.scope.PsiScopeProcessor; import com.intellij.psi.tree.TokenSet; import com.jetbrains.python.PyElementTypes; import com.jetbrains.python.psi.*; diff --git a/python/src/com/jetbrains/python/psi/impl/PyTupleExpressionImpl.java b/python/src/com/jetbrains/python/psi/impl/PyTupleExpressionImpl.java index 59b16be81b8c..13a0959cc321 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyTupleExpressionImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyTupleExpressionImpl.java @@ -1,10 +1,6 @@ package com.jetbrains.python.psi.impl; import com.intellij.lang.ASTNode; -import com.intellij.psi.PsiElement; -import com.intellij.psi.ResolveState; -import com.intellij.psi.scope.PsiScopeProcessor; -import com.jetbrains.python.PyElementTypes; import com.jetbrains.python.PythonDialectsTokenSetProvider; import com.jetbrains.python.psi.PyElementVisitor; import com.jetbrains.python.psi.PyExpression; diff --git a/python/src/com/jetbrains/python/psi/impl/PyWhileStatementImpl.java b/python/src/com/jetbrains/python/psi/impl/PyWhileStatementImpl.java index 00216bc4fc24..7eac0e0b0fcc 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyWhileStatementImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyWhileStatementImpl.java @@ -1,9 +1,6 @@ package com.jetbrains.python.psi.impl; import com.intellij.lang.ASTNode; -import com.intellij.psi.PsiElement; -import com.intellij.psi.ResolveState; -import com.intellij.psi.scope.PsiScopeProcessor; import com.jetbrains.python.PyElementTypes; import com.jetbrains.python.psi.*; import org.jetbrains.annotations.NotNull; diff --git a/python/src/com/jetbrains/python/psi/impl/PyWithItemImpl.java b/python/src/com/jetbrains/python/psi/impl/PyWithItemImpl.java index 57a2fbac5ac5..6347eae5f95f 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyWithItemImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyWithItemImpl.java @@ -5,7 +5,6 @@ import com.intellij.psi.PsiElement; import com.jetbrains.python.PyTokenTypes; import com.jetbrains.python.psi.PyExpression; import com.jetbrains.python.psi.PyWithItem; -import org.jetbrains.annotations.Nullable; /** * @author yole diff --git a/python/src/com/jetbrains/python/psi/impl/PythonLanguageLevelPusher.java b/python/src/com/jetbrains/python/psi/impl/PythonLanguageLevelPusher.java index 1ed5c00df432..25441e6693f4 100644 --- a/python/src/com/jetbrains/python/psi/impl/PythonLanguageLevelPusher.java +++ b/python/src/com/jetbrains/python/psi/impl/PythonLanguageLevelPusher.java @@ -34,7 +34,6 @@ import java.util.*; * @author yole */ public class PythonLanguageLevelPusher implements FilePropertyPusher { - public static LanguageLevel FORCE_LANGUAGE_LEVEL = null; private final Map myModuleSdks = new WeakHashMap(); public static void pushLanguageLevel(final Project project) { @@ -69,8 +68,8 @@ public class PythonLanguageLevelPusher implements FilePropertyPusher getTypeClass(); - void serialize(StubOutputStream stream) throws IOException; - - @Nullable - PyQualifiedName getCalleeName(); -} diff --git a/python/src/com/jetbrains/python/psi/impl/stubs/CustomTargetExpressionStubType.java b/python/src/com/jetbrains/python/psi/impl/stubs/CustomTargetExpressionStubType.java deleted file mode 100644 index b556243e76da..000000000000 --- a/python/src/com/jetbrains/python/psi/impl/stubs/CustomTargetExpressionStubType.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.jetbrains.python.psi.impl.stubs; - -import com.intellij.openapi.extensions.ExtensionPointName; -import com.intellij.psi.stubs.IndexSink; -import com.intellij.psi.stubs.StubInputStream; -import com.jetbrains.python.psi.PyTargetExpression; -import com.jetbrains.python.psi.stubs.PyTargetExpressionStub; -import org.jetbrains.annotations.Nullable; - -import java.io.IOException; - -/** - * @author yole - */ -public abstract class CustomTargetExpressionStubType { - public static ExtensionPointName EP_NAME = ExtensionPointName.create("Pythonid.customTargetExpressionStubType"); - - @Nullable - public abstract T createStub(PyTargetExpression psi); - - @Nullable - public abstract T deserializeStub(StubInputStream stream) throws IOException; - - public void indexStub(PyTargetExpressionStub stub, IndexSink sink) { - } -} diff --git a/python/src/com/jetbrains/python/psi/impl/stubs/PyDecoratorCallElementType.java b/python/src/com/jetbrains/python/psi/impl/stubs/PyDecoratorCallElementType.java index a281321d5f27..9eff8fae4d23 100644 --- a/python/src/com/jetbrains/python/psi/impl/stubs/PyDecoratorCallElementType.java +++ b/python/src/com/jetbrains/python/psi/impl/stubs/PyDecoratorCallElementType.java @@ -5,11 +5,8 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.stubs.StubElement; import com.intellij.psi.stubs.StubInputStream; import com.intellij.psi.stubs.StubOutputStream; -import com.intellij.util.io.StringRef; -import com.jetbrains.python.psi.PyExpression; import com.jetbrains.python.psi.PyStubElementType; import com.jetbrains.python.psi.PyDecorator; -import com.jetbrains.python.psi.impl.PyBuiltinCache; import com.jetbrains.python.psi.impl.PyDecoratorImpl; import com.jetbrains.python.psi.impl.PyQualifiedName; import com.jetbrains.python.psi.stubs.PyDecoratorStub; diff --git a/python/src/com/jetbrains/python/psi/impl/stubs/PyFileStubImpl.java b/python/src/com/jetbrains/python/psi/impl/stubs/PyFileStubImpl.java index a2d32b6c1083..1107a26453af 100644 --- a/python/src/com/jetbrains/python/psi/impl/stubs/PyFileStubImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/stubs/PyFileStubImpl.java @@ -1,5 +1,6 @@ package com.jetbrains.python.psi.impl.stubs; +import com.intellij.lang.LanguageParserDefinitions; import com.intellij.psi.stubs.PsiFileStubImpl; import com.intellij.psi.tree.IStubFileElementType; import com.intellij.util.io.StringRef; @@ -58,6 +59,6 @@ public class PyFileStubImpl extends PsiFileStubImpl implements PyFileStu @Override public IStubFileElementType getType() { - return PythonLanguage.getInstance().getFileElementType(); + return (IStubFileElementType) LanguageParserDefinitions.INSTANCE.forLanguage(PythonLanguage.getInstance()).getFileNodeType(); } } diff --git a/python/src/com/jetbrains/python/psi/impl/stubs/PyParameterListStubImpl.java b/python/src/com/jetbrains/python/psi/impl/stubs/PyParameterListStubImpl.java index 5541b2f79e15..6c5563e5954d 100644 --- a/python/src/com/jetbrains/python/psi/impl/stubs/PyParameterListStubImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/stubs/PyParameterListStubImpl.java @@ -6,7 +6,6 @@ package com.jetbrains.python.psi.impl.stubs; import com.intellij.psi.stubs.IStubElementType; import com.intellij.psi.stubs.StubBase; import com.intellij.psi.stubs.StubElement; -import com.jetbrains.python.PyElementTypes; import com.jetbrains.python.psi.PyParameterList; import com.jetbrains.python.psi.stubs.PyParameterListStub; diff --git a/python/src/com/jetbrains/python/psi/resolve/PyResolveContext.java b/python/src/com/jetbrains/python/psi/resolve/PyResolveContext.java deleted file mode 100644 index 9816e755582e..000000000000 --- a/python/src/com/jetbrains/python/psi/resolve/PyResolveContext.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.jetbrains.python.psi.resolve; - -import com.jetbrains.python.psi.types.TypeEvalContext; -import org.jetbrains.annotations.NotNull; - -/** - * @author yole - */ -public class PyResolveContext { - private final boolean myAllowImplicits; - private final boolean myAllowProperties; - private final TypeEvalContext myTypeEvalContext; - - private PyResolveContext(boolean allowImplicits, boolean allowProperties) { - myAllowImplicits = allowImplicits; - myAllowProperties = allowProperties; - myTypeEvalContext = null; - } - - private PyResolveContext(boolean allowImplicits, boolean allowProperties, TypeEvalContext typeEvalContext) { - myAllowImplicits = allowImplicits; - myAllowProperties = allowProperties; - myTypeEvalContext = typeEvalContext; - } - - public boolean allowImplicits() { - return myAllowImplicits; - } - - public boolean allowProperties() { - return myAllowProperties; - } - - private static final PyResolveContext ourDefaultContext = new PyResolveContext(true, true); - private static final PyResolveContext ourNoImplicitsContext = new PyResolveContext(false, true); - private static final PyResolveContext ourNoPropertiesContext = new PyResolveContext(false, false); - - public static PyResolveContext defaultContext() { - return ourDefaultContext; - } - - public static PyResolveContext noImplicits() { - return ourNoImplicitsContext; - } - - public static PyResolveContext noProperties() { - return ourNoPropertiesContext; - } - - public PyResolveContext withTypeEvalContext(@NotNull TypeEvalContext context) { - return new PyResolveContext(myAllowImplicits, myAllowProperties, context); - } - - public TypeEvalContext getTypeEvalContext() { - return myTypeEvalContext != null ? myTypeEvalContext : TypeEvalContext.fastStubOnly(null); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - PyResolveContext that = (PyResolveContext)o; - - if (myAllowImplicits != that.myAllowImplicits) return false; - if (myTypeEvalContext != null ? !myTypeEvalContext.equals(that.myTypeEvalContext) : that.myTypeEvalContext != null) return false; - - return true; - } - - @Override - public int hashCode() { - int result = (myAllowImplicits ? 1 : 0); - result = 31 * result + (myTypeEvalContext != null ? myTypeEvalContext.hashCode() : 0); - return result; - } -} diff --git a/python/src/com/jetbrains/python/psi/resolve/QualifiedResolveResult.java b/python/src/com/jetbrains/python/psi/resolve/QualifiedResolveResult.java deleted file mode 100644 index 724b008ff3aa..000000000000 --- a/python/src/com/jetbrains/python/psi/resolve/QualifiedResolveResult.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.jetbrains.python.psi.resolve; - -import com.intellij.psi.ResolveResult; -import com.jetbrains.python.psi.PyExpression; -import org.jetbrains.annotations.Nullable; - -import java.util.List; - -/** - * Knows about the last qualifier that occurred in assignment resolution chain. - * See {@link com.jetbrains.python.psi.PyReferenceExpression#followAssignmentsChain(com.jetbrains.python.psi.types.TypeEvalContext) followAssignmentsChain()} - *
- * User: dcheryasov - * Date: May 6, 2010 6:55:30 PM - */ -public interface QualifiedResolveResult extends ResolveResult { - @Nullable - List getQualifiers(); - - /** - * @return true iff the resolve result is implicit, that is, not exact but by divination and looks reasonable. - */ - boolean isImplicit(); -} diff --git a/python/src/com/jetbrains/python/psi/resolve/RatedResolveResult.java b/python/src/com/jetbrains/python/psi/resolve/RatedResolveResult.java deleted file mode 100644 index 33c8fc552c94..000000000000 --- a/python/src/com/jetbrains/python/psi/resolve/RatedResolveResult.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.jetbrains.python.psi.resolve; - -import com.intellij.psi.PsiElement; -import com.intellij.psi.ResolveResult; -import com.intellij.util.containers.SortedList; - -import java.util.Comparator; -import java.util.List; - -/** - * Provides a way to sort results of multi-resolve. - * User: dcheryasov - * Date: Dec 5, 2008 11:06:30 AM - */ -public class RatedResolveResult implements ResolveResult { - private final int myRate; - private final PsiElement myWhat; - - public RatedResolveResult(int rate, PsiElement what) { - myRate = rate; - myWhat = what; - } - - public static final RatedResolveResult[] EMPTY_ARRAY = new RatedResolveResult[0]; - - public PsiElement getElement() { - return myWhat; - } - - public boolean isValidResult() { - return myWhat != null; - } - - /** - * Results with higher rate are shown higher in the list of multiResolve(). - * @see com.intellij.psi.PsiPolyVariantReference#multiResolve(boolean) - * @return desired rate. If in doubt, use 0. - */ - public int getRate() { - return myRate; - } - - public RatedResolveResult replace(PsiElement what) { - return new RatedResolveResult(myRate, what); - } - - @Override - public String toString() { - return myWhat.toString() + "@" + myRate; - } - - /** - * For unusual items that need to be on top. - */ - public static final int RATE_HIGH = 1000; - - /** - * For regular references. - */ - public static final int RATE_NORMAL = 0; - - /** - * For additional, less important results. - */ - public static final int RATE_LOW = -1000; - - public static List sorted(List targets) { - if (targets.size() == 1) { - return targets; - } - List ret = new SortedList(new Comparator() { - public int compare(final RatedResolveResult one, final RatedResolveResult another) { - return another.getRate() - one.getRate(); - } - }); - ret.addAll(targets); - return ret; - } -} diff --git a/python/src/com/jetbrains/python/psi/stubs/PyAnnotationStub.java b/python/src/com/jetbrains/python/psi/stubs/PyAnnotationStub.java deleted file mode 100644 index 9e631a02a016..000000000000 --- a/python/src/com/jetbrains/python/psi/stubs/PyAnnotationStub.java +++ /dev/null @@ -1,10 +0,0 @@ -/* - * @author max - */ -package com.jetbrains.python.psi.stubs; - -import com.intellij.psi.stubs.StubElement; -import com.jetbrains.python.psi.PyAnnotation; - -public interface PyAnnotationStub extends StubElement { -} \ No newline at end of file diff --git a/python/src/com/jetbrains/python/psi/stubs/PyClassNameIndexInsensitive.java b/python/src/com/jetbrains/python/psi/stubs/PyClassNameIndexInsensitive.java index d1d4e3baf9ba..f414c38ca7fc 100644 --- a/python/src/com/jetbrains/python/psi/stubs/PyClassNameIndexInsensitive.java +++ b/python/src/com/jetbrains/python/psi/stubs/PyClassNameIndexInsensitive.java @@ -5,7 +5,6 @@ import com.intellij.psi.search.ProjectScope; import com.intellij.psi.stubs.StringStubIndexExtension; import com.intellij.psi.stubs.StubIndex; import com.intellij.psi.stubs.StubIndexKey; -import com.intellij.util.io.KeyDescriptor; import com.jetbrains.python.psi.PyClass; import org.jetbrains.annotations.NotNull; diff --git a/python/src/com/jetbrains/python/psi/stubs/PyClassStub.java b/python/src/com/jetbrains/python/psi/stubs/PyClassStub.java deleted file mode 100644 index 5a8fb8380172..000000000000 --- a/python/src/com/jetbrains/python/psi/stubs/PyClassStub.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * @author max - */ -package com.jetbrains.python.psi.stubs; - -import com.intellij.psi.stubs.NamedStub; -import com.jetbrains.python.psi.PyClass; -import com.jetbrains.python.psi.impl.PyQualifiedName; - -import java.util.List; - -public interface PyClassStub extends NamedStub { - PyQualifiedName[] getSuperClasses(); - List getSlots(); - String getDocString(); -} \ No newline at end of file diff --git a/python/src/com/jetbrains/python/psi/stubs/PyDecoratorListStub.java b/python/src/com/jetbrains/python/psi/stubs/PyDecoratorListStub.java deleted file mode 100644 index c33d60bc338e..000000000000 --- a/python/src/com/jetbrains/python/psi/stubs/PyDecoratorListStub.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.jetbrains.python.psi.stubs; - -import com.intellij.psi.stubs.StubElement; -import com.jetbrains.python.psi.PyDecoratorList; - -/** - * Created by IntelliJ IDEA. - * User: dcheryasov - * Date: Sep 28, 2008 - */ -public interface PyDecoratorListStub extends StubElement { -} diff --git a/python/src/com/jetbrains/python/psi/stubs/PyDecoratorStub.java b/python/src/com/jetbrains/python/psi/stubs/PyDecoratorStub.java deleted file mode 100644 index 20a56a3b6a11..000000000000 --- a/python/src/com/jetbrains/python/psi/stubs/PyDecoratorStub.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.jetbrains.python.psi.stubs; - -import com.intellij.psi.stubs.StubElement; -import com.jetbrains.python.psi.PyDecorator; -import com.jetbrains.python.psi.impl.PyQualifiedName; - -/** - * Created by IntelliJ IDEA. - * User: dcheryasov - * Date: Sep 28, 2008 - */ -public interface PyDecoratorStub extends StubElement { - - /** - * @return name of the decorator after the "@". - */ - PyQualifiedName getQualifiedName(); - - //PyFunction getTarget(); -} diff --git a/python/src/com/jetbrains/python/psi/stubs/PyExceptPartStub.java b/python/src/com/jetbrains/python/psi/stubs/PyExceptPartStub.java deleted file mode 100644 index 20b693c9fb25..000000000000 --- a/python/src/com/jetbrains/python/psi/stubs/PyExceptPartStub.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.jetbrains.python.psi.stubs; - -import com.intellij.psi.stubs.StubElement; -import com.jetbrains.python.psi.PyExceptPart; - -/** - * @author yole - */ -public interface PyExceptPartStub extends StubElement { -} diff --git a/python/src/com/jetbrains/python/psi/stubs/PyFileStub.java b/python/src/com/jetbrains/python/psi/stubs/PyFileStub.java deleted file mode 100644 index 892a2d92bbc6..000000000000 --- a/python/src/com/jetbrains/python/psi/stubs/PyFileStub.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.jetbrains.python.psi.stubs; - -import com.intellij.psi.stubs.PsiFileStub; -import com.jetbrains.python.psi.PyFile; - -import java.util.BitSet; -import java.util.List; - -/** - * @author yole - */ -public interface PyFileStub extends PsiFileStub { - List getDunderAll(); - BitSet getFutureFeatures(); - String getDeprecationMessage(); -} diff --git a/python/src/com/jetbrains/python/psi/stubs/PyFromImportStatementStub.java b/python/src/com/jetbrains/python/psi/stubs/PyFromImportStatementStub.java deleted file mode 100644 index e14e7d3e858a..000000000000 --- a/python/src/com/jetbrains/python/psi/stubs/PyFromImportStatementStub.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.jetbrains.python.psi.stubs; - -import com.intellij.psi.stubs.StubElement; -import com.jetbrains.python.psi.PyFromImportStatement; -import com.jetbrains.python.psi.impl.PyQualifiedName; -import org.jetbrains.annotations.Nullable; - -/** - * @author yole - */ -public interface PyFromImportStatementStub extends StubElement { - @Nullable - PyQualifiedName getImportSourceQName(); - boolean isStarImport(); - int getRelativeLevel(); -} diff --git a/python/src/com/jetbrains/python/psi/stubs/PyFunctionStub.java b/python/src/com/jetbrains/python/psi/stubs/PyFunctionStub.java deleted file mode 100644 index 9518866c8b1b..000000000000 --- a/python/src/com/jetbrains/python/psi/stubs/PyFunctionStub.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.jetbrains.python.psi.stubs; - -import com.intellij.psi.stubs.NamedStub; -import com.jetbrains.python.psi.PyFunction; - -public interface PyFunctionStub extends NamedStub { - String getDocString(); - String getDeprecationMessage(); -} \ No newline at end of file diff --git a/python/src/com/jetbrains/python/psi/stubs/PyImportElementStub.java b/python/src/com/jetbrains/python/psi/stubs/PyImportElementStub.java deleted file mode 100644 index fc6e0068dedc..000000000000 --- a/python/src/com/jetbrains/python/psi/stubs/PyImportElementStub.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.jetbrains.python.psi.stubs; - -import com.intellij.psi.stubs.StubElement; -import com.jetbrains.python.psi.PyImportElement; -import com.jetbrains.python.psi.impl.PyQualifiedName; -import org.jetbrains.annotations.Nullable; - -/** - * @author yole - */ -public interface PyImportElementStub extends StubElement { - @Nullable - PyQualifiedName getImportedQName(); - - String getAsName(); -} diff --git a/python/src/com/jetbrains/python/psi/stubs/PyImportStatementStub.java b/python/src/com/jetbrains/python/psi/stubs/PyImportStatementStub.java deleted file mode 100644 index 4a9169055707..000000000000 --- a/python/src/com/jetbrains/python/psi/stubs/PyImportStatementStub.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.jetbrains.python.psi.stubs; - -import com.intellij.psi.stubs.StubElement; -import com.jetbrains.python.psi.PyImportStatement; - -/** - * @author yole - */ -public interface PyImportStatementStub extends StubElement { -} diff --git a/python/src/com/jetbrains/python/psi/stubs/PyNamedParameterStub.java b/python/src/com/jetbrains/python/psi/stubs/PyNamedParameterStub.java deleted file mode 100644 index 4247ca0de195..000000000000 --- a/python/src/com/jetbrains/python/psi/stubs/PyNamedParameterStub.java +++ /dev/null @@ -1,13 +0,0 @@ -/* - * @author max - */ -package com.jetbrains.python.psi.stubs; - -import com.intellij.psi.stubs.NamedStub; -import com.jetbrains.python.psi.PyNamedParameter; - -public interface PyNamedParameterStub extends NamedStub { - boolean isPositionalContainer(); - boolean isKeywordContainer(); - boolean hasDefaultValue(); -} \ No newline at end of file diff --git a/python/src/com/jetbrains/python/psi/stubs/PyParameterListStub.java b/python/src/com/jetbrains/python/psi/stubs/PyParameterListStub.java deleted file mode 100644 index 1e9e9aedfce9..000000000000 --- a/python/src/com/jetbrains/python/psi/stubs/PyParameterListStub.java +++ /dev/null @@ -1,10 +0,0 @@ -/* - * @author max - */ -package com.jetbrains.python.psi.stubs; - -import com.intellij.psi.stubs.StubElement; -import com.jetbrains.python.psi.PyParameterList; - -public interface PyParameterListStub extends StubElement { -} \ No newline at end of file diff --git a/python/src/com/jetbrains/python/psi/stubs/PySingleStarParameterStub.java b/python/src/com/jetbrains/python/psi/stubs/PySingleStarParameterStub.java deleted file mode 100644 index f76edbb6b45d..000000000000 --- a/python/src/com/jetbrains/python/psi/stubs/PySingleStarParameterStub.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.jetbrains.python.psi.stubs; - -import com.intellij.psi.stubs.StubElement; -import com.jetbrains.python.psi.PySingleStarParameter; - -/** - * @author yole - */ -public interface PySingleStarParameterStub extends StubElement { -} diff --git a/python/src/com/jetbrains/python/psi/stubs/PyTargetExpressionStub.java b/python/src/com/jetbrains/python/psi/stubs/PyTargetExpressionStub.java deleted file mode 100644 index 26527ee3e44a..000000000000 --- a/python/src/com/jetbrains/python/psi/stubs/PyTargetExpressionStub.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.jetbrains.python.psi.stubs; - -import com.intellij.psi.stubs.NamedStub; -import com.jetbrains.python.psi.PyTargetExpression; -import com.jetbrains.python.psi.impl.PyQualifiedName; -import com.jetbrains.python.psi.impl.stubs.CustomTargetExpressionStub; -import org.jetbrains.annotations.Nullable; - -/** - * @author yole - */ -public interface PyTargetExpressionStub extends NamedStub { - enum InitializerType { - ReferenceExpression(1), - CallExpression(2), - Custom(3), - Other(0); - - private int myIndex; - - InitializerType(int index) { - myIndex = index; - } - - public int getIndex() { - return myIndex; - } - - public static InitializerType fromIndex(int index) { - switch (index) { - case 1: return ReferenceExpression; - case 2: return CallExpression; - case 3: return Custom; - default: return Other; - } - } - } - - InitializerType getInitializerType(); - - @Nullable - PyQualifiedName getInitializer(); - - @Nullable - T getCustomStub(Class stubClass); -} diff --git a/python/src/com/jetbrains/python/psi/stubs/PyTupleParameterStub.java b/python/src/com/jetbrains/python/psi/stubs/PyTupleParameterStub.java deleted file mode 100644 index 2b49c19c522b..000000000000 --- a/python/src/com/jetbrains/python/psi/stubs/PyTupleParameterStub.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.jetbrains.python.psi.stubs; - -import com.intellij.psi.stubs.StubElement; -import com.jetbrains.python.psi.PyTupleParameter; - -/** - * Tuple parameter stub, collects nested parameters from stubs. - */ -public interface PyTupleParameterStub extends StubElement { - boolean hasDefaultValue(); -} diff --git a/python/src/com/jetbrains/python/psi/types/PyType.java b/python/src/com/jetbrains/python/psi/types/PyType.java deleted file mode 100644 index fdbac85c3cf3..000000000000 --- a/python/src/com/jetbrains/python/psi/types/PyType.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.jetbrains.python.psi.types; - -import com.intellij.openapi.util.Key; -import com.intellij.util.ProcessingContext; -import com.jetbrains.python.psi.AccessDirection; -import com.jetbrains.python.psi.PyExpression; -import com.jetbrains.python.psi.resolve.PyResolveContext; -import com.jetbrains.python.psi.resolve.RatedResolveResult; -import org.jetbrains.annotations.Nullable; - -import java.util.List; -import java.util.Set; - -/** - * Represents a type of an expression. - * - * @author yole - */ -public interface PyType { - - /** - * Resolves an attribute of type. - * - * - * @param name attribute name - * @param location the expression of type qualifierType on which the member is being resolved (optional) - * @param direction - * @param resolveContext - * @return null if name definitely cannot be found (e.g. in a qualified reference), - * or an empty list if name is not found but other contexts are worth looking at, - * or a list of elements that define the name, a la multiResolve(). - */ - @Nullable - List resolveMember(final String name, @Nullable PyExpression location, AccessDirection direction, - PyResolveContext resolveContext); - - /** - * Proposes completion variants from type's attributes. - * - * @param location the reference on which the completion was invoked - * @param context to share state between nested invocations - * @return completion variants good for {@link com.intellij.psi.PsiReference#getVariants} return value. - */ - Object[] getCompletionVariants(String completionPrefix, PyExpression location, ProcessingContext context); - - /** - * Context key for access to a set of names already found by variant search. - */ - Key> CTX_NAMES = new Key>("Completion variants names"); - - /** - * @return name of the type - */ - @Nullable - String getName(); - - /** - * @return true if the type is a known built-in type. - * @param context - */ - boolean isBuiltin(TypeEvalContext context); - - void assertValid(String message); -} diff --git a/python/src/com/jetbrains/python/psi/types/TypeEvalContext.java b/python/src/com/jetbrains/python/psi/types/TypeEvalContext.java deleted file mode 100644 index 36de8388619b..000000000000 --- a/python/src/com/jetbrains/python/psi/types/TypeEvalContext.java +++ /dev/null @@ -1,136 +0,0 @@ -package com.jetbrains.python.psi.types; - -import com.intellij.openapi.util.text.StringUtil; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; -import com.intellij.psi.StubBasedPsiElement; -import com.jetbrains.python.psi.PyTypedElement; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.*; - -/** - * @author yole - */ -public class TypeEvalContext { - private final boolean myAllowDataFlow; - private final boolean myAllowStubToAST; - private List myTrace; - private String myTraceIndent = ""; - private final PsiFile myOrigin; - - private final Map myEvaluated = new HashMap(); - private final ThreadLocal> myEvaluating = new ThreadLocal>() { - @Override - protected Set initialValue() { - return new HashSet(); - } - }; - - private TypeEvalContext(boolean allowDataFlow, boolean allowStubToAST, PsiFile origin) { - myAllowDataFlow = allowDataFlow; - myAllowStubToAST = allowStubToAST; - myOrigin = origin; - } - - @Override - public String toString() { - return String.format("TypeEvalContext(%b, %b, %s)", myAllowDataFlow, myAllowStubToAST, myOrigin); - } - - public boolean allowDataFlow(PsiElement element) { - return myAllowDataFlow || element.getContainingFile() == myOrigin; - } - - public boolean allowReturnTypes(PsiElement element) { - return myAllowDataFlow || element.getContainingFile() == myOrigin; - } - - public static TypeEvalContext slow() { - return new TypeEvalContext(true, true, null); - } - - public static TypeEvalContext fast() { - return new TypeEvalContext(false, true, null); - } - - /** - * Creates a TypeEvalContext for performing analysis operations on the specified file which is currently open in the editor, - * without accessing stubs. For such a file, additional slow operations are allowed. - * - * @param origin the file open in the editor - * @return the type eval context for the file. - */ - public static TypeEvalContext fastStubOnly(@Nullable PsiFile origin) { - return new TypeEvalContext(false, false, origin); - } - - public TypeEvalContext withTracing() { - if (myTrace == null) { - myTrace = new ArrayList(); - } - return this; - } - - public void trace(String message, Object... args) { - if (myTrace != null) { - myTrace.add(myTraceIndent + String.format(message, args)); - } - } - - public void traceIndent() { - if (myTrace != null) { - myTraceIndent += " "; - } - } - - public void traceUnindent() { - if (myTrace != null && myTraceIndent.length() >= 2) { - myTraceIndent = myTraceIndent.substring(0, myTraceIndent.length()-2); - } - } - - public String printTrace() { - return StringUtil.join(myTrace, "\n"); - } - - public boolean tracing() { - return myTrace != null; - } - - @Nullable - public PyType getType(@NotNull PyTypedElement element) { - synchronized (myEvaluated) { - if (myEvaluated.containsKey(element)) { - final PyType pyType = myEvaluated.get(element); - if (pyType != null) { - pyType.assertValid(element.toString()); - } - return pyType; - } - } - final Set evaluating = myEvaluating.get(); - if (evaluating.contains(element)) { - return null; - } - evaluating.add(element); - try { - PyType result = element.getType(this); - if (result != null) { - result.assertValid(element.toString()); - } - synchronized (myEvaluated) { - myEvaluated.put(element, result); - } - return result; - } - finally { - evaluating.remove(element); - } - } - - public boolean maySwitchToAST(@NotNull StubBasedPsiElement element) { - return myAllowStubToAST || (element.getStub() == null && (myOrigin == null || myOrigin == element.getContainingFile())); - } -} diff --git a/python/src/com/jetbrains/python/refactoring/classes/extractSuperclass/PyExtractSuperclassHandler.java b/python/src/com/jetbrains/python/refactoring/classes/extractSuperclass/PyExtractSuperclassHandler.java index 5d7d507840af..5ac191e85ec5 100644 --- a/python/src/com/jetbrains/python/refactoring/classes/extractSuperclass/PyExtractSuperclassHandler.java +++ b/python/src/com/jetbrains/python/refactoring/classes/extractSuperclass/PyExtractSuperclassHandler.java @@ -15,7 +15,6 @@ import com.jetbrains.python.refactoring.classes.PyClassMembersRefactoringSupport import com.jetbrains.python.refactoring.classes.PyClassRefactoringHandler; import com.jetbrains.python.refactoring.classes.PyMemberInfo; import com.jetbrains.python.refactoring.classes.PyMemberInfoStorage; -import com.jetbrains.python.refactoring.classes.pullUp.PyPullUpHelper; import java.util.Collection; diff --git a/python/src/com/jetbrains/python/refactoring/classes/pullUp/PyPullUpDialog.java b/python/src/com/jetbrains/python/refactoring/classes/pullUp/PyPullUpDialog.java index dbeb0436d6f9..51b14e83f5d0 100644 --- a/python/src/com/jetbrains/python/refactoring/classes/pullUp/PyPullUpDialog.java +++ b/python/src/com/jetbrains/python/refactoring/classes/pullUp/PyPullUpDialog.java @@ -6,7 +6,6 @@ import com.intellij.refactoring.RefactoringBundle; import com.intellij.refactoring.classMembers.AbstractUsesDependencyMemberInfoModel; import com.intellij.refactoring.classMembers.DependencyMemberInfoModel; import com.intellij.refactoring.ui.ConflictsDialog; -import com.intellij.ui.IdeBorderFactory; import com.intellij.util.containers.MultiMap; import com.jetbrains.python.psi.PyClass; import com.jetbrains.python.psi.PyElement; diff --git a/python/src/com/jetbrains/python/refactoring/classes/pullUp/PyPullUpHandler.java b/python/src/com/jetbrains/python/refactoring/classes/pullUp/PyPullUpHandler.java index a1c7375ddade..963935e721ac 100644 --- a/python/src/com/jetbrains/python/refactoring/classes/pullUp/PyPullUpHandler.java +++ b/python/src/com/jetbrains/python/refactoring/classes/pullUp/PyPullUpHandler.java @@ -7,7 +7,6 @@ import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.refactoring.RefactoringBundle; -import com.intellij.refactoring.lang.ElementsHandler; import com.intellij.refactoring.util.CommonRefactoringUtil; import com.intellij.util.PsiNavigateUtil; import com.jetbrains.python.PyBundle; diff --git a/python/src/com/jetbrains/python/refactoring/rename/RenamePyVariableProcessor.java b/python/src/com/jetbrains/python/refactoring/rename/RenamePyVariableProcessor.java index a36eddbb7493..5850ae45cdc3 100644 --- a/python/src/com/jetbrains/python/refactoring/rename/RenamePyVariableProcessor.java +++ b/python/src/com/jetbrains/python/refactoring/rename/RenamePyVariableProcessor.java @@ -1,7 +1,6 @@ package com.jetbrains.python.refactoring.rename; import com.intellij.psi.PsiElement; -import com.intellij.refactoring.rename.RenamePsiElementProcessor; import com.jetbrains.python.codeInsight.PyCodeInsightSettings; import com.jetbrains.python.psi.PyElement; import org.jetbrains.annotations.NotNull; diff --git a/python/src/com/jetbrains/python/structureView/PyStructureViewFactory.java b/python/src/com/jetbrains/python/structureView/PyStructureViewFactory.java index 4777f16d3d4b..b4cc8ab0cf2e 100644 --- a/python/src/com/jetbrains/python/structureView/PyStructureViewFactory.java +++ b/python/src/com/jetbrains/python/structureView/PyStructureViewFactory.java @@ -2,14 +2,10 @@ package com.jetbrains.python.structureView; import com.intellij.ide.structureView.StructureViewBuilder; import com.intellij.ide.structureView.StructureViewModel; -import com.intellij.ide.structureView.StructureViewModelBase; import com.intellij.ide.structureView.TreeBasedStructureViewBuilder; -import com.intellij.ide.util.treeView.smartTree.Sorter; import com.intellij.lang.PsiStructureViewFactory; import com.intellij.psi.PsiFile; -import com.jetbrains.python.psi.PyClass; import com.jetbrains.python.psi.PyElement; -import com.jetbrains.python.psi.PyFunction; import org.jetbrains.annotations.NotNull; /** diff --git a/python/src/com/jetbrains/python/toolbox/Maybe.java b/python/src/com/jetbrains/python/toolbox/Maybe.java deleted file mode 100644 index bb678aa79930..000000000000 --- a/python/src/com/jetbrains/python/toolbox/Maybe.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.jetbrains.python.toolbox; - -import org.jetbrains.annotations.Nullable; - -import java.util.NoSuchElementException; - -/** - * Encapsulates a value which may be either defined or not. - * Useful when null must be a defined value. - * Instances are immutable. - *
- * User: dcheryasov - * Date: Jun 5, 2010 3:52:59 PM - */ -public class Maybe { - private boolean myIsDefined; - private T myValue; - - /** - * @return true iff this instance has a defined value. - */ - public boolean isDefined() { - return myIsDefined; - } - - - /** - * @return value if it is defined, or null. - */ - @Nullable - public T valueOrNull() { - if (myIsDefined) return myValue; - else return null; - } - - /** - * @return value if it is defined; else throws a NoSuchElementException. - */ - public T value() { - if (myIsDefined) return myValue; - else throw new NoSuchElementException("Accessing undefined value of Maybe"); - } - - /** - * Creates a defined instance. - * @param value what to store. - */ - public Maybe(T value) { - myValue = value; - myIsDefined = true; - } - - /** - * Creates an undefined instance. - */ - public Maybe() { - myValue = null; - myIsDefined = false; - } - - @Override - public String toString() { - if (myIsDefined) { - if (myValue == null) return "?(null)"; - else return "?(" + myValue.toString() + ")"; - } - else return "?_"; - } -} diff --git a/python/src/com/jetbrains/python/validation/GlobalAnnotator.java b/python/src/com/jetbrains/python/validation/GlobalAnnotator.java index 54b866559cda..b58f6bcb83b2 100644 --- a/python/src/com/jetbrains/python/validation/GlobalAnnotator.java +++ b/python/src/com/jetbrains/python/validation/GlobalAnnotator.java @@ -1,7 +1,6 @@ package com.jetbrains.python.validation; import com.intellij.lang.annotation.AnnotationHolder; -import com.intellij.psi.PsiElement; import com.intellij.psi.util.PsiTreeUtil; import com.jetbrains.python.PyBundle; import com.jetbrains.python.psi.*; diff --git a/python/src/com/jetbrains/python/validation/PyAnnotatingVisitor.java b/python/src/com/jetbrains/python/validation/PyAnnotatingVisitor.java index 3dd748b86aa2..5bd20d009a3c 100644 --- a/python/src/com/jetbrains/python/validation/PyAnnotatingVisitor.java +++ b/python/src/com/jetbrains/python/validation/PyAnnotatingVisitor.java @@ -5,8 +5,6 @@ import com.intellij.lang.annotation.Annotator; import com.intellij.openapi.diagnostic.Logger; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; -import com.jetbrains.python.PythonFileType; -import com.jetbrains.python.PythonLanguage; import com.jetbrains.python.psi.impl.PyFileImpl; import org.jetbrains.annotations.NotNull; @@ -18,13 +16,28 @@ import java.util.List; */ public class PyAnnotatingVisitor implements Annotator { private static final Logger LOGGER = Logger.getInstance(PyAnnotatingVisitor.class.getName()); + private final List myAnnotators = new ArrayList(); + private final Class[] ANNOTATOR_CLASSES = new Class[] { + AssignTargetAnnotator.class, + ParameterListAnnotator.class, + HighlightingAnnotator.class, + ReturnAnnotator.class, + TryExceptAnnotator.class, + BreakContinueAnnotator.class, + GlobalAnnotator.class, + ImportAnnotator.class, + StringLiteralQuotesAnnotator.class, + PyBuiltinAnnotator.class, + UnsupportedFeatures.class + }; + public PyAnnotatingVisitor() { - for (Class cls : ((PythonLanguage)PythonFileType.INSTANCE.getLanguage()).getAnnotators()) { + for (Class cls : ANNOTATOR_CLASSES) { PyAnnotator annotator; try { - annotator = cls.newInstance(); + annotator = (PyAnnotator)cls.newInstance(); } catch (InstantiationException e) { LOGGER.error(e); diff --git a/python/src/com/jetbrains/python/validation/PyDefinitionsAnnotator.java b/python/src/com/jetbrains/python/validation/PyDefinitionsAnnotator.java index b7cdc9503a2d..53fded84244e 100644 --- a/python/src/com/jetbrains/python/validation/PyDefinitionsAnnotator.java +++ b/python/src/com/jetbrains/python/validation/PyDefinitionsAnnotator.java @@ -6,7 +6,6 @@ import com.intellij.openapi.project.IndexNotReadyException; import com.intellij.psi.PsiElement; import com.jetbrains.python.highlighting.PyHighlighter; import com.jetbrains.python.PyNames; -import com.jetbrains.python.PyTokenTypes; import com.jetbrains.python.psi.PyClass; import com.jetbrains.python.psi.PyDecorator; import com.jetbrains.python.psi.PyDecoratorList; diff --git a/python/testSrc/com/jetbrains/python/PyTypeParserTest.java b/python/testSrc/com/jetbrains/python/PyTypeParserTest.java index 328bcc15680e..890f62890ff8 100644 --- a/python/testSrc/com/jetbrains/python/PyTypeParserTest.java +++ b/python/testSrc/com/jetbrains/python/PyTypeParserTest.java @@ -6,7 +6,6 @@ import com.jetbrains.python.psi.types.*; import java.util.ArrayList; import java.util.Collection; import java.util.List; -import java.util.Set; /** * @author yole diff --git a/python/testSrc/com/jetbrains/python/PythonConsoleParsingTest.java b/python/testSrc/com/jetbrains/python/PythonConsoleParsingTest.java index 0aee90dd2d8d..349c6acccb1b 100644 --- a/python/testSrc/com/jetbrains/python/PythonConsoleParsingTest.java +++ b/python/testSrc/com/jetbrains/python/PythonConsoleParsingTest.java @@ -6,7 +6,6 @@ import com.intellij.psi.util.PsiTreeUtil; import com.intellij.testFramework.LightVirtualFile; import com.intellij.testFramework.ParsingTestCase; import com.intellij.testFramework.TestDataPath; -import com.jetbrains.cython.CythonTokenSetContributor; import com.jetbrains.python.console.PyConsoleUtil; import com.jetbrains.python.fixtures.PyTestCase; import com.jetbrains.python.psi.LanguageLevel; From 60b6094fb8cf6746436ebfbdf9c80ee3d0ba9be4 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 7 Aug 2012 17:48:05 +0200 Subject: [PATCH 19/21] some more stuff moved to python-openapi --- .../com/jetbrains/python/PyTokenTypes.java | 0 .../PythonDialectsTokenSetContributor.java | 0 .../python/psi/impl/PyImportResolver.java | 18 ----------- .../psi/impl/PyKeywordArgumentProvider.java | 17 ---------- .../python/psi/impl/PyTypeProvider.java | 31 ------------------- 5 files changed, 66 deletions(-) rename python/{ => openapi}/src/com/jetbrains/python/PyTokenTypes.java (100%) rename python/{ => openapi}/src/com/jetbrains/python/PythonDialectsTokenSetContributor.java (100%) delete mode 100644 python/src/com/jetbrains/python/psi/impl/PyImportResolver.java delete mode 100644 python/src/com/jetbrains/python/psi/impl/PyKeywordArgumentProvider.java delete mode 100644 python/src/com/jetbrains/python/psi/impl/PyTypeProvider.java diff --git a/python/src/com/jetbrains/python/PyTokenTypes.java b/python/openapi/src/com/jetbrains/python/PyTokenTypes.java similarity index 100% rename from python/src/com/jetbrains/python/PyTokenTypes.java rename to python/openapi/src/com/jetbrains/python/PyTokenTypes.java diff --git a/python/src/com/jetbrains/python/PythonDialectsTokenSetContributor.java b/python/openapi/src/com/jetbrains/python/PythonDialectsTokenSetContributor.java similarity index 100% rename from python/src/com/jetbrains/python/PythonDialectsTokenSetContributor.java rename to python/openapi/src/com/jetbrains/python/PythonDialectsTokenSetContributor.java diff --git a/python/src/com/jetbrains/python/psi/impl/PyImportResolver.java b/python/src/com/jetbrains/python/psi/impl/PyImportResolver.java deleted file mode 100644 index 19c365a3b3be..000000000000 --- a/python/src/com/jetbrains/python/psi/impl/PyImportResolver.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.jetbrains.python.psi.impl; - -import com.intellij.openapi.extensions.ExtensionPointName; -import com.intellij.psi.PsiElement; -import com.jetbrains.python.psi.PyElement; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -/** - * @author yole - */ -public interface PyImportResolver { - ExtensionPointName EP_NAME = ExtensionPointName.create("Pythonid.importResolver"); - - @Nullable - PsiElement resolveImportReference(@NotNull PyElement importElement, @NotNull PyQualifiedName importText, - @Nullable PyQualifiedName importFrom); -} diff --git a/python/src/com/jetbrains/python/psi/impl/PyKeywordArgumentProvider.java b/python/src/com/jetbrains/python/psi/impl/PyKeywordArgumentProvider.java deleted file mode 100644 index 94529229f70b..000000000000 --- a/python/src/com/jetbrains/python/psi/impl/PyKeywordArgumentProvider.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.jetbrains.python.psi.impl; - -import com.intellij.openapi.extensions.ExtensionPointName; -import com.jetbrains.python.psi.PyFunction; - -import java.util.List; - -/** - * Allows to provide a custom list of keyword arguments for a function that uses **kwargs. - * - * @author yole - */ -public interface PyKeywordArgumentProvider { - ExtensionPointName EP_NAME = ExtensionPointName.create("Pythonid.keywordArgumentProvider"); - - List getKeywordArguments(PyFunction function); -} diff --git a/python/src/com/jetbrains/python/psi/impl/PyTypeProvider.java b/python/src/com/jetbrains/python/psi/impl/PyTypeProvider.java deleted file mode 100644 index 722130b6f197..000000000000 --- a/python/src/com/jetbrains/python/psi/impl/PyTypeProvider.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.jetbrains.python.psi.impl; - -import com.intellij.openapi.extensions.ExtensionPointName; -import com.intellij.psi.PsiElement; -import com.jetbrains.python.psi.*; -import com.jetbrains.python.psi.types.PyType; -import com.jetbrains.python.psi.types.TypeEvalContext; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -/** - * @author yole - */ -public interface PyTypeProvider { - ExtensionPointName EP_NAME = ExtensionPointName.create("Pythonid.typeProvider"); - - @Nullable - PyType getReferenceExpressionType(PyReferenceExpression referenceExpression, TypeEvalContext context); - - @Nullable - PyType getReferenceType(@NotNull PsiElement referenceTarget, TypeEvalContext context, @Nullable PsiElement anchor); - - @Nullable - PyType getParameterType(PyNamedParameter param, final PyFunction func, TypeEvalContext context); - - @Nullable - PyType getReturnType(PyFunction function, @Nullable PyQualifiedExpression callSite, TypeEvalContext context); - - @Nullable - PyType getIterationType(PyClass iterable); -} From 7d22e415dbd3ede8ce6291478d1c383a63431fd3 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 7 Aug 2012 17:58:36 +0200 Subject: [PATCH 20/21] include openapi in plugin build sourcepath --- python/build/python_plugin_build.gant | 1 + 1 file changed, 1 insertion(+) diff --git a/python/build/python_plugin_build.gant b/python/build/python_plugin_build.gant index 92c8f9f42a39..7cf926e6c9fe 100644 --- a/python/build/python_plugin_build.gant +++ b/python/build/python_plugin_build.gant @@ -77,6 +77,7 @@ target(name: "compile", description: "Compile module python") { include(name: "src") include(name: "pluginSrc") include(name: "pydevSrc") + include(name: "openapi/src") } dirset(dir: "${pluginHome}/../ultimate/ultimate-verifier") { include(name: "src") From 1403d0d042cb1695bfa5ccef57abf99505725e37 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Tue, 7 Aug 2012 20:08:56 +0400 Subject: [PATCH 21/21] Fix builds --- python/build/pycharm_build.gant | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/build/pycharm_build.gant b/python/build/pycharm_build.gant index 44681a303f37..7f6a7ffc5401 100644 --- a/python/build/pycharm_build.gant +++ b/python/build/pycharm_build.gant @@ -287,8 +287,8 @@ private layoutFull(Map args, String target, Set usedJars) { module("forms_rt") } - jar("resources_en.jar") { - // custom resources go first + jar([name: "resources_en.jar", duplicate: "preserve"]) { + // custom resources should go first fileset(dir: "$home/python/resources") { include(name: "**/tips/**") }