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(); }
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; }
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; }
/** * 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; }
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; }