use of org.eclipse.titan.designer.AST.ASN1.types.ObjectClassField_Type 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;
}
}
use of org.eclipse.titan.designer.AST.ASN1.types.ObjectClassField_Type 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;
}
Aggregations