diff --git a/.idea/modules.xml b/.idea/modules.xml index 8f22a434b66..d56e6d3330e 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -23,6 +23,7 @@ + diff --git a/build.xml b/build.xml index b7661ecab62..0572a05604d 100644 --- a/build.xml +++ b/build.xml @@ -656,31 +656,57 @@ - - - - - - - - - + - - + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/idea/analysis/analysis.iml b/idea/idea-analysis/idea-analysis.iml similarity index 100% rename from idea/analysis/analysis.iml rename to idea/idea-analysis/idea-analysis.iml diff --git a/idea/src/org/jetbrains/jet/plugin/JetBundle.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/JetBundle.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/JetBundle.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/JetBundle.java diff --git a/idea/src/org/jetbrains/jet/plugin/JetBundle.properties b/idea/idea-analysis/src/org/jetbrains/jet/plugin/JetBundle.properties similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/JetBundle.properties rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/JetBundle.properties diff --git a/idea/src/org/jetbrains/jet/plugin/JetIconProvider.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/JetIconProvider.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/JetIconProvider.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/JetIconProvider.java diff --git a/idea/src/org/jetbrains/jet/plugin/JetIcons.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/JetIcons.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/JetIcons.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/JetIcons.java diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/ProjectRootsUtil.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/ProjectRootsUtil.java new file mode 100644 index 00000000000..3cef674ca1d --- /dev/null +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/ProjectRootsUtil.java @@ -0,0 +1,42 @@ +/* + * Copyright 2010-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.plugin; + +import com.intellij.openapi.roots.ProjectFileIndex; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; +import org.jetbrains.annotations.NotNull; + +public class ProjectRootsUtil { + public static boolean isInSource(@NotNull PsiElement element) { + return isInSource(element, true); + } + + public static boolean isInSource(@NotNull PsiElement element, boolean includeLibrarySources) { + PsiFile containingFile = element.getContainingFile(); + if (containingFile == null) { + return false; + } + VirtualFile virtualFile = containingFile.getVirtualFile(); + if (virtualFile == null) { + return false; + } + ProjectFileIndex index = ProjectFileIndex.SERVICE.getInstance(element.getProject()); + return includeLibrarySources ? index.isInSource(virtualFile) : index.isInSourceContent(virtualFile); + } +} diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/actions/internal/KotlinInternalMode.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/actions/internal/KotlinInternalMode.kt new file mode 100644 index 00000000000..dd0ec75e6d4 --- /dev/null +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/actions/internal/KotlinInternalMode.kt @@ -0,0 +1,34 @@ +/* + * Copyright 2010-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.plugin.actions.internal + +import com.intellij.ide.util.PropertiesComponent + +public class KotlinInternalMode { + public class object { + val INTERNAL_MODE_PROPERTY = "kotlin.internal.mode.enabled" + + public var enabled: Boolean + get() = PropertiesComponent.getInstance()!!.getBoolean( + INTERNAL_MODE_PROPERTY, + System.getProperty(INTERNAL_MODE_PROPERTY) == "true" + ) + set(value) { + PropertiesComponent.getInstance()!!.setValue(INTERNAL_MODE_PROPERTY, value.toString()) + } + } +} diff --git a/idea/src/org/jetbrains/jet/plugin/caches/JetFromJavaDescriptorHelper.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/caches/JetFromJavaDescriptorHelper.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/caches/JetFromJavaDescriptorHelper.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/caches/JetFromJavaDescriptorHelper.java diff --git a/idea/src/org/jetbrains/jet/plugin/caches/JetShortNamesCache.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/caches/JetShortNamesCache.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/caches/JetShortNamesCache.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/caches/JetShortNamesCache.java diff --git a/idea/src/org/jetbrains/jet/plugin/caches/resolve/IDELightClassGenerationSupport.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/caches/resolve/IDELightClassGenerationSupport.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/caches/resolve/IDELightClassGenerationSupport.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/caches/resolve/IDELightClassGenerationSupport.java diff --git a/idea/src/org/jetbrains/jet/plugin/caches/resolve/KotlinCacheService.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/caches/resolve/KotlinCacheService.kt similarity index 99% rename from idea/src/org/jetbrains/jet/plugin/caches/resolve/KotlinCacheService.kt rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/caches/resolve/KotlinCacheService.kt index 3bef76967ff..03fdff9fc35 100644 --- a/idea/src/org/jetbrains/jet/plugin/caches/resolve/KotlinCacheService.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/caches/resolve/KotlinCacheService.kt @@ -142,4 +142,4 @@ class KotlinCacheService(val project: Project) { public fun get(extension: CacheExtension): T { return globalCachesPerPlatform[extension.platform]!![extension] } -} \ No newline at end of file +} diff --git a/idea/src/org/jetbrains/jet/plugin/caches/resolve/KotlinResolveCache.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/caches/resolve/KotlinResolveCache.kt similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/caches/resolve/KotlinResolveCache.kt rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/caches/resolve/KotlinResolveCache.kt diff --git a/idea/src/org/jetbrains/jet/plugin/caches/resolve/chacheUtils.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/caches/resolve/chacheUtils.kt similarity index 86% rename from idea/src/org/jetbrains/jet/plugin/caches/resolve/chacheUtils.kt rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/caches/resolve/chacheUtils.kt index 44f9b77cc85..aa261678873 100644 --- a/idea/src/org/jetbrains/jet/plugin/caches/resolve/chacheUtils.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/caches/resolve/chacheUtils.kt @@ -17,11 +17,7 @@ package org.jetbrains.jet.plugin.caches.resolve import com.intellij.openapi.project.Project -import com.intellij.psi.util.PsiModificationTracker -import java.util.concurrent.locks.Lock -import java.util.concurrent.locks.ReentrantLock import com.intellij.psi.util.CachedValuesManager -import com.intellij.util.containers.SLRUCache import com.intellij.psi.util.CachedValueProvider class SynchronizedCachedValue(project: Project, provider: () -> CachedValueProvider.Result, trackValue: Boolean = true) { diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/DescriptorToDeclarationUtil.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/codeInsight/DescriptorToDeclarationUtil.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/codeInsight/DescriptorToDeclarationUtil.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/codeInsight/DescriptorToDeclarationUtil.java diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/configuration/JetModuleTypeManager.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/configuration/JetModuleTypeManager.java new file mode 100644 index 00000000000..bcdf74e32dc --- /dev/null +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/configuration/JetModuleTypeManager.java @@ -0,0 +1,37 @@ +/* + * Copyright 2010-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.plugin.configuration; + +import com.intellij.openapi.components.ServiceManager; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.PsiElement; +import org.jetbrains.annotations.NotNull; + +public abstract class JetModuleTypeManager { + public static JetModuleTypeManager getInstance() { + return ServiceManager.getService(JetModuleTypeManager.class); + } + + public abstract boolean isKtFileInGradleProjectInWrongFolder(@NotNull PsiElement element); + public abstract boolean isKtFileInGradleProjectInWrongFolder(@NotNull VirtualFile virtualFile, @NotNull Project project); + public abstract boolean isAndroidGradleModule(@NotNull Module module); + public boolean isGradleModule(@NotNull Module module) { + return ModuleTypeCacheManager.OBJECT$.geInstance(module.getProject()).isGradleModule(module); + } +} diff --git a/idea/src/org/jetbrains/jet/plugin/configuration/ModuleTypeCache.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/configuration/ModuleTypeCache.kt similarity index 96% rename from idea/src/org/jetbrains/jet/plugin/configuration/ModuleTypeCache.kt rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/configuration/ModuleTypeCache.kt index 68c6c62af7c..40e3ab3a618 100644 --- a/idea/src/org/jetbrains/jet/plugin/configuration/ModuleTypeCache.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/configuration/ModuleTypeCache.kt @@ -22,13 +22,13 @@ import com.intellij.openapi.project.Project import com.intellij.openapi.vfs.VirtualFileManager import com.intellij.psi.util.CachedValueProvider import com.intellij.psi.util.CachedValuesManager -import com.intellij.openapi.util.DefaultModificationTracker import com.intellij.openapi.vfs.impl.BulkVirtualFileListenerAdapter import com.intellij.openapi.vfs.VirtualFileAdapter import com.intellij.openapi.vfs.VirtualFileEvent import com.intellij.openapi.vfs.VirtualFileMoveEvent import com.intellij.openapi.vfs.VirtualFileCopyEvent import com.intellij.openapi.vfs.VirtualFilePropertyEvent +import com.intellij.openapi.util.SimpleModificationTracker class ModuleTypeCacheManager private (project: Project) { class object { @@ -50,7 +50,7 @@ class ModuleTypeCacheManager private (project: Project) { return cachedValue?.getValue(module) } - private class VfsModificationTracker(project: Project): DefaultModificationTracker() { + private class VfsModificationTracker(project: Project): SimpleModificationTracker() { { val connection = project.getMessageBus().connect(); connection.subscribe(VirtualFileManager.VFS_CHANGES, BulkVirtualFileListenerAdapter( diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/framework/JavaRuntimeDetectionUtil.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/framework/JavaRuntimeDetectionUtil.java new file mode 100644 index 00000000000..871930df691 --- /dev/null +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/framework/JavaRuntimeDetectionUtil.java @@ -0,0 +1,53 @@ +/* + * Copyright 2010-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.plugin.framework; + +import com.intellij.openapi.util.io.JarUtil; +import com.intellij.openapi.vfs.VfsUtilCore; +import com.intellij.openapi.vfs.VirtualFile; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.utils.PathUtil; + +import java.util.List; +import java.util.jar.Attributes; + +public class JavaRuntimeDetectionUtil { + public static String getJavaRuntimeVersion(@NotNull List classesRoots) { + VirtualFile stdJar = getRuntimeJar(classesRoots); + if (stdJar != null) { + return JarUtil.getJarAttribute(VfsUtilCore.virtualToIoFile(stdJar), Attributes.Name.IMPLEMENTATION_VERSION); + } + + return null; + } + + @Nullable + public static VirtualFile getRuntimeJar(@NotNull List classesRoots) { + return getJarFile(classesRoots, PathUtil.KOTLIN_JAVA_RUNTIME_JAR); + } + + static VirtualFile getJarFile(@NotNull List classesRoots, @NotNull String jarName) { + for (VirtualFile root : classesRoots) { + if (root.getName().equals(jarName)) { + return root; + } + } + + return null; + } +} diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/framework/JsHeaderLibraryDetectionUtil.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/framework/JsHeaderLibraryDetectionUtil.java new file mode 100644 index 00000000000..de263f49cf0 --- /dev/null +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/framework/JsHeaderLibraryDetectionUtil.java @@ -0,0 +1,53 @@ +/* + * Copyright 2010-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.plugin.framework; + +import com.intellij.openapi.vfs.VfsUtilCore; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.util.CommonProcessors; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.plugin.JetFileType; + +import java.util.List; + +public class JsHeaderLibraryDetectionUtil { + public static boolean isJsHeaderLibraryDetected(@NotNull List classesRoots) { + if (JavaRuntimeDetectionUtil.getJavaRuntimeVersion(classesRoots) != null) { + // Prevent clashing with java runtime + return false; + } + + for (VirtualFile file : classesRoots) { + CommonProcessors.FindFirstProcessor findKTProcessor = new CommonProcessors.FindFirstProcessor() { + @Override + protected boolean accept(VirtualFile file) { + String extension = file.getExtension(); + return extension != null && extension.equals(JetFileType.INSTANCE.getDefaultExtension()); + } + }; + + VfsUtilCore.processFilesRecursively(file, findKTProcessor); + + if (findKTProcessor.isFound()) { + return true; + } + } + + return false; + + } +} diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/framework/JsLibraryStdDetectionUtil.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/framework/JsLibraryStdDetectionUtil.java new file mode 100644 index 00000000000..cbe9a272d3a --- /dev/null +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/framework/JsLibraryStdDetectionUtil.java @@ -0,0 +1,46 @@ +/* + * Copyright 2010-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.plugin.framework; + +import com.intellij.openapi.util.io.JarUtil; +import com.intellij.openapi.vfs.VfsUtilCore; +import com.intellij.openapi.vfs.VirtualFile; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.utils.PathUtil; + +import java.util.List; +import java.util.jar.Attributes; + +public class JsLibraryStdDetectionUtil { + public static String getJsLibraryStdVersion(@NotNull List classesRoots) { + if (JavaRuntimeDetectionUtil.getJavaRuntimeVersion(classesRoots) != null) { + // Prevent clashing with java runtime, in case when library collects all roots. + return null; + } + + for (VirtualFile root : classesRoots) { + if (root.getName().equals(PathUtil.JS_LIB_JAR_NAME)) { + assert JsHeaderLibraryDetectionUtil.isJsHeaderLibraryDetected(classesRoots) : "StdLib should also be detected as headers library"; + + return JarUtil.getJarAttribute(VfsUtilCore.virtualToIoFile(root), Attributes.Name.IMPLEMENTATION_VERSION); + } + } + + return null; + + } +} diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/AfterAnalysisHighlightingVisitor.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/AfterAnalysisHighlightingVisitor.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/highlighter/AfterAnalysisHighlightingVisitor.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/AfterAnalysisHighlightingVisitor.java diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/DebugInfoAnnotator.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/DebugInfoAnnotator.java similarity index 91% rename from idea/src/org/jetbrains/jet/plugin/highlighter/DebugInfoAnnotator.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/DebugInfoAnnotator.java index b5aff483548..80290efade1 100644 --- a/idea/src/org/jetbrains/jet/plugin/highlighter/DebugInfoAnnotator.java +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/DebugInfoAnnotator.java @@ -18,7 +18,6 @@ package org.jetbrains.jet.plugin.highlighter; import com.intellij.lang.annotation.AnnotationHolder; import com.intellij.lang.annotation.Annotator; -import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.progress.ProcessCanceledException; import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; @@ -27,9 +26,10 @@ import org.jetbrains.jet.lang.psi.JetCodeFragment; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetReferenceExpression; import org.jetbrains.jet.lang.resolve.BindingContext; -import org.jetbrains.jet.plugin.JetPluginUtil; -import org.jetbrains.jet.plugin.actions.internal.KotlinInternalModeToggleAction; +import org.jetbrains.jet.plugin.ProjectRootsUtil; +import org.jetbrains.jet.plugin.actions.internal.KotlinInternalMode; import org.jetbrains.jet.plugin.caches.resolve.ResolvePackage; +import org.jetbrains.jet.plugin.configuration.JetModuleTypeManager; /** * Quick showing possible problems with Kotlin internals in IDEA with tooltips @@ -37,14 +37,14 @@ import org.jetbrains.jet.plugin.caches.resolve.ResolvePackage; public class DebugInfoAnnotator implements Annotator { public static boolean isDebugInfoEnabled() { - return KotlinInternalModeToggleAction.OBJECT$.getEnabled(); + return KotlinInternalMode.OBJECT$.getEnabled(); } @Override public void annotate(@NotNull PsiElement element, @NotNull final AnnotationHolder holder) { if (!isDebugInfoEnabled() || - !JetPluginUtil.isInSource(element) || - JetPluginUtil.isKtFileInGradleProjectInWrongFolder(element)) { + !ProjectRootsUtil.isInSource(element) || + JetModuleTypeManager.getInstance().isKtFileInGradleProjectInWrongFolder(element)) { return; } diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/DeprecatedAnnotationVisitor.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/DeprecatedAnnotationVisitor.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/highlighter/DeprecatedAnnotationVisitor.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/DeprecatedAnnotationVisitor.java diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/DuplicateJvmSignatureAnnotator.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/DuplicateJvmSignatureAnnotator.java similarity index 94% rename from idea/src/org/jetbrains/jet/plugin/highlighter/DuplicateJvmSignatureAnnotator.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/DuplicateJvmSignatureAnnotator.java index 6c384849679..f16b54ef6b4 100644 --- a/idea/src/org/jetbrains/jet/plugin/highlighter/DuplicateJvmSignatureAnnotator.java +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/DuplicateJvmSignatureAnnotator.java @@ -26,7 +26,7 @@ import org.jetbrains.jet.lang.psi.JetDeclaration; import org.jetbrains.jet.lang.psi.JetElement; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.resolve.Diagnostics; -import org.jetbrains.jet.plugin.JetPluginUtil; +import org.jetbrains.jet.plugin.ProjectRootsUtil; import org.jetbrains.jet.plugin.caches.resolve.ResolvePackage; import org.jetbrains.jet.plugin.project.TargetPlatform; import org.jetbrains.jet.plugin.project.TargetPlatformDetector; @@ -36,7 +36,7 @@ public class DuplicateJvmSignatureAnnotator implements Annotator { @Override public void annotate(@NotNull PsiElement element, @NotNull AnnotationHolder holder) { if (!(element instanceof JetFile) && !(element instanceof JetDeclaration)) return; - if (!JetPluginUtil.isInSource(element, false)) return; + if (!ProjectRootsUtil.isInSource(element, false)) return; PsiFile file = element.getContainingFile(); if (!(file instanceof JetFile) || TargetPlatformDetector.getPlatform((JetFile) file) != TargetPlatform.JVM) return; diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/FunctionsHighlightingVisitor.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/FunctionsHighlightingVisitor.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/highlighter/FunctionsHighlightingVisitor.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/FunctionsHighlightingVisitor.java diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/HighlightingVisitor.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/HighlightingVisitor.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/highlighter/HighlightingVisitor.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/HighlightingVisitor.java diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/HtmlTabledDescriptorRenderer.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/HtmlTabledDescriptorRenderer.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/highlighter/HtmlTabledDescriptorRenderer.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/HtmlTabledDescriptorRenderer.java diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/IdeErrorMessages.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/IdeErrorMessages.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/highlighter/IdeErrorMessages.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/IdeErrorMessages.java diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/IdeRenderers.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/IdeRenderers.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/highlighter/IdeRenderers.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/IdeRenderers.java diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/JetHighlighter.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/JetHighlighter.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/highlighter/JetHighlighter.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/JetHighlighter.java diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/JetHighlightingColors.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/JetHighlightingColors.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/highlighter/JetHighlightingColors.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/JetHighlightingColors.java diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/JetHighlightingLexer.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/JetHighlightingLexer.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/highlighter/JetHighlightingLexer.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/JetHighlightingLexer.java diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/JetPsiChecker.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/JetPsiChecker.java similarity index 93% rename from idea/src/org/jetbrains/jet/plugin/highlighter/JetPsiChecker.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/JetPsiChecker.java index e80df7b7730..8b79a7b0683 100644 --- a/idea/src/org/jetbrains/jet/plugin/highlighter/JetPsiChecker.java +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/JetPsiChecker.java @@ -45,9 +45,10 @@ import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetReferenceExpression; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.Diagnostics; -import org.jetbrains.jet.plugin.JetPluginUtil; -import org.jetbrains.jet.plugin.actions.internal.KotlinInternalModeToggleAction; +import org.jetbrains.jet.plugin.ProjectRootsUtil; +import org.jetbrains.jet.plugin.actions.internal.KotlinInternalMode; import org.jetbrains.jet.plugin.caches.resolve.ResolvePackage; +import org.jetbrains.jet.plugin.configuration.JetModuleTypeManager; import org.jetbrains.jet.plugin.quickfix.JetIntentionActionsFactory; import org.jetbrains.jet.plugin.quickfix.QuickFixes; @@ -93,8 +94,8 @@ public class JetPsiChecker implements Annotator, HighlightRangeExtension { @Override public void annotate(@NotNull PsiElement element, @NotNull AnnotationHolder holder) { - if (!(JetPluginUtil.isInSource(element) || element.getContainingFile() instanceof JetCodeFragment) - || JetPluginUtil.isKtFileInGradleProjectInWrongFolder(element)) { + if (!(ProjectRootsUtil.isInSource(element) || element.getContainingFile() instanceof JetCodeFragment) + || JetModuleTypeManager.getInstance().isKtFileInGradleProjectInWrongFolder(element)) { return; } @@ -106,8 +107,6 @@ public class JetPsiChecker implements Annotator, HighlightRangeExtension { AnalyzeExhaust analyzeExhaust = ResolvePackage.getAnalysisResults(file); if (analyzeExhaust.isError()) { - HighlighterPackage.updateHighlightingResult(file, true); - throw new ProcessCanceledException(analyzeExhaust.getError()); } @@ -118,15 +117,10 @@ public class JetPsiChecker implements Annotator, HighlightRangeExtension { } annotateElement(element, holder, bindingContext.getDiagnostics()); - - if (element instanceof JetFile) { - //noinspection StaticMethodReferencedViaSubclass - HighlighterPackage.updateHighlightingResult(file, false); - } } public static void annotateElement(PsiElement element, AnnotationHolder holder, Diagnostics diagnostics) { - if (JetPluginUtil.isInSource(element, /* includeLibrarySources = */ false) || element.getContainingFile() instanceof JetCodeFragment) { + if (ProjectRootsUtil.isInSource(element, /* includeLibrarySources = */ false) || element.getContainingFile() instanceof JetCodeFragment) { ElementAnnotator elementAnnotator = new ElementAnnotator(element, holder); for (Diagnostic diagnostic : diagnostics.forElement(element)) { elementAnnotator.registerDiagnosticAnnotations(diagnostic); @@ -264,7 +258,7 @@ public class JetPsiChecker implements Annotator, HighlightRangeExtension { @NotNull private static String getMessage(@NotNull Diagnostic diagnostic) { String message = IdeErrorMessages.RENDERER.render(diagnostic); - if (KotlinInternalModeToggleAction.OBJECT$.getEnabled() || ApplicationManager.getApplication().isUnitTestMode()) { + if (KotlinInternalMode.OBJECT$.getEnabled() || ApplicationManager.getApplication().isUnitTestMode()) { String factoryName = diagnostic.getFactory().getName(); if (message.startsWith("")) { message = String.format("[%s] %s", factoryName, message.substring("".length())); @@ -281,7 +275,7 @@ public class JetPsiChecker implements Annotator, HighlightRangeExtension { @NotNull private static String getDefaultMessage(@NotNull Diagnostic diagnostic) { String message = DefaultErrorMessages.RENDERER.render(diagnostic); - if (KotlinInternalModeToggleAction.OBJECT$.getEnabled() || ApplicationManager.getApplication().isUnitTestMode()) { + if (KotlinInternalMode.OBJECT$.getEnabled() || ApplicationManager.getApplication().isUnitTestMode()) { return String.format("[%s] %s", diagnostic.getFactory().getName(), message); } return message; diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/JetSyntaxHighlighterFactory.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/JetSyntaxHighlighterFactory.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/highlighter/JetSyntaxHighlighterFactory.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/JetSyntaxHighlighterFactory.java diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/KotlinProblemHighlightFilter.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/KotlinProblemHighlightFilter.kt similarity index 96% rename from idea/src/org/jetbrains/jet/plugin/highlighter/KotlinProblemHighlightFilter.kt rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/KotlinProblemHighlightFilter.kt index fc630cd0c8d..eed0d9036c8 100644 --- a/idea/src/org/jetbrains/jet/plugin/highlighter/KotlinProblemHighlightFilter.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/KotlinProblemHighlightFilter.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2013 JetBrains s.r.o. + * Copyright 2010-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,8 +18,8 @@ package org.jetbrains.jet.plugin.highlighter import com.intellij.codeInsight.daemon.ProblemHighlightFilter import com.intellij.psi.PsiFile -import com.intellij.ide.projectView.impl.ProjectRootsUtil import org.jetbrains.jet.plugin.JetFileType +import com.intellij.ide.projectView.impl.ProjectRootsUtil class KotlinProblemHighlightFilter : ProblemHighlightFilter() { diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/KotlinSuppressableWarningProblemGroup.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/KotlinSuppressableWarningProblemGroup.kt similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/highlighter/KotlinSuppressableWarningProblemGroup.kt rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/KotlinSuppressableWarningProblemGroup.kt diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/LabelsHighlightingVisitor.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/LabelsHighlightingVisitor.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/highlighter/LabelsHighlightingVisitor.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/LabelsHighlightingVisitor.java diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/PropertiesHighlightingVisitor.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/PropertiesHighlightingVisitor.java similarity index 95% rename from idea/src/org/jetbrains/jet/plugin/highlighter/PropertiesHighlightingVisitor.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/PropertiesHighlightingVisitor.java index 218a2099b0f..6e31054abd6 100644 --- a/idea/src/org/jetbrains/jet/plugin/highlighter/PropertiesHighlightingVisitor.java +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/PropertiesHighlightingVisitor.java @@ -19,7 +19,9 @@ package org.jetbrains.jet.plugin.highlighter; import com.intellij.lang.annotation.AnnotationHolder; import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; -import org.jetbrains.jet.lang.descriptors.*; +import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; +import org.jetbrains.jet.lang.descriptors.PropertyDescriptor; +import org.jetbrains.jet.lang.descriptors.VariableDescriptor; import org.jetbrains.jet.lang.psi.JetParameter; import org.jetbrains.jet.lang.psi.JetProperty; import org.jetbrains.jet.lang.psi.JetSimpleNameExpression; diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/SoftKeywordsHighlightingVisitor.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/SoftKeywordsHighlightingVisitor.java similarity index 96% rename from idea/src/org/jetbrains/jet/plugin/highlighter/SoftKeywordsHighlightingVisitor.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/SoftKeywordsHighlightingVisitor.java index 5823418f042..a23ef0ffacc 100644 --- a/idea/src/org/jetbrains/jet/plugin/highlighter/SoftKeywordsHighlightingVisitor.java +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/SoftKeywordsHighlightingVisitor.java @@ -24,7 +24,8 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.impl.source.tree.LeafPsiElement; import com.intellij.psi.tree.IElementType; import org.jetbrains.annotations.NotNull; -import org.jetbrains.jet.lang.psi.*; +import org.jetbrains.jet.lang.psi.JetFunctionLiteral; +import org.jetbrains.jet.lang.psi.JetFunctionLiteralExpression; import org.jetbrains.jet.lexer.JetTokens; class SoftKeywordsHighlightingVisitor extends HighlightingVisitor { diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/TypeKindHighlightingVisitor.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/TypeKindHighlightingVisitor.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/highlighter/TypeKindHighlightingVisitor.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/TypeKindHighlightingVisitor.java diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/VariablesHighlightingVisitor.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/VariablesHighlightingVisitor.java similarity index 96% rename from idea/src/org/jetbrains/jet/plugin/highlighter/VariablesHighlightingVisitor.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/VariablesHighlightingVisitor.java index b431bd6e792..d9f16e69c8d 100644 --- a/idea/src/org/jetbrains/jet/plugin/highlighter/VariablesHighlightingVisitor.java +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/VariablesHighlightingVisitor.java @@ -19,7 +19,9 @@ package org.jetbrains.jet.plugin.highlighter; import com.intellij.lang.annotation.AnnotationHolder; import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; -import org.jetbrains.jet.lang.descriptors.*; +import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; +import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor; +import org.jetbrains.jet.lang.descriptors.VariableDescriptor; import org.jetbrains.jet.lang.descriptors.impl.LocalVariableDescriptor; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/renderersUtil.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/renderersUtil.kt similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/highlighter/renderersUtil.kt rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/renderersUtil.kt diff --git a/idea/src/org/jetbrains/jet/plugin/inspections/AbstractKotlinInspection.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/inspections/AbstractKotlinInspection.kt similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/inspections/AbstractKotlinInspection.kt rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/inspections/AbstractKotlinInspection.kt index 707647f0aa6..903290df6b4 100644 --- a/idea/src/org/jetbrains/jet/plugin/inspections/AbstractKotlinInspection.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/inspections/AbstractKotlinInspection.kt @@ -19,9 +19,9 @@ package org.jetbrains.jet.plugin.inspections import com.intellij.codeInspection.LocalInspectionTool import com.intellij.codeInspection.CustomSuppressableInspectionTool import com.intellij.psi.PsiElement +import com.intellij.codeInsight.daemon.HighlightDisplayKey import com.intellij.codeInspection.SuppressIntentionAction import com.intellij.codeInspection.SuppressManager -import com.intellij.codeInsight.daemon.HighlightDisplayKey public abstract class AbstractKotlinInspection: LocalInspectionTool(), CustomSuppressableInspectionTool { public override fun getSuppressActions(element: PsiElement?): Array? { diff --git a/idea/src/org/jetbrains/jet/plugin/intentions/JetSelfTargetingIntention.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/intentions/JetSelfTargetingIntention.kt similarity index 81% rename from idea/src/org/jetbrains/jet/plugin/intentions/JetSelfTargetingIntention.kt rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/intentions/JetSelfTargetingIntention.kt index f642a2ec22c..df17baff3d4 100644 --- a/idea/src/org/jetbrains/jet/plugin/intentions/JetSelfTargetingIntention.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/intentions/JetSelfTargetingIntention.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2013 JetBrains s.r.o. + * Copyright 2010-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,18 +16,20 @@ package org.jetbrains.jet.plugin.intentions -import com.intellij.codeInsight.intention.impl.BaseIntentionAction import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project import com.intellij.psi.PsiFile import org.jetbrains.jet.lang.psi.JetElement import org.jetbrains.jet.plugin.JetBundle import org.jetbrains.jet.lang.psi.psiUtil.getParentByTypesAndPredicate +import com.intellij.codeInsight.intention.IntentionAction -public abstract class JetSelfTargetingIntention(val key: String, val elementType: Class) : BaseIntentionAction() { - { - setText(JetBundle.message(key)) +public abstract class JetSelfTargetingIntention(val key: String, val elementType: Class) : IntentionAction { + private var myText:String = JetBundle.message(key); + protected fun setText(text: String) { + myText = text } + override fun getText(): String = myText abstract fun isApplicableTo(element: T): Boolean open fun isApplicableTo(element: T, editor: Editor): Boolean = isApplicableTo(element) @@ -52,4 +54,8 @@ public abstract class JetSelfTargetingIntention(val key: String, applyTo(target!!, editor) } -} + + override fun startInWriteAction(): Boolean = true + + override fun toString(): String = getText() +} \ No newline at end of file diff --git a/idea/src/org/jetbrains/jet/plugin/intentions/OperatorToFunctionIntention.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/intentions/OperatorToFunctionIntention.kt similarity index 94% rename from idea/src/org/jetbrains/jet/plugin/intentions/OperatorToFunctionIntention.kt rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/intentions/OperatorToFunctionIntention.kt index ccffcb2befb..2ab9d4375a5 100644 --- a/idea/src/org/jetbrains/jet/plugin/intentions/OperatorToFunctionIntention.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/intentions/OperatorToFunctionIntention.kt @@ -1,18 +1,18 @@ /* -* Copyright 2010-2014 JetBrains s.r.o. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ + * Copyright 2010-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.jetbrains.jet.plugin.intentions @@ -31,7 +31,6 @@ import org.jetbrains.jet.plugin.project.AnalyzerFacadeWithCache import org.jetbrains.jet.lang.resolve.BindingContext import org.jetbrains.jet.lang.descriptors.FunctionDescriptor import org.jetbrains.jet.lang.resolve.calls.callUtil.getResolvedCall -import org.jetbrains.jet.lang.psi.JetQualifiedExpression public class OperatorToFunctionIntention : JetSelfTargetingIntention("operator.to.function", javaClass()) { class object { diff --git a/idea/src/org/jetbrains/jet/plugin/libraries/DecompiledNavigationUtils.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/libraries/DecompiledNavigationUtils.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/libraries/DecompiledNavigationUtils.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/libraries/DecompiledNavigationUtils.java diff --git a/idea/src/org/jetbrains/jet/plugin/libraries/DecompiledTextFactory.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/libraries/DecompiledTextFactory.kt similarity index 99% rename from idea/src/org/jetbrains/jet/plugin/libraries/DecompiledTextFactory.kt rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/libraries/DecompiledTextFactory.kt index a4477608f52..f6aaf6128d5 100644 --- a/idea/src/org/jetbrains/jet/plugin/libraries/DecompiledTextFactory.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/libraries/DecompiledTextFactory.kt @@ -29,7 +29,6 @@ import java.util.* import org.jetbrains.jet.lang.resolve.DescriptorUtils.isEnumEntry import org.jetbrains.jet.lang.resolve.DescriptorUtils.isSyntheticClassObject import org.jetbrains.jet.lang.types.error.MissingDependencyErrorClass -import org.jetbrains.jet.lang.resolve.DescriptorResolver import org.jetbrains.jet.lang.resolve.name.isComponentFunctionName public fun buildDecompiledText( diff --git a/idea/src/org/jetbrains/jet/plugin/libraries/DecompiledUtils.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/libraries/DecompiledUtils.kt similarity index 89% rename from idea/src/org/jetbrains/jet/plugin/libraries/DecompiledUtils.kt rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/libraries/DecompiledUtils.kt index 64d92ef70fe..448b076f38c 100644 --- a/idea/src/org/jetbrains/jet/plugin/libraries/DecompiledUtils.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/libraries/DecompiledUtils.kt @@ -16,17 +16,14 @@ package org.jetbrains.jet.plugin.libraries -import com.intellij.openapi.fileTypes.StdFileTypes import com.intellij.openapi.vfs.VirtualFile import org.jetbrains.jet.lang.resolve.kotlin.KotlinBinaryClassCache import org.jetbrains.jet.lang.resolve.kotlin.header.KotlinClassHeader import com.intellij.psi.ClassFileViewProvider import org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames.KotlinSyntheticClass +import com.intellij.ide.highlighter.JavaClassFileType public fun isKotlinCompiledFile(file: VirtualFile): Boolean { - if (file.getExtension() != StdFileTypes.CLASS.getDefaultExtension()) { - return false - } if (isKotlinCompiledFileWithIncompatibleAbiVersion(file)) { return false } @@ -35,7 +32,7 @@ public fun isKotlinCompiledFile(file: VirtualFile): Boolean { } public fun isKotlinCompiledFileWithIncompatibleAbiVersion(file: VirtualFile): Boolean { - if (file.getExtension() != StdFileTypes.CLASS.getDefaultExtension()) { + if (file.getExtension() != JavaClassFileType.INSTANCE!!.getDefaultExtension()) { return false } val header = KotlinBinaryClassCache.getKotlinBinaryClass(file)?.getClassHeader() diff --git a/idea/src/org/jetbrains/jet/plugin/libraries/DeserializerForDecompiler.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/libraries/DeserializerForDecompiler.kt similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/libraries/DeserializerForDecompiler.kt rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/libraries/DeserializerForDecompiler.kt diff --git a/idea/src/org/jetbrains/jet/plugin/libraries/JetClassFileDecompiler.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/libraries/JetClassFileDecompiler.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/libraries/JetClassFileDecompiler.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/libraries/JetClassFileDecompiler.java diff --git a/idea/src/org/jetbrains/jet/plugin/libraries/JetClassFileViewProvider.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/libraries/JetClassFileViewProvider.kt similarity index 99% rename from idea/src/org/jetbrains/jet/plugin/libraries/JetClassFileViewProvider.kt rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/libraries/JetClassFileViewProvider.kt index 4b3408aac37..6853d0a10cd 100644 --- a/idea/src/org/jetbrains/jet/plugin/libraries/JetClassFileViewProvider.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/libraries/JetClassFileViewProvider.kt @@ -49,4 +49,4 @@ public class JetClassFileViewProvider( override fun createCopy(copy: VirtualFile): SingleRootFileViewProvider { return JetClassFileViewProvider(getManager(), copy, false, isInternal) } -} \ No newline at end of file +} diff --git a/idea/src/org/jetbrains/jet/plugin/libraries/JetClsFile.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/libraries/JetClsFile.kt similarity index 94% rename from idea/src/org/jetbrains/jet/plugin/libraries/JetClsFile.kt rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/libraries/JetClsFile.kt index 317bb78c71c..0df568e0c19 100644 --- a/idea/src/org/jetbrains/jet/plugin/libraries/JetClsFile.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/libraries/JetClsFile.kt @@ -19,13 +19,10 @@ package org.jetbrains.jet.plugin.libraries import com.intellij.openapi.util.TextRange import com.intellij.psi.impl.compiled.ClsFileImpl import com.intellij.psi.util.PsiTreeUtil -import org.jetbrains.annotations.Nullable import org.jetbrains.annotations.TestOnly import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor import org.jetbrains.jet.lang.psi.JetDeclaration -import org.jetbrains.jet.lang.psi.JetFile import kotlin.properties.Delegates -import com.intellij.psi.PsiFile public class JetClsFile(val provider: JetClassFileViewProvider) : ClsFileImpl(provider) { diff --git a/idea/src/org/jetbrains/jet/plugin/libraries/JetClsStubBuilder.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/libraries/JetClsStubBuilder.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/libraries/JetClsStubBuilder.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/libraries/JetClsStubBuilder.java diff --git a/idea/src/org/jetbrains/jet/plugin/libraries/JetDecompilerForWrongAbiVersion.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/libraries/JetDecompilerForWrongAbiVersion.kt similarity index 94% rename from idea/src/org/jetbrains/jet/plugin/libraries/JetDecompilerForWrongAbiVersion.kt rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/libraries/JetDecompilerForWrongAbiVersion.kt index d66366784b4..0b242824979 100644 --- a/idea/src/org/jetbrains/jet/plugin/libraries/JetDecompilerForWrongAbiVersion.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/libraries/JetDecompilerForWrongAbiVersion.kt @@ -26,4 +26,4 @@ public class JetDecompilerForWrongAbiVersion : ClassFileDecompilers.Light() { override fun getText(file: VirtualFile) = "$INCOMPATIBLE_ABI_VERSION_COMMENT\n${ClsFileImpl.decompile(file)}" } -val INCOMPATIBLE_ABI_VERSION_COMMENT = " // This Kotlin file has an incompatible ABI version and is displayed as Java class" \ No newline at end of file +val INCOMPATIBLE_ABI_VERSION_COMMENT = " // This Kotlin file has an incompatible ABI version and is displayed as Java class" diff --git a/idea/src/org/jetbrains/jet/plugin/libraries/JetDummyClassFileViewProvider.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/libraries/JetDummyClassFileViewProvider.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/libraries/JetDummyClassFileViewProvider.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/libraries/JetDummyClassFileViewProvider.java diff --git a/idea/src/org/jetbrains/jet/plugin/libraries/JetSourceNavigationHelper.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/libraries/JetSourceNavigationHelper.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/libraries/JetSourceNavigationHelper.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/libraries/JetSourceNavigationHelper.java diff --git a/idea/src/org/jetbrains/jet/plugin/libraries/MemberMatching.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/libraries/MemberMatching.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/libraries/MemberMatching.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/libraries/MemberMatching.java diff --git a/idea/src/org/jetbrains/jet/plugin/libraries/ResolverForDecompiler.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/libraries/ResolverForDecompiler.kt similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/libraries/ResolverForDecompiler.kt rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/libraries/ResolverForDecompiler.kt index e9d6f9c22b2..997d605f43d 100644 --- a/idea/src/org/jetbrains/jet/plugin/libraries/ResolverForDecompiler.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/libraries/ResolverForDecompiler.kt @@ -16,9 +16,9 @@ package org.jetbrains.jet.plugin.libraries -import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor import org.jetbrains.jet.lang.resolve.name.FqName import org.jetbrains.jet.lang.descriptors.ClassDescriptor +import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor trait ResolverForDecompiler { fun resolveTopLevelClass(classFqName: FqName): ClassDescriptor? diff --git a/idea/src/org/jetbrains/jet/plugin/libraries/missingDependencies.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/libraries/missingDependencies.kt similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/libraries/missingDependencies.kt rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/libraries/missingDependencies.kt diff --git a/idea/src/org/jetbrains/jet/plugin/project/AnalyzerFacadeProvider.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/project/AnalyzerFacadeProvider.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/project/AnalyzerFacadeProvider.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/project/AnalyzerFacadeProvider.java diff --git a/idea/src/org/jetbrains/jet/plugin/project/AnalyzerFacadeWithCache.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/project/AnalyzerFacadeWithCache.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/project/AnalyzerFacadeWithCache.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/project/AnalyzerFacadeWithCache.java diff --git a/idea/src/org/jetbrains/jet/plugin/project/IDEAConfig.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/project/IDEAConfig.java similarity index 99% rename from idea/src/org/jetbrains/jet/plugin/project/IDEAConfig.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/project/IDEAConfig.java index ccd82d2f56d..5029b77b0dd 100644 --- a/idea/src/org/jetbrains/jet/plugin/project/IDEAConfig.java +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/project/IDEAConfig.java @@ -25,4 +25,4 @@ public final class IDEAConfig extends LibrarySourcesConfig { public IDEAConfig(@NotNull Project project) { super(project, "default", ProjectStructureUtil.getLibLocationForProject(project), EcmaVersion.defaultVersion(), false); } -} \ No newline at end of file +} diff --git a/idea/src/org/jetbrains/jet/plugin/project/JSAnalyzerFacadeForIDEA.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/project/JSAnalyzerFacadeForIDEA.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/project/JSAnalyzerFacadeForIDEA.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/project/JSAnalyzerFacadeForIDEA.java diff --git a/idea/src/org/jetbrains/jet/plugin/project/ProjectStructureUtil.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/project/ProjectStructureUtil.java similarity index 85% rename from idea/src/org/jetbrains/jet/plugin/project/ProjectStructureUtil.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/project/ProjectStructureUtil.java index 46a288c7209..f836fd2d92b 100644 --- a/idea/src/org/jetbrains/jet/plugin/project/ProjectStructureUtil.java +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/project/ProjectStructureUtil.java @@ -31,6 +31,7 @@ import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.Ref; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.search.FileTypeIndex; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.util.CachedValue; import com.intellij.psi.util.CachedValueProvider; @@ -40,16 +41,12 @@ import com.intellij.util.Processor; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.psi.JetFile; -import org.jetbrains.jet.plugin.configuration.ConfigureKotlinInProjectUtils; -import org.jetbrains.jet.plugin.framework.JSLibraryStdPresentationProvider; -import org.jetbrains.jet.plugin.framework.JsHeaderLibraryPresentationProvider; -import org.jetbrains.jet.plugin.framework.LibraryPresentationProviderUtil; -import org.jetbrains.jet.plugin.versions.KotlinRuntimeLibraryUtil; +import org.jetbrains.jet.plugin.JetFileType; +import org.jetbrains.jet.plugin.framework.JsHeaderLibraryDetectionUtil; +import org.jetbrains.jet.plugin.framework.JsLibraryStdDetectionUtil; +import org.jetbrains.jet.plugin.versions.KotlinRuntimeLibraryCoreUtil; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; public class ProjectStructureUtil { private static final Key> IS_KOTLIN_JS_MODULE = Key.create("IS_KOTLIN_JS_MODULE"); @@ -66,8 +63,8 @@ public class ProjectStructureUtil { public static boolean isJavaKotlinModule(@NotNull Module module) { GlobalSearchScope scope = module.getModuleWithDependenciesAndLibrariesScope( - ConfigureKotlinInProjectUtils.hasKotlinFilesOnlyInTests(module)); - return KotlinRuntimeLibraryUtil.getKotlinRuntimeMarkerClass(scope) != null; + hasKotlinFilesOnlyInTests(module)); + return KotlinRuntimeLibraryCoreUtil.getKotlinRuntimeMarkerClass(scope) != null; } public static boolean isJsKotlinModule(@NotNull final Module module) { @@ -162,7 +159,10 @@ public class ProjectStructureUtil { ModuleRootManager.getInstance(module).orderEntries().librariesOnly().forEachLibrary(new Processor() { @Override public boolean process(Library library) { - if (LibraryPresentationProviderUtil.isDetected(JsHeaderLibraryPresentationProvider.getInstance(), library)) { + boolean detected = JsHeaderLibraryDetectionUtil.isJsHeaderLibraryDetected(Arrays.asList( + library.getFiles(OrderRootType.CLASSES))); + + if (detected) { for (VirtualFile file : library.getRootProvider().getFiles(OrderRootType.SOURCES)) { String path = PathUtil.getLocalPath(PathUtil.getLocalFile(file)); if (path != null) { @@ -193,7 +193,11 @@ public class ProjectStructureUtil { ModuleRootManager.getInstance(module).orderEntries().librariesOnly().forEachLibrary(new Processor() { @Override public boolean process(Library library) { - if (LibraryPresentationProviderUtil.isDetected(JSLibraryStdPresentationProvider.getInstance(), library)) { + List classes = Arrays.asList(library.getFiles(OrderRootType.CLASSES)); + + boolean detected = JsLibraryStdDetectionUtil.getJsLibraryStdVersion(classes) != null; + + if (detected) { jsLibrary.set(library); return false; } @@ -206,4 +210,12 @@ public class ProjectStructureUtil { } }); } + + public static boolean hasKotlinFilesInSources(@NotNull Module module) { + return FileTypeIndex.containsFileOfType(JetFileType.INSTANCE, module.getModuleScope(false)); + } + + public static boolean hasKotlinFilesOnlyInTests(@NotNull Module module) { + return !hasKotlinFilesInSources(module) && FileTypeIndex.containsFileOfType(JetFileType.INSTANCE, module.getModuleScope(true)); + } } diff --git a/idea/src/org/jetbrains/jet/plugin/project/ResolveElementCache.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/project/ResolveElementCache.java similarity index 99% rename from idea/src/org/jetbrains/jet/plugin/project/ResolveElementCache.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/project/ResolveElementCache.java index dd971daecae..757ee954bc3 100644 --- a/idea/src/org/jetbrains/jet/plugin/project/ResolveElementCache.java +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/project/ResolveElementCache.java @@ -549,4 +549,4 @@ public class ResolveElementCache { return true; } } -} \ No newline at end of file +} diff --git a/idea/src/org/jetbrains/jet/plugin/project/ResolveSessionForBodies.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/project/ResolveSessionForBodies.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/project/ResolveSessionForBodies.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/project/ResolveSessionForBodies.java diff --git a/idea/src/org/jetbrains/jet/plugin/project/TargetPlatform.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/project/TargetPlatform.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/project/TargetPlatform.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/project/TargetPlatform.java diff --git a/idea/src/org/jetbrains/jet/plugin/project/TargetPlatformDetector.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/project/TargetPlatformDetector.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/project/TargetPlatformDetector.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/project/TargetPlatformDetector.java diff --git a/idea/src/org/jetbrains/jet/plugin/project/TargetPlatformImpl.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/project/TargetPlatformImpl.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/project/TargetPlatformImpl.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/project/TargetPlatformImpl.java diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/JetIntentionActionsFactory.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/quickfix/JetIntentionActionsFactory.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/quickfix/JetIntentionActionsFactory.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/quickfix/JetIntentionActionsFactory.java diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/KotlinSuppressIntentionAction.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/quickfix/KotlinSuppressIntentionAction.kt similarity index 99% rename from idea/src/org/jetbrains/jet/plugin/quickfix/KotlinSuppressIntentionAction.kt rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/quickfix/KotlinSuppressIntentionAction.kt index 42795e88fa1..44fa4adbbd2 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/KotlinSuppressIntentionAction.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/quickfix/KotlinSuppressIntentionAction.kt @@ -159,4 +159,4 @@ private class CaretBox( if (editor == null) return editor.getCaretModel().moveToOffset(copy.getTextOffset() + offsetInExpression) } -} \ No newline at end of file +} diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/quickfix/QuickFixes.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/quickfix/QuickFixes.java new file mode 100644 index 00000000000..1fc4c69f621 --- /dev/null +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/quickfix/QuickFixes.java @@ -0,0 +1,40 @@ +/* + * Copyright 2010-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.plugin.quickfix; + +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Multimap; +import com.intellij.codeInsight.intention.IntentionAction; +import org.jetbrains.jet.lang.diagnostics.DiagnosticFactory; + +import java.util.Collection; + +public class QuickFixes { + + static final Multimap, JetIntentionActionsFactory> factories = HashMultimap.create(); + static final Multimap, IntentionAction> actions = HashMultimap.create(); + + public static Collection getActionsFactories(DiagnosticFactory diagnosticFactory) { + return factories.get(diagnosticFactory); + } + + public static Collection getActions(DiagnosticFactory diagnosticFactory) { + return actions.get(diagnosticFactory); + } + + private QuickFixes() {} +} diff --git a/idea/src/org/jetbrains/jet/plugin/references/BuiltInsReferenceResolver.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/references/BuiltInsReferenceResolver.java similarity index 96% rename from idea/src/org/jetbrains/jet/plugin/references/BuiltInsReferenceResolver.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/references/BuiltInsReferenceResolver.java index 93558bee030..8c4a8ba017e 100644 --- a/idea/src/org/jetbrains/jet/plugin/references/BuiltInsReferenceResolver.java +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/references/BuiltInsReferenceResolver.java @@ -22,14 +22,15 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.components.AbstractProjectComponent; import com.intellij.openapi.project.Project; import com.intellij.openapi.startup.StartupManager; -import com.intellij.openapi.vfs.VfsUtil; +import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.openapi.vfs.newvfs.NewVirtualFile; +import com.intellij.openapi.vfs.VirtualFileManager; import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; import com.intellij.util.Function; +import com.intellij.util.PathUtil; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -153,16 +154,14 @@ public class BuiltInsReferenceResolver extends AbstractProjectComponent { @NotNull private Set getBuiltInSourceFiles(@NotNull URL url) { - VirtualFile vf = VfsUtil.findFileByURL(url); + String fromUrl = VfsUtilCore.convertFromUrl(url); + VirtualFile vf = VirtualFileManager.getInstance().findFileByUrl(fromUrl); assert vf != null : "Virtual file not found by URL: " + url; // Refreshing VFS: in case the plugin jar was updated, the caches may hold the old value - if (vf instanceof NewVirtualFile) { - NewVirtualFile newVirtualFile = (NewVirtualFile) vf; - newVirtualFile.markDirtyRecursively(); // This doesn't happen in a JARFS entry, unless we do it manually here - } vf.getChildren(); vf.refresh(false, true); + PathUtil.getLocalFile(vf).refresh(false, true); PsiDirectory psiDirectory = PsiManager.getInstance(myProject).findDirectory(vf); assert psiDirectory != null : "No PsiDirectory for " + vf; diff --git a/idea/src/org/jetbrains/jet/plugin/references/JetReference.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/references/JetReference.kt similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/references/JetReference.kt rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/references/JetReference.kt diff --git a/idea/src/org/jetbrains/jet/plugin/references/referenceUtil.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/references/referenceUtil.kt similarity index 90% rename from idea/src/org/jetbrains/jet/plugin/references/referenceUtil.kt rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/references/referenceUtil.kt index e32d659f97b..77d6a8b2442 100644 --- a/idea/src/org/jetbrains/jet/plugin/references/referenceUtil.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/references/referenceUtil.kt @@ -19,18 +19,13 @@ package org.jetbrains.jet.plugin.references import com.intellij.psi.PsiReference import com.intellij.psi.PsiElement import org.jetbrains.jet.asJava.unwrapped -import org.jetbrains.jet.plugin.project.AnalyzerFacadeWithCache -import org.jetbrains.jet.lang.resolve.BindingContext -import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor import com.intellij.psi.PsiMethod import org.jetbrains.jet.lang.psi.JetPropertyAccessor import org.jetbrains.jet.lang.psi.psiUtil.getParentByType import org.jetbrains.jet.lang.psi.JetProperty import java.util.HashSet import com.intellij.util.containers.ContainerUtil -import org.jetbrains.jet.lang.psi.JetNamedDeclaration import org.jetbrains.jet.lang.psi.JetExpression -import org.jetbrains.jet.lang.psi.JetElement import org.jetbrains.jet.plugin.intentions.OperatorToFunctionIntention import org.jetbrains.jet.lang.psi.JetQualifiedExpression import org.jetbrains.jet.lang.psi.JetCallExpression diff --git a/idea/src/org/jetbrains/jet/plugin/search/searchUtil.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/search/searchUtil.kt similarity index 98% rename from idea/src/org/jetbrains/jet/plugin/search/searchUtil.kt rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/search/searchUtil.kt index 8de19e0a826..89023d9cf0e 100644 --- a/idea/src/org/jetbrains/jet/plugin/search/searchUtil.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/search/searchUtil.kt @@ -30,4 +30,4 @@ fun Project.allScope(): GlobalSearchScope = GlobalSearchScope.allScope(this) fun Project.projectScope(): GlobalSearchScope = GlobalSearchScope.projectScope(this) -fun PsiFile.fileScope(): GlobalSearchScope = GlobalSearchScope.fileScope(this) \ No newline at end of file +fun PsiFile.fileScope(): GlobalSearchScope = GlobalSearchScope.fileScope(this) diff --git a/idea/src/org/jetbrains/jet/plugin/stubindex/JetAllPackagesIndex.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/JetAllPackagesIndex.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/stubindex/JetAllPackagesIndex.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/JetAllPackagesIndex.java diff --git a/idea/src/org/jetbrains/jet/plugin/stubindex/JetAnnotationsIndex.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/JetAnnotationsIndex.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/stubindex/JetAnnotationsIndex.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/JetAnnotationsIndex.java diff --git a/idea/src/org/jetbrains/jet/plugin/stubindex/JetClassByPackageIndex.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/JetClassByPackageIndex.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/stubindex/JetClassByPackageIndex.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/JetClassByPackageIndex.java diff --git a/idea/src/org/jetbrains/jet/plugin/stubindex/JetClassShortNameIndex.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/JetClassShortNameIndex.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/stubindex/JetClassShortNameIndex.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/JetClassShortNameIndex.java diff --git a/idea/src/org/jetbrains/jet/plugin/stubindex/JetFullClassNameIndex.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/JetFullClassNameIndex.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/stubindex/JetFullClassNameIndex.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/JetFullClassNameIndex.java diff --git a/idea/src/org/jetbrains/jet/plugin/stubindex/JetFunctionShortNameIndex.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/JetFunctionShortNameIndex.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/stubindex/JetFunctionShortNameIndex.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/JetFunctionShortNameIndex.java diff --git a/idea/src/org/jetbrains/jet/plugin/stubindex/JetPropertyShortNameIndex.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/JetPropertyShortNameIndex.java similarity index 99% rename from idea/src/org/jetbrains/jet/plugin/stubindex/JetPropertyShortNameIndex.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/JetPropertyShortNameIndex.java index 8473f508055..9f11d51f3db 100644 --- a/idea/src/org/jetbrains/jet/plugin/stubindex/JetPropertyShortNameIndex.java +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/JetPropertyShortNameIndex.java @@ -46,4 +46,4 @@ public class JetPropertyShortNameIndex extends StringStubIndexExtension get(String s, Project project, @NotNull GlobalSearchScope scope) { return super.get(s, project, JetSourceFilterScope.kotlinSourcesAndLibraries(scope, project)); } -} \ No newline at end of file +} diff --git a/idea/src/org/jetbrains/jet/plugin/stubindex/JetSourceFilterScope.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/JetSourceFilterScope.java similarity index 88% rename from idea/src/org/jetbrains/jet/plugin/stubindex/JetSourceFilterScope.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/JetSourceFilterScope.java index aeb5f9f78a8..41e3ce647b9 100644 --- a/idea/src/org/jetbrains/jet/plugin/stubindex/JetSourceFilterScope.java +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/JetSourceFilterScope.java @@ -16,7 +16,7 @@ package org.jetbrains.jet.plugin.stubindex; -import com.intellij.openapi.fileTypes.StdFileTypes; +import com.intellij.ide.highlighter.JavaClassFileType; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ProjectFileIndex; import com.intellij.openapi.roots.ProjectRootManager; @@ -25,7 +25,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; +import org.jetbrains.jet.plugin.configuration.JetModuleTypeManager; public class JetSourceFilterScope extends DelegatingGlobalSearchScope { @NotNull @@ -55,11 +55,11 @@ public class JetSourceFilterScope extends DelegatingGlobalSearchScope { return false; } - if (includeLibraries && StdFileTypes.CLASS == file.getFileType()) { + if (includeLibraries && JavaClassFileType.INSTANCE == file.getFileType()) { return index.isInLibraryClasses(file); } - if (JetPluginUtil.isKtFileInGradleProjectInWrongFolder(file, project)) { + if (JetModuleTypeManager.getInstance().isKtFileInGradleProjectInWrongFolder(file, getProject())) { return false; } diff --git a/idea/src/org/jetbrains/jet/plugin/stubindex/JetSuperClassIndex.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/JetSuperClassIndex.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/stubindex/JetSuperClassIndex.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/JetSuperClassIndex.java diff --git a/idea/src/org/jetbrains/jet/plugin/stubindex/JetTopLevelExtensionFunctionShortNameIndex.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/JetTopLevelExtensionFunctionShortNameIndex.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/stubindex/JetTopLevelExtensionFunctionShortNameIndex.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/JetTopLevelExtensionFunctionShortNameIndex.java diff --git a/idea/src/org/jetbrains/jet/plugin/stubindex/JetTopLevelFunctionsFqnNameIndex.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/JetTopLevelFunctionsFqnNameIndex.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/stubindex/JetTopLevelFunctionsFqnNameIndex.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/JetTopLevelFunctionsFqnNameIndex.java diff --git a/idea/src/org/jetbrains/jet/plugin/stubindex/JetTopLevelNonExtensionFunctionShortNameIndex.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/JetTopLevelNonExtensionFunctionShortNameIndex.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/stubindex/JetTopLevelNonExtensionFunctionShortNameIndex.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/JetTopLevelNonExtensionFunctionShortNameIndex.java diff --git a/idea/src/org/jetbrains/jet/plugin/stubindex/JetTopLevelObjectShortNameIndex.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/JetTopLevelObjectShortNameIndex.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/stubindex/JetTopLevelObjectShortNameIndex.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/JetTopLevelObjectShortNameIndex.java diff --git a/idea/src/org/jetbrains/jet/plugin/stubindex/JetTopLevelPropertiesFqnNameIndex.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/JetTopLevelPropertiesFqnNameIndex.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/stubindex/JetTopLevelPropertiesFqnNameIndex.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/JetTopLevelPropertiesFqnNameIndex.java diff --git a/idea/src/org/jetbrains/jet/plugin/stubindex/KotlinIndexUtil.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/KotlinIndexUtil.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/stubindex/KotlinIndexUtil.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/KotlinIndexUtil.java diff --git a/idea/src/org/jetbrains/jet/plugin/stubindex/PackageIndexUtil.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/PackageIndexUtil.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/stubindex/PackageIndexUtil.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/PackageIndexUtil.java diff --git a/idea/src/org/jetbrains/jet/plugin/stubindex/StubIndexServiceImpl.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/StubIndexServiceImpl.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/stubindex/StubIndexServiceImpl.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/StubIndexServiceImpl.java diff --git a/idea/src/org/jetbrains/jet/plugin/stubindex/resolve/CombinedPackageMemberDeclarationProvider.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/resolve/CombinedPackageMemberDeclarationProvider.kt similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/stubindex/resolve/CombinedPackageMemberDeclarationProvider.kt rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/resolve/CombinedPackageMemberDeclarationProvider.kt diff --git a/idea/src/org/jetbrains/jet/plugin/stubindex/resolve/PluginDeclarationProviderFactory.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/resolve/PluginDeclarationProviderFactory.kt similarity index 97% rename from idea/src/org/jetbrains/jet/plugin/stubindex/resolve/PluginDeclarationProviderFactory.kt rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/resolve/PluginDeclarationProviderFactory.kt index f4485f9bd6b..0215a6918be 100644 --- a/idea/src/org/jetbrains/jet/plugin/stubindex/resolve/PluginDeclarationProviderFactory.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/resolve/PluginDeclarationProviderFactory.kt @@ -18,14 +18,12 @@ package org.jetbrains.jet.plugin.stubindex.resolve import com.intellij.openapi.project.Project import com.intellij.psi.search.GlobalSearchScope -import org.jetbrains.annotations.Nullable import org.jetbrains.jet.lang.psi.JetFile import org.jetbrains.jet.lang.resolve.lazy.data.JetClassLikeInfo import org.jetbrains.jet.lang.resolve.lazy.declarations.* import org.jetbrains.jet.lang.resolve.name.FqName import org.jetbrains.jet.plugin.stubindex.JetAllPackagesIndex import org.jetbrains.jet.storage.StorageManager -import java.util.Arrays public class PluginDeclarationProviderFactory( private val project: Project, diff --git a/idea/src/org/jetbrains/jet/plugin/stubindex/resolve/PluginDeclarationProviderFactoryService.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/resolve/PluginDeclarationProviderFactoryService.kt similarity index 99% rename from idea/src/org/jetbrains/jet/plugin/stubindex/resolve/PluginDeclarationProviderFactoryService.kt rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/resolve/PluginDeclarationProviderFactoryService.kt index 4d01e26c632..346ce4d520f 100644 --- a/idea/src/org/jetbrains/jet/plugin/stubindex/resolve/PluginDeclarationProviderFactoryService.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/resolve/PluginDeclarationProviderFactoryService.kt @@ -35,4 +35,4 @@ public class PluginDeclarationProviderFactoryService : DeclarationProviderFactor return PluginDeclarationProviderFactory(project, JetSourceFilterScope.kotlinSources(filesScope, project), storageManager, syntheticFiles) } -} \ No newline at end of file +} diff --git a/idea/src/org/jetbrains/jet/plugin/stubindex/resolve/StubBasedPackageMemberDeclarationProvider.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/resolve/StubBasedPackageMemberDeclarationProvider.kt similarity index 99% rename from idea/src/org/jetbrains/jet/plugin/stubindex/resolve/StubBasedPackageMemberDeclarationProvider.kt rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/resolve/StubBasedPackageMemberDeclarationProvider.kt index 29596c3c4e0..a94fbfbd120 100644 --- a/idea/src/org/jetbrains/jet/plugin/stubindex/resolve/StubBasedPackageMemberDeclarationProvider.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/resolve/StubBasedPackageMemberDeclarationProvider.kt @@ -75,4 +75,4 @@ private val TOP_LEVEL_DECLARATION_INDICES: List candidateClassNames = ImmutableList.of( + kotlinPackageClassFqName, + "kotlin.Unit", + // For older versions + "kotlin.namespace", + "jet.Unit" + ); + + for (String className : candidateClassNames) { + PsiClass psiClass = JavaPsiFacade.getInstance(scope.getProject()).findClass(className, scope); + if (psiClass != null) { + return psiClass; + } + } + return null; + } +} diff --git a/idea/src/org/jetbrains/jet/plugin/vfilefinder/IDEVirtualFileFinder.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/vfilefinder/IDEVirtualFileFinder.java similarity index 100% rename from idea/src/org/jetbrains/jet/plugin/vfilefinder/IDEVirtualFileFinder.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/vfilefinder/IDEVirtualFileFinder.java diff --git a/idea/src/org/jetbrains/jet/plugin/vfilefinder/KotlinClassFileIndex.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/vfilefinder/KotlinClassFileIndex.java similarity index 96% rename from idea/src/org/jetbrains/jet/plugin/vfilefinder/KotlinClassFileIndex.java rename to idea/idea-analysis/src/org/jetbrains/jet/plugin/vfilefinder/KotlinClassFileIndex.java index 6cc42ad89df..7d3bc35cb44 100644 --- a/idea/src/org/jetbrains/jet/plugin/vfilefinder/KotlinClassFileIndex.java +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/vfilefinder/KotlinClassFileIndex.java @@ -16,8 +16,8 @@ package org.jetbrains.jet.plugin.vfilefinder; +import com.intellij.ide.highlighter.JavaClassFileType; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.fileTypes.StdFileTypes; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.indexing.*; import com.intellij.util.io.KeyDescriptor; @@ -67,7 +67,7 @@ public final class KotlinClassFileIndex extends ScalarIndexExtension { private static final FileBasedIndex.InputFilter INPUT_FILTER = new FileBasedIndex.InputFilter() { @Override public boolean acceptInput(VirtualFile file) { - return file.getFileType() == StdFileTypes.CLASS; + return file.getFileType() == JavaClassFileType.INSTANCE; } }; public static final DataIndexer INDEXER = new DataIndexer() { diff --git a/idea/idea.iml b/idea/idea.iml index 03e786c0560..eda998a2c96 100644 --- a/idea/idea.iml +++ b/idea/idea.iml @@ -41,6 +41,7 @@ + diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index 33e664b9fa6..89276446ee4 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -124,6 +124,9 @@ + + @@ -271,7 +274,7 @@ - + diff --git a/idea/src/org/jetbrains/jet/plugin/JetModuleTypeManagerImpl.java b/idea/src/org/jetbrains/jet/plugin/JetModuleTypeManagerImpl.java new file mode 100644 index 00000000000..e558adf3438 --- /dev/null +++ b/idea/src/org/jetbrains/jet/plugin/JetModuleTypeManagerImpl.java @@ -0,0 +1,72 @@ +/* + * Copyright 2010-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.plugin; + +import com.intellij.facet.Facet; +import com.intellij.facet.FacetManager; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.module.ModuleUtilCore; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.roots.ProjectRootManager; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.plugin.configuration.JetModuleTypeManager; + +public class JetModuleTypeManagerImpl extends JetModuleTypeManager { + @Override + public 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()); + } + + @Override + public boolean isKtFileInGradleProjectInWrongFolder(@NotNull VirtualFile virtualFile, @NotNull Project project ) { + Module module = ModuleUtilCore.findModuleForFile(virtualFile, project); + if (module == null) return false; + + if (!isAndroidGradleModule(module) && !isGradleModule(module)) { + return false; + } + + VirtualFile sourceRootForFile = ProjectRootManager.getInstance(project).getFileIndex().getSourceRootForFile(virtualFile); + if (sourceRootForFile != null) { + return !sourceRootForFile.getName().equals("kotlin"); + } + return false; + } + + @Override + public 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; + } +} diff --git a/idea/src/org/jetbrains/jet/plugin/JetPluginUtil.java b/idea/src/org/jetbrains/jet/plugin/JetPluginUtil.java index 20367e7c616..d4682ca39b0 100644 --- a/idea/src/org/jetbrains/jet/plugin/JetPluginUtil.java +++ b/idea/src/org/jetbrains/jet/plugin/JetPluginUtil.java @@ -16,39 +16,17 @@ package org.jetbrains.jet.plugin; -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.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; import org.jetbrains.annotations.NotNull; -import org.jetbrains.jet.plugin.configuration.ModuleTypeCacheManager; +import org.jetbrains.jet.plugin.configuration.JetModuleTypeManager; public class JetPluginUtil { - public static boolean isInSource(@NotNull PsiElement element) { - return isInSource(element, true); - } - - public static boolean isInSource(@NotNull PsiElement element, boolean includeLibrarySources) { - PsiFile containingFile = element.getContainingFile(); - if (containingFile == null) { - return false; - } - VirtualFile virtualFile = containingFile.getVirtualFile(); - if (virtualFile == null) { - return false; - } - ProjectFileIndex index = ProjectFileIndex.SERVICE.getInstance(element.getProject()); - return includeLibrarySources ? index.isInSource(virtualFile) : index.isInSourceContent(virtualFile); - } @NotNull public static String getPluginVersion() { @@ -58,45 +36,19 @@ public class JetPluginUtil { } 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()); + return JetModuleTypeManager.getInstance().isKtFileInGradleProjectInWrongFolder(element); } public static boolean isKtFileInGradleProjectInWrongFolder(@NotNull VirtualFile virtualFile, @NotNull Project project) { - Module module = ModuleUtilCore.findModuleForFile(virtualFile, project); - if (module == null) return false; - - if (!isAndroidGradleModule(module) && !isGradleModule(module)) { - return false; - } - - VirtualFile sourceRootForFile = ProjectRootManager.getInstance(project).getFileIndex().getSourceRootForFile(virtualFile); - if (sourceRootForFile != null) { - return !sourceRootForFile.getName().equals("kotlin"); - } - return false; + return JetModuleTypeManager.getInstance().isKtFileInGradleProjectInWrongFolder(virtualFile, project); } 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; + return JetModuleTypeManager.getInstance().isAndroidGradleModule(module); } public static boolean isGradleModule(@NotNull Module module) { - return ModuleTypeCacheManager.OBJECT$.geInstance(module.getProject()).isGradleModule(module); + return JetModuleTypeManager.getInstance().isGradleModule(module); } public static boolean isMavenModule(@NotNull Module module) { diff --git a/idea/src/org/jetbrains/jet/plugin/PluginBundledRegistrar.java b/idea/src/org/jetbrains/jet/plugin/PluginBundledRegistrar.java index 8fa0cf6c161..806840ff0d5 100644 --- a/idea/src/org/jetbrains/jet/plugin/PluginBundledRegistrar.java +++ b/idea/src/org/jetbrains/jet/plugin/PluginBundledRegistrar.java @@ -19,6 +19,7 @@ package org.jetbrains.jet.plugin; import com.intellij.openapi.application.PathMacros; import com.intellij.openapi.components.ApplicationComponent; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.plugin.quickfix.QuickFixRegistrar; import org.jetbrains.jet.utils.PathUtil; public class PluginBundledRegistrar implements ApplicationComponent { @@ -33,6 +34,7 @@ public class PluginBundledRegistrar implements ApplicationComponent { @Override public void initComponent() { registerPathVariable(); + QuickFixRegistrar.registerQuickFixes(); } private static void registerPathVariable() { diff --git a/idea/src/org/jetbrains/jet/plugin/actions/internal/KotlinInternalModeToggleAction.kt b/idea/src/org/jetbrains/jet/plugin/actions/internal/KotlinInternalModeToggleAction.kt index 521a3dcd880..6ed23261e39 100644 --- a/idea/src/org/jetbrains/jet/plugin/actions/internal/KotlinInternalModeToggleAction.kt +++ b/idea/src/org/jetbrains/jet/plugin/actions/internal/KotlinInternalModeToggleAction.kt @@ -18,29 +18,15 @@ package org.jetbrains.jet.plugin.actions.internal import com.intellij.openapi.actionSystem.ToggleAction import com.intellij.openapi.actionSystem.AnActionEvent -import com.intellij.ide.util.PropertiesComponent import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer public class KotlinInternalModeToggleAction: ToggleAction("Kotlin Internal Mode", "Show debug highlighting", null) { - public class object { - val INTERNAL_MODE_PROPERTY = "kotlin.internal.mode.enabled" - - public var enabled: Boolean - get() = PropertiesComponent.getInstance()!!.getBoolean( - INTERNAL_MODE_PROPERTY, - System.getProperty(INTERNAL_MODE_PROPERTY) == "true" - ) - set(value) { - PropertiesComponent.getInstance()!!.setValue(INTERNAL_MODE_PROPERTY, value.toString()) - } - } - override fun isSelected(e: AnActionEvent?): Boolean { - return enabled + return KotlinInternalMode.enabled } override fun setSelected(e: AnActionEvent?, state: Boolean) { - enabled = state + KotlinInternalMode.enabled = state DaemonCodeAnalyzer.getInstance(e!!.getProject())!!.settingsChanged() } diff --git a/idea/src/org/jetbrains/jet/plugin/configuration/ConfigureKotlinInProjectUtils.java b/idea/src/org/jetbrains/jet/plugin/configuration/ConfigureKotlinInProjectUtils.java index 4bcdc73f774..4d2d173554f 100644 --- a/idea/src/org/jetbrains/jet/plugin/configuration/ConfigureKotlinInProjectUtils.java +++ b/idea/src/org/jetbrains/jet/plugin/configuration/ConfigureKotlinInProjectUtils.java @@ -54,14 +54,6 @@ public class ConfigureKotlinInProjectUtils { return false; } - public static boolean hasKotlinFilesInSources(@NotNull Module module) { - return FileTypeIndex.containsFileOfType(JetFileType.INSTANCE, module.getModuleScope(false)); - } - - public static boolean hasKotlinFilesOnlyInTests(@NotNull Module module) { - return !hasKotlinFilesInSources(module) && FileTypeIndex.containsFileOfType(JetFileType.INSTANCE, module.getModuleScope(true)); - } - public static Collection getModulesWithKotlinFiles(@NotNull Project project) { if (project.isDisposed()) { return Collections.emptyList(); diff --git a/idea/src/org/jetbrains/jet/plugin/configuration/KotlinJavaModuleConfigurator.java b/idea/src/org/jetbrains/jet/plugin/configuration/KotlinJavaModuleConfigurator.java index 259db927abc..2525d82781d 100644 --- a/idea/src/org/jetbrains/jet/plugin/configuration/KotlinJavaModuleConfigurator.java +++ b/idea/src/org/jetbrains/jet/plugin/configuration/KotlinJavaModuleConfigurator.java @@ -29,7 +29,7 @@ import org.jetbrains.jet.plugin.framework.JavaRuntimeLibraryDescription; import org.jetbrains.jet.plugin.framework.JavaRuntimePresentationProvider; import org.jetbrains.jet.plugin.framework.ui.CreateJavaLibraryDialogWithModules; import org.jetbrains.jet.plugin.project.ProjectStructureUtil; -import org.jetbrains.jet.plugin.versions.KotlinRuntimeLibraryUtil; +import org.jetbrains.jet.plugin.versions.KotlinRuntimeLibraryCoreUtil; import org.jetbrains.jet.utils.PathUtil; import java.io.File; @@ -175,7 +175,7 @@ public class KotlinJavaModuleConfigurator extends KotlinWithLibraryConfigurator } LibraryScope scope = new LibraryScope(project, library); - return KotlinRuntimeLibraryUtil.getKotlinRuntimeMarkerClass(scope) != null; + return KotlinRuntimeLibraryCoreUtil.getKotlinRuntimeMarkerClass(scope) != null; } KotlinJavaModuleConfigurator() { diff --git a/idea/src/org/jetbrains/jet/plugin/configuration/KotlinWithLibraryConfigurator.java b/idea/src/org/jetbrains/jet/plugin/configuration/KotlinWithLibraryConfigurator.java index aa54ce8a1fe..5ddb77c9aeb 100644 --- a/idea/src/org/jetbrains/jet/plugin/configuration/KotlinWithLibraryConfigurator.java +++ b/idea/src/org/jetbrains/jet/plugin/configuration/KotlinWithLibraryConfigurator.java @@ -35,6 +35,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.plugin.JetPluginUtil; import org.jetbrains.jet.plugin.framework.ui.FileUIUtils; +import org.jetbrains.jet.plugin.project.ProjectStructureUtil; import java.io.File; @@ -286,7 +287,7 @@ public abstract class KotlinWithLibraryConfigurator implements KotlinProjectConf @NotNull private static DependencyScope getDependencyScope(@NotNull Module module) { - if (ConfigureKotlinInProjectUtils.hasKotlinFilesOnlyInTests(module)) { + if (ProjectStructureUtil.hasKotlinFilesOnlyInTests(module)) { return DependencyScope.TEST; } return DependencyScope.COMPILE; diff --git a/idea/src/org/jetbrains/jet/plugin/framework/JSLibraryStdPresentationProvider.java b/idea/src/org/jetbrains/jet/plugin/framework/JSLibraryStdPresentationProvider.java index 73da839e882..1c30642f5ff 100644 --- a/idea/src/org/jetbrains/jet/plugin/framework/JSLibraryStdPresentationProvider.java +++ b/idea/src/org/jetbrains/jet/plugin/framework/JSLibraryStdPresentationProvider.java @@ -18,11 +18,8 @@ package org.jetbrains.jet.plugin.framework; import com.intellij.framework.library.LibraryVersionProperties; import com.intellij.openapi.roots.OrderRootType; -import com.intellij.openapi.roots.libraries.JarVersionDetectionUtil; import com.intellij.openapi.roots.libraries.Library; import com.intellij.openapi.roots.libraries.LibraryPresentationProvider; -import com.intellij.openapi.vfs.JarFile; -import com.intellij.openapi.vfs.JarFileSystem; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -30,7 +27,6 @@ import org.jetbrains.jet.plugin.JetIcons; import org.jetbrains.jet.utils.PathUtil; import javax.swing.*; -import java.io.IOException; import java.util.List; public class JSLibraryStdPresentationProvider extends LibraryPresentationProvider { @@ -51,27 +47,8 @@ public class JSLibraryStdPresentationProvider extends LibraryPresentationProvide @Nullable @Override public LibraryVersionProperties detect(@NotNull List classesRoots) { - if (JavaRuntimePresentationProvider.getInstance().detect(classesRoots) != null) { - // Prevent clashing with java runtime, in case when library collects all roots. - return null; - } - - for (VirtualFile root : classesRoots) { - if (root.getName().equals(PathUtil.JS_LIB_JAR_NAME)) { - assert JsHeaderLibraryPresentationProvider.getInstance().detect(classesRoots) != null : "StdLib should also be detected as headers library"; - - try { - JarFile zipFile = JarFileSystem.getInstance().getJarFile(root); - String version = JarVersionDetectionUtil.detectJarVersion(zipFile); - return new LibraryVersionProperties(version); - } - catch (IOException e) { - return null; - } - } - } - - return null; + String version = JsLibraryStdDetectionUtil.getJsLibraryStdVersion(classesRoots); + return version == null ? null : new LibraryVersionProperties(version); } /** diff --git a/idea/src/org/jetbrains/jet/plugin/framework/JavaRuntimePresentationProvider.java b/idea/src/org/jetbrains/jet/plugin/framework/JavaRuntimePresentationProvider.java index 4bfe29dea4f..856003f00f8 100644 --- a/idea/src/org/jetbrains/jet/plugin/framework/JavaRuntimePresentationProvider.java +++ b/idea/src/org/jetbrains/jet/plugin/framework/JavaRuntimePresentationProvider.java @@ -18,11 +18,8 @@ package org.jetbrains.jet.plugin.framework; import com.intellij.framework.library.LibraryVersionProperties; import com.intellij.openapi.roots.OrderRootType; -import com.intellij.openapi.roots.libraries.JarVersionDetectionUtil; import com.intellij.openapi.roots.libraries.Library; import com.intellij.openapi.roots.libraries.LibraryPresentationProvider; -import com.intellij.openapi.vfs.JarFile; -import com.intellij.openapi.vfs.JarFileSystem; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -30,7 +27,6 @@ import org.jetbrains.jet.plugin.JetIcons; import org.jetbrains.jet.utils.PathUtil; import javax.swing.*; -import java.io.IOException; import java.util.Arrays; import java.util.List; @@ -52,44 +48,18 @@ public class JavaRuntimePresentationProvider extends LibraryPresentationProvider @Nullable @Override public LibraryVersionProperties detect(@NotNull List classesRoots) { - VirtualFile stdJar = getRuntimeJar(classesRoots); - if (stdJar != null) { - try { - JarFile zipFile = JarFileSystem.getInstance().getJarFile(stdJar); - String version = JarVersionDetectionUtil.detectJarVersion(zipFile); - return new LibraryVersionProperties(version); - } - catch (IOException e) { - return null; - } - } - - return null; - } - - @Nullable - public static VirtualFile getRuntimeJar(@NotNull List classesRoots) { - return getJarFile(classesRoots, PathUtil.KOTLIN_JAVA_RUNTIME_JAR); + String version = JavaRuntimeDetectionUtil.getJavaRuntimeVersion(classesRoots); + return version == null ? null : new LibraryVersionProperties(version); } @Nullable public static VirtualFile getRuntimeSrcJar(@NotNull List classesRoots) { - return getJarFile(classesRoots, PathUtil.KOTLIN_JAVA_RUNTIME_SRC_JAR); - } - - private static VirtualFile getJarFile(@NotNull List classesRoots, @NotNull String jarName) { - for (VirtualFile root : classesRoots) { - if (root.getName().equals(jarName)) { - return root; - } - } - - return null; + return JavaRuntimeDetectionUtil.getJarFile(classesRoots, PathUtil.KOTLIN_JAVA_RUNTIME_SRC_JAR); } @Nullable public static VirtualFile getRuntimeJar(@NotNull Library library) { - return getRuntimeJar(Arrays.asList(library.getFiles(OrderRootType.CLASSES))); + return JavaRuntimeDetectionUtil.getRuntimeJar(Arrays.asList(library.getFiles(OrderRootType.CLASSES))); } @Nullable diff --git a/idea/src/org/jetbrains/jet/plugin/framework/JsHeaderLibraryPresentationProvider.java b/idea/src/org/jetbrains/jet/plugin/framework/JsHeaderLibraryPresentationProvider.java index b24e24cd4cf..fcaa0de9dcc 100644 --- a/idea/src/org/jetbrains/jet/plugin/framework/JsHeaderLibraryPresentationProvider.java +++ b/idea/src/org/jetbrains/jet/plugin/framework/JsHeaderLibraryPresentationProvider.java @@ -19,12 +19,9 @@ package org.jetbrains.jet.plugin.framework; import com.intellij.framework.library.LibraryVersionProperties; import com.intellij.openapi.roots.libraries.LibraryKind; import com.intellij.openapi.roots.libraries.LibraryPresentationProvider; -import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.util.CommonProcessors; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.jet.plugin.JetFileType; import org.jetbrains.jet.plugin.JetIcons; import javax.swing.*; @@ -50,27 +47,6 @@ public class JsHeaderLibraryPresentationProvider extends LibraryPresentationProv @Nullable @Override public LibraryVersionProperties detect(@NotNull List classesRoots) { - if (JavaRuntimePresentationProvider.getInstance().detect(classesRoots) != null) { - // Prevent clashing with java runtime - return null; - } - - for (VirtualFile file : classesRoots) { - CommonProcessors.FindFirstProcessor findKTProcessor = new CommonProcessors.FindFirstProcessor() { - @Override - protected boolean accept(VirtualFile file) { - String extension = file.getExtension(); - return extension != null && extension.equals(JetFileType.INSTANCE.getDefaultExtension()); - } - }; - - VfsUtil.processFilesRecursively(file, findKTProcessor); - - if (findKTProcessor.isFound()) { - return new LibraryVersionProperties(null); - } - } - - return null; + return JsHeaderLibraryDetectionUtil.isJsHeaderLibraryDetected(classesRoots) ? new LibraryVersionProperties(null) : null; } } diff --git a/idea/src/org/jetbrains/jet/plugin/hierarchy/HierarchyUtils.java b/idea/src/org/jetbrains/jet/plugin/hierarchy/HierarchyUtils.java index 20b0f1e706e..c75fa3c3ebb 100644 --- a/idea/src/org/jetbrains/jet/plugin/hierarchy/HierarchyUtils.java +++ b/idea/src/org/jetbrains/jet/plugin/hierarchy/HierarchyUtils.java @@ -25,9 +25,13 @@ import com.intellij.psi.*; import com.intellij.util.ArrayUtil; import kotlin.Function1; import org.jetbrains.annotations.Nullable; -import org.jetbrains.jet.lang.psi.*; +import org.jetbrains.jet.lang.psi.JetClassOrObject; +import org.jetbrains.jet.lang.psi.JetFile; +import org.jetbrains.jet.lang.psi.JetNamedFunction; +import org.jetbrains.jet.lang.psi.JetProperty; import org.jetbrains.jet.lang.psi.psiUtil.PsiUtilPackage; import org.jetbrains.jet.plugin.JetPluginUtil; +import org.jetbrains.jet.plugin.ProjectRootsUtil; public class HierarchyUtils { public static final Function1 IS_CALL_HIERARCHY_ELEMENT = new Function1() { @@ -57,7 +61,7 @@ public class HierarchyUtils { PsiFile file = PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument()); if (file == null) return null; - if (!JetPluginUtil.isInSource(file)) return null; + if (!ProjectRootsUtil.isInSource(file)) return null; if (JetPluginUtil.isKtFileInGradleProjectInWrongFolder(file)) return null; return TargetElementUtilBase.findTargetElement(editor, TargetElementUtilBase.getInstance().getAllAccepted()); diff --git a/idea/src/org/jetbrains/jet/plugin/hierarchy/KotlinTypeHierarchyProvider.java b/idea/src/org/jetbrains/jet/plugin/hierarchy/KotlinTypeHierarchyProvider.java index fb7b392cc77..c119d41f33a 100644 --- a/idea/src/org/jetbrains/jet/plugin/hierarchy/KotlinTypeHierarchyProvider.java +++ b/idea/src/org/jetbrains/jet/plugin/hierarchy/KotlinTypeHierarchyProvider.java @@ -36,6 +36,7 @@ import org.jetbrains.jet.lang.psi.JetNamedFunction; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.plugin.JetPluginUtil; +import org.jetbrains.jet.plugin.ProjectRootsUtil; import org.jetbrains.jet.plugin.caches.resolve.ResolvePackage; import org.jetbrains.jet.plugin.libraries.JetSourceNavigationHelper; import org.jetbrains.jet.plugin.stubindex.JetClassShortNameIndex; @@ -54,7 +55,7 @@ public class KotlinTypeHierarchyProvider extends JavaTypeHierarchyProvider { PsiFile file = PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument()); if (file == null) return null; - if (!JetPluginUtil.isInSource(file)) return null; + if (!ProjectRootsUtil.isInSource(file)) return null; if (JetPluginUtil.isKtFileInGradleProjectInWrongFolder(file)) return null; PsiElement target = TargetElementUtilBase.findTargetElement(editor, TargetElementUtilBase.getInstance().getAllAccepted()); diff --git a/idea/src/org/jetbrains/jet/plugin/hierarchy/calls/KotlinCallHierarchyProvider.java b/idea/src/org/jetbrains/jet/plugin/hierarchy/calls/KotlinCallHierarchyProvider.java index 21b655c9f16..5c03c055a10 100644 --- a/idea/src/org/jetbrains/jet/plugin/hierarchy/calls/KotlinCallHierarchyProvider.java +++ b/idea/src/org/jetbrains/jet/plugin/hierarchy/calls/KotlinCallHierarchyProvider.java @@ -29,6 +29,7 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.plugin.JetPluginUtil; +import org.jetbrains.jet.plugin.ProjectRootsUtil; import org.jetbrains.jet.plugin.hierarchy.HierarchyUtils; public class KotlinCallHierarchyProvider implements HierarchyProvider { @@ -46,7 +47,7 @@ public class KotlinCallHierarchyProvider implements HierarchyProvider { PsiFile file = PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument()); if (file == null) return null; - if (!JetPluginUtil.isInSource(file)) return null; + if (!ProjectRootsUtil.isInSource(file)) return null; if (JetPluginUtil.isKtFileInGradleProjectInWrongFolder(file)) return null; return TargetElementUtilBase.findTargetElement(editor, TargetElementUtilBase.getInstance().getAllAccepted()); diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/DeclarationHintSupport.java b/idea/src/org/jetbrains/jet/plugin/highlighter/DeclarationHintSupport.java index 86ffdf551b8..6694d80dac8 100644 --- a/idea/src/org/jetbrains/jet/plugin/highlighter/DeclarationHintSupport.java +++ b/idea/src/org/jetbrains/jet/plugin/highlighter/DeclarationHintSupport.java @@ -43,8 +43,9 @@ import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetNamedDeclaration; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.plugin.JetLanguage; -import org.jetbrains.jet.plugin.JetPluginUtil; +import org.jetbrains.jet.plugin.ProjectRootsUtil; import org.jetbrains.jet.plugin.caches.resolve.ResolvePackage; +import org.jetbrains.jet.plugin.configuration.JetModuleTypeManager; import org.jetbrains.jet.plugin.util.LongRunningReadTask; import org.jetbrains.jet.renderer.DescriptorRenderer; @@ -89,8 +90,8 @@ 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.isInSource(psiFile) || - JetPluginUtil.isKtFileInGradleProjectInWrongFolder(psiFile)) { + !ProjectRootsUtil.isInSource(psiFile) || + JetModuleTypeManager.getInstance().isKtFileInGradleProjectInWrongFolder(psiFile)) { return; } diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/JetLineMarkerProvider.java b/idea/src/org/jetbrains/jet/plugin/highlighter/JetLineMarkerProvider.java index eaf24a85c1b..3378575d648 100644 --- a/idea/src/org/jetbrains/jet/plugin/highlighter/JetLineMarkerProvider.java +++ b/idea/src/org/jetbrains/jet/plugin/highlighter/JetLineMarkerProvider.java @@ -61,9 +61,10 @@ import org.jetbrains.jet.lang.resolve.DescriptorToSourceUtils; import org.jetbrains.jet.lang.resolve.OverrideResolver; import org.jetbrains.jet.lexer.JetTokens; import org.jetbrains.jet.plugin.JetBundle; -import org.jetbrains.jet.plugin.JetPluginUtil; +import org.jetbrains.jet.plugin.ProjectRootsUtil; import org.jetbrains.jet.plugin.caches.resolve.ResolvePackage; import org.jetbrains.jet.plugin.codeInsight.JetFunctionPsiElementCellRenderer; +import org.jetbrains.jet.plugin.configuration.JetModuleTypeManager; import org.jetbrains.jet.plugin.project.AnalyzerFacadeWithCache; import org.jetbrains.jet.plugin.search.ideaExtensions.KotlinDefinitionsSearcher; import org.jetbrains.jet.renderer.DescriptorRenderer; @@ -369,8 +370,8 @@ public class JetLineMarkerProvider implements LineMarkerProvider { public void collectSlowLineMarkers(@NotNull List elements, @NotNull Collection result) { if (elements.isEmpty() || DumbService.getInstance(elements.get(0).getProject()).isDumb() || - !JetPluginUtil.isInSource(elements.get(0)) || - JetPluginUtil.isKtFileInGradleProjectInWrongFolder(elements.get(0))) { + !ProjectRootsUtil.isInSource(elements.get(0)) || + JetModuleTypeManager.getInstance().isKtFileInGradleProjectInWrongFolder(elements.get(0))) { return; } diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/JetPsiCheckerAndHighlightingUpdater.java b/idea/src/org/jetbrains/jet/plugin/highlighter/JetPsiCheckerAndHighlightingUpdater.java new file mode 100644 index 00000000000..703445fe154 --- /dev/null +++ b/idea/src/org/jetbrains/jet/plugin/highlighter/JetPsiCheckerAndHighlightingUpdater.java @@ -0,0 +1,40 @@ +/* + * Copyright 2010-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.plugin.highlighter; + +import com.intellij.lang.annotation.AnnotationHolder; +import com.intellij.openapi.progress.ProcessCanceledException; +import com.intellij.psi.PsiElement; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lang.psi.JetFile; + +public class JetPsiCheckerAndHighlightingUpdater extends JetPsiChecker { + @Override + public void annotate(@NotNull PsiElement element, @NotNull AnnotationHolder holder) { + try { + super.annotate(element, holder); + if (element instanceof JetFile) { + //noinspection StaticMethodReferencedViaSubclass + HighlighterPackage.updateHighlightingResult((JetFile) element, false); + } + } + catch (ProcessCanceledException e) { + HighlighterPackage.updateHighlightingResult((JetFile)element.getContainingFile(), false); + throw e; + } + } +} diff --git a/idea/src/org/jetbrains/jet/plugin/intentions/ReplaceWithOperatorAssignIntention.kt b/idea/src/org/jetbrains/jet/plugin/intentions/ReplaceWithOperatorAssignIntention.kt index 2bb7f0a62b5..f10d9a38dc9 100644 --- a/idea/src/org/jetbrains/jet/plugin/intentions/ReplaceWithOperatorAssignIntention.kt +++ b/idea/src/org/jetbrains/jet/plugin/intentions/ReplaceWithOperatorAssignIntention.kt @@ -28,15 +28,6 @@ import org.jetbrains.jet.lang.descriptors.ClassDescriptor import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns public class ReplaceWithOperatorAssignIntention : JetSelfTargetingIntention("replace.with.operator.assign.intention", javaClass()) { - /* - * setText() is a protected function, which is inaccessible from this class. - * This override is a workaround for this issue. - * - * (Related to Issue KT-4617) - */ - override fun setText(text: String) { - super.setText(text) - } override fun isApplicableTo(element: JetBinaryExpression): Boolean { fun isWellFormedAssignment(element : JetBinaryExpression): Boolean { diff --git a/idea/src/org/jetbrains/jet/plugin/internal/KotlinBytecodeToolWindow.java b/idea/src/org/jetbrains/jet/plugin/internal/KotlinBytecodeToolWindow.java index e7aa9f73eb7..9e4b957ac08 100644 --- a/idea/src/org/jetbrains/jet/plugin/internal/KotlinBytecodeToolWindow.java +++ b/idea/src/org/jetbrains/jet/plugin/internal/KotlinBytecodeToolWindow.java @@ -45,7 +45,7 @@ import org.jetbrains.jet.codegen.state.GenerationState; import org.jetbrains.jet.codegen.state.Progress; import org.jetbrains.jet.lang.diagnostics.DiagnosticHolder; import org.jetbrains.jet.lang.psi.JetFile; -import org.jetbrains.jet.plugin.JetPluginUtil; +import org.jetbrains.jet.plugin.ProjectRootsUtil; import org.jetbrains.jet.plugin.caches.resolve.ResolvePackage; import org.jetbrains.jet.plugin.util.InfinitePeriodicalTask; import org.jetbrains.jet.plugin.util.LongRunningReadTask; @@ -79,7 +79,7 @@ public class KotlinBytecodeToolWindow extends JPanel implements Disposable { } JetFile file = location.getJetFile(); - if (file == null || !JetPluginUtil.isInSource(file, false)) { + if (file == null || !ProjectRootsUtil.isInSource(file, false)) { return null; } diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixRegistrar.java b/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixRegistrar.java new file mode 100644 index 00000000000..1de3f9757d4 --- /dev/null +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixRegistrar.java @@ -0,0 +1,243 @@ +/* + * Copyright 2010-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.plugin.quickfix; + +import org.jetbrains.jet.lang.psi.JetClass; +import org.jetbrains.jet.plugin.codeInsight.ImplementMethodsHandler; + +import static org.jetbrains.jet.lang.diagnostics.Errors.*; +import static org.jetbrains.jet.lexer.JetTokens.*; + +public class QuickFixRegistrar { + public static void registerQuickFixes() { + JetSingleIntentionActionFactory + removeAbstractModifierFactory = RemoveModifierFix.createRemoveModifierFromListOwnerFactory(ABSTRACT_KEYWORD); + JetSingleIntentionActionFactory addAbstractModifierFactory = AddModifierFix.createFactory(ABSTRACT_KEYWORD); + + QuickFixes.factories.put(ABSTRACT_PROPERTY_IN_PRIMARY_CONSTRUCTOR_PARAMETERS, removeAbstractModifierFactory); + + JetSingleIntentionActionFactory removePartsFromPropertyFactory = RemovePartsFromPropertyFix.createFactory(); + QuickFixes.factories.put(ABSTRACT_PROPERTY_WITH_INITIALIZER, removeAbstractModifierFactory); + QuickFixes.factories.put(ABSTRACT_PROPERTY_WITH_INITIALIZER, removePartsFromPropertyFactory); + + QuickFixes.factories.put(ABSTRACT_PROPERTY_WITH_GETTER, removeAbstractModifierFactory); + QuickFixes.factories.put(ABSTRACT_PROPERTY_WITH_GETTER, removePartsFromPropertyFactory); + + QuickFixes.factories.put(ABSTRACT_PROPERTY_WITH_SETTER, removeAbstractModifierFactory); + QuickFixes.factories.put(ABSTRACT_PROPERTY_WITH_SETTER, removePartsFromPropertyFactory); + + QuickFixes.factories.put(PROPERTY_INITIALIZER_IN_TRAIT, removePartsFromPropertyFactory); + + QuickFixes.factories.put(MUST_BE_INITIALIZED_OR_BE_ABSTRACT, addAbstractModifierFactory); + + JetSingleIntentionActionFactory removeFinalModifierFactory = RemoveModifierFix.createRemoveModifierFromListOwnerFactory(FINAL_KEYWORD); + + JetSingleIntentionActionFactory addAbstractToClassFactory = AddModifierFix.createFactory(ABSTRACT_KEYWORD, JetClass.class); + QuickFixes.factories.put(ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS, removeAbstractModifierFactory); + QuickFixes.factories.put(ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS, addAbstractToClassFactory); + + JetSingleIntentionActionFactory removeFunctionBodyFactory = RemoveFunctionBodyFix.createFactory(); + QuickFixes.factories.put(ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS, removeAbstractModifierFactory); + QuickFixes.factories.put(ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS, addAbstractToClassFactory); + + QuickFixes.factories.put(ABSTRACT_FUNCTION_WITH_BODY, removeAbstractModifierFactory); + QuickFixes.factories.put(ABSTRACT_FUNCTION_WITH_BODY, removeFunctionBodyFactory); + + QuickFixes.factories.put(FINAL_PROPERTY_IN_TRAIT, removeFinalModifierFactory); + QuickFixes.factories.put(FINAL_FUNCTION_WITH_NO_BODY, removeFinalModifierFactory); + + JetSingleIntentionActionFactory addFunctionBodyFactory = AddFunctionBodyFix.createFactory(); + QuickFixes.factories.put(NON_ABSTRACT_FUNCTION_WITH_NO_BODY, addAbstractModifierFactory); + QuickFixes.factories.put(NON_ABSTRACT_FUNCTION_WITH_NO_BODY, addFunctionBodyFactory); + + QuickFixes.factories.put(NON_VARARG_SPREAD, RemovePsiElementSimpleFix.createRemoveSpreadFactory()); + + QuickFixes.factories.put(MIXING_NAMED_AND_POSITIONED_ARGUMENTS, AddNameToArgumentFix.createFactory()); + + QuickFixes.factories.put(NON_MEMBER_FUNCTION_NO_BODY, addFunctionBodyFactory); + + QuickFixes.factories.put(NOTHING_TO_OVERRIDE, RemoveModifierFix.createRemoveModifierFromListOwnerFactory(OVERRIDE_KEYWORD)); + QuickFixes.factories.put(NOTHING_TO_OVERRIDE, ChangeMemberFunctionSignatureFix.createFactory()); + QuickFixes.factories.put(NOTHING_TO_OVERRIDE, AddFunctionToSupertypeFix.createFactory()); + QuickFixes.factories.put(VIRTUAL_MEMBER_HIDDEN, AddModifierFix.createFactory(OVERRIDE_KEYWORD)); + + QuickFixes.factories.put(USELESS_CAST_STATIC_ASSERT_IS_FINE, ReplaceOperationInBinaryExpressionFix.createChangeCastToStaticAssertFactory()); + QuickFixes.factories.put(USELESS_CAST, RemoveRightPartOfBinaryExpressionFix.createRemoveCastFactory()); + + JetSingleIntentionActionFactory changeAccessorTypeFactory = ChangeAccessorTypeFix.createFactory(); + QuickFixes.factories.put(WRONG_SETTER_PARAMETER_TYPE, changeAccessorTypeFactory); + QuickFixes.factories.put(WRONG_GETTER_RETURN_TYPE, changeAccessorTypeFactory); + + QuickFixes.factories.put(USELESS_ELVIS, RemoveRightPartOfBinaryExpressionFix.createRemoveElvisOperatorFactory()); + + JetSingleIntentionActionFactory removeRedundantModifierFactory = RemoveModifierFix.createRemoveModifierFactory(true); + QuickFixes.factories.put(REDUNDANT_MODIFIER, removeRedundantModifierFactory); + QuickFixes.factories.put(ABSTRACT_MODIFIER_IN_TRAIT, RemoveModifierFix.createRemoveModifierFromListOwnerFactory(ABSTRACT_KEYWORD, true)); + QuickFixes.factories.put(OPEN_MODIFIER_IN_TRAIT, RemoveModifierFix.createRemoveModifierFromListOwnerFactory(OPEN_KEYWORD, true)); + QuickFixes.factories.put(TRAIT_CAN_NOT_BE_FINAL, removeFinalModifierFactory); + QuickFixes.factories.put(REDUNDANT_PROJECTION, RemoveModifierFix.createRemoveProjectionFactory(true)); + QuickFixes.factories.put(INCOMPATIBLE_MODIFIERS, RemoveModifierFix.createRemoveModifierFactory(false)); + QuickFixes.factories.put(VARIANCE_ON_TYPE_PARAMETER_OF_FUNCTION_OR_PROPERTY, RemoveModifierFix.createRemoveVarianceFactory()); + + JetSingleIntentionActionFactory removeOpenModifierFactory = RemoveModifierFix.createRemoveModifierFromListOwnerFactory(OPEN_KEYWORD); + QuickFixes.factories.put(NON_FINAL_MEMBER_IN_FINAL_CLASS, AddModifierFix.createFactory(OPEN_KEYWORD, JetClass.class)); + QuickFixes.factories.put(NON_FINAL_MEMBER_IN_FINAL_CLASS, removeOpenModifierFactory); + + JetSingleIntentionActionFactory removeModifierFactory = RemoveModifierFix.createRemoveModifierFactory(); + QuickFixes.factories.put(GETTER_VISIBILITY_DIFFERS_FROM_PROPERTY_VISIBILITY, removeModifierFactory); + QuickFixes.factories.put(REDUNDANT_MODIFIER_IN_GETTER, removeRedundantModifierFactory); + QuickFixes.factories.put(ILLEGAL_MODIFIER, removeModifierFactory); + + JetSingleIntentionActionFactory changeToBackingFieldFactory = ChangeToBackingFieldFix.createFactory(); + QuickFixes.factories.put(INITIALIZATION_USING_BACKING_FIELD_CUSTOM_SETTER, changeToBackingFieldFactory); + QuickFixes.factories.put(INITIALIZATION_USING_BACKING_FIELD_OPEN_SETTER, changeToBackingFieldFactory); + + JetSingleIntentionActionFactory changeToPropertyNameFactory = ChangeToPropertyNameFix.createFactory(); + QuickFixes.factories.put(NO_BACKING_FIELD_ABSTRACT_PROPERTY, changeToPropertyNameFactory); + QuickFixes.factories.put(NO_BACKING_FIELD_CUSTOM_ACCESSORS, changeToPropertyNameFactory); + QuickFixes.factories.put(INACCESSIBLE_BACKING_FIELD, changeToPropertyNameFactory); + + JetSingleIntentionActionFactory unresolvedReferenceFactory = AutoImportFix.createFactory(); + QuickFixes.factories.put(UNRESOLVED_REFERENCE, unresolvedReferenceFactory); + QuickFixes.factories.put(UNRESOLVED_REFERENCE_WRONG_RECEIVER, unresolvedReferenceFactory); + + JetSingleIntentionActionFactory removeImportFixFactory = RemovePsiElementSimpleFix.createRemoveImportFactory(); + QuickFixes.factories.put(USELESS_SIMPLE_IMPORT, removeImportFixFactory); + QuickFixes.factories.put(USELESS_HIDDEN_IMPORT, removeImportFixFactory); + + QuickFixes.factories.put(SUPERTYPE_NOT_INITIALIZED, ChangeToConstructorInvocationFix.createFactory()); + QuickFixes.factories.put(FUNCTION_CALL_EXPECTED, ChangeToFunctionInvocationFix.createFactory()); + + QuickFixes.factories.put(CANNOT_CHANGE_ACCESS_PRIVILEGE, ChangeVisibilityModifierFix.createFactory()); + QuickFixes.factories.put(CANNOT_WEAKEN_ACCESS_PRIVILEGE, ChangeVisibilityModifierFix.createFactory()); + + QuickFixes.factories.put(REDUNDANT_NULLABLE, RemoveNullableFix.createFactory(RemoveNullableFix.NullableKind.REDUNDANT)); + QuickFixes.factories.put(NULLABLE_SUPERTYPE, RemoveNullableFix.createFactory(RemoveNullableFix.NullableKind.SUPERTYPE)); + QuickFixes.factories.put(USELESS_NULLABLE_CHECK, RemoveNullableFix.createFactory(RemoveNullableFix.NullableKind.USELESS)); + + + ImplementMethodsHandler implementMethodsHandler = new ImplementMethodsHandler(); + QuickFixes.actions.put(ABSTRACT_MEMBER_NOT_IMPLEMENTED, implementMethodsHandler); + QuickFixes.actions.put(MANY_IMPL_MEMBER_NOT_IMPLEMENTED, implementMethodsHandler); + + ChangeVariableMutabilityFix changeVariableMutabilityFix = new ChangeVariableMutabilityFix(); + QuickFixes.actions.put(VAL_WITH_SETTER, changeVariableMutabilityFix); + QuickFixes.actions.put(VAL_REASSIGNMENT, changeVariableMutabilityFix); + QuickFixes.actions.put(VAR_OVERRIDDEN_BY_VAL, changeVariableMutabilityFix); + + RemoveValVarFromParametersFix removeValVarFromParametersFix = new RemoveValVarFromParametersFix(); + QuickFixes.actions.put(VAL_OR_VAR_ON_FUN_PARAMETER, removeValVarFromParametersFix); + QuickFixes.actions.put(VAL_OR_VAR_ON_LOOP_PARAMETER, removeValVarFromParametersFix); + QuickFixes.actions.put(VAL_OR_VAR_ON_CATCH_PARAMETER, removeValVarFromParametersFix); + + QuickFixes.factories.put(VIRTUAL_MEMBER_HIDDEN, AddOverrideToEqualsHashCodeToStringFix.createFactory()); + + QuickFixes.factories.put(UNUSED_VARIABLE, RemovePsiElementSimpleFix.createRemoveVariableFactory()); + + QuickFixes.actions.put(UNNECESSARY_SAFE_CALL, ReplaceCallFix.toDotCallFromSafeCall()); + QuickFixes.actions.put(UNSAFE_CALL, ReplaceCallFix.toSafeCall()); + + QuickFixes.actions.put(UNSAFE_CALL, ExclExclCallFix.introduceExclExclCall()); + QuickFixes.actions.put(UNNECESSARY_NOT_NULL_ASSERTION, ExclExclCallFix.removeExclExclCall()); + QuickFixes.factories.put(UNSAFE_INFIX_CALL, ReplaceInfixCallFix.createFactory()); + + JetSingleIntentionActionFactory removeProtectedModifierFactory = RemoveModifierFix.createRemoveModifierFromListOwnerFactory(PROTECTED_KEYWORD); + QuickFixes.factories.put(PACKAGE_MEMBER_CANNOT_BE_PROTECTED, removeProtectedModifierFactory); + + QuickFixes.actions.put(PUBLIC_MEMBER_SHOULD_SPECIFY_TYPE, new SpecifyTypeExplicitlyFix()); + QuickFixes.actions.put(AMBIGUOUS_ANONYMOUS_TYPE_INFERRED, new SpecifyTypeExplicitlyFix()); + + QuickFixes.factories.put(ELSE_MISPLACED_IN_WHEN, MoveWhenElseBranchFix.createFactory()); + QuickFixes.factories.put(NO_ELSE_IN_WHEN, AddWhenElseBranchFix.createFactory()); + + QuickFixes.factories.put(NO_TYPE_ARGUMENTS_ON_RHS, AddStarProjectionsFix.createFactoryForIsExpression()); + QuickFixes.factories.put(WRONG_NUMBER_OF_TYPE_ARGUMENTS, AddStarProjectionsFix.createFactoryForJavaClass()); + + QuickFixes.factories.put(TYPE_ARGUMENTS_REDUNDANT_IN_SUPER_QUALIFIER, RemovePsiElementSimpleFix.createRemoveTypeArgumentsFactory()); + + JetSingleIntentionActionFactory changeToStarProjectionFactory = ChangeToStarProjectionFix.createFactory(); + QuickFixes.factories.put(UNCHECKED_CAST, changeToStarProjectionFactory); + QuickFixes.factories.put(CANNOT_CHECK_FOR_ERASED, changeToStarProjectionFactory); + + QuickFixes.factories.put(INACCESSIBLE_OUTER_CLASS_EXPRESSION, AddModifierFix.createFactory(INNER_KEYWORD, JetClass.class)); + + JetSingleIntentionActionFactory addOpenModifierToClassDeclarationFix = AddOpenModifierToClassDeclarationFix.createFactory(); + QuickFixes.factories.put(FINAL_SUPERTYPE, addOpenModifierToClassDeclarationFix); + QuickFixes.factories.put(FINAL_UPPER_BOUND, addOpenModifierToClassDeclarationFix); + + QuickFixes.factories.put(OVERRIDING_FINAL_MEMBER, MakeOverriddenMemberOpenFix.createFactory()); + + QuickFixes.factories.put(PARAMETER_NAME_CHANGED_ON_OVERRIDE, RenameParameterToMatchOverriddenMethodFix.createFactory()); + + QuickFixes.factories.put(OPEN_MODIFIER_IN_ENUM, RemoveModifierFix.createRemoveModifierFromListOwnerFactory(OPEN_KEYWORD)); + QuickFixes.factories.put(ILLEGAL_ENUM_ANNOTATION, RemoveModifierFix.createRemoveModifierFromListOwnerFactory(ENUM_KEYWORD)); + + QuickFixes.factories.put(NESTED_CLASS_NOT_ALLOWED, AddModifierFix.createFactory(INNER_KEYWORD)); + + QuickFixes.factories.put(CONFLICTING_PROJECTION, RemoveModifierFix.createRemoveProjectionFactory(false)); + QuickFixes.factories.put(PROJECTION_ON_NON_CLASS_TYPE_ARGUMENT, RemoveModifierFix.createRemoveProjectionFactory(false)); + QuickFixes.factories.put(PROJECTION_IN_IMMEDIATE_ARGUMENT_TO_SUPERTYPE, RemoveModifierFix.createRemoveProjectionFactory(false)); + + QuickFixes.factories.put(NOT_AN_ANNOTATION_CLASS, MakeClassAnAnnotationClassFix.createFactory()); + + QuickFixes.factories.put(DANGLING_FUNCTION_LITERAL_ARGUMENT_SUSPECTED, AddSemicolonAfterFunctionCallFix.createFactory()); + + JetIntentionActionsFactory changeVariableTypeFix = ChangeVariableTypeFix.createFactoryForPropertyOrReturnTypeMismatchOnOverride(); + QuickFixes.factories.put(RETURN_TYPE_MISMATCH_ON_OVERRIDE, changeVariableTypeFix); + QuickFixes.factories.put(PROPERTY_TYPE_MISMATCH_ON_OVERRIDE, changeVariableTypeFix); + QuickFixes.factories.put(COMPONENT_FUNCTION_RETURN_TYPE_MISMATCH, ChangeVariableTypeFix.createFactoryForComponentFunctionReturnTypeMismatch()); + + JetSingleIntentionActionFactory changeFunctionReturnTypeFix = ChangeFunctionReturnTypeFix.createFactoryForChangingReturnTypeToUnit(); + QuickFixes.factories.put(RETURN_TYPE_MISMATCH, changeFunctionReturnTypeFix); + QuickFixes.factories.put(NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY, changeFunctionReturnTypeFix); + QuickFixes.factories.put(RETURN_TYPE_MISMATCH_ON_OVERRIDE, ChangeFunctionReturnTypeFix.createFactoryForReturnTypeMismatchOnOverride()); + QuickFixes.factories.put(COMPONENT_FUNCTION_RETURN_TYPE_MISMATCH, ChangeFunctionReturnTypeFix.createFactoryForComponentFunctionReturnTypeMismatch()); + QuickFixes.factories.put(HAS_NEXT_FUNCTION_TYPE_MISMATCH, ChangeFunctionReturnTypeFix.createFactoryForHasNextFunctionTypeMismatch()); + QuickFixes.factories.put(COMPARE_TO_TYPE_MISMATCH, ChangeFunctionReturnTypeFix.createFactoryForCompareToTypeMismatch()); + + QuickFixes.factories.put(TOO_MANY_ARGUMENTS, ChangeFunctionSignatureFix.createFactory()); + QuickFixes.factories.put(NO_VALUE_FOR_PARAMETER, ChangeFunctionSignatureFix.createFactory()); + QuickFixes.factories.put(UNUSED_PARAMETER, ChangeFunctionSignatureFix.createFactoryForUnusedParameter()); + QuickFixes.factories.put(EXPECTED_PARAMETERS_NUMBER_MISMATCH, ChangeFunctionSignatureFix.createFactoryForParametersNumberMismatch()); + + QuickFixes.factories.put(EXPECTED_PARAMETER_TYPE_MISMATCH, ChangeTypeFix.createFactoryForExpectedParameterTypeMismatch()); + QuickFixes.factories.put(EXPECTED_RETURN_TYPE_MISMATCH, ChangeTypeFix.createFactoryForExpectedReturnTypeMismatch()); + + JetSingleIntentionActionFactory changeFunctionLiteralReturnTypeFix = ChangeFunctionLiteralReturnTypeFix.createFactoryForExpectedOrAssignmentTypeMismatch(); + QuickFixes.factories.put(EXPECTED_TYPE_MISMATCH, changeFunctionLiteralReturnTypeFix); + QuickFixes.factories.put(ASSIGNMENT_TYPE_MISMATCH, changeFunctionLiteralReturnTypeFix); + + QuickFixes.factories.put(TYPE_MISMATCH, new QuickFixFactoryForTypeMismatchError()); + + QuickFixes.factories.put(AUTOCAST_IMPOSSIBLE, CastExpressionFix.createFactoryForAutoCastImpossible()); + + QuickFixes.factories.put(PLATFORM_CLASS_MAPPED_TO_KOTLIN, MapPlatformClassToKotlinFix.createFactory()); + + QuickFixes.factories.put(MANY_CLASSES_IN_SUPERTYPE_LIST, RemoveSupertypeFix.createFactory()); + + QuickFixes.factories.put(NO_GET_METHOD, CreateFunctionFromUsageFix.OBJECT$.createCreateGetFunctionFromUsageFactory()); + QuickFixes.factories.put(NO_SET_METHOD, CreateFunctionFromUsageFix.OBJECT$.createCreateSetFunctionFromUsageFactory()); + JetSingleIntentionActionFactory createHasNextFromUsageFactory = CreateFunctionFromUsageFix.OBJECT$.createCreateHasNextFunctionFromUsageFactory(); + QuickFixes.factories.put(HAS_NEXT_MISSING, createHasNextFromUsageFactory); + QuickFixes.factories.put(HAS_NEXT_FUNCTION_NONE_APPLICABLE, createHasNextFromUsageFactory); + JetSingleIntentionActionFactory createNextFromUsageFactory = CreateFunctionFromUsageFix.OBJECT$.createCreateNextFunctionFromUsageFactory(); + QuickFixes.factories.put(NEXT_MISSING, createNextFromUsageFactory); + QuickFixes.factories.put(NEXT_NONE_APPLICABLE, createNextFromUsageFactory); + QuickFixes.factories.put(ITERATOR_MISSING, CreateFunctionFromUsageFix.OBJECT$.createCreateIteratorFunctionFromUsageFactory()); + QuickFixes.factories.put(COMPONENT_FUNCTION_MISSING, CreateFunctionFromUsageFix.OBJECT$.createCreateComponentFunctionFromUsageFactory()); + } +} diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixes.java b/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixes.java deleted file mode 100644 index 3bc970ae7a8..00000000000 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixes.java +++ /dev/null @@ -1,262 +0,0 @@ -/* - * Copyright 2010-2013 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.jet.plugin.quickfix; - -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; -import com.intellij.codeInsight.intention.IntentionAction; -import org.jetbrains.jet.lang.diagnostics.DiagnosticFactory; -import org.jetbrains.jet.lang.psi.JetClass; -import org.jetbrains.jet.plugin.codeInsight.ImplementMethodsHandler; - -import java.util.Collection; - -import static org.jetbrains.jet.lang.diagnostics.Errors.*; -import static org.jetbrains.jet.lexer.JetTokens.*; - -public class QuickFixes { - - private static final Multimap, JetIntentionActionsFactory> factories = HashMultimap.create(); - private static final Multimap, IntentionAction> actions = HashMultimap.create(); - - public static Collection getActionsFactories(DiagnosticFactory diagnosticFactory) { - return factories.get(diagnosticFactory); - } - - public static Collection getActions(DiagnosticFactory diagnosticFactory) { - return actions.get(diagnosticFactory); - } - - private QuickFixes() {} - - static { - JetSingleIntentionActionFactory removeAbstractModifierFactory = RemoveModifierFix.createRemoveModifierFromListOwnerFactory(ABSTRACT_KEYWORD); - JetSingleIntentionActionFactory addAbstractModifierFactory = AddModifierFix.createFactory(ABSTRACT_KEYWORD); - - factories.put(ABSTRACT_PROPERTY_IN_PRIMARY_CONSTRUCTOR_PARAMETERS, removeAbstractModifierFactory); - - JetSingleIntentionActionFactory removePartsFromPropertyFactory = RemovePartsFromPropertyFix.createFactory(); - factories.put(ABSTRACT_PROPERTY_WITH_INITIALIZER, removeAbstractModifierFactory); - factories.put(ABSTRACT_PROPERTY_WITH_INITIALIZER, removePartsFromPropertyFactory); - - factories.put(ABSTRACT_PROPERTY_WITH_GETTER, removeAbstractModifierFactory); - factories.put(ABSTRACT_PROPERTY_WITH_GETTER, removePartsFromPropertyFactory); - - factories.put(ABSTRACT_PROPERTY_WITH_SETTER, removeAbstractModifierFactory); - factories.put(ABSTRACT_PROPERTY_WITH_SETTER, removePartsFromPropertyFactory); - - factories.put(PROPERTY_INITIALIZER_IN_TRAIT, removePartsFromPropertyFactory); - - factories.put(MUST_BE_INITIALIZED_OR_BE_ABSTRACT, addAbstractModifierFactory); - - JetSingleIntentionActionFactory removeFinalModifierFactory = RemoveModifierFix.createRemoveModifierFromListOwnerFactory(FINAL_KEYWORD); - - JetSingleIntentionActionFactory addAbstractToClassFactory = AddModifierFix.createFactory(ABSTRACT_KEYWORD, JetClass.class); - factories.put(ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS, removeAbstractModifierFactory); - factories.put(ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS, addAbstractToClassFactory); - - JetSingleIntentionActionFactory removeFunctionBodyFactory = RemoveFunctionBodyFix.createFactory(); - factories.put(ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS, removeAbstractModifierFactory); - factories.put(ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS, addAbstractToClassFactory); - - factories.put(ABSTRACT_FUNCTION_WITH_BODY, removeAbstractModifierFactory); - factories.put(ABSTRACT_FUNCTION_WITH_BODY, removeFunctionBodyFactory); - - factories.put(FINAL_PROPERTY_IN_TRAIT, removeFinalModifierFactory); - factories.put(FINAL_FUNCTION_WITH_NO_BODY, removeFinalModifierFactory); - - JetSingleIntentionActionFactory addFunctionBodyFactory = AddFunctionBodyFix.createFactory(); - factories.put(NON_ABSTRACT_FUNCTION_WITH_NO_BODY, addAbstractModifierFactory); - factories.put(NON_ABSTRACT_FUNCTION_WITH_NO_BODY, addFunctionBodyFactory); - - factories.put(NON_VARARG_SPREAD, RemovePsiElementSimpleFix.createRemoveSpreadFactory()); - - factories.put(MIXING_NAMED_AND_POSITIONED_ARGUMENTS, AddNameToArgumentFix.createFactory()); - - factories.put(NON_MEMBER_FUNCTION_NO_BODY, addFunctionBodyFactory); - - factories.put(NOTHING_TO_OVERRIDE, RemoveModifierFix.createRemoveModifierFromListOwnerFactory(OVERRIDE_KEYWORD)); - factories.put(NOTHING_TO_OVERRIDE, ChangeMemberFunctionSignatureFix.createFactory()); - factories.put(NOTHING_TO_OVERRIDE, AddFunctionToSupertypeFix.createFactory()); - factories.put(VIRTUAL_MEMBER_HIDDEN, AddModifierFix.createFactory(OVERRIDE_KEYWORD)); - - factories.put(USELESS_CAST_STATIC_ASSERT_IS_FINE, ReplaceOperationInBinaryExpressionFix.createChangeCastToStaticAssertFactory()); - factories.put(USELESS_CAST, RemoveRightPartOfBinaryExpressionFix.createRemoveCastFactory()); - - JetSingleIntentionActionFactory changeAccessorTypeFactory = ChangeAccessorTypeFix.createFactory(); - factories.put(WRONG_SETTER_PARAMETER_TYPE, changeAccessorTypeFactory); - factories.put(WRONG_GETTER_RETURN_TYPE, changeAccessorTypeFactory); - - factories.put(USELESS_ELVIS, RemoveRightPartOfBinaryExpressionFix.createRemoveElvisOperatorFactory()); - - JetSingleIntentionActionFactory removeRedundantModifierFactory = RemoveModifierFix.createRemoveModifierFactory(true); - factories.put(REDUNDANT_MODIFIER, removeRedundantModifierFactory); - factories.put(ABSTRACT_MODIFIER_IN_TRAIT, RemoveModifierFix.createRemoveModifierFromListOwnerFactory(ABSTRACT_KEYWORD, true)); - factories.put(OPEN_MODIFIER_IN_TRAIT, RemoveModifierFix.createRemoveModifierFromListOwnerFactory(OPEN_KEYWORD, true)); - factories.put(TRAIT_CAN_NOT_BE_FINAL, removeFinalModifierFactory); - factories.put(REDUNDANT_PROJECTION, RemoveModifierFix.createRemoveProjectionFactory(true)); - factories.put(INCOMPATIBLE_MODIFIERS, RemoveModifierFix.createRemoveModifierFactory(false)); - factories.put(VARIANCE_ON_TYPE_PARAMETER_OF_FUNCTION_OR_PROPERTY, RemoveModifierFix.createRemoveVarianceFactory()); - - JetSingleIntentionActionFactory removeOpenModifierFactory = RemoveModifierFix.createRemoveModifierFromListOwnerFactory(OPEN_KEYWORD); - factories.put(NON_FINAL_MEMBER_IN_FINAL_CLASS, AddModifierFix.createFactory(OPEN_KEYWORD, JetClass.class)); - factories.put(NON_FINAL_MEMBER_IN_FINAL_CLASS, removeOpenModifierFactory); - - JetSingleIntentionActionFactory removeModifierFactory = RemoveModifierFix.createRemoveModifierFactory(); - factories.put(GETTER_VISIBILITY_DIFFERS_FROM_PROPERTY_VISIBILITY, removeModifierFactory); - factories.put(REDUNDANT_MODIFIER_IN_GETTER, removeRedundantModifierFactory); - factories.put(ILLEGAL_MODIFIER, removeModifierFactory); - - JetSingleIntentionActionFactory changeToBackingFieldFactory = ChangeToBackingFieldFix.createFactory(); - factories.put(INITIALIZATION_USING_BACKING_FIELD_CUSTOM_SETTER, changeToBackingFieldFactory); - factories.put(INITIALIZATION_USING_BACKING_FIELD_OPEN_SETTER, changeToBackingFieldFactory); - - JetSingleIntentionActionFactory changeToPropertyNameFactory = ChangeToPropertyNameFix.createFactory(); - factories.put(NO_BACKING_FIELD_ABSTRACT_PROPERTY, changeToPropertyNameFactory); - factories.put(NO_BACKING_FIELD_CUSTOM_ACCESSORS, changeToPropertyNameFactory); - factories.put(INACCESSIBLE_BACKING_FIELD, changeToPropertyNameFactory); - - JetSingleIntentionActionFactory unresolvedReferenceFactory = AutoImportFix.createFactory(); - factories.put(UNRESOLVED_REFERENCE, unresolvedReferenceFactory); - factories.put(UNRESOLVED_REFERENCE_WRONG_RECEIVER, unresolvedReferenceFactory); - - JetSingleIntentionActionFactory removeImportFixFactory = RemovePsiElementSimpleFix.createRemoveImportFactory(); - factories.put(USELESS_SIMPLE_IMPORT, removeImportFixFactory); - factories.put(USELESS_HIDDEN_IMPORT, removeImportFixFactory); - - factories.put(SUPERTYPE_NOT_INITIALIZED, ChangeToConstructorInvocationFix.createFactory()); - factories.put(FUNCTION_CALL_EXPECTED, ChangeToFunctionInvocationFix.createFactory()); - - factories.put(CANNOT_CHANGE_ACCESS_PRIVILEGE, ChangeVisibilityModifierFix.createFactory()); - factories.put(CANNOT_WEAKEN_ACCESS_PRIVILEGE, ChangeVisibilityModifierFix.createFactory()); - - factories.put(REDUNDANT_NULLABLE, RemoveNullableFix.createFactory(RemoveNullableFix.NullableKind.REDUNDANT)); - factories.put(NULLABLE_SUPERTYPE, RemoveNullableFix.createFactory(RemoveNullableFix.NullableKind.SUPERTYPE)); - factories.put(USELESS_NULLABLE_CHECK, RemoveNullableFix.createFactory(RemoveNullableFix.NullableKind.USELESS)); - - - ImplementMethodsHandler implementMethodsHandler = new ImplementMethodsHandler(); - actions.put(ABSTRACT_MEMBER_NOT_IMPLEMENTED, implementMethodsHandler); - actions.put(MANY_IMPL_MEMBER_NOT_IMPLEMENTED, implementMethodsHandler); - - ChangeVariableMutabilityFix changeVariableMutabilityFix = new ChangeVariableMutabilityFix(); - actions.put(VAL_WITH_SETTER, changeVariableMutabilityFix); - actions.put(VAL_REASSIGNMENT, changeVariableMutabilityFix); - actions.put(VAR_OVERRIDDEN_BY_VAL, changeVariableMutabilityFix); - - RemoveValVarFromParametersFix removeValVarFromParametersFix = new RemoveValVarFromParametersFix(); - actions.put(VAL_OR_VAR_ON_FUN_PARAMETER, removeValVarFromParametersFix); - actions.put(VAL_OR_VAR_ON_LOOP_PARAMETER, removeValVarFromParametersFix); - actions.put(VAL_OR_VAR_ON_CATCH_PARAMETER, removeValVarFromParametersFix); - - factories.put(VIRTUAL_MEMBER_HIDDEN, AddOverrideToEqualsHashCodeToStringFix.createFactory()); - - factories.put(UNUSED_VARIABLE, RemovePsiElementSimpleFix.createRemoveVariableFactory()); - - actions.put(UNNECESSARY_SAFE_CALL, ReplaceCallFix.toDotCallFromSafeCall()); - actions.put(UNSAFE_CALL, ReplaceCallFix.toSafeCall()); - - actions.put(UNSAFE_CALL, ExclExclCallFix.introduceExclExclCall()); - actions.put(UNNECESSARY_NOT_NULL_ASSERTION, ExclExclCallFix.removeExclExclCall()); - factories.put(UNSAFE_INFIX_CALL, ReplaceInfixCallFix.createFactory()); - - JetSingleIntentionActionFactory removeProtectedModifierFactory = RemoveModifierFix.createRemoveModifierFromListOwnerFactory(PROTECTED_KEYWORD); - factories.put(PACKAGE_MEMBER_CANNOT_BE_PROTECTED, removeProtectedModifierFactory); - - actions.put(PUBLIC_MEMBER_SHOULD_SPECIFY_TYPE, new SpecifyTypeExplicitlyFix()); - actions.put(AMBIGUOUS_ANONYMOUS_TYPE_INFERRED, new SpecifyTypeExplicitlyFix()); - - factories.put(ELSE_MISPLACED_IN_WHEN, MoveWhenElseBranchFix.createFactory()); - factories.put(NO_ELSE_IN_WHEN, AddWhenElseBranchFix.createFactory()); - - factories.put(NO_TYPE_ARGUMENTS_ON_RHS, AddStarProjectionsFix.createFactoryForIsExpression()); - factories.put(WRONG_NUMBER_OF_TYPE_ARGUMENTS, AddStarProjectionsFix.createFactoryForJavaClass()); - - factories.put(TYPE_ARGUMENTS_REDUNDANT_IN_SUPER_QUALIFIER, RemovePsiElementSimpleFix.createRemoveTypeArgumentsFactory()); - - JetSingleIntentionActionFactory changeToStarProjectionFactory = ChangeToStarProjectionFix.createFactory(); - factories.put(UNCHECKED_CAST, changeToStarProjectionFactory); - factories.put(CANNOT_CHECK_FOR_ERASED, changeToStarProjectionFactory); - - factories.put(INACCESSIBLE_OUTER_CLASS_EXPRESSION, AddModifierFix.createFactory(INNER_KEYWORD, JetClass.class)); - - JetSingleIntentionActionFactory addOpenModifierToClassDeclarationFix = AddOpenModifierToClassDeclarationFix.createFactory(); - factories.put(FINAL_SUPERTYPE, addOpenModifierToClassDeclarationFix); - factories.put(FINAL_UPPER_BOUND, addOpenModifierToClassDeclarationFix); - - factories.put(OVERRIDING_FINAL_MEMBER, MakeOverriddenMemberOpenFix.createFactory()); - - factories.put(PARAMETER_NAME_CHANGED_ON_OVERRIDE, RenameParameterToMatchOverriddenMethodFix.createFactory()); - - factories.put(OPEN_MODIFIER_IN_ENUM, RemoveModifierFix.createRemoveModifierFromListOwnerFactory(OPEN_KEYWORD)); - factories.put(ILLEGAL_ENUM_ANNOTATION, RemoveModifierFix.createRemoveModifierFromListOwnerFactory(ENUM_KEYWORD)); - - factories.put(NESTED_CLASS_NOT_ALLOWED, AddModifierFix.createFactory(INNER_KEYWORD)); - - factories.put(CONFLICTING_PROJECTION, RemoveModifierFix.createRemoveProjectionFactory(false)); - factories.put(PROJECTION_ON_NON_CLASS_TYPE_ARGUMENT, RemoveModifierFix.createRemoveProjectionFactory(false)); - factories.put(PROJECTION_IN_IMMEDIATE_ARGUMENT_TO_SUPERTYPE, RemoveModifierFix.createRemoveProjectionFactory(false)); - - factories.put(NOT_AN_ANNOTATION_CLASS, MakeClassAnAnnotationClassFix.createFactory()); - - factories.put(DANGLING_FUNCTION_LITERAL_ARGUMENT_SUSPECTED, AddSemicolonAfterFunctionCallFix.createFactory()); - - JetIntentionActionsFactory changeVariableTypeFix = ChangeVariableTypeFix.createFactoryForPropertyOrReturnTypeMismatchOnOverride(); - factories.put(RETURN_TYPE_MISMATCH_ON_OVERRIDE, changeVariableTypeFix); - factories.put(PROPERTY_TYPE_MISMATCH_ON_OVERRIDE, changeVariableTypeFix); - factories.put(COMPONENT_FUNCTION_RETURN_TYPE_MISMATCH, ChangeVariableTypeFix.createFactoryForComponentFunctionReturnTypeMismatch()); - - JetSingleIntentionActionFactory changeFunctionReturnTypeFix = ChangeFunctionReturnTypeFix.createFactoryForChangingReturnTypeToUnit(); - factories.put(RETURN_TYPE_MISMATCH, changeFunctionReturnTypeFix); - factories.put(NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY, changeFunctionReturnTypeFix); - factories.put(RETURN_TYPE_MISMATCH_ON_OVERRIDE, ChangeFunctionReturnTypeFix.createFactoryForReturnTypeMismatchOnOverride()); - factories.put(COMPONENT_FUNCTION_RETURN_TYPE_MISMATCH, ChangeFunctionReturnTypeFix.createFactoryForComponentFunctionReturnTypeMismatch()); - factories.put(HAS_NEXT_FUNCTION_TYPE_MISMATCH, ChangeFunctionReturnTypeFix.createFactoryForHasNextFunctionTypeMismatch()); - factories.put(COMPARE_TO_TYPE_MISMATCH, ChangeFunctionReturnTypeFix.createFactoryForCompareToTypeMismatch()); - - factories.put(TOO_MANY_ARGUMENTS, ChangeFunctionSignatureFix.createFactory()); - factories.put(NO_VALUE_FOR_PARAMETER, ChangeFunctionSignatureFix.createFactory()); - factories.put(UNUSED_PARAMETER, ChangeFunctionSignatureFix.createFactoryForUnusedParameter()); - factories.put(EXPECTED_PARAMETERS_NUMBER_MISMATCH, ChangeFunctionSignatureFix.createFactoryForParametersNumberMismatch()); - - factories.put(EXPECTED_PARAMETER_TYPE_MISMATCH, ChangeTypeFix.createFactoryForExpectedParameterTypeMismatch()); - factories.put(EXPECTED_RETURN_TYPE_MISMATCH, ChangeTypeFix.createFactoryForExpectedReturnTypeMismatch()); - - JetSingleIntentionActionFactory changeFunctionLiteralReturnTypeFix = ChangeFunctionLiteralReturnTypeFix.createFactoryForExpectedOrAssignmentTypeMismatch(); - factories.put(EXPECTED_TYPE_MISMATCH, changeFunctionLiteralReturnTypeFix); - factories.put(ASSIGNMENT_TYPE_MISMATCH, changeFunctionLiteralReturnTypeFix); - - factories.put(TYPE_MISMATCH, new QuickFixFactoryForTypeMismatchError()); - - factories.put(AUTOCAST_IMPOSSIBLE, CastExpressionFix.createFactoryForAutoCastImpossible()); - - factories.put(PLATFORM_CLASS_MAPPED_TO_KOTLIN, MapPlatformClassToKotlinFix.createFactory()); - - factories.put(MANY_CLASSES_IN_SUPERTYPE_LIST, RemoveSupertypeFix.createFactory()); - - factories.put(NO_GET_METHOD, CreateFunctionFromUsageFix.OBJECT$.createCreateGetFunctionFromUsageFactory()); - factories.put(NO_SET_METHOD, CreateFunctionFromUsageFix.OBJECT$.createCreateSetFunctionFromUsageFactory()); - JetSingleIntentionActionFactory createHasNextFromUsageFactory = CreateFunctionFromUsageFix.OBJECT$.createCreateHasNextFunctionFromUsageFactory(); - factories.put(HAS_NEXT_MISSING, createHasNextFromUsageFactory); - factories.put(HAS_NEXT_FUNCTION_NONE_APPLICABLE, createHasNextFromUsageFactory); - JetSingleIntentionActionFactory createNextFromUsageFactory = CreateFunctionFromUsageFix.OBJECT$.createCreateNextFunctionFromUsageFactory(); - factories.put(NEXT_MISSING, createNextFromUsageFactory); - factories.put(NEXT_NONE_APPLICABLE, createNextFromUsageFactory); - factories.put(ITERATOR_MISSING, CreateFunctionFromUsageFix.OBJECT$.createCreateIteratorFunctionFromUsageFactory()); - factories.put(COMPONENT_FUNCTION_MISSING, CreateFunctionFromUsageFix.OBJECT$.createCreateComponentFunctionFromUsageFactory()); - } -} diff --git a/idea/src/org/jetbrains/jet/plugin/references/JetArrayAccessReference.java b/idea/src/org/jetbrains/jet/plugin/references/JetArrayAccessReference.java index 429a3c907bc..78de2e5ac6e 100644 --- a/idea/src/org/jetbrains/jet/plugin/references/JetArrayAccessReference.java +++ b/idea/src/org/jetbrains/jet/plugin/references/JetArrayAccessReference.java @@ -21,17 +21,15 @@ import com.intellij.lang.ASTNode; import com.intellij.openapi.util.TextRange; import com.intellij.psi.MultiRangeReference; import com.intellij.psi.PsiElement; -import com.intellij.psi.util.PsiTreeUtil; -import jet.runtime.typeinfo.JetValueParameter; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; -import org.jetbrains.jet.lang.psi.*; +import org.jetbrains.jet.lang.psi.JetArrayAccessExpression; +import org.jetbrains.jet.lang.psi.JetContainerNode; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall; import org.jetbrains.jet.lexer.JetTokens; -import org.jetbrains.jet.plugin.intentions.OperatorToFunctionIntention; import java.util.ArrayList; import java.util.Collection; diff --git a/idea/src/org/jetbrains/jet/plugin/references/JetInvokeFunctionReference.java b/idea/src/org/jetbrains/jet/plugin/references/JetInvokeFunctionReference.java index e864e0ca226..ebb328b3008 100644 --- a/idea/src/org/jetbrains/jet/plugin/references/JetInvokeFunctionReference.java +++ b/idea/src/org/jetbrains/jet/plugin/references/JetInvokeFunctionReference.java @@ -20,8 +20,6 @@ import com.intellij.lang.ASTNode; import com.intellij.openapi.util.TextRange; import com.intellij.psi.MultiRangeReference; import com.intellij.psi.PsiElement; -import com.intellij.psi.util.PsiTreeUtil; -import jet.runtime.typeinfo.JetValueParameter; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; @@ -31,7 +29,6 @@ import org.jetbrains.jet.lang.resolve.calls.callUtil.CallUtilPackage; import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall; import org.jetbrains.jet.lang.resolve.calls.model.VariableAsFunctionResolvedCall; import org.jetbrains.jet.lexer.JetTokens; -import org.jetbrains.jet.plugin.intentions.OperatorToFunctionIntention; import java.util.ArrayList; import java.util.Collection; diff --git a/idea/src/org/jetbrains/jet/plugin/run/JetJUnitConfigurationProducer.java b/idea/src/org/jetbrains/jet/plugin/run/JetJUnitConfigurationProducer.java index 632482b4d44..de72ade4f6d 100644 --- a/idea/src/org/jetbrains/jet/plugin/run/JetJUnitConfigurationProducer.java +++ b/idea/src/org/jetbrains/jet/plugin/run/JetJUnitConfigurationProducer.java @@ -33,7 +33,7 @@ import com.intellij.psi.util.PsiTreeUtil; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.asJava.LightClassUtil; import org.jetbrains.jet.lang.psi.*; -import org.jetbrains.jet.plugin.JetPluginUtil; +import org.jetbrains.jet.plugin.ProjectRootsUtil; public class JetJUnitConfigurationProducer extends RuntimeConfigurationProducer { private JetElement myElement; @@ -51,7 +51,7 @@ public class JetJUnitConfigurationProducer extends RuntimeConfigurationProducer protected RunnerAndConfigurationSettings createConfigurationByElement(Location location, ConfigurationContext context) { PsiElement leaf = location.getPsiElement(); - if (!JetPluginUtil.isInSource(leaf, true)) { + if (!ProjectRootsUtil.isInSource(leaf, true)) { return null; } diff --git a/idea/src/org/jetbrains/jet/plugin/run/JetRunConfigurationProducer.java b/idea/src/org/jetbrains/jet/plugin/run/JetRunConfigurationProducer.java index 8f65a8420b9..32311983f6a 100644 --- a/idea/src/org/jetbrains/jet/plugin/run/JetRunConfigurationProducer.java +++ b/idea/src/org/jetbrains/jet/plugin/run/JetRunConfigurationProducer.java @@ -33,8 +33,8 @@ import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; import org.jetbrains.jet.lang.resolve.lazy.ResolveSession; import org.jetbrains.jet.lang.resolve.name.FqName; -import org.jetbrains.jet.plugin.JetPluginUtil; import org.jetbrains.jet.plugin.MainFunctionDetector; +import org.jetbrains.jet.plugin.ProjectRootsUtil; import org.jetbrains.jet.plugin.project.AnalyzerFacadeProvider; import org.jetbrains.jet.plugin.project.ProjectStructureUtil; @@ -67,7 +67,7 @@ public class JetRunConfigurationProducer extends RuntimeConfigurationProducer im } JetFile file = getStartClassFile(location); - if (file == null || !JetPluginUtil.isInSource(file, true)) { + if (file == null || !ProjectRootsUtil.isInSource(file, true)) { return null; } diff --git a/idea/src/org/jetbrains/jet/plugin/run/JetTestNgConfigurationProducer.java b/idea/src/org/jetbrains/jet/plugin/run/JetTestNgConfigurationProducer.java index 06329f4c3e2..98d713b0213 100644 --- a/idea/src/org/jetbrains/jet/plugin/run/JetTestNgConfigurationProducer.java +++ b/idea/src/org/jetbrains/jet/plugin/run/JetTestNgConfigurationProducer.java @@ -34,7 +34,7 @@ import com.theoryinpractice.testng.util.TestNGUtil; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.asJava.LightClassUtil; import org.jetbrains.jet.lang.psi.*; -import org.jetbrains.jet.plugin.JetPluginUtil; +import org.jetbrains.jet.plugin.ProjectRootsUtil; public class JetTestNgConfigurationProducer extends TestNGConfigurationProducer { @Override @@ -52,7 +52,7 @@ public class JetTestNgConfigurationProducer extends TestNGConfigurationProducer Project project = context.getProject(); PsiElement leaf = location.getPsiElement(); - if (!JetPluginUtil.isInSource(leaf, true)) { + if (!ProjectRootsUtil.isInSource(leaf, true)) { return false; } diff --git a/idea/src/org/jetbrains/jet/plugin/search/ideaExtensions/KotlinReferencesSearcher.java b/idea/src/org/jetbrains/jet/plugin/search/ideaExtensions/KotlinReferencesSearcher.java index bde2108f295..1f268887313 100644 --- a/idea/src/org/jetbrains/jet/plugin/search/ideaExtensions/KotlinReferencesSearcher.java +++ b/idea/src/org/jetbrains/jet/plugin/search/ideaExtensions/KotlinReferencesSearcher.java @@ -29,7 +29,8 @@ import org.jetbrains.jet.asJava.AsJavaPackage; import org.jetbrains.jet.asJava.LightClassUtil; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.java.jetAsJava.KotlinLightMethod; -import org.jetbrains.jet.plugin.JetPluginUtil; +import org.jetbrains.jet.plugin.ProjectRootsUtil; +import org.jetbrains.jet.plugin.configuration.JetModuleTypeManager; import org.jetbrains.jet.plugin.search.usagesSearch.*; public class KotlinReferencesSearcher extends QueryExecutorBase { @@ -58,7 +59,9 @@ public class KotlinReferencesSearcher extends QueryExecutorBase candidateClassNames = ImmutableList.of( - kotlinPackageClassFqName, - "kotlin.Unit", - // For older versions - "kotlin.namespace", - "jet.Unit" - ); - - for (String className : candidateClassNames) { - PsiClass psiClass = JavaPsiFacade.getInstance(scope.getProject()).findClass(className, scope); - if (psiClass != null) { - return psiClass; - } - } - return null; - } - public static void updateLibraries( @NotNull final Project project, @NotNull final Collection libraries diff --git a/idea/tests/org/jetbrains/jet/plugin/JetLightCodeInsightFixtureTestCase.java b/idea/tests/org/jetbrains/jet/plugin/JetLightCodeInsightFixtureTestCase.java index bfb0698042c..7198290e6eb 100644 --- a/idea/tests/org/jetbrains/jet/plugin/JetLightCodeInsightFixtureTestCase.java +++ b/idea/tests/org/jetbrains/jet/plugin/JetLightCodeInsightFixtureTestCase.java @@ -33,7 +33,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.InTextDirectivesUtils; import org.jetbrains.jet.JetTestCaseBuilder; import org.jetbrains.jet.lang.psi.JetFile; -import org.jetbrains.jet.plugin.actions.internal.KotlinInternalModeToggleAction; +import org.jetbrains.jet.plugin.actions.internal.KotlinInternalMode; import org.jetbrains.jet.plugin.references.BuiltInsReferenceResolver; import org.jetbrains.jet.utils.UtilsPackage; @@ -51,13 +51,13 @@ public abstract class JetLightCodeInsightFixtureTestCase extends LightCodeInsigh ((StartupManagerImpl) StartupManager.getInstance(getProject())).runPostStartupActivities(); VfsRootAccess.allowRootAccess(JetTestCaseBuilder.getHomeDirectory()); - kotlinInternalModeOriginalValue = KotlinInternalModeToggleAction.OBJECT$.getEnabled(); - KotlinInternalModeToggleAction.OBJECT$.setEnabled(true); + kotlinInternalModeOriginalValue = KotlinInternalMode.OBJECT$.getEnabled(); + KotlinInternalMode.OBJECT$.setEnabled(true); } @Override protected void tearDown() throws Exception { - KotlinInternalModeToggleAction.OBJECT$.setEnabled(kotlinInternalModeOriginalValue); + KotlinInternalMode.OBJECT$.setEnabled(kotlinInternalModeOriginalValue); VfsRootAccess.disallowRootAccess(JetTestCaseBuilder.getHomeDirectory()); Set builtInsSources = getProject().getComponent(BuiltInsReferenceResolver.class).getBuiltInsSources();