RDL-Editor/com.minres.rdl.parent/com.minres.rdl.ui/src/com/minres/rdl/ui/outline/RDLOutlineTreeProvider.xtend

75 lines
2.8 KiB
Plaintext

/*
* generated by Xtext 2.14.0
*/
package com.minres.rdl.ui.outline
import com.minres.rdl.rdl.Root
import org.eclipse.xtext.ui.editor.outline.impl.DefaultOutlineTreeProvider
import org.eclipse.xtext.ui.editor.outline.impl.DocumentRootNode
import com.minres.rdl.rdl.ComponentDefinition
import org.eclipse.xtext.ui.editor.outline.IOutlineNode
import com.minres.rdl.rdl.ExplicitPropertyAssignment
import com.minres.rdl.rdl.PostPropertyAssignment
import com.minres.rdl.rdl.PropertyAssignmentRhs
import com.minres.rdl.rdl.EnumDefinition
import com.minres.rdl.rdl.EnumEntry
import com.minres.rdl.rdl.Instantiation
import com.minres.rdl.rdl.ComponentInstance
/**
* Customization of the default outline structure.
*
* See https://www.eclipse.org/Xtext/documentation/310_eclipse_support.html#outline
*/
class RDLOutlineTreeProvider extends DefaultOutlineTreeProvider {
protected def _createChildren(DocumentRootNode parentNode, Root domainModel) {
domainModel.enumDefinitions.forEach[createNode(parentNode, it)]
domainModel.propertyDefinitions.forEach[createNode(parentNode, it)]
domainModel.componentDefinitions.forEach[createNode(parentNode, it)]
domainModel.propertyAssignments.forEach[createNode(parentNode, it)]
domainModel.instantiations.forEach[Instantiation instantiation |
if(instantiation.component!==null) createNode(parentNode, instantiation.component)
instantiation.componentInstances.forEach[createNode(parentNode, it)]
]
}
protected def _createChildren(IOutlineNode parentNode, ComponentDefinition compDef) {
compDef.enumDefinitions.forEach[createNode(parentNode, it)]
compDef.componentDefinitions.forEach[createNode(parentNode, it)]
compDef.propertyAssignments.forEach[createNode(parentNode, it)]
compDef.instantiations.forEach[Instantiation instantiation |
if(instantiation.component!==null) createNode(parentNode, instantiation.component)
instantiation.componentInstances.forEach[createNode(parentNode, it)]
]
}
protected def _createChildren(IOutlineNode parentNode, EnumDefinition e) {
e.body.entries.forEach[createNode(parentNode, it)]
}
protected def _createChildren(IOutlineNode parentNode, PostPropertyAssignment p) {
createNode(parentNode, p.rhs)
}
protected def boolean _isLeaf(ExplicitPropertyAssignment feature) {
return true;
}
protected def boolean _isLeaf(Instantiation feature) {
return feature.component===null && feature.componentInstances.size==0;
}
protected def boolean _isLeaf(PropertyAssignmentRhs feature) {
return true;
}
protected def boolean _isLeaf(ComponentInstance feature) {
return true;
}
protected def boolean _isLeaf(EnumEntry feature) {
return feature.properties.size==0;
}
}