iiop-openjdk/src/main/java/org/wildfly/iiop/openjdk/rmi/ir/InterfaceRepository.java
private ValueDefImpl addValue(ValueAnalysis va)
            throws RMIIIOPViolationException, IRConstructionException {
        ValueDefImpl vDef;
        Class cls = va.getCls();

        // Lookup: Has it already been added?
        vDef = (ValueDefImpl) valueMap.get(cls);
        if (vDef != null)
            return vDef; // Yes, just return it.

        // Get module to add value to.
        ModuleDefImpl m = ensurePackageExists(cls.getPackage().getName());

        // Add implemented interfaces
        String[] supported_interfaces = addInterfaces(va);

        // Add abstract base valuetypes
        String[] abstract_base_valuetypes = addAbstractBaseValuetypes(va);

        // Add superclass
        ValueDefImpl superValue = null;
        ValueAnalysis superAnalysis = va.getSuperAnalysis();
        if (superAnalysis != null)
            superValue = addValue(superAnalysis);

        // Create the value
        String base = cls.getName();
        base = base.substring(base.lastIndexOf('.') + 1);
        base = Util.javaToIDLName(base);

        TypeCode baseTypeCode;
        if (superValue == null)
            baseTypeCode = orb.get_primitive_tc(TCKind.tk_null);
        else
            baseTypeCode = superValue.type();

        vDef = new ValueDefImpl(va.getRepositoryId(), base, "1.0",
                m,
                va.isAbstractValue(),
                va.isCustom(),
                supported_interfaces,
                abstract_base_valuetypes,
                baseTypeCode,
                impl);
        addTypeCode(cls, vDef.type());
        m.add(base, vDef);
        valueMap.put(cls, vDef); // Remember we mapped this.

        // Fill in constants.
        addConstants(vDef, va);

        // Add value members
        ValueMemberAnalysis[] vmas = va.getMembers();
        for (int i = 0; i < vmas.length; ++i) {
            ValueMemberDefImpl vmDef;
            String vmid = va.getMemberRepositoryId(vmas[i].getJavaName());
            String vmName = vmas[i].getIDLName();

            Class vmCls = vmas[i].getCls();
            TypeCode typeCode = getTypeCode(vmCls);

            boolean vmPublic = vmas[i].isPublic();

            vmDef = new ValueMemberDefImpl(vmid, vmName, "1.0",
                    typeCode, vmPublic, vDef, impl);
            vDef.add(vmName, vmDef);
        }

        // Add attributes
        addAttributes(vDef, va);

        // TODO: Fill in operations.

        return vDef;
    }
private ValueDefImpl addValue(ValueAnalysis va)
            throws RMIIIOPViolationException, IRConstructionException {
        ValueDefImpl vDef;
        Class cls = va.getCls();

        // Lookup: Has it already been added?
        vDef = (ValueDefImpl) valueMap.get(cls);
        if (vDef != null)
            return vDef; // Yes, just return it.

        // Get module to add value to.
        ModuleDefImpl m = ensurePackageExists(cls.getPackage().getName());

        // Add implemented interfaces
        String[] supported_interfaces = addInterfaces(va);

        // Add abstract base valuetypes
        String[] abstract_base_valuetypes = addAbstractBaseValuetypes(va);

        // Add superclass
        ValueDefImpl superValue = null;
        ValueAnalysis superAnalysis = va.getSuperAnalysis();
        if (superAnalysis != null)
            superValue = addValue(superAnalysis);

        // Create the value
        String base = cls.getName();
        base = base.substring(base.lastIndexOf('.') + 1);
        base = Util.javaToIDLName(base);

        TypeCode baseTypeCode;
        if (superValue == null)
            baseTypeCode = orb.get_primitive_tc(TCKind.tk_null);
        else
            baseTypeCode = superValue.type();

        vDef = new ValueDefImpl(va.getRepositoryId(), base, "1.0",
                m,
                va.isAbstractValue(),
                va.isCustom(),
                supported_interfaces,
                abstract_base_valuetypes,
                baseTypeCode,
                impl);
        addTypeCode(cls, vDef.type());
        m.add(base, vDef);
        valueMap.put(cls, vDef); // Remember we mapped this.

        // Fill in constants.
        addConstants(vDef, va);

        // Add value members
        ValueMemberAnalysis[] vmas = va.getMembers();
        for (int i = 0; i < vmas.length; ++i) {
            ValueMemberDefImpl vmDef;
            String vmid = va.getMemberRepositoryId(vmas[i].getJavaName());
            String vmName = vmas[i].getIDLName();

            Class vmCls = vmas[i].getCls();
            TypeCode typeCode = getTypeCode(vmCls);

            boolean vmPublic = vmas[i].isPublic();

            vmDef = new ValueMemberDefImpl(vmid, vmName, "1.0",
                    typeCode, vmPublic, vDef, impl);
            vDef.add(vmName, vmDef);
        }

        // Add attributes
        addAttributes(vDef, va);

        // TODO: Fill in operations.

        return vDef;
    }
Add a value type.