diff --git a/its/plugin/pom.xml b/its/plugin/pom.xml
index 5a7c0908b..a29697e62 100644
--- a/its/plugin/pom.xml
+++ b/its/plugin/pom.xml
@@ -10,7 +10,7 @@
it-python-plugin
-
+ pom
Python :: ITs :: Plugin
2012
@@ -20,7 +20,6 @@
-server
-
org.sonarsource.orchestrator
diff --git a/its/plugin/profiles/profile-python-custom-rules.xml b/its/plugin/profiles/profile-python-custom-rules.xml
new file mode 100644
index 000000000..4e3557045
--- /dev/null
+++ b/its/plugin/profiles/profile-python-custom-rules.xml
@@ -0,0 +1,17 @@
+
+
+ python-custom-rules-profile
+ py
+
+
+ python-custom-rules
+ visitor
+ MAJOR
+
+
+ python-custom-rules
+ subscription
+ MAJOR
+
+
+
diff --git a/its/plugin/projects/custom_rules/src/simple.py b/its/plugin/projects/custom_rules/src/simple.py
new file mode 100644
index 000000000..88f72dda5
--- /dev/null
+++ b/its/plugin/projects/custom_rules/src/simple.py
@@ -0,0 +1,10 @@
+# simple check for custom rules
+
+class A:
+ def fun(): # NOK - function definition
+ pass
+
+ for foo in bar: # NOK - for statement
+ pass
+ else:
+ pass
diff --git a/its/plugin/python-custom-rules-plugin/pom.xml b/its/plugin/python-custom-rules-plugin/pom.xml
new file mode 100644
index 000000000..3a1f2cc0d
--- /dev/null
+++ b/its/plugin/python-custom-rules-plugin/pom.xml
@@ -0,0 +1,71 @@
+
+
+ 4.0.0
+
+
+ org.sonarsource.python
+ it-python-plugin
+ 2.0-SNAPSHOT
+
+
+ python-custom-rules-plugin
+ sonar-plugin
+
+ Python Custom Rules Plugin
+ Python Custom Rules
+
+
+
+ org.sonarsource.sonarqube
+ sonar-plugin-api
+
+
+ org.sonarsource.python
+ sonar-python-plugin
+ sonar-plugin
+ ${project.version}
+ provided
+
+
+ org.sonarsource.python
+ python-checks-testkit
+ ${project.version}
+ test
+
+
+ junit
+ junit
+ test
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ false
+
+
+
+ org.sonarsource.sonar-packaging-maven-plugin
+ sonar-packaging-maven-plugin
+ true
+
+ org.sonar.samples.python.CustomPythonRulesPlugin
+
+
+
+
+ maven-compiler-plugin
+
+ 1.8
+ 1.8
+
+
+
+
+
+
diff --git a/its/plugin/python-custom-rules-plugin/src/main/java/org/sonar/samples/python/CustomPythonRuleRepository.java b/its/plugin/python-custom-rules-plugin/src/main/java/org/sonar/samples/python/CustomPythonRuleRepository.java
new file mode 100644
index 000000000..6e6cfd387
--- /dev/null
+++ b/its/plugin/python-custom-rules-plugin/src/main/java/org/sonar/samples/python/CustomPythonRuleRepository.java
@@ -0,0 +1,53 @@
+/*
+ * SonarQube Python Plugin
+ * Copyright (C) 2012-2019 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.samples.python;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.sonar.api.server.rule.RulesDefinition;
+import org.sonar.api.server.rule.RulesDefinitionAnnotationLoader;
+import org.sonar.plugins.python.api.PythonCustomRuleRepository;
+
+public class CustomPythonRuleRepository implements RulesDefinition, PythonCustomRuleRepository {
+
+ @Override
+ public void define(Context context) {
+ NewRepository repository = context.createRepository(repositoryKey(), "py").setName("My custom repo");
+ new RulesDefinitionAnnotationLoader().load(repository, checkClasses().toArray(new Class[] {}));
+ Map remediationCosts = new HashMap<>();
+ remediationCosts.put("visitor", "5min");
+ remediationCosts.put("subscription", "10min");
+ repository.rules().forEach(rule -> rule.setDebtRemediationFunction(
+ rule.debtRemediationFunctions().constantPerIssue(remediationCosts.get(rule.key()))));
+ repository.done();
+ }
+
+ @Override
+ public String repositoryKey() {
+ return "python-custom-rules";
+ }
+
+ @Override
+ public List checkClasses() {
+ return Arrays.asList(CustomPythonVisitorCheck.class, CustomPythonSubscriptionCheck.class);
+ }
+}
diff --git a/its/plugin/python-custom-rules-plugin/src/main/java/org/sonar/samples/python/CustomPythonRulesPlugin.java b/its/plugin/python-custom-rules-plugin/src/main/java/org/sonar/samples/python/CustomPythonRulesPlugin.java
new file mode 100644
index 000000000..ba43f23fa
--- /dev/null
+++ b/its/plugin/python-custom-rules-plugin/src/main/java/org/sonar/samples/python/CustomPythonRulesPlugin.java
@@ -0,0 +1,31 @@
+/*
+ * SonarQube Python Plugin
+ * Copyright (C) 2012-2019 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.samples.python;
+
+import org.sonar.api.Plugin;
+
+public class CustomPythonRulesPlugin implements Plugin {
+
+ @Override
+ public void define(Context context) {
+ context.addExtension(CustomPythonRuleRepository.class);
+ }
+
+}
diff --git a/its/plugin/python-custom-rules-plugin/src/main/java/org/sonar/samples/python/CustomPythonSubscriptionCheck.java b/its/plugin/python-custom-rules-plugin/src/main/java/org/sonar/samples/python/CustomPythonSubscriptionCheck.java
new file mode 100644
index 000000000..639cc2084
--- /dev/null
+++ b/its/plugin/python-custom-rules-plugin/src/main/java/org/sonar/samples/python/CustomPythonSubscriptionCheck.java
@@ -0,0 +1,39 @@
+/*
+ * SonarQube Python Plugin
+ * Copyright (C) 2012-2019 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.samples.python;
+
+import org.sonar.check.Priority;
+import org.sonar.check.Rule;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.ForStatement;
+import org.sonar.plugins.python.api.tree.Tree;
+
+@Rule(
+ key = "subscription",
+ priority = Priority.MINOR,
+ name = "Python subscription visitor check",
+ description = "desc")
+public class CustomPythonSubscriptionCheck extends PythonSubscriptionCheck {
+
+ @Override
+ public void initialize(Context context) {
+ context.registerSyntaxNodeConsumer(Tree.Kind.FOR_STMT, ctx -> ctx.addIssue(((ForStatement) ctx.syntaxNode()).forKeyword(), "For statement."));
+ }
+}
diff --git a/its/plugin/python-custom-rules-plugin/src/main/java/org/sonar/samples/python/CustomPythonVisitorCheck.java b/its/plugin/python-custom-rules-plugin/src/main/java/org/sonar/samples/python/CustomPythonVisitorCheck.java
new file mode 100644
index 000000000..d620c772b
--- /dev/null
+++ b/its/plugin/python-custom-rules-plugin/src/main/java/org/sonar/samples/python/CustomPythonVisitorCheck.java
@@ -0,0 +1,40 @@
+/*
+ * SonarQube Python Plugin
+ * Copyright (C) 2012-2019 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.samples.python;
+
+import org.sonar.check.Priority;
+import org.sonar.check.Rule;
+import org.sonar.plugins.python.api.PythonCheckTree;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+
+@Rule(
+ key = "visitor",
+ priority = Priority.MINOR,
+ name = "Python visitor check",
+ description = "desc")
+public class CustomPythonVisitorCheck extends PythonCheckTree {
+
+ @Override
+ public void visitFunctionDef(FunctionDef pyFunctionDefTree) {
+ addIssue(pyFunctionDefTree.name(), "Function def.");
+ super.visitFunctionDef(pyFunctionDefTree);
+ }
+
+}
diff --git a/its/plugin/python-custom-rules-plugin/src/main/java/org/sonar/samples/python/package-info.java b/its/plugin/python-custom-rules-plugin/src/main/java/org/sonar/samples/python/package-info.java
new file mode 100644
index 000000000..17befc5d7
--- /dev/null
+++ b/its/plugin/python-custom-rules-plugin/src/main/java/org/sonar/samples/python/package-info.java
@@ -0,0 +1,24 @@
+/*
+ * SonarQube Python Plugin
+ * Copyright (C) 2012-2019 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+@ParametersAreNonnullByDefault
+package org.sonar.samples.python;
+
+import javax.annotation.ParametersAreNonnullByDefault;
+
diff --git a/its/plugin/python-custom-rules-plugin/src/test/java/org/sonar/samples/python/CustomPythonRuleRepositoryTest.java b/its/plugin/python-custom-rules-plugin/src/test/java/org/sonar/samples/python/CustomPythonRuleRepositoryTest.java
new file mode 100644
index 000000000..0c5668759
--- /dev/null
+++ b/its/plugin/python-custom-rules-plugin/src/test/java/org/sonar/samples/python/CustomPythonRuleRepositoryTest.java
@@ -0,0 +1,39 @@
+/*
+ * SonarQube Python Plugin
+ * Copyright (C) 2012-2019 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.samples.python;
+
+import org.junit.Test;
+import org.sonar.api.server.rule.RulesDefinition;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class CustomPythonRuleRepositoryTest {
+
+ @Test
+ public void test_rule_repository() {
+ CustomPythonRuleRepository customPythonRuleRepository = new CustomPythonRuleRepository();
+ RulesDefinition.Context context = new RulesDefinition.Context();
+ customPythonRuleRepository.define(context);
+ assertThat(customPythonRuleRepository.repositoryKey()).isEqualTo("python-custom-rules");
+ assertThat(context.repositories()).hasSize(1).extracting("key").containsExactly(customPythonRuleRepository.repositoryKey());
+ assertThat(context.repositories().get(0).rules()).hasSize(2);
+ assertThat(customPythonRuleRepository.checkClasses()).hasSize(2);
+ }
+}
diff --git a/its/plugin/python-custom-rules-plugin/src/test/java/org/sonar/samples/python/CustomPythonRulesPluginTest.java b/its/plugin/python-custom-rules-plugin/src/test/java/org/sonar/samples/python/CustomPythonRulesPluginTest.java
new file mode 100644
index 000000000..052863fdd
--- /dev/null
+++ b/its/plugin/python-custom-rules-plugin/src/test/java/org/sonar/samples/python/CustomPythonRulesPluginTest.java
@@ -0,0 +1,41 @@
+/*
+ * SonarQube Python Plugin
+ * Copyright (C) 2012-2019 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.samples.python;
+
+import org.junit.Test;
+import org.sonar.api.Plugin;
+import org.sonar.api.SonarEdition;
+import org.sonar.api.SonarQubeSide;
+import org.sonar.api.SonarRuntime;
+import org.sonar.api.internal.PluginContextImpl;
+import org.sonar.api.internal.SonarRuntimeImpl;
+import org.sonar.api.utils.Version;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class CustomPythonRulesPluginTest {
+ @Test
+ public void test() {
+ SonarRuntime sonarRuntime = SonarRuntimeImpl.forSonarQube(Version.create(7, 9), SonarQubeSide.SCANNER, SonarEdition.DEVELOPER);
+ Plugin.Context context = new PluginContextImpl.Builder().setSonarRuntime(sonarRuntime).build();
+ new CustomPythonRulesPlugin().define(context);
+ assertThat(context.getExtensions()).hasSize(1);
+ }
+}
diff --git a/its/plugin/python-custom-rules-plugin/src/test/java/org/sonar/samples/python/CustomPythonSubscriptionCheckTest.java b/its/plugin/python-custom-rules-plugin/src/test/java/org/sonar/samples/python/CustomPythonSubscriptionCheckTest.java
new file mode 100644
index 000000000..145e33166
--- /dev/null
+++ b/its/plugin/python-custom-rules-plugin/src/test/java/org/sonar/samples/python/CustomPythonSubscriptionCheckTest.java
@@ -0,0 +1,30 @@
+/*
+ * SonarQube Python Plugin
+ * Copyright (C) 2012-2019 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.samples.python;
+
+import org.junit.Test;
+import org.sonar.python.checks.utils.PythonCheckVerifier;
+
+public class CustomPythonSubscriptionCheckTest {
+ @Test
+ public void test() {
+ PythonCheckVerifier.verify("src/test/resources/checks/customPythonSubscriptionCheck.py", new CustomPythonSubscriptionCheck());
+ }
+}
diff --git a/its/plugin/python-custom-rules-plugin/src/test/java/org/sonar/samples/python/CustomPythonVisitorCheckTest.java b/its/plugin/python-custom-rules-plugin/src/test/java/org/sonar/samples/python/CustomPythonVisitorCheckTest.java
new file mode 100644
index 000000000..6b6fba37e
--- /dev/null
+++ b/its/plugin/python-custom-rules-plugin/src/test/java/org/sonar/samples/python/CustomPythonVisitorCheckTest.java
@@ -0,0 +1,31 @@
+/*
+ * SonarQube Python Plugin
+ * Copyright (C) 2012-2019 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.samples.python;
+
+
+import org.junit.Test;
+import org.sonar.python.checks.utils.PythonCheckVerifier;
+
+public class CustomPythonVisitorCheckTest {
+ @Test
+ public void test() {
+ PythonCheckVerifier.verify("src/test/resources/checks/customPythonVisitorCheck.py", new CustomPythonVisitorCheck());
+ }
+}
diff --git a/its/plugin/python-custom-rules-plugin/src/test/resources/checks/customPythonSubscriptionCheck.py b/its/plugin/python-custom-rules-plugin/src/test/resources/checks/customPythonSubscriptionCheck.py
new file mode 100644
index 000000000..0dbd62c4f
--- /dev/null
+++ b/its/plugin/python-custom-rules-plugin/src/test/resources/checks/customPythonSubscriptionCheck.py
@@ -0,0 +1,4 @@
+class A:
+ for i in foo: # Noncompliant {{For statement.}}
+# ^^^
+ pass
diff --git a/its/plugin/python-custom-rules-plugin/src/test/resources/checks/customPythonVisitorCheck.py b/its/plugin/python-custom-rules-plugin/src/test/resources/checks/customPythonVisitorCheck.py
new file mode 100644
index 000000000..aeda8ea08
--- /dev/null
+++ b/its/plugin/python-custom-rules-plugin/src/test/resources/checks/customPythonVisitorCheck.py
@@ -0,0 +1,4 @@
+class A:
+ def fun(): # Noncompliant {{Function def.}}
+# ^^^
+ pass
diff --git a/its/plugin/src/test/java/com/sonar/python/it/plugin/CustomRulesTest.java b/its/plugin/src/test/java/com/sonar/python/it/plugin/CustomRulesTest.java
new file mode 100644
index 000000000..52f492bbb
--- /dev/null
+++ b/its/plugin/src/test/java/com/sonar/python/it/plugin/CustomRulesTest.java
@@ -0,0 +1,79 @@
+/*
+ * SonarQube Python Plugin
+ * Copyright (C) 2012-2019 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package com.sonar.python.it.plugin;
+
+import com.sonar.orchestrator.Orchestrator;
+import com.sonar.orchestrator.build.SonarScanner;
+import java.io.File;
+import java.util.List;
+import org.junit.BeforeClass;
+import org.junit.ClassRule;
+import org.junit.Test;
+import org.sonarqube.ws.Issues;
+import org.sonarqube.ws.client.issues.SearchRequest;
+
+import static com.sonar.python.it.plugin.Tests.newWsClient;
+import static java.util.Collections.singletonList;
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class CustomRulesTest {
+
+ @ClassRule
+ public static Orchestrator orchestrator = Tests.ORCHESTRATOR;
+ private static final String PROJECT_KEY = "custom-rules";
+ private static final String PROJECT_NAME = "Custom Rules";
+
+ @BeforeClass
+ public static void prepare() {
+ orchestrator.getServer().provisionProject(PROJECT_KEY, PROJECT_NAME);
+ orchestrator.getServer().associateProjectToQualityProfile(PROJECT_KEY, "py", "python-custom-rules-profile");
+ SonarScanner build = SonarScanner.create()
+ .setProjectDir(new File("projects/custom_rules"))
+ .setProjectKey(PROJECT_KEY)
+ .setProjectName(PROJECT_NAME)
+ .setProjectVersion("1.0")
+ .setSourceDirs("src");
+ orchestrator.executeBuild(build);
+ }
+
+ @Test
+ public void base_tree_visitor_check() {
+ List issues = issues("python-custom-rules:visitor");
+ assertSingleIssue(issues, 4, "Function def.", "5min");
+ }
+
+ @Test
+ public void subscription_base_visitor_check() {
+ List issues = issues("python-custom-rules:subscription");
+ assertSingleIssue(issues, 7, "For statement.", "10min");
+ }
+
+ private void assertSingleIssue(List issues, int expectedLine, String expectedMessage, String expectedDebt) {
+ assertThat(issues).hasSize(1);
+ Issues.Issue issue = issues.get(0);
+ assertThat(issue.getLine()).isEqualTo(expectedLine);
+ assertThat(issue.getMessage()).isEqualTo(expectedMessage);
+ assertThat(issue.getDebt()).isEqualTo(expectedDebt);
+ }
+
+ private static List issues(String rulekey) {
+ return newWsClient().issues().search(new SearchRequest().setRules(singletonList(rulekey))).getIssuesList();
+ }
+}
diff --git a/its/plugin/src/test/java/com/sonar/python/it/plugin/Tests.java b/its/plugin/src/test/java/com/sonar/python/it/plugin/Tests.java
index b3d8ccddd..94b3c9414 100644
--- a/its/plugin/src/test/java/com/sonar/python/it/plugin/Tests.java
+++ b/its/plugin/src/test/java/com/sonar/python/it/plugin/Tests.java
@@ -67,6 +67,9 @@ public final class Tests {
public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv()
.setSonarVersion(System.getProperty(SQ_VERSION_PROPERTY, DEFAULT_SQ_VERSION))
.addPlugin(PLUGIN_LOCATION)
+ // Custom rules plugin
+ .addPlugin(FileLocation.byWildcardMavenFilename(new File("python-custom-rules-plugin/target"), "python-custom-rules-plugin-*.jar"))
+ .restoreProfileAtStartup(FileLocation.of("profiles/profile-python-custom-rules.xml"))
.restoreProfileAtStartup(FileLocation.of("profiles/no_rule.xml"))
.restoreProfileAtStartup(FileLocation.of("profiles/pylint.xml"))
.restoreProfileAtStartup(FileLocation.of("profiles/nosonar.xml"))
diff --git a/pom.xml b/pom.xml
index b59944cb5..8e2af5caa 100644
--- a/pom.xml
+++ b/pom.xml
@@ -51,6 +51,7 @@
sonar-python-plugin
sslr-python-toolkit
its
+ python-checks-testkit
diff --git a/python-checks-testkit/pom.xml b/python-checks-testkit/pom.xml
new file mode 100644
index 000000000..246605b45
--- /dev/null
+++ b/python-checks-testkit/pom.xml
@@ -0,0 +1,40 @@
+
+
+ 4.0.0
+
+ python
+ org.sonarsource.python
+ 2.0-SNAPSHOT
+
+
+ python-checks-testkit
+
+
+ ${project.groupId}
+ python-squid
+ ${project.version}
+
+
+ org.sonarsource.sonarqube
+ sonar-plugin-api
+
+
+ com.google.guava
+ guava
+
+
+ junit
+ junit
+ compile
+
+
+ org.assertj
+ assertj-core
+ compile
+
+
+
+
+
diff --git a/python-checks/src/test/java/org/sonar/python/checks/utils/PythonCheckVerifier.java b/python-checks-testkit/src/main/java/org/sonar/python/checks/utils/PythonCheckVerifier.java
similarity index 94%
rename from python-checks/src/test/java/org/sonar/python/checks/utils/PythonCheckVerifier.java
rename to python-checks-testkit/src/main/java/org/sonar/python/checks/utils/PythonCheckVerifier.java
index 7e76b07fc..7e7376260 100644
--- a/python-checks/src/test/java/org/sonar/python/checks/utils/PythonCheckVerifier.java
+++ b/python-checks-testkit/src/main/java/org/sonar/python/checks/utils/PythonCheckVerifier.java
@@ -28,14 +28,14 @@
import java.util.Iterator;
import java.util.List;
import org.sonar.python.IssueLocation;
-import org.sonar.python.PythonCheck;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.PythonVisitorContext;
+import org.sonar.plugins.python.api.PythonCheck;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.PythonVisitorContext;
import org.sonar.python.SubscriptionVisitor;
import org.sonar.python.TestPythonVisitorRunner;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.Trivia;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Trivia;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.fail;
@@ -68,7 +68,7 @@ public static void verify(String path, PythonCheck check) {
File file = new File(path);
PythonVisitorContext pythonVisitorContext = TestPythonVisitorRunner.scanFile(file, verifier);
- Iterator actualIssues = getActualIssues(file, check, pythonVisitorContext);
+ Iterator actualIssues = getActualIssues(check, pythonVisitorContext);
List expectedIssues = verifier.expectedIssues;
for (TestIssue expected : expectedIssues) {
@@ -127,7 +127,7 @@ private static List secondary(PreciseIssue issue) {
return Ordering.natural().sortedCopy(result);
}
- private static Iterator getActualIssues(File file, PythonCheck check, PythonVisitorContext pythonVisitorContext) {
+ private static Iterator getActualIssues(PythonCheck check, PythonVisitorContext pythonVisitorContext) {
List issues = scanFileForIssues(check, pythonVisitorContext);
List sortedIssues = Ordering.natural().onResultOf(new IssueToLine()).sortedCopy(issues);
return sortedIssues.iterator();
diff --git a/python-checks/src/test/java/org/sonar/python/checks/utils/TestIssue.java b/python-checks-testkit/src/main/java/org/sonar/python/checks/utils/TestIssue.java
similarity index 90%
rename from python-checks/src/test/java/org/sonar/python/checks/utils/TestIssue.java
rename to python-checks-testkit/src/main/java/org/sonar/python/checks/utils/TestIssue.java
index 010c2f2a1..e2062acb8 100644
--- a/python-checks/src/test/java/org/sonar/python/checks/utils/TestIssue.java
+++ b/python-checks-testkit/src/main/java/org/sonar/python/checks/utils/TestIssue.java
@@ -19,7 +19,6 @@
*/
package org.sonar.python.checks.utils;
-import com.google.common.primitives.Ints;
import java.util.List;
import javax.annotation.Nullable;
@@ -47,12 +46,6 @@ public TestIssue message(String message) {
return this;
}
- public TestIssue columns(int startColumn, int endColumn) {
- startColumn(startColumn);
- endColumn(endColumn);
- return this;
- }
-
public TestIssue startColumn(int startColumn) {
this.startColumn = startColumn;
return this;
@@ -73,10 +66,6 @@ public TestIssue endLine(int endLine) {
return this;
}
- public TestIssue secondary(int... lines) {
- return secondary(Ints.asList(lines));
- }
-
public TestIssue secondary(List secondaryLines) {
this.secondaryLines = secondaryLines;
return this;
diff --git a/python-checks-testkit/src/test/java/org/sonar/python/checks/utils/PythonCheckVerifierTest.java b/python-checks-testkit/src/test/java/org/sonar/python/checks/utils/PythonCheckVerifierTest.java
new file mode 100644
index 000000000..59be6d91b
--- /dev/null
+++ b/python-checks-testkit/src/test/java/org/sonar/python/checks/utils/PythonCheckVerifierTest.java
@@ -0,0 +1,121 @@
+/*
+ * SonarQube Python Plugin
+ * Copyright (C) 2011-2019 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.python.checks.utils;
+
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+import org.sonar.plugins.python.api.PythonCheck;
+import org.sonar.plugins.python.api.PythonCheckTree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.Tree;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.fail;
+
+@RunWith(Parameterized.class)
+public class PythonCheckVerifierTest {
+
+ private static final String BASE_DIR = "src/test/resources/";
+ private final String file;
+ private final String expectedMessage;
+ private static final FuncdefVisitor baseTreeCheck = new FuncdefVisitor();
+ private static final FunctiondefSubscription subscriptionCheck = new FunctiondefSubscription();
+
+ private static class FuncdefVisitor extends PythonCheckTree {
+ @Override
+ public void visitFunctionDef(FunctionDef pyFunctionDefTree) {
+ addIssue(pyFunctionDefTree.name(), "the message.").secondary(pyFunctionDefTree.colon(), "second").withCost(42);
+ super.visitFunctionDef(pyFunctionDefTree);
+ }
+ }
+
+ private static class FunctiondefSubscription extends PythonSubscriptionCheck {
+ @Override
+ public void initialize(Context context) {
+ context.registerSyntaxNodeConsumer(Tree.Kind.FUNCDEF, ctx -> {
+ FunctionDef pyFunctionDefTree = (FunctionDef) ctx.syntaxNode();
+ ctx.addIssue(pyFunctionDefTree.name(), "the message.").secondary(pyFunctionDefTree.colon(), "second").withCost(42);
+ });
+ }
+ }
+
+ @Parameters(name = "{0}")
+ public static Object[][] data() {
+ return new Object[][]{
+ {"compliant", ""},
+ {"compliant_notation", ""},
+ {"compliant_notation_with_minus", ""},
+ {"invalid_param", "Invalid param at line 1: someInvalidParam"},
+ {"invalid_param_separator", "Invalid param at line 1: someInvalidParam!!!!!42"},
+ {"missing_assertion", "Invalid test file: a precise location is provided at line 2 but no issue is asserted at line 1"},
+ {"missing_assertion_with_issue", "Invalid test file: a precise location is provided at line 4 but no issue is asserted at line 3"},
+ {"missing_issue", "Missing issue at line 1"},
+ {"missing_issue_multiple", "Missing issue at line 1"},
+ {"unexpected_issue", "Unexpected issue at line 1: \"the message.\""},
+ {"unexpected_issue_multiple", "Unexpected issue at line 1: \"the message.\""},
+ {"wrong_cost", "[Bad effortToFix at line 1] expected:<[23]> but was:<[42]>"},
+ {"wrong_precise_comment", "Line 2: comments asserting a precise location should start at column 1"},
+ };
+ }
+
+ public PythonCheckVerifierTest(String file, String expectedMessage) {
+ this.file = BASE_DIR+file+".py";
+ this.expectedMessage = expectedMessage;
+ }
+
+ @Test
+ public void basetree_test() {
+ if(expectedMessage.isEmpty()) {
+ assertNoFailureOfVerifier(file, baseTreeCheck);
+ } else {
+ assertFailOfVerifier(file, expectedMessage, baseTreeCheck);
+ }
+ }
+
+ @Test
+ public void subscription_test() {
+ if(expectedMessage.isEmpty()) {
+ assertNoFailureOfVerifier(file, subscriptionCheck);
+ } else {
+ assertFailOfVerifier(file, expectedMessage, subscriptionCheck);
+ }
+ }
+
+ private void assertNoFailureOfVerifier(String filePath, PythonCheck check) {
+ try {
+ PythonCheckVerifier.verify(filePath, check);
+ } catch (AssertionError e) {
+ fail("should not fail", e);
+ }
+ }
+
+ private static void assertFailOfVerifier(String filepath, String expectedFailureMessage, PythonCheck check) {
+ try {
+ PythonCheckVerifier.verify(filepath, check);
+ fail("should have failed");
+ } catch (AssertionError | IllegalStateException e) {
+ assertThat(e.getMessage()).isEqualTo(expectedFailureMessage);
+ }
+ }
+}
diff --git a/python-checks-testkit/src/test/resources/compliant.py b/python-checks-testkit/src/test/resources/compliant.py
new file mode 100644
index 000000000..a27af870c
--- /dev/null
+++ b/python-checks-testkit/src/test/resources/compliant.py
@@ -0,0 +1,3 @@
+def fun(): # Noncompliant [[effortToFix=42;secondary=+0;el=1]] {{the message.}}
+# ^^^
+ pass
diff --git a/python-checks-testkit/src/test/resources/compliant_notation.py b/python-checks-testkit/src/test/resources/compliant_notation.py
new file mode 100644
index 000000000..39996b975
--- /dev/null
+++ b/python-checks-testkit/src/test/resources/compliant_notation.py
@@ -0,0 +1,4 @@
+# Noncompliant@+1 [[secondary=2]] {{the message.}}
+def fun():
+# ^^^
+ pass
diff --git a/python-checks-testkit/src/test/resources/compliant_notation_with_minus.py b/python-checks-testkit/src/test/resources/compliant_notation_with_minus.py
new file mode 100644
index 000000000..b634d6e91
--- /dev/null
+++ b/python-checks-testkit/src/test/resources/compliant_notation_with_minus.py
@@ -0,0 +1,3 @@
+def fun():
+# Noncompliant@-1 [[sc=5;ec=8;secondary=-0]] {{the message.}}
+ pass
diff --git a/python-checks-testkit/src/test/resources/invalid_param.py b/python-checks-testkit/src/test/resources/invalid_param.py
new file mode 100644
index 000000000..98c8181b1
--- /dev/null
+++ b/python-checks-testkit/src/test/resources/invalid_param.py
@@ -0,0 +1,3 @@
+def fun(): # Noncompliant [[someInvalidParam=42;secondary=+0]] {{the message.}}
+# ^^^
+ pass
diff --git a/python-checks-testkit/src/test/resources/invalid_param_separator.py b/python-checks-testkit/src/test/resources/invalid_param_separator.py
new file mode 100644
index 000000000..18189e8bb
--- /dev/null
+++ b/python-checks-testkit/src/test/resources/invalid_param_separator.py
@@ -0,0 +1,3 @@
+def fun(): # Noncompliant [[someInvalidParam!!!!!42]] {{the message.}}
+# ^^^
+ pass
diff --git a/python-checks-testkit/src/test/resources/missing_assertion.py b/python-checks-testkit/src/test/resources/missing_assertion.py
new file mode 100644
index 000000000..ffd8f4c36
--- /dev/null
+++ b/python-checks-testkit/src/test/resources/missing_assertion.py
@@ -0,0 +1,3 @@
+class a:
+# ^
+ pass
diff --git a/python-checks-testkit/src/test/resources/missing_assertion_with_issue.py b/python-checks-testkit/src/test/resources/missing_assertion_with_issue.py
new file mode 100644
index 000000000..d538c2c40
--- /dev/null
+++ b/python-checks-testkit/src/test/resources/missing_assertion_with_issue.py
@@ -0,0 +1,5 @@
+def fun(): # Noncompliant
+ pass
+class a:
+# ^
+ pass
diff --git a/python-checks-testkit/src/test/resources/missing_issue.py b/python-checks-testkit/src/test/resources/missing_issue.py
new file mode 100644
index 000000000..7ef27d847
--- /dev/null
+++ b/python-checks-testkit/src/test/resources/missing_issue.py
@@ -0,0 +1,2 @@
+class a: # Noncompliant
+ pass
diff --git a/python-checks-testkit/src/test/resources/missing_issue_multiple.py b/python-checks-testkit/src/test/resources/missing_issue_multiple.py
new file mode 100644
index 000000000..6a6b515f6
--- /dev/null
+++ b/python-checks-testkit/src/test/resources/missing_issue_multiple.py
@@ -0,0 +1,4 @@
+class a: # Noncompliant
+ pass
+def fun(): # Noncompliant
+ pass
diff --git a/python-checks-testkit/src/test/resources/unexpected_issue.py b/python-checks-testkit/src/test/resources/unexpected_issue.py
new file mode 100644
index 000000000..7dd785dd5
--- /dev/null
+++ b/python-checks-testkit/src/test/resources/unexpected_issue.py
@@ -0,0 +1,2 @@
+def fun():
+ pass
diff --git a/python-checks-testkit/src/test/resources/unexpected_issue_multiple.py b/python-checks-testkit/src/test/resources/unexpected_issue_multiple.py
new file mode 100644
index 000000000..a4d1560dd
--- /dev/null
+++ b/python-checks-testkit/src/test/resources/unexpected_issue_multiple.py
@@ -0,0 +1,4 @@
+def fun():
+ pass
+def fun2(): # Noncompliant
+ pass
diff --git a/python-checks-testkit/src/test/resources/wrong_cost.py b/python-checks-testkit/src/test/resources/wrong_cost.py
new file mode 100644
index 000000000..46ee14f70
--- /dev/null
+++ b/python-checks-testkit/src/test/resources/wrong_cost.py
@@ -0,0 +1,3 @@
+def fun(): # Noncompliant [[effortToFix=23;secondary=+0]] {{the message.}}
+# ^^^
+ pass
diff --git a/python-checks-testkit/src/test/resources/wrong_precise_comment.py b/python-checks-testkit/src/test/resources/wrong_precise_comment.py
new file mode 100644
index 000000000..701a121a6
--- /dev/null
+++ b/python-checks-testkit/src/test/resources/wrong_precise_comment.py
@@ -0,0 +1,3 @@
+def fun(): # Noncompliant [[secondary=+0]] {{the message.}}
+ # ^^^
+ pass
diff --git a/python-checks/pom.xml b/python-checks/pom.xml
index 411ba5ebc..67e6e8b51 100644
--- a/python-checks/pom.xml
+++ b/python-checks/pom.xml
@@ -36,6 +36,12 @@
org.assertj
assertj-core
+
+ org.sonarsource.python
+ python-checks-testkit
+ ${project.version}
+ test
+
ch.qos.logback
logback-classic
diff --git a/python-checks/src/main/java/org/sonar/python/checks/AbstractCallExpressionCheck.java b/python-checks/src/main/java/org/sonar/python/checks/AbstractCallExpressionCheck.java
index 608955c27..b787f1379 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/AbstractCallExpressionCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/AbstractCallExpressionCheck.java
@@ -23,10 +23,10 @@
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.SubscriptionContext;
-import org.sonar.python.api.tree.CallExpression;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.SubscriptionContext;
+import org.sonar.plugins.python.api.tree.CallExpression;
+import org.sonar.plugins.python.api.tree.Tree;
import org.sonar.python.semantic.Symbol;
public abstract class AbstractCallExpressionCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/AbstractFunctionNameCheck.java b/python-checks/src/main/java/org/sonar/python/checks/AbstractFunctionNameCheck.java
index 372a2b4a0..62421a4e3 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/AbstractFunctionNameCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/AbstractFunctionNameCheck.java
@@ -20,9 +20,9 @@
package org.sonar.python.checks;
import org.sonar.check.RuleProperty;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.Tree;
public abstract class AbstractFunctionNameCheck extends AbstractNameCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/AbstractNameCheck.java b/python-checks/src/main/java/org/sonar/python/checks/AbstractNameCheck.java
index 4a08c302d..8d14aa3c1 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/AbstractNameCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/AbstractNameCheck.java
@@ -20,7 +20,7 @@
package org.sonar.python.checks;
import java.util.regex.Pattern;
-import org.sonar.python.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
public abstract class AbstractNameCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/AfterJumpStatementCheck.java b/python-checks/src/main/java/org/sonar/python/checks/AfterJumpStatementCheck.java
index 8e065254d..f6b5f572d 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/AfterJumpStatementCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/AfterJumpStatementCheck.java
@@ -23,15 +23,15 @@
import org.sonar.check.Rule;
import org.sonar.plugins.python.api.cfg.CfgBlock;
import org.sonar.plugins.python.api.cfg.ControlFlowGraph;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.SubscriptionContext;
-import org.sonar.python.api.tree.FileInput;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.StatementList;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.Tree.Kind;
-import org.sonar.python.api.tree.TryStatement;
-import org.sonar.python.tree.BaseTreeVisitor;
+import org.sonar.plugins.python.api.tree.BaseTreeVisitor;
+import org.sonar.plugins.python.api.tree.StatementList;
+import org.sonar.plugins.python.api.tree.TryStatement;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.SubscriptionContext;
+import org.sonar.plugins.python.api.tree.FileInput;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Tree.Kind;
import org.sonar.python.tree.TreeUtils;
@Rule(key = "S1763")
diff --git a/python-checks/src/main/java/org/sonar/python/checks/BackslashInStringCheck.java b/python-checks/src/main/java/org/sonar/python/checks/BackslashInStringCheck.java
index b5146be0e..75dd3bbe2 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/BackslashInStringCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/BackslashInStringCheck.java
@@ -20,9 +20,9 @@
package org.sonar.python.checks;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.StringElement;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.StringElement;
+import org.sonar.plugins.python.api.tree.Tree;
@Rule(key = "S1717")
public class BackslashInStringCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/BackticksUsageCheck.java b/python-checks/src/main/java/org/sonar/python/checks/BackticksUsageCheck.java
index 35b8d22f0..e95ffcb89 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/BackticksUsageCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/BackticksUsageCheck.java
@@ -20,8 +20,8 @@
package org.sonar.python.checks;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.Tree;
@Rule(key = BackticksUsageCheck.CHECK_KEY)
public class BackticksUsageCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/BreakContinueOutsideLoopCheck.java b/python-checks/src/main/java/org/sonar/python/checks/BreakContinueOutsideLoopCheck.java
index deca3e1c2..8316ee8f2 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/BreakContinueOutsideLoopCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/BreakContinueOutsideLoopCheck.java
@@ -21,10 +21,10 @@
import java.util.function.Consumer;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.SubscriptionContext;
-import org.sonar.python.api.tree.Statement;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.SubscriptionContext;
+import org.sonar.plugins.python.api.tree.Statement;
+import org.sonar.plugins.python.api.tree.Tree;
@Rule(key = BreakContinueOutsideLoopCheck.CHECK_KEY)
public class BreakContinueOutsideLoopCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/CheckUtils.java b/python-checks/src/main/java/org/sonar/python/checks/CheckUtils.java
index 29ad13f1f..1ff1275e9 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/CheckUtils.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/CheckUtils.java
@@ -22,10 +22,10 @@
import java.util.List;
import javax.annotation.Nullable;
import org.sonar.python.api.PythonTokenType;
-import org.sonar.python.api.tree.ArgList;
-import org.sonar.python.api.tree.Argument;
-import org.sonar.python.api.tree.ClassDef;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.ArgList;
+import org.sonar.plugins.python.api.tree.Argument;
+import org.sonar.plugins.python.api.tree.ClassDef;
+import org.sonar.plugins.python.api.tree.Tree;
public class CheckUtils {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/ClassComplexityCheck.java b/python-checks/src/main/java/org/sonar/python/checks/ClassComplexityCheck.java
index 6682d7fb0..df411ddc9 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/ClassComplexityCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/ClassComplexityCheck.java
@@ -21,9 +21,9 @@
import org.sonar.check.Rule;
import org.sonar.check.RuleProperty;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.ClassDef;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.ClassDef;
+import org.sonar.plugins.python.api.tree.Tree;
import org.sonar.python.metrics.ComplexityVisitor;
@Rule(key = "ClassComplexity")
diff --git a/python-checks/src/main/java/org/sonar/python/checks/ClassNameCheck.java b/python-checks/src/main/java/org/sonar/python/checks/ClassNameCheck.java
index e97543957..ca527cc9f 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/ClassNameCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/ClassNameCheck.java
@@ -21,9 +21,9 @@
import org.sonar.check.Rule;
import org.sonar.check.RuleProperty;
-import org.sonar.python.api.tree.ClassDef;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.ClassDef;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.Tree;
@Rule(key = ClassNameCheck.CHECK_KEY)
public class ClassNameCheck extends AbstractNameCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/CognitiveComplexityFunctionCheck.java b/python-checks/src/main/java/org/sonar/python/checks/CognitiveComplexityFunctionCheck.java
index 5c99a2cb2..cc1f397c3 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/CognitiveComplexityFunctionCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/CognitiveComplexityFunctionCheck.java
@@ -24,9 +24,9 @@
import org.sonar.check.Rule;
import org.sonar.check.RuleProperty;
import org.sonar.python.IssueLocation;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.Tree;
import org.sonar.python.metrics.CognitiveComplexityVisitor;
@Rule(key = CognitiveComplexityFunctionCheck.CHECK_KEY)
diff --git a/python-checks/src/main/java/org/sonar/python/checks/CollapsibleIfStatementsCheck.java b/python-checks/src/main/java/org/sonar/python/checks/CollapsibleIfStatementsCheck.java
index 7f104a3a9..ae21372fa 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/CollapsibleIfStatementsCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/CollapsibleIfStatementsCheck.java
@@ -23,11 +23,11 @@
import java.util.List;
import java.util.Set;
import org.sonar.check.Rule;
-import org.sonar.python.PythonCheckTree;
-import org.sonar.python.PythonVisitorContext;
-import org.sonar.python.api.tree.IfStatement;
-import org.sonar.python.api.tree.Statement;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonCheckTree;
+import org.sonar.plugins.python.api.PythonVisitorContext;
+import org.sonar.plugins.python.api.tree.IfStatement;
+import org.sonar.plugins.python.api.tree.Statement;
+import org.sonar.plugins.python.api.tree.Tree;
@Rule(key = CollapsibleIfStatementsCheck.CHECK_KEY)
public class CollapsibleIfStatementsCheck extends PythonCheckTree {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/CommentRegularExpressionCheck.java b/python-checks/src/main/java/org/sonar/python/checks/CommentRegularExpressionCheck.java
index 979e76463..7ccd8e20e 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/CommentRegularExpressionCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/CommentRegularExpressionCheck.java
@@ -22,10 +22,10 @@
import java.util.regex.Pattern;
import org.sonar.check.Rule;
import org.sonar.check.RuleProperty;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.Trivia;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Trivia;
@Rule(key = "CommentRegularExpression")
public class CommentRegularExpressionCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/CommentedCodeCheck.java b/python-checks/src/main/java/org/sonar/python/checks/CommentedCodeCheck.java
index d458b1b05..9427f4ef4 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/CommentedCodeCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/CommentedCodeCheck.java
@@ -28,15 +28,15 @@
import javax.annotation.Nullable;
import org.sonar.check.Rule;
import org.sonar.python.PythonConfiguration;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.SubscriptionContext;
-import org.sonar.python.api.tree.FileInput;
-import org.sonar.python.api.tree.Statement;
-import org.sonar.python.api.tree.StringElement;
-import org.sonar.python.api.tree.StringLiteral;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.Trivia;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.SubscriptionContext;
+import org.sonar.plugins.python.api.tree.FileInput;
+import org.sonar.plugins.python.api.tree.Statement;
+import org.sonar.plugins.python.api.tree.StringElement;
+import org.sonar.plugins.python.api.tree.StringLiteral;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Trivia;
import org.sonar.python.parser.PythonParser;
import org.sonar.python.tree.PythonTreeMaker;
diff --git a/python-checks/src/main/java/org/sonar/python/checks/DuplicatedMethodFieldNamesCheck.java b/python-checks/src/main/java/org/sonar/python/checks/DuplicatedMethodFieldNamesCheck.java
index ed78b394e..f2ed29073 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/DuplicatedMethodFieldNamesCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/DuplicatedMethodFieldNamesCheck.java
@@ -28,13 +28,13 @@
import java.util.Set;
import java.util.stream.Collectors;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.SubscriptionContext;
-import org.sonar.python.api.tree.ClassDef;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.SubscriptionContext;
+import org.sonar.plugins.python.api.tree.ClassDef;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.Tree;
import org.sonar.python.semantic.Symbol;
-import org.sonar.python.tree.BaseTreeVisitor;
+import org.sonar.plugins.python.api.tree.BaseTreeVisitor;
@Rule(key = "S1845")
public class DuplicatedMethodFieldNamesCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/EmptyNestedBlockCheck.java b/python-checks/src/main/java/org/sonar/python/checks/EmptyNestedBlockCheck.java
index 485217d84..c1337fad2 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/EmptyNestedBlockCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/EmptyNestedBlockCheck.java
@@ -21,12 +21,12 @@
import java.util.List;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
import org.sonar.python.api.PythonTokenType;
-import org.sonar.python.api.tree.StatementList;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.Tree.Kind;
+import org.sonar.plugins.python.api.tree.StatementList;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Tree.Kind;
import org.sonar.python.tree.TreeUtils;
@Rule(key = EmptyNestedBlockCheck.CHECK_KEY)
diff --git a/python-checks/src/main/java/org/sonar/python/checks/ExecStatementUsageCheck.java b/python-checks/src/main/java/org/sonar/python/checks/ExecStatementUsageCheck.java
index 98715c5a0..c0779fcd2 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/ExecStatementUsageCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/ExecStatementUsageCheck.java
@@ -20,9 +20,9 @@
package org.sonar.python.checks;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.ExecStatement;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.ExecStatement;
+import org.sonar.plugins.python.api.tree.Tree;
@Rule(key = ExecStatementUsageCheck.CHECK_KEY)
public class ExecStatementUsageCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/ExitHasBadArgumentsCheck.java b/python-checks/src/main/java/org/sonar/python/checks/ExitHasBadArgumentsCheck.java
index b9a1ad249..4d67fed30 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/ExitHasBadArgumentsCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/ExitHasBadArgumentsCheck.java
@@ -20,13 +20,13 @@
package org.sonar.python.checks;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.SubscriptionContext;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.ParameterList;
-import org.sonar.python.api.tree.Parameter;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.SubscriptionContext;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.ParameterList;
+import org.sonar.plugins.python.api.tree.Parameter;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
@Rule(key = "S2733")
public class ExitHasBadArgumentsCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/Expressions.java b/python-checks/src/main/java/org/sonar/python/checks/Expressions.java
index d52a97d70..a1c47ddd2 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/Expressions.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/Expressions.java
@@ -23,16 +23,16 @@
import java.util.HashSet;
import java.util.Set;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.AssignmentStatement;
-import org.sonar.python.api.tree.DictionaryLiteral;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.ListLiteral;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.NumericLiteral;
-import org.sonar.python.api.tree.StringLiteral;
-import org.sonar.python.api.tree.Tuple;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.Tree.Kind;
+import org.sonar.plugins.python.api.tree.AssignmentStatement;
+import org.sonar.plugins.python.api.tree.DictionaryLiteral;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.ListLiteral;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.NumericLiteral;
+import org.sonar.plugins.python.api.tree.StringLiteral;
+import org.sonar.plugins.python.api.tree.Tuple;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Tree.Kind;
import org.sonar.python.semantic.Symbol;
import org.sonar.python.semantic.Usage;
diff --git a/python-checks/src/main/java/org/sonar/python/checks/FieldDuplicatesClassNameCheck.java b/python-checks/src/main/java/org/sonar/python/checks/FieldDuplicatesClassNameCheck.java
index 2cb2ad7e2..5abfff6e9 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/FieldDuplicatesClassNameCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/FieldDuplicatesClassNameCheck.java
@@ -22,9 +22,9 @@
import java.util.HashSet;
import java.util.Set;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.ClassDef;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.ClassDef;
+import org.sonar.plugins.python.api.tree.Tree;
import org.sonar.python.semantic.Symbol;
@Rule(key = "S1700")
diff --git a/python-checks/src/main/java/org/sonar/python/checks/FieldNameCheck.java b/python-checks/src/main/java/org/sonar/python/checks/FieldNameCheck.java
index 541e96c8e..33ca8e680 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/FieldNameCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/FieldNameCheck.java
@@ -26,9 +26,9 @@
import java.util.stream.Collectors;
import org.sonar.check.Rule;
import org.sonar.check.RuleProperty;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.ClassDef;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.ClassDef;
+import org.sonar.plugins.python.api.tree.Tree;
import org.sonar.python.semantic.Symbol;
import org.sonar.python.semantic.Usage;
diff --git a/python-checks/src/main/java/org/sonar/python/checks/FileComplexityCheck.java b/python-checks/src/main/java/org/sonar/python/checks/FileComplexityCheck.java
index af13ff910..acc9bf442 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/FileComplexityCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/FileComplexityCheck.java
@@ -22,8 +22,8 @@
import java.text.MessageFormat;
import org.sonar.check.Rule;
import org.sonar.check.RuleProperty;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.Tree;
import org.sonar.python.metrics.ComplexityVisitor;
@Rule(key = "FileComplexity")
diff --git a/python-checks/src/main/java/org/sonar/python/checks/FixmeCommentCheck.java b/python-checks/src/main/java/org/sonar/python/checks/FixmeCommentCheck.java
index 1619f6ed4..7c0616c70 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/FixmeCommentCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/FixmeCommentCheck.java
@@ -21,10 +21,10 @@
import java.util.regex.Pattern;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.Trivia;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Trivia;
@Rule(key = "S1134")
public class FixmeCommentCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/FunctionComplexityCheck.java b/python-checks/src/main/java/org/sonar/python/checks/FunctionComplexityCheck.java
index 6ad22f179..0fd8e1f3b 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/FunctionComplexityCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/FunctionComplexityCheck.java
@@ -21,9 +21,9 @@
import org.sonar.check.Rule;
import org.sonar.check.RuleProperty;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.Tree;
import org.sonar.python.metrics.ComplexityVisitor;
@Rule(key = "FunctionComplexity")
diff --git a/python-checks/src/main/java/org/sonar/python/checks/FunctionNameCheck.java b/python-checks/src/main/java/org/sonar/python/checks/FunctionNameCheck.java
index ccebf4df7..9984b6e92 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/FunctionNameCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/FunctionNameCheck.java
@@ -20,7 +20,7 @@
package org.sonar.python.checks;
import org.sonar.check.Rule;
-import org.sonar.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.FunctionDef;
@Rule(key = FunctionNameCheck.CHECK_KEY)
public class FunctionNameCheck extends AbstractFunctionNameCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/HardcodedIPCheck.java b/python-checks/src/main/java/org/sonar/python/checks/HardcodedIPCheck.java
index d030ac637..e46bef04e 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/HardcodedIPCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/HardcodedIPCheck.java
@@ -25,9 +25,9 @@
import java.util.regex.Pattern;
import javax.annotation.Nullable;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.StringLiteral;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.StringLiteral;
+import org.sonar.plugins.python.api.tree.Tree;
@Rule(key = HardcodedIPCheck.CHECK_KEY)
public class HardcodedIPCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/IdenticalExpressionOnBinaryOperatorCheck.java b/python-checks/src/main/java/org/sonar/python/checks/IdenticalExpressionOnBinaryOperatorCheck.java
index 282080ec8..023ade66f 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/IdenticalExpressionOnBinaryOperatorCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/IdenticalExpressionOnBinaryOperatorCheck.java
@@ -22,13 +22,13 @@
import java.util.Arrays;
import java.util.List;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.SubscriptionContext;
-import org.sonar.python.api.tree.BinaryExpression;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.NumericLiteral;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.SubscriptionContext;
+import org.sonar.plugins.python.api.tree.BinaryExpression;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.NumericLiteral;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
@Rule(key = "S1764")
public class IdenticalExpressionOnBinaryOperatorCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/InequalityUsageCheck.java b/python-checks/src/main/java/org/sonar/python/checks/InequalityUsageCheck.java
index d08dd3a8f..5eefbda4b 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/InequalityUsageCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/InequalityUsageCheck.java
@@ -20,11 +20,11 @@
package org.sonar.python.checks;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
import org.sonar.python.api.PythonPunctuator;
-import org.sonar.python.api.tree.BinaryExpression;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.BinaryExpression;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
@Rule(key = "InequalityUsage")
public class InequalityUsageCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/InitReturnsValueCheck.java b/python-checks/src/main/java/org/sonar/python/checks/InitReturnsValueCheck.java
index 32c5f0dc0..f8e5c134a 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/InitReturnsValueCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/InitReturnsValueCheck.java
@@ -22,12 +22,12 @@
import java.util.ArrayList;
import java.util.List;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.ReturnStatement;
-import org.sonar.python.api.tree.YieldStatement;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.tree.BaseTreeVisitor;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.ReturnStatement;
+import org.sonar.plugins.python.api.tree.YieldStatement;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.BaseTreeVisitor;
@Rule(key = InitReturnsValueCheck.CHECK_KEY)
public class InitReturnsValueCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/LineLengthCheck.java b/python-checks/src/main/java/org/sonar/python/checks/LineLengthCheck.java
index a9ef27b04..4c886fa60 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/LineLengthCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/LineLengthCheck.java
@@ -22,8 +22,8 @@
import java.text.MessageFormat;
import org.sonar.check.Rule;
import org.sonar.check.RuleProperty;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.Tree;
@Rule(key = LineLengthCheck.CHECK_KEY)
public class LineLengthCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/LocalVariableAndParameterNameConventionCheck.java b/python-checks/src/main/java/org/sonar/python/checks/LocalVariableAndParameterNameConventionCheck.java
index ea2ce9513..6aa24f1e8 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/LocalVariableAndParameterNameConventionCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/LocalVariableAndParameterNameConventionCheck.java
@@ -24,10 +24,10 @@
import java.util.regex.Pattern;
import org.sonar.check.Rule;
import org.sonar.check.RuleProperty;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.SubscriptionContext;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.SubscriptionContext;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.Tree;
import org.sonar.python.semantic.Symbol;
import org.sonar.python.semantic.Usage;
diff --git a/python-checks/src/main/java/org/sonar/python/checks/LongIntegerWithLowercaseSuffixUsageCheck.java b/python-checks/src/main/java/org/sonar/python/checks/LongIntegerWithLowercaseSuffixUsageCheck.java
index bb63ad224..c7993183b 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/LongIntegerWithLowercaseSuffixUsageCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/LongIntegerWithLowercaseSuffixUsageCheck.java
@@ -20,9 +20,9 @@
package org.sonar.python.checks;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.NumericLiteral;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.NumericLiteral;
+import org.sonar.plugins.python.api.tree.Tree;
@Rule(key = LongIntegerWithLowercaseSuffixUsageCheck.CHECK_KEY)
public class LongIntegerWithLowercaseSuffixUsageCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/LoopExecutingAtMostOnceCheck.java b/python-checks/src/main/java/org/sonar/python/checks/LoopExecutingAtMostOnceCheck.java
index 8cac1337c..e9b5ead54 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/LoopExecutingAtMostOnceCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/LoopExecutingAtMostOnceCheck.java
@@ -30,14 +30,14 @@
import org.sonar.plugins.python.api.cfg.CfgBlock;
import org.sonar.plugins.python.api.cfg.CfgBranchingBlock;
import org.sonar.plugins.python.api.cfg.ControlFlowGraph;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.SubscriptionContext;
-import org.sonar.python.api.tree.FileInput;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.Tree.Kind;
-import org.sonar.python.api.tree.WhileStatement;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.SubscriptionContext;
+import org.sonar.plugins.python.api.tree.FileInput;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Tree.Kind;
+import org.sonar.plugins.python.api.tree.WhileStatement;
import org.sonar.python.tree.TreeUtils;
@Rule(key = "S1751")
diff --git a/python-checks/src/main/java/org/sonar/python/checks/MethodNameCheck.java b/python-checks/src/main/java/org/sonar/python/checks/MethodNameCheck.java
index 11872a6e1..c128d4d53 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/MethodNameCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/MethodNameCheck.java
@@ -20,7 +20,7 @@
package org.sonar.python.checks;
import org.sonar.check.Rule;
-import org.sonar.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.FunctionDef;
import static org.sonar.python.checks.CheckUtils.classHasInheritance;
import static org.sonar.python.checks.CheckUtils.getParentClassDef;
diff --git a/python-checks/src/main/java/org/sonar/python/checks/MethodShouldBeStaticCheck.java b/python-checks/src/main/java/org/sonar/python/checks/MethodShouldBeStaticCheck.java
index 2a62f4d84..24ccb26be 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/MethodShouldBeStaticCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/MethodShouldBeStaticCheck.java
@@ -21,16 +21,16 @@
import java.util.List;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.ExpressionStatement;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.ParameterList;
-import org.sonar.python.api.tree.Parameter;
-import org.sonar.python.api.tree.RaiseStatement;
-import org.sonar.python.api.tree.Statement;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.tree.BaseTreeVisitor;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.ExpressionStatement;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.ParameterList;
+import org.sonar.plugins.python.api.tree.Parameter;
+import org.sonar.plugins.python.api.tree.RaiseStatement;
+import org.sonar.plugins.python.api.tree.Statement;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.BaseTreeVisitor;
import static org.sonar.python.checks.CheckUtils.classHasInheritance;
import static org.sonar.python.checks.CheckUtils.getParentClassDef;
diff --git a/python-checks/src/main/java/org/sonar/python/checks/MissingDocstringCheck.java b/python-checks/src/main/java/org/sonar/python/checks/MissingDocstringCheck.java
index 57f1fd9a8..2b8f5c939 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/MissingDocstringCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/MissingDocstringCheck.java
@@ -21,15 +21,15 @@
import javax.annotation.CheckForNull;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.SubscriptionContext;
-import org.sonar.python.api.tree.ClassDef;
-import org.sonar.python.api.tree.FileInput;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.StringLiteral;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.Tree.Kind;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.SubscriptionContext;
+import org.sonar.plugins.python.api.tree.ClassDef;
+import org.sonar.plugins.python.api.tree.FileInput;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.StringLiteral;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Tree.Kind;
@Rule(key = MissingDocstringCheck.CHECK_KEY)
public class MissingDocstringCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/MissingNewlineAtEndOfFileCheck.java b/python-checks/src/main/java/org/sonar/python/checks/MissingNewlineAtEndOfFileCheck.java
index d7a094605..cebc9a31c 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/MissingNewlineAtEndOfFileCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/MissingNewlineAtEndOfFileCheck.java
@@ -20,8 +20,8 @@
package org.sonar.python.checks;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.Tree;
@Rule(key = "S113")
public class MissingNewlineAtEndOfFileCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/ModuleNameCheck.java b/python-checks/src/main/java/org/sonar/python/checks/ModuleNameCheck.java
index 841f995e7..8c400587b 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/ModuleNameCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/ModuleNameCheck.java
@@ -22,9 +22,9 @@
import java.util.regex.Pattern;
import org.sonar.check.Rule;
import org.sonar.check.RuleProperty;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.SubscriptionCheck;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.SubscriptionCheck;
+import org.sonar.plugins.python.api.tree.Tree;
@Rule(key = "S1578")
public class ModuleNameCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/NeedlessPassCheck.java b/python-checks/src/main/java/org/sonar/python/checks/NeedlessPassCheck.java
index 90a1b179a..917839f7d 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/NeedlessPassCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/NeedlessPassCheck.java
@@ -22,15 +22,15 @@
import java.util.List;
import java.util.stream.Collectors;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.ExpressionStatement;
-import org.sonar.python.api.tree.StatementList;
-import org.sonar.python.api.tree.Statement;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.ExpressionStatement;
+import org.sonar.plugins.python.api.tree.StatementList;
+import org.sonar.plugins.python.api.tree.Statement;
-import static org.sonar.python.api.tree.Tree.Kind.EXPRESSION_STMT;
-import static org.sonar.python.api.tree.Tree.Kind.PASS_STMT;
-import static org.sonar.python.api.tree.Tree.Kind.STATEMENT_LIST;
-import static org.sonar.python.api.tree.Tree.Kind.STRING_LITERAL;
+import static org.sonar.plugins.python.api.tree.Tree.Kind.EXPRESSION_STMT;
+import static org.sonar.plugins.python.api.tree.Tree.Kind.PASS_STMT;
+import static org.sonar.plugins.python.api.tree.Tree.Kind.STATEMENT_LIST;
+import static org.sonar.plugins.python.api.tree.Tree.Kind.STRING_LITERAL;
@Rule(key = "S2772")
public class NeedlessPassCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/NestedControlFlowDepthCheck.java b/python-checks/src/main/java/org/sonar/python/checks/NestedControlFlowDepthCheck.java
index b54313ba9..8a856a474 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/NestedControlFlowDepthCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/NestedControlFlowDepthCheck.java
@@ -24,15 +24,15 @@
import java.util.Iterator;
import org.sonar.check.Rule;
import org.sonar.check.RuleProperty;
-import org.sonar.python.PythonCheckTree;
-import org.sonar.python.PythonVisitorContext;
+import org.sonar.plugins.python.api.PythonCheckTree;
+import org.sonar.plugins.python.api.PythonVisitorContext;
import org.sonar.python.api.PythonKeyword;
-import org.sonar.python.api.tree.ForStatement;
-import org.sonar.python.api.tree.IfStatement;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.TryStatement;
-import org.sonar.python.api.tree.WhileStatement;
-import org.sonar.python.api.tree.WithStatement;
+import org.sonar.plugins.python.api.tree.ForStatement;
+import org.sonar.plugins.python.api.tree.IfStatement;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.TryStatement;
+import org.sonar.plugins.python.api.tree.WhileStatement;
+import org.sonar.plugins.python.api.tree.WithStatement;
@Rule(key = "S134")
public class NestedControlFlowDepthCheck extends PythonCheckTree {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/NewStyleClassCheck.java b/python-checks/src/main/java/org/sonar/python/checks/NewStyleClassCheck.java
index cf2b98195..af9504178 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/NewStyleClassCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/NewStyleClassCheck.java
@@ -20,9 +20,9 @@
package org.sonar.python.checks;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.ClassDef;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.ClassDef;
+import org.sonar.plugins.python.api.tree.Tree;
@Rule(key = NewStyleClassCheck.CHECK_KEY)
public class NewStyleClassCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/NoPersonReferenceInTodoCheck.java b/python-checks/src/main/java/org/sonar/python/checks/NoPersonReferenceInTodoCheck.java
index 3ffa0e95d..4d1ea6fd3 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/NoPersonReferenceInTodoCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/NoPersonReferenceInTodoCheck.java
@@ -23,11 +23,11 @@
import java.util.regex.Pattern;
import org.sonar.check.Rule;
import org.sonar.check.RuleProperty;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.SubscriptionContext;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.Trivia;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.SubscriptionContext;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Trivia;
@Rule(key = "S1707")
public class NoPersonReferenceInTodoCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/OneStatementPerLineCheck.java b/python-checks/src/main/java/org/sonar/python/checks/OneStatementPerLineCheck.java
index 12e5c8643..71ef0e372 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/OneStatementPerLineCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/OneStatementPerLineCheck.java
@@ -24,9 +24,9 @@
import java.util.List;
import java.util.Map;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.SubscriptionContext;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.SubscriptionContext;
+import org.sonar.plugins.python.api.tree.Tree;
/**
* Note that implementation differs from AbstractOneStatementPerLineCheck due to Python specifics
diff --git a/python-checks/src/main/java/org/sonar/python/checks/ParsingErrorCheck.java b/python-checks/src/main/java/org/sonar/python/checks/ParsingErrorCheck.java
index 99469324c..3b5883c25 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/ParsingErrorCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/ParsingErrorCheck.java
@@ -22,8 +22,8 @@
import com.sonar.sslr.api.RecognitionException;
import org.sonar.check.Rule;
import org.sonar.python.IssueLocation;
-import org.sonar.python.PythonCheck;
-import org.sonar.python.PythonVisitorContext;
+import org.sonar.plugins.python.api.PythonCheck;
+import org.sonar.plugins.python.api.PythonVisitorContext;
@Rule(key = "ParsingError")
public class ParsingErrorCheck implements PythonCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/PreIncrementDecrementCheck.java b/python-checks/src/main/java/org/sonar/python/checks/PreIncrementDecrementCheck.java
index 9a10cecd5..7a12d2290 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/PreIncrementDecrementCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/PreIncrementDecrementCheck.java
@@ -20,10 +20,10 @@
package org.sonar.python.checks;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.SubscriptionContext;
-import org.sonar.python.api.tree.UnaryExpression;
-import org.sonar.python.api.tree.Tree.Kind;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.SubscriptionContext;
+import org.sonar.plugins.python.api.tree.UnaryExpression;
+import org.sonar.plugins.python.api.tree.Tree.Kind;
@Rule(key = PreIncrementDecrementCheck.CHECK_KEY)
public class PreIncrementDecrementCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/PrintStatementUsageCheck.java b/python-checks/src/main/java/org/sonar/python/checks/PrintStatementUsageCheck.java
index 5313c55ea..b7efbcab1 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/PrintStatementUsageCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/PrintStatementUsageCheck.java
@@ -20,10 +20,10 @@
package org.sonar.python.checks;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.PrintStatement;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.PrintStatement;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
@Rule(key = PrintStatementUsageCheck.CHECK_KEY)
public class PrintStatementUsageCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/RedundantJumpCheck.java b/python-checks/src/main/java/org/sonar/python/checks/RedundantJumpCheck.java
index d3d3c3edb..6c45c1a90 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/RedundantJumpCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/RedundantJumpCheck.java
@@ -24,14 +24,14 @@
import org.sonar.check.Rule;
import org.sonar.plugins.python.api.cfg.CfgBlock;
import org.sonar.plugins.python.api.cfg.ControlFlowGraph;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.SubscriptionContext;
-import org.sonar.python.api.tree.FileInput;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.ReturnStatement;
-import org.sonar.python.api.tree.StatementList;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.Tree.Kind;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.SubscriptionContext;
+import org.sonar.plugins.python.api.tree.FileInput;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.ReturnStatement;
+import org.sonar.plugins.python.api.tree.StatementList;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Tree.Kind;
import org.sonar.python.cfg.PythonCfgBranchingBlock;
import org.sonar.python.tree.TreeUtils;
diff --git a/python-checks/src/main/java/org/sonar/python/checks/ReturnAndYieldInOneFunctionCheck.java b/python-checks/src/main/java/org/sonar/python/checks/ReturnAndYieldInOneFunctionCheck.java
index e55bafd1a..a5e655126 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/ReturnAndYieldInOneFunctionCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/ReturnAndYieldInOneFunctionCheck.java
@@ -20,12 +20,12 @@
package org.sonar.python.checks;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.ReturnStatement;
-import org.sonar.python.api.tree.YieldStatement;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.tree.BaseTreeVisitor;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.ReturnStatement;
+import org.sonar.plugins.python.api.tree.YieldStatement;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.BaseTreeVisitor;
@Rule(key = ReturnAndYieldInOneFunctionCheck.CHECK_KEY)
public class ReturnAndYieldInOneFunctionCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/ReturnYieldOutsideFunctionCheck.java b/python-checks/src/main/java/org/sonar/python/checks/ReturnYieldOutsideFunctionCheck.java
index d9759d614..00aee78f9 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/ReturnYieldOutsideFunctionCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/ReturnYieldOutsideFunctionCheck.java
@@ -21,10 +21,10 @@
import java.util.function.Consumer;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.SubscriptionContext;
-import org.sonar.python.api.tree.Statement;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.SubscriptionContext;
+import org.sonar.plugins.python.api.tree.Statement;
+import org.sonar.plugins.python.api.tree.Tree;
@Rule(key = ReturnYieldOutsideFunctionCheck.CHECK_KEY)
public class ReturnYieldOutsideFunctionCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/SameBranchCheck.java b/python-checks/src/main/java/org/sonar/python/checks/SameBranchCheck.java
index 44b9ab140..7ee8e9bd4 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/SameBranchCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/SameBranchCheck.java
@@ -23,17 +23,17 @@
import java.util.List;
import java.util.stream.Collectors;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.SubscriptionContext;
-import org.sonar.python.api.tree.ConditionalExpression;
-import org.sonar.python.api.tree.ElseClause;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.IfStatement;
-import org.sonar.python.api.tree.ParenthesizedExpression;
-import org.sonar.python.api.tree.StatementList;
-import org.sonar.python.api.tree.Statement;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.SubscriptionContext;
+import org.sonar.plugins.python.api.tree.ConditionalExpression;
+import org.sonar.plugins.python.api.tree.ElseClause;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.IfStatement;
+import org.sonar.plugins.python.api.tree.ParenthesizedExpression;
+import org.sonar.plugins.python.api.tree.StatementList;
+import org.sonar.plugins.python.api.tree.Statement;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
@Rule(key = "S1871")
public class SameBranchCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/SameConditionCheck.java b/python-checks/src/main/java/org/sonar/python/checks/SameConditionCheck.java
index ae41c82d5..6d8f831dd 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/SameConditionCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/SameConditionCheck.java
@@ -23,14 +23,14 @@
import java.util.List;
import java.util.stream.Collectors;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.SubscriptionContext;
-import org.sonar.python.api.tree.ElseClause;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.IfStatement;
-import org.sonar.python.api.tree.StatementList;
-import org.sonar.python.api.tree.Statement;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.SubscriptionContext;
+import org.sonar.plugins.python.api.tree.ElseClause;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.IfStatement;
+import org.sonar.plugins.python.api.tree.StatementList;
+import org.sonar.plugins.python.api.tree.Statement;
+import org.sonar.plugins.python.api.tree.Tree;
@Rule(key = SameConditionCheck.CHECK_KEY)
public class SameConditionCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/SelfAssignmentCheck.java b/python-checks/src/main/java/org/sonar/python/checks/SelfAssignmentCheck.java
index 014c46b22..4452e5ca5 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/SelfAssignmentCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/SelfAssignmentCheck.java
@@ -24,19 +24,19 @@
import java.util.Set;
import org.sonar.check.Rule;
import org.sonar.python.PythonBuiltinFunctions;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.SubscriptionContext;
-import org.sonar.python.api.tree.AliasedName;
-import org.sonar.python.api.tree.AnnotatedAssignment;
-import org.sonar.python.api.tree.AssignmentStatement;
-import org.sonar.python.api.tree.CallExpression;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.ImportFrom;
-import org.sonar.python.api.tree.ImportName;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.Statement;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.tree.BaseTreeVisitor;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.SubscriptionContext;
+import org.sonar.plugins.python.api.tree.AliasedName;
+import org.sonar.plugins.python.api.tree.AnnotatedAssignment;
+import org.sonar.plugins.python.api.tree.AssignmentStatement;
+import org.sonar.plugins.python.api.tree.CallExpression;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.ImportFrom;
+import org.sonar.plugins.python.api.tree.ImportName;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.Statement;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.BaseTreeVisitor;
@Rule(key = SelfAssignmentCheck.CHECK_KEY)
public class SelfAssignmentCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/TempFileCreationCheck.java b/python-checks/src/main/java/org/sonar/python/checks/TempFileCreationCheck.java
index 097c63ce5..f61cd60bf 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/TempFileCreationCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/TempFileCreationCheck.java
@@ -24,9 +24,9 @@
import java.util.Optional;
import javax.annotation.Nullable;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.CallExpression;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.CallExpression;
+import org.sonar.plugins.python.api.tree.Tree;
import org.sonar.python.semantic.Symbol;
@Rule(key = "S5445")
diff --git a/python-checks/src/main/java/org/sonar/python/checks/TooManyLinesInFileCheck.java b/python-checks/src/main/java/org/sonar/python/checks/TooManyLinesInFileCheck.java
index 459c4bf2c..2a23ad3b3 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/TooManyLinesInFileCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/TooManyLinesInFileCheck.java
@@ -22,8 +22,8 @@
import java.text.MessageFormat;
import org.sonar.check.Rule;
import org.sonar.check.RuleProperty;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.Tree;
@Rule(key = TooManyLinesInFileCheck.CHECK_KEY)
public class TooManyLinesInFileCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/TooManyParametersCheck.java b/python-checks/src/main/java/org/sonar/python/checks/TooManyParametersCheck.java
index 6a6535b8e..560b9e229 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/TooManyParametersCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/TooManyParametersCheck.java
@@ -21,10 +21,10 @@
import org.sonar.check.Rule;
import org.sonar.check.RuleProperty;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.LambdaExpression;
-import org.sonar.python.api.tree.Tree.Kind;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.LambdaExpression;
+import org.sonar.plugins.python.api.tree.Tree.Kind;
@Rule(key = TooManyParametersCheck.CHECK_KEY)
public class TooManyParametersCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/TooManyReturnsCheck.java b/python-checks/src/main/java/org/sonar/python/checks/TooManyReturnsCheck.java
index 3e080c598..bdf91711d 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/TooManyReturnsCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/TooManyReturnsCheck.java
@@ -23,13 +23,13 @@
import java.util.List;
import org.sonar.check.Rule;
import org.sonar.check.RuleProperty;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.ReturnStatement;
-import org.sonar.python.api.tree.Statement;
-import org.sonar.python.api.tree.YieldStatement;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.tree.BaseTreeVisitor;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.ReturnStatement;
+import org.sonar.plugins.python.api.tree.Statement;
+import org.sonar.plugins.python.api.tree.YieldStatement;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.BaseTreeVisitor;
@Rule(key = TooManyReturnsCheck.CHECK_KEY)
public class TooManyReturnsCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/TrailingCommentCheck.java b/python-checks/src/main/java/org/sonar/python/checks/TrailingCommentCheck.java
index 2db7b4469..a8aaa2f28 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/TrailingCommentCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/TrailingCommentCheck.java
@@ -22,10 +22,10 @@
import java.util.regex.Pattern;
import org.sonar.check.Rule;
import org.sonar.check.RuleProperty;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.Trivia;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Trivia;
@Rule(key = "S139")
public class TrailingCommentCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/TrailingWhitespaceCheck.java b/python-checks/src/main/java/org/sonar/python/checks/TrailingWhitespaceCheck.java
index a60efe251..bcb4cf934 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/TrailingWhitespaceCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/TrailingWhitespaceCheck.java
@@ -22,8 +22,8 @@
import java.util.regex.Pattern;
import org.sonar.check.Rule;
import org.sonar.python.IssueLocation;
-import org.sonar.python.PythonCheck;
-import org.sonar.python.PythonVisitorContext;
+import org.sonar.plugins.python.api.PythonCheck;
+import org.sonar.plugins.python.api.PythonVisitorContext;
@Rule(key = "S1131")
public class TrailingWhitespaceCheck implements PythonCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/UnusedLocalVariableCheck.java b/python-checks/src/main/java/org/sonar/python/checks/UnusedLocalVariableCheck.java
index 0ac047a3f..d47c5a972 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/UnusedLocalVariableCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/UnusedLocalVariableCheck.java
@@ -25,19 +25,19 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.CallExpression;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.ExpressionList;
-import org.sonar.python.api.tree.ForStatement;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.StringElement;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.Tree.Kind;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.CallExpression;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.ExpressionList;
+import org.sonar.plugins.python.api.tree.ForStatement;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.StringElement;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Tree.Kind;
import org.sonar.python.semantic.Symbol;
import org.sonar.python.semantic.Usage;
-import org.sonar.python.tree.BaseTreeVisitor;
+import org.sonar.plugins.python.api.tree.BaseTreeVisitor;
import org.sonar.python.tree.TreeUtils;
@Rule(key = "S1481")
diff --git a/python-checks/src/main/java/org/sonar/python/checks/UselessParenthesisAfterKeywordCheck.java b/python-checks/src/main/java/org/sonar/python/checks/UselessParenthesisAfterKeywordCheck.java
index b9913af29..b8366132b 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/UselessParenthesisAfterKeywordCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/UselessParenthesisAfterKeywordCheck.java
@@ -20,23 +20,23 @@
package org.sonar.python.checks;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.SubscriptionContext;
-import org.sonar.python.api.tree.AssertStatement;
-import org.sonar.python.api.tree.BinaryExpression;
-import org.sonar.python.api.tree.DelStatement;
-import org.sonar.python.api.tree.ExceptClause;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.ForStatement;
-import org.sonar.python.api.tree.IfStatement;
-import org.sonar.python.api.tree.ParenthesizedExpression;
-import org.sonar.python.api.tree.RaiseStatement;
-import org.sonar.python.api.tree.ReturnStatement;
-import org.sonar.python.api.tree.Tuple;
-import org.sonar.python.api.tree.UnaryExpression;
-import org.sonar.python.api.tree.WhileStatement;
-import org.sonar.python.api.tree.YieldExpression;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.SubscriptionContext;
+import org.sonar.plugins.python.api.tree.AssertStatement;
+import org.sonar.plugins.python.api.tree.BinaryExpression;
+import org.sonar.plugins.python.api.tree.DelStatement;
+import org.sonar.plugins.python.api.tree.ExceptClause;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.ForStatement;
+import org.sonar.plugins.python.api.tree.IfStatement;
+import org.sonar.plugins.python.api.tree.ParenthesizedExpression;
+import org.sonar.plugins.python.api.tree.RaiseStatement;
+import org.sonar.plugins.python.api.tree.ReturnStatement;
+import org.sonar.plugins.python.api.tree.Tuple;
+import org.sonar.plugins.python.api.tree.UnaryExpression;
+import org.sonar.plugins.python.api.tree.WhileStatement;
+import org.sonar.plugins.python.api.tree.YieldExpression;
+import org.sonar.plugins.python.api.tree.Tree;
@Rule(key = "S1721")
public class UselessParenthesisAfterKeywordCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/UselessParenthesisCheck.java b/python-checks/src/main/java/org/sonar/python/checks/UselessParenthesisCheck.java
index 9cf03bba2..13c4fc9f6 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/UselessParenthesisCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/UselessParenthesisCheck.java
@@ -20,10 +20,10 @@
package org.sonar.python.checks;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.ParenthesizedExpression;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.ParenthesizedExpression;
+import org.sonar.plugins.python.api.tree.Tree;
@Rule(key = UselessParenthesisCheck.CHECK_KEY)
public class UselessParenthesisCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/WeakSSLProtocolCheck.java b/python-checks/src/main/java/org/sonar/python/checks/WeakSSLProtocolCheck.java
index 943fb2b19..8756a20f4 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/WeakSSLProtocolCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/WeakSSLProtocolCheck.java
@@ -23,9 +23,9 @@
import java.util.List;
import javax.annotation.Nullable;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.Tree;
import org.sonar.python.semantic.Symbol;
@Rule(key = "S4423")
diff --git a/python-checks/src/main/java/org/sonar/python/checks/XPathCheck.java b/python-checks/src/main/java/org/sonar/python/checks/XPathCheck.java
index 545088dc9..07de4e48d 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/XPathCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/XPathCheck.java
@@ -25,8 +25,8 @@
import org.sonar.check.Rule;
import org.sonar.check.RuleProperty;
import org.sonar.python.IssueLocation;
-import org.sonar.python.PythonCheck;
-import org.sonar.python.PythonVisitorContext;
+import org.sonar.plugins.python.api.PythonCheck;
+import org.sonar.plugins.python.api.PythonVisitorContext;
@Rule(key = XPathCheck.CHECK_KEY)
public class XPathCheck implements PythonCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/hotspots/ClearTextProtocolsCheck.java b/python-checks/src/main/java/org/sonar/python/checks/hotspots/ClearTextProtocolsCheck.java
index ef441f14a..70ce64247 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/hotspots/ClearTextProtocolsCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/hotspots/ClearTextProtocolsCheck.java
@@ -29,10 +29,10 @@
import java.util.regex.Pattern;
import javax.annotation.Nullable;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.CallExpression;
-import org.sonar.python.api.tree.StringElement;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.CallExpression;
+import org.sonar.plugins.python.api.tree.StringElement;
+import org.sonar.plugins.python.api.tree.Tree;
import org.sonar.python.semantic.Symbol;
@Rule(key = "S5332")
diff --git a/python-checks/src/main/java/org/sonar/python/checks/hotspots/CommandLineArgsCheck.java b/python-checks/src/main/java/org/sonar/python/checks/hotspots/CommandLineArgsCheck.java
index 772b0dd10..0eadf2a0c 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/hotspots/CommandLineArgsCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/hotspots/CommandLineArgsCheck.java
@@ -21,9 +21,9 @@
import java.util.Set;
import org.sonar.check.Rule;
-import org.sonar.python.SubscriptionContext;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.SubscriptionContext;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.Tree;
import org.sonar.python.checks.AbstractCallExpressionCheck;
import org.sonar.python.semantic.Symbol;
diff --git a/python-checks/src/main/java/org/sonar/python/checks/hotspots/DataEncryptionCheck.java b/python-checks/src/main/java/org/sonar/python/checks/hotspots/DataEncryptionCheck.java
index 7749f6141..71a5392f8 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/hotspots/DataEncryptionCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/hotspots/DataEncryptionCheck.java
@@ -22,9 +22,9 @@
import java.util.Arrays;
import java.util.List;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.CallExpression;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.CallExpression;
+import org.sonar.plugins.python.api.tree.Tree;
import org.sonar.python.semantic.Symbol;
@Rule(key = "S4787")
diff --git a/python-checks/src/main/java/org/sonar/python/checks/hotspots/DebugModeCheck.java b/python-checks/src/main/java/org/sonar/python/checks/hotspots/DebugModeCheck.java
index 1158492d7..9109b01ca 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/hotspots/DebugModeCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/hotspots/DebugModeCheck.java
@@ -23,15 +23,15 @@
import java.util.List;
import javax.annotation.CheckForNull;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.Argument;
-import org.sonar.python.api.tree.AssignmentStatement;
-import org.sonar.python.api.tree.CallExpression;
-import org.sonar.python.api.tree.ExpressionList;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.QualifiedExpression;
-import org.sonar.python.api.tree.Tree.Kind;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.Argument;
+import org.sonar.plugins.python.api.tree.AssignmentStatement;
+import org.sonar.plugins.python.api.tree.CallExpression;
+import org.sonar.plugins.python.api.tree.ExpressionList;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.QualifiedExpression;
+import org.sonar.plugins.python.api.tree.Tree.Kind;
import org.sonar.python.semantic.Symbol;
@Rule(key = DebugModeCheck.CHECK_KEY)
diff --git a/python-checks/src/main/java/org/sonar/python/checks/hotspots/DisabledHtmlAutoEscapeCheck.java b/python-checks/src/main/java/org/sonar/python/checks/hotspots/DisabledHtmlAutoEscapeCheck.java
index 6eb0e1987..f4a804210 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/hotspots/DisabledHtmlAutoEscapeCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/hotspots/DisabledHtmlAutoEscapeCheck.java
@@ -24,16 +24,16 @@
import java.util.stream.Stream;
import javax.annotation.Nullable;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.SubscriptionContext;
-import org.sonar.python.api.tree.Argument;
-import org.sonar.python.api.tree.CallExpression;
-import org.sonar.python.api.tree.DictionaryLiteral;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.KeyValuePair;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.StringLiteral;
-import org.sonar.python.api.tree.Tree.Kind;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.SubscriptionContext;
+import org.sonar.plugins.python.api.tree.Argument;
+import org.sonar.plugins.python.api.tree.CallExpression;
+import org.sonar.plugins.python.api.tree.DictionaryLiteral;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.KeyValuePair;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.StringLiteral;
+import org.sonar.plugins.python.api.tree.Tree.Kind;
import org.sonar.python.checks.Expressions;
import org.sonar.python.semantic.Symbol;
diff --git a/python-checks/src/main/java/org/sonar/python/checks/hotspots/DynamicCodeExecutionCheck.java b/python-checks/src/main/java/org/sonar/python/checks/hotspots/DynamicCodeExecutionCheck.java
index 9bd55e2ec..3821a8448 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/hotspots/DynamicCodeExecutionCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/hotspots/DynamicCodeExecutionCheck.java
@@ -20,11 +20,11 @@
package org.sonar.python.checks.hotspots;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.CallExpression;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.CallExpression;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.Tree;
@Rule(key = "S1523")
public class DynamicCodeExecutionCheck extends PythonSubscriptionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/hotspots/HashingDataCheck.java b/python-checks/src/main/java/org/sonar/python/checks/hotspots/HashingDataCheck.java
index b70807605..30575d450 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/hotspots/HashingDataCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/hotspots/HashingDataCheck.java
@@ -24,18 +24,18 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.sonar.check.Rule;
-import org.sonar.python.SubscriptionContext;
-import org.sonar.python.api.tree.HasSymbol;
-import org.sonar.python.api.tree.ArgList;
-import org.sonar.python.api.tree.AssignmentStatement;
-import org.sonar.python.api.tree.CallExpression;
-import org.sonar.python.api.tree.ClassDef;
-import org.sonar.python.api.tree.ExpressionList;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.ParenthesizedExpression;
-import org.sonar.python.api.tree.QualifiedExpression;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.SubscriptionContext;
+import org.sonar.plugins.python.api.tree.HasSymbol;
+import org.sonar.plugins.python.api.tree.ArgList;
+import org.sonar.plugins.python.api.tree.AssignmentStatement;
+import org.sonar.plugins.python.api.tree.CallExpression;
+import org.sonar.plugins.python.api.tree.ClassDef;
+import org.sonar.plugins.python.api.tree.ExpressionList;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.ParenthesizedExpression;
+import org.sonar.plugins.python.api.tree.QualifiedExpression;
+import org.sonar.plugins.python.api.tree.Tree;
import org.sonar.python.checks.AbstractCallExpressionCheck;
import org.sonar.python.semantic.Symbol;
diff --git a/python-checks/src/main/java/org/sonar/python/checks/hotspots/LoggersConfigurationCheck.java b/python-checks/src/main/java/org/sonar/python/checks/hotspots/LoggersConfigurationCheck.java
index 0805906ce..deb8e3c8b 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/hotspots/LoggersConfigurationCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/hotspots/LoggersConfigurationCheck.java
@@ -22,15 +22,15 @@
import java.util.Arrays;
import java.util.List;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.SubscriptionContext;
-import org.sonar.python.api.tree.HasSymbol;
-import org.sonar.python.api.tree.ArgList;
-import org.sonar.python.api.tree.Argument;
-import org.sonar.python.api.tree.AssignmentStatement;
-import org.sonar.python.api.tree.CallExpression;
-import org.sonar.python.api.tree.ClassDef;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.SubscriptionContext;
+import org.sonar.plugins.python.api.tree.HasSymbol;
+import org.sonar.plugins.python.api.tree.ArgList;
+import org.sonar.plugins.python.api.tree.Argument;
+import org.sonar.plugins.python.api.tree.AssignmentStatement;
+import org.sonar.plugins.python.api.tree.CallExpression;
+import org.sonar.plugins.python.api.tree.ClassDef;
+import org.sonar.plugins.python.api.tree.Tree;
import org.sonar.python.semantic.Symbol;
@Rule(key = "S4792")
diff --git a/python-checks/src/main/java/org/sonar/python/checks/hotspots/PseudoRandomCheck.java b/python-checks/src/main/java/org/sonar/python/checks/hotspots/PseudoRandomCheck.java
index 3b0d5c6bb..90bc2700b 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/hotspots/PseudoRandomCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/hotspots/PseudoRandomCheck.java
@@ -23,9 +23,9 @@
import java.util.HashSet;
import java.util.Set;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.CallExpression;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.CallExpression;
+import org.sonar.plugins.python.api.tree.Tree;
import org.sonar.python.semantic.Symbol;
@Rule(key = "S2245")
diff --git a/python-checks/src/main/java/org/sonar/python/checks/hotspots/PubliclyWritableDirectoriesCheck.java b/python-checks/src/main/java/org/sonar/python/checks/hotspots/PubliclyWritableDirectoriesCheck.java
index f5420975f..5d93ac194 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/hotspots/PubliclyWritableDirectoriesCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/hotspots/PubliclyWritableDirectoriesCheck.java
@@ -24,15 +24,15 @@
import java.util.Locale;
import java.util.regex.Pattern;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.api.tree.HasSymbol;
-import org.sonar.python.api.tree.Argument;
-import org.sonar.python.api.tree.CallExpression;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.StringElement;
-import org.sonar.python.api.tree.StringLiteral;
-import org.sonar.python.api.tree.SubscriptionExpression;
-import org.sonar.python.api.tree.Tree.Kind;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.tree.HasSymbol;
+import org.sonar.plugins.python.api.tree.Argument;
+import org.sonar.plugins.python.api.tree.CallExpression;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.StringElement;
+import org.sonar.plugins.python.api.tree.StringLiteral;
+import org.sonar.plugins.python.api.tree.SubscriptionExpression;
+import org.sonar.plugins.python.api.tree.Tree.Kind;
import org.sonar.python.semantic.Symbol;
@Rule(key = "S5443")
diff --git a/python-checks/src/main/java/org/sonar/python/checks/hotspots/RegexCheck.java b/python-checks/src/main/java/org/sonar/python/checks/hotspots/RegexCheck.java
index bbcb2fbea..d447bc5b8 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/hotspots/RegexCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/hotspots/RegexCheck.java
@@ -25,15 +25,15 @@
import javax.annotation.Nullable;
import org.sonar.check.Rule;
import org.sonar.python.IssueLocation;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.SubscriptionContext;
-import org.sonar.python.api.tree.Argument;
-import org.sonar.python.api.tree.BinaryExpression;
-import org.sonar.python.api.tree.CallExpression;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.StringLiteral;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.SubscriptionContext;
+import org.sonar.plugins.python.api.tree.Argument;
+import org.sonar.plugins.python.api.tree.BinaryExpression;
+import org.sonar.plugins.python.api.tree.CallExpression;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.StringLiteral;
+import org.sonar.plugins.python.api.tree.Tree;
import org.sonar.python.checks.Expressions;
import org.sonar.python.semantic.Symbol;
diff --git a/python-checks/src/main/java/org/sonar/python/checks/hotspots/SQLQueriesCheck.java b/python-checks/src/main/java/org/sonar/python/checks/hotspots/SQLQueriesCheck.java
index 7a96ffcad..67262c4c3 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/hotspots/SQLQueriesCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/hotspots/SQLQueriesCheck.java
@@ -25,20 +25,20 @@
import java.util.Objects;
import java.util.Set;
import org.sonar.check.Rule;
-import org.sonar.python.SubscriptionContext;
-import org.sonar.python.api.tree.AliasedName;
-import org.sonar.python.api.tree.Argument;
-import org.sonar.python.api.tree.BinaryExpression;
-import org.sonar.python.api.tree.CallExpression;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.FileInput;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.QualifiedExpression;
-import org.sonar.python.api.tree.StringLiteral;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.SubscriptionContext;
+import org.sonar.plugins.python.api.tree.AliasedName;
+import org.sonar.plugins.python.api.tree.Argument;
+import org.sonar.plugins.python.api.tree.BinaryExpression;
+import org.sonar.plugins.python.api.tree.CallExpression;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.FileInput;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.QualifiedExpression;
+import org.sonar.plugins.python.api.tree.StringLiteral;
+import org.sonar.plugins.python.api.tree.Tree;
import org.sonar.python.checks.AbstractCallExpressionCheck;
import org.sonar.python.semantic.Symbol;
-import org.sonar.python.tree.BaseTreeVisitor;
+import org.sonar.plugins.python.api.tree.BaseTreeVisitor;
@Rule(key = SQLQueriesCheck.CHECK_KEY)
public class SQLQueriesCheck extends AbstractCallExpressionCheck {
diff --git a/python-checks/src/main/java/org/sonar/python/checks/hotspots/StandardInputCheck.java b/python-checks/src/main/java/org/sonar/python/checks/hotspots/StandardInputCheck.java
index d0642579a..5a73eb0da 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/hotspots/StandardInputCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/hotspots/StandardInputCheck.java
@@ -23,10 +23,10 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.sonar.check.Rule;
-import org.sonar.python.api.tree.CallExpression;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.CallExpression;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.Tree;
import org.sonar.python.checks.AbstractCallExpressionCheck;
import org.sonar.python.semantic.Symbol;
diff --git a/python-checks/src/main/java/org/sonar/python/checks/hotspots/StrongCryptographicKeysCheck.java b/python-checks/src/main/java/org/sonar/python/checks/hotspots/StrongCryptographicKeysCheck.java
index f5d765a80..72fcc27e9 100644
--- a/python-checks/src/main/java/org/sonar/python/checks/hotspots/StrongCryptographicKeysCheck.java
+++ b/python-checks/src/main/java/org/sonar/python/checks/hotspots/StrongCryptographicKeysCheck.java
@@ -22,16 +22,16 @@
import java.util.List;
import java.util.regex.Pattern;
import org.sonar.check.Rule;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.SubscriptionContext;
-import org.sonar.python.api.tree.HasSymbol;
-import org.sonar.python.api.tree.Argument;
-import org.sonar.python.api.tree.CallExpression;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.NumericLiteral;
-import org.sonar.python.api.tree.QualifiedExpression;
-import org.sonar.python.api.tree.Tree.Kind;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.SubscriptionContext;
+import org.sonar.plugins.python.api.tree.HasSymbol;
+import org.sonar.plugins.python.api.tree.Argument;
+import org.sonar.plugins.python.api.tree.CallExpression;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.NumericLiteral;
+import org.sonar.plugins.python.api.tree.QualifiedExpression;
+import org.sonar.plugins.python.api.tree.Tree.Kind;
import org.sonar.python.semantic.Symbol;
@Rule(key = "S4426")
diff --git a/python-checks/src/test/java/org/sonar/python/checks/CheckUtilsTest.java b/python-checks/src/test/java/org/sonar/python/checks/CheckUtilsTest.java
index 89bdb6aa5..3076c0186 100644
--- a/python-checks/src/test/java/org/sonar/python/checks/CheckUtilsTest.java
+++ b/python-checks/src/test/java/org/sonar/python/checks/CheckUtilsTest.java
@@ -27,8 +27,8 @@
import java.util.Collections;
import org.junit.Test;
import org.sonar.python.PythonConfiguration;
-import org.sonar.python.api.tree.FileInput;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.FileInput;
+import org.sonar.plugins.python.api.tree.Tree;
import org.sonar.python.parser.PythonParser;
import org.sonar.python.tree.ArgListImpl;
import org.sonar.python.tree.PythonTreeMaker;
diff --git a/python-checks/src/test/java/org/sonar/python/checks/ExpressionsTest.java b/python-checks/src/test/java/org/sonar/python/checks/ExpressionsTest.java
index 17fbdfd02..25648e719 100644
--- a/python-checks/src/test/java/org/sonar/python/checks/ExpressionsTest.java
+++ b/python-checks/src/test/java/org/sonar/python/checks/ExpressionsTest.java
@@ -25,14 +25,14 @@
import java.util.List;
import org.junit.Test;
import org.sonar.python.PythonConfiguration;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.FileInput;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.Tree.Kind;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.FileInput;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Tree.Kind;
import org.sonar.python.parser.PythonParser;
import org.sonar.python.semantic.SymbolTableBuilder;
-import org.sonar.python.tree.BaseTreeVisitor;
+import org.sonar.plugins.python.api.tree.BaseTreeVisitor;
import org.sonar.python.tree.PythonTreeMaker;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/python-checks/src/test/java/org/sonar/python/checks/ParsingErrorCheckTest.java b/python-checks/src/test/java/org/sonar/python/checks/ParsingErrorCheckTest.java
index 2c5fbcaa0..2d46b8741 100644
--- a/python-checks/src/test/java/org/sonar/python/checks/ParsingErrorCheckTest.java
+++ b/python-checks/src/test/java/org/sonar/python/checks/ParsingErrorCheckTest.java
@@ -26,9 +26,9 @@
import java.nio.charset.StandardCharsets;
import java.util.List;
import org.junit.Test;
-import org.sonar.python.PythonCheck.PreciseIssue;
+import org.sonar.plugins.python.api.PythonCheck.PreciseIssue;
import org.sonar.python.PythonConfiguration;
-import org.sonar.python.PythonVisitorContext;
+import org.sonar.plugins.python.api.PythonVisitorContext;
import org.sonar.python.parser.PythonParser;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/python-checks/src/test/java/org/sonar/python/checks/utils/package-info.java b/python-checks/src/test/java/org/sonar/python/checks/utils/package-info.java
new file mode 100644
index 000000000..70ad77dcc
--- /dev/null
+++ b/python-checks/src/test/java/org/sonar/python/checks/utils/package-info.java
@@ -0,0 +1,24 @@
+/*
+ * SonarQube Python Plugin
+ * Copyright (C) 2011-2019 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+@ParametersAreNonnullByDefault
+package org.sonar.python.checks.utils;
+
+import javax.annotation.ParametersAreNonnullByDefault;
+
diff --git a/python-squid/src/main/java/org/sonar/python/PythonCheck.java b/python-squid/src/main/java/org/sonar/plugins/python/api/PythonCheck.java
similarity index 93%
rename from python-squid/src/main/java/org/sonar/python/PythonCheck.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/PythonCheck.java
index 966a5e514..ba8832c9e 100644
--- a/python-squid/src/main/java/org/sonar/python/PythonCheck.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/PythonCheck.java
@@ -17,13 +17,14 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python;
+package org.sonar.plugins.python.api;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.python.IssueLocation;
public interface PythonCheck {
diff --git a/python-squid/src/main/java/org/sonar/python/PythonCheckTree.java b/python-squid/src/main/java/org/sonar/plugins/python/api/PythonCheckTree.java
similarity index 88%
rename from python-squid/src/main/java/org/sonar/python/PythonCheckTree.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/PythonCheckTree.java
index 1dd655a2d..5b8884727 100644
--- a/python-squid/src/main/java/org/sonar/python/PythonCheckTree.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/PythonCheckTree.java
@@ -17,12 +17,13 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python;
+package org.sonar.plugins.python.api;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.tree.BaseTreeVisitor;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.python.IssueLocation;
+import org.sonar.plugins.python.api.tree.BaseTreeVisitor;
public abstract class PythonCheckTree extends BaseTreeVisitor implements PythonCheck {
diff --git a/python-squid/src/main/java/org/sonar/plugins/python/api/PythonCustomRuleRepository.java b/python-squid/src/main/java/org/sonar/plugins/python/api/PythonCustomRuleRepository.java
new file mode 100644
index 000000000..29c658221
--- /dev/null
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/PythonCustomRuleRepository.java
@@ -0,0 +1,43 @@
+/*
+ * SonarQube Python Plugin
+ * Copyright (C) 2011-2019 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.plugins.python.api;
+
+import java.util.List;
+import org.sonar.api.ExtensionPoint;
+import org.sonar.api.scanner.ScannerSide;
+
+/**
+ * Extension point to create a custom rule repository for Python.
+ */
+@ScannerSide
+@ExtensionPoint
+public interface PythonCustomRuleRepository {
+
+ /**
+ * Key of the custom rule repository.
+ */
+ String repositoryKey();
+
+ /**
+ * List of the custom rules classes.
+ */
+ List checkClasses();
+
+}
diff --git a/python-squid/src/main/java/org/sonar/python/PythonSubscriptionCheck.java b/python-squid/src/main/java/org/sonar/plugins/python/api/PythonSubscriptionCheck.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/PythonSubscriptionCheck.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/PythonSubscriptionCheck.java
index 737eccc86..70229d207 100644
--- a/python-squid/src/main/java/org/sonar/python/PythonSubscriptionCheck.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/PythonSubscriptionCheck.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python;
+package org.sonar.plugins.python.api;
public abstract class PythonSubscriptionCheck implements SubscriptionCheck, PythonCheck {
@Override
diff --git a/python-squid/src/main/java/org/sonar/python/PythonVisitorContext.java b/python-squid/src/main/java/org/sonar/plugins/python/api/PythonVisitorContext.java
similarity index 92%
rename from python-squid/src/main/java/org/sonar/python/PythonVisitorContext.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/PythonVisitorContext.java
index c0914fb96..9360ec020 100644
--- a/python-squid/src/main/java/org/sonar/python/PythonVisitorContext.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/PythonVisitorContext.java
@@ -17,14 +17,15 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python;
+package org.sonar.plugins.python.api;
import com.sonar.sslr.api.AstNode;
import com.sonar.sslr.api.RecognitionException;
import java.util.ArrayList;
import java.util.List;
-import org.sonar.python.PythonCheck.PreciseIssue;
-import org.sonar.python.api.tree.FileInput;
+import org.sonar.plugins.python.api.PythonCheck.PreciseIssue;
+import org.sonar.plugins.python.api.tree.FileInput;
+import org.sonar.python.PythonFile;
import org.sonar.python.semantic.SymbolTableBuilder;
public class PythonVisitorContext {
diff --git a/python-squid/src/main/java/org/sonar/python/SubscriptionCheck.java b/python-squid/src/main/java/org/sonar/plugins/python/api/SubscriptionCheck.java
similarity index 92%
rename from python-squid/src/main/java/org/sonar/python/SubscriptionCheck.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/SubscriptionCheck.java
index 3107c4b34..a74cdc255 100644
--- a/python-squid/src/main/java/org/sonar/python/SubscriptionCheck.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/SubscriptionCheck.java
@@ -17,10 +17,10 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python;
+package org.sonar.plugins.python.api;
import java.util.function.Consumer;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Tree;
public interface SubscriptionCheck {
void initialize(Context context);
diff --git a/python-squid/src/main/java/org/sonar/python/SubscriptionContext.java b/python-squid/src/main/java/org/sonar/plugins/python/api/SubscriptionContext.java
similarity index 88%
rename from python-squid/src/main/java/org/sonar/python/SubscriptionContext.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/SubscriptionContext.java
index 73d72b30b..644947993 100644
--- a/python-squid/src/main/java/org/sonar/python/SubscriptionContext.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/SubscriptionContext.java
@@ -17,11 +17,12 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python;
+package org.sonar.plugins.python.api;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.python.PythonFile;
public interface SubscriptionContext {
Tree syntaxNode();
diff --git a/python-squid/src/main/java/org/sonar/plugins/python/api/cfg/CfgBlock.java b/python-squid/src/main/java/org/sonar/plugins/python/api/cfg/CfgBlock.java
index 5cca7337e..52e7070be 100644
--- a/python-squid/src/main/java/org/sonar/plugins/python/api/cfg/CfgBlock.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/cfg/CfgBlock.java
@@ -22,7 +22,7 @@
import java.util.List;
import java.util.Set;
import javax.annotation.CheckForNull;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Tree;
public interface CfgBlock {
diff --git a/python-squid/src/main/java/org/sonar/plugins/python/api/cfg/CfgBranchingBlock.java b/python-squid/src/main/java/org/sonar/plugins/python/api/cfg/CfgBranchingBlock.java
index 0d13e8075..3b827762a 100644
--- a/python-squid/src/main/java/org/sonar/plugins/python/api/cfg/CfgBranchingBlock.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/cfg/CfgBranchingBlock.java
@@ -19,7 +19,7 @@
*/
package org.sonar.plugins.python.api.cfg;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Tree;
/**
* A {@link CfgBlock} with 2 successors: represents a block ending
diff --git a/python-squid/src/main/java/org/sonar/plugins/python/api/cfg/ControlFlowGraph.java b/python-squid/src/main/java/org/sonar/plugins/python/api/cfg/ControlFlowGraph.java
index a552bffea..9143c3f39 100644
--- a/python-squid/src/main/java/org/sonar/plugins/python/api/cfg/ControlFlowGraph.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/cfg/ControlFlowGraph.java
@@ -27,10 +27,10 @@
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
import org.sonar.python.PythonFile;
-import org.sonar.python.api.tree.FileInput;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.StatementList;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.FileInput;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.StatementList;
+import org.sonar.plugins.python.api.tree.Tree;
import org.sonar.python.cfg.ControlFlowGraphBuilder;
public class ControlFlowGraph {
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/package-info.java b/python-squid/src/main/java/org/sonar/plugins/python/api/package-info.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/package-info.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/package-info.java
index 5d992c424..287284cae 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/package-info.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/package-info.java
@@ -18,7 +18,7 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
@ParametersAreNonnullByDefault
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api;
import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/AliasedName.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/AliasedName.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/AliasedName.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/AliasedName.java
index 4b6d46bab..685cff00c 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/AliasedName.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/AliasedName.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import javax.annotation.CheckForNull;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/AnnotatedAssignment.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/AnnotatedAssignment.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/AnnotatedAssignment.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/AnnotatedAssignment.java
index 912370e98..11197a678 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/AnnotatedAssignment.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/AnnotatedAssignment.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import javax.annotation.CheckForNull;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/AnyParameter.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/AnyParameter.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/AnyParameter.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/AnyParameter.java
index 529e88692..c20ad033e 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/AnyParameter.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/AnyParameter.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
public interface AnyParameter extends Tree {
}
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/ArgList.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ArgList.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/ArgList.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/ArgList.java
index 61990be0c..28c511482 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/ArgList.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ArgList.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import java.util.List;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/Argument.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/Argument.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/Argument.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/Argument.java
index 944473e4d..019779ad7 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/Argument.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/Argument.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import javax.annotation.CheckForNull;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/AssertStatement.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/AssertStatement.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/AssertStatement.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/AssertStatement.java
index 361ae50f3..a8ab9942d 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/AssertStatement.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/AssertStatement.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import javax.annotation.Nullable;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/AssignmentStatement.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/AssignmentStatement.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/AssignmentStatement.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/AssignmentStatement.java
index 82bc16094..ea6658382 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/AssignmentStatement.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/AssignmentStatement.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import java.util.List;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/AwaitExpression.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/AwaitExpression.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/AwaitExpression.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/AwaitExpression.java
index 69aeef8be..730378b0c 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/AwaitExpression.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/AwaitExpression.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
public interface AwaitExpression extends Expression {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/BaseTreeVisitor.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/BaseTreeVisitor.java
similarity index 77%
rename from python-squid/src/main/java/org/sonar/python/tree/BaseTreeVisitor.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/BaseTreeVisitor.java
index 7344221df..b2a8abea6 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/BaseTreeVisitor.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/BaseTreeVisitor.java
@@ -17,83 +17,11 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.tree;
+package org.sonar.plugins.python.api.tree;
import java.util.List;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.AliasedName;
-import org.sonar.python.api.tree.AnnotatedAssignment;
-import org.sonar.python.api.tree.ArgList;
-import org.sonar.python.api.tree.Argument;
-import org.sonar.python.api.tree.AssertStatement;
-import org.sonar.python.api.tree.AssignmentStatement;
-import org.sonar.python.api.tree.AwaitExpression;
-import org.sonar.python.api.tree.BinaryExpression;
-import org.sonar.python.api.tree.BreakStatement;
-import org.sonar.python.api.tree.CallExpression;
-import org.sonar.python.api.tree.ClassDef;
-import org.sonar.python.api.tree.CompoundAssignmentStatement;
-import org.sonar.python.api.tree.ComprehensionExpression;
-import org.sonar.python.api.tree.ComprehensionFor;
-import org.sonar.python.api.tree.ComprehensionIf;
-import org.sonar.python.api.tree.ConditionalExpression;
-import org.sonar.python.api.tree.ContinueStatement;
-import org.sonar.python.api.tree.Decorator;
-import org.sonar.python.api.tree.DelStatement;
-import org.sonar.python.api.tree.DictionaryLiteral;
-import org.sonar.python.api.tree.DottedName;
-import org.sonar.python.api.tree.EllipsisExpression;
-import org.sonar.python.api.tree.ElseClause;
-import org.sonar.python.api.tree.ExceptClause;
-import org.sonar.python.api.tree.ExecStatement;
-import org.sonar.python.api.tree.ExpressionList;
-import org.sonar.python.api.tree.ExpressionStatement;
-import org.sonar.python.api.tree.FileInput;
-import org.sonar.python.api.tree.FinallyClause;
-import org.sonar.python.api.tree.ForStatement;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.GlobalStatement;
-import org.sonar.python.api.tree.IfStatement;
-import org.sonar.python.api.tree.ImportFrom;
-import org.sonar.python.api.tree.ImportName;
-import org.sonar.python.api.tree.KeyValuePair;
-import org.sonar.python.api.tree.LambdaExpression;
-import org.sonar.python.api.tree.ListLiteral;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.NoneExpression;
-import org.sonar.python.api.tree.NonlocalStatement;
-import org.sonar.python.api.tree.NumericLiteral;
-import org.sonar.python.api.tree.ParameterList;
-import org.sonar.python.api.tree.Parameter;
-import org.sonar.python.api.tree.ParenthesizedExpression;
-import org.sonar.python.api.tree.PassStatement;
-import org.sonar.python.api.tree.PrintStatement;
-import org.sonar.python.api.tree.QualifiedExpression;
-import org.sonar.python.api.tree.RaiseStatement;
-import org.sonar.python.api.tree.ReprExpression;
-import org.sonar.python.api.tree.ReturnStatement;
-import org.sonar.python.api.tree.SetLiteral;
-import org.sonar.python.api.tree.SliceExpression;
-import org.sonar.python.api.tree.SliceItem;
-import org.sonar.python.api.tree.SliceList;
-import org.sonar.python.api.tree.StarredExpression;
-import org.sonar.python.api.tree.StatementList;
-import org.sonar.python.api.tree.StringElement;
-import org.sonar.python.api.tree.StringLiteral;
-import org.sonar.python.api.tree.SubscriptionExpression;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.TreeVisitor;
-import org.sonar.python.api.tree.TryStatement;
-import org.sonar.python.api.tree.TupleParameter;
-import org.sonar.python.api.tree.Tuple;
-import org.sonar.python.api.tree.TypeAnnotation;
-import org.sonar.python.api.tree.UnaryExpression;
-import org.sonar.python.api.tree.WhileStatement;
-import org.sonar.python.api.tree.WithItem;
-import org.sonar.python.api.tree.WithStatement;
-import org.sonar.python.api.tree.YieldExpression;
-import org.sonar.python.api.tree.YieldStatement;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.python.tree.DictCompExpressionImpl;
/**
* Default implementation of {@link TreeVisitor}.
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/BinaryExpression.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/BinaryExpression.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/BinaryExpression.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/BinaryExpression.java
index 2c6115702..4a5aae823 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/BinaryExpression.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/BinaryExpression.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
public interface BinaryExpression extends Expression {
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/BreakStatement.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/BreakStatement.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/BreakStatement.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/BreakStatement.java
index c70184e06..fbdb8d17c 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/BreakStatement.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/BreakStatement.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
public interface BreakStatement extends Statement {
Token breakKeyword();
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/CallExpression.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/CallExpression.java
similarity index 97%
rename from python-squid/src/main/java/org/sonar/python/api/tree/CallExpression.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/CallExpression.java
index f2092294a..19d819a0b 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/CallExpression.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/CallExpression.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import java.util.List;
import javax.annotation.CheckForNull;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/ClassDef.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ClassDef.java
similarity index 97%
rename from python-squid/src/main/java/org/sonar/python/api/tree/ClassDef.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/ClassDef.java
index 4e598bc2e..2626927a7 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/ClassDef.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ClassDef.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import java.util.List;
import java.util.Set;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/CompoundAssignmentStatement.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/CompoundAssignmentStatement.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/CompoundAssignmentStatement.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/CompoundAssignmentStatement.java
index fac179a54..6e568d1df 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/CompoundAssignmentStatement.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/CompoundAssignmentStatement.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
public interface CompoundAssignmentStatement extends Statement {
Expression rhsExpression();
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/ComprehensionClause.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ComprehensionClause.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/ComprehensionClause.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/ComprehensionClause.java
index dd2a06a99..66f77c907 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/ComprehensionClause.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ComprehensionClause.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import javax.annotation.CheckForNull;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/ComprehensionExpression.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ComprehensionExpression.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/ComprehensionExpression.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/ComprehensionExpression.java
index 4c6074203..7f73e70b1 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/ComprehensionExpression.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ComprehensionExpression.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
public interface ComprehensionExpression extends Expression {
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/ComprehensionFor.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ComprehensionFor.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/ComprehensionFor.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/ComprehensionFor.java
index a7d1d0c16..a55243fe0 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/ComprehensionFor.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ComprehensionFor.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
public interface ComprehensionFor extends ComprehensionClause {
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/ComprehensionIf.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ComprehensionIf.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/ComprehensionIf.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/ComprehensionIf.java
index 440b8b626..5bb1a73b4 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/ComprehensionIf.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ComprehensionIf.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
public interface ComprehensionIf extends ComprehensionClause {
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/ConditionalExpression.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ConditionalExpression.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/ConditionalExpression.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/ConditionalExpression.java
index ad4452c9f..6aa897fb9 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/ConditionalExpression.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ConditionalExpression.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
public interface ConditionalExpression extends Expression {
Token ifKeyword();
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/ContinueStatement.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ContinueStatement.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/ContinueStatement.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/ContinueStatement.java
index e07e6f9ba..7567a84dc 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/ContinueStatement.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ContinueStatement.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
public interface ContinueStatement extends Statement {
Token continueKeyword();
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/Decorator.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/Decorator.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/Decorator.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/Decorator.java
index d9589f444..c0dcd9103 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/Decorator.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/Decorator.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import javax.annotation.CheckForNull;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/DelStatement.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/DelStatement.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/DelStatement.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/DelStatement.java
index c2d2527ca..4b27328ea 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/DelStatement.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/DelStatement.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import java.util.List;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/DictCompExpression.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/DictCompExpression.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/DictCompExpression.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/DictCompExpression.java
index 7881e00c1..7aec737dd 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/DictCompExpression.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/DictCompExpression.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
public interface DictCompExpression extends Expression {
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/DictionaryLiteral.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/DictionaryLiteral.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/DictionaryLiteral.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/DictionaryLiteral.java
index 405f9462f..47a0ecb4b 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/DictionaryLiteral.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/DictionaryLiteral.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import java.util.List;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/DottedName.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/DottedName.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/DottedName.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/DottedName.java
index 532cc3dc0..315dace31 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/DottedName.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/DottedName.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import java.util.List;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/EllipsisExpression.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/EllipsisExpression.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/EllipsisExpression.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/EllipsisExpression.java
index 132ee05d5..3a725a4b9 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/EllipsisExpression.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/EllipsisExpression.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import java.util.List;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/ElseClause.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ElseClause.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/ElseClause.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/ElseClause.java
index c3ea33ad9..4e9300ed0 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/ElseClause.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ElseClause.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
public interface ElseClause extends Tree {
Token elseKeyword();
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/ExceptClause.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ExceptClause.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/ExceptClause.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/ExceptClause.java
index 0e281dede..6337ec7da 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/ExceptClause.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ExceptClause.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import javax.annotation.CheckForNull;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/ExecStatement.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ExecStatement.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/ExecStatement.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/ExecStatement.java
index bed4a8bb0..8d2f1e262 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/ExecStatement.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ExecStatement.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import javax.annotation.CheckForNull;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/Expression.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/Expression.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/Expression.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/Expression.java
index a1aef6c7a..f27b9cc32 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/Expression.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/Expression.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
public interface Expression extends Tree {
}
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/ExpressionList.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ExpressionList.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/ExpressionList.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/ExpressionList.java
index 98d971448..cef282c6f 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/ExpressionList.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ExpressionList.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import java.util.List;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/ExpressionStatement.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ExpressionStatement.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/ExpressionStatement.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/ExpressionStatement.java
index 0e69a3815..87f19d426 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/ExpressionStatement.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ExpressionStatement.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import java.util.List;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/FileInput.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/FileInput.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/FileInput.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/FileInput.java
index 312c2b49a..c2bd21480 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/FileInput.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/FileInput.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import java.util.Set;
import javax.annotation.CheckForNull;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/FinallyClause.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/FinallyClause.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/FinallyClause.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/FinallyClause.java
index 549492660..fbc749adf 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/FinallyClause.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/FinallyClause.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
public interface FinallyClause extends Tree {
Token finallyKeyword();
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/ForStatement.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ForStatement.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/ForStatement.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/ForStatement.java
index 84b99fbad..5b233f922 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/ForStatement.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ForStatement.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import java.util.List;
import javax.annotation.CheckForNull;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/FunctionDef.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/FunctionDef.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/FunctionDef.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/FunctionDef.java
index db85f0675..da35b020a 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/FunctionDef.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/FunctionDef.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import java.util.List;
import javax.annotation.CheckForNull;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/FunctionLike.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/FunctionLike.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/FunctionLike.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/FunctionLike.java
index dfc668269..f33bcd10c 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/FunctionLike.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/FunctionLike.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import java.util.Set;
import javax.annotation.CheckForNull;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/GlobalStatement.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/GlobalStatement.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/GlobalStatement.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/GlobalStatement.java
index 7dc2d6e7a..db16d1de1 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/GlobalStatement.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/GlobalStatement.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import java.util.List;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/HasSymbol.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/HasSymbol.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/HasSymbol.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/HasSymbol.java
index 6d32d4de1..04dcdb77f 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/HasSymbol.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/HasSymbol.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import javax.annotation.CheckForNull;
import org.sonar.python.semantic.Symbol;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/IfStatement.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/IfStatement.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/IfStatement.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/IfStatement.java
index 2bbe25007..eddf86b42 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/IfStatement.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/IfStatement.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import java.util.List;
import javax.annotation.CheckForNull;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/ImportFrom.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ImportFrom.java
similarity index 97%
rename from python-squid/src/main/java/org/sonar/python/api/tree/ImportFrom.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/ImportFrom.java
index c1294c8b1..90ee53ccc 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/ImportFrom.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ImportFrom.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import java.util.List;
import javax.annotation.CheckForNull;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/ImportName.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ImportName.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/ImportName.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/ImportName.java
index e4bea4309..ce94af7c8 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/ImportName.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ImportName.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import java.util.List;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/ImportStatement.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ImportStatement.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/ImportStatement.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/ImportStatement.java
index 4d91a8b41..0a912596c 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/ImportStatement.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ImportStatement.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
/**
* Import statement
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/InExpression.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/InExpression.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/InExpression.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/InExpression.java
index 6c7c2dd56..167c42bd2 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/InExpression.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/InExpression.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import javax.annotation.CheckForNull;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/IsExpression.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/IsExpression.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/IsExpression.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/IsExpression.java
index 581e9c079..a05be81ff 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/IsExpression.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/IsExpression.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import javax.annotation.CheckForNull;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/KeyValuePair.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/KeyValuePair.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/KeyValuePair.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/KeyValuePair.java
index 6009ce5f6..2032fafd1 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/KeyValuePair.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/KeyValuePair.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import javax.annotation.CheckForNull;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/LambdaExpression.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/LambdaExpression.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/LambdaExpression.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/LambdaExpression.java
index 1f7555372..37ff39e48 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/LambdaExpression.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/LambdaExpression.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
public interface LambdaExpression extends Expression, FunctionLike {
Token lambdaKeyword();
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/ListLiteral.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ListLiteral.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/ListLiteral.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/ListLiteral.java
index dc64c05ca..3483de35b 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/ListLiteral.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ListLiteral.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
public interface ListLiteral extends Expression {
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/Name.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/Name.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/Name.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/Name.java
index b41197594..54de2a27f 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/Name.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/Name.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
public interface Name extends Expression, HasSymbol {
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/NoneExpression.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/NoneExpression.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/NoneExpression.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/NoneExpression.java
index 3f5a9045d..c90c8911f 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/NoneExpression.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/NoneExpression.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
public interface NoneExpression extends Expression {
Token none();
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/NonlocalStatement.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/NonlocalStatement.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/NonlocalStatement.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/NonlocalStatement.java
index 70b8538e7..d2c8231f1 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/NonlocalStatement.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/NonlocalStatement.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import java.util.List;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/NumericLiteral.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/NumericLiteral.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/NumericLiteral.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/NumericLiteral.java
index 4cf246282..b88d37f3b 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/NumericLiteral.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/NumericLiteral.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
public interface NumericLiteral extends Expression {
/**
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/Parameter.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/Parameter.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/Parameter.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/Parameter.java
index a297c5acc..4e44d19b1 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/Parameter.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/Parameter.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import javax.annotation.CheckForNull;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/ParameterList.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ParameterList.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/ParameterList.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/ParameterList.java
index ada0b07c6..2f1d62f47 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/ParameterList.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ParameterList.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import java.util.List;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/ParenthesizedExpression.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ParenthesizedExpression.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/ParenthesizedExpression.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/ParenthesizedExpression.java
index 5bfdb538a..b02bbe865 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/ParenthesizedExpression.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ParenthesizedExpression.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
public interface ParenthesizedExpression extends Expression {
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/PassStatement.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/PassStatement.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/PassStatement.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/PassStatement.java
index b8d3a3a95..ee3d6f076 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/PassStatement.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/PassStatement.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
public interface PassStatement extends Statement {
Token passKeyword();
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/PrintStatement.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/PrintStatement.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/PrintStatement.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/PrintStatement.java
index 9c6d6e41e..107a54544 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/PrintStatement.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/PrintStatement.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import java.util.List;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/QualifiedExpression.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/QualifiedExpression.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/QualifiedExpression.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/QualifiedExpression.java
index 98c13f631..5dc32964c 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/QualifiedExpression.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/QualifiedExpression.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import javax.annotation.CheckForNull;
import org.sonar.python.semantic.Symbol;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/RaiseStatement.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/RaiseStatement.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/RaiseStatement.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/RaiseStatement.java
index a5d3bc4cd..5e0b964ea 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/RaiseStatement.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/RaiseStatement.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import java.util.List;
import javax.annotation.CheckForNull;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/ReprExpression.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ReprExpression.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/ReprExpression.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/ReprExpression.java
index fd77d4f8d..8cfa6a19d 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/ReprExpression.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ReprExpression.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
/**
* Python 2 only.
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/ReturnStatement.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ReturnStatement.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/ReturnStatement.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/ReturnStatement.java
index 77520a309..127646885 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/ReturnStatement.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/ReturnStatement.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import java.util.List;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/SetLiteral.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/SetLiteral.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/SetLiteral.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/SetLiteral.java
index a0741b5bd..fb5dd1d76 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/SetLiteral.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/SetLiteral.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import java.util.List;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/SliceExpression.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/SliceExpression.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/SliceExpression.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/SliceExpression.java
index ded6ba333..f7f77793c 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/SliceExpression.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/SliceExpression.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
public interface SliceExpression extends Expression {
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/SliceItem.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/SliceItem.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/SliceItem.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/SliceItem.java
index 4b9132bdf..112cb5d0c 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/SliceItem.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/SliceItem.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import javax.annotation.CheckForNull;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/SliceList.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/SliceList.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/SliceList.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/SliceList.java
index af4e4968e..94a32089f 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/SliceList.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/SliceList.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import java.util.List;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/StarredExpression.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/StarredExpression.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/StarredExpression.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/StarredExpression.java
index 6e49b20ec..10df7d7e2 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/StarredExpression.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/StarredExpression.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
public interface StarredExpression extends Expression {
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/Statement.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/Statement.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/Statement.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/Statement.java
index f2e181093..cf22d8228 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/Statement.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/Statement.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
public interface Statement extends Tree {
default Token separator() {
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/StatementList.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/StatementList.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/StatementList.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/StatementList.java
index 81888b2c2..06f7988dd 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/StatementList.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/StatementList.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import java.util.List;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/StringElement.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/StringElement.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/StringElement.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/StringElement.java
index 9a99c2d3b..7035cf8a7 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/StringElement.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/StringElement.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
public interface StringElement extends Tree {
/**
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/StringLiteral.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/StringLiteral.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/StringLiteral.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/StringLiteral.java
index 18531c159..0b51053a5 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/StringLiteral.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/StringLiteral.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import java.util.List;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/SubscriptionExpression.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/SubscriptionExpression.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/SubscriptionExpression.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/SubscriptionExpression.java
index b1cac38cd..1847b24d2 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/SubscriptionExpression.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/SubscriptionExpression.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
public interface SubscriptionExpression extends Expression {
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/Token.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/Token.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/Token.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/Token.java
index dd8e05596..6bf2926fa 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/Token.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/Token.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import com.sonar.sslr.api.TokenType;
import java.util.List;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/Tree.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/Tree.java
similarity index 99%
rename from python-squid/src/main/java/org/sonar/python/api/tree/Tree.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/Tree.java
index 7d03c812a..6cf29f5ff 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/Tree.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/Tree.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import java.util.List;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/TreeVisitor.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/TreeVisitor.java
similarity index 99%
rename from python-squid/src/main/java/org/sonar/python/api/tree/TreeVisitor.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/TreeVisitor.java
index ca3f5d00e..edd837f0c 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/TreeVisitor.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/TreeVisitor.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import org.sonar.python.tree.DictCompExpressionImpl;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/Trivia.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/Trivia.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/Trivia.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/Trivia.java
index cd1cdb86e..8a87050cf 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/Trivia.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/Trivia.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
public interface Trivia {
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/TryStatement.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/TryStatement.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/TryStatement.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/TryStatement.java
index bca597f46..95c6ba3db 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/TryStatement.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/TryStatement.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import java.util.List;
import javax.annotation.CheckForNull;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/Tuple.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/Tuple.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/Tuple.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/Tuple.java
index 7f609ce2f..276364166 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/Tuple.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/Tuple.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import java.util.List;
import javax.annotation.CheckForNull;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/TupleParameter.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/TupleParameter.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/TupleParameter.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/TupleParameter.java
index 73f8a9303..52d352fbc 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/TupleParameter.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/TupleParameter.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import java.util.List;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/TypeAnnotation.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/TypeAnnotation.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/TypeAnnotation.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/TypeAnnotation.java
index 81e30a1c5..8f2b1f798 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/TypeAnnotation.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/TypeAnnotation.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import javax.annotation.CheckForNull;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/UnaryExpression.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/UnaryExpression.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/UnaryExpression.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/UnaryExpression.java
index 695a1155c..b38e767d0 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/UnaryExpression.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/UnaryExpression.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
public interface UnaryExpression extends Expression {
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/WhileStatement.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/WhileStatement.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/WhileStatement.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/WhileStatement.java
index 6f42346d1..62ad2a0f2 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/WhileStatement.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/WhileStatement.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import javax.annotation.CheckForNull;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/WithItem.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/WithItem.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/WithItem.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/WithItem.java
index 961c28fe7..7541818a8 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/WithItem.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/WithItem.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import javax.annotation.CheckForNull;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/WithStatement.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/WithStatement.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/WithStatement.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/WithStatement.java
index f78f75f37..2fd399860 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/WithStatement.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/WithStatement.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import java.util.List;
import javax.annotation.CheckForNull;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/YieldExpression.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/YieldExpression.java
similarity index 96%
rename from python-squid/src/main/java/org/sonar/python/api/tree/YieldExpression.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/YieldExpression.java
index 9a0e420d4..5372e6939 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/YieldExpression.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/YieldExpression.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
import java.util.List;
import javax.annotation.CheckForNull;
diff --git a/python-squid/src/main/java/org/sonar/python/api/tree/YieldStatement.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/YieldStatement.java
similarity index 95%
rename from python-squid/src/main/java/org/sonar/python/api/tree/YieldStatement.java
rename to python-squid/src/main/java/org/sonar/plugins/python/api/tree/YieldStatement.java
index a556a62c4..3bb766545 100644
--- a/python-squid/src/main/java/org/sonar/python/api/tree/YieldStatement.java
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/YieldStatement.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.api.tree;
+package org.sonar.plugins.python.api.tree;
public interface YieldStatement extends Statement {
YieldExpression yieldExpression();
diff --git a/python-squid/src/main/java/org/sonar/plugins/python/api/tree/package-info.java b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/package-info.java
new file mode 100644
index 000000000..86a6a227c
--- /dev/null
+++ b/python-squid/src/main/java/org/sonar/plugins/python/api/tree/package-info.java
@@ -0,0 +1,24 @@
+/*
+ * SonarQube Python Plugin
+ * Copyright (C) 2011-2019 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+@ParametersAreNonnullByDefault
+package org.sonar.plugins.python.api.tree;
+
+import javax.annotation.ParametersAreNonnullByDefault;
+
diff --git a/python-squid/src/main/java/org/sonar/python/DocstringExtractor.java b/python-squid/src/main/java/org/sonar/python/DocstringExtractor.java
index d407bfa35..2e24af7ef 100644
--- a/python-squid/src/main/java/org/sonar/python/DocstringExtractor.java
+++ b/python-squid/src/main/java/org/sonar/python/DocstringExtractor.java
@@ -20,11 +20,11 @@
package org.sonar.python;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.ExpressionStatement;
-import org.sonar.python.api.tree.Statement;
-import org.sonar.python.api.tree.StatementList;
-import org.sonar.python.api.tree.StringLiteral;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.ExpressionStatement;
+import org.sonar.plugins.python.api.tree.Statement;
+import org.sonar.plugins.python.api.tree.StatementList;
+import org.sonar.plugins.python.api.tree.StringLiteral;
+import org.sonar.plugins.python.api.tree.Tree;
/**
* Extractor of docstring tokens.
diff --git a/python-squid/src/main/java/org/sonar/python/IssueLocation.java b/python-squid/src/main/java/org/sonar/python/IssueLocation.java
index c8b27e1b8..3fc9c89ed 100644
--- a/python-squid/src/main/java/org/sonar/python/IssueLocation.java
+++ b/python-squid/src/main/java/org/sonar/python/IssueLocation.java
@@ -22,8 +22,8 @@
import com.sonar.sslr.api.AstNode;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
import org.sonar.python.tree.TokenImpl;
public abstract class IssueLocation {
diff --git a/python-squid/src/main/java/org/sonar/python/SubscriptionVisitor.java b/python-squid/src/main/java/org/sonar/python/SubscriptionVisitor.java
index 78f662b5f..c599f330c 100644
--- a/python-squid/src/main/java/org/sonar/python/SubscriptionVisitor.java
+++ b/python-squid/src/main/java/org/sonar/python/SubscriptionVisitor.java
@@ -28,10 +28,14 @@
import java.util.List;
import java.util.function.Consumer;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.FileInput;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.Tree.Kind;
+import org.sonar.plugins.python.api.PythonCheck;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.PythonVisitorContext;
+import org.sonar.plugins.python.api.SubscriptionContext;
+import org.sonar.plugins.python.api.tree.FileInput;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Tree.Kind;
public class SubscriptionVisitor {
diff --git a/python-squid/src/main/java/org/sonar/python/TestPythonVisitorRunner.java b/python-squid/src/main/java/org/sonar/python/TestPythonVisitorRunner.java
index 04b0679f5..6e671b7e9 100644
--- a/python-squid/src/main/java/org/sonar/python/TestPythonVisitorRunner.java
+++ b/python-squid/src/main/java/org/sonar/python/TestPythonVisitorRunner.java
@@ -26,7 +26,9 @@
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
-import org.sonar.python.api.tree.FileInput;
+import org.sonar.plugins.python.api.PythonCheck;
+import org.sonar.plugins.python.api.PythonVisitorContext;
+import org.sonar.plugins.python.api.tree.FileInput;
import org.sonar.python.tree.PythonTreeMaker;
import org.sonar.python.parser.PythonParser;
diff --git a/python-squid/src/main/java/org/sonar/python/TokenLocation.java b/python-squid/src/main/java/org/sonar/python/TokenLocation.java
index b54ab27fd..de16d27ba 100644
--- a/python-squid/src/main/java/org/sonar/python/TokenLocation.java
+++ b/python-squid/src/main/java/org/sonar/python/TokenLocation.java
@@ -19,7 +19,7 @@
*/
package org.sonar.python;
-import org.sonar.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Token;
public class TokenLocation {
diff --git a/python-squid/src/main/java/org/sonar/python/cfg/ControlFlowGraphBuilder.java b/python-squid/src/main/java/org/sonar/python/cfg/ControlFlowGraphBuilder.java
index 5f53b508c..8fcb10fe5 100644
--- a/python-squid/src/main/java/org/sonar/python/cfg/ControlFlowGraphBuilder.java
+++ b/python-squid/src/main/java/org/sonar/python/cfg/ControlFlowGraphBuilder.java
@@ -30,23 +30,23 @@
import javax.annotation.Nullable;
import org.sonar.plugins.python.api.cfg.CfgBlock;
import org.sonar.plugins.python.api.cfg.ControlFlowGraph;
-import org.sonar.python.api.tree.BreakStatement;
-import org.sonar.python.api.tree.ClassDef;
-import org.sonar.python.api.tree.ContinueStatement;
-import org.sonar.python.api.tree.ElseClause;
-import org.sonar.python.api.tree.ExceptClause;
-import org.sonar.python.api.tree.FinallyClause;
-import org.sonar.python.api.tree.ForStatement;
-import org.sonar.python.api.tree.IfStatement;
-import org.sonar.python.api.tree.RaiseStatement;
-import org.sonar.python.api.tree.ReturnStatement;
-import org.sonar.python.api.tree.Statement;
-import org.sonar.python.api.tree.StatementList;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TryStatement;
-import org.sonar.python.api.tree.WhileStatement;
-import org.sonar.python.api.tree.WithStatement;
+import org.sonar.plugins.python.api.tree.BreakStatement;
+import org.sonar.plugins.python.api.tree.ClassDef;
+import org.sonar.plugins.python.api.tree.ContinueStatement;
+import org.sonar.plugins.python.api.tree.ElseClause;
+import org.sonar.plugins.python.api.tree.ExceptClause;
+import org.sonar.plugins.python.api.tree.FinallyClause;
+import org.sonar.plugins.python.api.tree.ForStatement;
+import org.sonar.plugins.python.api.tree.IfStatement;
+import org.sonar.plugins.python.api.tree.RaiseStatement;
+import org.sonar.plugins.python.api.tree.ReturnStatement;
+import org.sonar.plugins.python.api.tree.Statement;
+import org.sonar.plugins.python.api.tree.StatementList;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TryStatement;
+import org.sonar.plugins.python.api.tree.WhileStatement;
+import org.sonar.plugins.python.api.tree.WithStatement;
import org.sonar.python.tree.TreeUtils;
public class ControlFlowGraphBuilder {
diff --git a/python-squid/src/main/java/org/sonar/python/cfg/PythonCfgBlock.java b/python-squid/src/main/java/org/sonar/python/cfg/PythonCfgBlock.java
index cfd63cafc..dc020d244 100644
--- a/python-squid/src/main/java/org/sonar/python/cfg/PythonCfgBlock.java
+++ b/python-squid/src/main/java/org/sonar/python/cfg/PythonCfgBlock.java
@@ -26,7 +26,7 @@
import java.util.Set;
import java.util.stream.Collectors;
import org.sonar.plugins.python.api.cfg.CfgBlock;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Tree;
public abstract class PythonCfgBlock implements CfgBlock {
diff --git a/python-squid/src/main/java/org/sonar/python/cfg/PythonCfgBranchingBlock.java b/python-squid/src/main/java/org/sonar/python/cfg/PythonCfgBranchingBlock.java
index 9714f88eb..a479f9ad4 100644
--- a/python-squid/src/main/java/org/sonar/python/cfg/PythonCfgBranchingBlock.java
+++ b/python-squid/src/main/java/org/sonar/python/cfg/PythonCfgBranchingBlock.java
@@ -27,7 +27,7 @@
import javax.annotation.Nullable;
import org.sonar.plugins.python.api.cfg.CfgBlock;
import org.sonar.plugins.python.api.cfg.CfgBranchingBlock;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Tree;
public class PythonCfgBranchingBlock extends PythonCfgBlock implements CfgBranchingBlock {
diff --git a/python-squid/src/main/java/org/sonar/python/cfg/PythonCfgEndBlock.java b/python-squid/src/main/java/org/sonar/python/cfg/PythonCfgEndBlock.java
index 4fbb2cd2a..f7918733b 100644
--- a/python-squid/src/main/java/org/sonar/python/cfg/PythonCfgEndBlock.java
+++ b/python-squid/src/main/java/org/sonar/python/cfg/PythonCfgEndBlock.java
@@ -25,7 +25,7 @@
import java.util.Set;
import javax.annotation.CheckForNull;
import org.sonar.plugins.python.api.cfg.CfgBlock;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Tree;
public class PythonCfgEndBlock extends PythonCfgBlock {
diff --git a/python-squid/src/main/java/org/sonar/python/metrics/CognitiveComplexityVisitor.java b/python-squid/src/main/java/org/sonar/python/metrics/CognitiveComplexityVisitor.java
index b94088698..13dadc05f 100644
--- a/python-squid/src/main/java/org/sonar/python/metrics/CognitiveComplexityVisitor.java
+++ b/python-squid/src/main/java/org/sonar/python/metrics/CognitiveComplexityVisitor.java
@@ -27,23 +27,23 @@
import java.util.List;
import java.util.Set;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.BinaryExpression;
-import org.sonar.python.api.tree.ClassDef;
-import org.sonar.python.api.tree.ConditionalExpression;
-import org.sonar.python.api.tree.ElseClause;
-import org.sonar.python.api.tree.ExceptClause;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.ForStatement;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.IfStatement;
-import org.sonar.python.api.tree.ReturnStatement;
-import org.sonar.python.api.tree.StatementList;
-import org.sonar.python.api.tree.Statement;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.WhileStatement;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.Tree.Kind;
-import org.sonar.python.tree.BaseTreeVisitor;
+import org.sonar.plugins.python.api.tree.BinaryExpression;
+import org.sonar.plugins.python.api.tree.ClassDef;
+import org.sonar.plugins.python.api.tree.ConditionalExpression;
+import org.sonar.plugins.python.api.tree.ElseClause;
+import org.sonar.plugins.python.api.tree.ExceptClause;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.ForStatement;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.IfStatement;
+import org.sonar.plugins.python.api.tree.ReturnStatement;
+import org.sonar.plugins.python.api.tree.StatementList;
+import org.sonar.plugins.python.api.tree.Statement;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.WhileStatement;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Tree.Kind;
+import org.sonar.plugins.python.api.tree.BaseTreeVisitor;
public class CognitiveComplexityVisitor extends BaseTreeVisitor {
diff --git a/python-squid/src/main/java/org/sonar/python/metrics/ComplexityVisitor.java b/python-squid/src/main/java/org/sonar/python/metrics/ComplexityVisitor.java
index 5ffebe2e8..d764421ae 100644
--- a/python-squid/src/main/java/org/sonar/python/metrics/ComplexityVisitor.java
+++ b/python-squid/src/main/java/org/sonar/python/metrics/ComplexityVisitor.java
@@ -21,15 +21,15 @@
import com.sonar.sslr.api.TokenType;
import org.sonar.python.api.PythonKeyword;
-import org.sonar.python.api.tree.BinaryExpression;
-import org.sonar.python.api.tree.ComprehensionIf;
-import org.sonar.python.api.tree.ConditionalExpression;
-import org.sonar.python.api.tree.ForStatement;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.IfStatement;
-import org.sonar.python.api.tree.WhileStatement;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.tree.BaseTreeVisitor;
+import org.sonar.plugins.python.api.tree.BinaryExpression;
+import org.sonar.plugins.python.api.tree.ComprehensionIf;
+import org.sonar.plugins.python.api.tree.ConditionalExpression;
+import org.sonar.plugins.python.api.tree.ForStatement;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.IfStatement;
+import org.sonar.plugins.python.api.tree.WhileStatement;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.BaseTreeVisitor;
public class ComplexityVisitor extends BaseTreeVisitor {
diff --git a/python-squid/src/main/java/org/sonar/python/metrics/FileLinesVisitor.java b/python-squid/src/main/java/org/sonar/python/metrics/FileLinesVisitor.java
index efa44a58d..27542785b 100644
--- a/python-squid/src/main/java/org/sonar/python/metrics/FileLinesVisitor.java
+++ b/python-squid/src/main/java/org/sonar/python/metrics/FileLinesVisitor.java
@@ -27,19 +27,19 @@
import java.util.Set;
import javax.annotation.Nullable;
import org.sonar.api.measures.CoreMetrics;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.PythonVisitorContext;
-import org.sonar.python.SubscriptionContext;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.PythonVisitorContext;
+import org.sonar.plugins.python.api.SubscriptionContext;
import org.sonar.python.SubscriptionVisitor;
import org.sonar.python.TokenLocation;
import org.sonar.python.api.PythonTokenType;
-import org.sonar.python.api.tree.ClassDef;
-import org.sonar.python.api.tree.FileInput;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.StringLiteral;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.Trivia;
+import org.sonar.plugins.python.api.tree.ClassDef;
+import org.sonar.plugins.python.api.tree.FileInput;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.StringLiteral;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Trivia;
/**
* Visitor that computes {@link CoreMetrics#NCLOC_DATA_KEY} and {@link CoreMetrics#COMMENT_LINES} metrics used by the DevCockpit.
diff --git a/python-squid/src/main/java/org/sonar/python/metrics/FileMetrics.java b/python-squid/src/main/java/org/sonar/python/metrics/FileMetrics.java
index bbc758aad..90bdea566 100644
--- a/python-squid/src/main/java/org/sonar/python/metrics/FileMetrics.java
+++ b/python-squid/src/main/java/org/sonar/python/metrics/FileMetrics.java
@@ -21,10 +21,10 @@
import java.util.ArrayList;
import java.util.List;
-import org.sonar.python.PythonVisitorContext;
-import org.sonar.python.api.tree.FileInput;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.tree.BaseTreeVisitor;
+import org.sonar.plugins.python.api.PythonVisitorContext;
+import org.sonar.plugins.python.api.tree.FileInput;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.BaseTreeVisitor;
public class FileMetrics {
diff --git a/python-squid/src/main/java/org/sonar/python/semantic/SymbolTableBuilder.java b/python-squid/src/main/java/org/sonar/python/semantic/SymbolTableBuilder.java
index 82f85d361..b443709e7 100644
--- a/python-squid/src/main/java/org/sonar/python/semantic/SymbolTableBuilder.java
+++ b/python-squid/src/main/java/org/sonar/python/semantic/SymbolTableBuilder.java
@@ -33,35 +33,35 @@
import java.util.stream.Stream;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.AliasedName;
-import org.sonar.python.api.tree.AnnotatedAssignment;
-import org.sonar.python.api.tree.AnyParameter;
-import org.sonar.python.api.tree.AssignmentStatement;
-import org.sonar.python.api.tree.ClassDef;
-import org.sonar.python.api.tree.CompoundAssignmentStatement;
-import org.sonar.python.api.tree.ComprehensionFor;
-import org.sonar.python.api.tree.Decorator;
-import org.sonar.python.api.tree.DottedName;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.FileInput;
-import org.sonar.python.api.tree.ForStatement;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.FunctionLike;
-import org.sonar.python.api.tree.GlobalStatement;
-import org.sonar.python.api.tree.HasSymbol;
-import org.sonar.python.api.tree.ImportFrom;
-import org.sonar.python.api.tree.ImportName;
-import org.sonar.python.api.tree.LambdaExpression;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.NonlocalStatement;
-import org.sonar.python.api.tree.Parameter;
-import org.sonar.python.api.tree.ParameterList;
-import org.sonar.python.api.tree.QualifiedExpression;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.Tree.Kind;
-import org.sonar.python.api.tree.Tuple;
-import org.sonar.python.api.tree.TupleParameter;
-import org.sonar.python.tree.BaseTreeVisitor;
+import org.sonar.plugins.python.api.tree.HasSymbol;
+import org.sonar.plugins.python.api.tree.AliasedName;
+import org.sonar.plugins.python.api.tree.AnnotatedAssignment;
+import org.sonar.plugins.python.api.tree.AnyParameter;
+import org.sonar.plugins.python.api.tree.AssignmentStatement;
+import org.sonar.plugins.python.api.tree.ClassDef;
+import org.sonar.plugins.python.api.tree.CompoundAssignmentStatement;
+import org.sonar.plugins.python.api.tree.ComprehensionFor;
+import org.sonar.plugins.python.api.tree.Decorator;
+import org.sonar.plugins.python.api.tree.DottedName;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.FileInput;
+import org.sonar.plugins.python.api.tree.ForStatement;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.FunctionLike;
+import org.sonar.plugins.python.api.tree.GlobalStatement;
+import org.sonar.plugins.python.api.tree.ImportFrom;
+import org.sonar.plugins.python.api.tree.ImportName;
+import org.sonar.plugins.python.api.tree.LambdaExpression;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.NonlocalStatement;
+import org.sonar.plugins.python.api.tree.ParameterList;
+import org.sonar.plugins.python.api.tree.Parameter;
+import org.sonar.plugins.python.api.tree.QualifiedExpression;
+import org.sonar.plugins.python.api.tree.Tuple;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Tree.Kind;
+import org.sonar.plugins.python.api.tree.TupleParameter;
+import org.sonar.plugins.python.api.tree.BaseTreeVisitor;
import org.sonar.python.tree.ClassDefImpl;
import org.sonar.python.tree.FileInputImpl;
import org.sonar.python.tree.FunctionDefImpl;
diff --git a/python-squid/src/main/java/org/sonar/python/semantic/Usage.java b/python-squid/src/main/java/org/sonar/python/semantic/Usage.java
index 2d43f4807..1b17f3e10 100644
--- a/python-squid/src/main/java/org/sonar/python/semantic/Usage.java
+++ b/python-squid/src/main/java/org/sonar/python/semantic/Usage.java
@@ -19,7 +19,7 @@
*/
package org.sonar.python.semantic;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Tree;
public interface Usage {
diff --git a/python-squid/src/main/java/org/sonar/python/semantic/UsageImpl.java b/python-squid/src/main/java/org/sonar/python/semantic/UsageImpl.java
index 28f3fbbe1..ba8f5093f 100644
--- a/python-squid/src/main/java/org/sonar/python/semantic/UsageImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/semantic/UsageImpl.java
@@ -19,7 +19,7 @@
*/
package org.sonar.python.semantic;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Tree;
public class UsageImpl implements Usage {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/AliasedNameImpl.java b/python-squid/src/main/java/org/sonar/python/tree/AliasedNameImpl.java
index c8cb0c262..d8b33c65e 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/AliasedNameImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/AliasedNameImpl.java
@@ -24,12 +24,12 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.CheckForNull;
-import org.sonar.python.api.tree.AliasedName;
-import org.sonar.python.api.tree.DottedName;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.AliasedName;
+import org.sonar.plugins.python.api.tree.DottedName;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class AliasedNameImpl extends PyTree implements AliasedName {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/AnnotatedAssignmentImpl.java b/python-squid/src/main/java/org/sonar/python/tree/AnnotatedAssignmentImpl.java
index 1b18e1561..5bc1e3067 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/AnnotatedAssignmentImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/AnnotatedAssignmentImpl.java
@@ -26,11 +26,11 @@
import java.util.stream.Stream;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.AnnotatedAssignment;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.TreeVisitor;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.AnnotatedAssignment;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.Tree;
public class AnnotatedAssignmentImpl extends SimpleStatement implements AnnotatedAssignment {
private final Expression variable;
diff --git a/python-squid/src/main/java/org/sonar/python/tree/ArgListImpl.java b/python-squid/src/main/java/org/sonar/python/tree/ArgListImpl.java
index ad2c93467..79f0005a2 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/ArgListImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/ArgListImpl.java
@@ -21,11 +21,11 @@
import java.util.ArrayList;
import java.util.List;
-import org.sonar.python.api.tree.ArgList;
-import org.sonar.python.api.tree.Argument;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.ArgList;
+import org.sonar.plugins.python.api.tree.Argument;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class ArgListImpl extends PyTree implements ArgList {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/ArgumentImpl.java b/python-squid/src/main/java/org/sonar/python/tree/ArgumentImpl.java
index fecd4f5ad..d94b83bf1 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/ArgumentImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/ArgumentImpl.java
@@ -25,12 +25,12 @@
import java.util.stream.Stream;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.Argument;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.Argument;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class ArgumentImpl extends PyTree implements Argument {
private final Name keywordArgument;
diff --git a/python-squid/src/main/java/org/sonar/python/tree/AssertStatementImpl.java b/python-squid/src/main/java/org/sonar/python/tree/AssertStatementImpl.java
index ec8f6e1f4..65c18340e 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/AssertStatementImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/AssertStatementImpl.java
@@ -25,11 +25,11 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.AssertStatement;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.AssertStatement;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class AssertStatementImpl extends SimpleStatement implements AssertStatement {
private final Token assertKeyword;
diff --git a/python-squid/src/main/java/org/sonar/python/tree/AssignmentStatementImpl.java b/python-squid/src/main/java/org/sonar/python/tree/AssignmentStatementImpl.java
index c4c332757..baa7bab71 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/AssignmentStatementImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/AssignmentStatementImpl.java
@@ -22,12 +22,12 @@
import java.util.ArrayList;
import java.util.List;
import javax.annotation.CheckForNull;
-import org.sonar.python.api.tree.AssignmentStatement;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.ExpressionList;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.AssignmentStatement;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.ExpressionList;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class AssignmentStatementImpl extends SimpleStatement implements AssignmentStatement {
private final List assignTokens;
diff --git a/python-squid/src/main/java/org/sonar/python/tree/AwaitExpressionImpl.java b/python-squid/src/main/java/org/sonar/python/tree/AwaitExpressionImpl.java
index 70ceb3a3d..145562eb4 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/AwaitExpressionImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/AwaitExpressionImpl.java
@@ -23,11 +23,11 @@
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import org.sonar.python.api.tree.AwaitExpression;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.AwaitExpression;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class AwaitExpressionImpl extends PyTree implements AwaitExpression {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/BinaryExpressionImpl.java b/python-squid/src/main/java/org/sonar/python/tree/BinaryExpressionImpl.java
index ff1e8d4e1..b76da4488 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/BinaryExpressionImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/BinaryExpressionImpl.java
@@ -25,11 +25,11 @@
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import org.sonar.python.api.tree.BinaryExpression;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.TreeVisitor;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.BinaryExpression;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.Tree;
public class BinaryExpressionImpl extends PyTree implements BinaryExpression {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/BreakStatementImpl.java b/python-squid/src/main/java/org/sonar/python/tree/BreakStatementImpl.java
index 1662840a1..16f4f5edc 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/BreakStatementImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/BreakStatementImpl.java
@@ -25,10 +25,10 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.CheckForNull;
-import org.sonar.python.api.tree.BreakStatement;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.BreakStatement;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class BreakStatementImpl extends SimpleStatement implements BreakStatement {
private final Token breakKeyword;
diff --git a/python-squid/src/main/java/org/sonar/python/tree/CallExpressionImpl.java b/python-squid/src/main/java/org/sonar/python/tree/CallExpressionImpl.java
index 6bd558165..f0a9aeb70 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/CallExpressionImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/CallExpressionImpl.java
@@ -25,13 +25,13 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.ArgList;
-import org.sonar.python.api.tree.Argument;
-import org.sonar.python.api.tree.CallExpression;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.ArgList;
+import org.sonar.plugins.python.api.tree.Argument;
+import org.sonar.plugins.python.api.tree.CallExpression;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class CallExpressionImpl extends PyTree implements CallExpression {
private final Expression callee;
diff --git a/python-squid/src/main/java/org/sonar/python/tree/ClassDefImpl.java b/python-squid/src/main/java/org/sonar/python/tree/ClassDefImpl.java
index a0627304f..ed334727a 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/ClassDefImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/ClassDefImpl.java
@@ -28,15 +28,15 @@
import java.util.stream.Stream;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.ArgList;
-import org.sonar.python.api.tree.ClassDef;
-import org.sonar.python.api.tree.Decorator;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.StatementList;
-import org.sonar.python.api.tree.StringLiteral;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.ArgList;
+import org.sonar.plugins.python.api.tree.ClassDef;
+import org.sonar.plugins.python.api.tree.Decorator;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.StatementList;
+import org.sonar.plugins.python.api.tree.StringLiteral;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
import org.sonar.python.semantic.Symbol;
public class ClassDefImpl extends PyTree implements ClassDef {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/CompoundAssignmentStatementImpl.java b/python-squid/src/main/java/org/sonar/python/tree/CompoundAssignmentStatementImpl.java
index a4dceb79c..4e69d2c15 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/CompoundAssignmentStatementImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/CompoundAssignmentStatementImpl.java
@@ -25,11 +25,11 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.CheckForNull;
-import org.sonar.python.api.tree.CompoundAssignmentStatement;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.CompoundAssignmentStatement;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class CompoundAssignmentStatementImpl extends SimpleStatement implements CompoundAssignmentStatement {
private final Expression lhsExpression;
diff --git a/python-squid/src/main/java/org/sonar/python/tree/ComprehensionExpressionImpl.java b/python-squid/src/main/java/org/sonar/python/tree/ComprehensionExpressionImpl.java
index 953e7ceb9..a0ca6014b 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/ComprehensionExpressionImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/ComprehensionExpressionImpl.java
@@ -24,12 +24,12 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.ComprehensionExpression;
-import org.sonar.python.api.tree.ComprehensionFor;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.TreeVisitor;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.ComprehensionExpression;
+import org.sonar.plugins.python.api.tree.ComprehensionFor;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.Tree;
public class ComprehensionExpressionImpl extends PyTree implements ComprehensionExpression {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/ComprehensionForImpl.java b/python-squid/src/main/java/org/sonar/python/tree/ComprehensionForImpl.java
index 512635b02..45008294f 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/ComprehensionForImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/ComprehensionForImpl.java
@@ -25,12 +25,12 @@
import java.util.stream.Stream;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.ComprehensionClause;
-import org.sonar.python.api.tree.ComprehensionFor;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.ComprehensionClause;
+import org.sonar.plugins.python.api.tree.ComprehensionFor;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class ComprehensionForImpl extends PyTree implements ComprehensionFor {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/ComprehensionIfImpl.java b/python-squid/src/main/java/org/sonar/python/tree/ComprehensionIfImpl.java
index 41463bd16..ae4006882 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/ComprehensionIfImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/ComprehensionIfImpl.java
@@ -25,12 +25,12 @@
import java.util.stream.Stream;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.ComprehensionClause;
-import org.sonar.python.api.tree.ComprehensionIf;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.ComprehensionClause;
+import org.sonar.plugins.python.api.tree.ComprehensionIf;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class ComprehensionIfImpl extends PyTree implements ComprehensionIf {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/ConditionalExpressionImpl.java b/python-squid/src/main/java/org/sonar/python/tree/ConditionalExpressionImpl.java
index 905f5f64b..1cc3e63df 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/ConditionalExpressionImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/ConditionalExpressionImpl.java
@@ -23,11 +23,11 @@
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import org.sonar.python.api.tree.ConditionalExpression;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.ConditionalExpression;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class ConditionalExpressionImpl extends PyTree implements ConditionalExpression {
private final Expression trueExpression;
diff --git a/python-squid/src/main/java/org/sonar/python/tree/ContinueStatementImpl.java b/python-squid/src/main/java/org/sonar/python/tree/ContinueStatementImpl.java
index 56be309d6..040f82439 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/ContinueStatementImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/ContinueStatementImpl.java
@@ -25,10 +25,10 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.CheckForNull;
-import org.sonar.python.api.tree.ContinueStatement;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.ContinueStatement;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class ContinueStatementImpl extends SimpleStatement implements ContinueStatement {
private final Token continueKeyword;
diff --git a/python-squid/src/main/java/org/sonar/python/tree/DecoratorImpl.java b/python-squid/src/main/java/org/sonar/python/tree/DecoratorImpl.java
index feca0d558..faa75f9a8 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/DecoratorImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/DecoratorImpl.java
@@ -25,12 +25,12 @@
import java.util.stream.Stream;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.ArgList;
-import org.sonar.python.api.tree.Decorator;
-import org.sonar.python.api.tree.DottedName;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.ArgList;
+import org.sonar.plugins.python.api.tree.Decorator;
+import org.sonar.plugins.python.api.tree.DottedName;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class DecoratorImpl extends PyTree implements Decorator {
private final Token atToken;
diff --git a/python-squid/src/main/java/org/sonar/python/tree/DelStatementImpl.java b/python-squid/src/main/java/org/sonar/python/tree/DelStatementImpl.java
index 34ca69629..7ef319fac 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/DelStatementImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/DelStatementImpl.java
@@ -25,11 +25,11 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.DelStatement;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.DelStatement;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class DelStatementImpl extends SimpleStatement implements DelStatement {
private final Token delKeyword;
diff --git a/python-squid/src/main/java/org/sonar/python/tree/DictCompExpressionImpl.java b/python-squid/src/main/java/org/sonar/python/tree/DictCompExpressionImpl.java
index dc25d9f58..f9f527574 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/DictCompExpressionImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/DictCompExpressionImpl.java
@@ -23,12 +23,12 @@
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import org.sonar.python.api.tree.ComprehensionFor;
-import org.sonar.python.api.tree.DictCompExpression;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.TreeVisitor;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.ComprehensionFor;
+import org.sonar.plugins.python.api.tree.DictCompExpression;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.Tree;
public class DictCompExpressionImpl extends PyTree implements DictCompExpression {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/DictOrSetLiteralImpl.java b/python-squid/src/main/java/org/sonar/python/tree/DictOrSetLiteralImpl.java
index 8be75e81c..039d13f8a 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/DictOrSetLiteralImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/DictOrSetLiteralImpl.java
@@ -21,8 +21,8 @@
import java.util.ArrayList;
import java.util.List;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
public abstract class DictOrSetLiteralImpl extends PyTree {
private final Token lCurlyBrace;
diff --git a/python-squid/src/main/java/org/sonar/python/tree/DictionaryLiteralImpl.java b/python-squid/src/main/java/org/sonar/python/tree/DictionaryLiteralImpl.java
index 730beeb76..660d91750 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/DictionaryLiteralImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/DictionaryLiteralImpl.java
@@ -20,10 +20,10 @@
package org.sonar.python.tree;
import java.util.List;
-import org.sonar.python.api.tree.DictionaryLiteral;
-import org.sonar.python.api.tree.KeyValuePair;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.DictionaryLiteral;
+import org.sonar.plugins.python.api.tree.KeyValuePair;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class DictionaryLiteralImpl extends DictOrSetLiteralImpl implements DictionaryLiteral {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/DottedNameImpl.java b/python-squid/src/main/java/org/sonar/python/tree/DottedNameImpl.java
index 5144c6733..03afeb2ac 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/DottedNameImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/DottedNameImpl.java
@@ -21,10 +21,10 @@
import java.util.Collections;
import java.util.List;
-import org.sonar.python.api.tree.DottedName;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.DottedName;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class DottedNameImpl extends PyTree implements DottedName {
private final List names;
diff --git a/python-squid/src/main/java/org/sonar/python/tree/EllipsisExpressionImpl.java b/python-squid/src/main/java/org/sonar/python/tree/EllipsisExpressionImpl.java
index c3ee5a85d..9145ebd05 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/EllipsisExpressionImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/EllipsisExpressionImpl.java
@@ -21,10 +21,10 @@
import java.util.Collections;
import java.util.List;
-import org.sonar.python.api.tree.EllipsisExpression;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.EllipsisExpression;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class EllipsisExpressionImpl extends PyTree implements EllipsisExpression {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/ElseClauseImpl.java b/python-squid/src/main/java/org/sonar/python/tree/ElseClauseImpl.java
index e4f8098f0..dc1df22df 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/ElseClauseImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/ElseClauseImpl.java
@@ -24,11 +24,11 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.ElseClause;
-import org.sonar.python.api.tree.StatementList;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.ElseClause;
+import org.sonar.plugins.python.api.tree.StatementList;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class ElseClauseImpl extends PyTree implements ElseClause {
private final Token elseKeyword;
diff --git a/python-squid/src/main/java/org/sonar/python/tree/ExceptClauseImpl.java b/python-squid/src/main/java/org/sonar/python/tree/ExceptClauseImpl.java
index d8168a1d9..224407574 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/ExceptClauseImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/ExceptClauseImpl.java
@@ -25,12 +25,12 @@
import java.util.stream.Stream;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.ExceptClause;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.StatementList;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.TreeVisitor;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.ExceptClause;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.StatementList;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.Tree;
public class ExceptClauseImpl extends PyTree implements ExceptClause {
private final Token exceptKeyword;
diff --git a/python-squid/src/main/java/org/sonar/python/tree/ExecStatementImpl.java b/python-squid/src/main/java/org/sonar/python/tree/ExecStatementImpl.java
index 993013521..443fca245 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/ExecStatementImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/ExecStatementImpl.java
@@ -25,11 +25,11 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.ExecStatement;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.ExecStatement;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class ExecStatementImpl extends SimpleStatement implements ExecStatement {
private final Token execKeyword;
diff --git a/python-squid/src/main/java/org/sonar/python/tree/ExpressionListImpl.java b/python-squid/src/main/java/org/sonar/python/tree/ExpressionListImpl.java
index 26f20ed68..c1b16d4a7 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/ExpressionListImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/ExpressionListImpl.java
@@ -21,11 +21,11 @@
import java.util.ArrayList;
import java.util.List;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.ExpressionList;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.ExpressionList;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class ExpressionListImpl extends PyTree implements ExpressionList {
private final List expressions;
diff --git a/python-squid/src/main/java/org/sonar/python/tree/ExpressionStatementImpl.java b/python-squid/src/main/java/org/sonar/python/tree/ExpressionStatementImpl.java
index e6ed32328..139e03459 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/ExpressionStatementImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/ExpressionStatementImpl.java
@@ -23,11 +23,11 @@
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.ExpressionStatement;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.ExpressionStatement;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class ExpressionStatementImpl extends SimpleStatement implements ExpressionStatement {
private final List expressions;
diff --git a/python-squid/src/main/java/org/sonar/python/tree/FileInputImpl.java b/python-squid/src/main/java/org/sonar/python/tree/FileInputImpl.java
index d38b4b2b1..74d16028c 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/FileInputImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/FileInputImpl.java
@@ -27,12 +27,12 @@
import java.util.stream.Stream;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.FileInput;
-import org.sonar.python.api.tree.StatementList;
-import org.sonar.python.api.tree.StringLiteral;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.FileInput;
+import org.sonar.plugins.python.api.tree.StatementList;
+import org.sonar.plugins.python.api.tree.StringLiteral;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
import org.sonar.python.semantic.Symbol;
public class FileInputImpl extends PyTree implements FileInput {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/FinallyClauseImpl.java b/python-squid/src/main/java/org/sonar/python/tree/FinallyClauseImpl.java
index 7b2138bf7..2b0998327 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/FinallyClauseImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/FinallyClauseImpl.java
@@ -24,11 +24,11 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.FinallyClause;
-import org.sonar.python.api.tree.StatementList;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.TreeVisitor;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.FinallyClause;
+import org.sonar.plugins.python.api.tree.StatementList;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.Tree;
public class FinallyClauseImpl extends PyTree implements FinallyClause {
private final Token finallyKeyword;
diff --git a/python-squid/src/main/java/org/sonar/python/tree/ForStatementImpl.java b/python-squid/src/main/java/org/sonar/python/tree/ForStatementImpl.java
index 8b8bf3ebf..ac7100d77 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/ForStatementImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/ForStatementImpl.java
@@ -27,13 +27,13 @@
import java.util.stream.Stream;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.ElseClause;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.ForStatement;
-import org.sonar.python.api.tree.StatementList;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.ElseClause;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.ForStatement;
+import org.sonar.plugins.python.api.tree.StatementList;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class ForStatementImpl extends PyTree implements ForStatement {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/FunctionDefImpl.java b/python-squid/src/main/java/org/sonar/python/tree/FunctionDefImpl.java
index 696c8c607..70da8c6fb 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/FunctionDefImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/FunctionDefImpl.java
@@ -28,16 +28,16 @@
import java.util.stream.Stream;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.Decorator;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.ParameterList;
-import org.sonar.python.api.tree.StatementList;
-import org.sonar.python.api.tree.StringLiteral;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
-import org.sonar.python.api.tree.TypeAnnotation;
+import org.sonar.plugins.python.api.tree.Decorator;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.ParameterList;
+import org.sonar.plugins.python.api.tree.StatementList;
+import org.sonar.plugins.python.api.tree.StringLiteral;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.TypeAnnotation;
import org.sonar.python.semantic.Symbol;
public class FunctionDefImpl extends PyTree implements FunctionDef {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/GlobalStatementImpl.java b/python-squid/src/main/java/org/sonar/python/tree/GlobalStatementImpl.java
index 3573f625f..0a7be7af1 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/GlobalStatementImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/GlobalStatementImpl.java
@@ -25,11 +25,11 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.CheckForNull;
-import org.sonar.python.api.tree.GlobalStatement;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.GlobalStatement;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class GlobalStatementImpl extends SimpleStatement implements GlobalStatement {
private final Token globalKeyword;
diff --git a/python-squid/src/main/java/org/sonar/python/tree/IfStatementImpl.java b/python-squid/src/main/java/org/sonar/python/tree/IfStatementImpl.java
index 4a8122391..e85a31a53 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/IfStatementImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/IfStatementImpl.java
@@ -20,19 +20,19 @@
package org.sonar.python.tree;
import java.util.Objects;
-import org.sonar.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Token;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.CheckForNull;
-import org.sonar.python.api.tree.ElseClause;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.IfStatement;
-import org.sonar.python.api.tree.StatementList;
-import org.sonar.python.api.tree.TreeVisitor;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.ElseClause;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.IfStatement;
+import org.sonar.plugins.python.api.tree.StatementList;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.Tree;
public class IfStatementImpl extends PyTree implements IfStatement {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/ImportFromImpl.java b/python-squid/src/main/java/org/sonar/python/tree/ImportFromImpl.java
index eee5bb11a..c1de9602f 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/ImportFromImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/ImportFromImpl.java
@@ -27,12 +27,12 @@
import java.util.stream.Stream;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.AliasedName;
-import org.sonar.python.api.tree.DottedName;
-import org.sonar.python.api.tree.ImportFrom;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.AliasedName;
+import org.sonar.plugins.python.api.tree.DottedName;
+import org.sonar.plugins.python.api.tree.ImportFrom;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class ImportFromImpl extends SimpleStatement implements ImportFrom {
private final Token fromKeyword;
diff --git a/python-squid/src/main/java/org/sonar/python/tree/ImportNameImpl.java b/python-squid/src/main/java/org/sonar/python/tree/ImportNameImpl.java
index 905355849..815645204 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/ImportNameImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/ImportNameImpl.java
@@ -25,11 +25,11 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.CheckForNull;
-import org.sonar.python.api.tree.AliasedName;
-import org.sonar.python.api.tree.ImportName;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.AliasedName;
+import org.sonar.plugins.python.api.tree.ImportName;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class ImportNameImpl extends SimpleStatement implements ImportName {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/InExpressionImpl.java b/python-squid/src/main/java/org/sonar/python/tree/InExpressionImpl.java
index 7ee3af2e9..01762b1e7 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/InExpressionImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/InExpressionImpl.java
@@ -25,10 +25,10 @@
import java.util.stream.Stream;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.InExpression;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.InExpression;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
public class InExpressionImpl extends BinaryExpressionImpl implements InExpression {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/IsExpressionImpl.java b/python-squid/src/main/java/org/sonar/python/tree/IsExpressionImpl.java
index 333df2ea6..d325119de 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/IsExpressionImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/IsExpressionImpl.java
@@ -25,10 +25,10 @@
import java.util.stream.Stream;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.IsExpression;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.IsExpression;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
public class IsExpressionImpl extends BinaryExpressionImpl implements IsExpression {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/KeyValuePairImpl.java b/python-squid/src/main/java/org/sonar/python/tree/KeyValuePairImpl.java
index 311d21ce3..f4c22b551 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/KeyValuePairImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/KeyValuePairImpl.java
@@ -24,11 +24,11 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.CheckForNull;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.KeyValuePair;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.TreeVisitor;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.KeyValuePair;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.Tree;
public class KeyValuePairImpl extends PyTree implements KeyValuePair {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/LambdaExpressionImpl.java b/python-squid/src/main/java/org/sonar/python/tree/LambdaExpressionImpl.java
index a13a996c9..ab5381666 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/LambdaExpressionImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/LambdaExpressionImpl.java
@@ -27,12 +27,12 @@
import java.util.stream.Stream;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.LambdaExpression;
-import org.sonar.python.api.tree.ParameterList;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.LambdaExpression;
+import org.sonar.plugins.python.api.tree.ParameterList;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
import org.sonar.python.semantic.Symbol;
public class LambdaExpressionImpl extends PyTree implements LambdaExpression {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/ListLiteralImpl.java b/python-squid/src/main/java/org/sonar/python/tree/ListLiteralImpl.java
index 79e43fb9a..34c9ce76a 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/ListLiteralImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/ListLiteralImpl.java
@@ -22,11 +22,11 @@
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import org.sonar.python.api.tree.ExpressionList;
-import org.sonar.python.api.tree.ListLiteral;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.ExpressionList;
+import org.sonar.plugins.python.api.tree.ListLiteral;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class ListLiteralImpl extends PyTree implements ListLiteral {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/NameImpl.java b/python-squid/src/main/java/org/sonar/python/tree/NameImpl.java
index 96de30b0f..b8cfbed85 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/NameImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/NameImpl.java
@@ -22,10 +22,10 @@
import java.util.Collections;
import java.util.List;
import javax.annotation.CheckForNull;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
import org.sonar.python.semantic.Symbol;
public class NameImpl extends PyTree implements Name {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/NoneExpressionImpl.java b/python-squid/src/main/java/org/sonar/python/tree/NoneExpressionImpl.java
index 61239b092..4ede091c2 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/NoneExpressionImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/NoneExpressionImpl.java
@@ -21,10 +21,10 @@
import java.util.Collections;
import java.util.List;
-import org.sonar.python.api.tree.NoneExpression;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.NoneExpression;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class NoneExpressionImpl extends PyTree implements NoneExpression {
private final Token none;
diff --git a/python-squid/src/main/java/org/sonar/python/tree/NonlocalStatementImpl.java b/python-squid/src/main/java/org/sonar/python/tree/NonlocalStatementImpl.java
index feacce4e2..5768401af 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/NonlocalStatementImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/NonlocalStatementImpl.java
@@ -25,11 +25,11 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.CheckForNull;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.NonlocalStatement;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.NonlocalStatement;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class NonlocalStatementImpl extends SimpleStatement implements NonlocalStatement {
private final Token nonlocalKeyword;
diff --git a/python-squid/src/main/java/org/sonar/python/tree/NumericLiteralImpl.java b/python-squid/src/main/java/org/sonar/python/tree/NumericLiteralImpl.java
index 20f180161..bb37ee92c 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/NumericLiteralImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/NumericLiteralImpl.java
@@ -21,10 +21,10 @@
import java.util.Collections;
import java.util.List;
-import org.sonar.python.api.tree.NumericLiteral;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.TreeVisitor;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.NumericLiteral;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.Tree;
public class NumericLiteralImpl extends PyTree implements NumericLiteral {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/ParameterImpl.java b/python-squid/src/main/java/org/sonar/python/tree/ParameterImpl.java
index 972fba69e..41292092f 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/ParameterImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/ParameterImpl.java
@@ -25,13 +25,13 @@
import java.util.stream.Stream;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.Parameter;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
-import org.sonar.python.api.tree.TypeAnnotation;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.Parameter;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.TypeAnnotation;
public class ParameterImpl extends PyTree implements Parameter {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/ParameterListImpl.java b/python-squid/src/main/java/org/sonar/python/tree/ParameterListImpl.java
index 38da7b8fc..0ec89fecb 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/ParameterListImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/ParameterListImpl.java
@@ -23,12 +23,12 @@
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
-import org.sonar.python.api.tree.AnyParameter;
-import org.sonar.python.api.tree.Parameter;
-import org.sonar.python.api.tree.ParameterList;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.AnyParameter;
+import org.sonar.plugins.python.api.tree.Parameter;
+import org.sonar.plugins.python.api.tree.ParameterList;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class ParameterListImpl extends PyTree implements ParameterList {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/ParenthesizedExpressionImpl.java b/python-squid/src/main/java/org/sonar/python/tree/ParenthesizedExpressionImpl.java
index e51c20dea..9ff8fd4b4 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/ParenthesizedExpressionImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/ParenthesizedExpressionImpl.java
@@ -22,11 +22,11 @@
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.ParenthesizedExpression;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.TreeVisitor;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.ParenthesizedExpression;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.Tree;
public class ParenthesizedExpressionImpl extends PyTree implements ParenthesizedExpression {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/PassStatementImpl.java b/python-squid/src/main/java/org/sonar/python/tree/PassStatementImpl.java
index 184ea1063..1df3a711e 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/PassStatementImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/PassStatementImpl.java
@@ -25,10 +25,10 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.PassStatement;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.PassStatement;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class PassStatementImpl extends SimpleStatement implements PassStatement {
private final Token passKeyword;
diff --git a/python-squid/src/main/java/org/sonar/python/tree/PrintStatementImpl.java b/python-squid/src/main/java/org/sonar/python/tree/PrintStatementImpl.java
index cc918e96d..4745f4ab7 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/PrintStatementImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/PrintStatementImpl.java
@@ -24,11 +24,11 @@
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.PrintStatement;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.PrintStatement;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class PrintStatementImpl extends SimpleStatement implements PrintStatement {
private final Token printKeyword;
diff --git a/python-squid/src/main/java/org/sonar/python/tree/PyTree.java b/python-squid/src/main/java/org/sonar/python/tree/PyTree.java
index 4c4d1ec12..cf0d16499 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/PyTree.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/PyTree.java
@@ -20,8 +20,8 @@
package org.sonar.python.tree;
import java.util.List;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
public abstract class PyTree implements Tree {
protected Token firstToken;
diff --git a/python-squid/src/main/java/org/sonar/python/tree/PythonTreeMaker.java b/python-squid/src/main/java/org/sonar/python/tree/PythonTreeMaker.java
index e767c6394..74e6d63e6 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/PythonTreeMaker.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/PythonTreeMaker.java
@@ -34,63 +34,63 @@
import org.sonar.python.api.PythonKeyword;
import org.sonar.python.api.PythonPunctuator;
import org.sonar.python.api.PythonTokenType;
-import org.sonar.python.api.tree.AliasedName;
-import org.sonar.python.api.tree.AnnotatedAssignment;
-import org.sonar.python.api.tree.AnyParameter;
-import org.sonar.python.api.tree.ArgList;
-import org.sonar.python.api.tree.Argument;
-import org.sonar.python.api.tree.AssertStatement;
-import org.sonar.python.api.tree.AssignmentStatement;
-import org.sonar.python.api.tree.BreakStatement;
-import org.sonar.python.api.tree.CallExpression;
-import org.sonar.python.api.tree.ClassDef;
-import org.sonar.python.api.tree.CompoundAssignmentStatement;
-import org.sonar.python.api.tree.ComprehensionClause;
-import org.sonar.python.api.tree.ComprehensionExpression;
-import org.sonar.python.api.tree.ComprehensionFor;
-import org.sonar.python.api.tree.ConditionalExpression;
-import org.sonar.python.api.tree.ContinueStatement;
-import org.sonar.python.api.tree.Decorator;
-import org.sonar.python.api.tree.DelStatement;
-import org.sonar.python.api.tree.DottedName;
-import org.sonar.python.api.tree.ElseClause;
-import org.sonar.python.api.tree.ExceptClause;
-import org.sonar.python.api.tree.ExecStatement;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.ExpressionList;
-import org.sonar.python.api.tree.ExpressionStatement;
-import org.sonar.python.api.tree.FileInput;
-import org.sonar.python.api.tree.FinallyClause;
-import org.sonar.python.api.tree.ForStatement;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.GlobalStatement;
-import org.sonar.python.api.tree.IfStatement;
-import org.sonar.python.api.tree.ImportFrom;
-import org.sonar.python.api.tree.ImportName;
-import org.sonar.python.api.tree.ImportStatement;
-import org.sonar.python.api.tree.KeyValuePair;
-import org.sonar.python.api.tree.LambdaExpression;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.NonlocalStatement;
-import org.sonar.python.api.tree.ParameterList;
-import org.sonar.python.api.tree.PassStatement;
-import org.sonar.python.api.tree.PrintStatement;
-import org.sonar.python.api.tree.QualifiedExpression;
-import org.sonar.python.api.tree.RaiseStatement;
-import org.sonar.python.api.tree.ReturnStatement;
-import org.sonar.python.api.tree.SliceItem;
-import org.sonar.python.api.tree.SliceList;
-import org.sonar.python.api.tree.Statement;
-import org.sonar.python.api.tree.StatementList;
-import org.sonar.python.api.tree.StringElement;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TryStatement;
-import org.sonar.python.api.tree.TypeAnnotation;
-import org.sonar.python.api.tree.WithItem;
-import org.sonar.python.api.tree.WithStatement;
-import org.sonar.python.api.tree.YieldExpression;
-import org.sonar.python.api.tree.YieldStatement;
+import org.sonar.plugins.python.api.tree.AliasedName;
+import org.sonar.plugins.python.api.tree.AnnotatedAssignment;
+import org.sonar.plugins.python.api.tree.AnyParameter;
+import org.sonar.plugins.python.api.tree.ArgList;
+import org.sonar.plugins.python.api.tree.Argument;
+import org.sonar.plugins.python.api.tree.AssertStatement;
+import org.sonar.plugins.python.api.tree.AssignmentStatement;
+import org.sonar.plugins.python.api.tree.BreakStatement;
+import org.sonar.plugins.python.api.tree.CallExpression;
+import org.sonar.plugins.python.api.tree.ClassDef;
+import org.sonar.plugins.python.api.tree.CompoundAssignmentStatement;
+import org.sonar.plugins.python.api.tree.ComprehensionClause;
+import org.sonar.plugins.python.api.tree.ComprehensionExpression;
+import org.sonar.plugins.python.api.tree.ComprehensionFor;
+import org.sonar.plugins.python.api.tree.ConditionalExpression;
+import org.sonar.plugins.python.api.tree.ContinueStatement;
+import org.sonar.plugins.python.api.tree.Decorator;
+import org.sonar.plugins.python.api.tree.DelStatement;
+import org.sonar.plugins.python.api.tree.DottedName;
+import org.sonar.plugins.python.api.tree.ElseClause;
+import org.sonar.plugins.python.api.tree.ExceptClause;
+import org.sonar.plugins.python.api.tree.ExecStatement;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.ExpressionList;
+import org.sonar.plugins.python.api.tree.ExpressionStatement;
+import org.sonar.plugins.python.api.tree.FileInput;
+import org.sonar.plugins.python.api.tree.FinallyClause;
+import org.sonar.plugins.python.api.tree.ForStatement;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.GlobalStatement;
+import org.sonar.plugins.python.api.tree.IfStatement;
+import org.sonar.plugins.python.api.tree.ImportFrom;
+import org.sonar.plugins.python.api.tree.ImportName;
+import org.sonar.plugins.python.api.tree.ImportStatement;
+import org.sonar.plugins.python.api.tree.KeyValuePair;
+import org.sonar.plugins.python.api.tree.LambdaExpression;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.NonlocalStatement;
+import org.sonar.plugins.python.api.tree.ParameterList;
+import org.sonar.plugins.python.api.tree.PassStatement;
+import org.sonar.plugins.python.api.tree.PrintStatement;
+import org.sonar.plugins.python.api.tree.QualifiedExpression;
+import org.sonar.plugins.python.api.tree.RaiseStatement;
+import org.sonar.plugins.python.api.tree.ReturnStatement;
+import org.sonar.plugins.python.api.tree.SliceItem;
+import org.sonar.plugins.python.api.tree.SliceList;
+import org.sonar.plugins.python.api.tree.Statement;
+import org.sonar.plugins.python.api.tree.StatementList;
+import org.sonar.plugins.python.api.tree.StringElement;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TryStatement;
+import org.sonar.plugins.python.api.tree.TypeAnnotation;
+import org.sonar.plugins.python.api.tree.WithItem;
+import org.sonar.plugins.python.api.tree.WithStatement;
+import org.sonar.plugins.python.api.tree.YieldExpression;
+import org.sonar.plugins.python.api.tree.YieldStatement;
public class PythonTreeMaker {
@@ -785,7 +785,7 @@ private Expression exprListOrTestList(AstNode exprListOrTestList) {
return new TupleImpl(null, expressions, commaTokens, null);
}
- Expression expression(AstNode astNode) {
+ public Expression expression(AstNode astNode) {
if (astNode.is(PythonGrammar.ATOM) && astNode.getFirstChild().is(PythonPunctuator.LBRACKET)) {
return listLiteral(astNode);
}
diff --git a/python-squid/src/main/java/org/sonar/python/tree/QualifiedExpressionImpl.java b/python-squid/src/main/java/org/sonar/python/tree/QualifiedExpressionImpl.java
index 120f0f7f5..2dacfde56 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/QualifiedExpressionImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/QualifiedExpressionImpl.java
@@ -22,12 +22,12 @@
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.QualifiedExpression;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.QualifiedExpression;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class QualifiedExpressionImpl extends PyTree implements QualifiedExpression {
private final Name name;
diff --git a/python-squid/src/main/java/org/sonar/python/tree/RaiseStatementImpl.java b/python-squid/src/main/java/org/sonar/python/tree/RaiseStatementImpl.java
index 72e5f8e7d..891cfdda8 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/RaiseStatementImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/RaiseStatementImpl.java
@@ -27,11 +27,11 @@
import java.util.stream.Stream;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.RaiseStatement;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.RaiseStatement;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class RaiseStatementImpl extends SimpleStatement implements RaiseStatement {
private final Token raiseKeyword;
diff --git a/python-squid/src/main/java/org/sonar/python/tree/ReprExpressionImpl.java b/python-squid/src/main/java/org/sonar/python/tree/ReprExpressionImpl.java
index 4ba18cbb7..8fc607c4b 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/ReprExpressionImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/ReprExpressionImpl.java
@@ -22,11 +22,11 @@
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import org.sonar.python.api.tree.ExpressionList;
-import org.sonar.python.api.tree.ReprExpression;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.ExpressionList;
+import org.sonar.plugins.python.api.tree.ReprExpression;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class ReprExpressionImpl extends PyTree implements ReprExpression {
private final Token openingBacktick;
diff --git a/python-squid/src/main/java/org/sonar/python/tree/ReturnStatementImpl.java b/python-squid/src/main/java/org/sonar/python/tree/ReturnStatementImpl.java
index d5c6ff35b..8215f568c 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/ReturnStatementImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/ReturnStatementImpl.java
@@ -24,11 +24,11 @@
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.ReturnStatement;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.ReturnStatement;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class ReturnStatementImpl extends SimpleStatement implements ReturnStatement {
private final Token returnKeyword;
diff --git a/python-squid/src/main/java/org/sonar/python/tree/Separators.java b/python-squid/src/main/java/org/sonar/python/tree/Separators.java
index 05e54aaf9..e347dc603 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/Separators.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/Separators.java
@@ -26,7 +26,7 @@
import java.util.stream.Stream;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Token;
public class Separators {
public static final Separators EMPTY = new Separators(null, null);
diff --git a/python-squid/src/main/java/org/sonar/python/tree/SetLiteralImpl.java b/python-squid/src/main/java/org/sonar/python/tree/SetLiteralImpl.java
index b1e7b6f61..a0ed07fef 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/SetLiteralImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/SetLiteralImpl.java
@@ -20,10 +20,10 @@
package org.sonar.python.tree;
import java.util.List;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.SetLiteral;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.SetLiteral;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class SetLiteralImpl extends DictOrSetLiteralImpl implements SetLiteral {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/SimpleStatement.java b/python-squid/src/main/java/org/sonar/python/tree/SimpleStatement.java
index 2bbb04edf..4d06a75c8 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/SimpleStatement.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/SimpleStatement.java
@@ -23,8 +23,8 @@
import java.util.List;
import org.sonar.python.api.PythonPunctuator;
import org.sonar.python.api.PythonTokenType;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
public abstract class SimpleStatement extends PyTree {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/SliceExpressionImpl.java b/python-squid/src/main/java/org/sonar/python/tree/SliceExpressionImpl.java
index f47dfcf50..9c34f1214 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/SliceExpressionImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/SliceExpressionImpl.java
@@ -23,12 +23,12 @@
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.SliceExpression;
-import org.sonar.python.api.tree.SliceList;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.TreeVisitor;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.SliceExpression;
+import org.sonar.plugins.python.api.tree.SliceList;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.Tree;
public class SliceExpressionImpl extends PyTree implements SliceExpression {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/SliceItemImpl.java b/python-squid/src/main/java/org/sonar/python/tree/SliceItemImpl.java
index 2457f43a8..c80f8d59d 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/SliceItemImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/SliceItemImpl.java
@@ -25,11 +25,11 @@
import java.util.stream.Stream;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.SliceItem;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.SliceItem;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class SliceItemImpl extends PyTree implements SliceItem {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/SliceListImpl.java b/python-squid/src/main/java/org/sonar/python/tree/SliceListImpl.java
index 41677ba16..cc285d11a 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/SliceListImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/SliceListImpl.java
@@ -21,10 +21,10 @@
import java.util.ArrayList;
import java.util.List;
-import org.sonar.python.api.tree.SliceList;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.SliceList;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class SliceListImpl extends PyTree implements SliceList {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/StarredExpressionImpl.java b/python-squid/src/main/java/org/sonar/python/tree/StarredExpressionImpl.java
index d788f40fe..d0b315f41 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/StarredExpressionImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/StarredExpressionImpl.java
@@ -23,11 +23,11 @@
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.StarredExpression;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.StarredExpression;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class StarredExpressionImpl extends PyTree implements StarredExpression {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/StatementListImpl.java b/python-squid/src/main/java/org/sonar/python/tree/StatementListImpl.java
index 83571266f..502234a0a 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/StatementListImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/StatementListImpl.java
@@ -23,10 +23,10 @@
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import org.sonar.python.api.tree.Statement;
-import org.sonar.python.api.tree.StatementList;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.Statement;
+import org.sonar.plugins.python.api.tree.StatementList;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
public class StatementListImpl extends PyTree implements StatementList {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/StatementWithSeparator.java b/python-squid/src/main/java/org/sonar/python/tree/StatementWithSeparator.java
index 4040539dc..f2a31e7d1 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/StatementWithSeparator.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/StatementWithSeparator.java
@@ -26,7 +26,7 @@ public class StatementWithSeparator {
private AstNode statement;
private Separators separators;
- StatementWithSeparator(AstNode statement, @Nullable Separators separators) {
+ public StatementWithSeparator(AstNode statement, @Nullable Separators separators) {
this.statement = statement;
this.separators = separators == null ? Separators.EMPTY : separators;
}
diff --git a/python-squid/src/main/java/org/sonar/python/tree/StringElementImpl.java b/python-squid/src/main/java/org/sonar/python/tree/StringElementImpl.java
index 5a87fe51a..438edd7f6 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/StringElementImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/StringElementImpl.java
@@ -21,10 +21,10 @@
import java.util.Collections;
import java.util.List;
-import org.sonar.python.api.tree.StringElement;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.TreeVisitor;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.StringElement;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.Tree;
public class StringElementImpl extends PyTree implements StringElement {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/StringLiteralImpl.java b/python-squid/src/main/java/org/sonar/python/tree/StringLiteralImpl.java
index 92b9cbfb1..9b631763c 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/StringLiteralImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/StringLiteralImpl.java
@@ -22,10 +22,10 @@
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
-import org.sonar.python.api.tree.StringElement;
-import org.sonar.python.api.tree.StringLiteral;
-import org.sonar.python.api.tree.TreeVisitor;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.StringElement;
+import org.sonar.plugins.python.api.tree.StringLiteral;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.Tree;
public class StringLiteralImpl extends PyTree implements StringLiteral {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/SubscriptionExpressionImpl.java b/python-squid/src/main/java/org/sonar/python/tree/SubscriptionExpressionImpl.java
index 391c8a07b..16d02edc6 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/SubscriptionExpressionImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/SubscriptionExpressionImpl.java
@@ -23,12 +23,12 @@
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import org.sonar.python.api.tree.ExpressionList;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.SubscriptionExpression;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.TreeVisitor;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.ExpressionList;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.SubscriptionExpression;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.Tree;
public class SubscriptionExpressionImpl extends PyTree implements SubscriptionExpression {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/TokenImpl.java b/python-squid/src/main/java/org/sonar/python/tree/TokenImpl.java
index 5a8f47bbb..0e16aaaa3 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/TokenImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/TokenImpl.java
@@ -23,10 +23,10 @@
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
-import org.sonar.python.api.tree.Trivia;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.Trivia;
public class TokenImpl extends PyTree implements Token {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/TreeUtils.java b/python-squid/src/main/java/org/sonar/python/tree/TreeUtils.java
index 4df22b6a3..4163cf958 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/TreeUtils.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/TreeUtils.java
@@ -24,9 +24,9 @@
import java.util.List;
import java.util.function.Predicate;
import javax.annotation.CheckForNull;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.Tree.Kind;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Tree.Kind;
public class TreeUtils {
private TreeUtils() {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/TriviaImpl.java b/python-squid/src/main/java/org/sonar/python/tree/TriviaImpl.java
index fe4900ded..6a6b1193e 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/TriviaImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/TriviaImpl.java
@@ -19,8 +19,8 @@
*/
package org.sonar.python.tree;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Trivia;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Trivia;
public class TriviaImpl implements Trivia {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/TryStatementImpl.java b/python-squid/src/main/java/org/sonar/python/tree/TryStatementImpl.java
index a7f6dab11..4ac273687 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/TryStatementImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/TryStatementImpl.java
@@ -26,14 +26,14 @@
import java.util.stream.Stream;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.ElseClause;
-import org.sonar.python.api.tree.ExceptClause;
-import org.sonar.python.api.tree.FinallyClause;
-import org.sonar.python.api.tree.StatementList;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
-import org.sonar.python.api.tree.TryStatement;
+import org.sonar.plugins.python.api.tree.ElseClause;
+import org.sonar.plugins.python.api.tree.ExceptClause;
+import org.sonar.plugins.python.api.tree.FinallyClause;
+import org.sonar.plugins.python.api.tree.StatementList;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.TryStatement;
public class TryStatementImpl extends PyTree implements TryStatement {
private final Token tryKeyword;
diff --git a/python-squid/src/main/java/org/sonar/python/tree/TupleImpl.java b/python-squid/src/main/java/org/sonar/python/tree/TupleImpl.java
index 270006617..18a54f0b2 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/TupleImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/TupleImpl.java
@@ -23,11 +23,11 @@
import java.util.List;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
-import org.sonar.python.api.tree.Tuple;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.Tuple;
public class TupleImpl extends PyTree implements Tuple {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/TupleParameterImpl.java b/python-squid/src/main/java/org/sonar/python/tree/TupleParameterImpl.java
index 3791d9a07..05425df3f 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/TupleParameterImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/TupleParameterImpl.java
@@ -21,11 +21,11 @@
import java.util.ArrayList;
import java.util.List;
-import org.sonar.python.api.tree.AnyParameter;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
-import org.sonar.python.api.tree.TupleParameter;
+import org.sonar.plugins.python.api.tree.AnyParameter;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.TupleParameter;
public class TupleParameterImpl extends PyTree implements TupleParameter {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/TypeAnnotationImpl.java b/python-squid/src/main/java/org/sonar/python/tree/TypeAnnotationImpl.java
index 439fbd992..6f8347e36 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/TypeAnnotationImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/TypeAnnotationImpl.java
@@ -24,11 +24,11 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.CheckForNull;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.TreeVisitor;
-import org.sonar.python.api.tree.TypeAnnotation;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.TypeAnnotation;
+import org.sonar.plugins.python.api.tree.Tree;
public class TypeAnnotationImpl extends PyTree implements TypeAnnotation {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/UnaryExpressionImpl.java b/python-squid/src/main/java/org/sonar/python/tree/UnaryExpressionImpl.java
index 89e96c008..b1198f359 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/UnaryExpressionImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/UnaryExpressionImpl.java
@@ -25,11 +25,11 @@
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
-import org.sonar.python.api.tree.UnaryExpression;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.UnaryExpression;
public class UnaryExpressionImpl extends PyTree implements UnaryExpression {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/WhileStatementImpl.java b/python-squid/src/main/java/org/sonar/python/tree/WhileStatementImpl.java
index caaa5c908..a07d68b8f 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/WhileStatementImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/WhileStatementImpl.java
@@ -25,13 +25,13 @@
import java.util.stream.Stream;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.ElseClause;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.StatementList;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
-import org.sonar.python.api.tree.WhileStatement;
+import org.sonar.plugins.python.api.tree.ElseClause;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.StatementList;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.WhileStatement;
public class WhileStatementImpl extends PyTree implements WhileStatement {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/WithStatementImpl.java b/python-squid/src/main/java/org/sonar/python/tree/WithStatementImpl.java
index 18234eba2..22cf16f4a 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/WithStatementImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/WithStatementImpl.java
@@ -27,13 +27,13 @@
import java.util.stream.Stream;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.StatementList;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
-import org.sonar.python.api.tree.WithItem;
-import org.sonar.python.api.tree.WithStatement;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.StatementList;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.WithItem;
+import org.sonar.plugins.python.api.tree.WithStatement;
public class WithStatementImpl extends PyTree implements WithStatement {
diff --git a/python-squid/src/main/java/org/sonar/python/tree/YieldExpressionImpl.java b/python-squid/src/main/java/org/sonar/python/tree/YieldExpressionImpl.java
index 25b6e6e30..ae573412a 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/YieldExpressionImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/YieldExpressionImpl.java
@@ -26,11 +26,11 @@
import java.util.stream.Stream;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
-import org.sonar.python.api.tree.YieldExpression;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.YieldExpression;
public class YieldExpressionImpl extends PyTree implements YieldExpression {
private final Token yieldKeyword;
diff --git a/python-squid/src/main/java/org/sonar/python/tree/YieldStatementImpl.java b/python-squid/src/main/java/org/sonar/python/tree/YieldStatementImpl.java
index 356ec99d5..fbac77444 100644
--- a/python-squid/src/main/java/org/sonar/python/tree/YieldStatementImpl.java
+++ b/python-squid/src/main/java/org/sonar/python/tree/YieldStatementImpl.java
@@ -24,11 +24,11 @@
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.TreeVisitor;
-import org.sonar.python.api.tree.YieldExpression;
-import org.sonar.python.api.tree.YieldStatement;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.TreeVisitor;
+import org.sonar.plugins.python.api.tree.YieldExpression;
+import org.sonar.plugins.python.api.tree.YieldStatement;
public class YieldStatementImpl extends SimpleStatement implements YieldStatement {
private final YieldExpression yieldExpression;
diff --git a/python-squid/src/test/java/org/sonar/plugins/python/api/cfg/ControlFlowGraphTest.java b/python-squid/src/test/java/org/sonar/plugins/python/api/cfg/ControlFlowGraphTest.java
index 4a8a722a3..cdb6ac554 100644
--- a/python-squid/src/test/java/org/sonar/plugins/python/api/cfg/ControlFlowGraphTest.java
+++ b/python-squid/src/test/java/org/sonar/plugins/python/api/cfg/ControlFlowGraphTest.java
@@ -25,10 +25,10 @@
import org.mockito.Mockito;
import org.sonar.python.PythonFile;
import org.sonar.python.PythonTestUtils;
-import org.sonar.python.api.tree.FileInput;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.Tree.Kind;
+import org.sonar.plugins.python.api.tree.FileInput;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Tree.Kind;
import org.sonar.python.cfg.PythonCfgBlock;
import org.sonar.python.cfg.PythonCfgEndBlock;
import org.sonar.python.cfg.PythonCfgSimpleBlock;
diff --git a/python-squid/src/test/java/org/sonar/plugins/python/api/cfg/ExpectedCfgStructure.java b/python-squid/src/test/java/org/sonar/plugins/python/api/cfg/ExpectedCfgStructure.java
index 2ccd759ee..074c80f53 100644
--- a/python-squid/src/test/java/org/sonar/plugins/python/api/cfg/ExpectedCfgStructure.java
+++ b/python-squid/src/test/java/org/sonar/plugins/python/api/cfg/ExpectedCfgStructure.java
@@ -34,16 +34,16 @@
import java.util.stream.Stream;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-import org.sonar.python.api.tree.Argument;
-import org.sonar.python.api.tree.CallExpression;
-import org.sonar.python.api.tree.ExceptClause;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.ExpressionStatement;
-import org.sonar.python.api.tree.ForStatement;
-import org.sonar.python.api.tree.ListLiteral;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.NumericLiteral;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Argument;
+import org.sonar.plugins.python.api.tree.CallExpression;
+import org.sonar.plugins.python.api.tree.ExceptClause;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.ExpressionStatement;
+import org.sonar.plugins.python.api.tree.ForStatement;
+import org.sonar.plugins.python.api.tree.ListLiteral;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.NumericLiteral;
+import org.sonar.plugins.python.api.tree.Tree;
import org.sonar.python.cfg.PythonCfgEndBlock;
public class ExpectedCfgStructure {
diff --git a/python-squid/src/test/java/org/sonar/python/tree/BaseTreeVisitorTest.java b/python-squid/src/test/java/org/sonar/plugins/python/api/tree/BaseTreeVisitorTest.java
similarity index 88%
rename from python-squid/src/test/java/org/sonar/python/tree/BaseTreeVisitorTest.java
rename to python-squid/src/test/java/org/sonar/plugins/python/api/tree/BaseTreeVisitorTest.java
index dcf1034d6..6e6c6d539 100644
--- a/python-squid/src/test/java/org/sonar/python/tree/BaseTreeVisitorTest.java
+++ b/python-squid/src/test/java/org/sonar/plugins/python/api/tree/BaseTreeVisitorTest.java
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.python.tree;
+package org.sonar.plugins.python.api.tree;
import com.sonar.sslr.api.AstNode;
import java.util.List;
@@ -25,48 +25,10 @@
import javax.annotation.Nullable;
import org.junit.Test;
import org.sonar.python.api.PythonGrammar;
-import org.sonar.python.api.tree.AnnotatedAssignment;
-import org.sonar.python.api.tree.AnyParameter;
-import org.sonar.python.api.tree.AssertStatement;
-import org.sonar.python.api.tree.AssignmentStatement;
-import org.sonar.python.api.tree.AwaitExpression;
-import org.sonar.python.api.tree.BinaryExpression;
-import org.sonar.python.api.tree.CallExpression;
-import org.sonar.python.api.tree.ClassDef;
-import org.sonar.python.api.tree.ComprehensionFor;
-import org.sonar.python.api.tree.ComprehensionIf;
-import org.sonar.python.api.tree.ConditionalExpression;
-import org.sonar.python.api.tree.DelStatement;
-import org.sonar.python.api.tree.DictCompExpression;
-import org.sonar.python.api.tree.ExecStatement;
-import org.sonar.python.api.tree.ForStatement;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.IfStatement;
-import org.sonar.python.api.tree.ImportFrom;
-import org.sonar.python.api.tree.ImportName;
-import org.sonar.python.api.tree.LambdaExpression;
-import org.sonar.python.api.tree.ListLiteral;
-import org.sonar.python.api.tree.ComprehensionExpression;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.NumericLiteral;
-import org.sonar.python.api.tree.Parameter;
-import org.sonar.python.api.tree.ParenthesizedExpression;
-import org.sonar.python.api.tree.PassStatement;
-import org.sonar.python.api.tree.PrintStatement;
-import org.sonar.python.api.tree.QualifiedExpression;
-import org.sonar.python.api.tree.ReprExpression;
-import org.sonar.python.api.tree.ReturnStatement;
-import org.sonar.python.api.tree.SliceExpression;
-import org.sonar.python.api.tree.SliceItem;
-import org.sonar.python.api.tree.StarredExpression;
-import org.sonar.python.api.tree.SubscriptionExpression;
-import org.sonar.python.api.tree.TryStatement;
-import org.sonar.python.api.tree.TupleParameter;
-import org.sonar.python.api.tree.Tuple;
-import org.sonar.python.api.tree.WithStatement;
-import org.sonar.python.api.tree.YieldStatement;
-import org.sonar.python.api.tree.Tree;
import org.sonar.python.parser.RuleTest;
+import org.sonar.python.tree.PythonTreeMaker;
+import org.sonar.python.tree.StatementWithSeparator;
+import org.sonar.python.tree.WhileStatementImpl;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.spy;
diff --git a/python-squid/src/test/java/org/sonar/python/DocstringExtractorTest.java b/python-squid/src/test/java/org/sonar/python/DocstringExtractorTest.java
index 21824e0bf..708337c7b 100644
--- a/python-squid/src/test/java/org/sonar/python/DocstringExtractorTest.java
+++ b/python-squid/src/test/java/org/sonar/python/DocstringExtractorTest.java
@@ -24,11 +24,12 @@
import java.util.Map;
import java.util.Objects;
import org.junit.Test;
-import org.sonar.python.api.tree.ClassDef;
-import org.sonar.python.api.tree.FileInput;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.StringLiteral;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.PythonCheckTree;
+import org.sonar.plugins.python.api.tree.ClassDef;
+import org.sonar.plugins.python.api.tree.FileInput;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.StringLiteral;
+import org.sonar.plugins.python.api.tree.Tree;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/python-squid/src/test/java/org/sonar/python/PythonCheckTest.java b/python-squid/src/test/java/org/sonar/python/PythonCheckTest.java
index 4fd18a5fd..443718921 100644
--- a/python-squid/src/test/java/org/sonar/python/PythonCheckTest.java
+++ b/python-squid/src/test/java/org/sonar/python/PythonCheckTest.java
@@ -22,9 +22,12 @@
import java.io.File;
import java.util.List;
import org.junit.Test;
-import org.sonar.python.PythonCheck.PreciseIssue;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.ReturnStatement;
+import org.sonar.plugins.python.api.PythonCheck;
+import org.sonar.plugins.python.api.PythonCheckTree;
+import org.sonar.plugins.python.api.PythonVisitorContext;
+import org.sonar.plugins.python.api.PythonCheck.PreciseIssue;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.ReturnStatement;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/python-squid/src/test/java/org/sonar/python/PythonCheckTreeTest.java b/python-squid/src/test/java/org/sonar/python/PythonCheckTreeTest.java
index 1fc6e1939..ddfe94735 100644
--- a/python-squid/src/test/java/org/sonar/python/PythonCheckTreeTest.java
+++ b/python-squid/src/test/java/org/sonar/python/PythonCheckTreeTest.java
@@ -22,9 +22,12 @@
import java.io.File;
import java.util.List;
import org.junit.Test;
-import org.sonar.python.PythonCheck.PreciseIssue;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.Name;
+import org.sonar.plugins.python.api.PythonCheck;
+import org.sonar.plugins.python.api.PythonCheckTree;
+import org.sonar.plugins.python.api.PythonVisitorContext;
+import org.sonar.plugins.python.api.PythonCheck.PreciseIssue;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.Name;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/python-squid/src/test/java/org/sonar/python/PythonSubscriptionCheckTest.java b/python-squid/src/test/java/org/sonar/python/PythonSubscriptionCheckTest.java
index 1e999dc64..751495d63 100644
--- a/python-squid/src/test/java/org/sonar/python/PythonSubscriptionCheckTest.java
+++ b/python-squid/src/test/java/org/sonar/python/PythonSubscriptionCheckTest.java
@@ -23,12 +23,15 @@
import java.util.Collections;
import java.util.List;
import org.junit.Test;
-import org.sonar.python.PythonCheck.PreciseIssue;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.Trivia;
+import org.sonar.plugins.python.api.PythonCheck;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.PythonVisitorContext;
+import org.sonar.plugins.python.api.PythonCheck.PreciseIssue;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Trivia;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/python-squid/src/test/java/org/sonar/python/PythonTestUtils.java b/python-squid/src/test/java/org/sonar/python/PythonTestUtils.java
index cb74c3f06..396aec78b 100644
--- a/python-squid/src/test/java/org/sonar/python/PythonTestUtils.java
+++ b/python-squid/src/test/java/org/sonar/python/PythonTestUtils.java
@@ -26,8 +26,8 @@
import java.util.List;
import java.util.function.Predicate;
import javax.annotation.CheckForNull;
-import org.sonar.python.api.tree.FileInput;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.FileInput;
+import org.sonar.plugins.python.api.tree.Tree;
import org.sonar.python.parser.PythonParser;
import org.sonar.python.semantic.SymbolTableBuilder;
import org.sonar.python.tree.PythonTreeMaker;
diff --git a/python-squid/src/test/java/org/sonar/python/TokenLocationTest.java b/python-squid/src/test/java/org/sonar/python/TokenLocationTest.java
index 7578b3ffb..4fb1f692c 100644
--- a/python-squid/src/test/java/org/sonar/python/TokenLocationTest.java
+++ b/python-squid/src/test/java/org/sonar/python/TokenLocationTest.java
@@ -24,7 +24,7 @@
import java.util.List;
import java.util.stream.Collectors;
import org.junit.Test;
-import org.sonar.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Token;
import org.sonar.python.lexer.PythonLexer;
import org.sonar.python.tree.TokenImpl;
diff --git a/python-squid/src/test/java/org/sonar/python/metrics/CognitiveComplexityVisitorTest.java b/python-squid/src/test/java/org/sonar/python/metrics/CognitiveComplexityVisitorTest.java
index 72050224b..7d5f43717 100644
--- a/python-squid/src/test/java/org/sonar/python/metrics/CognitiveComplexityVisitorTest.java
+++ b/python-squid/src/test/java/org/sonar/python/metrics/CognitiveComplexityVisitorTest.java
@@ -24,15 +24,15 @@
import java.util.Map;
import java.util.TreeMap;
import org.junit.Test;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.PythonVisitorContext;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.PythonVisitorContext;
import org.sonar.python.SubscriptionVisitor;
import org.sonar.python.TestPythonVisitorRunner;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.Trivia;
-import org.sonar.python.tree.BaseTreeVisitor;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Trivia;
+import org.sonar.plugins.python.api.tree.BaseTreeVisitor;
import static org.fest.assertions.Assertions.assertThat;
diff --git a/python-squid/src/test/java/org/sonar/python/metrics/ComplexityVisitorTest.java b/python-squid/src/test/java/org/sonar/python/metrics/ComplexityVisitorTest.java
index 364108f3d..e71b994b1 100644
--- a/python-squid/src/test/java/org/sonar/python/metrics/ComplexityVisitorTest.java
+++ b/python-squid/src/test/java/org/sonar/python/metrics/ComplexityVisitorTest.java
@@ -25,7 +25,7 @@
import java.nio.charset.StandardCharsets;
import org.junit.Test;
import org.sonar.python.PythonConfiguration;
-import org.sonar.python.PythonVisitorContext;
+import org.sonar.plugins.python.api.PythonVisitorContext;
import org.sonar.python.TestPythonVisitorRunner;
import org.sonar.python.parser.PythonParser;
import org.sonar.python.tree.PythonTreeMaker;
diff --git a/python-squid/src/test/java/org/sonar/python/semantic/ClassSymbolTest.java b/python-squid/src/test/java/org/sonar/python/semantic/ClassSymbolTest.java
index aa56a0967..f446f0b70 100644
--- a/python-squid/src/test/java/org/sonar/python/semantic/ClassSymbolTest.java
+++ b/python-squid/src/test/java/org/sonar/python/semantic/ClassSymbolTest.java
@@ -20,9 +20,9 @@
package org.sonar.python.semantic;
import org.junit.Test;
-import org.sonar.python.api.tree.ClassDef;
-import org.sonar.python.api.tree.FileInput;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.ClassDef;
+import org.sonar.plugins.python.api.tree.FileInput;
+import org.sonar.plugins.python.api.tree.Tree;
import org.sonar.python.PythonTestUtils;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/python-squid/src/test/java/org/sonar/python/semantic/FullyQualifiedNameTest.java b/python-squid/src/test/java/org/sonar/python/semantic/FullyQualifiedNameTest.java
index 738469d42..771c94359 100644
--- a/python-squid/src/test/java/org/sonar/python/semantic/FullyQualifiedNameTest.java
+++ b/python-squid/src/test/java/org/sonar/python/semantic/FullyQualifiedNameTest.java
@@ -21,12 +21,12 @@
import javax.annotation.Nullable;
import org.junit.Test;
-import org.sonar.python.api.tree.CallExpression;
-import org.sonar.python.api.tree.ExpressionStatement;
-import org.sonar.python.api.tree.FileInput;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.QualifiedExpression;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.CallExpression;
+import org.sonar.plugins.python.api.tree.ExpressionStatement;
+import org.sonar.plugins.python.api.tree.FileInput;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.QualifiedExpression;
+import org.sonar.plugins.python.api.tree.Tree;
import static org.assertj.core.api.Assertions.assertThat;
import static org.sonar.python.PythonTestUtils.getFirstChild;
diff --git a/python-squid/src/test/java/org/sonar/python/semantic/SymbolTableBuilderTest.java b/python-squid/src/test/java/org/sonar/python/semantic/SymbolTableBuilderTest.java
index 0c9f91ed0..fcbd71545 100644
--- a/python-squid/src/test/java/org/sonar/python/semantic/SymbolTableBuilderTest.java
+++ b/python-squid/src/test/java/org/sonar/python/semantic/SymbolTableBuilderTest.java
@@ -29,14 +29,14 @@
import org.junit.BeforeClass;
import org.junit.Test;
import org.sonar.python.PythonTestUtils;
-import org.sonar.python.PythonVisitorContext;
+import org.sonar.plugins.python.api.PythonVisitorContext;
import org.sonar.python.TestPythonVisitorRunner;
-import org.sonar.python.api.tree.FileInput;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.LambdaExpression;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.tree.BaseTreeVisitor;
+import org.sonar.plugins.python.api.tree.FileInput;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.LambdaExpression;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.BaseTreeVisitor;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/python-squid/src/test/java/org/sonar/python/semantic/UsageImplTest.java b/python-squid/src/test/java/org/sonar/python/semantic/UsageImplTest.java
index cc24ee007..aabb841e6 100644
--- a/python-squid/src/test/java/org/sonar/python/semantic/UsageImplTest.java
+++ b/python-squid/src/test/java/org/sonar/python/semantic/UsageImplTest.java
@@ -21,7 +21,7 @@
import org.junit.Test;
import org.mockito.Mockito;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Tree;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/python-squid/src/test/java/org/sonar/python/tree/PythonTreeMakerTest.java b/python-squid/src/test/java/org/sonar/python/tree/PythonTreeMakerTest.java
index 81d3c2e63..b572b84d6 100644
--- a/python-squid/src/test/java/org/sonar/python/tree/PythonTreeMakerTest.java
+++ b/python-squid/src/test/java/org/sonar/python/tree/PythonTreeMakerTest.java
@@ -34,84 +34,85 @@
import java.util.function.Function;
import java.util.stream.Collectors;
import org.junit.Test;
+import org.sonar.plugins.python.api.tree.BaseTreeVisitor;
import org.sonar.python.api.PythonGrammar;
import org.sonar.python.api.PythonPunctuator;
import org.sonar.python.api.PythonTokenType;
-import org.sonar.python.api.tree.AliasedName;
-import org.sonar.python.api.tree.AnnotatedAssignment;
-import org.sonar.python.api.tree.ArgList;
-import org.sonar.python.api.tree.Argument;
-import org.sonar.python.api.tree.AssertStatement;
-import org.sonar.python.api.tree.AssignmentStatement;
-import org.sonar.python.api.tree.AwaitExpression;
-import org.sonar.python.api.tree.BinaryExpression;
-import org.sonar.python.api.tree.BreakStatement;
-import org.sonar.python.api.tree.CallExpression;
-import org.sonar.python.api.tree.ClassDef;
-import org.sonar.python.api.tree.CompoundAssignmentStatement;
-import org.sonar.python.api.tree.ComprehensionExpression;
-import org.sonar.python.api.tree.ComprehensionFor;
-import org.sonar.python.api.tree.ComprehensionIf;
-import org.sonar.python.api.tree.ConditionalExpression;
-import org.sonar.python.api.tree.ContinueStatement;
-import org.sonar.python.api.tree.Decorator;
-import org.sonar.python.api.tree.DelStatement;
-import org.sonar.python.api.tree.DictCompExpression;
-import org.sonar.python.api.tree.DictionaryLiteral;
-import org.sonar.python.api.tree.EllipsisExpression;
-import org.sonar.python.api.tree.ElseClause;
-import org.sonar.python.api.tree.ExceptClause;
-import org.sonar.python.api.tree.ExecStatement;
-import org.sonar.python.api.tree.Expression;
-import org.sonar.python.api.tree.ExpressionList;
-import org.sonar.python.api.tree.ExpressionStatement;
-import org.sonar.python.api.tree.FileInput;
-import org.sonar.python.api.tree.ForStatement;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.GlobalStatement;
-import org.sonar.python.api.tree.IfStatement;
-import org.sonar.python.api.tree.ImportFrom;
-import org.sonar.python.api.tree.ImportName;
-import org.sonar.python.api.tree.ImportStatement;
-import org.sonar.python.api.tree.InExpression;
-import org.sonar.python.api.tree.IsExpression;
-import org.sonar.python.api.tree.KeyValuePair;
-import org.sonar.python.api.tree.LambdaExpression;
-import org.sonar.python.api.tree.ListLiteral;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.NoneExpression;
-import org.sonar.python.api.tree.NonlocalStatement;
-import org.sonar.python.api.tree.NumericLiteral;
-import org.sonar.python.api.tree.Parameter;
-import org.sonar.python.api.tree.ParenthesizedExpression;
-import org.sonar.python.api.tree.PassStatement;
-import org.sonar.python.api.tree.PrintStatement;
-import org.sonar.python.api.tree.QualifiedExpression;
-import org.sonar.python.api.tree.RaiseStatement;
-import org.sonar.python.api.tree.ReprExpression;
-import org.sonar.python.api.tree.ReturnStatement;
-import org.sonar.python.api.tree.SetLiteral;
-import org.sonar.python.api.tree.SliceExpression;
-import org.sonar.python.api.tree.SliceItem;
-import org.sonar.python.api.tree.StarredExpression;
-import org.sonar.python.api.tree.Statement;
-import org.sonar.python.api.tree.StatementList;
-import org.sonar.python.api.tree.StringElement;
-import org.sonar.python.api.tree.StringLiteral;
-import org.sonar.python.api.tree.SubscriptionExpression;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.Trivia;
-import org.sonar.python.api.tree.TryStatement;
-import org.sonar.python.api.tree.Tuple;
-import org.sonar.python.api.tree.TupleParameter;
-import org.sonar.python.api.tree.TypeAnnotation;
-import org.sonar.python.api.tree.UnaryExpression;
-import org.sonar.python.api.tree.WhileStatement;
-import org.sonar.python.api.tree.WithItem;
-import org.sonar.python.api.tree.WithStatement;
-import org.sonar.python.api.tree.YieldExpression;
-import org.sonar.python.api.tree.YieldStatement;
+import org.sonar.plugins.python.api.tree.AliasedName;
+import org.sonar.plugins.python.api.tree.AnnotatedAssignment;
+import org.sonar.plugins.python.api.tree.ArgList;
+import org.sonar.plugins.python.api.tree.Argument;
+import org.sonar.plugins.python.api.tree.AssertStatement;
+import org.sonar.plugins.python.api.tree.AssignmentStatement;
+import org.sonar.plugins.python.api.tree.AwaitExpression;
+import org.sonar.plugins.python.api.tree.BinaryExpression;
+import org.sonar.plugins.python.api.tree.BreakStatement;
+import org.sonar.plugins.python.api.tree.CallExpression;
+import org.sonar.plugins.python.api.tree.ClassDef;
+import org.sonar.plugins.python.api.tree.CompoundAssignmentStatement;
+import org.sonar.plugins.python.api.tree.ComprehensionExpression;
+import org.sonar.plugins.python.api.tree.ComprehensionFor;
+import org.sonar.plugins.python.api.tree.ComprehensionIf;
+import org.sonar.plugins.python.api.tree.ConditionalExpression;
+import org.sonar.plugins.python.api.tree.ContinueStatement;
+import org.sonar.plugins.python.api.tree.Decorator;
+import org.sonar.plugins.python.api.tree.DelStatement;
+import org.sonar.plugins.python.api.tree.DictCompExpression;
+import org.sonar.plugins.python.api.tree.DictionaryLiteral;
+import org.sonar.plugins.python.api.tree.EllipsisExpression;
+import org.sonar.plugins.python.api.tree.ElseClause;
+import org.sonar.plugins.python.api.tree.ExceptClause;
+import org.sonar.plugins.python.api.tree.ExecStatement;
+import org.sonar.plugins.python.api.tree.Expression;
+import org.sonar.plugins.python.api.tree.ExpressionList;
+import org.sonar.plugins.python.api.tree.ExpressionStatement;
+import org.sonar.plugins.python.api.tree.FileInput;
+import org.sonar.plugins.python.api.tree.ForStatement;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.GlobalStatement;
+import org.sonar.plugins.python.api.tree.IfStatement;
+import org.sonar.plugins.python.api.tree.ImportFrom;
+import org.sonar.plugins.python.api.tree.ImportName;
+import org.sonar.plugins.python.api.tree.ImportStatement;
+import org.sonar.plugins.python.api.tree.InExpression;
+import org.sonar.plugins.python.api.tree.IsExpression;
+import org.sonar.plugins.python.api.tree.KeyValuePair;
+import org.sonar.plugins.python.api.tree.LambdaExpression;
+import org.sonar.plugins.python.api.tree.ListLiteral;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.NoneExpression;
+import org.sonar.plugins.python.api.tree.NonlocalStatement;
+import org.sonar.plugins.python.api.tree.NumericLiteral;
+import org.sonar.plugins.python.api.tree.Parameter;
+import org.sonar.plugins.python.api.tree.ParenthesizedExpression;
+import org.sonar.plugins.python.api.tree.PassStatement;
+import org.sonar.plugins.python.api.tree.PrintStatement;
+import org.sonar.plugins.python.api.tree.QualifiedExpression;
+import org.sonar.plugins.python.api.tree.RaiseStatement;
+import org.sonar.plugins.python.api.tree.ReprExpression;
+import org.sonar.plugins.python.api.tree.ReturnStatement;
+import org.sonar.plugins.python.api.tree.SetLiteral;
+import org.sonar.plugins.python.api.tree.SliceExpression;
+import org.sonar.plugins.python.api.tree.SliceItem;
+import org.sonar.plugins.python.api.tree.StarredExpression;
+import org.sonar.plugins.python.api.tree.Statement;
+import org.sonar.plugins.python.api.tree.StatementList;
+import org.sonar.plugins.python.api.tree.StringElement;
+import org.sonar.plugins.python.api.tree.StringLiteral;
+import org.sonar.plugins.python.api.tree.SubscriptionExpression;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Trivia;
+import org.sonar.plugins.python.api.tree.TryStatement;
+import org.sonar.plugins.python.api.tree.Tuple;
+import org.sonar.plugins.python.api.tree.TupleParameter;
+import org.sonar.plugins.python.api.tree.TypeAnnotation;
+import org.sonar.plugins.python.api.tree.UnaryExpression;
+import org.sonar.plugins.python.api.tree.WhileStatement;
+import org.sonar.plugins.python.api.tree.WithItem;
+import org.sonar.plugins.python.api.tree.WithStatement;
+import org.sonar.plugins.python.api.tree.YieldExpression;
+import org.sonar.plugins.python.api.tree.YieldStatement;
import org.sonar.python.parser.RuleTest;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/python-squid/src/test/java/org/sonar/python/tree/TreeUtilsTest.java b/python-squid/src/test/java/org/sonar/python/tree/TreeUtilsTest.java
index c2510cbad..852681e02 100644
--- a/python-squid/src/test/java/org/sonar/python/tree/TreeUtilsTest.java
+++ b/python-squid/src/test/java/org/sonar/python/tree/TreeUtilsTest.java
@@ -28,17 +28,17 @@
import java.util.stream.Collectors;
import org.junit.Test;
import org.sonar.python.PythonConfiguration;
-import org.sonar.python.api.tree.ClassDef;
-import org.sonar.python.api.tree.FileInput;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.IfStatement;
-import org.sonar.python.api.tree.Name;
-import org.sonar.python.api.tree.PassStatement;
-import org.sonar.python.api.tree.Statement;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.Tree.Kind;
-import org.sonar.python.api.tree.WhileStatement;
+import org.sonar.plugins.python.api.tree.ClassDef;
+import org.sonar.plugins.python.api.tree.FileInput;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.IfStatement;
+import org.sonar.plugins.python.api.tree.Name;
+import org.sonar.plugins.python.api.tree.PassStatement;
+import org.sonar.plugins.python.api.tree.Statement;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Tree.Kind;
+import org.sonar.plugins.python.api.tree.WhileStatement;
import org.sonar.python.parser.PythonParser;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/sonar-python-plugin/src/main/java/org/sonar/plugins/python/PythonChecks.java b/sonar-python-plugin/src/main/java/org/sonar/plugins/python/PythonChecks.java
new file mode 100644
index 000000000..9f7b1607d
--- /dev/null
+++ b/sonar-python-plugin/src/main/java/org/sonar/plugins/python/PythonChecks.java
@@ -0,0 +1,65 @@
+/*
+ * SonarQube Python Plugin
+ * Copyright (C) 2011-2019 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.plugins.python;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+import javax.annotation.Nullable;
+import org.sonar.api.batch.rule.CheckFactory;
+import org.sonar.api.batch.rule.Checks;
+import org.sonar.api.rule.RuleKey;
+import org.sonar.plugins.python.api.PythonCheck;
+import org.sonar.plugins.python.api.PythonCustomRuleRepository;
+
+public class PythonChecks {
+ private final CheckFactory checkFactory;
+ private List> checksByRepository = new ArrayList<>();
+
+ PythonChecks(CheckFactory checkFactory) {
+ this.checkFactory = checkFactory;
+ }
+ public PythonChecks addChecks(String repositoryKey, Iterable checkClass) {
+ checksByRepository.add(checkFactory.create(repositoryKey).addAnnotatedChecks(checkClass));
+
+ return this;
+ }
+
+ public PythonChecks addCustomChecks(@Nullable PythonCustomRuleRepository[] customRuleRepositories) {
+ if (customRuleRepositories != null) {
+ for (PythonCustomRuleRepository ruleRepository : customRuleRepositories) {
+ addChecks(ruleRepository.repositoryKey(), ruleRepository.checkClasses());
+ }
+ }
+
+ return this;
+ }
+
+ public List all() {
+ return checksByRepository.stream().flatMap(c -> c.all().stream()).collect(Collectors.toList());
+ }
+
+ @Nullable
+ public RuleKey ruleKey(PythonCheck check) {
+ return checksByRepository.stream().map(c -> c.ruleKey(check)).filter(Objects::nonNull).findFirst().orElse(null);
+ }
+
+}
diff --git a/sonar-python-plugin/src/main/java/org/sonar/plugins/python/PythonHighlighter.java b/sonar-python-plugin/src/main/java/org/sonar/plugins/python/PythonHighlighter.java
index 42e533885..5a6c5710e 100644
--- a/sonar-python-plugin/src/main/java/org/sonar/plugins/python/PythonHighlighter.java
+++ b/sonar-python-plugin/src/main/java/org/sonar/plugins/python/PythonHighlighter.java
@@ -27,19 +27,19 @@
import org.sonar.api.batch.sensor.SensorContext;
import org.sonar.api.batch.sensor.highlighting.NewHighlighting;
import org.sonar.api.batch.sensor.highlighting.TypeOfText;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.PythonVisitorContext;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.PythonVisitorContext;
import org.sonar.python.SubscriptionVisitor;
import org.sonar.python.TokenLocation;
import org.sonar.python.api.PythonKeyword;
import org.sonar.python.api.PythonTokenType;
-import org.sonar.python.api.tree.ClassDef;
-import org.sonar.python.api.tree.FileInput;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.StringLiteral;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
-import org.sonar.python.api.tree.Trivia;
+import org.sonar.plugins.python.api.tree.ClassDef;
+import org.sonar.plugins.python.api.tree.FileInput;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.StringLiteral;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Trivia;
import static com.sonar.sslr.api.GenericTokenType.IDENTIFIER;
diff --git a/sonar-python-plugin/src/main/java/org/sonar/plugins/python/PythonScanner.java b/sonar-python-plugin/src/main/java/org/sonar/plugins/python/PythonScanner.java
index 4b3b61d30..bd2f46c70 100644
--- a/sonar-python-plugin/src/main/java/org/sonar/plugins/python/PythonScanner.java
+++ b/sonar-python-plugin/src/main/java/org/sonar/plugins/python/PythonScanner.java
@@ -28,7 +28,6 @@
import java.util.Set;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.fs.TextRange;
-import org.sonar.api.batch.rule.Checks;
import org.sonar.api.batch.sensor.SensorContext;
import org.sonar.api.batch.sensor.issue.NewIssue;
import org.sonar.api.batch.sensor.issue.NewIssueLocation;
@@ -42,14 +41,14 @@
import org.sonar.api.utils.log.Loggers;
import org.sonar.plugins.python.cpd.PythonCpdAnalyzer;
import org.sonar.python.IssueLocation;
-import org.sonar.python.PythonCheck;
-import org.sonar.python.PythonCheck.PreciseIssue;
+import org.sonar.plugins.python.api.PythonCheck;
+import org.sonar.plugins.python.api.PythonCheck.PreciseIssue;
import org.sonar.python.PythonConfiguration;
import org.sonar.python.PythonFile;
-import org.sonar.python.PythonSubscriptionCheck;
-import org.sonar.python.PythonVisitorContext;
+import org.sonar.plugins.python.api.PythonSubscriptionCheck;
+import org.sonar.plugins.python.api.PythonVisitorContext;
import org.sonar.python.SubscriptionVisitor;
-import org.sonar.python.api.tree.FileInput;
+import org.sonar.plugins.python.api.tree.FileInput;
import org.sonar.python.metrics.FileLinesVisitor;
import org.sonar.python.metrics.FileMetrics;
import org.sonar.python.parser.PythonParser;
@@ -62,12 +61,12 @@ public class PythonScanner {
private final SensorContext context;
private final Parser parser;
private final List inputFiles;
- private final Checks checks;
+ private final PythonChecks checks;
private final FileLinesContextFactory fileLinesContextFactory;
private final NoSonarFilter noSonarFilter;
private final PythonCpdAnalyzer cpdAnalyzer;
- public PythonScanner(SensorContext context, Checks checks,
+ public PythonScanner(SensorContext context, PythonChecks checks,
FileLinesContextFactory fileLinesContextFactory, NoSonarFilter noSonarFilter, List inputFiles) {
this.context = context;
this.checks = checks;
diff --git a/sonar-python-plugin/src/main/java/org/sonar/plugins/python/PythonSquidSensor.java b/sonar-python-plugin/src/main/java/org/sonar/plugins/python/PythonSquidSensor.java
index 98481845a..1ed084e3f 100644
--- a/sonar-python-plugin/src/main/java/org/sonar/plugins/python/PythonSquidSensor.java
+++ b/sonar-python-plugin/src/main/java/org/sonar/plugins/python/PythonSquidSensor.java
@@ -22,29 +22,37 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import javax.annotation.Nullable;
import org.sonar.api.batch.fs.FilePredicates;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.fs.InputFile.Type;
import org.sonar.api.batch.rule.CheckFactory;
-import org.sonar.api.batch.rule.Checks;
import org.sonar.api.batch.sensor.Sensor;
import org.sonar.api.batch.sensor.SensorContext;
import org.sonar.api.batch.sensor.SensorDescriptor;
import org.sonar.api.issue.NoSonarFilter;
import org.sonar.api.measures.FileLinesContextFactory;
-import org.sonar.python.PythonCheck;
+import org.sonar.plugins.python.api.PythonCustomRuleRepository;
import org.sonar.python.checks.CheckList;
public final class PythonSquidSensor implements Sensor {
- private final Checks checks;
+ private final PythonChecks checks;
private final FileLinesContextFactory fileLinesContextFactory;
private final NoSonarFilter noSonarFilter;
+ /**
+ * Constructor to be used by pico if no PythonCustomRuleRepository are to be found and injected.
+ */
public PythonSquidSensor(FileLinesContextFactory fileLinesContextFactory, CheckFactory checkFactory, NoSonarFilter noSonarFilter) {
- this.checks = checkFactory
- .create(CheckList.REPOSITORY_KEY)
- .addAnnotatedChecks(CheckList.getChecks());
+ this(fileLinesContextFactory, checkFactory, noSonarFilter, null);
+ }
+
+ public PythonSquidSensor(FileLinesContextFactory fileLinesContextFactory, CheckFactory checkFactory, NoSonarFilter noSonarFilter,
+ @Nullable PythonCustomRuleRepository[] customRuleRepositories) {
+ this.checks = new PythonChecks(checkFactory)
+ .addChecks(CheckList.REPOSITORY_KEY, CheckList.getChecks())
+ .addCustomChecks(customRuleRepositories);
this.fileLinesContextFactory = fileLinesContextFactory;
this.noSonarFilter = noSonarFilter;
}
diff --git a/sonar-python-plugin/src/main/java/org/sonar/plugins/python/SymbolVisitor.java b/sonar-python-plugin/src/main/java/org/sonar/plugins/python/SymbolVisitor.java
index 86abb8d4e..ca78045b0 100644
--- a/sonar-python-plugin/src/main/java/org/sonar/plugins/python/SymbolVisitor.java
+++ b/sonar-python-plugin/src/main/java/org/sonar/plugins/python/SymbolVisitor.java
@@ -24,14 +24,14 @@
import java.util.List;
import org.sonar.api.batch.sensor.symbol.NewSymbol;
import org.sonar.api.batch.sensor.symbol.NewSymbolTable;
-import org.sonar.python.api.tree.ClassDef;
-import org.sonar.python.api.tree.FileInput;
-import org.sonar.python.api.tree.FunctionDef;
-import org.sonar.python.api.tree.LambdaExpression;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.ClassDef;
+import org.sonar.plugins.python.api.tree.FileInput;
+import org.sonar.plugins.python.api.tree.FunctionDef;
+import org.sonar.plugins.python.api.tree.LambdaExpression;
+import org.sonar.plugins.python.api.tree.Tree;
import org.sonar.python.semantic.Symbol;
import org.sonar.python.semantic.Usage;
-import org.sonar.python.tree.BaseTreeVisitor;
+import org.sonar.plugins.python.api.tree.BaseTreeVisitor;
public class SymbolVisitor extends BaseTreeVisitor {
diff --git a/sonar-python-plugin/src/main/java/org/sonar/plugins/python/cpd/PythonCpdAnalyzer.java b/sonar-python-plugin/src/main/java/org/sonar/plugins/python/cpd/PythonCpdAnalyzer.java
index 6d5747378..cf1ea559c 100644
--- a/sonar-python-plugin/src/main/java/org/sonar/plugins/python/cpd/PythonCpdAnalyzer.java
+++ b/sonar-python-plugin/src/main/java/org/sonar/plugins/python/cpd/PythonCpdAnalyzer.java
@@ -25,11 +25,11 @@
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.sensor.SensorContext;
import org.sonar.api.batch.sensor.cpd.NewCpdTokens;
-import org.sonar.python.PythonVisitorContext;
+import org.sonar.plugins.python.api.PythonVisitorContext;
import org.sonar.python.TokenLocation;
import org.sonar.python.api.PythonTokenType;
-import org.sonar.python.api.tree.Token;
-import org.sonar.python.api.tree.Tree;
+import org.sonar.plugins.python.api.tree.Token;
+import org.sonar.plugins.python.api.tree.Tree;
import org.sonar.python.tree.TreeUtils;
public class PythonCpdAnalyzer {
diff --git a/sonar-python-plugin/src/test/java/org/sonar/plugins/python/PythonSquidSensorTest.java b/sonar-python-plugin/src/test/java/org/sonar/plugins/python/PythonSquidSensorTest.java
index 05d59fcbf..c515da29f 100644
--- a/sonar-python-plugin/src/test/java/org/sonar/plugins/python/PythonSquidSensorTest.java
+++ b/sonar-python-plugin/src/test/java/org/sonar/plugins/python/PythonSquidSensorTest.java
@@ -23,7 +23,10 @@
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Collection;
+import java.util.Collections;
import java.util.Iterator;
+import java.util.List;
+import javax.annotation.Nullable;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
@@ -53,6 +56,11 @@
import org.sonar.api.rule.RuleKey;
import org.sonar.api.utils.Version;
import org.sonar.api.utils.log.LogTester;
+import org.sonar.check.Rule;
+import org.sonar.check.RuleProperty;
+import org.sonar.plugins.python.api.PythonCheck;
+import org.sonar.plugins.python.api.PythonCustomRuleRepository;
+import org.sonar.plugins.python.api.PythonVisitorContext;
import org.sonar.plugins.python.coverage.PythonCoverageSensor;
import org.sonar.python.checks.CheckList;
@@ -72,6 +80,36 @@ public class PythonSquidSensorTest {
private static final SonarRuntime SONARLINT_RUNTIME = SonarRuntimeImpl.forSonarLint(SONARLINT_DETECTABLE_VERSION);
+ private static final PythonCustomRuleRepository[] CUSTOM_RULES = {new PythonCustomRuleRepository() {
+ @Override
+ public String repositoryKey() {
+ return "customKey";
+ }
+
+ @Override
+ public List checkClasses() {
+ return Collections.singletonList(MyCustomRule.class);
+ }
+ }};
+
+ @Rule(
+ key = "key",
+ name = "name",
+ description = "desc",
+ tags = {"bug"})
+ public static class MyCustomRule implements PythonCheck {
+ @RuleProperty(
+ key = "customParam",
+ description = "Custom parameter",
+ defaultValue = "value")
+ public String customParam = "value";
+
+ @Override
+ public void scanFile(PythonVisitorContext visitorContext) {
+ // do nothing
+ }
+ }
+
private final File baseDir = new File("src/test/resources/org/sonar/plugins/python/squid-sensor").getAbsoluteFile();
private SensorContextTester context;
@@ -179,26 +217,30 @@ public void test_issues() {
IssueLocation issueLocation = issue.primaryLocation();
assertThat(issueLocation.inputComponent()).isEqualTo(inputFile);
- if (issue.ruleKey().rule().equals("S134")) {
- assertThat(issueLocation.message()).isEqualTo("Refactor this code to not nest more than 4 \"if\", \"for\", \"while\", \"try\" and \"with\" statements.");
- assertThat(issueLocation.textRange()).isEqualTo(inputFile.newRange(7, 16, 7, 18));
- assertThat(issue.flows()).hasSize(4);
- assertThat(issue.gap()).isNull();
- checkedIssues++;
- } else if (issue.ruleKey().rule().equals(ONE_STATEMENT_PER_LINE_RULE_KEY)) {
- assertThat(issueLocation.message()).isEqualTo("At most one statement is allowed per line, but 2 statements were found on this line.");
- assertThat(issueLocation.textRange()).isEqualTo(inputFile.newRange(1, 0, 1, 50));
- assertThat(issue.flows()).isEmpty();
- assertThat(issue.gap()).isNull();
- checkedIssues++;
- } else if (issue.ruleKey().rule().equals(FILE_COMPLEXITY_RULE_KEY)) {
- assertThat(issueLocation.message()).isEqualTo("File has a complexity of 5 which is greater than 2 authorized.");
- assertThat(issueLocation.textRange()).isNull();
- assertThat(issue.flows()).isEmpty();
- assertThat(issue.gap()).isEqualTo(3.0);
- checkedIssues++;
- } else {
- throw new IllegalStateException();
+ switch (issue.ruleKey().rule()) {
+ case "S134":
+ assertThat(issueLocation.message()).isEqualTo("Refactor this code to not nest more than 4 \"if\", \"for\", \"while\", \"try\" and \"with\" statements.");
+ assertThat(issueLocation.textRange()).isEqualTo(inputFile.newRange(7, 16, 7, 18));
+ assertThat(issue.flows()).hasSize(4);
+ assertThat(issue.gap()).isNull();
+ checkedIssues++;
+ break;
+ case ONE_STATEMENT_PER_LINE_RULE_KEY:
+ assertThat(issueLocation.message()).isEqualTo("At most one statement is allowed per line, but 2 statements were found on this line.");
+ assertThat(issueLocation.textRange()).isEqualTo(inputFile.newRange(1, 0, 1, 50));
+ assertThat(issue.flows()).isEmpty();
+ assertThat(issue.gap()).isNull();
+ checkedIssues++;
+ break;
+ case FILE_COMPLEXITY_RULE_KEY:
+ assertThat(issueLocation.message()).isEqualTo("File has a complexity of 5 which is greater than 2 authorized.");
+ assertThat(issueLocation.textRange()).isNull();
+ assertThat(issue.flows()).isEmpty();
+ assertThat(issue.gap()).isEqualTo(3.0);
+ checkedIssues++;
+ break;
+ default:
+ throw new IllegalStateException();
}
}
@@ -259,17 +301,24 @@ public void cancelled_analysis() {
InputFile inputFile = inputFile(FILE_1);
activeRules = (new ActiveRulesBuilder()).build();
context.setCancelled(true);
- sensor().execute(context);
+ sensor(null).execute(context);
assertThat(context.measure(inputFile.key(), CoreMetrics.NCLOC)).isNull();
assertThat(context.allAnalysisErrors()).isEmpty();
}
private PythonSquidSensor sensor() {
+ return sensor(CUSTOM_RULES);
+ }
+
+ private PythonSquidSensor sensor(@Nullable PythonCustomRuleRepository[] customRuleRepositories) {
FileLinesContextFactory fileLinesContextFactory = mock(FileLinesContextFactory.class);
FileLinesContext fileLinesContext = mock(FileLinesContext.class);
when(fileLinesContextFactory.createFor(Mockito.any(InputFile.class))).thenReturn(fileLinesContext);
CheckFactory checkFactory = new CheckFactory(activeRules);
- return new PythonSquidSensor(fileLinesContextFactory, checkFactory, new NoSonarFilter());
+ if(customRuleRepositories == null) {
+ return new PythonSquidSensor(fileLinesContextFactory, checkFactory, new NoSonarFilter());
+ }
+ return new PythonSquidSensor(fileLinesContextFactory, checkFactory, new NoSonarFilter(), customRuleRepositories);
}
private InputFile inputFile(String name) {
diff --git a/sonar-python-plugin/src/test/java/org/sonar/plugins/python/SymbolVisitorTest.java b/sonar-python-plugin/src/test/java/org/sonar/plugins/python/SymbolVisitorTest.java
index bf38d8b78..9b1c83ea7 100644
--- a/sonar-python-plugin/src/test/java/org/sonar/plugins/python/SymbolVisitorTest.java
+++ b/sonar-python-plugin/src/test/java/org/sonar/plugins/python/SymbolVisitorTest.java
@@ -30,9 +30,9 @@
import org.sonar.api.batch.fs.internal.DefaultTextRange;
import org.sonar.api.batch.fs.internal.TestInputFileBuilder;
import org.sonar.api.batch.sensor.internal.SensorContextTester;
-import org.sonar.python.PythonVisitorContext;
+import org.sonar.plugins.python.api.PythonVisitorContext;
import org.sonar.python.TestPythonVisitorRunner;
-import org.sonar.python.api.tree.FileInput;
+import org.sonar.plugins.python.api.tree.FileInput;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/sonar-python-plugin/src/test/java/org/sonar/plugins/python/cpd/PythonCpdAnalyzerTest.java b/sonar-python-plugin/src/test/java/org/sonar/plugins/python/cpd/PythonCpdAnalyzerTest.java
index 03eed32c3..3a591fcc4 100644
--- a/sonar-python-plugin/src/test/java/org/sonar/plugins/python/cpd/PythonCpdAnalyzerTest.java
+++ b/sonar-python-plugin/src/test/java/org/sonar/plugins/python/cpd/PythonCpdAnalyzerTest.java
@@ -32,7 +32,7 @@
import org.sonar.api.batch.sensor.internal.SensorContextTester;
import org.sonar.plugins.python.Python;
import org.sonar.plugins.python.TestUtils;
-import org.sonar.python.PythonVisitorContext;
+import org.sonar.plugins.python.api.PythonVisitorContext;
import org.sonar.python.TestPythonVisitorRunner;
import static java.nio.charset.StandardCharsets.UTF_8;