<commit_before>/*
* generated by Xtext
*/
package com.rainerschuster.webidl.ui.outline

import com.rainerschuster.webidl.webIDL.AnyType
import com.rainerschuster.webidl.webIDL.ArrayBufferType
import com.rainerschuster.webidl.webIDL.ArrayTypeSuffix
import com.rainerschuster.webidl.webIDL.Attribute
import com.rainerschuster.webidl.webIDL.BooleanType
import com.rainerschuster.webidl.webIDL.ByteStringType
import com.rainerschuster.webidl.webIDL.ByteType
import com.rainerschuster.webidl.webIDL.CallbackRest
import com.rainerschuster.webidl.webIDL.Const
import com.rainerschuster.webidl.webIDL.DOMExceptionType
import com.rainerschuster.webidl.webIDL.DOMStringType
import com.rainerschuster.webidl.webIDL.DataViewType
import com.rainerschuster.webidl.webIDL.DateType
import com.rainerschuster.webidl.webIDL.Definition
import com.rainerschuster.webidl.webIDL.Definitions
import com.rainerschuster.webidl.webIDL.Dictionary
import com.rainerschuster.webidl.webIDL.DictionaryMember
import com.rainerschuster.webidl.webIDL.DoubleType
import com.rainerschuster.webidl.webIDL.Enum
import com.rainerschuster.webidl.webIDL.Float32ArrayType
import com.rainerschuster.webidl.webIDL.Float64ArrayType
import com.rainerschuster.webidl.webIDL.FloatType
import com.rainerschuster.webidl.webIDL.ImplementsStatement
import com.rainerschuster.webidl.webIDL.Int16ArrayType
import com.rainerschuster.webidl.webIDL.Int32ArrayType
import com.rainerschuster.webidl.webIDL.Int8ArrayType
import com.rainerschuster.webidl.webIDL.Interface
import com.rainerschuster.webidl.webIDL.Iterable_
import com.rainerschuster.webidl.webIDL.LongLongType
import com.rainerschuster.webidl.webIDL.LongType
import com.rainerschuster.webidl.webIDL.Maplike
import com.rainerschuster.webidl.webIDL.NullableTypeSuffix
import com.rainerschuster.webidl.webIDL.ObjectType
import com.rainerschuster.webidl.webIDL.OctetType
import com.rainerschuster.webidl.webIDL.Operation
import com.rainerschuster.webidl.webIDL.PartialDictionary
import com.rainerschuster.webidl.webIDL.PartialInterface
import com.rainerschuster.webidl.webIDL.PromiseType
import com.rainerschuster.webidl.webIDL.RegExpType
import com.rainerschuster.webidl.webIDL.SequenceType
import com.rainerschuster.webidl.webIDL.Setlike
import com.rainerschuster.webidl.webIDL.ShortType
import com.rainerschuster.webidl.webIDL.Type
import com.rainerschuster.webidl.webIDL.Typedef
import com.rainerschuster.webidl.webIDL.USVStringType
import com.rainerschuster.webidl.webIDL.Uint16ArrayType
import com.rainerschuster.webidl.webIDL.Uint32ArrayType
import com.rainerschuster.webidl.webIDL.Uint8ArrayType
import com.rainerschuster.webidl.webIDL.Uint8ClampedArrayType
import com.rainerschuster.webidl.webIDL.UnionType
import com.rainerschuster.webidl.webIDL.VoidType
import org.eclipse.xtext.ui.editor.outline.IOutlineNode
import org.eclipse.xtext.ui.editor.outline.impl.DefaultOutlineTreeProvider
import org.eclipse.xtext.ui.editor.outline.impl.DocumentRootNode
import com.rainerschuster.webidl.webIDL.ReturnType
import com.rainerschuster.webidl.webIDL.ReferenceType

/**
 * Customization of the default outline structure.
 *
 * see http://www.eclipse.org/Xtext/documentation.html#outline
 */
class WebIDLOutlineTreeProvider extends DefaultOutlineTreeProvider {
	
	// ExtendedDefinition

	def _createChildren(DocumentRootNode parentNode, Definitions definitions) {
		definitions.definitions.forEach[
			createNode(parentNode, it.def);
		];
	}

	// ExtendedInterfaceMember

	def _createChildren(IOutlineNode parentNode, Interface iface) {
		// name
		// inherits
		iface.interfaceMembers.forEach[
			createNode(parentNode, it.interfaceMember);
		];
	}

	def _createChildren(IOutlineNode parentNode, PartialInterface iface) {
		// interfaceName (reference)
		iface.interfaceMembers.forEach[
			createNode(parentNode, it.interfaceMember);
		];
	}

	// ExtendedDictionaryMember

	def _createChildren(IOutlineNode parentNode, Dictionary dictionary) {
		// name
		// inherits
		dictionary.dictionaryMembers.forEach[
			createNode(parentNode, it.dictionaryMember);
		];
	}

	def _createChildren(IOutlineNode parentNode, PartialDictionary dictionary) {
		// dictionaryName (reference)
		dictionary.dictionaryMembers.forEach[
			createNode(parentNode, it.dictionaryMember);
		];
	}


	def _isLeaf(Const const) {
		true
	}

	def _isLeaf(Attribute attribute) {
		true
	}

	def _isLeaf(Operation operation) {
		true
	}

	def _isLeaf(Iterable_ maplike) {
		true
	}

	def _isLeaf(Maplike maplike) {
		true
	}

	def _isLeaf(Setlike setlike) {
		true
	}

	def _isLeaf(CallbackRest callbackRest) {
		true
	}

	def _isLeaf(DictionaryMember dictionaryMember) {
		true
	}

	def _isLeaf(Typedef typedef) {
		true
	}

	// TODO Argument ?

	def _text(Typedef typedef) {
		typedef.name + ' : ' + typeName(typedef.type)
	}

	def _text(ImplementsStatement implementsStatement) {
		implementsStatement.ifaceA?.name + ' implements ' + implementsStatement.ifaceB?.name
	}

	def _text(CallbackRest callbackRest) {
		callbackRest.name + ' : ' + (typeName(callbackRest.type)?:callbackRest.type)
	}

	def _text(Const const) {
		const.name + ' : ' + (typeName(const.type)?:const.type)
	}

	// TODO Attributes etc.
	def _text(Operation operation) {
		operation.name + ' : ' + (typeName(operation.type)?:operation.type)
	}

	// TODO required, default etc.
	def _text(DictionaryMember dictionaryMember) {
		dictionaryMember.name + ' : ' + (typeName(dictionaryMember.type)?:dictionaryMember.type)
	}

	// TODO inherit, readonly etc.
	def _text(Attribute attribute) {
		attribute.name + ' : ' + (typeName(attribute.type)?:attribute.type)
	}<commit_msg>Fixed implements statement outline text to support typedef.<commit_after>/*
* generated by Xtext
*/
package com.rainerschuster.webidl.ui.outline

import com.rainerschuster.webidl.webIDL.AnyType
import com.rainerschuster.webidl.webIDL.ArrayBufferType
import com.rainerschuster.webidl.webIDL.ArrayTypeSuffix
import com.rainerschuster.webidl.webIDL.Attribute
import com.rainerschuster.webidl.webIDL.BooleanType
import com.rainerschuster.webidl.webIDL.ByteStringType
import com.rainerschuster.webidl.webIDL.ByteType
import com.rainerschuster.webidl.webIDL.CallbackRest
import com.rainerschuster.webidl.webIDL.Const
import com.rainerschuster.webidl.webIDL.DOMExceptionType
import com.rainerschuster.webidl.webIDL.DOMStringType
import com.rainerschuster.webidl.webIDL.DataViewType
import com.rainerschuster.webidl.webIDL.DateType
import com.rainerschuster.webidl.webIDL.Definition
import com.rainerschuster.webidl.webIDL.Definitions
import com.rainerschuster.webidl.webIDL.Dictionary
import com.rainerschuster.webidl.webIDL.DictionaryMember
import com.rainerschuster.webidl.webIDL.DoubleType
import com.rainerschuster.webidl.webIDL.Enum
import com.rainerschuster.webidl.webIDL.Float32ArrayType
import com.rainerschuster.webidl.webIDL.Float64ArrayType
import com.rainerschuster.webidl.webIDL.FloatType
import com.rainerschuster.webidl.webIDL.ImplementsStatement
import com.rainerschuster.webidl.webIDL.Int16ArrayType
import com.rainerschuster.webidl.webIDL.Int32ArrayType
import com.rainerschuster.webidl.webIDL.Int8ArrayType
import com.rainerschuster.webidl.webIDL.Interface
import com.rainerschuster.webidl.webIDL.Iterable_
import com.rainerschuster.webidl.webIDL.LongLongType
import com.rainerschuster.webidl.webIDL.LongType
import com.rainerschuster.webidl.webIDL.Maplike
import com.rainerschuster.webidl.webIDL.NullableTypeSuffix
import com.rainerschuster.webidl.webIDL.ObjectType
import com.rainerschuster.webidl.webIDL.OctetType
import com.rainerschuster.webidl.webIDL.Operation
import com.rainerschuster.webidl.webIDL.PartialDictionary
import com.rainerschuster.webidl.webIDL.PartialInterface
import com.rainerschuster.webidl.webIDL.PromiseType
import com.rainerschuster.webidl.webIDL.RegExpType
import com.rainerschuster.webidl.webIDL.SequenceType
import com.rainerschuster.webidl.webIDL.Setlike
import com.rainerschuster.webidl.webIDL.ShortType
import com.rainerschuster.webidl.webIDL.Type
import com.rainerschuster.webidl.webIDL.Typedef
import com.rainerschuster.webidl.webIDL.USVStringType
import com.rainerschuster.webidl.webIDL.Uint16ArrayType
import com.rainerschuster.webidl.webIDL.Uint32ArrayType
import com.rainerschuster.webidl.webIDL.Uint8ArrayType
import com.rainerschuster.webidl.webIDL.Uint8ClampedArrayType
import com.rainerschuster.webidl.webIDL.UnionType
import com.rainerschuster.webidl.webIDL.VoidType
import org.eclipse.xtext.ui.editor.outline.IOutlineNode
import org.eclipse.xtext.ui.editor.outline.impl.DefaultOutlineTreeProvider
import org.eclipse.xtext.ui.editor.outline.impl.DocumentRootNode
import com.rainerschuster.webidl.webIDL.ReturnType
import com.rainerschuster.webidl.webIDL.ReferenceType

/**
 * Customization of the default outline structure.
 *
 * see http://www.eclipse.org/Xtext/documentation.html#outline
 */
class WebIDLOutlineTreeProvider extends DefaultOutlineTreeProvider {
	
	// ExtendedDefinition

	def _createChildren(DocumentRootNode parentNode, Definitions definitions) {
		definitions.definitions.forEach[
			createNode(parentNode, it.def);
		];
	}

	// ExtendedInterfaceMember

	def _createChildren(IOutlineNode parentNode, Interface iface) {
		// name
		// inherits
		iface.interfaceMembers.forEach[
			createNode(parentNode, it.interfaceMember);
		];
	}

	def _createChildren(IOutlineNode parentNode, PartialInterface iface) {
		// interfaceName (reference)
		iface.interfaceMembers.forEach[
			createNode(parentNode, it.interfaceMember);
		];
	}

	// ExtendedDictionaryMember

	def _createChildren(IOutlineNode parentNode, Dictionary dictionary) {
		// name
		// inherits
		dictionary.dictionaryMembers.forEach[
			createNode(parentNode, it.dictionaryMember);
		];
	}

	def _createChildren(IOutlineNode parentNode, PartialDictionary dictionary) {
		// dictionaryName (reference)
		dictionary.dictionaryMembers.forEach[
			createNode(parentNode, it.dictionaryMember);
		];
	}


	def _isLeaf(Const const) {
		true
	}

	def _isLeaf(Attribute attribute) {
		true
	}

	def _isLeaf(Operation operation) {
		true
	}

	def _isLeaf(Iterable_ maplike) {
		true
	}

	def _isLeaf(Maplike maplike) {
		true
	}

	def _isLeaf(Setlike setlike) {
		true
	}

	def _isLeaf(CallbackRest callbackRest) {
		true
	}

	def _isLeaf(DictionaryMember dictionaryMember) {
		true
	}

	def _isLeaf(Typedef typedef) {
		true
	}

	// TODO Argument ?

	def _text(Typedef typedef) {
		typedef.name + ' : ' + typeName(typedef.type)
	}

	def _text(ImplementsStatement implementsStatement) {
		implementsStatement.ifaceA?.name + ' implements ' + /*implementsStatement.ifaceB?.name*/ {
			val ifaceB = implementsStatement.ifaceB;
			switch (ifaceB) {
				Interface: ifaceB.name
				Typedef: ifaceB.name
			}
		}
	}

	def _text(CallbackRest callbackRest) {
		callbackRest.name + ' : ' + (typeName(callbackRest.type)?:callbackRest.type)
	}

	def _text(Const const) {
		const.name + ' : ' + (typeName(const.type)?:const.type)
	}

	// TODO Attributes etc.
	def _text(Operation operation) {
		operation.name + ' : ' + (typeName(operation.type)?:operation.type)
	}

	// TODO required, default etc.
	def _text(DictionaryMember dictionaryMember) {
		dictionaryMember.name + ' : ' + (typeName(dictionaryMember.type)?:dictionaryMember.type)
	}

	// TODO inherit, readonly etc.
	def _text(Attribute attribute) {
		attribute.name + ' : ' + (typeName(attribute.type)?:attribute.type)
	}
{'fraction_non_alphanumeric': 0.09401859322925803, 'fraction_numerical': 0.0026311173478337133, 'mean_word_length': 5.587521663778163, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5222665', 'n_tokens_mistral': 4121, 'n_tokens_neox': 3948, 'n_words': 548}