public static void initState(ErrorState state, PsiBuilder builder, IElementType root, TokenSet[] extendsSets) { state.extendsSets = extendsSets; PsiFile file = builder.getUserDataUnprotected(FileContextUtil.CONTAINING_FILE_KEY); state.completionState = file == null? null: file.getUserData(COMPLETION_STATE_KEY); Language language = file == null? root.getLanguage() : file.getLanguage(); state.caseSensitive = language.isCaseSensitive(); PairedBraceMatcher matcher = LanguageBraceMatching.INSTANCE.forLanguage(language); state.braces = matcher == null ? null : matcher.getPairs(); if (state.braces != null && state.braces.length == 0) state.braces = null; }
public static boolean consumeBlock(PsiBuilder builder_, @SuppressWarnings("UnusedParameters") int level) { PsiFile file = builder_.getUserDataUnprotected(FileContextUtil.CONTAINING_FILE_KEY); VirtualFile data = file != null ? file.getUserData(IndexingDataKeys.VIRTUAL_FILE) : null; if (data == null) return false; int i = 0; PsiBuilder.Marker m = builder_.mark(); do { IElementType type = builder_.getTokenType(); if (type == GoTypes.TYPE_ && nextIdentifier(builder_)) { // don't count a.(type), only type <ident> m.rollbackTo(); return false; } i += type == GoTypes.LBRACE ? 1 : type == GoTypes.RBRACE ? -1 : 0; builder_.advanceLexer(); } while (i > 0 && !builder_.eof()); boolean result = i == 0; if (result) { m.drop(); } else { m.rollbackTo(); } return result; }
/** * Returns real containing virtual file, not the Light one * * @return virtual file or null */ @Nullable public static VirtualFile getContainingVirtualFile(PsiFile psiFile) { VirtualFile originalFile = psiFile.getViewProvider().getVirtualFile(); if (originalFile instanceof LightVirtualFile) { if (psiFile.getUserData(IndexingDataKeys.VIRTUAL_FILE) != null) { originalFile = psiFile.getUserData(IndexingDataKeys.VIRTUAL_FILE); } else if (((LightVirtualFile)originalFile).getOriginalFile() != null) { originalFile = ((LightVirtualFile)originalFile).getOriginalFile(); } } return originalFile instanceof LightVirtualFile || originalFile == null || !originalFile.exists() ? null : originalFile; }
@Override public ProblemDescriptor[] checkFile(@NotNull PsiFile file, @NotNull InspectionManager manager, boolean isOnTheFly) { PsiFile checkedFile = BashPsiUtils.findFileContext(file); if (checkedFile instanceof BashFile && !BashPsiUtils.isInjectedElement(file) && !isSpecialBashFile(checkedFile.getName())) { BashFile bashFile = (BashFile) checkedFile; Boolean isLanguageConsole = checkedFile.getUserData(BashFile.LANGUAGE_CONSOLE_MARKER); if ((isLanguageConsole == null || !isLanguageConsole) && !bashFile.hasShebangLine()) { return new ProblemDescriptor[]{ manager.createProblemDescriptor(checkedFile, "Add shebang line", new AddShebangQuickfix(), ProblemHighlightType.GENERIC_ERROR_OR_WARNING, isOnTheFly) }; } } return null; }
public BashIncludeCommandStub createStub(@NotNull BashIncludeCommand psi, StubElement parentStub) { BashFileReference fileReference = psi.getFileReference(); String filename = null; String includer = null; if (fileReference != null && fileReference.isStatic()) { filename = fileReference.getFilename(); if (filename.contains("/") && !filename.endsWith("/")) { int index = filename.lastIndexOf("/"); filename = filename.substring(index + 1); } VirtualFile virtualFile = psi.getContainingFile().getUserData(IndexingDataKeys.VIRTUAL_FILE); if (virtualFile == null) { virtualFile = psi.getContainingFile().getViewProvider().getVirtualFile(); } includer = virtualFile.getPath(); } return new BashIncludeCommandStubImpl(parentStub, StringRef.fromString(filename), StringRef.fromString(includer), BashElementTypes.INCLUDE_COMMAND_ELEMENT); }
public static void initState(ErrorState state, PsiBuilder builder, IElementType root, TokenSet[] extendsSets) { state.extendsSets = extendsSets; PsiFile file = builder.getUserDataUnprotected(FileContextUtil.CONTAINING_FILE_KEY); state.completionState = file == null? null: file.getUserData(COMPLETION_STATE_KEY); Language language = file == null? root.getLanguage() : file.getLanguage(); state.caseSensitive = language.isCaseSensitive(); PairedBraceMatcher matcher = LanguageBraceMatching.INSTANCE.forLanguage(language); state.braces = matcher == null ? null : matcher.getPairs(); if (state.braces != null && state.braces.length == 0) state.braces = null; }
@NotNull private TSMetaModelImpl doGetExternalModel(final @NotNull PsiFile contextFile) { final PsiFile originalFile = contextFile.getOriginalFile(); final VirtualFile vFile = originalFile.getVirtualFile(); final Project project = originalFile.getProject(); CachedValue<TSMetaModelImpl> externalModelCache = originalFile.getUserData(EXTERNAL_MODEL_CACHE_KEY); if (externalModelCache == null) { externalModelCache = CachedValuesManager.getManager(project).createCachedValue( () -> ApplicationManager.getApplication().runReadAction( (Computable<CachedValueProvider.Result<TSMetaModelImpl>>) () -> { final List<VirtualFile> excludes = vFile == null ? Collections.emptyList() : Collections.singletonList(vFile); final TSMetaModelBuilder builder = new TSMetaModelBuilder(project, excludes); final TSMetaModelImpl model = builder.buildModel(); return CachedValueProvider.Result.create(model, builder.getFiles()); }), false); originalFile.putUserData(EXTERNAL_MODEL_CACHE_KEY, externalModelCache); } return externalModelCache.getValue(); }
@Override public synchronized TSMetaModel getTypeSystemMeta(@Nullable final PsiFile contextFile) { if (contextFile == null || !TSMetaModelBuilder.isTsFile(contextFile)) { return myCachedValue.getValue(); } final TSMetaModelImpl externalModel = doGetExternalModel(contextFile); final Project project = contextFile.getProject(); CachedValue<TSMetaModelImpl> fileModelCache = contextFile.getUserData(FILE_MODEL_CACHE_KEY); if (fileModelCache == null) { fileModelCache = CachedValuesManager.getManager(project).createCachedValue( () -> ApplicationManager.getApplication().runReadAction( (Computable<CachedValueProvider.Result<TSMetaModelImpl>>) () -> { final TSMetaModelBuilder builder = new TSMetaModelBuilder(project); final TSMetaModelImpl modelForFile = builder.buildModelForFile(contextFile); return CachedValueProvider.Result.create(modelForFile, contextFile); }), false); contextFile.putUserData(FILE_MODEL_CACHE_KEY, fileModelCache); } final TSMetaModelImpl fileModel = fileModelCache.getValue(); return new TSMetaModelImpl(Arrays.asList(externalModel, fileModel)); }
@Override public void updateMovedFile(PsiFile file) throws IncorrectOperationException { String originalPackageName = file.getUserData(ORIGINAL_PACKAGE_NAME); Project project = file.getProject(); VirtualFile virtualFile = file.getVirtualFile(); VirtualFile newInnermostRoot = PerlUtil.getFileClassRoot(project, virtualFile); if (newInnermostRoot != null && originalPackageName != null) { String newRelativePath = VfsUtil.getRelativePath(virtualFile, newInnermostRoot); String newPackageName = PerlPackageUtil.getPackageNameByPath(newRelativePath); final RenameRefactoring[] refactoring = {null}; for (PerlNamespaceDefinitionElement namespaceDefinition : PsiTreeUtil .findChildrenOfType(file, PerlNamespaceDefinitionElement.class)) { if (originalPackageName.equals(namespaceDefinition.getPackageName())) { if (refactoring[0] == null) { refactoring[0] = RefactoringFactory.getInstance(file.getProject()).createRename(namespaceDefinition, newPackageName); } else { refactoring[0].addElement(namespaceDefinition, newPackageName); } } } if (refactoring[0] != null) { ApplicationManager.getApplication().invokeLater(refactoring[0]::run); } } }
long combinedOffsets = caret + (selEnd << 32); if (mayCacheCopy) { final Trinity<PsiFile, Document, Long> cached = SoftReference.dereference(file.getUserData(FILE_COPY_KEY)); if (cached != null && cached.first.getClass().equals(file.getClass()) && isCopyUpToDate(cached.second, cached.first)) { final PsiFile copy = cached.first;