private static void addParameterUsages(
     PsiParameter parameter, ArrayList<UsageInfo> results, ParameterInfo info) {
   PsiManager manager = parameter.getManager();
   GlobalSearchScope projectScope = GlobalSearchScope.projectScope(manager.getProject());
   for (PsiReference psiReference : ReferencesSearch.search(parameter, projectScope, false)) {
     PsiElement parmRef = psiReference.getElement();
     UsageInfo usageInfo =
         new ChangeSignatureParameterUsageInfo(parmRef, parameter.getName(), info.getName());
     results.add(usageInfo);
   }
 }
 public static boolean isAvailable(
     @Nullable PsiParameter myParameter, @Nullable PsiType type, @Nullable PsiClass targetClass) {
   return myParameter != null
       && myParameter.isValid()
       && myParameter.getManager().isInProject(myParameter)
       && myParameter.getDeclarationScope() instanceof PsiMethod
       && ((PsiMethod) myParameter.getDeclarationScope()).getBody() != null
       && type != null
       && type.isValid()
       && targetClass != null
       && !targetClass.isInterface()
       && getParameterAssignedToField(myParameter) == null;
 }
 @Nullable
 private static PsiParameter findParamByName(
     String newName,
     PsiType type,
     PsiParameter[] newParameters,
     ParameterInfoImpl[] parameterInfos) {
   for (PsiParameter newParameter : newParameters) {
     if (Comparing.strEqual(newName, newParameter.getName())) {
       return newParameter;
     }
   }
   for (int i = 0; i < newParameters.length; i++) {
     if (parameterInfos[i].getOldIndex() == -1) {
       final PsiParameter parameter = newParameters[i];
       final PsiType paramType =
           parameterInfos[i].getTypeWrapper().getType(parameter, parameter.getManager());
       if (type.isAssignableFrom(paramType)) {
         return parameter;
       }
     }
   }
   return null;
 }