Commit c15dab4f authored by Philip Makedonski's avatar Philip Makedonski
Browse files

+added some basic formatting support for tdlan2



Change-Id: I040bdfe2dc6803875c1ceb131efd9c0196889bb1
Signed-off-by: default avatarmakedonski <makedonski@informatik.uni-goettingen.de>
parent 1a871c4b
Loading
Loading
Loading
Loading
+184 −16
Original line number Diff line number Diff line
@@ -6,28 +6,44 @@ package org.etsi.mts.tdl.formatting2
import com.google.inject.Inject
import org.eclipse.xtext.formatting2.AbstractFormatter2
import org.eclipse.xtext.formatting2.IFormattableDocument
import org.etsi.mts.tdl.ActionReference
import org.etsi.mts.tdl.AlternativeBehaviour
import org.etsi.mts.tdl.Annotation
import org.etsi.mts.tdl.Block
import org.etsi.mts.tdl.Comment
import org.etsi.mts.tdl.DataUse
import org.etsi.mts.tdl.ComponentInstance
import org.etsi.mts.tdl.CompoundBehaviour
import org.etsi.mts.tdl.Connection
import org.etsi.mts.tdl.Element
import org.etsi.mts.tdl.ElementImport
import org.etsi.mts.tdl.Package
import org.etsi.mts.tdl.PackageableElement
import org.etsi.mts.tdl.TimeConstraint
import org.etsi.mts.tdl.TestConfiguration
import org.etsi.mts.tdl.TestDescription
import org.etsi.mts.tdl.services.TDLan2GrammarAccess
import org.etsi.mts.tdl.Message
import org.etsi.mts.tdl.Target

class TDLan2Formatter extends AbstractFormatter2 {
	
	@Inject extension TDLan2GrammarAccess

	def dispatch void format(org.etsi.mts.tdl.Package _package, extension IFormattableDocument document) {
	def dispatch void format(Package _package, extension IFormattableDocument document) {
		// TODO: format HiddenRegions around keywords, attributes, cross references, etc. 

	    interior(
       		_package.regionFor.keyword('{').append[newLine],
        	_package.regionFor.keyword('}').prepend[newLine],
        	[indent]
    	)

		for (ElementImport elementImport : _package.getImport()) {
			elementImport.format;
		}
		for (PackageableElement packageableElement : _package.getPackagedElement()) {
			packageableElement.prepend[newLine]
			packageableElement.format;
		}
		for (org.etsi.mts.tdl.Package __package : _package.getNestedPackage()) {
		for (Package __package : _package.getNestedPackage()) {
			__package.format;
		}
		for (Comment comment : _package.getComment()) {
@@ -38,22 +54,174 @@ class TDLan2Formatter extends AbstractFormatter2 {
		}
	}
	
	def dispatch void format(ActionReference actionReference, extension IFormattableDocument document) {
		// TODO: format HiddenRegions around keywords, attributes, cross references, etc. 
		for (DataUse dataUse : actionReference.getActualParameter()) {
			dataUse.format;
	def dispatch void format(PackageableElement p, extension IFormattableDocument document) {
	    p.allRegionsFor.keyword(';').append[newLine]
	    
	    interior(
       		p.regionFor.keyword('{').append[newLine],
        	p.regionFor.keyword('}').prepend[newLine],
        	[indent]
    	)
	}
		for (Comment comment : actionReference.getComment()) {
			comment.format;

	def dispatch void format(TestConfiguration e, extension IFormattableDocument document) {
	    interior(
       		e.regionFor.keyword('{').append[newLine],
        	e.regionFor.keyword('}').prepend[newLine],
        	[indent]
    	)
		for (i : e.componentInstance) {
			i.format	
		}
		for (c : e.connection) {
			c.format
		}
	}

	def dispatch void format(ComponentInstance e, extension IFormattableDocument document) {
		e.regionFor.keyword(';').append[newLine]
	}

	def dispatch void format(Connection e, extension IFormattableDocument document) {
		e.regionFor.keyword(';').append[newLine]
		for (g : e.endPoint) {
			g.regionFor.keyword('.').prepend[noSpace].append[noSpace]
		}
	}
	
	def dispatch void format(TestDescription e, extension IFormattableDocument document) {
	    interior(
       		e.regionFor.keyword('{').append[newLine],
        	e.regionFor.keyword('}').prepend[newLine].append[newLine],
        	[indent]
    	)
		e.behaviourDescription.behaviour.format

		for (c : e.getComment()) {
			c.format
		}
		for (a : e.getAnnotation()) {
			a.format
		}

	}

	def dispatch void format(CompoundBehaviour e, extension IFormattableDocument document) {
	    interior(
       		e.regionFor.keyword('{').append[newLine],
        	e.regionFor.keyword('}').prepend[newLine],
        	[indent]
    	)
		e.block.format

		for (c : e.getComment()) {
			c.format;
		}
		for (a : e.getAnnotation()) {
			a.format
		}
	}

	def dispatch void format(Message e, extension IFormattableDocument document) {
	    interior(
       		e.regionFor.keyword('{').append[newLine],
        	e.regionFor.keyword('}').prepend[newLine],
        	[indent]
    	)
		for (t : e.target) {
			t.format
		}

		for (c : e.getComment()) {
			c.format;
		}
		for (a : e.getAnnotation()) {
			a.format
		}
		for (Annotation _annotation : actionReference.getAnnotation()) {
			_annotation.format;
	}
		actionReference.getTimeLabel.format;
		for (TimeConstraint timeConstraint : actionReference.getTimeConstraint()) {
			timeConstraint.format;

	def dispatch void format(Target e, extension IFormattableDocument document) {
	    interior(
       		e.regionFor.keyword('{').append[newLine],
        	e.regionFor.keyword('}').prepend[newLine],
        	[indent]
    	)

		for (c : e.getComment()) {
			c.format;
		}
		for (a : e.getAnnotation()) {
			a.format
		}
	}


	def dispatch void format(AlternativeBehaviour e, extension IFormattableDocument document) {
	    interior(
       		e.regionFor.keyword('{').append[newLine],
        	e.regionFor.keyword('}').prepend[newLine],
        	[indent]
    	)

		for (b : e.block) {
			b.format
		}

		for (c : e.getComment()) {
			c.format;
		}
		for (a : e.getAnnotation()) {
			a.format
		}
	}


	def dispatch void format(Block e, extension IFormattableDocument document) {
	    interior(
       		e.regionFor.keyword('{').append[newLine],
        	e.regionFor.keyword('}').prepend[newLine],
        	[indent]
    	)

		for (b : e.behaviour) {
			b.append[newLine]
			b.format	
		}
	}


	def dispatch void format(Element e, extension IFormattableDocument document) {
		e.prepend[newLine]
	    
	    interior(
	       	e.regionFor.keyword('{').append[newLine],
        	e.regionFor.keyword('}').prepend[newLine],
        	[indent]
    	)

		for (c : e.getComment()) {
			c.format;
		}
		for (a : e.getAnnotation()) {
			a.format
		}

	}

	def dispatch void format(Annotation e, extension IFormattableDocument document) {
		if (e.value.isNullOrEmpty) {
			e.prepend[newLine]
		    e.regionFor.keyword(';').append[newLine]
		} else {
			e.prepend[newLine]
		    e.regionFor.keyword(';').append[newLine]
		}
	}

	def dispatch void format(Comment e, extension IFormattableDocument document) {
		e.prepend[newLine]
	}

	
	// TODO: implement for Action, AlternativeBehaviour, Annotation, AnnotationType, AnyValueOrOmit, AnyValue, ParameterBinding, Assertion, Assignment, BehaviourDescription, Block, BoundedLoopBehaviour, Break, Comment, ComponentInstance, ComponentInstanceBinding, ComponentType, CompoundBehaviour, ConditionalBehaviour, Connection, DataElementMapping, DataInstanceUse, DataResourceMapping, DefaultBehaviour, ElementImport, Function, FunctionCall, GateInstance, GateReference, GateType, InlineAction, Message, ProcedureCall, InterruptBehaviour, Member, MemberAssignment, ParameterMapping, OmitValue, ParallelBehaviour, FormalParameter, TimeLabelUse, FormalParameterUse, PeriodicBehaviour, Quiescence, SimpleDataInstance, SimpleDataType, Procedure, ProcedureParameter, Stop, StructuredDataInstance, CollectionDataInstance, StructuredDataType, Target, TestConfiguration, TestDescription, TestDescriptionReference, TestObjective, Time, TimeConstraint, TimeLabel, TimeOut, Timer, TimerStart, TimerStop, UnboundedLoopBehaviour, Variable, VariableUse, VerdictAssignment, Wait
}