Java 类com.intellij.psi.PsiNameIdentifierOwner 实例源码
项目:intellij-ce-playground
文件:PsiIdentifierOwnerTokenizer.java
@Override
public void tokenize(@NotNull PsiNameIdentifierOwner element, TokenConsumer consumer) {
PsiElement identifier = element.getNameIdentifier();
if (identifier == null) {
return;
}
PsiElement parent = element;
final TextRange range = identifier.getTextRange();
if (range.isEmpty()) return;
int offset = range.getStartOffset() - parent.getTextRange().getStartOffset();
if(offset < 0 ) {
parent = PsiTreeUtil.findCommonParent(identifier, element);
offset = range.getStartOffset() - parent.getTextRange().getStartOffset();
}
String text = identifier.getText();
consumer.consumeToken(parent, text, true, offset, TextRange.allOf(text), IdentifierSplitter.getInstance());
}
项目:intellij-ce-playground
文件:IdentifierUtil.java
@Nullable
public static PsiElement getNameIdentifier(@NotNull PsiElement element) {
if (element instanceof PsiNameIdentifierOwner) {
return ((PsiNameIdentifierOwner)element).getNameIdentifier();
}
if (element.isPhysical() &&
element instanceof PsiNamedElement &&
element.getContainingFile() != null &&
element.getTextRange() != null) {
// Quite hacky way to get name identifier. Depends on getTextOffset overriden properly.
final PsiElement potentialIdentifier = element.findElementAt(element.getTextOffset() - element.getTextRange().getStartOffset());
if (potentialIdentifier != null && Comparing.equal(potentialIdentifier.getText(), ((PsiNamedElement)element).getName(), false)) {
return potentialIdentifier;
}
}
return null;
}
项目:intellij-ce-playground
文件:UnfocusedNameIdentifier.java
@NotNull
@Override
public ThreeState shouldFocusLookup(@NotNull CompletionParameters parameters) {
final PsiElement position = parameters.getPosition();
final PsiElement parent = position.getParent();
if (parent instanceof PsiNameIdentifierOwner) {
final PsiElement nameIdentifier = ((PsiNameIdentifierOwner)parent).getNameIdentifier();
if (nameIdentifier == position) {
return ThreeState.NO;
}
if (nameIdentifier != null && position.getTextRange().equals(nameIdentifier.getTextRange())) {
//sometimes name identifiers are non-physical (e.g. Groovy)
return ThreeState.NO;
}
}
return ThreeState.UNSURE;
}
项目:intellij-ce-playground
文件:NamedElementDuplicateHandler.java
@Nullable
private static PsiElement findNameIdentifier(Editor editor, PsiFile file, TextRange toDuplicate) {
int nonWs = CharArrayUtil.shiftForward(editor.getDocument().getCharsSequence(), toDuplicate.getStartOffset(), "\n\t ");
PsiElement psi = file.findElementAt(nonWs);
PsiElement named = null;
while (psi != null) {
TextRange range = psi.getTextRange();
if (range == null || psi instanceof PsiFile || !toDuplicate.contains(psi.getTextRange())) {
break;
}
if (psi instanceof PsiNameIdentifierOwner) {
named = ((PsiNameIdentifierOwner)psi).getNameIdentifier();
}
psi = psi.getParent();
}
return named;
}
项目:intellij-ce-playground
文件:ChangeSignatureAction.java
@Nullable
private static PsiElement findTargetMember(@Nullable PsiElement element) {
if (element == null) return null;
final ChangeSignatureHandler fileHandler = getChangeSignatureHandler(element.getLanguage());
if (fileHandler != null) {
final PsiElement targetMember = fileHandler.findTargetMember(element);
if (targetMember != null) return targetMember;
}
PsiReference reference = element.getReference();
if (reference == null && element instanceof PsiNameIdentifierOwner) {
return element;
}
if (reference != null) {
return reference.resolve();
}
return null;
}
项目:intellij-ce-playground
文件:PyShadowingBuiltinsInspection.java
private void processElement(@NotNull PsiNameIdentifierOwner element) {
final ScopeOwner owner = ScopeUtil.getScopeOwner(element);
if (owner instanceof PyClass) {
return;
}
final String name = element.getName();
if (name != null && !myIgnoredNames.contains(name)) {
final PyBuiltinCache builtinCache = PyBuiltinCache.getInstance(element);
final PsiElement builtin = builtinCache.getByName(name);
if (builtin != null && !PyUtil.inSameFile(builtin, element)) {
final PsiElement identifier = element.getNameIdentifier();
final PsiElement problemElement = identifier != null ? identifier : element;
registerProblem(problemElement, String.format("Shadows built-in name '%s'", name),
ProblemHighlightType.WEAK_WARNING, null, new PyRenameElementQuickFix(), new PyIgnoreBuiltinQuickFix(name));
}
}
}
项目:intellij-ce-playground
文件:InvertBooleanFix.java
@Override
protected void doFix(final Project project, ProblemDescriptor descriptor) throws IncorrectOperationException {
final PsiNameIdentifierOwner owner = PsiTreeUtil.getParentOfType(descriptor.getPsiElement(), PsiVariable.class, PsiMethod.class);
if (owner == null) {
return;
}
final RefactoringActionHandler handler = JavaRefactoringActionHandlerFactory.getInstance().createInvertBooleanHandler();
final Runnable runnable = new Runnable() {
@Override
public void run() {
handler.invoke(project, new PsiElement[]{owner}, null);
}
};
if (ApplicationManager.getApplication().isUnitTestMode()) {
runnable.run();
}
else {
ApplicationManager.getApplication().invokeLater(runnable, project.getDisposed());
}
}
项目:intellij
文件:BuildElementDescriptionProvider.java
@Nullable
@Override
public String getElementDescription(PsiElement element, ElementDescriptionLocation location) {
if (!(element instanceof BuildElement)) {
return null;
}
if (location instanceof UsageViewLongNameLocation) {
return ((BuildElement) element).getPresentableText();
}
if (location instanceof UsageViewShortNameLocation) {
if (element instanceof PsiNameIdentifierOwner) {
// this is used by rename operations, so needs to be accurate
return ((PsiNameIdentifierOwner) element).getName();
}
if (element instanceof PsiFile) {
return ((PsiFile) element).getName();
}
return ((BuildElement) element).getPresentableText();
}
return null;
}
项目:js-graphql-intellij-plugin
文件:JSGraphQLEndpointSpellcheckingStrategy.java
@NotNull
@Override
public Tokenizer getTokenizer(PsiElement element) {
if (element instanceof PsiWhiteSpace) {
return EMPTY_TOKENIZER;
}
if (element instanceof PsiNameIdentifierOwner) {
return new PsiIdentifierOwnerTokenizer();
}
if (element.getParent() instanceof PsiNameIdentifierOwner) {
return EMPTY_TOKENIZER;
}
if (element.getNode().getElementType() == JSGraphQLEndpointTokenTypes.IDENTIFIER) {
return IDENTIFIER_TOKENIZER;
}
if (element instanceof PsiComment) {
if (SuppressionUtil.isSuppressionComment(element)) {
return EMPTY_TOKENIZER;
}
return myCommentTokenizer;
}
return EMPTY_TOKENIZER;
}
项目:js-graphql-intellij-plugin
文件:JSGraphQLEndpointStructureViewTreeElement.java
@Nullable
@Override
public String getPresentableText() {
if(element instanceof JSGraphQLEndpointImportDeclaration) {
return element.getText();
}
final PsiNameIdentifierOwner identifier = PsiTreeUtil.getChildOfType(element, PsiNameIdentifierOwner.class);
if (identifier != null) {
return identifier.getText();
}
final ASTNode astIdentifier = element.getNode().getFirstChildNode();
if (astIdentifier != null && astIdentifier.getElementType() == JSGraphQLEndpointTokenTypes.IDENTIFIER) {
return astIdentifier.getText();
}
if (element instanceof PsiFile) {
return null;
}
return element.getText();
}
项目:tools-idea
文件:PsiIdentifierOwnerTokenizer.java
@Override
public void tokenize(@NotNull PsiNameIdentifierOwner element, TokenConsumer consumer) {
PsiElement identifier = element.getNameIdentifier();
if (identifier == null) {
return;
}
PsiElement parent = element;
final TextRange range = identifier.getTextRange();
if (range.isEmpty()) return;
int offset = range.getStartOffset() - parent.getTextRange().getStartOffset();
if(offset < 0 ) {
parent = PsiTreeUtil.findCommonParent(identifier, element);
offset = range.getStartOffset() - parent.getTextRange().getStartOffset();
}
String text = identifier.getText();
consumer.consumeToken(parent, text, true, offset, TextRange.allOf(text), IdentifierSplitter.getInstance());
}
项目:tools-idea
文件:IdentifierUtil.java
@Nullable
public static PsiElement getNameIdentifier(@NotNull PsiElement element) {
if (element instanceof PsiNameIdentifierOwner) {
return ((PsiNameIdentifierOwner)element).getNameIdentifier();
}
if (element.isPhysical() &&
element instanceof PsiNamedElement &&
element.getContainingFile() != null &&
element.getTextRange() != null) {
// Quite hacky way to get name identifier. Depends on getTextOffset overriden properly.
final PsiElement potentialIdentifier = element.findElementAt(element.getTextOffset() - element.getTextRange().getStartOffset());
if (potentialIdentifier != null && Comparing.equal(potentialIdentifier.getText(), ((PsiNamedElement)element).getName(), false)) {
return potentialIdentifier;
}
}
return null;
}
项目:tools-idea
文件:UnfocusedNameIdentifier.java
@NotNull
@Override
public ThreeState shouldFocusLookup(@NotNull CompletionParameters parameters) {
final PsiElement position = parameters.getPosition();
final PsiElement parent = position.getParent();
if (parent instanceof PsiNameIdentifierOwner) {
final PsiElement nameIdentifier = ((PsiNameIdentifierOwner)parent).getNameIdentifier();
if (nameIdentifier == position) {
return ThreeState.NO;
}
if (nameIdentifier != null && position.getTextRange().equals(nameIdentifier.getTextRange())) {
//sometimes name identifiers are non-physical (e.g. Groovy)
return ThreeState.NO;
}
}
return ThreeState.UNSURE;
}
项目:consulo-csharp
文件:CSharpPsiUtilImpl.java
@Nullable
@RequiredReadAction
public static String getNameWithAt(@NotNull PsiNameIdentifierOwner element)
{
PsiElement nameIdentifier = element.getNameIdentifier();
if(nameIdentifier == null)
{
return null;
}
if(!(nameIdentifier instanceof CSharpIdentifier))
{
LOGGER.error("NameIdentifier is not 'CSharpIdentifier' element. Owner: " + element.getClass().getName());
return nameIdentifier.getText();
}
String value = ((CSharpIdentifier) nameIdentifier).getValue();
if(value == null)
{
return null;
}
return value;
}
项目:consulo-csharp
文件:CSharpAnchorProvider.java
@Nullable
@Override
@RequiredReadAction
public PsiElement getAnchor(@NotNull PsiElement element)
{
if(element instanceof MsilElementWrapper || !element.isPhysical())
{
return null;
}
if(element instanceof CSharpTypeDeclaration ||
element instanceof CSharpFieldDeclaration ||
element instanceof CSharpMethodDeclaration ||
element instanceof CSharpConstructorDeclaration ||
element instanceof CSharpIndexMethodDeclaration ||
//element instanceof CSharpConversionMethodDeclaration ||
element instanceof CSharpPropertyDeclaration ||
element instanceof CSharpEventDeclaration)
{
return ((PsiNameIdentifierOwner) element).getNameIdentifier();
}
return null;
}
项目:consulo-csharp
文件:CS0539.java
@RequiredReadAction
@Nullable
@Override
public CompilerCheckBuilder checkImpl(@NotNull CSharpLanguageVersion languageVersion, @NotNull CSharpHighlightContext highlightContext, @NotNull DotNetVirtualImplementOwner element)
{
PsiElement nameIdentifier = ((PsiNameIdentifierOwner) element).getNameIdentifier();
if(nameIdentifier == null)
{
return null;
}
final Pair<CSharpLikeMethodDeclarationImplUtil.ResolveVirtualImplementResult, PsiElement> resultPair = CSharpLikeMethodDeclarationImplUtil.resolveVirtualImplementation(element, element);
switch(resultPair.getFirst())
{
case CANT_HAVE:
case FOUND:
default:
return null;
case NOT_FOUND:
return newBuilder(nameIdentifier, formatElement(element));
}
}
项目:consulo-csharp
文件:CS0542.java
@RequiredReadAction
@Nullable
@Override
public HighlightInfoFactory checkImpl(@NotNull CSharpLanguageVersion languageVersion, @NotNull CSharpHighlightContext highlightContext, @NotNull DotNetQualifiedElement element)
{
PsiElement parent = element.getParent();
if(!(parent instanceof CSharpTypeDeclaration) | !(element instanceof PsiNameIdentifierOwner) || element instanceof CSharpConstructorDeclaration || element instanceof
CSharpConversionMethodDeclaration || element instanceof CSharpEnumConstantDeclaration)
{
return null;
}
if(Comparing.equal(element.getName(), ((CSharpTypeDeclaration) parent).getName()))
{
PsiElement nameIdentifier = ((PsiNameIdentifierOwner) element).getNameIdentifier();
if(nameIdentifier == null)
{
return null;
}
return newBuilder(nameIdentifier, element.getName());
}
return null;
}
项目:consulo-csharp
文件:CS0708.java
@RequiredReadAction
@Nullable
@Override
public HighlightInfoFactory checkImpl(@NotNull CSharpLanguageVersion languageVersion, @NotNull CSharpHighlightContext highlightContext, @NotNull DotNetModifierListOwner element)
{
PsiElement parent = element.getParent();
if(parent instanceof DotNetTypeDeclaration && ((DotNetTypeDeclaration) parent).hasModifier(DotNetModifier.STATIC))
{
if(CSharpPsiUtilImpl.isTypeLikeElement(element))
{
return null;
}
if(!element.hasModifier(DotNetModifier.STATIC))
{
PsiElement nameIdentifier = ((PsiNameIdentifierOwner) element).getNameIdentifier();
return newBuilder(ObjectUtil.notNull(nameIdentifier, element), formatElement(element)).addQuickFix(new AddModifierFix
(DotNetModifier.STATIC, element));
}
}
return null;
}
项目:consulo-dotnet
文件:DotNetLineBreakpointType.java
@NotNull
@Override
@RequiredDispatchThread
public String getText()
{
String text;
if(myExecutableChild instanceof PsiNameIdentifierOwner)
{
TextRange textRange = new TextRange(myExecutableChild.getTextOffset(), myExecutableChild.getTextRange().getEndOffset());
text = textRange.substring(myExecutableChild.getContainingFile().getText());
}
else
{
text = myExecutableChild.getText();
}
return StringUtil.shortenTextWithEllipsis(text, 100, 0);
}
项目:consulo
文件:IdentifierUtil.java
@Nullable
@RequiredReadAction
public static PsiElement getNameIdentifier(@Nonnull PsiElement element) {
if (element instanceof PsiNameIdentifierOwner) {
return ((PsiNameIdentifierOwner)element).getNameIdentifier();
}
if (element.isPhysical() &&
element instanceof PsiNamedElement &&
element.getContainingFile() != null &&
element.getTextRange() != null) {
// Quite hacky way to get name identifier. Depends on getTextOffset overriden properly.
final PsiElement potentialIdentifier = element.findElementAt(element.getTextOffset() - element.getTextRange().getStartOffset());
if (potentialIdentifier != null && Comparing.equal(potentialIdentifier.getText(), ((PsiNamedElement)element).getName(), false)) {
return potentialIdentifier;
}
}
return null;
}
项目:consulo
文件:NamedElementDuplicateHandler.java
@Nullable
private static PsiElement findNameIdentifier(Editor editor, PsiFile file, TextRange toDuplicate) {
int nonWs = CharArrayUtil.shiftForward(editor.getDocument().getCharsSequence(), toDuplicate.getStartOffset(), "\n\t ");
PsiElement psi = file.findElementAt(nonWs);
PsiElement named = null;
while (psi != null) {
TextRange range = psi.getTextRange();
if (range == null || psi instanceof PsiFile || !toDuplicate.contains(psi.getTextRange())) {
break;
}
if (psi instanceof PsiNameIdentifierOwner) {
named = ((PsiNameIdentifierOwner)psi).getNameIdentifier();
}
psi = psi.getParent();
}
return named;
}
项目:consulo
文件:ChangeSignatureAction.java
@Nullable
private static PsiElement findTargetMember(@Nullable PsiElement element) {
if (element == null) return null;
final ChangeSignatureHandler fileHandler = getChangeSignatureHandler(element.getLanguage());
if (fileHandler != null) {
final PsiElement targetMember = fileHandler.findTargetMember(element);
if (targetMember != null) return targetMember;
}
PsiReference reference = element.getReference();
if (reference == null && element instanceof PsiNameIdentifierOwner) {
return element;
}
if (reference != null) {
return reference.resolve();
}
return null;
}
项目:consulo-java
文件:ExternalAnnotationsLineMarkerProvider.java
@Nullable
static PsiModifierListOwner getAnnotationOwner(@Nullable PsiElement element)
{
if(element == null)
{
return null;
}
PsiElement owner = element.getParent();
if(!(owner instanceof PsiModifierListOwner) || !(owner instanceof PsiNameIdentifierOwner))
{
return null;
}
if(owner instanceof PsiParameter || owner instanceof PsiLocalVariable)
{
return null;
}
// support non-Java languages where getNameIdentifier may return non-physical psi with the same range
PsiElement nameIdentifier = ((PsiNameIdentifierOwner) owner).getNameIdentifier();
if(nameIdentifier == null || !nameIdentifier.getTextRange().equals(element.getTextRange()))
{
return null;
}
return (PsiModifierListOwner) owner;
}
项目:yii2inspections
文件:NamedElementUtil.java
/** returns name identifier, which is valid for reporting */
@Nullable
static public PsiElement getNameIdentifier(@Nullable PsiNameIdentifierOwner element) {
if (null != element) {
PsiElement id = element.getNameIdentifier();
boolean isIdReportable = null != id && id.getTextLength() > 0;
return isIdReportable ? id : null;
}
return null;
}
项目:laravel-insight
文件:ColumnWithoutAnnotationInspection.java
static void reportAccessorOrMutator(
@NotNull final ProblemsHolder problemsHolder,
@NotNull final PsiNameIdentifierOwner method,
@NotNull final PhpClass methodClass,
@NotNull final String methodName
) {
if (methodName.endsWith("Attribute")) {
final boolean isAccessor = methodName.startsWith("get");
final boolean isMutator = !isAccessor && methodName.startsWith("set");
if (isAccessor || isMutator) {
final PsiElement methodIdentifier = method.getNameIdentifier();
assert methodIdentifier != null;
Function methodReference = (Function) method;
if (isMutator) {
final Method methodAccessor = PhpClassUtil.findMethodDeclaration(methodClass, "get" + methodName.substring(3));
if (methodAccessor != null) {
methodReference = methodAccessor;
}
}
String methodReturnType = "mixed";
if (isAccessor || !Objects.equals(methodReference, method)) {
methodReturnType = PhpFunctionUtil.getReturnType(methodReference).toString();
}
final String methodPropertyPart = methodName.substring(3, methodName.length() - 9);
validatePropertyAnnotation(problemsHolder, methodClass, methodIdentifier,
CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, methodPropertyPart), methodReturnType);
}
}
}
项目:laravel-insight
文件:ColumnWithoutAnnotationInspection.java
@Nullable
private static PsiElement getReportableElement(
@NotNull final PsiNameIdentifierOwner phpClass,
@NotNull final PhpClassMember fieldPrimaryKey
) {
if (Objects.equals(fieldPrimaryKey.getContainingClass(), phpClass)) {
return fieldPrimaryKey.getNameIdentifier();
}
return phpClass.getNameIdentifier();
}
项目:GravSupport
文件:CustomCreateFromTemplateAction.java
public static void moveCaretAfterNameIdentifier(PsiNameIdentifierOwner createdElement) {
final Project project = createdElement.getProject();
final Editor editor = FileEditorManager.getInstance(project).getSelectedTextEditor();
if (editor != null) {
final VirtualFile virtualFile = createdElement.getContainingFile().getVirtualFile();
if (virtualFile != null) {
if (FileDocumentManager.getInstance().getDocument(virtualFile) == editor.getDocument()) {
final PsiElement nameIdentifier = createdElement.getNameIdentifier();
if (nameIdentifier != null) {
editor.getCaretModel().moveToOffset(nameIdentifier.getTextRange().getEndOffset());
}
}
}
}
}
项目:yii2inspections
文件:NamedElementUtil.java
/** returns name identifier, which is valid for reporting */
@Nullable
static public PsiElement getNameIdentifier(@Nullable PsiNameIdentifierOwner element) {
if (null != element) {
PsiElement id = element.getNameIdentifier();
boolean isIdReportable = null != id && id.getTextLength() > 0;
return isIdReportable ? id : null;
}
return null;
}
项目:protobuf-jetbrains-plugin
文件:GenericNameNode.java
/**
* Set name for a given element if it implements {@link PsiNameIdentifierOwner} and
* {@link PsiNameIdentifierOwner#getNameIdentifier()} resolves to an instance of
* {@link GenericNameNode}.
*/
public static PsiElement setName(PsiNameIdentifierOwner element, String name) {
PsiElement nameIdentifier = element.getNameIdentifier();
if (nameIdentifier instanceof GenericNameNode) {
GenericNameNode nameNode = (GenericNameNode) nameIdentifier;
return nameNode.setName(name);
}
throw new IncorrectOperationException(OPERATION_NOT_SUPPORTED);
}
项目:intellij-ce-playground
文件:RelatedItemLineMarkerProvider.java
public void collectNavigationMarkers(List<PsiElement> elements,
Collection<? super RelatedItemLineMarkerInfo> result,
boolean forNavigation) {
//noinspection ForLoopReplaceableByForEach
for (int i = 0, size = elements.size(); i < size; i++) {
PsiElement element = elements.get(i);
collectNavigationMarkers(element, result);
if (forNavigation && element instanceof PsiNameIdentifierOwner) {
PsiElement nameIdentifier = ((PsiNameIdentifierOwner)element).getNameIdentifier();
if (nameIdentifier != null && !elements.contains(nameIdentifier)) {
collectNavigationMarkers(nameIdentifier, result);
}
}
}
}
项目:intellij-ce-playground
文件:CreateFromTemplateAction.java
public static void moveCaretAfterNameIdentifier(PsiNameIdentifierOwner createdElement) {
final Project project = createdElement.getProject();
final Editor editor = FileEditorManager.getInstance(project).getSelectedTextEditor();
if (editor != null) {
final VirtualFile virtualFile = createdElement.getContainingFile().getVirtualFile();
if (virtualFile != null) {
if (FileDocumentManager.getInstance().getDocument(virtualFile) == editor.getDocument()) {
final PsiElement nameIdentifier = createdElement.getNameIdentifier();
if (nameIdentifier != null) {
editor.getCaretModel().moveToOffset(nameIdentifier.getTextRange().getEndOffset());
}
}
}
}
}
项目:intellij-ce-playground
文件:MemberInplaceRenameHandler.java
@Override
public InplaceRefactoring doRename(@NotNull final PsiElement elementToRename, final Editor editor, final DataContext dataContext) {
if (elementToRename instanceof PsiNameIdentifierOwner) {
final RenamePsiElementProcessor processor = RenamePsiElementProcessor.forElement(elementToRename);
if (processor.isInplaceRenameSupported()) {
final StartMarkAction startMarkAction = StartMarkAction.canStart(elementToRename.getProject());
if (startMarkAction == null || processor.substituteElementToRename(elementToRename, editor) == elementToRename) {
processor.substituteElementToRename(elementToRename, editor, new Pass<PsiElement>() {
@Override
public void pass(PsiElement element) {
final MemberInplaceRenamer renamer = createMemberRenamer(element, (PsiNameIdentifierOwner)elementToRename, editor);
boolean startedRename = renamer.performInplaceRename();
if (!startedRename) {
performDialogRename(elementToRename, editor, dataContext, renamer.myInitialName);
}
}
});
return null;
}
else {
final InplaceRefactoring inplaceRefactoring = editor.getUserData(InplaceRefactoring.INPLACE_RENAMER);
if (inplaceRefactoring != null && inplaceRefactoring.getClass() == MemberInplaceRenamer.class) {
final TemplateState templateState = TemplateManagerImpl.getTemplateState(InjectedLanguageUtil.getTopLevelEditor(editor));
if (templateState != null) {
templateState.gotoEnd(true);
}
}
}
}
}
performDialogRename(elementToRename, editor, dataContext, null);
return null;
}
项目:intellij-ce-playground
文件:InlineOptionsDialog.java
protected static int initOccurrencesNumber(PsiNameIdentifierOwner nameIdentifierOwner) {
final ProgressManager progressManager = ProgressManager.getInstance();
final PsiSearchHelper searchHelper = PsiSearchHelper.SERVICE.getInstance(nameIdentifierOwner.getProject());
final GlobalSearchScope scope = GlobalSearchScope.projectScope(nameIdentifierOwner.getProject());
final String name = nameIdentifierOwner.getName();
final boolean isCheapToSearch =
name != null && searchHelper.isCheapEnoughToSearch(name, scope, null, progressManager.getProgressIndicator()) != PsiSearchHelper.SearchCostResult.TOO_MANY_OCCURRENCES;
return isCheapToSearch ? ReferencesSearch.search(nameIdentifierOwner).findAll().size() : - 1;
}
项目:intellij-ce-playground
文件:PyShadowingNamesInspection.java
private void processElement(@NotNull PsiNameIdentifierOwner element) {
final ScopeOwner owner = ScopeUtil.getScopeOwner(element);
if (owner instanceof PyClass) {
return;
}
final String name = element.getName();
if (name != null) {
final PsiElement identifier = element.getNameIdentifier();
final PsiElement problemElement = identifier != null ? identifier : element;
if ("_".equals(name)) {
return;
}
if (owner != null) {
final ScopeOwner nextOwner = ScopeUtil.getScopeOwner(owner);
if (nextOwner != null) {
final ResolveProcessor processor = new ResolveProcessor(name);
PyResolveUtil.scopeCrawlUp(processor, nextOwner, null, name, null, null);
final PsiElement resolved = processor.getResult();
if (resolved != null) {
final PyComprehensionElement comprehension = PsiTreeUtil.getParentOfType(resolved, PyComprehensionElement.class);
if (comprehension != null && PyUtil.isOwnScopeComprehension(comprehension)) {
return;
}
final Scope scope = ControlFlowCache.getScope(owner);
if (scope.isGlobal(name) || scope.isNonlocal(name)) {
return;
}
registerProblem(problemElement, String.format("Shadows name '%s' from outer scope", name),
ProblemHighlightType.WEAK_WARNING, null, new PyRenameElementQuickFix());
}
}
}
}
}
项目:intellij-ce-playground
文件:PyRedeclarationInspection.java
private static boolean suggestRename(@NotNull PsiNameIdentifierOwner element, @NotNull PsiElement originalElement) {
// Target expressions in the same scope are treated as the same variable
if ((element instanceof PyTargetExpression) && originalElement instanceof PyTargetExpression) {
return false;
}
// Renaming an __init__ method results in renaming its class
else if (element instanceof PyFunction && PyNames.INIT.equals(element.getName()) &&
((PyFunction)element).getContainingClass() != null) {
return false;
}
return true;
}
项目:intellij-ce-playground
文件:PyRenameElementQuickFix.java
@Override
public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) {
PsiElement element = descriptor.getPsiElement();
if (element instanceof PyReferenceExpression) {
final PsiReference reference = element.getReference();
if (reference == null) return;
element = reference.resolve();
}
final PsiNameIdentifierOwner nameOwner = element instanceof PsiNameIdentifierOwner ?
(PsiNameIdentifierOwner)element :
PsiTreeUtil.getParentOfType(element, PsiNameIdentifierOwner.class, true);
if (nameOwner != null) {
final VirtualFile virtualFile = nameOwner.getContainingFile().getVirtualFile();
if (virtualFile != null) {
final Editor editor = FileEditorManager.getInstance(project).openTextEditor(new OpenFileDescriptor(project, virtualFile), true);
if (ApplicationManager.getApplication().isUnitTestMode()) {
renameInUnitTestMode(project, nameOwner, editor);
}
else {
if (checkLocalScope(element) != null && (nameOwner instanceof PyNamedParameter || nameOwner instanceof PyTargetExpression)) {
new VariableInplaceRenamer(nameOwner, editor).performInplaceRename();
}
else {
PsiElementRenameHandler.invoke(nameOwner, project, ScopeUtil.getScopeOwner(nameOwner), editor);
}
}
}
}
}
项目:intellij-ce-playground
文件:PyRenameElementQuickFix.java
private static void renameInUnitTestMode(@NotNull Project project, @NotNull PsiNameIdentifierOwner nameOwner,
@Nullable Editor editor) {
final PsiElement substitution = RenamePsiElementProcessor.forElement(nameOwner).substituteElementToRename(nameOwner, editor);
if (substitution != null) {
new RenameProcessor(project, substitution, "a", false, false).run();
}
}
项目:intellij-ce-playground
文件:HighlightUtils.java
public static void showRenameTemplate(PsiElement context,
PsiNameIdentifierOwner element,
PsiReference... references) {
context = CodeInsightUtilCore.forcePsiPostprocessAndRestoreElement(
context);
final Project project = context.getProject();
final FileEditorManager fileEditorManager =
FileEditorManager.getInstance(project);
final Editor editor = fileEditorManager.getSelectedTextEditor();
if (editor == null) {
return;
}
final TemplateBuilderImpl builder = new TemplateBuilderImpl(context);
final Expression macroCallNode = new MacroCallNode(
new SuggestVariableNameMacro());
final PsiElement identifier = element.getNameIdentifier();
builder.replaceElement(identifier, "PATTERN", macroCallNode, true);
for (PsiReference reference : references) {
builder.replaceElement(reference, "PATTERN", "PATTERN",
false);
}
final Template template = builder.buildInlineTemplate();
final TextRange textRange = context.getTextRange();
final int startOffset = textRange.getStartOffset();
editor.getCaretModel().moveToOffset(startOffset);
final TemplateManager templateManager =
TemplateManager.getInstance(project);
templateManager.startTemplate(editor, template);
}
项目:intellij-ce-playground
文件:HighlightUtil.java
public static void showRenameTemplate(PsiElement context, PsiNameIdentifierOwner element) {
context = CodeInsightUtilCore.forcePsiPostprocessAndRestoreElement(context);
final Query<PsiReference> query = ReferencesSearch.search(element, element.getUseScope());
final Collection<PsiReference> references = query.findAll();
final Project project = context.getProject();
final FileEditorManager fileEditorManager =
FileEditorManager.getInstance(project);
final Editor editor = fileEditorManager.getSelectedTextEditor();
if (editor == null) {
return;
}
final TemplateBuilderImpl builder = new TemplateBuilderImpl(context);
final Expression macroCallNode = new MacroCallNode(
new SuggestVariableNameMacro());
final PsiElement identifier = element.getNameIdentifier();
builder.replaceElement(identifier, "PATTERN", macroCallNode, true);
for (PsiReference reference : references) {
builder.replaceElement(reference, "PATTERN", "PATTERN", false);
}
final Template template = builder.buildInlineTemplate();
final TextRange textRange = context.getTextRange();
final int startOffset = textRange.getStartOffset();
editor.getCaretModel().moveToOffset(startOffset);
final TemplateManager templateManager =
TemplateManager.getInstance(project);
templateManager.startTemplate(editor, template);
}
项目:ptest-pycharm-plugin
文件:PTestRedeclarationInspection.java
private static boolean suggestRename(@NotNull PsiNameIdentifierOwner element, @NotNull PsiElement originalElement) {
// Target expressions in the same scope are treated as the same variable
if (element instanceof PyTargetExpression && originalElement instanceof PyTargetExpression) {
return false;
}
// Renaming an __init__ method results in renaming its class
else if (element instanceof PyFunction && PyNames.INIT.equals(element.getName()) &&
((PyFunction) element).getContainingClass() != null) {
return false;
}
return true;
}