From bd4d6c810fd540ac63232eb6ae7b36fadfa1d359 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Tue, 23 Apr 2013 17:35:42 +0400 Subject: [PATCH] Optimization: hierarchical signatures build only for non-static methods (1 sec on toString()) --- .../lang/resolve/java/resolver/JavaMethodSignatureUtil.java | 1 + .../jet/lang/resolve/java/resolver/RawTypesCheck.java | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaMethodSignatureUtil.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaMethodSignatureUtil.java index 946e3f5bb3b..d726b1d5239 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaMethodSignatureUtil.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaMethodSignatureUtil.java @@ -29,6 +29,7 @@ import java.util.List; class JavaMethodSignatureUtil { // This and following methods are originally from com.intellij.codeInsight.daemon.impl.analysis.HighlightMethodUtil static boolean isMethodReturnTypeCompatible(@NotNull PsiMethod method) { + if (method.hasModifierProperty(PsiModifier.STATIC)) return true; HierarchicalMethodSignature methodSignature = method.getHierarchicalMethodSignature(); List superSignatures = methodSignature.getSuperSignatures(); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/RawTypesCheck.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/RawTypesCheck.java index dcc5ec8f888..5b29e795f57 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/RawTypesCheck.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/RawTypesCheck.java @@ -90,6 +90,10 @@ public class RawTypesCheck { } static boolean hasRawTypesInHierarchicalSignature(@NotNull PsiMethod method) { + // This is a very important optimization: package-classes are big and full of static methods + // building method hierarchies for such classes takes a very long time + if (method.hasModifierProperty(PsiModifier.STATIC)) return false; + if (hasRawTypesInSignature(method)) { return true; }