예제 #1
0
        protected internal override org.objectfabric.TObject createInstance(org.objectfabric.Resource resource, int classId, org.objectfabric.TType[] genericParameters)
        {
            org.objectfabric.TObject result = createInstanceImpl(resource, classId, genericParameters);

            if (org.objectfabric.Debug.ENABLED)
            {
                org.objectfabric.Debug.assertion(result is TObject);
            }

            return(result);
        }
예제 #2
0
        private org.objectfabric.TObject createInstanceImpl(org.objectfabric.Resource resource, int classId, org.objectfabric.TType[] genericParameters)
        {
            if (classId < 0)
            {
                if (genericParameters == null)
                {
                    return(new TArray <object>((Resource)resource, -classId - 1));
                }

                if (org.objectfabric.Debug.ENABLED)
                {
                    org.objectfabric.Debug.assertion(genericParameters.Length == 1);
                }

                if (genericParameters[0].getObjectModel() == null)
                {
                    switch (genericParameters[0].getClassId())
                    {
                    case org.objectfabric.Immutable.BOOLEAN_INDEX:
                        return(new TArray <bool>((Resource)resource, -classId - 1));

                    case org.objectfabric.Immutable.BYTE_INDEX:
                        return(new TArray <byte>((Resource)resource, -classId - 1));

                    case org.objectfabric.Immutable.CHARACTER_INDEX:
                        return(new TArray <char>((Resource)resource, -classId - 1));

                    case org.objectfabric.Immutable.SHORT_INDEX:
                        return(new TArray <short>((Resource)resource, -classId - 1));

                    case org.objectfabric.Immutable.INTEGER_INDEX:
                        return(new TArray <int>((Resource)resource, -classId - 1));

                    case org.objectfabric.Immutable.LONG_INDEX:
                        return(new TArray <long>((Resource)resource, -classId - 1));

                    case org.objectfabric.Immutable.FLOAT_INDEX:
                        return(new TArray <float>((Resource)resource, -classId - 1));

                    case org.objectfabric.Immutable.DOUBLE_INDEX:
                        return(new TArray <double>((Resource)resource, -classId - 1));

                    case org.objectfabric.Immutable.STRING_INDEX:
                        return(new TArray <string>((Resource)resource, -classId - 1));

                    case org.objectfabric.Immutable.DATE_INDEX:
                        return(new TArray <DateTime>((Resource)resource, -classId - 1));

                    case org.objectfabric.Immutable.BIG_INTEGER_INDEX:
                        return(new TArray <System.Numerics.BigInteger>((Resource)resource, -classId - 1));

                    case org.objectfabric.Immutable.DECIMAL_INDEX:
                        return(new TArray <decimal?>((Resource)resource, -classId - 1));

                    case org.objectfabric.Immutable.BINARY_INDEX:
                        return(new TArray <byte[]>((Resource)resource, -classId - 1));

                    default:
                        throw new java.lang.IllegalStateException(org.objectfabric.Strings.INVALID_ELEMENT_TYPE + genericParameters[0].getClassId());
                    }
                }

                // TODO: special case for TObject?

                Type T    = ((TType)genericParameters[0]).ToType();
                Type type = typeof(TArray <>).MakeGenericType(T);
                return((org.objectfabric.TObject)Activator.CreateInstance(type, resource, -classId - 1));
            }

            switch (classId)
            {
            case org.objectfabric.BuiltInClass.TOBJECT_CLASS_ID:
                return(new CLRTObject((Resource)resource));

            case org.objectfabric.BuiltInClass.RESOURCE_CLASS_ID:
                return(resource);

            case org.objectfabric.BuiltInClass.TSET_CLASS_ID:
                if (genericParameters != null)
                {
                    if (org.objectfabric.Debug.ENABLED)
                    {
                        org.objectfabric.Debug.assertion(genericParameters.Length == 1);
                    }

                    Type T    = ((TType)genericParameters[0]).ToType();
                    Type type = typeof(TSet <>).MakeGenericType(T);
                    return((org.objectfabric.TObject)Activator.CreateInstance(type, resource));
                }

                return(new TSet <object>((Resource)resource));

            case org.objectfabric.BuiltInClass.TMAP_CLASS_ID:
                if (genericParameters != null)
                {
                    if (org.objectfabric.Debug.ENABLED)
                    {
                        org.objectfabric.Debug.assertion(genericParameters.Length == 2);
                    }

                    Type K    = ((TType)genericParameters[0]).ToType();
                    Type V    = ((TType)genericParameters[1]).ToType();
                    Type type = typeof(TDictionary <,>).MakeGenericType(K, V);
                    return((org.objectfabric.TObject)Activator.CreateInstance(type, resource));
                }

                return(new TDictionary <object, object>((Resource)resource));

            case org.objectfabric.BuiltInClass.COUNTER_CLASS_ID:
                return(new Counter((Resource)resource));
            }

            return(base.createInstance(resource, classId, genericParameters));
        }
예제 #3
0
 protected internal override org.objectfabric.TObject createInstance(org.objectfabric.Resource resource, int classId, org.objectfabric.TType[] genericParameters)
 {
     return((org.objectfabric.TObject)createInstance((Resource)resource, classId));
 }