Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package consulo.csharp.impl.ide.findUsage;

import consulo.annotation.access.RequiredReadAction;
Expand All @@ -37,211 +36,169 @@
import consulo.navigation.NavigationItem;
import consulo.util.lang.StringUtil;


/**
* @author VISTALL
* @since 21.12.13.
* @since 2013-12-21
*/
@ExtensionImpl
public class CSharpFindUsagesProvider implements FindUsagesProvider
{
@Override
public boolean canFindUsagesFor(PsiElement element)
{
return element instanceof DotNetNamedElement;
}

@Override
@RequiredReadAction
public String getType(PsiElement element)
{
if(element instanceof CSharpTypeDeclaration)
{
return "type";
}
else if(element instanceof CSharpLocalVariableDeclarationStatement)
{
return "local variable statement";
}
else if(element instanceof CSharpConstructorDeclaration)
{
return ((CSharpConstructorDeclaration) element).isDeConstructor() ? "deconstructor" : "constructor";
}
else if(element instanceof CSharpIndexMethodDeclaration)
{
return "index method";
}
else if(element instanceof CSharpTupleVariable || element instanceof CSharpTupleElementImpl)
{
return "tuple variable";
}
else if(element instanceof CSharpMethodDeclaration)
{
return "method";
}
else if(element instanceof DotNetNamespaceAsElement)
{
return "namespace";
}
else if(element instanceof CSharpEventDeclaration)
{
return "event";
}
else if(element instanceof CSharpTypeDefStatement)
{
return "type alias";
}
else if(element instanceof CSharpPropertyDeclaration)
{
return "property";
}
else if(element instanceof CSharpLambdaParameter)
{
return "lambda parameter";
}
else if(element instanceof DotNetParameter)
{
return "parameter";
}
else if(element instanceof CSharpLocalVariable)
{
return "local variable";
}
else if(element instanceof CSharpLinqVariable)
{
return "linq local variable";
}
else if(element instanceof CSharpOutRefVariableImpl)
{
CSharpOutRefVariableExpressionImpl parent = (CSharpOutRefVariableExpressionImpl) element.getParent();
return parent.getExpressionType() + " local variable";
}
else if(element instanceof CSharpIsVariableImpl)
{
return "is variable";
}
else if(element instanceof CSharpCaseVariableImpl)
{
return "case variable";
}
else if(element instanceof DotNetGenericParameter)
{
return "generic parameter";
}
else if(element instanceof CSharpFieldDeclaration)
{
return "field";
}
else if(element instanceof CSharpEnumConstantDeclarationImpl)
{
return "enum constant";
}
else if(element instanceof CSharpLabeledStatementImpl)
{
return "label";
}
return debugText("getType", element);
}

@Override
@RequiredReadAction
public String getDescriptiveName(PsiElement element)
{
if(element instanceof DotNetNamedElement)
{
String name = ((DotNetNamedElement) element).getName();
return name == null ? "null" : name;
}
if(element instanceof CSharpLocalVariableDeclarationStatement)
{
return StringUtil.join(((CSharpLocalVariableDeclarationStatement) element).getVariables(), PsiNamedElement::getName, ", ");
}
return debugText("getDescriptiveName", element);
}

@Override
@RequiredReadAction
public String getNodeText(PsiElement element, boolean useFullName)
{
if(element instanceof CSharpPreprocessorVariable)
{
return ((CSharpPreprocessorVariable) element).getName();
}

CSharpMethodDeclaration original = element.getUserData(CSharpResolveUtil.EXTENSION_METHOD_WRAPPER);
if(original != null)
{
return getNodeText(original, useFullName);
}

DotNetQualifiedElement accessorValueVariableOwner = element.getUserData(CSharpResolveUtil.ACCESSOR_VALUE_VARIABLE_OWNER);
if(accessorValueVariableOwner != null)
{
return getNodeText(accessorValueVariableOwner, useFullName);
}

if(element instanceof CSharpTypeDefStatement)
{
String name = ((CSharpTypeDefStatement) element).getName();

DotNetTypeRef dotNetTypeRef = ((CSharpTypeDefStatement) element).toTypeRef();

StringBuilder builder = new StringBuilder();
builder.append(name);

if(dotNetTypeRef != DotNetTypeRef.ERROR_TYPE)
{
builder.append(" = ");
builder.append(CSharpTypeRefPresentationUtil.buildText(dotNetTypeRef));
}
return builder.toString();
}

ItemPresentation itemPresentation = ItemPresentationProvider.getItemPresentation((NavigationItem) element);
if(itemPresentation != null)
{
String presentableText = itemPresentation.getPresentableText();
assert presentableText != null : element.getClass().getName();
return presentableText;
}

if(element instanceof DotNetVariable)
{
String name = ((DotNetVariable) element).getName();

DotNetTypeRef dotNetTypeRef = ((DotNetVariable) element).toTypeRef(false);

StringBuilder builder = new StringBuilder();
builder.append(CSharpTypeRefPresentationUtil.buildText(dotNetTypeRef)).append(" ").append(name);
return builder.toString();
}

if(element instanceof DotNetXAccessor)
{
PsiElement parent = element.getParent();

String nodeText = getNodeText(parent, useFullName);
PsiElement accessorElement = ((DotNetXAccessor) element).getAccessorElement();
if(accessorElement == null)
{
return nodeText;
}
return nodeText + "." + accessorElement.getText();
}

return debugText("getNodeText", element);
}

private String debugText(String prefix, PsiElement element)
{
IElementType type = PsiUtilCore.getElementType(element);
String suffix = type == null ? element.getClass().getSimpleName() : type.toString();
return prefix + " : " + suffix;
}

@Override
public Language getLanguage()
{
return CSharpLanguage.INSTANCE;
}
public class CSharpFindUsagesProvider implements FindUsagesProvider {
@Override
public boolean canFindUsagesFor(PsiElement element) {
return element instanceof DotNetNamedElement;
}

@Override
@RequiredReadAction
public String getType(PsiElement element) {
if (element instanceof CSharpTypeDeclaration) {
return "type";
}
else if (element instanceof CSharpLocalVariableDeclarationStatement) {
return "local variable statement";
}
else if (element instanceof CSharpConstructorDeclaration) {
return ((CSharpConstructorDeclaration) element).isDeConstructor() ? "deconstructor" : "constructor";
}
else if (element instanceof CSharpIndexMethodDeclaration) {
return "index method";
}
else if (element instanceof CSharpTupleVariable || element instanceof CSharpTupleElementImpl) {
return "tuple variable";
}
else if (element instanceof CSharpMethodDeclaration) {
return "method";
}
else if (element instanceof DotNetNamespaceAsElement) {
return "namespace";
}
else if (element instanceof CSharpEventDeclaration) {
return "event";
}
else if (element instanceof CSharpTypeDefStatement) {
return "type alias";
}
else if (element instanceof CSharpPropertyDeclaration) {
return "property";
}
else if (element instanceof CSharpLambdaParameter) {
return "lambda parameter";
}
else if (element instanceof DotNetParameter) {
return "parameter";
}
else if (element instanceof CSharpLocalVariable) {
return "local variable";
}
else if (element instanceof CSharpLinqVariable) {
return "linq local variable";
}
else if (element instanceof CSharpOutRefVariableImpl) {
CSharpOutRefVariableExpressionImpl parent = (CSharpOutRefVariableExpressionImpl) element.getParent();
return parent.getExpressionType() + " local variable";
}
else if (element instanceof CSharpIsVariableImpl) {
return "is variable";
}
else if (element instanceof CSharpCaseVariableImpl) {
return "case variable";
}
else if (element instanceof DotNetGenericParameter) {
return "generic parameter";
}
else if (element instanceof CSharpFieldDeclaration) {
return "field";
}
else if (element instanceof CSharpEnumConstantDeclarationImpl) {
return "enum constant";
}
else if (element instanceof CSharpLabeledStatementImpl) {
return "label";
}
return debugText("getType", element);
}

@Override
@RequiredReadAction
public String getDescriptiveName(PsiElement element) {
if (element instanceof DotNetNamedElement) {
String name = ((DotNetNamedElement) element).getName();
return name == null ? "null" : name;
}
if (element instanceof CSharpLocalVariableDeclarationStatement) {
return StringUtil.join(((CSharpLocalVariableDeclarationStatement) element).getVariables(), PsiNamedElement::getName, ", ");
}
return debugText("getDescriptiveName", element);
}

@Override
@RequiredReadAction
public String getNodeText(PsiElement element, boolean useFullName) {
if (element instanceof CSharpPreprocessorVariable preprocessorVar) {
return preprocessorVar.getName();
}

CSharpMethodDeclaration original = element.getUserData(CSharpResolveUtil.EXTENSION_METHOD_WRAPPER);
if (original != null) {
return getNodeText(original, useFullName);
}

DotNetQualifiedElement accessorValueVariableOwner = element.getUserData(CSharpResolveUtil.ACCESSOR_VALUE_VARIABLE_OWNER);
if (accessorValueVariableOwner != null) {
return getNodeText(accessorValueVariableOwner, useFullName);
}

if (element instanceof CSharpTypeDefStatement typeDef) {
String name = typeDef.getName();

DotNetTypeRef dotNetTypeRef = typeDef.toTypeRef();

StringBuilder builder = new StringBuilder();
builder.append(name);

if (dotNetTypeRef != DotNetTypeRef.ERROR_TYPE) {
builder.append(" = ");
builder.append(CSharpTypeRefPresentationUtil.buildText(dotNetTypeRef));
}
return builder.toString();
}

ItemPresentation itemPresentation = ItemPresentationProvider.getItemPresentation((NavigationItem) element);
if (itemPresentation != null) {
return itemPresentation.getPresentableText().get();

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Minor behaviour change: the old assert presentableText != null : element.getClass().getName() was removed. Now an element with no name silently gives an empty node text. That is probably fine. If you would rather fall through to the DotNetVariable / debugText branches when the text is empty, you could do this:

Suggested change
return itemPresentation.getPresentableText().get();
String presentableText = itemPresentation.getPresentableText().get();
if (!presentableText.isEmpty()) {
return presentableText;
}

}

if (element instanceof DotNetVariable dotNetVar) {
String name = dotNetVar.getName();

DotNetTypeRef dotNetTypeRef = dotNetVar.toTypeRef(false);

StringBuilder builder = new StringBuilder();
builder.append(CSharpTypeRefPresentationUtil.buildText(dotNetTypeRef)).append(" ").append(name);
return builder.toString();
}

if (element instanceof DotNetXAccessor xAccessor) {
PsiElement parent = element.getParent();

String nodeText = getNodeText(parent, useFullName);
PsiElement accessorElement = xAccessor.getAccessorElement();
if (accessorElement == null) {
return nodeText;
}
return nodeText + "." + accessorElement.getText();
}

return debugText("getNodeText", element);
}

private String debugText(String prefix, PsiElement element) {
IElementType type = PsiUtilCore.getElementType(element);
String suffix = type == null ? element.getClass().getSimpleName() : type.toString();
return prefix + " : " + suffix;
}

@Override
public Language getLanguage() {
return CSharpLanguage.INSTANCE;
}
}
Loading
Loading