forked from dotnet/java-interop
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathJavaUnresolvableModel.cs
More file actions
86 lines (73 loc) · 2.86 KB
/
JavaUnresolvableModel.cs
File metadata and controls
86 lines (73 loc) · 2.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
using System;
namespace Java.Interop.Tools.JavaTypeSystem.Models
{
public class JavaUnresolvableModel
{
public IJavaResolvable Unresolvable { get; }
public string MissingType { get; }
public UnresolvableType Type { get; }
public bool RemovedEntireType { get; set; }
public JavaUnresolvableModel (IJavaResolvable unresolvable, string missingType, UnresolvableType type)
{
Unresolvable = unresolvable;
MissingType = missingType;
Type = type;
}
public string GetDisplayMessage ()
{
var member = Unresolvable as JavaMemberModel;
if (Type == UnresolvableType.DollarSign)
return RemovedEntireType ?
$"The type '{member?.DeclaringType.FullName}' was removed because the required {GetUnresolvableType ()} '{GetUnresolvable ()}' was removed because its name contains a dollar sign." :
$"The {GetUnresolvableType ()} '{GetUnresolvable ()}' was removed because its name contains a dollar sign.";
if (Type == UnresolvableType.InvalidBaseType)
return $"The {GetUnresolvableType ()} '{GetUnresolvable ()}' was removed because the base type '{MissingType}' is invalid.";
if (Unresolvable is JavaTypeModel)
return $"The {GetUnresolvableType ()} '{GetUnresolvable ()}' was removed because the Java {GetReason ()} '{MissingType}' could not be found.";
return RemovedEntireType ?
$"The type '{member?.DeclaringType.FullName}' was removed because the required {GetUnresolvableType ()} '{GetUnresolvable ()}' was removed because the Java {GetReason ()} '{MissingType}' could not be found." :
$"The {GetUnresolvableType ()} '{GetUnresolvable ()}' was removed because the Java {GetReason ()} '{MissingType}' could not be found.";
}
string GetUnresolvableType ()
{
if (Unresolvable is JavaFieldModel)
return "field";
if (Unresolvable is JavaConstructorModel || (Unresolvable is JavaParameterModel p && p.DeclaringMethod is JavaConstructorModel))
return "constructor";
if (Unresolvable is JavaMethodModel || (Unresolvable is JavaParameterModel p2 && p2.DeclaringMethod is JavaMethodModel))
return "method";
if (Unresolvable is JavaClassModel)
return "class";
if (Unresolvable is JavaInterfaceModel)
return "interface";
return string.Empty;
}
string GetUnresolvable ()
{
if (Unresolvable is JavaParameterModel p)
return p.DeclaringMethod.ToString ();
return Unresolvable.ToString ();
}
string GetReason ()
{
return Type switch {
UnresolvableType.FieldType => "field type",
UnresolvableType.ReturnType => "return type",
UnresolvableType.ParameterType => "parameter type",
UnresolvableType.BaseType => "base type",
UnresolvableType.ImplementsType => "implemented interface type",
_ => throw new NotImplementedException (),
};
}
}
public enum UnresolvableType
{
DollarSign,
FieldType,
ReturnType,
ParameterType,
BaseType,
ImplementsType,
InvalidBaseType,
}
}