List of usage examples for com.intellij.openapi.fileEditor OpenFileDescriptor OpenFileDescriptor
public OpenFileDescriptor(@NotNull Project project, @NotNull VirtualFile file, int offset)
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; }