/* * Copyright 2005-2016 Sixth and Red River Software, Bas Leijdekkers * * 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 com.sixrr.metrics.utils; import com.intellij.psi.*; import com.intellij.psi.search.searches.SuperMethodsSearch; import com.intellij.psi.util.MethodSignatureBackedByPsiMethod; import com.intellij.util.Processor; import com.intellij.util.Query; public final class MethodUtils { private MethodUtils() {} public static boolean isConcreteMethod(PsiMethod method) { return method != null && !method.isConstructor() && !method.hasModifierProperty(PsiModifier.ABSTRACT) && !method.hasModifierProperty(PsiModifier.STATIC) && !method.hasModifierProperty(PsiModifier.PRIVATE); } public static boolean hasConcreteSuperMethod(PsiMethod method) { final Query<MethodSignatureBackedByPsiMethod> search = SuperMethodsSearch.search(method, null, true, false); return !search.forEach(new Processor<MethodSignatureBackedByPsiMethod>() { @Override public boolean process(MethodSignatureBackedByPsiMethod superMethod) { return isAbstract(superMethod.getMethod()); } }); } public static boolean isAbstract(PsiMethod method) { if (method.hasModifierProperty(PsiModifier.STATIC) || method.hasModifierProperty(PsiModifier.DEFAULT)) { return false; } if (method.hasModifierProperty(PsiModifier.ABSTRACT)) { return true; } final PsiClass containingClass = method.getContainingClass(); return containingClass != null && containingClass.isInterface(); } public static String calculateSignature(PsiMethod method) { final PsiClass containingClass = method.getContainingClass(); final String className; if (containingClass != null) { className = containingClass.getQualifiedName(); } else { className = ""; } final String methodName = method.getName(); final StringBuilder out = new StringBuilder(50); out.append(className); out.append('.'); out.append(methodName); out.append('('); final PsiParameterList parameterList = method.getParameterList(); final PsiParameter[] parameters = parameterList.getParameters(); for (int i = 0; i < parameters.length; i++) { if (i != 0) { out.append(','); } final PsiType parameterType = parameters[i].getType(); final String parameterTypeText = parameterType.getPresentableText(); out.append(parameterTypeText); } out.append(')'); return out.toString(); } }