use of org.eclipse.titan.designer.AST.ASN1.Object.ObjectSet_definition in project titan.EclipsePlug-ins by eclipse.
the class Referenced_ObjectSet method getRefd.
public ObjectSet getRefd(final CompilationTimeStamp timestamp, final IReferenceChain referenceChain) {
if (referenceChain.add(this)) {
if (osReferenced != null && lastTimeChecked != null && !lastTimeChecked.isLess(timestamp)) {
return osReferenced;
}
final Assignment assignment = reference.getRefdAssignment(timestamp, true, referenceChain);
if (null != assignment) {
// TODO check in the compiler too !!!
final ISetting setting = assignment.getSetting(timestamp);
if (null != setting && !Setting_type.S_ERROR.equals(setting.getSettingtype())) {
if (Setting_type.S_OS.equals(setting.getSettingtype())) {
osReferenced = (ObjectSet) setting;
return osReferenced;
}
location.reportSemanticError(OBJECTSETEXPECTED);
}
}
}
osReferenced = new ObjectSet_definition();
osReferenced.setFullNameParent(this);
osReferenced.setMyGovernor(getMyGovernor());
return osReferenced;
}
use of org.eclipse.titan.designer.AST.ASN1.Object.ObjectSet_definition in project titan.EclipsePlug-ins by eclipse.
the class TableConstraint method parseBlocks.
private void parseBlocks() {
if (mObjectSetBlock == null) {
return;
}
objectSet = null;
atNotationList = null;
if (null != mObjectSetBlock) {
if (mAtNotationsBlock == null) {
// SimpleTableConstraint
Asn1Parser parser = BlockLevelTokenStreamTracker.getASN1ParserForBlock(mObjectSetBlock, 0);
if (parser != null) {
objectSet = parser.pr_special_ObjectSetSpec().definition;
List<SyntacticErrorStorage> errors = parser.getErrorStorage();
if (null != errors && !errors.isEmpty()) {
objectSet = null;
for (int i = 0; i < errors.size(); i++) {
ParserMarkerSupport.createOnTheFlyMixedMarker((IFile) mObjectSetBlock.getLocation().getFile(), errors.get(i), IMarker.SEVERITY_ERROR);
}
}
}
} else {
// ComponentRelationConstraint
Asn1Parser parser = BlockLevelTokenStreamTracker.getASN1ParserForBlock(mObjectSetBlock, 0);
if (parser != null) {
objectSet = parser.pr_DefinedObjectSetBlock().objectSet;
List<SyntacticErrorStorage> errors = parser.getErrorStorage();
if (null != errors && !errors.isEmpty()) {
objectSet = null;
for (int i = 0; i < errors.size(); i++) {
ParserMarkerSupport.createOnTheFlySyntacticMarker((IFile) mObjectSetBlock.getLocation().getFile(), errors.get(i), IMarker.SEVERITY_ERROR);
}
}
}
parser = BlockLevelTokenStreamTracker.getASN1ParserForBlock(mAtNotationsBlock, 0);
if (parser != null) {
atNotationList = parser.pr_AtNotationList().notationList;
List<SyntacticErrorStorage> errors = parser.getErrorStorage();
if (null != errors && !errors.isEmpty()) {
objectSet = null;
for (int i = 0; i < errors.size(); i++) {
ParserMarkerSupport.createOnTheFlySyntacticMarker((IFile) mAtNotationsBlock.getLocation().getFile(), errors.get(i), IMarker.SEVERITY_ERROR);
}
}
}
if (atNotationList == null) {
atNotationList = new AtNotations();
}
}
}
if (objectSet == null) {
objectSet = new ObjectSet_definition();
}
}
use of org.eclipse.titan.designer.AST.ASN1.Object.ObjectSet_definition 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);
}
use of org.eclipse.titan.designer.AST.ASN1.Object.ObjectSet_definition in project titan.EclipsePlug-ins by eclipse.
the class Referenced_ObjectSet method check.
@Override
public /**
* {@inheritDoc}
*/
void check(final CompilationTimeStamp timestamp) {
if (null != lastTimeChecked && !lastTimeChecked.isLess(timestamp)) {
return;
}
lastTimeChecked = timestamp;
if (null == myGovernor) {
return;
}
final ObjectClass myClass = myGovernor.getRefdLast(timestamp, null);
final ObjectClass refdClass = getRefdObjectClass(timestamp);
if (myClass != refdClass) {
if (location != null && refdClass != null && myClass != null) {
location.reportSemanticError(MessageFormat.format(MISMATCH, myClass.getFullName(), refdClass.getFullName()));
}
osReferenced = new ObjectSet_definition();
osReferenced.setMyGovernor(myGovernor);
osReferenced.check(timestamp);
}
}
use of org.eclipse.titan.designer.AST.ASN1.Object.ObjectSet_definition in project titan.EclipsePlug-ins by eclipse.
the class Undefined_FieldSpecification method classifyFieldSpecification.
private void classifyFieldSpecification(final CompilationTimeStamp timestamp) {
final IReferenceChain temporalReferenceChain = ReferenceChain.getInstance(IReferenceChain.CIRCULARREFERENCE, true);
if (isOptional && (null != defaultSetting1 || null != mDefaultSetting)) {
location.reportSemanticError("OPTIONAL and DEFAULT are mutually exclusive");
isOptional = false;
}
if (temporalReferenceChain.add(this) && null != governorReference) {
governorReference.setMyScope(myObjectClass.getMyScope());
if (null != defaultSetting1) {
defaultSetting1.setMyScope(myObjectClass.getMyScope());
}
if (identifier.isvalidAsnObjectSetFieldReference() && governorReference.refersToSettingType(timestamp, Setting_type.S_OC, temporalReferenceChain)) {
ObjectSet defaultObjectset = null;
if (null != mDefaultSetting) {
defaultObjectset = new ObjectSet_definition(mDefaultSetting);
}
final ObjectClass_refd oc = new ObjectClass_refd(governorReference);
oc.setLocation(governorReference.getLocation());
fieldSpecification = new ObjectSet_FieldSpecification(identifier, oc, isOptional, defaultObjectset);
} else if (identifier.isvalidAsnObjectFieldReference() && governorReference.refersToSettingType(timestamp, Setting_type.S_OC, temporalReferenceChain)) {
ASN1Object defaultObject = null;
if (null != defaultSetting1) {
defaultObject = new ReferencedObject(defaultSetting1);
} else if (null != mDefaultSetting) {
defaultObject = new Object_Definition(mDefaultSetting);
}
fieldSpecification = new Object_FieldSpecification(identifier, new ObjectClass_refd(governorReference), isOptional, defaultObject);
} else if (identifier.isvalidAsnValueFieldReference() && (governorReference.refersToSettingType(timestamp, Setting_type.S_T, temporalReferenceChain) || governorReference.refersToSettingType(timestamp, Setting_type.S_VS, temporalReferenceChain))) {
IValue defaultValue = null;
if (null != defaultSetting1) {
if (defaultSetting1 instanceof Defined_Reference && null == defaultSetting1.getModuleIdentifier()) {
defaultValue = new Undefined_LowerIdentifier_Value(defaultSetting1.getId().newInstance());
} else {
defaultValue = new Referenced_Value(defaultSetting1);
}
} else if (null != mDefaultSetting) {
defaultValue = new Undefined_Block_Value(mDefaultSetting);
}
fieldSpecification = new FixedTypeValue_FieldSpecification(identifier, new Referenced_Type(governorReference), false, isOptional, null != defaultSetting1 && null != mDefaultSetting, defaultValue);
}
}
if (null == fieldSpecification) {
location.reportSemanticError(CANNOTRECOGNISE);
fieldSpecification = new Erroneous_FieldSpecification(identifier, isOptional, null != defaultSetting1 || null != mDefaultSetting);
} else {
if (null != myObjectClass) {
fieldSpecification.setMyObjectClass(myObjectClass);
}
}
fieldSpecification.setFullNameParent(getNameParent());
fieldSpecification.setLocation(location);
temporalReferenceChain.release();
}
Aggregations