From 50c8c6ea82423cb8c69d1ad74fc054db8c687aea Mon Sep 17 00:00:00 2001 From: Evgeny Mandrikov Date: Wed, 8 Apr 2020 09:20:02 +0200 Subject: [PATCH] SONARJAVA-3317 To improve performance precompute JMethodSymbol.signature --- .../main/java/org/sonar/java/model/JMethodSymbol.java | 10 +++++++--- .../src/main/java/org/sonar/java/model/JSema.java | 4 ---- .../java/org/sonar/java/model/ClassesLayoutTest.java | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/java-frontend/src/main/java/org/sonar/java/model/JMethodSymbol.java b/java-frontend/src/main/java/org/sonar/java/model/JMethodSymbol.java index 8a277d0384f..32bdd1efa14 100644 --- a/java-frontend/src/main/java/org/sonar/java/model/JMethodSymbol.java +++ b/java-frontend/src/main/java/org/sonar/java/model/JMethodSymbol.java @@ -19,6 +19,7 @@ */ package org.sonar.java.model; +import org.eclipse.jdt.core.dom.ASTUtils; import org.eclipse.jdt.core.dom.IMethodBinding; import org.eclipse.jdt.core.dom.ITypeBinding; import org.sonar.java.resolve.Symbols; @@ -53,8 +54,13 @@ final class JMethodSymbol extends JSymbol implements Symbol.MethodSymbol { */ private MethodSymbol overriddenSymbol = Symbols.unknownMethodSymbol; + private final String signature; + JMethodSymbol(JSema sema, IMethodBinding methodBinding) { super(sema, methodBinding); + this.signature = methodBinding().getDeclaringClass().getBinaryName() + + "#" + name() + + ASTUtils.signature(methodBinding().getMethodDeclaration()); } IMethodBinding methodBinding() { @@ -134,9 +140,7 @@ private IMethodBinding find(Predicate predicate, ITypeBinding t) @Override public String signature() { - return methodBinding().getDeclaringClass().getBinaryName() - + "#" + name() - + JSema.signature(methodBinding().getMethodDeclaration()); + return signature; } @Nullable diff --git a/java-frontend/src/main/java/org/sonar/java/model/JSema.java b/java-frontend/src/main/java/org/sonar/java/model/JSema.java index daff2b9e074..e97841c0e26 100644 --- a/java-frontend/src/main/java/org/sonar/java/model/JSema.java +++ b/java-frontend/src/main/java/org/sonar/java/model/JSema.java @@ -133,8 +133,4 @@ IAnnotationBinding[] resolvePackageAnnotations(String packageName) { return ASTUtils.resolvePackageAnnotations(ast, packageName); } - static String signature(IMethodBinding methodBinding) { - return ASTUtils.signature(methodBinding); - } - } diff --git a/java-frontend/src/test/java/org/sonar/java/model/ClassesLayoutTest.java b/java-frontend/src/test/java/org/sonar/java/model/ClassesLayoutTest.java index 5785c3817aa..a480422e7a4 100644 --- a/java-frontend/src/test/java/org/sonar/java/model/ClassesLayoutTest.java +++ b/java-frontend/src/test/java/org/sonar/java/model/ClassesLayoutTest.java @@ -106,8 +106,8 @@ void symbol_type() { @Test void symbol_method() { assertAll( - () -> assertThat(instanceSize(JMethodSymbol.class, X86_64)).isEqualTo(88), - () -> assertThat(instanceSize(JMethodSymbol.class, X86_64_COOPS)).isEqualTo(48) + () -> assertThat(instanceSize(JMethodSymbol.class, X86_64)).isEqualTo(96), + () -> assertThat(instanceSize(JMethodSymbol.class, X86_64_COOPS)).isEqualTo(56) ); }