use of org.eclipse.titan.designer.AST.Reference in project titan.EclipsePlug-ins by eclipse.
the class Imports method addDeclaration.
/**
* Searches for elements that could be referred to be the provided
* reference, and if found, they are added to the declaration collector.
* <p>
*
* @see DeclarationCollector
* @param declarationCollector
* the declaration collector folding the reference and
* collecting the declarations.
*/
public void addDeclaration(final DeclarationCollector declarationCollector) {
final Reference reference = declarationCollector.getReference();
final Identifier identifier = reference.getId();
if (singularImportedSymbols_map.containsKey(identifier.getName())) {
final Module tempModule = singularImportedSymbols_map.get(identifier.getName());
tempModule.getAssignmentsScope().addDeclaration(declarationCollector);
}
if (!declarationCollector.getCollected().isEmpty()) {
return;
}
for (ImportModule importation : importedModules_map.values()) {
importation.addDeclaration(declarationCollector, module.getIdentifier());
}
}
use of org.eclipse.titan.designer.AST.Reference in project titan.EclipsePlug-ins by eclipse.
the class Export_Debug_AST method run.
@Override
public void run(IAction action) {
if (targetEditor == null)
return;
IFile file = (IFile) targetEditor.getEditorInput().getAdapter(IFile.class);
ProjectSourceParser parser = GlobalParser.getProjectSourceParser(file.getProject());
Module module = parser.containedModule(file);
if (module == null) {
TITANDebugConsole.getConsole().newMessageStream().println("No module was found");
}
TITANDebugConsole.getConsole().newMessageStream().println("*************************");
TITANDebugConsole.getConsole().newMessageStream().println("Printing DEBUG information for module `" + module.getName() + "':");
TITANDebugConsole.getConsole().newMessageStream().println("*************************");
module.accept(new ASTVisitor() {
private int padding = 0;
@Override
public int visit(IVisitableNode node) {
if (node instanceof Assignment) {
Assignment assignment = (Assignment) node;
printInfoln(padding, assignment.getAssignmentName(), assignment.getFullName(), assignment.getLastTimeChecked(), assignment.getLocation());
} else if (node instanceof Identifier) {
printInfoln(padding, "identifier", ((Identifier) node).getDisplayName(), null, ((Identifier) node).getLocation());
} else if (node instanceof Statement) {
Statement statement = (Statement) node;
printInfoln(padding, "statement", statement.getFullName(), statement.getLastTimeChecked(), statement.getLocation());
} else if (node instanceof Reference) {
Reference ref = (Reference) node;
printInfoln(padding, "reference", ref.getFullName(), ref.getLastTimeChecked(), ref.getLocation());
Assignment old = ref.getAssOld();
if (old != null) {
printInfoln(padding + 1, "This reference was last pointing to " + old.getFullName() + " analyzed at " + old.getLastTimeChecked());
}
} else if (node instanceof ComponentTypeBody) {
ComponentTypeBody body = (ComponentTypeBody) node;
Map<String, Definition> map = body.getDefinitionMap();
printInfoln(padding + 1, " contains definitions:");
for (Map.Entry<String, Definition> entry : map.entrySet()) {
printInfoln(padding + 2, entry.getKey() + " was last checked at " + entry.getValue().getLastTimeChecked());
}
}
if (node instanceof StatementBlock || node instanceof Definition) {
padding++;
}
return super.visit(node);
}
@Override
public int leave(IVisitableNode node) {
if (node instanceof StatementBlock || node instanceof Definition) {
padding--;
}
return super.leave(node);
}
});
TITANDebugConsole.getConsole().newMessageStream().println("*************************");
TITANDebugConsole.getConsole().newMessageStream().println("Printing DEBUG information for module `" + module.getName() + "' finished");
TITANDebugConsole.getConsole().newMessageStream().println("*************************");
}
use of org.eclipse.titan.designer.AST.Reference in project titan.EclipsePlug-ins by eclipse.
the class ASN1Assignments method addDeclaration.
@Override
public /**
* {@inheritDoc}
*/
void addDeclaration(final DeclarationCollector declarationCollector) {
final Reference reference = declarationCollector.getReference();
if (null == reference.getModuleIdentifier()) {
final Identifier id = reference.getId();
final String name = id.getName();
for (ASN1Assignment assignment : assignments) {
if (assignment.getIdentifier().getName().equals(name)) {
assignment.addDeclaration(declarationCollector, 0);
}
}
}
super.addDeclaration(declarationCollector);
}
use of org.eclipse.titan.designer.AST.Reference in project titan.EclipsePlug-ins by eclipse.
the class All_From_Template method checkThisTemplateParameterizedReference.
private boolean checkThisTemplateParameterizedReference(final Reference reference, final Assignment lhs) {
final List<ISubReference> subreferences = reference.getSubreferences();
if (subreferences.isEmpty() || !(subreferences.get(0) instanceof ParameterisedSubReference)) {
return false;
}
final ParameterisedSubReference subReference = (ParameterisedSubReference) subreferences.get(0);
final ActualParameterList actualParameterList = subReference.getActualParameters();
if (actualParameterList == null) {
return false;
}
final int nofParameters = actualParameterList.getNofParameters();
for (int i = 0; i < nofParameters; i++) {
Reference parameterReference = null;
final ActualParameter actualParameter = actualParameterList.getParameter(i);
if (actualParameter instanceof Template_ActualParameter) {
TemplateInstance templateInstance = ((Template_ActualParameter) actualParameter).getTemplateInstance();
ITTCN3Template template = templateInstance.getTemplateBody();
template = template.setLoweridToReference(CompilationTimeStamp.getBaseTimestamp());
if (template.getTemplatetype() == Template_type.TEMPLATE_REFD) {
parameterReference = ((Referenced_Template) template).getReference();
}
} else if (actualParameter instanceof Referenced_ActualParameter) {
parameterReference = ((Referenced_ActualParameter) actualParameter).getReference();
}
if (parameterReference != null) {
final Assignment assignment = parameterReference.getRefdAssignment(CompilationTimeStamp.getBaseTimestamp(), false);
if (assignment == lhs) {
return true;
}
// check their parameters as well
switch(assignment.getAssignmentType()) {
case A_TEMPLATE:
case A_FUNCTION_RVAL:
case A_FUNCTION_RTEMP:
case A_EXT_FUNCTION_RVAL:
case A_EXT_FUNCTION_RTEMP:
if (checkThisTemplateParameterizedReference(parameterReference, lhs)) {
return true;
}
break;
default:
break;
}
}
}
return false;
}
use of org.eclipse.titan.designer.AST.Reference in project titan.EclipsePlug-ins by eclipse.
the class All_From_Template method checkThisTemplateGeneric.
@Override
public /**
* {@inheritDoc}
*/
boolean checkThisTemplateGeneric(final CompilationTimeStamp timestamp, final IType type, final boolean isModified, final boolean allowOmit, final boolean allowAnyOrOmit, final boolean subCheck, final boolean implicitOmit, final Assignment lhs) {
if (allFrom == null) {
ErrorReporter.INTERNAL_ERROR();
return false;
}
if (!Template_type.SPECIFIC_VALUE.equals(allFrom.getTemplatetype())) {
allFrom.getLocation().reportSemanticError(SPECIFICVALUEEXPECTED);
allFrom.setIsErroneous(true);
return false;
}
if (!((SpecificValue_Template) allFrom).isReference()) {
allFrom.getLocation().reportSemanticError(REFERENCEEXPECTED);
allFrom.setIsErroneous(true);
return false;
}
// isReference branch:
final Reference reference = ((SpecificValue_Template) allFrom).getReference();
final Assignment assignment = reference.getRefdAssignment(timestamp, true);
if (assignment == null) {
allFrom.getLocation().reportSemanticError("Assignment not found");
allFrom.setIsErroneous(true);
return false;
}
boolean selfReference = lhs == assignment;
// ES 201 873-1 - V4.7.1 B.1.2.1.a:
// The type of the template list and the member type of the template in
// the all from clause shall be
// compatible.
final IType assType = assignment.getType(timestamp);
if (assType != null) {
final IType atype = assType.getFieldType(timestamp, reference, 1, Expected_Value_type.EXPECTED_DYNAMIC_VALUE, false);
if (atype == null) {
allFrom.setIsErroneous(true);
return false;
}
final IType referredType = atype.getTypeRefdLast(timestamp);
// type of the fields of the sequence/set
IType it = null;
if (referredType != null) {
switch(referredType.getTypetype()) {
case TYPE_SEQUENCE_OF:
it = ((SequenceOf_Type) referredType).getOfType();
break;
case TYPE_SET_OF:
it = ((SetOf_Type) referredType).getOfType();
break;
case TYPE_TTCN3_SEQUENCE:
// interruptIfOptional)
break;
default:
allFrom.getLocation().reportSemanticError(LISTEXPECTED);
allFrom.setIsErroneous(true);
}
}
if (it != null) {
if (!it.isCompatible(timestamp, type, null, null, null)) {
allFrom.getLocation().reportSemanticError(MessageFormat.format(TYPEMISMATCH, type.getTypename()));
allFrom.setIsErroneous(true);
}
}
}
// ES 201 873-1 - V4.7.1 B.1.2.1.
// b) The template in the all from clause as a whole shall not resolve
// into a matching mechanism (i.e. its
// elements may contain any of the matching mechanisms or matching
// attributes with the exception of those
// described in the following restriction).
// c) Individual fields of the template in the all from clause shall not
// resolve to any of the following matching
// mechanisms: AnyElementsOrNone, permutation
ITTCN3Template body = null;
IValue value = null;
switch(assignment.getAssignmentType()) {
case A_TEMPLATE:
body = ((Def_Template) assignment).getTemplate(timestamp);
selfReference |= checkThisTemplateParameterizedReference(reference, lhs);
break;
case A_VAR_TEMPLATE:
body = ((Def_Var_Template) assignment).getInitialValue();
break;
case A_CONST:
break;
case A_MODULEPAR:
value = ((Def_ModulePar) assignment).getDefaultValue();
break;
case A_MODULEPAR_TEMPLATE:
body = ((Def_ModulePar_Template) assignment).getDefaultTemplate();
break;
case A_VAR:
value = ((Def_Var) assignment).getInitialValue();
break;
case A_FUNCTION_RVAL:
case A_FUNCTION_RTEMP:
case A_EXT_FUNCTION_RVAL:
case A_EXT_FUNCTION_RTEMP:
selfReference |= checkThisTemplateParameterizedReference(reference, lhs);
break;
default:
return selfReference;
}
if (body != null) {
switch(body.getTemplatetype()) {
case TEMPLATE_LIST:
// TODO: if "all from" is in a permutation list it anyoromit and any is permitted
if (!allowAnyOrOmit && ((Template_List) body).containsAnyornoneOrPermutation()) {
allFrom.getLocation().reportSemanticError(ANYOROMITANDPERMUTATIONPRHOHIBITED);
allFrom.setIsErroneous(true);
}
break;
case NAMED_TEMPLATE_LIST:
((Named_Template_List) body).checkSpecificValue(timestamp, true);
break;
case SPECIFIC_VALUE:
break;
default:
allFrom.getLocation().reportSemanticError(LISTEXPECTED);
allFrom.setIsErroneous(true);
return selfReference;
}
}
return selfReference;
}
Aggregations