Search in sources :

Example 1 with JSMemberInfo

use of com.intellij.lang.javascript.refactoring.util.JSMemberInfo in project intellij-plugins by JetBrains.

the class FlexExtractSuperTest method performAction.

private void performAction(boolean classNotInterface, String from, final String extractedSuperName, int docCommentPolicy, JSExtractSuperProcessor.Mode mode, String[] members, String[] conflicts) {
    JSClass sourceClass = JSTestUtils.findClassByQName(from, GlobalSearchScope.moduleScope(myModule));
    final List<JSMemberInfo> memberInfos = FlexPullUpTest.getMemberInfos(members, sourceClass, false);
    JSMemberInfo.sortByOffset(memberInfos);
    JSMemberInfo[] infosArray = JSMemberInfo.getSelected(memberInfos, sourceClass, Conditions.alwaysTrue());
    try {
        final PsiElement finalSourceClass = sourceClass;
        PsiDirectory dir = WriteCommandAction.runWriteCommandAction(null, (Computable<PsiDirectory>) () -> ActionScriptCreateClassOrInterfaceFix.findOrCreateDirectory(StringUtil.getPackageName(extractedSuperName), finalSourceClass));
        new JSExtractSuperProcessor(sourceClass, infosArray, StringUtil.getShortName(extractedSuperName), StringUtil.getPackageName(extractedSuperName), docCommentPolicy, mode, classNotInterface, dir).run();
        assertEquals("Conflicts expected:\n" + StringUtil.join(conflicts, "\n"), 0, conflicts.length);
        myProject.getComponent(PostprocessReformattingAspect.class).doPostponedFormatting();
        FileDocumentManager.getInstance().saveAllDocuments();
    } catch (BaseRefactoringProcessor.ConflictsInTestsException e) {
        assertNotNull("Conflicts not expected but found:" + e.getMessage(), conflicts);
        assertSameElements(e.getMessages(), conflicts);
        myDoCompare = false;
    }
}
Also used : PostprocessReformattingAspect(com.intellij.psi.impl.source.PostprocessReformattingAspect) BaseRefactoringProcessor(com.intellij.refactoring.BaseRefactoringProcessor) PsiDirectory(com.intellij.psi.PsiDirectory) JSExtractSuperProcessor(com.intellij.lang.javascript.refactoring.extractSuper.JSExtractSuperProcessor) JSClass(com.intellij.lang.javascript.psi.ecmal4.JSClass) JSMemberInfo(com.intellij.lang.javascript.refactoring.util.JSMemberInfo) PsiElement(com.intellij.psi.PsiElement)

Example 2 with JSMemberInfo

use of com.intellij.lang.javascript.refactoring.util.JSMemberInfo in project intellij-plugins by JetBrains.

the class FlexUnitTestCreator method getMethodsText.

private static String getMethodsText(final JSClass createdClass, final boolean generateSetUp, final boolean generateTearDown, final JSMemberInfo[] selectedMemberInfos) {
    final StringBuilder builder = new StringBuilder();
    builder.append(generateSetUp ? JSInheritanceUtil.findMember("setUp", createdClass, JSInheritanceUtil.SearchedMemberType.Methods, FunctionKind.SIMPLE, true) == null ? "[Before]\npublic function setUp():void{\n\n}" : "[Before]\npublic override function setUp():void{\nsuper.setUp();\n}" : "");
    builder.append(generateTearDown ? JSInheritanceUtil.findMember("tearDown", createdClass, JSInheritanceUtil.SearchedMemberType.Methods, FunctionKind.SIMPLE, true) == null ? "[After]\npublic function tearDown():void{\n\n}" : "[After]\npublic override function tearDown():void{\nsuper.tearDown();\n}" : "");
    // because getters and setters have same name
    final Set<String> processedNames = new THashSet<>();
    for (final JSMemberInfo info : selectedMemberInfos) {
        final String name = info.getMember().getName();
        if (!processedNames.contains(name)) {
            processedNames.add(name);
            final String testName = "test" + capitalizeFirstCharacter(name);
            builder.append("[Test]\npublic function ").append(testName).append("():void{\n\n}");
        }
    }
    return builder.toString();
}
Also used : JSMemberInfo(com.intellij.lang.javascript.refactoring.util.JSMemberInfo) THashSet(gnu.trove.THashSet)

Example 3 with JSMemberInfo

use of com.intellij.lang.javascript.refactoring.util.JSMemberInfo in project intellij-plugins by JetBrains.

the class FlexUnitTestCreator method createTest.

public void createTest(final Project project, final Editor editor, final PsiFile file) {
    final JSClass jsClass = FlexUnitTestFinder.findContextClass(file);
    if (jsClass == null)
        return;
    final String testClassName;
    final String packageName;
    final JSClass superClass;
    final PsiDirectory targetDirectory;
    final boolean generateSetUp;
    final boolean generateTearDown;
    final JSMemberInfo[] selectedMemberInfos;
    if (ApplicationManager.getApplication().isUnitTestMode()) {
        testClassName = jsClass.getName() + "Test";
        packageName = StringUtil.getPackageName(jsClass.getQualifiedName());
        superClass = null;
        targetDirectory = jsClass.getContainingFile().getContainingDirectory();
        generateSetUp = true;
        generateTearDown = true;
        selectedMemberInfos = new JSMemberInfo[0];
    } else {
        final CreateFlexUnitTestDialog dialog = new CreateFlexUnitTestDialog(ModuleUtilCore.findModuleForPsiElement(jsClass), jsClass);
        dialog.show();
        if (dialog.getExitCode() != DialogWrapper.OK_EXIT_CODE) {
            return;
        }
        testClassName = dialog.getTestClassName();
        packageName = dialog.getPackageName();
        superClass = dialog.getSuperClass();
        targetDirectory = dialog.getTargetDirectory();
        generateSetUp = dialog.isGenerateSetUp();
        generateTearDown = dialog.isGenerateTearDown();
        selectedMemberInfos = dialog.getSelectedMemberInfos();
    }
    final Consumer<JSClass> postProcessRunnable = createdClass -> {
        final String methodsText = getMethodsText(createdClass, generateSetUp, generateTearDown, selectedMemberInfos);
        if (!methodsText.isEmpty()) {
            final PsiElement methods = JSChangeUtil.createJSTreeFromText(project, "{" + methodsText + "}", JavaScriptSupportLoader.ECMA_SCRIPT_L4).getPsi();
            if (methods != null) {
                for (final PsiElement psiElement : PsiTreeUtil.getChildrenOfTypeAsList(methods, JSFunction.class)) {
                    createdClass.add(psiElement);
                }
            }
        }
        CodeStyleManager.getInstance(project).reformat(createdClass);
        createdClass.navigate(true);
    };
    CommandProcessor.getInstance().executeCommand(project, () -> ActionScriptCreateClassOrInterfaceFix.createClass(ActionScriptCreateClassOrInterfaceFix.ACTION_SCRIPT_CLASS_WITH_SUPERS_TEMPLATE_NAME, testClassName, packageName, superClass, Collections.emptyList(), targetDirectory, CodeInsightBundle.message("intention.create.test"), true, Collections.emptyMap(), postProcessRunnable), CodeInsightBundle.message("intention.create.test"), null);
}
Also used : JavaScriptSupportLoader(com.intellij.lang.javascript.JavaScriptSupportLoader) JSChangeUtil(com.intellij.lang.javascript.psi.impl.JSChangeUtil) VirtualFile(com.intellij.openapi.vfs.VirtualFile) JSMemberInfo(com.intellij.lang.javascript.refactoring.util.JSMemberInfo) THashSet(gnu.trove.THashSet) ActionScriptCreateClassOrInterfaceFix(com.intellij.lang.javascript.validation.fixes.ActionScriptCreateClassOrInterfaceFix) CodeInsightBundle(com.intellij.codeInsight.CodeInsightBundle) PsiTreeUtil(com.intellij.psi.util.PsiTreeUtil) DialogWrapper(com.intellij.openapi.ui.DialogWrapper) PsiElement(com.intellij.psi.PsiElement) FunctionKind(com.intellij.lang.javascript.psi.JSFunction.FunctionKind) Project(com.intellij.openapi.project.Project) PsiFile(com.intellij.psi.PsiFile) TestCreator(com.intellij.testIntegration.TestCreator) ProjectRootManager(com.intellij.openapi.roots.ProjectRootManager) ModuleUtilCore(com.intellij.openapi.module.ModuleUtilCore) StringUtil(com.intellij.openapi.util.text.StringUtil) Set(java.util.Set) Editor(com.intellij.openapi.editor.Editor) CommandProcessor(com.intellij.openapi.command.CommandProcessor) JSFunction(com.intellij.lang.javascript.psi.JSFunction) CodeStyleManager(com.intellij.psi.codeStyle.CodeStyleManager) JSClass(com.intellij.lang.javascript.psi.ecmal4.JSClass) ApplicationManager(com.intellij.openapi.application.ApplicationManager) PsiDirectory(com.intellij.psi.PsiDirectory) JSInheritanceUtil(com.intellij.lang.javascript.psi.resolve.JSInheritanceUtil) Collections(java.util.Collections) Consumer(com.intellij.util.Consumer) JSFunction(com.intellij.lang.javascript.psi.JSFunction) PsiDirectory(com.intellij.psi.PsiDirectory) JSClass(com.intellij.lang.javascript.psi.ecmal4.JSClass) JSMemberInfo(com.intellij.lang.javascript.refactoring.util.JSMemberInfo) PsiElement(com.intellij.psi.PsiElement)

Example 4 with JSMemberInfo

use of com.intellij.lang.javascript.refactoring.util.JSMemberInfo in project intellij-plugins by JetBrains.

the class CreateFlexUnitTestDialog method createUIComponents.

private void createUIComponents() {
    final Module module = ModuleUtil.findModuleForPsiElement(myContextClass);
    assert module != null;
    myPackageCombo = JSReferenceEditor.forPackageName(StringUtil.getPackageName(myContextClass.getQualifiedName()), module.getProject(), null, getTestClassPackageScope(module), RefactoringBundle.message("choose.destination.package"));
    final Condition<JSClass> filter = jsClass -> {
        final JSAttributeList attributeList = jsClass.getAttributeList();
        return !jsClass.isInterface() && attributeList != null && !attributeList.hasModifier(JSAttributeList.ModifierType.FINAL);
    };
    mySuperClassField = JSReferenceEditor.forClassName("", module.getProject(), null, getSuperClassScope(module), null, filter, JSBundle.message("choose.super.class.title"));
    final List<JSMemberInfo> memberInfos = new ArrayList<>();
    JSMemberInfo.extractClassMembers(myContextClass, memberInfos, new MemberInfoBase.Filter<JSAttributeListOwner>() {

        public boolean includeMember(final JSAttributeListOwner member) {
            final JSAttributeList attributeList = member.getAttributeList();
            return member instanceof JSFunction && ((JSFunction) member).getKind() != JSFunction.FunctionKind.CONSTRUCTOR && attributeList != null && attributeList.getAccessType() == JSAttributeList.AccessType.PUBLIC;
        }
    });
    myMemberSelectionPanel = new JSMemberSelectionPanel("Generate test methods for:", memberInfos, null);
}
Also used : ActionListener(java.awt.event.ActionListener) VirtualFile(com.intellij.openapi.vfs.VirtualFile) JSMemberInfo(com.intellij.lang.javascript.refactoring.util.JSMemberInfo) RefactoringBundle(com.intellij.refactoring.RefactoringBundle) NullableComputable(com.intellij.openapi.util.NullableComputable) JSAttributeListOwner(com.intellij.lang.javascript.psi.ecmal4.JSAttributeListOwner) ActionScriptClassResolver(com.intellij.javascript.flex.resolve.ActionScriptClassResolver) PsiManager(com.intellij.psi.PsiManager) ArrayList(java.util.ArrayList) ContentEntry(com.intellij.openapi.roots.ContentEntry) CodeInsightBundle(com.intellij.codeInsight.CodeInsightBundle) ModuleUtil(com.intellij.openapi.module.ModuleUtil) DialogWrapper(com.intellij.openapi.ui.DialogWrapper) JSRefactoringUtil(com.intellij.lang.javascript.refactoring.util.JSRefactoringUtil) ModifiableRootModel(com.intellij.openapi.roots.ModifiableRootModel) PsiElement(com.intellij.psi.PsiElement) Conditions(com.intellij.openapi.util.Conditions) FileUtil(com.intellij.openapi.util.io.FileUtil) Module(com.intellij.openapi.module.Module) ValidationInfo(com.intellij.openapi.ui.ValidationInfo) JSAttributeList(com.intellij.lang.javascript.psi.ecmal4.JSAttributeList) JSReferenceEditor(com.intellij.lang.javascript.refactoring.ui.JSReferenceEditor) PropertiesComponent(com.intellij.ide.util.PropertiesComponent) VfsUtilCore(com.intellij.openapi.vfs.VfsUtilCore) ThreeState(com.intellij.util.ThreeState) MarkRootActionBase(com.intellij.ide.projectView.actions.MarkRootActionBase) StringUtil(com.intellij.openapi.util.text.StringUtil) GlobalSearchScope(com.intellij.psi.search.GlobalSearchScope) IOException(java.io.IOException) MemberInfoBase(com.intellij.refactoring.classMembers.MemberInfoBase) ActionEvent(java.awt.event.ActionEvent) LocalFileSystem(com.intellij.openapi.vfs.LocalFileSystem) JSMemberSelectionPanel(com.intellij.lang.javascript.refactoring.ui.JSMemberSelectionPanel) Nullable(org.jetbrains.annotations.Nullable) JSFunction(com.intellij.lang.javascript.psi.JSFunction) List(java.util.List) JSClass(com.intellij.lang.javascript.psi.ecmal4.JSClass) ModuleRootManager(com.intellij.openapi.roots.ModuleRootManager) ApplicationManager(com.intellij.openapi.application.ApplicationManager) VfsUtil(com.intellij.openapi.vfs.VfsUtil) PsiDirectory(com.intellij.psi.PsiDirectory) JSBundle(com.intellij.lang.javascript.JSBundle) Condition(com.intellij.openapi.util.Condition) javax.swing(javax.swing) JSAttributeList(com.intellij.lang.javascript.psi.ecmal4.JSAttributeList) ArrayList(java.util.ArrayList) JSMemberInfo(com.intellij.lang.javascript.refactoring.util.JSMemberInfo) MemberInfoBase(com.intellij.refactoring.classMembers.MemberInfoBase) JSMemberSelectionPanel(com.intellij.lang.javascript.refactoring.ui.JSMemberSelectionPanel) JSFunction(com.intellij.lang.javascript.psi.JSFunction) Module(com.intellij.openapi.module.Module) JSAttributeListOwner(com.intellij.lang.javascript.psi.ecmal4.JSAttributeListOwner) JSClass(com.intellij.lang.javascript.psi.ecmal4.JSClass)

Example 5 with JSMemberInfo

use of com.intellij.lang.javascript.refactoring.util.JSMemberInfo in project intellij-plugins by JetBrains.

the class FlexPushDownTest method performAction.

private void performAction(String from, int docCommentPolicy, boolean makeAbstract, final String[] toPushDown) {
    final JSClass sourceClass = (JSClass) JSDialectSpecificHandlersFactory.forLanguage(JavaScriptSupportLoader.ECMA_SCRIPT_L4).getClassResolver().findClassByQName(from, GlobalSearchScope.projectScope(getProject()));
    assertNotNull("source class not found: " + from, sourceClass);
    assertTrue(sourceClass.getQualifiedName() + " has no inheritors", !JSInheritanceUtil.findDirectSubClasses(sourceClass, false).isEmpty());
    final List<JSMemberInfo> memberInfos = FlexPullUpTest.getMemberInfos(toPushDown, sourceClass, makeAbstract);
    JSMemberInfo[] infosArray = JSMemberInfo.getSelected(memberInfos, sourceClass, Conditions.alwaysTrue());
    new JSPushDownProcessor(myProject, infosArray, sourceClass, docCommentPolicy) {

        @Override
        @NotNull
        protected UsageInfo[] findUsages() {
            // ensure stable order
            final UsageInfo[] usages = super.findUsages();
            Arrays.sort(usages, (o1, o2) -> ((JSClass) o1.getElement()).getQualifiedName().compareTo(((JSClass) o2.getElement()).getQualifiedName()));
            return usages;
        }
    }.run();
    myProject.getComponent(PostprocessReformattingAspect.class).doPostponedFormatting();
    FileDocumentManager.getInstance().saveAllDocuments();
}
Also used : VfsRootAccess(com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess) VfsUtilCore.urlToPath(com.intellij.openapi.vfs.VfsUtilCore.urlToPath) Arrays(java.util.Arrays) JavaScriptSupportLoader(com.intellij.lang.javascript.JavaScriptSupportLoader) JSTestOption(com.intellij.lang.javascript.JSTestOption) FlexModuleType(com.intellij.lang.javascript.flex.FlexModuleType) VirtualFile(com.intellij.openapi.vfs.VirtualFile) JSPushDownProcessor(com.intellij.lang.javascript.refactoring.memberPushDown.JSPushDownProcessor) JSMemberInfo(com.intellij.lang.javascript.refactoring.util.JSMemberInfo) DocCommentPolicy(com.intellij.refactoring.util.DocCommentPolicy) UsageInfo(com.intellij.usageView.UsageInfo) BaseRefactoringProcessor(com.intellij.refactoring.BaseRefactoringProcessor) FlexStylesIndexableSetContributor(com.intellij.javascript.flex.css.FlexStylesIndexableSetContributor) Conditions(com.intellij.openapi.util.Conditions) ModuleType(com.intellij.openapi.module.ModuleType) FlexTestUtils(com.intellij.flex.util.FlexTestUtils) StringUtil(com.intellij.openapi.util.text.StringUtil) MultiFileTestCase(com.intellij.refactoring.MultiFileTestCase) FlexSchemaHandler(com.intellij.javascript.flex.mxml.schema.FlexSchemaHandler) JSDialectSpecificHandlersFactory(com.intellij.lang.javascript.dialects.JSDialectSpecificHandlersFactory) GlobalSearchScope(com.intellij.psi.search.GlobalSearchScope) FileDocumentManager(com.intellij.openapi.fileEditor.FileDocumentManager) List(java.util.List) JSClass(com.intellij.lang.javascript.psi.ecmal4.JSClass) VfsUtilCore.convertFromUrl(com.intellij.openapi.vfs.VfsUtilCore.convertFromUrl) JSTestOptions(com.intellij.lang.javascript.JSTestOptions) NotNull(org.jetbrains.annotations.NotNull) JSInheritanceUtil(com.intellij.lang.javascript.psi.resolve.JSInheritanceUtil) PostprocessReformattingAspect(com.intellij.psi.impl.source.PostprocessReformattingAspect) PostprocessReformattingAspect(com.intellij.psi.impl.source.PostprocessReformattingAspect) JSPushDownProcessor(com.intellij.lang.javascript.refactoring.memberPushDown.JSPushDownProcessor) JSClass(com.intellij.lang.javascript.psi.ecmal4.JSClass) JSMemberInfo(com.intellij.lang.javascript.refactoring.util.JSMemberInfo) NotNull(org.jetbrains.annotations.NotNull)

Aggregations

JSMemberInfo (com.intellij.lang.javascript.refactoring.util.JSMemberInfo)8 JSClass (com.intellij.lang.javascript.psi.ecmal4.JSClass)6 PsiElement (com.intellij.psi.PsiElement)4 JSFunction (com.intellij.lang.javascript.psi.JSFunction)3 JSAttributeListOwner (com.intellij.lang.javascript.psi.ecmal4.JSAttributeListOwner)3 StringUtil (com.intellij.openapi.util.text.StringUtil)3 VirtualFile (com.intellij.openapi.vfs.VirtualFile)3 PsiDirectory (com.intellij.psi.PsiDirectory)3 PostprocessReformattingAspect (com.intellij.psi.impl.source.PostprocessReformattingAspect)3 ArrayList (java.util.ArrayList)3 CodeInsightBundle (com.intellij.codeInsight.CodeInsightBundle)2 JavaScriptSupportLoader (com.intellij.lang.javascript.JavaScriptSupportLoader)2 JSClassResolver (com.intellij.lang.javascript.psi.resolve.JSClassResolver)2 JSInheritanceUtil (com.intellij.lang.javascript.psi.resolve.JSInheritanceUtil)2 ApplicationManager (com.intellij.openapi.application.ApplicationManager)2 DialogWrapper (com.intellij.openapi.ui.DialogWrapper)2 Conditions (com.intellij.openapi.util.Conditions)2 MemberInfoBase (com.intellij.refactoring.classMembers.MemberInfoBase)2 THashSet (gnu.trove.THashSet)2 FlexTestUtils (com.intellij.flex.util.FlexTestUtils)1