Search in sources :

Example 1 with ObjectSet_definition

use of org.eclipse.titan.designer.AST.ASN1.Object.ObjectSet_definition in project titan.EclipsePlug-ins by eclipse.

the class TableConstraint method check.

@Override
public /**
 * {@inheritDoc}
 */
void check(final CompilationTimeStamp timestamp) {
    if (null != lastTimeChecked && !lastTimeChecked.isLess(timestamp)) {
        return;
    }
    lastTimeChecked = timestamp;
    parseBlocks();
    if (null == myType) {
        return;
    }
    objectSet.setMyScope(myType.getMyScope());
    BridgingNamedNode bridge = new BridgingNamedNode(this, FULLNAMEPART);
    objectSet.setFullNameParent(bridge);
    // search the constrained type (not the reference to it)
    constrainedType = myType;
    while (true) {
        if (constrainedType.getIsErroneous(timestamp)) {
            return;
        }
        if (Type_type.TYPE_OPENTYPE.equals(constrainedType.getTypetype()) || Type_type.TYPE_OBJECTCLASSFIELDTYPE.equals(constrainedType.getTypetype())) {
            break;
        } else if (constrainedType instanceof IReferencingType) {
            IReferenceChain chain = ReferenceChain.getInstance(IReferenceChain.CIRCULARREFERENCE, true);
            constrainedType = ((IReferencingType) constrainedType).getTypeRefd(timestamp, chain);
            chain.release();
        } else {
            myType.getLocation().reportSemanticError(OCFTEXPECTED);
            return;
        }
    }
    if (Type_type.TYPE_OBJECTCLASSFIELDTYPE.equals(constrainedType.getTypetype())) {
        ObjectClassField_Type ocfType = (ObjectClassField_Type) constrainedType;
        objectClassFieldname = ocfType.getObjectClassFieldName();
        objectSet.setMyGovernor(ocfType.getMyObjectClass());
        objectSet.check(timestamp);
        return;
    }
    // opentype
    final Open_Type openType = (Open_Type) constrainedType;
    openType.setMyTableConstraint(this);
    objectClassFieldname = openType.getObjectClassFieldName();
    objectSet.setMyGovernor(openType.getMyObjectClass());
    objectSet.check(timestamp);
    if (null == atNotationList) {
        return;
    }
    // componentrelationconstraint...
    // search the outermost textually enclosing seq, set or choice
    IType outermostParent = null;
    IType tempType = myType;
    do {
        switch(tempType.getTypetype()) {
            case TYPE_ASN1_CHOICE:
            case TYPE_TTCN3_CHOICE:
            case TYPE_OPENTYPE:
            case TYPE_ASN1_SEQUENCE:
            case TYPE_TTCN3_SEQUENCE:
            case TYPE_ASN1_SET:
            case TYPE_TTCN3_SET:
                outermostParent = tempType;
                break;
            default:
                break;
        }
        tempType = tempType.getParentType();
    } while (null != tempType);
    if (null == outermostParent) {
        myType.getLocation().reportSemanticError(CANNOTDETERMINEPARENT);
        return;
    }
    // outermostparent->set_opentype_outermost();
    // TODO implement the setting of set_has_openType
    AtNotation atNotation;
    for (int i = 0; i < atNotationList.getNofAtNotations(); i++) {
        atNotation = atNotationList.getAtNotationByIndex(i);
        IType parent = null;
        if (0 == atNotation.getLevels()) {
            parent = outermostParent;
        } else {
            parent = myType;
            for (int level = atNotation.getLevels(); level > 0; level--) {
                parent = parent.getParentType();
                if (null == parent) {
                    myType.getLocation().reportSemanticError(MessageFormat.format(TOOMANYDOTS, atNotation.getLevels()));
                    return;
                }
            }
        }
        tempType = parent;
        atNotation.setFirstComponent(parent);
        // component identifiers... do they exist? yes, if the refd type is constrained
        FieldName componentIdentifiers = atNotation.getComponentIdentifiers();
        for (int j = 0; j < componentIdentifiers.getNofFields(); j++) {
            Identifier identifier = componentIdentifiers.getFieldByIndex(i);
            switch(tempType.getTypetype()) {
                case TYPE_ASN1_CHOICE:
                    {
                        final ASN1_Choice_Type temp2 = (ASN1_Choice_Type) tempType;
                        if (temp2.hasComponentWithName(identifier)) {
                            final CompField cf = temp2.getComponentByName(identifier);
                            tempType = cf.getType();
                        } else {
                            myType.getLocation().reportSemanticError(MessageFormat.format(NOCOMPONENTERROR, tempType.getFullName(), identifier.getDisplayName()));
                            return;
                        }
                        break;
                    }
                case TYPE_TTCN3_CHOICE:
                    {
                        final TTCN3_Choice_Type temp2 = (TTCN3_Choice_Type) tempType;
                        if (temp2.hasComponentWithName(identifier.getName())) {
                            tempType = temp2.getComponentByName(identifier.getName()).getType();
                        } else {
                            myType.getLocation().reportSemanticError(MessageFormat.format(NOCOMPONENTERROR, tempType.getFullName(), identifier.getDisplayName()));
                            return;
                        }
                        break;
                    }
                case TYPE_OPENTYPE:
                    {
                        final Open_Type temp2 = (Open_Type) tempType;
                        if (temp2.hasComponentWithName(identifier)) {
                            final CompField cf = temp2.getComponentByName(identifier);
                            tempType = cf.getType();
                        } else {
                            myType.getLocation().reportSemanticError(MessageFormat.format(NOCOMPONENTERROR, tempType.getFullName(), identifier.getDisplayName()));
                            return;
                        }
                        break;
                    }
                case TYPE_ASN1_SEQUENCE:
                    {
                        final ASN1_Sequence_Type temp2 = (ASN1_Sequence_Type) tempType;
                        if (temp2.hasComponentWithName(identifier)) {
                            final CompField cf = temp2.getComponentByName(identifier);
                            tempType = cf.getType();
                        } else {
                            myType.getLocation().reportSemanticError(MessageFormat.format(NOCOMPONENTERROR, tempType.getFullName(), identifier.getDisplayName()));
                            return;
                        }
                        break;
                    }
                case TYPE_TTCN3_SEQUENCE:
                    {
                        final TTCN3_Sequence_Type temp2 = (TTCN3_Sequence_Type) tempType;
                        if (temp2.hasComponentWithName(identifier.getName())) {
                            tempType = temp2.getComponentByName(identifier.getName()).getType();
                        } else {
                            myType.getLocation().reportSemanticError(MessageFormat.format(NOCOMPONENTERROR, tempType.getFullName(), identifier.getDisplayName()));
                            return;
                        }
                        break;
                    }
                case TYPE_ASN1_SET:
                    {
                        final ASN1_Set_Type temp2 = (ASN1_Set_Type) tempType;
                        if (temp2.hasComponentWithName(identifier)) {
                            final CompField cf = temp2.getComponentByName(identifier);
                            tempType = cf.getType();
                        } else {
                            myType.getLocation().reportSemanticError(MessageFormat.format(NOCOMPONENTERROR, tempType.getFullName(), identifier.getDisplayName()));
                            return;
                        }
                        break;
                    }
                case TYPE_TTCN3_SET:
                    {
                        final TTCN3_Set_Type temp2 = (TTCN3_Set_Type) tempType;
                        if (temp2.hasComponentWithName(identifier.getName())) {
                            tempType = temp2.getComponentByName(identifier.getName()).getType();
                        } else {
                            myType.getLocation().reportSemanticError(MessageFormat.format(NOCOMPONENTERROR, tempType.getFullName(), identifier.getDisplayName()));
                            return;
                        }
                        break;
                    }
                default:
                    myType.getLocation().reportSemanticError(MessageFormat.format(SECHOEXPECTED, tempType.getFullName()));
                    return;
            }
        }
        atNotation.setLastComponent(tempType);
        /*
			 * check if the referenced component is constrained by the same objectset...
			 */
        boolean ok = false;
        final Constraints constraints = tempType.getConstraints();
        if (constraints != null) {
            constraints.check(timestamp);
            final TableConstraint tableConstraint = constraints.getTableConstraint();
            if (tableConstraint != null) {
                IType ocft = tableConstraint.constrainedType;
                if (Type_type.TYPE_OBJECTCLASSFIELDTYPE.equals(ocft.getTypetype())) {
                    atNotation.setObjectClassFieldname(((ObjectClassField_Type) ocft).getObjectClassFieldName());
                    IReferenceChain chain = ReferenceChain.getInstance(IReferenceChain.CIRCULARREFERENCE, true);
                    ObjectSet_definition osdef1 = tableConstraint.objectSet.getRefdLast(timestamp, chain);
                    chain.release();
                    chain = ReferenceChain.getInstance(IReferenceChain.CIRCULARREFERENCE, true);
                    final ObjectSet_definition osdef2 = objectSet.getRefdLast(timestamp, chain);
                    chain.release();
                    if (osdef1 == osdef2) {
                        ok = true;
                    } else {
                        ok = false;
                    }
                }
            }
        }
        if (!ok) {
            myType.getLocation().reportSemanticError(SAMECONSTRAINTEXPECTED);
            return;
        }
    }
    if (objectSet instanceof Referenced_ObjectSet) {
        final Identifier objectSetId = ((Referenced_ObjectSet) objectSet).getId();
        collectTypesOfOpenType(timestamp, objectSet, openType, objectSetId);
    } else {
        // TODO: is it posssible? Perhaps log error!
        return;
    }
}
Also used : Open_Type(org.eclipse.titan.designer.AST.ASN1.types.Open_Type) AtNotation(org.eclipse.titan.designer.AST.AtNotation) ObjectSet_definition(org.eclipse.titan.designer.AST.ASN1.Object.ObjectSet_definition) ObjectClassField_Type(org.eclipse.titan.designer.AST.ASN1.types.ObjectClassField_Type) ASN1_Set_Type(org.eclipse.titan.designer.AST.ASN1.types.ASN1_Set_Type) BridgingNamedNode(org.eclipse.titan.designer.AST.BridgingNamedNode) TTCN3_Sequence_Type(org.eclipse.titan.designer.AST.TTCN3.types.TTCN3_Sequence_Type) TTCN3_Set_Type(org.eclipse.titan.designer.AST.TTCN3.types.TTCN3_Set_Type) Constraint(org.eclipse.titan.designer.AST.Constraint) IType(org.eclipse.titan.designer.AST.IType) ASN1_Choice_Type(org.eclipse.titan.designer.AST.ASN1.types.ASN1_Choice_Type) Identifier(org.eclipse.titan.designer.AST.Identifier) Constraints(org.eclipse.titan.designer.AST.Constraints) IReferencingType(org.eclipse.titan.designer.AST.IReferencingType) CompField(org.eclipse.titan.designer.AST.TTCN3.types.CompField) IReferenceChain(org.eclipse.titan.designer.AST.IReferenceChain) ASN1_Sequence_Type(org.eclipse.titan.designer.AST.ASN1.types.ASN1_Sequence_Type) Referenced_ObjectSet(org.eclipse.titan.designer.AST.ASN1.Object.Referenced_ObjectSet) TTCN3_Choice_Type(org.eclipse.titan.designer.AST.TTCN3.types.TTCN3_Choice_Type) FieldName(org.eclipse.titan.designer.AST.ASN1.Object.FieldName)

Example 2 with ObjectSet_definition

use of org.eclipse.titan.designer.AST.ASN1.Object.ObjectSet_definition in project titan.EclipsePlug-ins by eclipse.

the class ObjectSetElementVisitor_objectCollector method visitObjectSet.

public void visitObjectSet(final ObjectSet p, final boolean force) {
    if (governor == null || p == null) {
        return;
    }
    final ObjectClass myClass = governor.getRefdLast(timestamp, null);
    ObjectClass refdClass = null;
    if (p instanceof Referenced_ObjectSet) {
        refdClass = ((Referenced_ObjectSet) p).getRefdObjectClass(timestamp);
    }
    if (myClass != refdClass && myClass != null && refdClass != null) {
        p.getLocation().reportSemanticError(MessageFormat.format(OBJECTOFCLASSEXPECTED, myClass.getFullName(), p.getFullName(), refdClass.getFullName()));
        return;
    }
    final ObjectSet_definition os = p.getRefdLast(timestamp, null);
    if (visitedElements.contains(os)) {
        if (!force) {
            return;
        }
    } else {
        visitedElements.add(os);
    }
    // ^Par ref ^^^^^^ObjectSet
    if (((Referenced_ObjectSet) p).isReferencedParameterisedReference()) {
        return;
    }
    // TODO: check this!
    if (((Referenced_ObjectSet) p).isReferencedDefinedReference()) {
        return;
    }
    final ASN1Objects otherObjects = os.getObjs();
    otherObjects.trimToSize();
    for (int i = 0; i < otherObjects.getNofObjects(); i++) {
        visitObject(otherObjects.getObjectByIndex(i));
    }
}
Also used : ObjectClass(org.eclipse.titan.designer.AST.ASN1.ObjectClass)

Example 3 with ObjectSet_definition

use of org.eclipse.titan.designer.AST.ASN1.Object.ObjectSet_definition in project titan.EclipsePlug-ins by eclipse.

the class ObjectSet_definition method getRefdLast.

@Override
public final /**
 * {@inheritDoc}
 */
ObjectSet_definition getRefdLast(final CompilationTimeStamp timestamp, final IReferenceChain referenceChain) {
    if (1 != objectSetElements.size()) {
        return this;
    }
    final IObjectSet_Element element = objectSetElements.get(0);
    if (!(element instanceof Referenced_ObjectSet)) {
        return this;
    }
    final boolean newChain = null == referenceChain;
    IReferenceChain temporalReferenceChain;
    if (newChain) {
        temporalReferenceChain = ReferenceChain.getInstance(IReferenceChain.CIRCULARREFERENCE, true);
    } else {
        temporalReferenceChain = referenceChain;
    }
    temporalReferenceChain.add(this);
    final ObjectSet_definition result = ((Referenced_ObjectSet) element).getRefdLast(timestamp, temporalReferenceChain);
    if (newChain) {
        temporalReferenceChain.release();
    }
    return result;
}
Also used : IReferenceChain(org.eclipse.titan.designer.AST.IReferenceChain) IObjectSet_Element(org.eclipse.titan.designer.AST.ASN1.IObjectSet_Element)

Example 4 with ObjectSet_definition

use of org.eclipse.titan.designer.AST.ASN1.Object.ObjectSet_definition in project titan.EclipsePlug-ins by eclipse.

the class InformationFromObj method getRefdSetting.

@Override
public /**
 * {@inheritDoc}
 */
ISetting getRefdSetting(final CompilationTimeStamp timestamp) {
    setIsErroneous(false);
    ISetting temporalSetting = reference.getRefdSetting(timestamp);
    if (null == temporalSetting) {
        setIsErroneous(true);
        return new Error_Setting();
    }
    SettingDetectionState currentState;
    ObjectClass_Definition objectClass = null;
    ObjectSet_definition objectSet = null;
    Object_Definition object = null;
    object = new Object_Definition(null);
    ObjectSet_definition fromObjectSet = newObjectSetDefinitionInstance();
    /* the first part */
    switch(temporalSetting.getSettingtype()) {
        case S_OS:
            currentState = SettingDetectionState.ObjectSet;
            objectSet = ((ObjectSet) temporalSetting).getRefdLast(timestamp, null);
            objectClass = objectSet.getMyGovernor().getRefdLast(timestamp, null);
            final ObjectSetElementVisitor_objectCollector objectCollector = new ObjectSetElementVisitor_objectCollector(objectSet.getLocation(), objectClass, timestamp);
            objectCollector.visitObjectSet(objectSet, false);
            fromObjectSet = newObjectSetDefinitionInstance(objectCollector.giveObjects());
            fromObjectSet.setMyGovernor(objectClass);
            break;
        case S_O:
            currentState = SettingDetectionState.Object;
            object = ((ASN1Object) temporalSetting).getRefdLast(timestamp, null);
            objectClass = object.getMyGovernor().getRefdLast(timestamp, null);
            break;
        case S_OC:
            currentState = SettingDetectionState.ObjectClass;
            objectClass = ((ObjectClass) temporalSetting).getRefdLast(timestamp, null);
            break;
        case S_ERROR:
            setIsErroneous(true);
            return new Error_Setting();
        default:
            location.reportSemanticError(MessageFormat.format(INVALIDREFERENCE, getDisplayName()));
            setIsErroneous(true);
            return new Error_Setting();
    }
    final int nofFields = fieldName.getNofFields();
    /* the middle part */
    Identifier currentFieldName;
    FieldSpecification currentFieldSpecification;
    for (int i = 0; i < nofFields - 1; i++) {
        currentFieldName = fieldName.getFieldByIndex(i);
        currentFieldSpecification = objectClass.getFieldSpecifications().getFieldSpecificationByIdentifier(currentFieldName).getLast();
        if (Fieldspecification_types.FS_ERROR.equals(currentFieldSpecification.getFieldSpecificationType())) {
            setIsErroneous(true);
            return new Error_Setting();
        }
        switch(currentState) {
            case ObjectClass:
                switch(currentFieldSpecification.getFieldSpecificationType()) {
                    case FS_O:
                        {
                            final Object_FieldSpecification temporalFieldspec = (Object_FieldSpecification) currentFieldSpecification;
                            objectClass = temporalFieldspec.getObjectClass().getRefdLast(timestamp, null);
                        }
                        break;
                    case FS_OS:
                        {
                            final ObjectSet_FieldSpecification temporalFieldspec = (ObjectSet_FieldSpecification) currentFieldSpecification;
                            objectClass = temporalFieldspec.getObjectClass().getRefdLast(timestamp, null);
                        }
                        break;
                    case FS_ERROR:
                        setIsErroneous(true);
                        return new Error_Setting();
                    default:
                        location.reportSemanticError(INVALIDNOTATION1);
                        setIsErroneous(true);
                        return new Error_Setting();
                }
                break;
            case ObjectSet:
                switch(currentFieldSpecification.getFieldSpecificationType()) {
                    case FS_O:
                        {
                            final Object_FieldSpecification temporalFieldspec = (Object_FieldSpecification) currentFieldSpecification;
                            objectClass = temporalFieldspec.getObjectClass().getRefdLast(timestamp, null);
                            final ObjectSetElementVisitor_objectCollector objectCollector = new ObjectSetElementVisitor_objectCollector(location, objectClass, timestamp);
                            final ASN1Objects temporalObjects = fromObjectSet.getObjs();
                            temporalObjects.trimToSize();
                            for (int j = 0; j < temporalObjects.getNofObjects(); j++) {
                                object = temporalObjects.getObjectByIndex(j).getRefdLast(timestamp, null);
                                if (!object.hasFieldSettingWithNameDefault(currentFieldName)) {
                                    continue;
                                }
                                temporalSetting = object.getSettingByNameDefault(currentFieldName);
                                object = ((Object_Definition) temporalSetting).getRefdLast(timestamp, null);
                                objectCollector.visitObject(object);
                            }
                            fromObjectSet = newObjectSetDefinitionInstance(objectCollector.giveObjects());
                            fromObjectSet.setLocation(location);
                            fromObjectSet.setMyGovernor(objectClass);
                        }
                        break;
                    case FS_OS:
                        {
                            final ObjectSet_FieldSpecification temporalFieldspec = (ObjectSet_FieldSpecification) currentFieldSpecification;
                            objectClass = temporalFieldspec.getObjectClass().getRefdLast(timestamp, null);
                            final ObjectSetElementVisitor_objectCollector objectCollector2 = new ObjectSetElementVisitor_objectCollector(location, objectClass, timestamp);
                            final ASN1Objects temporalObjects = fromObjectSet.getObjs();
                            for (int j = 0; j < temporalObjects.getNofObjects(); j++) {
                                object = temporalObjects.getObjectByIndex(j).getRefdLast(timestamp, null);
                                if (!object.hasFieldSettingWithNameDefault(currentFieldName)) {
                                    continue;
                                }
                                temporalSetting = object.getSettingByNameDefault(currentFieldName);
                                objectSet = ((ObjectSet_definition) temporalSetting).getRefdLast(timestamp, null);
                                objectCollector2.visitObjectSet(objectSet, false);
                            }
                            fromObjectSet = newObjectSetDefinitionInstance(objectCollector2.giveObjects());
                            fromObjectSet.setLocation(location);
                            fromObjectSet.setMyGovernor(objectClass);
                        }
                        break;
                    case FS_ERROR:
                        setIsErroneous(true);
                        return new Error_Setting();
                    default:
                        location.reportSemanticError(INVALIDNOTATION1);
                        setIsErroneous(true);
                        return new Error_Setting();
                }
                break;
            case Object:
                switch(currentFieldSpecification.getFieldSpecificationType()) {
                    case FS_O:
                        {
                            final Object_FieldSpecification temporalFieldspec = (Object_FieldSpecification) currentFieldSpecification;
                            objectClass = temporalFieldspec.getObjectClass().getRefdLast(timestamp, null);
                            temporalSetting = object.getSettingByNameDefault(currentFieldName);
                            object = ((Object_Definition) temporalSetting).getRefdLast(timestamp, null);
                        }
                        break;
                    case FS_OS:
                        {
                            currentState = SettingDetectionState.ObjectSet;
                            final ObjectSet_FieldSpecification temporalFieldspec = (ObjectSet_FieldSpecification) currentFieldSpecification;
                            objectClass = temporalFieldspec.getObjectClass().getRefdLast(timestamp, null);
                            final ObjectSetElementVisitor_objectCollector objectCollector = new ObjectSetElementVisitor_objectCollector(fromObjectSet, timestamp);
                            final ASN1Objects temporalObjects = fromObjectSet.getObjs();
                            for (int j = 0; j < temporalObjects.getNofObjects(); j++) {
                                object = temporalObjects.getObjectByIndex(j).getRefdLast(timestamp, null);
                                if (!object.hasFieldSettingWithNameDefault(currentFieldName)) {
                                    continue;
                                }
                                temporalSetting = object.getSettingByNameDefault(currentFieldName);
                                objectSet = ((ObjectSet_definition) temporalSetting).getRefdLast(timestamp, null);
                                objectCollector.visitObjectSet(objectSet, false);
                            }
                            fromObjectSet = newObjectSetDefinitionInstance(objectCollector.giveObjects());
                            fromObjectSet.setLocation(location);
                            fromObjectSet.setMyGovernor(objectClass);
                        }
                        break;
                    case FS_ERROR:
                        setIsErroneous(true);
                        return new Error_Setting();
                    default:
                        location.reportSemanticError(INVALIDNOTATION1);
                        setIsErroneous(true);
                        return new Error_Setting();
                }
                break;
            default:
                // if this could happen it would be FATAL ERROR
                break;
        }
    }
    /* and the last part... */
    currentFieldName = fieldName.getFieldByIndex(nofFields - 1);
    currentFieldSpecification = objectClass.getFieldSpecifications().getFieldSpecificationByIdentifier(currentFieldName).getLast();
    temporalSetting = null;
    switch(currentState) {
        case ObjectClass:
            switch(currentFieldSpecification.getFieldSpecificationType()) {
                case FS_T:
                    {
                        final Open_Type type = new Open_Type(objectClass, currentFieldName);
                        type.setLocation(location);
                        type.setMyScope(myScope);
                        temporalSetting = type;
                    }
                    break;
                case FS_V_FT:
                    {
                        final FixedTypeValue_FieldSpecification temporalFielspecification = (FixedTypeValue_FieldSpecification) currentFieldSpecification;
                        final ObjectClassField_Type type = new ObjectClassField_Type(temporalFielspecification.getType(), objectClass, currentFieldName);
                        type.setLocation(location);
                        temporalSetting = type;
                    }
                    break;
                case FS_V_VT:
                case FS_VS_FT:
                case FS_VS_VT:
                    location.reportSemanticError(UNSUPPORTEDCONSTRUCT);
                    setIsErroneous(true);
                    break;
                case FS_O:
                case FS_OS:
                    location.reportSemanticError(INVALIDNOTATION2);
                    setIsErroneous(true);
                    break;
                default:
                    setIsErroneous(true);
                    break;
            }
            break;
        case ObjectSet:
            switch(currentFieldSpecification.getFieldSpecificationType()) {
                case FS_O:
                    {
                        final Object_FieldSpecification temporalFieldspec = (Object_FieldSpecification) currentFieldSpecification;
                        objectClass = temporalFieldspec.getObjectClass().getRefdLast(timestamp, null);
                        final ObjectSetElementVisitor_objectCollector objectCollector = new ObjectSetElementVisitor_objectCollector(location, objectClass, timestamp);
                        final ASN1Objects temporalObjects = fromObjectSet.getObjs();
                        for (int j = 0; j < temporalObjects.getNofObjects(); j++) {
                            object = temporalObjects.getObjectByIndex(j).getRefdLast(timestamp, null);
                            if (!object.hasFieldSettingWithNameDefault(currentFieldName)) {
                                continue;
                            }
                            temporalSetting = object.getSettingByNameDefault(currentFieldName);
                            object = ((Object_Definition) temporalSetting).getRefdLast(timestamp, null);
                            objectCollector.visitObject(object);
                        }
                        fromObjectSet = newObjectSetDefinitionInstance(objectCollector.giveObjects());
                        fromObjectSet.setLocation(location);
                        fromObjectSet.setMyGovernor(objectClass);
                        fromObjectSet.setMyScope(myScope);
                        temporalSetting = fromObjectSet;
                    }
                    break;
                case FS_OS:
                    {
                        final ObjectSet_FieldSpecification temporalFieldspec = (ObjectSet_FieldSpecification) currentFieldSpecification;
                        objectClass = temporalFieldspec.getObjectClass().getRefdLast(timestamp, null);
                        final ObjectSetElementVisitor_objectCollector objectCollector2 = new ObjectSetElementVisitor_objectCollector(location, objectClass, timestamp);
                        final ASN1Objects temporalObjects = fromObjectSet.getObjs();
                        for (int j = 0; j < temporalObjects.getNofObjects(); j++) {
                            object = temporalObjects.getObjectByIndex(j).getRefdLast(timestamp, null);
                            if (!object.hasFieldSettingWithNameDefault(currentFieldName)) {
                                continue;
                            }
                            temporalSetting = object.getSettingByNameDefault(currentFieldName);
                            objectSet = ((ObjectSet_definition) temporalSetting).getRefdLast(timestamp, null);
                            objectCollector2.visitObjectSet(objectSet, false);
                        }
                        fromObjectSet = newObjectSetDefinitionInstance(objectCollector2.giveObjects());
                        fromObjectSet.setLocation(location);
                        fromObjectSet.setMyGovernor(objectClass);
                        fromObjectSet.setMyScope(myScope);
                        temporalSetting = fromObjectSet;
                    }
                    break;
                case FS_V_FT:
                case FS_VS_FT:
                    location.reportSemanticError(VALUESETFROMOBJECTS_NOT_SUPPORTED);
                    setIsErroneous(true);
                    break;
                case FS_ERROR:
                    setIsErroneous(true);
                    break;
                default:
                    location.reportSemanticError(INVALIDNOTATION3);
                    setIsErroneous(true);
                    break;
            }
            break;
        case Object:
            temporalSetting = object.getSettingByNameDefault(currentFieldName);
            break;
        default:
            setIsErroneous(true);
            break;
    }
    return temporalSetting;
}
Also used : ObjectSet_FieldSpecification(org.eclipse.titan.designer.AST.ASN1.Object.ObjectSet_FieldSpecification) Open_Type(org.eclipse.titan.designer.AST.ASN1.types.Open_Type) ObjectClass_Definition(org.eclipse.titan.designer.AST.ASN1.Object.ObjectClass_Definition) ObjectSet_definition(org.eclipse.titan.designer.AST.ASN1.Object.ObjectSet_definition) Error_Setting(org.eclipse.titan.designer.AST.Error_Setting) ObjectClassField_Type(org.eclipse.titan.designer.AST.ASN1.types.ObjectClassField_Type) ISetting(org.eclipse.titan.designer.AST.ISetting) ObjectSet_FieldSpecification(org.eclipse.titan.designer.AST.ASN1.Object.ObjectSet_FieldSpecification) Object_FieldSpecification(org.eclipse.titan.designer.AST.ASN1.Object.Object_FieldSpecification) FieldSpecification(org.eclipse.titan.designer.AST.ASN1.Object.FieldSpecification) FixedTypeValue_FieldSpecification(org.eclipse.titan.designer.AST.ASN1.Object.FixedTypeValue_FieldSpecification) FixedTypeValue_FieldSpecification(org.eclipse.titan.designer.AST.ASN1.Object.FixedTypeValue_FieldSpecification) Object_Definition(org.eclipse.titan.designer.AST.ASN1.Object.Object_Definition) Identifier(org.eclipse.titan.designer.AST.Identifier) Object_FieldSpecification(org.eclipse.titan.designer.AST.ASN1.Object.Object_FieldSpecification) ObjectSetElementVisitor_objectCollector(org.eclipse.titan.designer.AST.ASN1.Object.ObjectSetElementVisitor_objectCollector) ASN1Objects(org.eclipse.titan.designer.AST.ASN1.Object.ASN1Objects)

Example 5 with ObjectSet_definition

use of org.eclipse.titan.designer.AST.ASN1.Object.ObjectSet_definition in project titan.EclipsePlug-ins by eclipse.

the class FieldSetting_ObjectSet method check.

@Override
public /**
 * {@inheritDoc}
 */
void check(final CompilationTimeStamp timestamp, final FieldSpecification fieldSpecification) {
    if (null != lastTimeChecked && !lastTimeChecked.isLess(timestamp)) {
        return;
    }
    if (!Fieldspecification_types.FS_OS.equals(fieldSpecification.getFieldSpecificationType())) {
        location.reportSemanticError(OBJECTSETEXPECTED);
        objectSet = new ObjectSet_definition();
        objectSet.setFullNameParent(this);
        objectSet.setLocation(fieldSpecification.getLocation());
    }
    final ObjectSet_FieldSpecification fs = (ObjectSet_FieldSpecification) fieldSpecification;
    final ObjectClass oc = fs.getObjectClass();
    objectSet.setMyGovernor(oc);
    lastTimeChecked = timestamp;
    objectSet.check(timestamp);
}
Also used : ObjectClass(org.eclipse.titan.designer.AST.ASN1.ObjectClass)

Aggregations

ObjectSet_definition (org.eclipse.titan.designer.AST.ASN1.Object.ObjectSet_definition)4 ObjectClass (org.eclipse.titan.designer.AST.ASN1.ObjectClass)3 ObjectClassField_Type (org.eclipse.titan.designer.AST.ASN1.types.ObjectClassField_Type)3 Open_Type (org.eclipse.titan.designer.AST.ASN1.types.Open_Type)3 IReferenceChain (org.eclipse.titan.designer.AST.IReferenceChain)3 ISetting (org.eclipse.titan.designer.AST.ISetting)3 Identifier (org.eclipse.titan.designer.AST.Identifier)3 Object_Definition (org.eclipse.titan.designer.AST.ASN1.Object.Object_Definition)2 Referenced_ObjectSet (org.eclipse.titan.designer.AST.ASN1.Object.Referenced_ObjectSet)2 ASN1_Choice_Type (org.eclipse.titan.designer.AST.ASN1.types.ASN1_Choice_Type)2 ASN1_Sequence_Type (org.eclipse.titan.designer.AST.ASN1.types.ASN1_Sequence_Type)2 ASN1_Set_Type (org.eclipse.titan.designer.AST.ASN1.types.ASN1_Set_Type)2 Constraint (org.eclipse.titan.designer.AST.Constraint)2 IReferencingType (org.eclipse.titan.designer.AST.IReferencingType)2 IType (org.eclipse.titan.designer.AST.IType)2 CompField (org.eclipse.titan.designer.AST.TTCN3.types.CompField)2 Referenced_Type (org.eclipse.titan.designer.AST.TTCN3.types.Referenced_Type)2 TTCN3_Choice_Type (org.eclipse.titan.designer.AST.TTCN3.types.TTCN3_Choice_Type)2 TTCN3_Sequence_Type (org.eclipse.titan.designer.AST.TTCN3.types.TTCN3_Sequence_Type)2 TTCN3_Set_Type (org.eclipse.titan.designer.AST.TTCN3.types.TTCN3_Set_Type)2