diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index 7273f66e7cc..1cb76215231 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -24,9 +24,6 @@ org.jetbrains.jet.plugin.references.BuiltInsReferenceResolver - - org.jetbrains.jet.plugin.highlighter.DeclarationHintSupport - org.jetbrains.jet.plugin.versions.OutdatedKotlinRuntimeNotification diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/DeclarationHintSupport.java b/idea/src/org/jetbrains/jet/plugin/highlighter/DeclarationHintSupport.java deleted file mode 100644 index 7bc783cfc24..00000000000 --- a/idea/src/org/jetbrains/jet/plugin/highlighter/DeclarationHintSupport.java +++ /dev/null @@ -1,217 +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.highlighter; - -import com.intellij.codeInsight.hint.HintManager; -import com.intellij.codeInsight.hint.HintManagerImpl; -import com.intellij.codeInsight.hint.HintUtil; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.components.AbstractProjectComponent; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.editor.EditorFactory; -import com.intellij.openapi.editor.event.EditorMouseEvent; -import com.intellij.openapi.editor.event.EditorMouseEventArea; -import com.intellij.openapi.editor.event.EditorMouseMotionAdapter; -import com.intellij.openapi.progress.ProgressIndicator; -import com.intellij.openapi.progress.util.ProgressIndicatorBase; -import com.intellij.openapi.project.DumbService; -import com.intellij.openapi.project.Project; -import com.intellij.psi.PsiDocumentManager; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.ui.LightweightHint; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; -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.util.ProjectRootsUtil; -import org.jetbrains.jet.plugin.caches.resolve.ResolvePackage; -import org.jetbrains.jet.plugin.util.LongRunningReadTask; -import org.jetbrains.jet.renderer.DescriptorRenderer; - -import javax.swing.*; -import java.awt.*; - -public class DeclarationHintSupport extends AbstractProjectComponent { - private static final Logger LOG = Logger.getInstance(DeclarationHintSupport.class.getName()); - - private final MouseMoveListener mouseMoveListener = new MouseMoveListener(); - - public DeclarationHintSupport(Project project) { - super(project); - } - - @Override - public void initComponent() { - EditorFactory instance = EditorFactory.getInstance(); - if (instance != null) { - instance.getEventMulticaster().addEditorMouseMotionListener(mouseMoveListener, myProject); - } - else { - LOG.error("Couldn't initialize " + DeclarationHintSupport.class.getName() + " component"); - } - } - - private class MouseMoveListener extends EditorMouseMotionAdapter { - private JetNamedDeclaration lastNamedDeclaration = null; - private ProgressIndicator lastIndicator; - private LightweightHint lastHint; - - @Override - public void mouseMoved(EditorMouseEvent e) { - if (DumbService.getInstance(myProject).isDumb() || !myProject.isInitialized()) { - return; - } - - if (e.isConsumed() || e.getArea() != EditorMouseEventArea.EDITING_AREA) { - return; - } - - Editor editor = e.getEditor(); - PsiFile psiFile = PsiDocumentManager.getInstance(myProject).getPsiFile(editor.getDocument()); - if (psiFile == null || psiFile.getLanguage() != JetLanguage.INSTANCE || !ProjectRootsUtil.isInProjectOrLibraryContent(psiFile)) { - return; - } - - JetFile jetFile = (JetFile) psiFile; - - int offset = editor.logicalPositionToOffset(editor.xyToLogicalPosition(e.getMouseEvent().getPoint())); - PsiElement elementAtCursor = psiFile.findElementAt(offset); - JetNamedDeclaration declaration = PsiTreeUtil.getParentOfType(elementAtCursor, JetNamedDeclaration.class); - - if (declaration != null && declaration.getNameIdentifier() == elementAtCursor) { - if (lastNamedDeclaration == declaration) { - return; - } - - if (lastIndicator != null) { - lastIndicator.cancel(); - } - - lastNamedDeclaration = declaration; - lastIndicator = new ProgressIndicatorBase(); - - // Move long resolve operation to another thread - searchResolvedDescriptor(jetFile, declaration, editor, lastIndicator); - } - else { - // Mouse moved out of the declaration - can stop search for descriptor - if (lastIndicator != null) { - lastIndicator.cancel(); - } - - if (lastHint != null) { - lastHint.hide(); - } - - lastHint = null; - lastNamedDeclaration = null; - lastIndicator = null; - } - } - - // Executed in Event dispatch thread - private void onDescriptorReady( - @Nullable DeclarationDescriptor descriptor, - @NotNull JetNamedDeclaration declaration, - @NotNull Editor editor, - @NotNull PsiFile psiFile, - @NotNull ProgressIndicator indicator - ) { - if (indicator != lastIndicator) { - // This is callback for some outdated request - return; - } - - // Clear - last request is done - lastNamedDeclaration = null; - lastIndicator = null; - - if (descriptor == null) { - return; - } - - if (editor.isDisposed()) { - return; - } - - // Check that cursor is still at the same position - Point mousePosition = editor.getContentComponent().getMousePosition(); - if (mousePosition == null) { - return; - } - - int offset = editor.logicalPositionToOffset(editor.xyToLogicalPosition(mousePosition)); - PsiElement elementAtCursor = psiFile.findElementAt(offset); - - if (elementAtCursor != declaration.getNameIdentifier()) { - return; - } - - JLayeredPane layeredPane = editor.getComponent().getRootPane().getLayeredPane(); - Point point = SwingUtilities.convertPoint(editor.getContentComponent(), mousePosition, layeredPane); - lastHint = new LightweightHint(HintUtil.createInformationLabel(DescriptorRenderer.HTML.render(descriptor))); - ((HintManagerImpl) HintManager.getInstance()).showEditorHint( - lastHint, editor, point, - HintManager.HIDE_BY_ANY_KEY | HintManager.HIDE_BY_TEXT_CHANGE - | HintManager.HIDE_BY_SCROLLING | HintManager.HIDE_BY_OTHER_HINT | HintManager.HIDE_BY_MOUSEOVER, 0, false); - } - - // Moves execution from GUI thread to thread pool thread - private void searchResolvedDescriptor( - @NotNull final JetFile jetFile, - @NotNull final JetNamedDeclaration declaration, - @NotNull final Editor editor, - @NotNull final ProgressIndicator indicator - ) { - ApplicationManager.getApplication().executeOnPooledThread(new Runnable() { - @Override - public void run() { - LongRunningReadTask.runWithWriteActionPriority(indicator, new Runnable() { - @Override - public void run() { - // Executed in the thread from Thread Pool - DeclarationDescriptor descriptor = null; - try { - BindingContext bindingContext = - ResolvePackage.analyzeFully(jetFile); - descriptor = bindingContext.getDiagnostics().forElement(declaration).isEmpty() - ? bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, declaration) - : null; - } - finally { - // Back to GUI thread for submitting result - final DeclarationDescriptor finalDescriptor = descriptor; - ApplicationManager.getApplication().invokeLater(new Runnable() { - @Override - public void run() { - onDescriptorReady(finalDescriptor, declaration, editor, jetFile, indicator); - } - }); - } - } - }); - } - }); - } - } -}