コード例 #1
0
  private IMember openDialog(
      CorrespondingMemberRequest request,
      Collection<IType> proposedClasses,
      Collection<IMethod> proposedMethods,
      boolean perfectMatches) {
    String promptText = request.getPromptText();
    String infoText = null;
    if (!perfectMatches) {
      promptText =
          String.format(
              "%s %s%s",
              promptText,
              StringConstants.NEWLINE,
              "We could find the following classes, but their packages do not match:");
      infoText =
          "Please note that theses classes will not be considered for other MoreUnit features such as test launching or refactoring.";
    }

    IMember startMember =
        request.getCurrentMethod() != null ? request.getCurrentMethod() : getType();
    IMember defaultSelection = getDefaultSelection(proposedClasses, proposedMethods, startMember);
    MemberContentProvider contentProvider =
        new MemberContentProvider(proposedClasses, proposedMethods, defaultSelection)
            .withAction(
                new CreateNewClassAction() {
                  @Override
                  public IType execute() {
                    return newCorrespondingClassWizard(getType()).open();
                  }
                });

    return new ChooseDialog<IMember>(promptText, infoText, contentProvider).getChoice();
  }
コード例 #2
0
 private OneCorrespondingMemberAction getLikelyCorrespondingClass(
     CorrespondingMemberRequest request) {
   Collection<IType> proposedClasses = getCorrespondingClasses(true);
   if (!proposedClasses.isEmpty()) {
     return new OpenChoiceDialog(request, proposedClasses, false);
   } else if (request.shouldCreateClassIfNoResult()) {
     return new OpenNewClassWizard();
   }
   return null;
 }
コード例 #3
0
  private Collection<IMethod> findCorrespondingMethodsInClasses(
      CorrespondingMemberRequest request, Collection<IType> classes) {
    Collection<IMethod> proposedMethods = new LinkedHashSet<IMethod>();

    if (request.shouldReturn(MemberType.TYPE_OR_METHOD)) {
      IMethod currentMethod = request.getCurrentMethod();
      if (currentMethod != null && !classes.isEmpty()) {
        if (request.getMethodSearchMode().searchByName) {
          proposedMethods.addAll(getCorrespondingMethodsInClasses(currentMethod, classes));
        }
        if (request.getMethodSearchMode().searchByCall) {
          proposedMethods.addAll(
              getCallRelationshipFinder(currentMethod, classes)
                  .getMatches(new NullProgressMonitor()));
        }
      }
    }

    return proposedMethods;
  }
コード例 #4
0
  /**
   * Returns one member corresponding to the given method of this type or to this type (for instance
   * a test method calling the given method if this type is a class under test, or a method under
   * test called by the given test method if this type is a test case, or a test case corresponding
   * to this class, etc...). If there are several resulting members the user has to make a choice
   * via a dialog. If no member is found <tt>null</tt> is returned, or a wizard opens to create a
   * new type if <tt>createIfNecessary</tt> is true.
   *
   * @param request the details of the request for corresponding member.
   * @return one corresponding member or <code>null</code>
   * @see CorrespondingMemberRequest
   */
  public IMember getOneCorrespondingMember(CorrespondingMemberRequest request) {
    final Collection<IType> proposedClasses = getCorrespondingClasses(false);

    final OneCorrespondingMemberAction action;
    if (proposedClasses.isEmpty()) {
      action = getLikelyCorrespondingClass(request);
    } else {
      action = getPerfectCorrespondingMember(request, proposedClasses);
    }

    if (action == null) {
      return null;
    }

    IMember memberToJump = action.getCorrespondingMember();

    registerJump(request.getCurrentMethod(), memberToJump);
    return memberToJump;
  }
コード例 #5
0
  private OneCorrespondingMemberAction getPerfectCorrespondingMember(
      CorrespondingMemberRequest request, Collection<IType> proposedClasses) {
    Collection<IMethod> proposedMethods =
        findCorrespondingMethodsInClasses(request, proposedClasses);

    if (proposedMethods.size() == 1) {
      return new ReturnMember(proposedMethods.iterator().next());
    } else if (proposedMethods.size() > 1) {
      return new OpenChoiceDialog(request, proposedClasses, proposedMethods, true);
    } else {
      if (proposedClasses.size() == 1) {
        return new ReturnMember(proposedClasses.iterator().next());
      } else if (proposedClasses.size() > 1) {
        return new OpenChoiceDialog(request, proposedClasses, true);
      } else if (request.shouldCreateClassIfNoResult()) {
        return new OpenNewClassWizard();
      }
    }
    return null;
  }