Example usage for com.intellij.openapi.fileEditor OpenFileDescriptor OpenFileDescriptor

List of usage examples for com.intellij.openapi.fileEditor OpenFileDescriptor OpenFileDescriptor

Introduction

In this page you can find the example usage for com.intellij.openapi.fileEditor OpenFileDescriptor OpenFileDescriptor.

Prototype

public OpenFileDescriptor(@NotNull Project project, @NotNull VirtualFile file, int offset) 

Source Link

Usage

From source file:com.android.tools.idea.rendering.HtmlLinkManager.java

License:Apache License

private static void handleOpenStackUrl(@NotNull String url, @NotNull Module module) {
    assert url.startsWith(URL_OPEN) : url;
    // Syntax: URL_OPEN + className + '#' + methodName + ';' + fileName + ':' + lineNumber;
    int start = URL_OPEN.length();
    int semi = url.indexOf(';', start);
    String className;/*ww  w .j ava2  s . co  m*/
    String fileName;
    int line;
    if (semi != -1) {
        className = url.substring(start, semi);
        int colon = url.indexOf(':', semi + 1);
        if (colon != -1) {
            fileName = url.substring(semi + 1, colon);
            line = Integer.decode(url.substring(colon + 1));
        } else {
            fileName = url.substring(semi + 1);
            line = -1;
        }
        // Attempt to open file
    } else {
        className = url.substring(start);
        fileName = null;
        line = -1;
    }
    String method = null;
    int hash = className.indexOf('#');
    if (hash != -1) {
        method = className.substring(hash + 1);
        className = className.substring(0, hash);
    }

    Project project = module.getProject();
    PsiClass clz = JavaPsiFacade.getInstance(project).findClass(className, GlobalSearchScope.allScope(project));
    if (clz != null) {
        PsiFile containingFile = clz.getContainingFile();
        if (fileName != null && containingFile != null && line != -1) {
            VirtualFile virtualFile = containingFile.getVirtualFile();
            if (virtualFile != null) {
                String name = virtualFile.getName();
                if (fileName.equals(name)) {
                    // Use the line number rather than the methodName
                    openEditor(project, containingFile, line - 1, -1);
                    return;
                }
            }
        }

        if (method != null) {
            PsiMethod[] methodsByName = clz.findMethodsByName(method, true);
            for (PsiMethod m : methodsByName) {
                PsiFile psiFile = m.getContainingFile();
                if (psiFile != null) {
                    VirtualFile virtualFile = psiFile.getVirtualFile();
                    if (virtualFile != null) {
                        OpenFileDescriptor descriptor = new OpenFileDescriptor(project, virtualFile,
                                m.getTextOffset());
                        FileEditorManager.getInstance(project).openEditor(descriptor, true);
                        return;
                    }
                }
            }
        }

        if (fileName != null) {
            PsiFile[] files = FilenameIndex.getFilesByName(project, fileName,
                    GlobalSearchScope.allScope(project));
            for (PsiFile psiFile : files) {
                if (openEditor(project, psiFile, line != -1 ? line - 1 : -1, -1)) {
                    break;
                }
            }
        }
    }
}

From source file:com.android.tools.idea.rendering.HtmlLinkManager.java

License:Apache License

private static boolean openEditor(@NotNull Project project, @NotNull PsiFile psiFile, int offset) {
    VirtualFile file = psiFile.getVirtualFile();
    if (file != null) {
        OpenFileDescriptor descriptor = new OpenFileDescriptor(project, file, offset);
        return !FileEditorManager.getInstance(project).openEditor(descriptor, true).isEmpty();
    }//from   w  w  w  . j  a va 2 s .c  om

    return false;
}

From source file:com.android.tools.idea.rendering.multi.RenderPreviewManager.java

License:Apache License

/**
 * Switch to the given configuration preview
 *
 * @param preview the preview to switch to
 *//*from w  w  w.ja  va  2 s .  c o m*/
public void switchTo(@NotNull RenderPreview preview) {
    assert myPreviews != null;
    Configuration originalConfiguration = myRenderContext.getConfiguration();
    if (originalConfiguration == null) {
        return;
    }

    VirtualFile input = preview.getAlternateInput();
    if (input != null) {
        // This switches to the given file, but the file might not have
        // an identical configuration to what was shown in the preview.
        // For example, while viewing a 10" layout-xlarge file, it might
        // show a preview for a 5" version tied to the default layout. If
        // you click on it, it will open the default layout file, but it might
        // be using a different screen size; any of those that match the
        // default layout, say a 3.8".
        //
        // Thus, we need to also perform a screen size sync first
        Configuration configuration = preview.getConfiguration();
        if (configuration instanceof NestedConfiguration) {
            NestedConfiguration nestedConfig = (NestedConfiguration) configuration;
            boolean setSize = nestedConfig.isOverridingDevice();
            if (configuration instanceof VaryingConfiguration) {
                VaryingConfiguration c = (VaryingConfiguration) configuration;
                setSize |= c.isAlternatingDevice();
            }

            if (setSize) {
                ConfigurationManager configurationManager = originalConfiguration.getConfigurationManager();
                VirtualFile editedFile = originalConfiguration.getFile();
                assert editedFile != null;
                configurationManager.syncToVariations(CFG_DEVICE | CFG_DEVICE_STATE, editedFile, configuration,
                        false, false);
            }
        }

        Project project = configuration.getModule().getProject();
        OpenFileDescriptor descriptor = new OpenFileDescriptor(project, input, -1);
        FileEditorManager.getInstance(project).openEditor(descriptor, true);
        // TODO: Ensure that the layout editor is focused?

        return;
    }

    // The new configuration is the configuration which will become the configuration
    // in the layout editor's chooser
    Configuration previewConfiguration = preview.getConfiguration();
    Configuration newConfiguration = previewConfiguration;
    if (newConfiguration instanceof NestedConfiguration) {
        // Should never use a complementing configuration for the main
        // rendering's configuration; instead, create a new configuration
        // with a snapshot of the configuration's current values
        newConfiguration = previewConfiguration.clone();

        // Remap all the previews to be parented to this new copy instead
        // of the old one (which is no longer controlled by the chooser)
        for (RenderPreview p : myPreviews) {
            Configuration configuration = p.getConfiguration();
            if (configuration instanceof NestedConfiguration) {
                NestedConfiguration nested = (NestedConfiguration) configuration;
                nested.setParent(newConfiguration);
            }
        }
    }

    // Make a preview for the configuration which *was* showing in the
    // chooser up until this point:
    RenderPreview newPreview = getStashedPreview();
    if (newPreview == null) {
        newPreview = RenderPreview.create(this, originalConfiguration, false);
    }

    // Update its configuration such that it is complementing or inheriting
    // from the new chosen configuration
    if (previewConfiguration instanceof VaryingConfiguration) {
        VaryingConfiguration varying = VaryingConfiguration.create((VaryingConfiguration) previewConfiguration,
                newConfiguration);
        varying.updateDisplayName();
        originalConfiguration = varying;
        newPreview.setConfiguration(originalConfiguration);
    } else if (previewConfiguration instanceof NestedConfiguration) {
        NestedConfiguration nested = NestedConfiguration.create((NestedConfiguration) previewConfiguration,
                originalConfiguration, newConfiguration);
        nested.setDisplayName(nested.computeDisplayName());
        originalConfiguration = nested;
        newPreview.setConfiguration(originalConfiguration);
    }

    // Replace clicked preview with preview of the formerly edited main configuration
    // This doesn't work yet because the image overlay has had its image
    // replaced by the configuration previews! I should make a list of them
    for (int i = 0, n = myPreviews.size(); i < n; i++) {
        if (preview == myPreviews.get(i)) {
            myPreviews.set(i, newPreview);
            break;
        }
    }

    // Stash the corresponding preview (not active) on the canvas so we can
    // retrieve it if clicking to some other preview later
    setStashedPreview(preview);
    preview.setVisible(false);

    // Switch to the configuration from the clicked preview (though it's
    // most likely a copy, see above)
    myRenderContext.setConfiguration(newConfiguration);

    myNeedLayout = true;
    redraw();

    animateTransition(preview, newPreview);
}

From source file:com.android.tools.idea.rendering.RenderedPanel.java

License:Apache License

private boolean handleMenu(@Nullable RenderedView leaf) {
    boolean showMenu = false;
    if (leaf != null) {
        ViewInfo view = leaf.view;//  w  w  w  . j  a va  2 s  .com
        if (view != null) {
            ViewType viewType = view.getViewType();
            if (viewType != ViewType.USER) {
                XmlFile xmlFile = myContext.getXmlFile();
                if (ResourceHelper.getFolderType(xmlFile) == ResourceFolderType.MENU) {
                    // When rendering a menu file, don't hide menu when clicking outside of it
                    showMenu = true;
                }
                if (viewType == ViewType.ACTION_BAR_OVERFLOW) {
                    showMenu = !ActionBarHandler.isShowingMenu(myContext);
                } else if (ActionBarHandler.isShowingMenu(myContext)) {
                    RenderedView v = leaf.getParent();
                    while (v != null) {
                        if (v.tag != null) {
                            // A view *containing* a system view is the menu
                            showMenu = true;
                            if (TAG_ITEM.equals(v.tag.getName())) {
                                PsiFile file = v.tag.getContainingFile();
                                if (file != null && file != xmlFile) {
                                    VirtualFile virtualFile = file.getVirtualFile();
                                    if (virtualFile != null) {
                                        Project project = file.getProject();
                                        int offset = v.tag.getTextOffset();
                                        OpenFileDescriptor descriptor = new OpenFileDescriptor(project,
                                                virtualFile, offset);
                                        FileEditorManager.getInstance(project).openEditor(descriptor, true);
                                        return true;
                                    }
                                }
                            }
                            break;
                        }
                        v = v.getParent();
                    }
                }
            }
        }
    }

    ActionBarHandler.showMenu(showMenu, myContext, true);

    return false;
}

From source file:com.android.tools.idea.uibuilder.model.NlModel.java

License:Apache License

/**
 * Changes the configuration to use a custom device with screen size defined by xDimension and yDimension.
 *//*from   ww  w .j  a va  2 s .c  o  m*/
public void overrideConfigurationScreenSize(@AndroidCoordinate int xDimension,
        @AndroidCoordinate int yDimension) {
    Device original = myConfiguration.getDevice();
    Device.Builder deviceBuilder = new Device.Builder(original); // doesn't copy tag id
    if (original != null) {
        deviceBuilder.setTagId(original.getTagId());
    }
    deviceBuilder.setName("Custom");
    deviceBuilder.setId(Configuration.CUSTOM_DEVICE_ID);
    Device device = deviceBuilder.build();
    for (State state : device.getAllStates()) {
        Screen screen = state.getHardware().getScreen();
        screen.setXDimension(xDimension);
        screen.setYDimension(yDimension);

        double dpi = screen.getPixelDensity().getDpiValue();
        double width = xDimension / dpi;
        double height = yDimension / dpi;
        double diagonalLength = Math.sqrt(width * width + height * height);

        screen.setDiagonalLength(diagonalLength);
        screen.setSize(AvdScreenData.getScreenSize(diagonalLength));

        screen.setRatio(AvdScreenData.getScreenRatio(xDimension, yDimension));

        screen.setScreenRound(device.getDefaultHardware().getScreen().getScreenRound());
        screen.setChin(device.getDefaultHardware().getScreen().getChin());
    }

    // If a custom device already exists, remove it before adding the latest one
    List<Device> devices = myConfiguration.getConfigurationManager().getDevices();
    boolean customDeviceReplaced = false;
    for (int i = 0; i < devices.size(); i++) {
        if ("Custom".equals(devices.get(i).getId())) {
            devices.set(i, device);
            customDeviceReplaced = true;
            break;
        }
    }

    if (!customDeviceReplaced) {
        devices.add(device);
    }

    VirtualFile better;
    State newState;
    //Change the orientation of the device depending on the shape of the canvas
    if (xDimension > yDimension) {
        better = ConfigurationMatcher.getBetterMatch(myConfiguration, device, "Landscape", null, null);
        newState = device.getState("Landscape");
    } else {
        better = ConfigurationMatcher.getBetterMatch(myConfiguration, device, "Portrait", null, null);
        newState = device.getState("Portrait");
    }

    if (better != null) {
        VirtualFile old = myConfiguration.getFile();
        assert old != null;
        Project project = mySurface.getProject();
        OpenFileDescriptor descriptor = new OpenFileDescriptor(project, better, -1);
        FileEditorManager manager = FileEditorManager.getInstance(project);
        FileEditor selectedEditor = manager.getSelectedEditor(old);
        manager.openEditor(descriptor, true);
        // Switch to the same type of editor (XML or Layout Editor) in the target file
        if (selectedEditor instanceof NlEditor) {
            manager.setSelectedEditor(better, NlEditorProvider.DESIGNER_ID);
        } else if (selectedEditor != null) {
            manager.setSelectedEditor(better, TextEditorProvider.getInstance().getEditorTypeId());
        }

        AndroidFacet facet = AndroidFacet.getInstance(myConfiguration.getModule());
        assert facet != null;
        Configuration configuration = facet.getConfigurationManager().getConfiguration(better);
        configuration.setEffectiveDevice(device, newState);
    } else {
        myConfiguration.setEffectiveDevice(device, newState);
    }
}

From source file:com.demonwav.mcdev.util.McEditorUtil.java

License:Open Source License

public static void gotoTargetElement(@NotNull PsiElement element, @NotNull Editor currentEditor,
        @NotNull PsiFile currentFile) {/*from  w w  w.  j a  v a  2  s  .  c  o m*/
    if (element.getContainingFile() == currentFile) {
        int offset = element.getTextOffset();
        PsiElement leaf = currentFile.findElementAt(offset);
        // check that element is really physically inside the file
        // there are fake elements with custom navigation (e.g. opening URL in browser) that override getContainingFile for various reasons
        if (leaf != null && PsiTreeUtil.isAncestor(element, leaf, false)) {
            Project project = element.getProject();
            IdeDocumentHistory.getInstance(project).includeCurrentCommandAsNavigation();
            new OpenFileDescriptor(project, currentFile.getViewProvider().getVirtualFile(), offset)
                    .navigateIn(currentEditor);
            return;
        }
    }

    Navigatable navigatable = element instanceof Navigatable ? (Navigatable) element
            : EditSourceUtil.getDescriptor(element);
    if (navigatable != null && navigatable.canNavigate()) {
        navigatable.navigate(true);
    }
}

From source file:com.denimgroup.threadfix.plugins.intellij.markers.WorkspaceUtils.java

License:Mozilla Public License

public static void openFile(Project project, VirtualFile file, int lineNumber) {

    Document document = FileDocumentManager.getInstance().getDocument(file);

    if (document != null) {
        int offset = document.getLineStartOffset(lineNumber);

        if (offset < 0) {
            offset = 0;/*from   w w w.  j a  va2 s . c  o  m*/
        }

        if (file.isValid()) {
            FileEditorManager.getInstance(project).openTextEditor(new OpenFileDescriptor(project, file, offset),
                    true);
        } else {
            log.error("VirtualFile.isValid() returned false. Possibly tried to open a deleted file.");
        }
    } else {
        log.error("Unable to retrieve a Document for the VirtualFile " + file.getName() + ".");
    }
}

From source file:com.eightbitmage.moonscript.intentions.utils.QuickfixUtil.java

License:Apache License

public static Editor positionCursor(@NotNull Project project, @NotNull PsiFile targetFile,
        @NotNull PsiElement element) {/*from w  w  w.  j  a  v  a  2  s  . c om*/
    TextRange range = element.getTextRange();
    int textOffset = range.getStartOffset();

    VirtualFile vFile = targetFile.getVirtualFile();
    assert vFile != null;
    OpenFileDescriptor descriptor = new OpenFileDescriptor(project, vFile, textOffset);
    return FileEditorManager.getInstance(project).openTextEditor(descriptor, true);
}

From source file:com.google.idea.blaze.android.project.BlazeBuildSystemService.java

License:Open Source License

@Override
public void addDependency(Module module, String artifact) {
    Project project = module.getProject();
    BlazeProjectData blazeProjectData = BlazeProjectDataManager.getInstance(project).getBlazeProjectData();
    if (blazeProjectData == null) {
        return;/*from  w  ww. j  a  va  2 s  .  co m*/
    }
    AndroidResourceModuleRegistry registry = AndroidResourceModuleRegistry.getInstance(project);
    TargetIdeInfo targetIdeInfo = blazeProjectData.targetMap.get(registry.getTargetKey(module));
    if (targetIdeInfo == null || targetIdeInfo.buildFile == null) {
        return;
    }

    // TODO: automagically edit deps instead of just opening the BUILD file?
    // Need to translate Gradle coordinates into blaze targets.
    // Will probably need to hardcode for each dependency.
    FileEditorManager fileEditorManager = FileEditorManager.getInstance(project);
    PsiElement buildTargetPsi = BuildReferenceManager.getInstance(project)
            .resolveLabel(targetIdeInfo.key.label);
    if (buildTargetPsi != null) {
        // If we can find a PSI for the target,
        // then we can jump straight to the target in the build file.
        fileEditorManager.openTextEditor(new OpenFileDescriptor(project,
                buildTargetPsi.getContainingFile().getVirtualFile(), buildTargetPsi.getTextOffset()), true);
    } else {
        // If not, just the build file is good enough.
        File buildIoFile = blazeProjectData.artifactLocationDecoder.decode(targetIdeInfo.buildFile);
        VirtualFile buildVirtualFile = findFileByIoFile(buildIoFile);
        if (buildVirtualFile != null) {
            fileEditorManager.openFile(buildVirtualFile, true);
        }
    }
}

From source file:com.intellij.codeInsight.CodeInsightTestCase.java

License:Apache License

protected Editor createEditor(VirtualFile file) {
    final FileEditorManager instance = FileEditorManager.getInstance(myProject);

    if (file.getFileType().isBinary())
        return null;

    Editor editor = instance.openTextEditor(new OpenFileDescriptor(myProject, file, 0), false);
    ((EditorImpl) editor).setCaretActive();
    return editor;
}