PY-18965 Fixed: Python version 2.7 does not have method exec - regression
authorSemyon Proshev <Semyon.Proshev@jetbrains.com>
Tue, 12 Jul 2016 11:51:24 +0000 (14:51 +0300)
committerSemyon Proshev <Semyon.Proshev@jetbrains.com>
Wed, 10 Aug 2016 14:15:52 +0000 (17:15 +0300)
Ignore call 'exec' expressions in PyCompatibilityInspection

python/src/com/jetbrains/python/inspections/PyCompatibilityInspection.java
python/testData/inspections/PyCompatibilityInspection3K/exec.py [new file with mode: 0644]
python/testSrc/com/jetbrains/python/inspections/Py3CompatibilityInspectionTest.java [new file with mode: 0644]

index 712a266e14b8761222cad36e8e95b24d9505d118..c96ee2753707fc561550b81369d94f1dc31e1fb4 100644 (file)
@@ -198,7 +198,7 @@ public class PyCompatibilityInspection extends PyInspection {
           for (int i = 0; i != myVersionsToProcess.size(); ++i) {
             LanguageLevel languageLevel = myVersionsToProcess.get(i);
             if (PyBuiltinCache.getInstance(resolved).isBuiltin(resolved)) {
-              if (!"print".equals(name) && !myUsedImports.contains(name) && UnsupportedFeaturesUtil.BUILTINS.get(languageLevel).contains(name)) {
+              if (!"print".equals(name) && !"exec".equals(name) && !myUsedImports.contains(name) && UnsupportedFeaturesUtil.BUILTINS.get(languageLevel).contains(name)) {
                 len = appendLanguageLevel(message, len, languageLevel);
               }
             }
diff --git a/python/testData/inspections/PyCompatibilityInspection3K/exec.py b/python/testData/inspections/PyCompatibilityInspection3K/exec.py
new file mode 100644 (file)
index 0000000..6ac75a0
--- /dev/null
@@ -0,0 +1 @@
+exec('import __builtin__')
\ No newline at end of file
diff --git a/python/testSrc/com/jetbrains/python/inspections/Py3CompatibilityInspectionTest.java b/python/testSrc/com/jetbrains/python/inspections/Py3CompatibilityInspectionTest.java
new file mode 100644 (file)
index 0000000..6984cfc
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2000-2016 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.jetbrains.python.inspections;
+
+import com.intellij.testFramework.LightProjectDescriptor;
+import com.jetbrains.python.fixtures.PyTestCase;
+import org.jetbrains.annotations.Nullable;
+
+public class Py3CompatibilityInspectionTest extends PyTestCase {
+
+  @Nullable
+  @Override
+  protected LightProjectDescriptor getProjectDescriptor() {
+    return ourPy3Descriptor;
+  }
+
+  // PY-18965
+  public void testExec() {
+    doTest();
+  }
+
+  private void doTest() {
+    myFixture.configureByFile("inspections/PyCompatibilityInspection3K/" + getTestName(true) + ".py");
+    myFixture.enableInspections(PyCompatibilityInspection.class);
+    myFixture.checkHighlighting(true, false, false);
+  }
+}