use of org.eclipse.titan.designer.AST.ASN1.Object.FieldSetting_ObjectSet in project titan.EclipsePlug-ins by eclipse.
the class ObjectClassSyntax_Parser method visitSetting.
@Override
public /**
* {@inheritDoc}
*/
void visitSetting(final ObjectClassSyntax_setting parameter) {
FieldSetting fieldSetting = null;
switch(parameter.getSettingType()) {
case S_T:
final ASN1Type type = parseType();
if (null != type) {
fieldSetting = new FieldSetting_Type(parameter.getIdentifier().newInstance(), type);
fieldSetting.setLocation(mBlock.getLocation());
}
break;
case S_V:
final boolean parseSuccess = parseValue();
if (parseSuccess) {
fieldSetting = new FieldSetting_Value(parameter.getIdentifier().newInstance());
fieldSetting.setLocation(mBlock.getLocation());
}
break;
case S_VS:
// TODO mark as NOT SUPPORTED
break;
case S_O:
final ASN1Object object = parseObject();
if (null != object) {
fieldSetting = new FieldSetting_Object(parameter.getIdentifier().newInstance(), object);
fieldSetting.setLocation(mBlock.getLocation());
}
break;
case S_OS:
final ObjectSet objectSet = parseObjectSet();
if (null != objectSet) {
fieldSetting = new FieldSetting_ObjectSet(parameter.getIdentifier().newInstance(), objectSet);
fieldSetting.setLocation(mBlock.getLocation());
}
break;
case S_UNDEF:
// FATAL ERROR
default:
break;
}
previousSuccess = null != fieldSetting;
myObject.addFieldSetting(fieldSetting);
}
use of org.eclipse.titan.designer.AST.ASN1.Object.FieldSetting_ObjectSet in project titan.EclipsePlug-ins by eclipse.
the class TableConstraint method collectTypesOfOpenType.
private void collectTypesOfOpenType(final CompilationTimeStamp aTimestamp, ObjectSet aObjectSet, final Open_Type aOpenType, final Identifier aObjectSetId) {
if (aObjectSet instanceof Referenced_ObjectSet) {
if (((Referenced_ObjectSet) aObjectSet).isReferencedDefinedReference()) {
aObjectSet = aObjectSet.getRefdLast(aTimestamp, null);
} else if (((Referenced_ObjectSet) aObjectSet).isReferencedInformationFromObj()) {
// TODO: How to handle this?
return;
} else {
// impossible, try it
return;
}
}
// now aObjectSet is instanceof ObjectSet_definition:
List<IObjectSet_Element> oses = ((ObjectSet_definition) aObjectSet).getObjectSetElements();
for (IObjectSet_Element ose : oses) {
if (ose instanceof ReferencedObject) {
// fspec
ose = ((ReferencedObject) ose).getRefdLast(aTimestamp);
}
if (ose instanceof Object_Definition) {
final Object_Definition od = (Object_Definition) ose;
FieldSetting fs = od.getFieldSettingWithNameDefault(objectClassFieldname, false);
if (fs != null) {
// TODO: handle FieldSetting options: FieldSetting_Type, FieldSetting_ObjectSet, FieldSetting_Value
if (fs instanceof FieldSetting_Type) {
final FieldSetting_Type fst = (FieldSetting_Type) fs;
final IASN1Type type = fst.getSetting();
final AtomicBoolean isStrange = new AtomicBoolean();
Identifier id = getOpenTypeAlternativeName(aTimestamp, (Type) type, isStrange);
if (!aOpenType.hasComponentWithName(id)) {
aOpenType.addComponent(new CompField(id, (Type) type, false, null));
if (isStrange.get()) {
aOpenType.getLocation().reportSemanticWarning(MessageFormat.format("Strange alternative name (`{0}') was added to open type `{1}'", id.getDisplayName(), aOpenType.getFullName()));
}
}
} else {
// TODO: is it possible FieldSetting_ObjectSet, FieldSetting_Value ??
continue;
}
} else {
fs = od.getFieldSettingWithNameDefault(aObjectSetId, false);
if (fs == null) {
continue;
}
if (fs instanceof FieldSetting_ObjectSet) {
final ISetting objectSet1 = fs.getSetting();
ObjectSet objectSet2;
if (objectSet1 instanceof ObjectSet) {
objectSet2 = (ObjectSet) objectSet1;
} else {
// unexpected case
continue;
}
if (objectSet2 == aObjectSet) {
// to prevent infinite loop
continue;
}
collectTypesOfOpenType(aTimestamp, objectSet2, aOpenType, aObjectSetId);
} else {
// TODO: is it possible??
continue;
}
}
}
}
// for
aOpenType.check(aTimestamp);
}
Aggregations