Search in sources :

Example 1 with JSFile

use of com.intellij.lang.javascript.psi.JSFile in project intellij-plugins by JetBrains.

the class JSShortenFQNamesProcessor method processText.

public void processText(final Project project, final Template template, final Document document, final RangeMarker templateRange, final Editor editor) {
    if (!template.isToShortenLongNames())
        return;
    try {
        final PsiDocumentManager psiDocumentManager = PsiDocumentManager.getInstance(project);
        psiDocumentManager.commitDocument(document);
        final PsiFile hostFile = PsiUtilBase.getPsiFileInEditor(editor, project);
        final PsiFile file = (hostFile != null && JavaScriptSupportLoader.isFlexMxmFile(hostFile)) ? InjectedLanguageUtil.findInjectedPsiNoCommit(hostFile, templateRange.getStartOffset()) : hostFile;
        if (file instanceof JSFile && file.getLanguage().isKindOf(JavaScriptSupportLoader.ECMA_SCRIPT_L4)) {
            final ActionScriptUnusedImportsHelper.Results unusedImportsResults = ActionScriptUnusedImportsHelper.getUnusedImports(file);
            for (final JSReferenceExpression reference : unusedImportsResults.fqnsToReplaceWithShortName) {
                final TextRange range = InjectedLanguageManager.getInstance(project).injectedToHost(file, reference.getTextRange());
                if (TextRange.create(templateRange).contains(range)) {
                    final String shortName = StringUtil.getShortName(reference.getReferencedName());
                    final String resolved = JSImportHandlingUtil.resolveTypeName(shortName, reference);
                    // insert import statement if needed
                    if (shortName.equals(resolved)) {
                        final FormatFixer fixer = ImportUtils.insertImportStatements(reference, Collections.singletonList(reference.getText()));
                        if (fixer != null) {
                            fixer.fixFormat();
                        }
                    }
                    // shorten FQN
                    reference.replace(JSChangeUtil.createExpressionFromText(project, shortName).getPsi());
                }
            }
            psiDocumentManager.doPostponedOperationsAndUnblockDocument(document);
        }
    } catch (IncorrectOperationException e) {
        LOG.error(e);
    }
}
Also used : JSReferenceExpression(com.intellij.lang.javascript.psi.JSReferenceExpression) PsiFile(com.intellij.psi.PsiFile) TextRange(com.intellij.openapi.util.TextRange) IncorrectOperationException(com.intellij.util.IncorrectOperationException) ActionScriptUnusedImportsHelper(com.intellij.lang.javascript.validation.ActionScriptUnusedImportsHelper) JSFile(com.intellij.lang.javascript.psi.JSFile) FormatFixer(com.intellij.lang.javascript.refactoring.FormatFixer) PsiDocumentManager(com.intellij.psi.PsiDocumentManager)

Example 2 with JSFile

use of com.intellij.lang.javascript.psi.JSFile in project intellij-plugins by JetBrains.

the class JstdRunProfileState method buildTestFileScope.

@NotNull
private static TestFileScope buildTestFileScope(@NotNull Project project, @NotNull JstdRunSettings settings) throws ExecutionException {
    TestType testType = settings.getTestType();
    if (testType == TestType.ALL_CONFIGS_IN_DIRECTORY || testType == TestType.CONFIG_FILE) {
        return TestFileScope.allScope();
    }
    if (testType == TestType.JS_FILE) {
        File jsFile = new File(settings.getJsFilePath());
        if (jsFile.isAbsolute() && jsFile.isFile()) {
            VirtualFile virtualFile = VfsUtil.findFileByIoFile(jsFile, true);
            if (virtualFile != null) {
                PsiFile psiFile = PsiManager.getInstance(project).findFile(virtualFile);
                if (psiFile instanceof JSFile) {
                    JSFile jsPsiFile = (JSFile) psiFile;
                    TestFileStructurePack pack = TestFileStructureManager.fetchTestFileStructurePackByJsFile(jsPsiFile);
                    if (pack != null) {
                        List<String> testCases = pack.getTopLevelElements();
                        if (testCases.isEmpty()) {
                            throw new ExecutionException("No tests found in " + jsPsiFile.getName());
                        }
                        Map<String, Set<String>> scope = ContainerUtil.newHashMap();
                        for (String testCase : testCases) {
                            scope.put(testCase, Collections.emptySet());
                        }
                        return TestFileScope.customScope(scope);
                    }
                }
            }
        }
        throw new ExecutionException("Unable to extract tests from " + jsFile.getName());
    }
    if (testType == TestType.TEST_CASE) {
        Map<String, Set<String>> scope = Collections.singletonMap(settings.getTestCaseName(), Collections.<String>emptySet());
        return TestFileScope.customScope(scope);
    }
    if (testType == TestType.TEST_METHOD) {
        Map<String, Set<String>> scope = Collections.singletonMap(settings.getTestCaseName(), Collections.singleton(settings.getTestMethodName()));
        return TestFileScope.customScope(scope);
    }
    throw new RuntimeException("Unexpected test type: " + testType);
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) TestFileStructurePack(com.intellij.javascript.testFramework.TestFileStructurePack) ImmutableSet(com.google.common.collect.ImmutableSet) PsiFile(com.intellij.psi.PsiFile) TestType(com.google.jstestdriver.idea.execution.settings.TestType) JSFile(com.intellij.lang.javascript.psi.JSFile) ExecutionException(com.intellij.execution.ExecutionException) VirtualFile(com.intellij.openapi.vfs.VirtualFile) PsiFile(com.intellij.psi.PsiFile) JSFile(com.intellij.lang.javascript.psi.JSFile) File(java.io.File) NotNull(org.jetbrains.annotations.NotNull)

Example 3 with JSFile

use of com.intellij.lang.javascript.psi.JSFile in project intellij-plugins by JetBrains.

the class JstdRunConfigurationVerifier method verifyTestCase.

@Nullable
private static TestFileStructurePack verifyTestCase(@NotNull Project project, @NotNull JstdRunSettings runSettings) throws RuntimeConfigurationException {
    verifyJSFileType(runSettings);
    if (runSettings.getTestCaseName().isEmpty()) {
        throw new RuntimeConfigurationError("Test case name is empty.");
    }
    VirtualFile jsTestVirtualFile = VfsUtil.findFileByIoFile(new File(runSettings.getJsFilePath()), false);
    if (jsTestVirtualFile == null) {
        throw new RuntimeConfigurationWarning("Can't find JavaScript test file.");
    }
    JSFile jsFile = ObjectUtils.tryCast(PsiManager.getInstance(project).findFile(jsTestVirtualFile), JSFile.class);
    if (jsFile == null) {
        throw new RuntimeConfigurationWarning("Wrong JavaScript test file.");
    }
    TestFileStructurePack pack = TestFileStructureManager.fetchTestFileStructurePackByJsFile(jsFile);
    if (pack != null) {
        boolean found = pack.contains(runSettings.getTestCaseName(), null, JstdTestMethodNameRefiner.INSTANCE);
        if (!found) {
            throw new RuntimeConfigurationWarning("Can't find test case with name '" + runSettings.getTestCaseName() + "'.");
        }
        return pack;
    }
    return null;
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) TestFileStructurePack(com.intellij.javascript.testFramework.TestFileStructurePack) RuntimeConfigurationWarning(com.intellij.execution.configurations.RuntimeConfigurationWarning) JSFile(com.intellij.lang.javascript.psi.JSFile) RuntimeConfigurationError(com.intellij.execution.configurations.RuntimeConfigurationError) VirtualFile(com.intellij.openapi.vfs.VirtualFile) File(java.io.File) JSFile(com.intellij.lang.javascript.psi.JSFile) Nullable(org.jetbrains.annotations.Nullable)

Example 4 with JSFile

use of com.intellij.lang.javascript.psi.JSFile in project intellij-plugins by JetBrains.

the class MxmlEnterHandler method preprocessEnter.

public Result preprocessEnter(@NotNull PsiFile file, @NotNull Editor editor, @NotNull Ref<Integer> caretOffset, @NotNull Ref<Integer> caretAdvance, @NotNull DataContext dataContext, EditorActionHandler originalHandler) {
    int offset = caretOffset.get().intValue();
    if (file instanceof JSFile) {
        PsiElement context = InjectedLanguageManager.getInstance(file.getProject()).getInjectionHost(file);
        if (context instanceof XmlComment) {
            file = context.getContainingFile();
            editor = ((EditorWindow) editor).getDelegate();
            offset = editor.getCaretModel().getOffset();
        }
    }
    if (!JavaScriptSupportLoader.isFlexMxmFile(file))
        return Result.Continue;
    if (CodeInsightSettings.getInstance().INSERT_BRACE_ON_ENTER && isAfterUnmatchedMxmlComment(editor, file, offset)) {
        String indent = "";
        CharSequence buffer = editor.getDocument().getCharsSequence();
        int lineStart = CharArrayUtil.shiftBackwardUntil(buffer, offset - 1, "\n") + 1;
        int current = lineStart;
        while (current < offset && Character.isWhitespace(buffer.charAt(current))) ++current;
        if (current > lineStart) {
            indent = buffer.subSequence(lineStart, current).toString();
        }
        editor.getDocument().insertString(offset, "\n" + indent + "-->");
        originalHandler.execute(editor, dataContext);
        return Result.Stop;
    }
    return Result.Continue;
}
Also used : XmlComment(com.intellij.psi.xml.XmlComment) JSFile(com.intellij.lang.javascript.psi.JSFile) PsiElement(com.intellij.psi.PsiElement)

Example 5 with JSFile

use of com.intellij.lang.javascript.psi.JSFile in project intellij-plugins by JetBrains.

the class FlexUtils method processMetaAttributesForClass.

public static void processMetaAttributesForClass(@NotNull PsiElement jsClass, @NotNull final ActionScriptResolveUtil.MetaDataProcessor processor) {
    ActionScriptResolveUtil.processMetaAttributesForClass(jsClass, processor);
    if (jsClass instanceof XmlBackedJSClassImpl) {
        PsiElement parent = jsClass.getParent();
        if (parent != null) {
            PsiFile file = parent.getContainingFile();
            if (file instanceof XmlFile) {
                XmlDocument document = ((XmlFile) file).getDocument();
                if (document != null) {
                    XmlTag rootTag = document.getRootTag();
                    if (rootTag != null) {
                        JSResolveUtil.JSInjectedFilesVisitor visitor = new JSResolveUtil.JSInjectedFilesVisitor() {

                            @Override
                            protected void process(JSFile file) {
                                if (file != null) {
                                    ActionScriptResolveUtil.processMetaAttributesForClass(file, processor);
                                }
                            }
                        };
                        processMxmlTags(rootTag, true, visitor);
                    }
                }
            }
        }
    }
}
Also used : XmlFile(com.intellij.psi.xml.XmlFile) PsiFile(com.intellij.psi.PsiFile) XmlDocument(com.intellij.psi.xml.XmlDocument) JSFile(com.intellij.lang.javascript.psi.JSFile) JSResolveUtil(com.intellij.lang.javascript.psi.resolve.JSResolveUtil) PsiElement(com.intellij.psi.PsiElement) XmlTag(com.intellij.psi.xml.XmlTag)

Aggregations

JSFile (com.intellij.lang.javascript.psi.JSFile)39 PsiElement (com.intellij.psi.PsiElement)18 VirtualFile (com.intellij.openapi.vfs.VirtualFile)16 PsiFile (com.intellij.psi.PsiFile)16 Nullable (org.jetbrains.annotations.Nullable)10 XmlFile (com.intellij.psi.xml.XmlFile)9 JSReferenceExpression (com.intellij.lang.javascript.psi.JSReferenceExpression)6 TestFileStructurePack (com.intellij.javascript.testFramework.TestFileStructurePack)5 JSClass (com.intellij.lang.javascript.psi.ecmal4.JSClass)5 Project (com.intellij.openapi.project.Project)5 GlobalSearchScope (com.intellij.psi.search.GlobalSearchScope)5 NotNull (org.jetbrains.annotations.NotNull)5 JSQualifiedNamedElement (com.intellij.lang.javascript.psi.ecmal4.JSQualifiedNamedElement)4 LogicalPosition (com.intellij.openapi.editor.LogicalPosition)4 TextRange (com.intellij.openapi.util.TextRange)4 PsiReference (com.intellij.psi.PsiReference)4 PsiMultiReference (com.intellij.psi.impl.source.resolve.reference.impl.PsiMultiReference)4 XmlTag (com.intellij.psi.xml.XmlTag)4 JasmineFileStructure (com.intellij.javascript.testFramework.jasmine.JasmineFileStructure)3 QUnitFileStructure (com.intellij.javascript.testFramework.qunit.QUnitFileStructure)3