arguments,
+ HighlightInfo highlightInfo
+ ) {
+ if (element instanceof CSharpMethodCallExpressionImpl call
+ && call.getCallExpression() instanceof CSharpReferenceExpression refExpr) {
+ if (resolveElement instanceof CSharpMethodDeclaration) {
+ QuickFixAction.registerQuickFixAction(highlightInfo, new CreateUnresolvedMethodFix(refExpr));
+ }
+ else if (resolveElement instanceof CSharpConstructorDeclaration) {
+ QuickFixAction.registerQuickFixAction(highlightInfo, new CreateUnresolvedConstructorFix(refExpr));
+ }
+ }
+
+ for (NCallArgument argument : arguments) {
+ if (!argument.isValid()) {
+ CSharpCallArgument callArgument = argument.getCallArgument();
+ if (callArgument == null) {
+ continue;
+ }
+ DotNetExpression argumentExpression = callArgument.getArgumentExpression();
+ if (argumentExpression == null) {
+ continue;
+ }
+ DotNetTypeRef parameterTypeRef = argument.getParameterTypeRef();
+ if (parameterTypeRef == null) {
+ continue;
+ }
+ String parameterName = argument.getParameterName();
+ if (parameterName == null) {
+ continue;
+ }
+ QuickFixAction.registerQuickFixAction(
+ highlightInfo,
+ new CastNArgumentToTypeRefFix(argumentExpression, parameterTypeRef, parameterName)
+ );
+ }
+ }
+ }
+
+ @RequiredReadAction
+ private static void appendType(@Nonnull StringBuilder builder, @Nonnull DotNetTypeRef typeRef, @Nonnull PsiElement scope) {
+ if (typeRef == DotNetTypeRef.ERROR_TYPE) {
+ builder.append("?");
+ }
+ else {
+ XmlStringUtil.escapeText(CSharpTypeRefPresentationUtil.buildText(typeRef), builder);
+ }
+ }
+
+ private static CSharpCallArgumentListOwner findCallOwner(PsiElement element) {
+ PsiElement parent = element.getParent();
+ if (element instanceof CSharpOperatorReferenceImpl ||
+ element instanceof CSharpMethodCallExpressionImpl ||
+ element instanceof CSharpConstructorSuperCallImpl ||
+ element instanceof CSharpIndexAccessExpressionImpl) {
+ return (CSharpCallArgumentListOwner) element;
+ }
+ else if (parent instanceof CSharpAttribute attribute) {
+ return attribute;
+ }
+ else if (parent instanceof DotNetUserType && parent.getParent() instanceof CSharpNewExpression newExpr) {
+ return newExpr;
+ }
+ return null;
+ }
}
diff --git a/csharp-impl/src/main/java/consulo/csharp/impl/ide/parameterInfo/ParameterPresentationBuilder.java b/csharp-impl/src/main/java/consulo/csharp/impl/ide/parameterInfo/ParameterPresentationBuilder.java
index 412baefb2..036de3cb4 100644
--- a/csharp-impl/src/main/java/consulo/csharp/impl/ide/parameterInfo/ParameterPresentationBuilder.java
+++ b/csharp-impl/src/main/java/consulo/csharp/impl/ide/parameterInfo/ParameterPresentationBuilder.java
@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package consulo.csharp.impl.ide.parameterInfo;
import consulo.application.AccessToken;
@@ -21,8 +20,8 @@
import consulo.document.util.UnfairTextRange;
import consulo.util.lang.ObjectUtil;
import consulo.util.lang.xml.XmlStringUtil;
-
import jakarta.annotation.Nonnull;
+
import java.util.HashMap;
import java.util.Map;
@@ -30,56 +29,46 @@
* @author VISTALL
* @since 2020-05-31
*/
-public class ParameterPresentationBuilder
-{
- private static final TextRange ourInvalidRange = new UnfairTextRange(-1, -1);
+public class ParameterPresentationBuilder
{
+ private static final TextRange ourInvalidRange = new UnfairTextRange(-1, -1);
- private StringBuilder myBuilder = new StringBuilder();
+ private StringBuilder myBuilder = new StringBuilder();
- private Map myRanges = new HashMap<>();
+ private Map myRanges = new HashMap<>();
- public ParameterPresentationBuilder()
- {
- }
+ public ParameterPresentationBuilder() {
+ }
- public AccessToken beginParameter(int index)
- {
- int start = myBuilder.length();
- return new AccessToken()
- {
- @Override
- public void finish()
- {
- myRanges.put(index, new TextRange(start, myBuilder.length()));
- }
- };
- }
+ public AccessToken beginParameter(int index) {
+ int start = myBuilder.length();
+ return new AccessToken() {
+ @Override
+ public void finish() {
+ myRanges.put(index, new TextRange(start, myBuilder.length()));
+ }
+ };
+ }
- public void add(String text)
- {
- myBuilder.append(text);
- }
+ public void add(String text) {
+ myBuilder.append(text);
+ }
- public void addEscaped(String text)
- {
- myBuilder.append(XmlStringUtil.escapeString(text));
- }
+ public void addEscaped(String text) {
+ XmlStringUtil.escapeText(text, myBuilder);
+ }
- public void addSpace()
- {
- myBuilder.append(" ");
- }
+ public void addSpace() {
+ myBuilder.append(" ");
+ }
- @Nonnull
- public TextRange getParameterRange(int index)
- {
- TextRange textRange = myRanges.get(index);
- return ObjectUtil.notNull(textRange, ourInvalidRange);
- }
+ @Nonnull
+ public TextRange getParameterRange(int index) {
+ TextRange textRange = myRanges.get(index);
+ return ObjectUtil.notNull(textRange, ourInvalidRange);
+ }
- @Override
- public String toString()
- {
- return myBuilder.toString();
- }
+ @Override
+ public String toString() {
+ return myBuilder.toString();
+ }
}
diff --git a/csharp-psi-impl/src/main/java/consulo/csharp/lang/impl/CSharpExpressionTypeProvider.java b/csharp-psi-impl/src/main/java/consulo/csharp/lang/impl/CSharpExpressionTypeProvider.java
index 31e9c8472..7a80b520a 100644
--- a/csharp-psi-impl/src/main/java/consulo/csharp/lang/impl/CSharpExpressionTypeProvider.java
+++ b/csharp-psi-impl/src/main/java/consulo/csharp/lang/impl/CSharpExpressionTypeProvider.java
@@ -13,21 +13,20 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package consulo.csharp.lang.impl;
import consulo.annotation.access.RequiredReadAction;
import consulo.annotation.component.ExtensionImpl;
import consulo.csharp.lang.CSharpLanguage;
-import consulo.csharp.lang.psi.CSharpReferenceExpression;
import consulo.csharp.lang.impl.psi.CSharpTypeRefPresentationUtil;
import consulo.csharp.lang.impl.psi.source.CSharpMethodCallExpressionImpl;
+import consulo.csharp.lang.psi.CSharpReferenceExpression;
import consulo.dotnet.psi.DotNetExpression;
import consulo.language.Language;
import consulo.language.editor.ExpressionTypeProvider;
import consulo.language.psi.PsiElement;
import consulo.language.psi.util.PsiTreeUtil;
-import consulo.util.lang.StringUtil;
+import consulo.util.lang.xml.XmlStringUtil;
import jakarta.annotation.Nonnull;
import java.util.List;
@@ -37,44 +36,37 @@
* @since 05/05/2021
*/
@ExtensionImpl
-public class CSharpExpressionTypeProvider extends ExpressionTypeProvider
-{
- @Nonnull
- @Override
- @RequiredReadAction
- public String getInformationHint(@Nonnull DotNetExpression expression)
- {
- return StringUtil.escapeXmlEntities(CSharpTypeRefPresentationUtil.buildText(expression.toTypeRef(true)));
- }
+public class CSharpExpressionTypeProvider extends ExpressionTypeProvider {
+ @Nonnull
+ @Override
+ @RequiredReadAction
+ public String getInformationHint(@Nonnull DotNetExpression expression) {
+ return XmlStringUtil.escapeText(CSharpTypeRefPresentationUtil.buildText(expression.toTypeRef(true)));
+ }
- @Nonnull
- @Override
- public String getErrorHint()
- {
- return "Expression not found";
- }
+ @Nonnull
+ @Override
+ public String getErrorHint() {
+ return "Expression not found";
+ }
- @Nonnull
- @Override
- public List getExpressionsAt(@Nonnull PsiElement psiElement)
- {
- DotNetExpression expression = PsiTreeUtil.getParentOfType(psiElement, DotNetExpression.class);
- if(expression instanceof CSharpReferenceExpression && expression.getParent() instanceof CSharpMethodCallExpressionImpl call)
- {
- expression = call;
- }
+ @Nonnull
+ @Override
+ public List getExpressionsAt(@Nonnull PsiElement psiElement) {
+ DotNetExpression expression = PsiTreeUtil.getParentOfType(psiElement, DotNetExpression.class);
+ if (expression instanceof CSharpReferenceExpression && expression.getParent() instanceof CSharpMethodCallExpressionImpl call) {
+ expression = call;
+ }
- if(expression != null)
- {
- return List.of(expression);
- }
- return List.of();
- }
+ if (expression != null) {
+ return List.of(expression);
+ }
+ return List.of();
+ }
- @Nonnull
- @Override
- public Language getLanguage()
- {
- return CSharpLanguage.INSTANCE;
- }
+ @Nonnull
+ @Override
+ public Language getLanguage() {
+ return CSharpLanguage.INSTANCE;
+ }
}