Disable analysis for kotlin files that aren't in 'kotlin' folder (for Gradle-Android project)
This commit is contained in:
@@ -17,11 +17,18 @@
|
||||
package org.jetbrains.jet.plugin;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.intellij.facet.Facet;
|
||||
import com.intellij.facet.FacetManager;
|
||||
import com.intellij.ide.plugins.IdeaPluginDescriptor;
|
||||
import com.intellij.ide.plugins.PluginManager;
|
||||
import com.intellij.openapi.extensions.PluginId;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleManager;
|
||||
import com.intellij.openapi.module.ModuleUtil;
|
||||
import com.intellij.openapi.module.ModuleUtilCore;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.ProjectFileIndex;
|
||||
import com.intellij.openapi.roots.ProjectRootManager;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
@@ -100,4 +107,42 @@ public class JetPluginUtil {
|
||||
assert plugin != null : "How can it be? Kotlin plugin is available, but its component is running. Complete nonsense.";
|
||||
return plugin.getVersion();
|
||||
}
|
||||
|
||||
public static boolean isKtFileInGradleProjectInWrongFolder(@NotNull PsiElement element) {
|
||||
PsiFile containingFile = element.getContainingFile();
|
||||
if (containingFile == null) {
|
||||
return false;
|
||||
}
|
||||
VirtualFile virtualFile = containingFile.getVirtualFile();
|
||||
if (virtualFile == null) {
|
||||
return false;
|
||||
}
|
||||
return isKtFileInGradleProjectInWrongFolder(virtualFile, element.getProject());
|
||||
}
|
||||
|
||||
public static boolean isKtFileInGradleProjectInWrongFolder(@NotNull VirtualFile virtualFile, @NotNull Project project) {
|
||||
Module module = ModuleUtilCore.findModuleForFile(virtualFile, project);
|
||||
if (module == null) return false;
|
||||
|
||||
if (!isAndroidGradleModule(module)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
VirtualFile sourceRootForFile = ProjectRootManager.getInstance(project).getFileIndex().getSourceRootForFile(virtualFile);
|
||||
if (sourceRootForFile != null) {
|
||||
return !sourceRootForFile.getName().equals("kotlin");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isAndroidGradleModule(@NotNull Module module) {
|
||||
// We don't want to depend on the Android-Gradle plugin
|
||||
// See com.android.tools.idea.gradle.util.Projects.isGradleProject()
|
||||
for (Facet facet : FacetManager.getInstance(module).getAllFacets()) {
|
||||
if (facet.getName().equals("Android-Gradle")) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,6 +57,7 @@ public class KotlinTypeHierarchyProvider extends JavaTypeHierarchyProvider {
|
||||
if (!(file instanceof JetFile)) return null;
|
||||
|
||||
if (!JetPluginUtil.isInSourceContent(file)) return null;
|
||||
if (JetPluginUtil.isKtFileInGradleProjectInWrongFolder(file)) return null;
|
||||
|
||||
PsiElement target = TargetElementUtilBase.findTargetElement(editor, TargetElementUtilBase.getInstance().getAllAccepted());
|
||||
|
||||
|
||||
@@ -40,7 +40,9 @@ public class DebugInfoAnnotator implements Annotator {
|
||||
|
||||
@Override
|
||||
public void annotate(@NotNull PsiElement element, @NotNull final AnnotationHolder holder) {
|
||||
if (!isDebugInfoEnabled() || !JetPsiChecker.isErrorReportingEnabled() || !JetPluginUtil.isInSourceContent(element)) {
|
||||
if (!isDebugInfoEnabled() || !JetPsiChecker.isErrorReportingEnabled() ||
|
||||
!JetPluginUtil.isInSourceContent(element) ||
|
||||
JetPluginUtil.isKtFileInGradleProjectInWrongFolder(element)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -88,7 +88,9 @@ public class DeclarationHintSupport extends AbstractProjectComponent {
|
||||
|
||||
Editor editor = e.getEditor();
|
||||
PsiFile psiFile = PsiDocumentManager.getInstance(myProject).getPsiFile(editor.getDocument());
|
||||
if (psiFile == null || psiFile.getLanguage() != JetLanguage.INSTANCE || !JetPluginUtil.isInSourceContent(psiFile)) {
|
||||
if (psiFile == null || psiFile.getLanguage() != JetLanguage.INSTANCE ||
|
||||
!JetPluginUtil.isInSourceContent(psiFile) ||
|
||||
JetPluginUtil.isKtFileInGradleProjectInWrongFolder(psiFile)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -363,7 +363,8 @@ public class JetLineMarkerProvider implements LineMarkerProvider {
|
||||
public void collectSlowLineMarkers(@NotNull List<PsiElement> elements, @NotNull Collection<LineMarkerInfo> result) {
|
||||
if (elements.isEmpty() ||
|
||||
DumbService.getInstance(elements.get(0).getProject()).isDumb() ||
|
||||
!JetPluginUtil.isInSourceContent(elements.get(0))) {
|
||||
!JetPluginUtil.isInSourceContent(elements.get(0)) ||
|
||||
JetPluginUtil.isKtFileInGradleProjectInWrongFolder(elements.get(0))) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -100,7 +100,8 @@ public class JetPsiChecker implements Annotator {
|
||||
|
||||
@Override
|
||||
public void annotate(@NotNull PsiElement element, @NotNull AnnotationHolder holder) {
|
||||
if (!JetPluginUtil.isInSourceContent(element)) {
|
||||
if (!JetPluginUtil.isInSourceContent(element) ||
|
||||
JetPluginUtil.isKtFileInGradleProjectInWrongFolder(element)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -38,6 +38,7 @@ import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.psi.JetFile;
|
||||
import org.jetbrains.jet.lang.resolve.java.JetFilesProvider;
|
||||
import org.jetbrains.jet.plugin.JetFileType;
|
||||
import org.jetbrains.jet.plugin.JetPluginUtil;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
@@ -69,6 +70,7 @@ public class PluginJetFilesProvider extends JetFilesProvider {
|
||||
public boolean processFile(VirtualFile file) {
|
||||
if (file.isDirectory()) return true;
|
||||
if (!index.isInSourceContent(file) && !index.isInTestSourceContent(file)) return true;
|
||||
if (JetPluginUtil.isKtFileInGradleProjectInWrongFolder(file, project)) return true;
|
||||
|
||||
FileType fileType = FileTypeManager.getInstance().getFileTypeByFile(file);
|
||||
if (fileType != JetFileType.INSTANCE) return true;
|
||||
@@ -102,7 +104,9 @@ public class PluginJetFilesProvider extends JetFilesProvider {
|
||||
new com.google.common.base.Function<VirtualFile, JetFile>() {
|
||||
@Override
|
||||
public JetFile apply(@Nullable VirtualFile file) {
|
||||
if (file == null || !ProjectFileIndex.SERVICE.getInstance(project).isInSourceContent(file)) {
|
||||
if (file == null ||
|
||||
!ProjectFileIndex.SERVICE.getInstance(project).isInSourceContent(file) ||
|
||||
JetPluginUtil.isKtFileInGradleProjectInWrongFolder(file, project)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ public class KotlinReferencesSearcher extends QueryExecutorBase<PsiReference, Re
|
||||
@Override
|
||||
public void processQuery(@NotNull ReferencesSearch.SearchParameters queryParameters, @NotNull Processor<PsiReference> consumer) {
|
||||
PsiElement element = queryParameters.getElementToSearch();
|
||||
if (!JetPluginUtil.isInSourceContent(element)) {
|
||||
if (!JetPluginUtil.isInSourceContent(element) || JetPluginUtil.isKtFileInGradleProjectInWrongFolder(element)) {
|
||||
return;
|
||||
}
|
||||
if (element instanceof JetClass) {
|
||||
|
||||
@@ -24,6 +24,7 @@ import com.intellij.psi.search.DelegatingGlobalSearchScope;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.plugin.JetFileType;
|
||||
import org.jetbrains.jet.plugin.JetPluginUtil;
|
||||
|
||||
public class JetSourceFilterScope extends DelegatingGlobalSearchScope {
|
||||
public static JetSourceFilterScope kotlinSourcesAndLibraries(@NotNull GlobalSearchScope delegate) {
|
||||
@@ -53,6 +54,10 @@ public class JetSourceFilterScope extends DelegatingGlobalSearchScope {
|
||||
return index.isInLibraryClasses(file);
|
||||
}
|
||||
|
||||
if (JetPluginUtil.isKtFileInGradleProjectInWrongFolder(file, getProject())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return file.getFileType().equals(JetFileType.INSTANCE) &&
|
||||
(index.isInSourceContent(file) || includeLibraries && index.isInLibrarySource(file));
|
||||
}
|
||||
|
||||
+3
-14
@@ -17,8 +17,6 @@
|
||||
package org.jetbrains.jet.plugin.versions;
|
||||
|
||||
import com.intellij.ProjectTopics;
|
||||
import com.intellij.facet.Facet;
|
||||
import com.intellij.facet.FacetManager;
|
||||
import com.intellij.framework.addSupport.impl.AddSupportForSingleFrameworkDialog;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.compiler.CompilerManager;
|
||||
@@ -41,6 +39,7 @@ import com.intellij.util.messages.MessageBusConnection;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.plugin.JetFileType;
|
||||
import org.jetbrains.jet.plugin.JetPluginUtil;
|
||||
import org.jetbrains.jet.plugin.framework.JSFrameworkSupportProvider;
|
||||
import org.jetbrains.jet.plugin.framework.JavaFrameworkSupportProvider;
|
||||
import org.jetbrains.jet.plugin.framework.KotlinFrameworkDetector;
|
||||
@@ -87,6 +86,7 @@ public class KotlinLibrariesNotificationProvider extends EditorNotifications.Pro
|
||||
if (file.getFileType() != JetFileType.INSTANCE) return null;
|
||||
|
||||
if (!ProjectFileIndex.SERVICE.getInstance(myProject).isInSourceContent(file)) return null;
|
||||
if (JetPluginUtil.isKtFileInGradleProjectInWrongFolder(file, myProject)) return null;
|
||||
if (CompilerManager.getInstance(myProject).isExcludedFromCompilation(file)) return null;
|
||||
|
||||
Module module = ModuleUtilCore.findModuleForFile(file, myProject);
|
||||
@@ -109,7 +109,7 @@ public class KotlinLibrariesNotificationProvider extends EditorNotifications.Pro
|
||||
}
|
||||
|
||||
public static boolean isModuleAlreadyConfigured(Module module) {
|
||||
return isMavenModule(module) || isAndroidGradleModule(module) || KotlinFrameworkDetector.isJsKotlinModule(module) || KotlinFrameworkDetector.isJavaKotlinModule(module);
|
||||
return isMavenModule(module) || JetPluginUtil.isAndroidGradleModule(module) || KotlinFrameworkDetector.isJsKotlinModule(module) || KotlinFrameworkDetector.isJavaKotlinModule(module);
|
||||
}
|
||||
|
||||
private static boolean isMavenModule(@NotNull Module module) {
|
||||
@@ -118,17 +118,6 @@ public class KotlinLibrariesNotificationProvider extends EditorNotifications.Pro
|
||||
return "true".equals(module.getOptionValue("org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule"));
|
||||
}
|
||||
|
||||
private static boolean isAndroidGradleModule(@NotNull Module module) {
|
||||
// We don't want to depend on the Android-Gradle plugin
|
||||
// See com.android.tools.idea.gradle.util.Projects.isGradleProject()
|
||||
for (Facet facet : FacetManager.getInstance(module).getAllFacets()) {
|
||||
if (facet.getName().equals("Android-Gradle")) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
private static EditorNotificationPanel createFrameworkConfigurationNotificationPanel(final Module module) {
|
||||
EditorNotificationPanel answer = new EditorNotificationPanel();
|
||||
|
||||
Reference in New Issue
Block a user