From 214f290de72a95bb30b4b64a0b12dfea8f7ab96b Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Mon, 19 Aug 2013 18:06:00 +0400 Subject: [PATCH] Extract interface out of JavaSignatureFormatter --- .../resolve/java/DescriptorResolverUtils.java | 4 +- .../JavaToKotlinMethodMap.java | 2 +- .../PsiBasedMethodSignatureChecker.java | 2 +- .../structure/JavaSignatureFormatter.java | 21 ++++------ .../structure/JavaSignatureFormatterImpl.java | 39 +++++++++++++++++++ 5 files changed, 51 insertions(+), 17 deletions(-) create mode 100644 compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaSignatureFormatterImpl.java diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/DescriptorResolverUtils.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/DescriptorResolverUtils.java index 0502e55b709..76b8d8bd655 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/DescriptorResolverUtils.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/DescriptorResolverUtils.java @@ -109,7 +109,7 @@ public final class DescriptorResolverUtils { if (member instanceof JavaField && ((JavaField) member).isEnumEntry()) return true; if (!(member instanceof JavaMethod)) return false; - String signature = JavaSignatureFormatter.formatMethod((JavaMethod) member); + String signature = JavaSignatureFormatter.getInstance().formatMethod((JavaMethod) member); return "values()".equals(signature) || "valueOf(java.lang.String)".equals(signature); @@ -124,7 +124,7 @@ public final class DescriptorResolverUtils { } public static boolean isObjectMethod(@NotNull JavaMethod method) { - String signature = JavaSignatureFormatter.formatMethod(method); + String signature = JavaSignatureFormatter.getInstance().formatMethod(method); return "hashCode()".equals(signature) || "equals(java.lang.Object)".equals(signature) || "toString()".equals(signature); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/JavaToKotlinMethodMap.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/JavaToKotlinMethodMap.java index d2c34348633..e44ce419307 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/JavaToKotlinMethodMap.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/JavaToKotlinMethodMap.java @@ -57,7 +57,7 @@ public class JavaToKotlinMethodMap { Set allSuperClasses = DescriptorUtils.getAllSuperClasses(containingClass); - String serializedMethod = JavaSignatureFormatter.formatMethod(javaMethod); + String serializedMethod = JavaSignatureFormatter.getInstance().formatMethod(javaMethod); for (ClassData classData : classDatas) { String expectedSerializedFunction = classData.method2Function.get(serializedMethod); if (expectedSerializedFunction == null) continue; diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/PsiBasedMethodSignatureChecker.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/PsiBasedMethodSignatureChecker.java index 44a85a7b968..b4ae173ff71 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/PsiBasedMethodSignatureChecker.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/PsiBasedMethodSignatureChecker.java @@ -86,7 +86,7 @@ public class PsiBasedMethodSignatureChecker implements MethodSignatureChecker { + "super class = " + superFunction.getContainingDeclaration() + "\n" + "sub function = " + function + "\n" + "sub class = " + function.getContainingDeclaration() + "\n" - + "sub method = " + JavaSignatureFormatter.getExternalName(method) + "\n" + + "sub method = " + JavaSignatureFormatter.getInstance().getExternalName(method) + "\n" + "@KotlinSignature = " + SignaturesUtil.getKotlinSignature(annotationResolver, method)); } } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaSignatureFormatter.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaSignatureFormatter.java index cfa7485d68b..dca3dbc0857 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaSignatureFormatter.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaSignatureFormatter.java @@ -16,31 +16,26 @@ package org.jetbrains.jet.lang.resolve.java.structure; -import com.intellij.psi.PsiSubstitutor; -import com.intellij.psi.util.PsiFormatUtil; import org.jetbrains.annotations.NotNull; -import static com.intellij.psi.util.PsiFormatUtilBase.*; - -public class JavaSignatureFormatter { - private JavaSignatureFormatter() { +public abstract class JavaSignatureFormatter { + public static JavaSignatureFormatter getInstance() { + // TODO: ServiceLoader.load + return new JavaSignatureFormatterImpl(); } /** * @return a formatted signature of a method, showing method name and fully qualified names of its parameter types, e.g.: * {@code "foo(double, java.lang.String)"} */ - public static String formatMethod(@NotNull JavaMethod method) { - return PsiFormatUtil.formatMethod(method.getPsi(), PsiSubstitutor.EMPTY, SHOW_NAME | SHOW_PARAMETERS, - SHOW_TYPE | SHOW_FQ_CLASS_NAMES); - } + @NotNull + public abstract String formatMethod(@NotNull JavaMethod method); /** * @return a formatted signature of a method, showing method's containing class, return type and parameter types, all names are fully * qualified, e.g.: * {@code "java.lang.Class boolean isAnnotationPresent(java.lang.Class<? extends java.lang.annotation.Annotation>)"} */ - public static String getExternalName(@NotNull JavaMethod method) { - return PsiFormatUtil.getExternalName(method.getPsi()); - } + @NotNull + public abstract String getExternalName(@NotNull JavaMethod method); } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaSignatureFormatterImpl.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaSignatureFormatterImpl.java new file mode 100644 index 00000000000..1b8c593bbbe --- /dev/null +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaSignatureFormatterImpl.java @@ -0,0 +1,39 @@ +/* + * 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.lang.resolve.java.structure; + +import com.intellij.psi.PsiSubstitutor; +import com.intellij.psi.util.PsiFormatUtil; +import org.jetbrains.annotations.NotNull; + +import static com.intellij.psi.util.PsiFormatUtilBase.*; + +public class JavaSignatureFormatterImpl extends JavaSignatureFormatter { + @NotNull + @Override + public String formatMethod(@NotNull JavaMethod method) { + return PsiFormatUtil.formatMethod(method.getPsi(), PsiSubstitutor.EMPTY, SHOW_NAME | SHOW_PARAMETERS, + SHOW_TYPE | SHOW_FQ_CLASS_NAMES); + } + + @NotNull + @Override + public String getExternalName(@NotNull JavaMethod method) { + String result = PsiFormatUtil.getExternalName(method.getPsi()); + return result == null ? "null" : result; + } +}