J2K: convert + get rid of analyzeFully (3 files)
This commit is contained in:
+41
-47
@@ -14,72 +14,66 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jetbrains.kotlin.idea.highlighter;
|
package org.jetbrains.kotlin.idea.highlighter
|
||||||
|
|
||||||
import com.intellij.lang.annotation.AnnotationHolder;
|
import com.intellij.lang.annotation.AnnotationHolder
|
||||||
import com.intellij.lang.annotation.Annotator;
|
import com.intellij.lang.annotation.Annotator
|
||||||
import com.intellij.openapi.progress.ProcessCanceledException;
|
import com.intellij.openapi.progress.ProcessCanceledException
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.kotlin.checkers.DebugInfoUtil
|
||||||
import org.jetbrains.kotlin.checkers.DebugInfoUtil;
|
import org.jetbrains.kotlin.idea.actions.internal.KotlinInternalMode
|
||||||
import org.jetbrains.kotlin.idea.actions.internal.KotlinInternalMode;
|
import org.jetbrains.kotlin.idea.caches.resolve.*
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.ResolutionUtils;
|
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
|
||||||
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil;
|
import org.jetbrains.kotlin.psi.KtCodeFragment
|
||||||
import org.jetbrains.kotlin.psi.KtCodeFragment;
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.psi.KtFile;
|
import org.jetbrains.kotlin.psi.KtReferenceExpression
|
||||||
import org.jetbrains.kotlin.psi.KtReferenceExpression;
|
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Quick showing possible problems with Kotlin internals in IDEA with tooltips
|
* Quick showing possible problems with Kotlin internals in IDEA with tooltips
|
||||||
*/
|
*/
|
||||||
public class DebugInfoAnnotator implements Annotator {
|
class DebugInfoAnnotator : Annotator {
|
||||||
|
|
||||||
public static boolean isDebugInfoEnabled() {
|
override fun annotate(element: PsiElement, holder: AnnotationHolder) {
|
||||||
return KotlinInternalMode.Instance.getEnabled();
|
if (!isDebugInfoEnabled || !ProjectRootsUtil.isInProjectOrLibSource(element)) {
|
||||||
}
|
return
|
||||||
|
|
||||||
@Override
|
|
||||||
public void annotate(@NotNull PsiElement element, @NotNull final AnnotationHolder holder) {
|
|
||||||
if (!isDebugInfoEnabled() || !ProjectRootsUtil.isInProjectOrLibSource(element)) {
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (element instanceof KtFile && !(element instanceof KtCodeFragment)) {
|
if (element is KtFile && element !is KtCodeFragment) {
|
||||||
KtFile file = (KtFile) element;
|
|
||||||
try {
|
try {
|
||||||
BindingContext bindingContext = ResolutionUtils.analyzeFully(file);
|
val bindingContext = element.analyzeWithDeclarations()
|
||||||
DebugInfoUtil.markDebugAnnotations(file, bindingContext, new DebugInfoUtil.DebugInfoReporter() {
|
DebugInfoUtil.markDebugAnnotations(element, bindingContext, object : DebugInfoUtil.DebugInfoReporter() {
|
||||||
@Override
|
override fun reportElementWithErrorType(expression: KtReferenceExpression) {
|
||||||
public void reportElementWithErrorType(@NotNull KtReferenceExpression expression) {
|
holder.createErrorAnnotation(expression, "[DEBUG] Resolved to error element").textAttributes =
|
||||||
holder.createErrorAnnotation(expression, "[DEBUG] Resolved to error element")
|
KotlinHighlightingColors.RESOLVED_TO_ERROR
|
||||||
.setTextAttributes(KotlinHighlightingColors.RESOLVED_TO_ERROR);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
override fun reportMissingUnresolved(expression: KtReferenceExpression) {
|
||||||
public void reportMissingUnresolved(@NotNull KtReferenceExpression expression) {
|
holder.createErrorAnnotation(
|
||||||
holder.createErrorAnnotation(expression,
|
expression,
|
||||||
"[DEBUG] Reference is not resolved to anything, but is not marked unresolved")
|
"[DEBUG] Reference is not resolved to anything, but is not marked unresolved"
|
||||||
.setTextAttributes(KotlinHighlightingColors.DEBUG_INFO);
|
).textAttributes = KotlinHighlightingColors.DEBUG_INFO
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
override fun reportUnresolvedWithTarget(expression: KtReferenceExpression, target: String) {
|
||||||
public void reportUnresolvedWithTarget(@NotNull KtReferenceExpression expression, @NotNull String target) {
|
|
||||||
holder.createErrorAnnotation(expression, "[DEBUG] Reference marked as unresolved is actually resolved to " + target)
|
holder.createErrorAnnotation(expression, "[DEBUG] Reference marked as unresolved is actually resolved to " + target)
|
||||||
.setTextAttributes(KotlinHighlightingColors.DEBUG_INFO);
|
.textAttributes =
|
||||||
|
KotlinHighlightingColors.DEBUG_INFO
|
||||||
}
|
}
|
||||||
});
|
})
|
||||||
}
|
} catch (e: ProcessCanceledException) {
|
||||||
catch (ProcessCanceledException e) {
|
throw e
|
||||||
throw e;
|
} catch (e: Throwable) {
|
||||||
}
|
|
||||||
catch (Throwable e) {
|
|
||||||
// TODO
|
// TODO
|
||||||
holder.createErrorAnnotation(element, e.getClass().getCanonicalName() + ": " + e.getMessage());
|
holder.createErrorAnnotation(element, e.javaClass.canonicalName + ": " + e.message)
|
||||||
e.printStackTrace();
|
e.printStackTrace()
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
|
||||||
|
val isDebugInfoEnabled: Boolean
|
||||||
|
get() = KotlinInternalMode.enabled
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+28
-29
@@ -14,39 +14,38 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jetbrains.kotlin.idea.highlighter;
|
package org.jetbrains.kotlin.idea.highlighter
|
||||||
|
|
||||||
import com.intellij.lang.annotation.AnnotationHolder;
|
import com.intellij.lang.annotation.AnnotationHolder
|
||||||
import com.intellij.lang.annotation.Annotator;
|
import com.intellij.lang.annotation.Annotator
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.PsiFile;
|
import org.jetbrains.kotlin.asJava.getJvmSignatureDiagnostics
|
||||||
import com.intellij.psi.search.GlobalSearchScope;
|
import org.jetbrains.kotlin.idea.caches.resolve.analyzeWithContent
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.kotlin.idea.caches.resolve.analyzeWithDeclarations
|
||||||
import org.jetbrains.kotlin.asJava.DuplicateJvmSignatureUtilKt;
|
import org.jetbrains.kotlin.idea.caches.resolve.getModuleInfo
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.GetModuleInfoKt;
|
import org.jetbrains.kotlin.idea.project.TargetPlatformDetector
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.ResolutionUtils;
|
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
|
||||||
import org.jetbrains.kotlin.idea.project.TargetPlatformDetector;
|
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||||
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil;
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.psi.KtDeclaration;
|
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform
|
||||||
import org.jetbrains.kotlin.psi.KtElement;
|
|
||||||
import org.jetbrains.kotlin.psi.KtFile;
|
|
||||||
import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics;
|
|
||||||
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform;
|
|
||||||
|
|
||||||
public class DuplicateJvmSignatureAnnotator implements Annotator {
|
class DuplicateJvmSignatureAnnotator : Annotator {
|
||||||
@Override
|
override fun annotate(element: PsiElement, holder: AnnotationHolder) {
|
||||||
public void annotate(@NotNull PsiElement element, @NotNull AnnotationHolder holder) {
|
if (element !is KtFile && element !is KtDeclaration) return
|
||||||
if (!(element instanceof KtFile) && !(element instanceof KtDeclaration)) return;
|
if (!ProjectRootsUtil.isInProjectSource(element)) return
|
||||||
if (!ProjectRootsUtil.isInProjectSource(element)) return;
|
|
||||||
|
|
||||||
PsiFile file = element.getContainingFile();
|
val file = element.containingFile
|
||||||
if (!(file instanceof KtFile) || TargetPlatformDetector.getPlatform((KtFile) file) != JvmPlatform.INSTANCE) return;
|
if (file !is KtFile || TargetPlatformDetector.getPlatform(file) !== JvmPlatform) return
|
||||||
|
|
||||||
Diagnostics otherDiagnostics = ResolutionUtils.analyzeFully((KtElement) element).getDiagnostics();
|
val otherDiagnostics = when (element) {
|
||||||
GlobalSearchScope moduleScope = GetModuleInfoKt.getModuleInfo(element).contentScope();
|
is KtDeclaration -> element.analyzeWithContent()
|
||||||
Diagnostics diagnostics = DuplicateJvmSignatureUtilKt.getJvmSignatureDiagnostics(element, otherDiagnostics, moduleScope);
|
is KtFile -> element.analyzeWithDeclarations()
|
||||||
|
else -> throw AssertionError("DuplicateJvmSignatureAnnotator: should not get here! Element: ${element.text}")
|
||||||
|
}.diagnostics
|
||||||
|
|
||||||
if (diagnostics == null) return;
|
val moduleScope = element.getModuleInfo().contentScope()
|
||||||
new KotlinPsiChecker().annotateElement(element, holder, diagnostics);
|
val diagnostics = getJvmSignatureDiagnostics(element, otherDiagnostics, moduleScope) ?: return
|
||||||
|
|
||||||
|
KotlinPsiChecker().annotateElement(element, holder, diagnostics)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,52 +14,40 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jetbrains.kotlin.idea.actions.internal;
|
package org.jetbrains.kotlin.idea.actions.internal
|
||||||
|
|
||||||
import com.intellij.openapi.actionSystem.AnAction;
|
import com.intellij.openapi.actionSystem.AnAction
|
||||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
import com.intellij.openapi.actionSystem.AnActionEvent
|
||||||
import com.intellij.openapi.actionSystem.CommonDataKeys;
|
import com.intellij.openapi.actionSystem.CommonDataKeys
|
||||||
import com.intellij.openapi.application.ApplicationManager;
|
import com.intellij.openapi.application.ApplicationManager
|
||||||
import com.intellij.openapi.editor.Editor;
|
import org.jetbrains.kotlin.checkers.CheckerTestUtil
|
||||||
import com.intellij.psi.PsiFile;
|
import org.jetbrains.kotlin.idea.caches.resolve.*
|
||||||
import org.jetbrains.kotlin.checkers.CheckerTestUtil;
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.ResolutionUtils;
|
import java.awt.*
|
||||||
import org.jetbrains.kotlin.psi.KtFile;
|
import java.awt.datatransfer.StringSelection
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext;
|
|
||||||
|
|
||||||
import java.awt.*;
|
class CopyAsDiagnosticTestAction : AnAction() {
|
||||||
import java.awt.datatransfer.Clipboard;
|
override fun actionPerformed(e: AnActionEvent) {
|
||||||
import java.awt.datatransfer.ClipboardOwner;
|
val editor = e.getData(CommonDataKeys.EDITOR)
|
||||||
import java.awt.datatransfer.StringSelection;
|
val psiFile = e.getData(CommonDataKeys.PSI_FILE)
|
||||||
import java.awt.datatransfer.Transferable;
|
assert(editor != null && psiFile != null)
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class CopyAsDiagnosticTestAction extends AnAction {
|
val bindingContext = (psiFile as KtFile).analyzeWithDeclarations()
|
||||||
@Override
|
|
||||||
public void actionPerformed(AnActionEvent e) {
|
|
||||||
Editor editor = e.getData(CommonDataKeys.EDITOR);
|
|
||||||
PsiFile psiFile = e.getData(CommonDataKeys.PSI_FILE);
|
|
||||||
assert editor != null && psiFile != null;
|
|
||||||
|
|
||||||
BindingContext bindingContext = ResolutionUtils.analyzeFully((KtFile) psiFile);
|
val diagnostics = CheckerTestUtil.getDiagnosticsIncludingSyntaxErrors(
|
||||||
|
bindingContext, psiFile, false, null, null, false
|
||||||
|
)
|
||||||
|
val result = CheckerTestUtil.addDiagnosticMarkersToText(psiFile, diagnostics).toString()
|
||||||
|
|
||||||
List<CheckerTestUtil.ActualDiagnostic> diagnostics =
|
val clipboard = Toolkit.getDefaultToolkit().systemClipboard
|
||||||
CheckerTestUtil.getDiagnosticsIncludingSyntaxErrors(bindingContext, psiFile, false, null, null, false);
|
clipboard.setContents(StringSelection(result)) { _, _ -> }
|
||||||
String result = CheckerTestUtil.addDiagnosticMarkersToText(psiFile, diagnostics).toString();
|
|
||||||
|
|
||||||
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
|
|
||||||
clipboard.setContents(new StringSelection(result), new ClipboardOwner() {
|
|
||||||
@Override
|
|
||||||
public void lostOwnership(Clipboard clipboard, Transferable contents) {}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
override fun update(e: AnActionEvent) {
|
||||||
public void update(AnActionEvent e) {
|
e.presentation.isVisible = ApplicationManager.getApplication().isInternal
|
||||||
e.getPresentation().setVisible(ApplicationManager.getApplication().isInternal());
|
|
||||||
|
|
||||||
Editor editor = e.getData(CommonDataKeys.EDITOR);
|
val editor = e.getData(CommonDataKeys.EDITOR)
|
||||||
PsiFile psiFile = e.getData(CommonDataKeys.PSI_FILE);
|
val psiFile = e.getData(CommonDataKeys.PSI_FILE)
|
||||||
e.getPresentation().setEnabled(editor != null && psiFile instanceof KtFile);
|
e.presentation.isEnabled = editor != null && psiFile is KtFile
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user