Exemple #1
0
        static JavaTypeReference JavaTypeNameToReference(this JavaApi api, JavaTypeName tn, params JavaTypeParameters?[] contextTypeParameters)
        {
            var tp = contextTypeParameters.Where(tps => tps != null)
                     .SelectMany(tps => tps !.TypeParameters)
                     .FirstOrDefault(xp => xp.Name == tn.DottedName);

            if (tp != null)
            {
                return(new JavaTypeReference(tp, tn.ArrayPart));
            }
            if (tn.DottedName == JavaTypeReference.GenericWildcard.SpecialName)
            {
                return(new JavaTypeReference(tn.BoundsType, tn.GenericConstraints?.Select(gc => JavaTypeNameToReference(api, gc, contextTypeParameters)), tn.ArrayPart));
            }
            var primitive = JavaTypeReference.GetSpecialType(tn.DottedName);

            if (primitive != null)
            {
                return(tn.ArrayPart == null && tn.GenericConstraints == null ? primitive : new JavaTypeReference(primitive, tn.ArrayPart, tn.BoundsType, tn.GenericConstraints?.Select(gc => JavaTypeNameToReference(api, gc, contextTypeParameters))));
            }
            var type = api.FindNonGenericType(tn.FullNameNonGeneric);

            return(new JavaTypeReference(type,
                                         tn.GenericArguments != null ? tn.GenericArguments.Select(_ => api.JavaTypeNameToReference(_, contextTypeParameters)).ToArray() : null,
                                         tn.ArrayPart));
        }
		static bool IsConformantType (this JavaTypeParameter typeParameter, JavaTypeReference examinedType)
		{
			if (typeParameter.GenericConstraints == null)
				return true;
			// FIXME: implement correct generic constraint conformance check.
			Log.LogDebug ("NOTICE: generic constraint conformance check is not implemented, so the type might be actually compatible. Type parameter: {0}{1}, examined type: {2}",
			                               typeParameter.Name, typeParameter.Parent.ParentMethod?.Name ?? typeParameter.Parent.ParentType?.Name, examinedType);
			return false;
		}
 static bool IsConformantType(this JavaTypeParameter typeParameter, JavaTypeReference examinedType)
 {
     if (typeParameter.GenericConstraints == null)
     {
         return(true);
     }
     // FIXME: implement correct generic constraint conformance check.
     Console.Error.WriteLine("WARNING: generic constraint conformance check is not implemented, so the type might be actually compatible. Type parameter: {0}{1}, examined type: {2}",
                             typeParameter.Name, typeParameter.Parent.ParentMethod?.Name ?? typeParameter.Parent.ParentType?.Name, examinedType.ToString());
     return(false);
 }
 public JavaTypeReference(JavaTypeReference referencedType, string arrayPart)
 {
     if (referencedType == null)
     {
         throw new ArgumentNullException("referencedType");
     }
     SpecialName    = referencedType.SpecialName;
     ReferencedType = referencedType.ReferencedType;
     TypeParameters = referencedType.TypeParameters;
     ArrayPart      = arrayPart;
 }
Exemple #5
0
 static JavaTypeReference()
 {
     Void            = new JavaTypeReference("void");
     Boolean         = new JavaTypeReference("boolean");
     Char            = new JavaTypeReference("char");
     Byte            = new JavaTypeReference("byte");
     Short           = new JavaTypeReference("short");
     Int             = new JavaTypeReference("int");
     Long            = new JavaTypeReference("long");
     Float           = new JavaTypeReference("float");
     Double          = new JavaTypeReference("double");
     GenericWildcard = new JavaTypeReference("?");
 }
 public JavaTypeReference(JavaTypeReference referencedType, string?arrayPart, string?wildcardBoundsType, IEnumerable <JavaTypeReference>?wildcardConstraints)
 {
     if (referencedType == null)
     {
         throw new ArgumentNullException("referencedType");
     }
     SpecialName             = referencedType.SpecialName;
     WildcardBoundsType      = wildcardBoundsType;
     WildcardConstraints     = wildcardConstraints?.ToList();
     ReferencedType          = referencedType.ReferencedType;
     ReferencedTypeParameter = referencedType.ReferencedTypeParameter;
     TypeParameters          = referencedType.TypeParameters;
     ArrayPart = arrayPart;
 }
        // It compares two JavaTypeReferences.
        // Note that it is to compare them as a type reference, not as its object entity.
        // So, for example, if one has a TypeParameter with T with some contraint and
        // the other has a TypeParameter with T somehow without it, they are still "same".
        public static bool AreEqual(JavaTypeReference tr1, JavaTypeReference?tr2)
        {
            if (tr1 == null)
            {
                return(tr2 == null);
            }
            else if (tr2 == null)
            {
                return(false);
            }

            if (tr1.ArrayPart != tr2.ArrayPart)
            {
                return(false);
            }

            if (tr1.SpecialName != null)
            {
                return(tr1.SpecialName == tr2.SpecialName);
            }

            if (tr1.ReferencedTypeParameter != null)
            {
                if (tr2.ReferencedTypeParameter == null || tr1.ReferencedTypeParameter.Name != tr2.ReferencedTypeParameter.Name)
                {
                    return(false);
                }

                return(true);
            }
            else if (tr2.ReferencedTypeParameter != null)
            {
                return(false);
            }

            if (tr1.ReferencedType == null || tr2.ReferencedType == null)
            {
                return(false);
            }
            if (tr1.ReferencedType.Parent != tr2.ReferencedType.Parent)
            {
                return(false);
            }
            if (tr1.ReferencedType.Name != tr2.ReferencedType.Name)
            {
                return(false);
            }
            return(true);
        }
Exemple #8
0
        static JavaTypeReference JavaTypeNameToReference(this JavaApi api, JavaTypeName tn, params JavaTypeParameters [] contextTypeParameters)
        {
            var tp = contextTypeParameters.Where(tps => tps != null).SelectMany(tps => tps.TypeParameters).FirstOrDefault(_ => _.Name == tn.FullNameNonGeneric);

            if (tp != null)
            {
                return(new JavaTypeReference(tp, tn.ArrayPart));
            }
            var primitive = JavaTypeReference.GetSpecialType(tn.FullNameNonGeneric);

            if (primitive != null)
            {
                return(tn.ArrayPart == null ? primitive : new JavaTypeReference(primitive, tn.ArrayPart));
            }
            var type = api.FindNonGenericType(tn.FullNameNonGeneric);

            return(new JavaTypeReference(type,
                                         tn.GenericArguments != null ? tn.GenericArguments.Select(_ => api.JavaTypeNameToReference(_, contextTypeParameters)).ToArray() : null,
                                         tn.ArrayPart));
        }
Exemple #9
0
        static JavaTypeReference GetVisibleNonSpecialType(this JavaMethodBase method, JavaTypeReference r)
        {
            if (r == null || r.SpecialName != null || r.ReferencedTypeParameter != null || r.ArrayPart != null)
            {
                return(null);
            }
            var requiredVisibility = method.Visibility == "public" && method.Parent.Visibility == "public" ? "public" : method.Visibility;

            for (var t = r; t != null; t = (t.ReferencedType as JavaClass)?.ResolvedExtends)
            {
                if (t.ReferencedType == null)
                {
                    break;
                }
                if (IsAcceptableVisibility(required: requiredVisibility, actual: t.ReferencedType.Visibility))
                {
                    return(t);
                }
            }
            return(null);
        }