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;
|
package org.jetbrains.jet.plugin;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
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.IdeaPluginDescriptor;
|
||||||
import com.intellij.ide.plugins.PluginManager;
|
import com.intellij.ide.plugins.PluginManager;
|
||||||
import com.intellij.openapi.extensions.PluginId;
|
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.project.Project;
|
||||||
import com.intellij.openapi.roots.ProjectFileIndex;
|
import com.intellij.openapi.roots.ProjectFileIndex;
|
||||||
|
import com.intellij.openapi.roots.ProjectRootManager;
|
||||||
import com.intellij.openapi.vfs.VirtualFile;
|
import com.intellij.openapi.vfs.VirtualFile;
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
import com.intellij.psi.PsiFile;
|
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.";
|
assert plugin != null : "How can it be? Kotlin plugin is available, but its component is running. Complete nonsense.";
|
||||||
return plugin.getVersion();
|
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 (!(file instanceof JetFile)) return null;
|
||||||
|
|
||||||
if (!JetPluginUtil.isInSourceContent(file)) return null;
|
if (!JetPluginUtil.isInSourceContent(file)) return null;
|
||||||
|
if (JetPluginUtil.isKtFileInGradleProjectInWrongFolder(file)) return null;
|
||||||
|
|
||||||
PsiElement target = TargetElementUtilBase.findTargetElement(editor, TargetElementUtilBase.getInstance().getAllAccepted());
|
PsiElement target = TargetElementUtilBase.findTargetElement(editor, TargetElementUtilBase.getInstance().getAllAccepted());
|
||||||
|
|
||||||
|
|||||||
@@ -40,7 +40,9 @@ public class DebugInfoAnnotator implements Annotator {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void annotate(@NotNull PsiElement element, @NotNull final AnnotationHolder holder) {
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -88,7 +88,9 @@ public class DeclarationHintSupport extends AbstractProjectComponent {
|
|||||||
|
|
||||||
Editor editor = e.getEditor();
|
Editor editor = e.getEditor();
|
||||||
PsiFile psiFile = PsiDocumentManager.getInstance(myProject).getPsiFile(editor.getDocument());
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -363,7 +363,8 @@ public class JetLineMarkerProvider implements LineMarkerProvider {
|
|||||||
public void collectSlowLineMarkers(@NotNull List<PsiElement> elements, @NotNull Collection<LineMarkerInfo> result) {
|
public void collectSlowLineMarkers(@NotNull List<PsiElement> elements, @NotNull Collection<LineMarkerInfo> result) {
|
||||||
if (elements.isEmpty() ||
|
if (elements.isEmpty() ||
|
||||||
DumbService.getInstance(elements.get(0).getProject()).isDumb() ||
|
DumbService.getInstance(elements.get(0).getProject()).isDumb() ||
|
||||||
!JetPluginUtil.isInSourceContent(elements.get(0))) {
|
!JetPluginUtil.isInSourceContent(elements.get(0)) ||
|
||||||
|
JetPluginUtil.isKtFileInGradleProjectInWrongFolder(elements.get(0))) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -100,7 +100,8 @@ public class JetPsiChecker implements Annotator {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void annotate(@NotNull PsiElement element, @NotNull AnnotationHolder holder) {
|
public void annotate(@NotNull PsiElement element, @NotNull AnnotationHolder holder) {
|
||||||
if (!JetPluginUtil.isInSourceContent(element)) {
|
if (!JetPluginUtil.isInSourceContent(element) ||
|
||||||
|
JetPluginUtil.isKtFileInGradleProjectInWrongFolder(element)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
import org.jetbrains.jet.lang.psi.JetFile;
|
import org.jetbrains.jet.lang.psi.JetFile;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JetFilesProvider;
|
import org.jetbrains.jet.lang.resolve.java.JetFilesProvider;
|
||||||
import org.jetbrains.jet.plugin.JetFileType;
|
import org.jetbrains.jet.plugin.JetFileType;
|
||||||
|
import org.jetbrains.jet.plugin.JetPluginUtil;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
@@ -69,6 +70,7 @@ public class PluginJetFilesProvider extends JetFilesProvider {
|
|||||||
public boolean processFile(VirtualFile file) {
|
public boolean processFile(VirtualFile file) {
|
||||||
if (file.isDirectory()) return true;
|
if (file.isDirectory()) return true;
|
||||||
if (!index.isInSourceContent(file) && !index.isInTestSourceContent(file)) return true;
|
if (!index.isInSourceContent(file) && !index.isInTestSourceContent(file)) return true;
|
||||||
|
if (JetPluginUtil.isKtFileInGradleProjectInWrongFolder(file, project)) return true;
|
||||||
|
|
||||||
FileType fileType = FileTypeManager.getInstance().getFileTypeByFile(file);
|
FileType fileType = FileTypeManager.getInstance().getFileTypeByFile(file);
|
||||||
if (fileType != JetFileType.INSTANCE) return true;
|
if (fileType != JetFileType.INSTANCE) return true;
|
||||||
@@ -102,7 +104,9 @@ public class PluginJetFilesProvider extends JetFilesProvider {
|
|||||||
new com.google.common.base.Function<VirtualFile, JetFile>() {
|
new com.google.common.base.Function<VirtualFile, JetFile>() {
|
||||||
@Override
|
@Override
|
||||||
public JetFile apply(@Nullable VirtualFile file) {
|
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;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ public class KotlinReferencesSearcher extends QueryExecutorBase<PsiReference, Re
|
|||||||
@Override
|
@Override
|
||||||
public void processQuery(@NotNull ReferencesSearch.SearchParameters queryParameters, @NotNull Processor<PsiReference> consumer) {
|
public void processQuery(@NotNull ReferencesSearch.SearchParameters queryParameters, @NotNull Processor<PsiReference> consumer) {
|
||||||
PsiElement element = queryParameters.getElementToSearch();
|
PsiElement element = queryParameters.getElementToSearch();
|
||||||
if (!JetPluginUtil.isInSourceContent(element)) {
|
if (!JetPluginUtil.isInSourceContent(element) || JetPluginUtil.isKtFileInGradleProjectInWrongFolder(element)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (element instanceof JetClass) {
|
if (element instanceof JetClass) {
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import com.intellij.psi.search.DelegatingGlobalSearchScope;
|
|||||||
import com.intellij.psi.search.GlobalSearchScope;
|
import com.intellij.psi.search.GlobalSearchScope;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.plugin.JetFileType;
|
import org.jetbrains.jet.plugin.JetFileType;
|
||||||
|
import org.jetbrains.jet.plugin.JetPluginUtil;
|
||||||
|
|
||||||
public class JetSourceFilterScope extends DelegatingGlobalSearchScope {
|
public class JetSourceFilterScope extends DelegatingGlobalSearchScope {
|
||||||
public static JetSourceFilterScope kotlinSourcesAndLibraries(@NotNull GlobalSearchScope delegate) {
|
public static JetSourceFilterScope kotlinSourcesAndLibraries(@NotNull GlobalSearchScope delegate) {
|
||||||
@@ -53,6 +54,10 @@ public class JetSourceFilterScope extends DelegatingGlobalSearchScope {
|
|||||||
return index.isInLibraryClasses(file);
|
return index.isInLibraryClasses(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (JetPluginUtil.isKtFileInGradleProjectInWrongFolder(file, getProject())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return file.getFileType().equals(JetFileType.INSTANCE) &&
|
return file.getFileType().equals(JetFileType.INSTANCE) &&
|
||||||
(index.isInSourceContent(file) || includeLibraries && index.isInLibrarySource(file));
|
(index.isInSourceContent(file) || includeLibraries && index.isInLibrarySource(file));
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-14
@@ -17,8 +17,6 @@
|
|||||||
package org.jetbrains.jet.plugin.versions;
|
package org.jetbrains.jet.plugin.versions;
|
||||||
|
|
||||||
import com.intellij.ProjectTopics;
|
import com.intellij.ProjectTopics;
|
||||||
import com.intellij.facet.Facet;
|
|
||||||
import com.intellij.facet.FacetManager;
|
|
||||||
import com.intellij.framework.addSupport.impl.AddSupportForSingleFrameworkDialog;
|
import com.intellij.framework.addSupport.impl.AddSupportForSingleFrameworkDialog;
|
||||||
import com.intellij.openapi.application.ApplicationManager;
|
import com.intellij.openapi.application.ApplicationManager;
|
||||||
import com.intellij.openapi.compiler.CompilerManager;
|
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.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.plugin.JetFileType;
|
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.JSFrameworkSupportProvider;
|
||||||
import org.jetbrains.jet.plugin.framework.JavaFrameworkSupportProvider;
|
import org.jetbrains.jet.plugin.framework.JavaFrameworkSupportProvider;
|
||||||
import org.jetbrains.jet.plugin.framework.KotlinFrameworkDetector;
|
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 (file.getFileType() != JetFileType.INSTANCE) return null;
|
||||||
|
|
||||||
if (!ProjectFileIndex.SERVICE.getInstance(myProject).isInSourceContent(file)) 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;
|
if (CompilerManager.getInstance(myProject).isExcludedFromCompilation(file)) return null;
|
||||||
|
|
||||||
Module module = ModuleUtilCore.findModuleForFile(file, myProject);
|
Module module = ModuleUtilCore.findModuleForFile(file, myProject);
|
||||||
@@ -109,7 +109,7 @@ public class KotlinLibrariesNotificationProvider extends EditorNotifications.Pro
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isModuleAlreadyConfigured(Module module) {
|
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) {
|
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"));
|
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) {
|
private static EditorNotificationPanel createFrameworkConfigurationNotificationPanel(final Module module) {
|
||||||
EditorNotificationPanel answer = new EditorNotificationPanel();
|
EditorNotificationPanel answer = new EditorNotificationPanel();
|
||||||
|
|||||||
Reference in New Issue
Block a user