com.intellij.psi.PsiElement#getProject ( )源码实例Demo

下面列出了com.intellij.psi.PsiElement#getProject ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

@Override
public final void navigate(MouseEvent mouseEvent, PsiElement psiElement) {
    if (canNavigate(psiElement)) {
        final Project project = psiElement.getProject();
        final List<VirtualFile> fileList = findTemplteFileList(psiElement);
        if (fileList.size() == 1) {
            FileEditorManager.getInstance(project).openFile(fileList.get(0), true);
        } else if (fileList.size() > 1) {
            final List<VirtualFile> infos = new ArrayList<>(fileList);
            List<PsiElement> elements = new ArrayList<>();
            PsiManager psiManager = PsiManager.getInstance(psiElement.getProject());
            infos.forEach(virtualFile -> elements.add(psiManager.findFile(virtualFile).getNavigationElement()));
            NavigationUtil.getPsiElementPopup(elements.toArray(new PsiElement[0]), title).show(new RelativePoint(mouseEvent));
        } else {
            if (fileList == null || fileList.size() <= 0) {
                Messages.showErrorDialog("没有找到这个资源文件,请检查!", "错误提示");
            }
        }
    }

}
 
private void attachExtendsFileGoto(PsiElement sourceElement, final List<PsiElement> psiElements) {

        final Project project = sourceElement.getProject();
        final VirtualFile currentFile = sourceElement.getContainingFile().getVirtualFile();

        final String finalText = normalizeFilename(sourceElement.getText());
        TemplateUtil.collectFiles(project, new TemplateUtil.SmartyTemplatePreventSelfVisitor(currentFile) {
            @Override
            public void visitNonSelfFile(VirtualFile virtualFile, String fileName) {

                if (!fileName.equals(finalText)) {
                    return;
                }

                PsiFile psiFile = PsiManager.getInstance(project).findFile(virtualFile);
                if (psiFile != null) {
                    psiElements.add(psiFile);
                }

            }
        });

    }
 
源代码3 项目: consulo   文件: ExtractMethodHelper.java
public static void processDuplicates(@Nonnull final PsiElement callElement,
                                     @Nonnull final PsiElement generatedMethod,
                                     @Nonnull final List<PsiElement> scope,
                                     @Nonnull final SimpleDuplicatesFinder finder,
                                     @Nonnull final Editor editor,
                                     @Nonnull final Consumer<Pair<SimpleMatch, PsiElement>> replacer) {
  finder.setReplacement(callElement);
  if (ApplicationManager.getApplication().isUnitTestMode()) {
    replaceDuplicates(callElement, editor, replacer, finder.findDuplicates(scope, generatedMethod));
    return;
  }
  final Project project = callElement.getProject();
  ProgressManager.getInstance().run(new Task.Backgroundable(project, RefactoringBundle.message("searching.for.duplicates"), true) {
    public void run(@Nonnull ProgressIndicator indicator) {
      if (myProject == null || myProject.isDisposed()) return;
      final List<SimpleMatch> duplicates = ApplicationManager.getApplication().runReadAction(new Computable<List<SimpleMatch>>() {
        @Override
        public List<SimpleMatch> compute() {
          return finder.findDuplicates(scope, generatedMethod);
        }
      });

      ApplicationManager.getApplication().invokeLater(() -> replaceDuplicates(callElement, editor, replacer, duplicates));
    }
  });
}
 
private void attachSnippetNamespaceTagGoto(PsiElement sourceElement, final List<PsiElement> psiElements) {

        final Project project = sourceElement.getProject();

        String namespace = sourceElement.getText();
        if(StringUtils.isBlank(namespace)) {
            return;
        }

        final String finalText = normalizeFilename(namespace);
        TemplateUtil.collectFiles(sourceElement.getProject(), (virtualFile, fileName) -> {

            if (!fileName.replaceFirst("[.][^.]+$", "").equals(finalText)) {
                return;
            }

            PsiFile psiFile = PsiManager.getInstance(project).findFile(virtualFile);
            if (psiFile != null) {
                psiElements.add(psiFile);
            }
        }, "tpl");

        psiElements.addAll(SnippetUtil.getSnippetNamespaceTargets(sourceElement.getProject(), namespace));
    }
 
源代码5 项目: consulo   文件: ToolsImpl.java
@Override
@javax.annotation.Nullable
public InspectionToolWrapper getEnabledTool(PsiElement element) {
  if (!myEnabled) return null;
  if (myTools == null || element == null) {
    return myDefaultState.isEnabled() ? myDefaultState.getTool() : null;
  }
  final Project project = element.getProject();
  final DependencyValidationManager manager = DependencyValidationManager.getInstance(project);
  for (ScopeToolState state : myTools) {
    final NamedScope scope = state.getScope(project);
    if (scope != null) {
      final PackageSet set = scope.getValue();
      if (set != null && set.contains(element.getContainingFile(), manager)) {
        return state.isEnabled() ? state.getTool() : null;
      }
    }
  }
  return myDefaultState.isEnabled() ? myDefaultState.getTool() : null;
}
 
源代码6 项目: consulo   文件: UsageHolder.java
public UsageHolder(PsiElement element, UsageInfo[] usageInfos) {
  Project project = element.getProject();
  myElementPointer = SmartPointerManager.getInstance(project).createSmartPsiElementPointer(element);

  GeneratedSourcesFilter[] filters = GeneratedSourcesFilter.EP_NAME.getExtensions();
  for (UsageInfo usageInfo : usageInfos) {
    if (!(usageInfo instanceof SafeDeleteReferenceUsageInfo)) continue;
    final SafeDeleteReferenceUsageInfo usage = (SafeDeleteReferenceUsageInfo)usageInfo;
    if (usage.getReferencedElement() != element) continue;

    if (!usage.isSafeDelete()) {
      myUnsafeUsages++;
      if (usage.isNonCodeUsage || isInGeneratedCode(usage, project, filters)) {
        myNonCodeUnsafeUsages++;
      }
    }
  }
}
 
/**
 * We have to override {@link com.intellij.formatting.templateLanguages.TemplateLanguageFormattingModelBuilder#createModel}
 * since after we delegate to some templated languages, those languages (xml/html for sure, potentially others)
 * delegate right back to us to format the DustTypes.OUTER_TYPE token we tell them to ignore,
 * causing an stack-overflowing loop.
 */
@NotNull
public FormattingModel createModel(PsiElement element, CodeStyleSettings settings) {

  final PsiFile file = element.getContainingFile();
  Block rootBlock;

  ASTNode node = element.getNode();

  if (node.getElementType() == DustFileViewProvider.OUTER_TYPE) {
    // If we're looking at a DustTypes.HTML element, then we've been invoked by our templated
    // language.  Make a dummy block to allow that formatter to continue
    return new SimpleTemplateLanguageFormattingModelBuilder().createModel(element, settings);
  } else {
    rootBlock = getRootBlock(file, file.getViewProvider(), settings);
  }

  return new DocumentBasedFormattingModel(rootBlock, element.getProject(), settings, file.getFileType(), file);
}
 
@Override
protected void addCompletions(
    CompletionParameters parameters, ProcessingContext context, CompletionResultSet result) {
  PsiElement position = parameters.getPosition();
  if (!CompletionUtils.findFirstParent(position, LithoPluginUtils::isLayoutSpec).isPresent())
    return;

  final Project project = position.getProject();
  for (String annotationFQN : ANNOTATION_QUALIFIED_NAMES) {
    LookupElement lookup =
        PrioritizedLookupElement.withPriority(
            createLookup(annotationFQN, project), Integer.MAX_VALUE);
    result.addElement(lookup);
  }
}
 
源代码9 项目: intellij-xquery   文件: KeywordCollector.java
@NotNull
private Collection<String> suggestKeywordsBasedOnParserExpectedKeywords(@NotNull PsiElement position) {
    String text = getPrecedingText(position, CompletionInitializationContext.DUMMY_IDENTIFIER);
    Project project = position.getProject();
    PsiFile temporaryFileForCompletionCheck = createFileForText(project, text + "          ");
    int completionOffset = calculateCompletionOffset(position);
    GeneratedParserUtilBase.CompletionState completionStateInTemporaryFile = getCompletionStateForKeywords(completionOffset);
    temporaryFileForCompletionCheck.putUserData(COMPLETION_STATE_KEY, completionStateInTemporaryFile);
    triggerParsingInFile(temporaryFileForCompletionCheck);
    List<String> stripped = stringPrecedingText(StringUtils.normalizeWhitespaces(text), completionStateInTemporaryFile.items);
    return expandMultiWordOptions(stripped);
}
 
源代码10 项目: consulo   文件: IconDescriptorUpdaters.java
@Nonnull
@RequiredReadAction
public static Image getIconWithoutCache(@Nonnull PsiElement element, int flags) {
  Project project = element.getProject();
  IconDescriptor iconDescriptor = new IconDescriptor(null);
  IconDescriptorUpdater.EP_NAME.composite(project).updateIcon(iconDescriptor, element, flags);
  return iconDescriptor.toIcon();
}
 
源代码11 项目: mule-intellij-plugins   文件: FlowRenameDialog.java
public FlowRenameDialog(@Nullable Editor editor, @NotNull PsiElement element, @NotNull XmlTag tag) {
    super(element.getProject(), true);
    this.myEditor = editor;
    this.myElement = element;
    this.myTag = tag;
    this.setTitle(REFACTORING_NAME);
    this.createNewNameComponent();
    this.init();
    this.myTitleLabel.setText("Rename Mule flow '" + tag.getAttributeValue("name") + "' and its usages to:");
    this.validateButtons();
}
 
源代码12 项目: buck   文件: BuckGotoProvider.java
@VisibleForTesting
PsiElement getGotoDeclarationTarget(@Nullable PsiElement element) {
  if (element == null || !(element.getLanguage() instanceof BuckLanguage)) {
    return null;
  }
  Project project = element.getProject();
  if (project.isDefault()) {
    return null;
  }
  VirtualFile sourceFile = element.getContainingFile().getVirtualFile();
  if (sourceFile == null) {
    return null;
  }
  BuckLoadArgument buckLoadArgument =
      PsiTreeUtil.getParentOfType(element, BuckLoadArgument.class);
  if (buckLoadArgument != null) {
    return resolveAsLoadArgument(project, sourceFile, buckLoadArgument);
  }
  BuckIdentifier buckIdentifier =
      PsiTreeUtil.getParentOfType(element, BuckIdentifier.class, false);
  if (buckIdentifier != null) {
    return resolveAsIdentifier(project, buckIdentifier);
  }
  BuckString buckString = PsiTreeUtil.getParentOfType(element, BuckString.class, false);
  if (buckString != null) {
    return resolveAsBuckString(project, sourceFile, buckString);
  }
  return null;
}
 
public void addCompletions(@NotNull CompletionParameters parameters, @NotNull ProcessingContext context, @NotNull CompletionResultSet resultSet) {
    PsiElement position = parameters.getPosition();
    if(!Symfony2ProjectComponent.isEnabled(position)) {
        return;
    }

    Project project = position.getProject();
    for (Map.Entry<String, TwigExtension> entry : TwigExtensionParser.getOperators(project).entrySet()) {
        resultSet.addElement(new TwigExtensionLookupElement(project, entry.getKey(), entry.getValue()));
    }
}
 
public void addCompletions(@NotNull CompletionParameters parameters,
                           ProcessingContext context,
                           @NotNull CompletionResultSet resultSet) {

    PsiElement element = parameters.getPosition().getParent();
    Project project = element.getProject();

    if(!ProjectComponent.isEnabled(project)) {
        return;
    }

    if (!(element instanceof StringLiteralExpression)) {
        return;
    }

    Container container = Utils.findContainerForFirstParameterOfPimpleMethod((StringLiteralExpression) element);
    if (container == null){
        return;
    }

    for (Service service : container.getServices().values()) {
        resultSet.addElement(new ServiceLookupElement(service, project));
    }

    for (Parameter parameter : container.getParameters().values()) {
        resultSet.addElement(new ParameterLookupElement(parameter));
    }

    resultSet.stopHere();
}
 
@NotNull
@Override
public FoldingDescriptor[] buildFoldRegions(@NotNull PsiElement root, @NotNull Document document, boolean quick) {
    Project project = root.getProject();
    String localizationPackage = NutzLocalUtil.getLocalizationPackage(project);
    if (null == localizationPackage) {
        return FoldingDescriptor.EMPTY;
    }
    List<FoldingDescriptor> descriptors = new ArrayList<>();
    Collection<VirtualFile> propertiesFiles = FilenameIndex.getAllFilesByExt(project, "properties", GlobalSearchScope.projectScope(project));
    Collection<PsiLiteralExpression> literalExpressions = PsiTreeUtil.findChildrenOfType(root, PsiLiteralExpression.class);
    for (final PsiLiteralExpression literalExpression : literalExpressions) {
        if (!NutzLocalUtil.isLocal(literalExpression)) {
            continue;
        }
        String key = literalExpression.getValue() instanceof String ? (String) literalExpression.getValue() : null;
        if (key != null) {
            final List<String> properties = NutzLocalUtil.findProperties(project, propertiesFiles, localizationPackage, key);
            TextRange textRange = new TextRange(literalExpression.getTextRange().getStartOffset() + 1, literalExpression.getTextRange().getEndOffset() - 1);
            String value;
            if (properties.size() == 1) {
                value = properties.get(0);
            } else if (properties.size() > 1) {
                value = properties.get(0) + "[该键值存在多个配置文件中!]";
            } else {
                value = "国际化信息中不存在[" + key + "],使用时可能产生异常,请检查!";
            }
            descriptors.add(new NutzLocalizationFoldingDescriptor(literalExpression.getNode(), textRange, value));
        }
    }
    return descriptors.toArray(new FoldingDescriptor[descriptors.size()]);
}
 
@Override
@Nonnull
public FormattingModel createModel(final PsiElement element, final CodeStyleSettings settings) {
  if (element instanceof PsiFile) {
    final FileViewProvider viewProvider = ((PsiFile)element).getViewProvider();
    if (viewProvider instanceof TemplateLanguageFileViewProvider) {
      final Language language = ((TemplateLanguageFileViewProvider)viewProvider).getTemplateDataLanguage();
      FormattingModelBuilder builder = LanguageFormatting.INSTANCE.forLanguage(language);
      if (builder != null) {
        return builder.createModel(viewProvider.getPsi(language), settings);
      }
    }
  }

  final PsiFile file = element.getContainingFile();
  return new DocumentBasedFormattingModel(new AbstractBlock(element.getNode(), Wrap.createWrap(WrapType.NONE, false), Alignment.createAlignment()) {
    @Override
    protected List<Block> buildChildren() {
      return Collections.emptyList();
    }

    @Override
    public Spacing getSpacing(final Block child1, @Nonnull final Block child2) {
      return Spacing.getReadOnlySpacing();
    }

    @Override
    public boolean isLeaf() {
      return true;
    }
  }, element.getProject(), settings, file.getFileType(), file);
}
 
public static void addCompletions(@NotNull ORTypes types, @NotNull PsiElement element, @NotNull CompletionResultSet resultSet) {
    LOG.debug("MODULE expression completion");

    Project project = element.getProject();
    GlobalSearchScope scope = GlobalSearchScope.allScope(project);
    PsiFinder psiFinder = PsiFinder.getInstance(project);

    // Compute module path (all module names before the last dot)
    ModulePath modulePath = computePathFromPsi(types, element);
    if (LOG.isDebugEnabled()) {
        LOG.debug("  module path", modulePath.toString());
    }

    if (modulePath.isEmpty()) {
        // First module to complete, use the list of files
        Set<PsiFakeModule> topModules = psiFinder.findTopModules(true, scope);
        for (PsiFakeModule topModule : topModules) {
            FileBase topFile = (FileBase) topModule.getContainingFile();
            if (!topFile.equals(element.getContainingFile())) {
                resultSet.addElement(LookupElementBuilder.
                        create(topModule.getModuleName()).
                        withTypeText(FileHelper.shortLocation(project, topFile.getVirtualFile().getPath())).
                        withIcon(IconProvider.getFileModuleIcon(topFile)));
            }

        }

        // Add virtual namespaces
        Collection<String> namespaces = FileModuleIndexService.getService().getNamespaces(project);
        LOG.debug("  namespaces", namespaces);

        for (String namespace : namespaces) {
            resultSet.addElement(LookupElementBuilder.
                    create(namespace).
                    withTypeText("Generated namespace").
                    withIcon(ORIcons.VIRTUAL_NAMESPACE));
        }
    } else {
        Set<PsiModule> modulesFromQn = psiFinder.findModulesFromQn(modulePath.toString(), true, interfaceOrImplementation, scope);
        PsiModule foundModule = modulesFromQn.isEmpty() ? null : modulesFromQn.iterator().next();
        if (foundModule != null) {
            LOG.debug("  Found module", foundModule);
            for (PsiModule module : foundModule.getModules()) {
                resultSet.addElement(LookupElementBuilder.
                        create(module).
                        withIcon(PsiIconUtil.getProvidersIcon(module, 0)));
            }
        }
    }
}
 
@Override
protected void addBashCompletions(String currentText, CompletionParameters parameters, ProcessingContext context, CompletionResultSet result) {
    PsiElement element = parameters.getPosition();

    BashVar varElement = PsiTreeUtil.getContextOfType(element, BashVar.class, false);
    boolean dollarPrefix = currentText != null && currentText.startsWith("$");
    boolean insideExpansion = element.getParent() != null && element.getParent().getParent() instanceof BashParameterExpansion;
    if (varElement == null && !dollarPrefix && !insideExpansion) {
        return;
    }

    int invocationCount = parameters.getInvocationCount();
    int resultLength = 0;

    PsiElement original = parameters.getOriginalPosition();
    BashVar varElementOriginal = original != null ? PsiTreeUtil.getContextOfType(original, BashVar.class, false) : null;

    if (varElement != null) {
        // only keep vars of included files when starting in the original file
        PsiElement originalRef = varElementOriginal != null ? varElementOriginal : original;
        if (originalRef != null) {
            resultLength += addCollectedVariables(original, result, new BashVarVariantsProcessor(originalRef, false, true));
        }

        // only keep vars of the dummy file when starting in the dummy file
        resultLength += addCollectedVariables(element, result, new BashVarVariantsProcessor(varElement, true, false));
    } else {
        // not in a variable element, but collect all known variable names at this offset in the current file
        if (original != null) {
            resultLength += addCollectedVariables(original, result, new BashVarVariantsProcessor(original, false, true));
        }
        resultLength += addCollectedVariables(element, result, new BashVarVariantsProcessor(element, false, true));
    }

    if (currentText != null && (dollarPrefix || insideExpansion) && (invocationCount >= 2 || resultLength == 0)) {
        Project project = element.getProject();
        addBuiltInVariables(result, project);
        addGlobalVariables(result, project);
    } else {
        result.addLookupAdvertisement("Press twice for global variables");
    }
}
 
源代码19 项目: consulo-csharp   文件: MsilDelegateTypeRef.java
public MsilDelegateTypeRef(@Nonnull PsiElement scope, @Nonnull DotNetTypeRef typeRef)
{
	super(scope.getProject());
	myTypeRef = typeRef;
}
 
源代码20 项目: BashSupport   文件: BashEvalElementType.java
@Override
protected ASTNode doParseContents(@NotNull ASTNode chameleon, @NotNull PsiElement psi) {
    Project project = psi.getProject();
    boolean supportEvalEscapes = BashProjectSettings.storedSettings(project).isEvalEscapesEnabled();

    String originalText = chameleon.getChars().toString();
    ParserDefinition def = LanguageParserDefinitions.INSTANCE.forLanguage(BashFileType.BASH_LANGUAGE);

    boolean isDoubleQuoted = originalText.startsWith("\"") && originalText.endsWith("\"");
    boolean isSingleQuoted = originalText.startsWith("'") && originalText.endsWith("'");
    boolean isEscapingSingleQuoted = originalText.startsWith("$'") && originalText.endsWith("'");
    boolean isUnquoted = !isDoubleQuoted && !isSingleQuoted && !isEscapingSingleQuoted;

    String prefix = isUnquoted ? "" : originalText.subSequence(0, isEscapingSingleQuoted ? 2 : 1).toString();
    String content = isUnquoted ? originalText : originalText.subSequence(isEscapingSingleQuoted ? 2 : 1, originalText.length() - 1).toString();
    String suffix = isUnquoted ? "" : originalText.subSequence(originalText.length() - 1, originalText.length()).toString();

    TextPreprocessor textProcessor;
    if (supportEvalEscapes) {
        if (isEscapingSingleQuoted) {
            textProcessor = new BashEnhancedTextPreprocessor(TextRange.from(prefix.length(), content.length()));
        } else if (isSingleQuoted) {
            //no escape handling for single-quoted strings
            textProcessor = new BashIdentityTextPreprocessor(TextRange.from(prefix.length(), content.length()));
        } else {
            //fallback to simple escape handling
            textProcessor = new BashSimpleTextPreprocessor(TextRange.from(prefix.length(), content.length()));
        }
    } else {
        textProcessor = new BashIdentityTextPreprocessor(TextRange.from(prefix.length(), content.length()));
    }

    StringBuilder unescapedContent = new StringBuilder(content.length());
    textProcessor.decode(content, unescapedContent);

    Lexer lexer = isUnquoted
            ? def.createLexer(project)
            : new PrefixSuffixAddingLexer(def.createLexer(project), prefix, TokenType.WHITE_SPACE, suffix, TokenType.WHITE_SPACE);

    PsiBuilder psiBuilder = new UnescapingPsiBuilder(project,
            def,
            lexer,
            chameleon,
            originalText,
            prefix + unescapedContent + suffix,
            textProcessor);

    return def.createParser(project).parse(this, psiBuilder).getFirstChildNode();
}