private void performAction( String from, String to, final int docCommentPolicy, String[] expectedConflicts, final String[] toPullUp) { final JSClassResolver resolver = JSDialectSpecificHandlersFactory.forLanguage(JavaScriptSupportLoader.ECMA_SCRIPT_L4) .getClassResolver(); final JSClass sourceClass = (JSClass) resolver.findClassByQName(from, GlobalSearchScope.projectScope(getProject())); assertNotNull("source class not found: " + sourceClass, sourceClass); final JSClass targetClass = (JSClass) resolver.findClassByQName(to, GlobalSearchScope.projectScope(getProject())); assertNotNull("target class not found: " + targetClass, targetClass); assertTrue( "Source should be a subclass of target", JSInheritanceUtil.isParentClass(sourceClass, targetClass)); final List<JSMemberInfo> memberInfos = getMemberInfos(toPullUp, sourceClass, false); final JSMemberInfo[] infosArray = JSMemberInfo.getSelected(memberInfos, sourceClass, Conditions.<JSMemberInfo>alwaysTrue()); MultiMap<PsiElement, String> conflicts = JSPullUpConflictsUtil.checkConflicts( infosArray, sourceClass, targetClass, new JSInterfaceContainmentVerifier() { @Override public boolean checkedInterfacesContain(JSFunction psiMethod) { return JSPullUpHelper.checkedInterfacesContain(memberInfos, psiMethod); } }, JSVisibilityUtil.DEFAULT_OPTIONS); ArrayList<String> messages = new ArrayList<String>(conflicts.values()); for (int i = 0; i < messages.size(); i++) { messages.set(i, messages.get(i).replaceAll("<[^>]+>", "")); } assertSameElements(messages, expectedConflicts); if (conflicts.isEmpty()) { WriteCommandAction.runWriteCommandAction( null, new Runnable() { public void run() { new JSPullUpHelper(sourceClass, targetClass, infosArray, docCommentPolicy) .moveMembersToBase(); myProject.getComponent(PostprocessReformattingAspect.class).doPostponedFormatting(); } }); FileDocumentManager.getInstance().saveAllDocuments(); } }
private void performAction( String sourceClassName, final String targetClassName, final String visibility, final String[] memberNames) throws Exception { final JSClassResolver resolver = JSDialectSpecificHandlersFactory.forLanguage(JavaScriptSupportLoader.ECMA_SCRIPT_L4) .getClassResolver(); final JSClass sourceClass = (JSClass) resolver.findClassByQName(sourceClassName, JSMoveMembersDialog.getScope(myProject)); assertNotNull("Class " + sourceClassName + " not found", sourceClass); JSClass targetClass = (JSClass) resolver.findClassByQName(targetClassName, JSMoveMembersDialog.getScope(myProject)); assertNotNull("Class " + targetClassName + " not found", targetClass); final List<JSMemberInfo> memberInfos = new ArrayList<>(); JSMemberInfo.extractStaticMembers( sourceClass, memberInfos, new MemberInfoBase.Filter<JSAttributeListOwner>() { @Override public boolean includeMember(JSAttributeListOwner member) { return memberNames.length == 0 || ArrayUtil.contains(member.getName(), memberNames); } }); JSMemberInfo.sortByOffset(memberInfos); for (JSMemberInfo memberInfo : memberInfos) { memberInfo.setChecked(true); } new JSMoveMembersProcessor( myProject, null, sourceClass, JSMoveMembersDialog.getScope(myProject), new JSMoveMembersOptions() { @Override public JSAttributeListOwner[] getSelectedMembers() { final JSMemberInfo[] selected = JSMemberInfo.getSelected(memberInfos, sourceClass, Conditions.alwaysTrue()); JSAttributeListOwner[] result = new JSAttributeListOwner[selected.length]; for (int i = 0; i < result.length; i++) { result[i] = selected[i].getMember(); } return result; } @Override public String getTargetClassName() { return targetClassName; } @Override public String getMemberVisibility() { return visibility; } }) .run(); myProject.getComponent(PostprocessReformattingAspect.class).doPostponedFormatting(); FileDocumentManager.getInstance().saveAllDocuments(); }