CPD Results

The following document contains the results of PMD's CPD 5.3.2.

Duplications

File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 1056
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 968
		final Collection<Type> expectedSupertypes = new ArrayList<>();
		expectedSupertypes.add(((ProductType) attr1Type).getAbstractPrototype());
		
		this.checkSupertypes(expectedSupertypes, supertypesAttr1);
		
		assertEquals(1, clssA.getSuperTypes().size());
		assertEquals(1, clssB.getSuperTypes().size());
		assertEquals(1, model.getString().getSuperTypes().size());
		assertEquals(1, model.getInteger().getSuperTypes().size());
	}
	
	/**
	 * Group:group=[A:class={Attribute1:{(name:String, alter: Integer, b:B, clss:Class),String};}; B:class=A+{};
	 * C:class=B+{}; D:class=B+{}; Class:class={};]; .
	 * 
	 * @throws Exception
	 *             Exception
	 */
	@Test
	public void testProductHierarchie3() throws Exception {
		final SimpleScannerInput input =
				new SimpleScannerInput(
						"Group:group=[A:class={Attribute1:{(name:String, alter: Integer, b:B, clss:Class),String};}; B:class=A+{}; C:class=B+{}; "
								+ "D:class=B+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final Iterator<GroupElement> iterator = model.getGroups().iterator().next().getGroupElements().iterator();
		final ClassType clssA = (ClassType) iterator.next();
		final ClassType clssB = (ClassType) iterator.next();
		iterator.next();
		iterator.next();
		final ClassType clss = (ClassType) iterator.next();
		
		final Iterator<Attribute> attrIterator = clssA.getAttributes().iterator();
		
		final Attribute attr1 = attrIterator.next();
		
		// Summe
		assertEquals(0, attr1.getAttrType().getSuperTypes().size());
		final Type attr1Type = attr1.getAttrType().getPrototype();
		final Collection<Type> supertypesAttr1 = attr1Type.getSuperTypes();
		
		Collection<Type> expectedSupertypes = new ArrayList<>();
		expectedSupertypes.add(model.getAnything().getPrototype());
		
		this.checkSupertypes(expectedSupertypes, supertypesAttr1);
		
		// Product
		final SumType sum = (SumType) attr1Type;
		final Iterator<Type> iterator2 = sum.getElements().iterator();
		iterator2.next();
		final ProductType productPrototyp = (ProductType) iterator2.next();
		
		expectedSupertypes = new ArrayList<>();
		final ProductType abstrProductCreated = ProductType.create(DummyToken.getInstance(), DummyToken.getInstance());
		ByReferenceState state = ByReferenceState.create(model.getString(), model.getString().getTypeName());
		TypeProxy typeProxy = TypeProxy.create(DummyToken.getInstance(), state);
		abstrProductCreated.addElement(ProductElementType.create("p$1", typeProxy, DummyToken.getInstance()));
		state = ByReferenceState.create(model.getInteger(), model.getInteger().getTypeName());
		typeProxy = TypeProxy.create(DummyToken.getInstance(), state);
		abstrProductCreated.addElement(ProductElementType.create("p$2", typeProxy, DummyToken.getInstance()));
		state = ByReferenceState.create(clssB, clssB.getName());
		typeProxy = TypeProxy.create(DummyToken.getInstance(), state);
		abstrProductCreated.addElement(ProductElementType.create("p$3", typeProxy, DummyToken.getInstance()));
		final ByReferenceState state2 = ByReferenceState.create(clss, clss.getName());
		final TypeProxy typeProxy2 = TypeProxy.create(DummyToken.getInstance(), state2);
		abstrProductCreated.addElement(ProductElementType.create("p$4", typeProxy2, DummyToken.getInstance()));
		expectedSupertypes.add(abstrProductCreated);
		expectedSupertypes.add(sum);
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 1132
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 1046
		assertEquals(1, model.getString().getSuperTypes().size());
		assertEquals(1, model.getInteger().getSuperTypes().size());
	}
	
	/**
	 * Group:group=[A:class={Attribute1:{(name:String, alter: Integer, b:B, clss:Class),(p1:String, p2: Integer, p3:B,
	 * p4:Class)};}; B:class=A+{}; C:class=B+{}; D:class=B+{}; Class:class={};]; .
	 * 
	 * @throws Exception
	 *             Exception
	 */
	@Test
	public void testProductHierarchie4() throws Exception {
		final SimpleScannerInput input =
				new SimpleScannerInput(
						"Group:group=[A:class={Attribute1:{(name:String, alter: Integer, b:B, clss:Class),(p1:String, p2: Integer, p3:B, p4:Class)};}; B:class=A+{}; C:class=B+{}; "
								+ "D:class=B+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final Iterator<GroupElement> iterator = model.getGroups().iterator().next().getGroupElements().iterator();
		final ClassType clssA = (ClassType) iterator.next();
		final ClassType clssB = (ClassType) iterator.next();
		iterator.next();
		iterator.next();
		final ClassType clss = (ClassType) iterator.next();
		
		final Iterator<Attribute> attrIterator = clssA.getAttributes().iterator();
		
		final Attribute attr1 = attrIterator.next();
		
		// Summe
		assertEquals(0, attr1.getAttrType().getSuperTypes().size());
		final Type attr1Type = attr1.getAttrType().getPrototype();
		final Collection<Type> supertypesAttr1 = attr1Type.getSuperTypes();
		
		Collection<Type> expectedSupertypes = new ArrayList<>();
		expectedSupertypes.add(model.getAnything().getPrototype());
		
		this.checkSupertypes(expectedSupertypes, supertypesAttr1);
		
		// Produkte
		final SumType sum = (SumType) attr1Type;
		final Iterator<Type> iterator2 = sum.getElements().iterator();
		final ProductType productPrototyp = (ProductType) iterator2.next();
		final ProductType productPrototyp2 = (ProductType) iterator2.next();
		
		expectedSupertypes = new ArrayList<>();
		final ProductType abstrProductCreated = ProductType.create(DummyToken.getInstance(), DummyToken.getInstance());
		ByReferenceState state = ByReferenceState.create(model.getString(), model.getString().getTypeName());
		TypeProxy typeProxy = TypeProxy.create(DummyToken.getInstance(), state);
		abstrProductCreated.addElement(ProductElementType.create("p$1", typeProxy, DummyToken.getInstance()));
		state = ByReferenceState.create(model.getInteger(), model.getInteger().getTypeName());
		typeProxy = TypeProxy.create(DummyToken.getInstance(), state);
		abstrProductCreated.addElement(ProductElementType.create("p$2", typeProxy, DummyToken.getInstance()));
		state = ByReferenceState.create(clssB, clssB.getName());
		typeProxy = TypeProxy.create(DummyToken.getInstance(), state);
		abstrProductCreated.addElement(ProductElementType.create("p$3", typeProxy, DummyToken.getInstance()));
		final ByReferenceState state2 = ByReferenceState.create(clss, clss.getName());
		final TypeProxy typeProxy2 = TypeProxy.create(DummyToken.getInstance(), state2);
		abstrProductCreated.addElement(ProductElementType.create("p$4", typeProxy2, DummyToken.getInstance()));
		expectedSupertypes.add(abstrProductCreated);
		expectedSupertypes.add(sum);
File Line
de/fhdw/wtf/walker/tasks/test/TestTypeReferencer.java 240
de/fhdw/wtf/walker/tasks/test/TestTypeReferencer.java 415
						+ "Class1:class = Group2>Group1>Class1 + {class21:Group2>Group1>Class1;};];];];");
		final IdentifierToken group1IdentifierToken =
				IdentifierToken.create("Group1", Position.create("", 0 + 1, 0 + 1, 0));
		final Model model = Model.create(group1IdentifierToken, null);
		
		final Name group1Name = UnqualifiedName.create(group1IdentifierToken);
		final Collection<GroupElement> group1Elements = new Vector<>();
		final Group group1 = Group.create(group1Name, group1Elements, group1IdentifierToken, null);
		model.addGroup(group1);
		final IdentifierToken group12IdentifierToken =
				IdentifierToken.create("Group2", Position.create("", 0 + 1, 0 + 1, 0));
		final Name group12Name = group1Name.addName(group12IdentifierToken);
		final Collection<GroupElement> group12Elements = new Vector<>();
		final Group group12 = Group.create(group12Name, group12Elements, group12IdentifierToken, null);
		group1Elements.add(group12);
		final IdentifierToken class121IdentifierToken =
				IdentifierToken.create("Class1", Position.create("", 0 + 1, 0 + 1, 0));
		final Name class121Name = group12Name.addName(class121IdentifierToken);
		final Collection<ClassModifier> class121Modifiers = new Vector<>();
		final Collection<Attribute> class121Attributes = new Vector<>();
		final List<Type> class121SuperTypes = new Vector<>();
		final Collection<Operation> class121Operations = new Vector<>();
		final ClassType class121 =
				RegularClassType.create(
						class121Name,
						class121Modifiers,
						class121Attributes,
						class121SuperTypes,
						class121Operations,
						new Vector<Constructor>(),
						class121IdentifierToken,
						
						new Vector<ClassType>(),
						null);
		group12Elements.add(class121);
		final IdentifierToken group2IdentifierToken =
				IdentifierToken.create("Group2", Position.create("", 0 + 1, 0 + 1, 0));
		final Name group2Name = UnqualifiedName.create(group2IdentifierToken);
		final Collection<GroupElement> group2Elements = new Vector<>();
		final Group group2 = Group.create(group2Name, group2Elements, group2IdentifierToken, null);
		model.addGroup(group2);
		final IdentifierToken class21IdentifierToken =
				IdentifierToken.create("Class1", Position.create("", 0 + 1, 0 + 1, 0));
		final Name class21Name = group2Name.addName(class21IdentifierToken);
		final Collection<ClassModifier> class21Modifiers = new Vector<>();
		final Collection<Attribute> class21Attributes = new Vector<>();
		final List<Type> class21SuperTypes = new Vector<>();
		final Collection<Operation> class21Operations = new Vector<>();
		final ClassType class21 =
				RegularClassType.create(
						class21Name,
						class21Modifiers,
						class21Attributes,
						class21SuperTypes,
						class21Operations,
						new Vector<Constructor>(),
						class21IdentifierToken,
						
						new Vector<ClassType>(),
						null);
		group2Elements.add(class21);
		final IdentifierToken group21IdentifierToken =
				IdentifierToken.create("Group1", Position.create("", 0 + 1, 0 + 1, 0));
		final Name group21Name = group2Name.addName(group21IdentifierToken);
		final Collection<GroupElement> group21Elements = new Vector<>();
		final Group group21 = Group.create(group21Name, group21Elements, group21IdentifierToken, null);
File Line
de/fhdw/wtf/parser/test/TestOperations.java 1117
de/fhdw/wtf/parser/test/TestOperations.java 1164
	public void testOperationReturnAListThatShouldBeThrown() throws Exception {
		
		final IdentifierToken myGroupToken = IdentifierToken.create("MyGroup", Position.create("", 1, 1, 1));
		final IdentifierToken myClassToken = IdentifierToken.create("MyClass", Position.create("", 1, 16, 16));
		final IdentifierToken myOperationToken = IdentifierToken.create("MyOperation", Position.create("", 1, 31, 31));
		
		this.stream.add(myGroupToken);
		this.stream.add(ColonToken.create(Position.create("", 1, 8, 8)));
		this.stream.add(GroupToken.create(Position.create("", 1, 9, 9)));
		this.stream.add(EqualToken.create(Position.create("", 1, 14, 14)));
		this.stream.add(SquareBracketOpenToken.create(Position.create("", 1, 15, 15)));
		this.stream.add(myClassToken);
		this.stream.add(ColonToken.create(Position.create("", 1, 23, 23)));
		this.stream.add(ClassToken.create(Position.create("", 1, 24, 24)));
		this.stream.add(EqualToken.create(Position.create("", 1, 29, 29)));
		this.stream.add(CurlyBracketOpenToken.create(Position.create("", 1, 30, 30)));
		this.stream.add(myOperationToken);
		this.stream.add(ColonToken.create(Position.create("", 1, 42, 42)));
		this.stream.add(DoubleSquareBracketOpenToken.create(Position.create("", 1, 43, 43)));
		this.stream.add(BracketOpenToken.create(Position.create("", 1, 45, 45)));
		this.stream.add(BracketCloseToken.create(Position.create("", 1, 46, 46)));
		this.stream.add(ArrowToken.create(Position.create("", 1, 47, 47)));
		this.stream.add(IdentifierToken.create("String", Position.create("", 1, 49, 49)));
		this.stream.add(AsteriskToken.create(Position.create("", 1, 55, 55)));
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 266
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 423
	public void testContainsInheritanceOverClassInheritanceAndSumSupertypeIsAnClass() throws Exception {
		final SimpleScannerInput input =
				new SimpleScannerInput("Group:group=[A:class={Attribute1:{String,Integer,A}; Attribute2:{B,C};}; "
						+ "B:class=A+{}; C:class=A+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final ClassType clss = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		final Iterator<Attribute> attrIterator = clss.getAttributes().iterator();
		final Attribute attr1 = attrIterator.next();
		final Attribute attr2 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		assertEquals(1, supertypesAttr1.size());
		final Iterator<Type> superTypesAttr1Iterator = supertypesAttr1.iterator();
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr1Iterator.next()));
		
		assertEquals(0, ((SumType) attr2.getAttrType()).getSuperTypes().size());
		final Collection<Type> supertypesAttr2 =
				((SumType) ((SumType) attr2.getAttrType()).getPrototype()).getSuperTypes();
		assertEquals(1, supertypesAttr2.size());
		final Iterator<Type> superTypesAttr2Iterator = supertypesAttr2.iterator();
		assertEquals(clss, HelperUtils.getReferencedType(superTypesAttr2Iterator.next()));
		
		assertEquals(1, model.getInteger().getPrototype().getSuperTypes().size());
		assertEquals(
				attr1Type,
				HelperUtils.getReferencedType(model.getInteger().getPrototype().getSuperTypes().iterator().next()));
		
		assertEquals(1, model.getString().getPrototype().getSuperTypes().size());
		assertEquals(
				attr1Type,
				HelperUtils.getReferencedType(model.getString().getPrototype().getSuperTypes().iterator().next()));
	}
	
	/**
	 * Group:group=[A:class={Attribute1:{String,Integer,A}; Attribute2:{String,C};}; B:class=A+{}; C:class=A+{};
	 * Class:class={};]; .
	 * 
	 * @throws Exception
	 *             Exception
	 */
	@Test
	public void testContainsInheritanceOverClassInheritance2() throws Exception {
File Line
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 453
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 602
		final Model model = SyntaxCheck.getInstance().getModelFromString(input);
		
		final Iterator<Type> iterator = model.getConstructorCallDependencies().keySet().iterator();
		while (iterator.hasNext()) {
			final Type current = iterator.next();
			
			switch (current.getTypeString()) {
			case "group1>A":
				assertTrue(true);
				assertEquals(0, model.getConstructorCallDependencies().get(current).size());
				break;
			case "group1>B":
				final Iterator<Type> bIterator = model.getConstructorCallDependencies().get(current).iterator();
				assertEquals("group1>A", bIterator.next().toString());
				assertEquals(1, model.getConstructorCallDependencies().get(current).size());
				break;
			case "group1>C":
				final Iterator<Type> cIterator = model.getConstructorCallDependencies().get(current).iterator();
				assertEquals("group1>A", cIterator.next().toString());
				assertEquals(1, model.getConstructorCallDependencies().get(current).size());
				break;
			case "group1>D":
				final Iterator<Type> dIterator = model.getConstructorCallDependencies().get(current).iterator();
				assertEquals("group1>A", dIterator.next().toString());
				assertEquals("group1>B", dIterator.next().toString());
				assertEquals("group1>C", dIterator.next().toString());
				assertEquals(3, model.getConstructorCallDependencies().get(current).size());
				break;
			case "group1>E":
				final Iterator<Type> eIterator = model.getConstructorCallDependencies().get(current).iterator();
				assertEquals("group1>D", eIterator.next().toString());
				assertEquals(1, model.getConstructorCallDependencies().get(current).size());
				break;
			case "group1>F":
				final Iterator<Type> fIterator = model.getConstructorCallDependencies().get(current).iterator();
				assertEquals("group1>D", fIterator.next().toString());
				assertEquals(1, model.getConstructorCallDependencies().get(current).size());
				break;
			case "group1>G":
				final Iterator<Type> gIterator = model.getConstructorCallDependencies().get(current).iterator();
				assertEquals("group1>D", gIterator.next().toString());
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 269
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 426
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 473
						+ "B:class=A+{}; C:class=A+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final ClassType clss = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		final Iterator<Attribute> attrIterator = clss.getAttributes().iterator();
		final Attribute attr1 = attrIterator.next();
		final Attribute attr2 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		assertEquals(1, supertypesAttr1.size());
		final Iterator<Type> superTypesAttr1Iterator = supertypesAttr1.iterator();
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr1Iterator.next()));
		
		assertEquals(0, ((SumType) attr2.getAttrType()).getSuperTypes().size());
		final Collection<Type> supertypesAttr2 =
				((SumType) ((SumType) attr2.getAttrType()).getPrototype()).getSuperTypes();
		assertEquals(1, supertypesAttr2.size());
		final Iterator<Type> superTypesAttr2Iterator = supertypesAttr2.iterator();
		assertEquals(clss, HelperUtils.getReferencedType(superTypesAttr2Iterator.next()));
		
		assertEquals(1, model.getInteger().getPrototype().getSuperTypes().size());
		assertEquals(
				attr1Type,
				HelperUtils.getReferencedType(model.getInteger().getPrototype().getSuperTypes().iterator().next()));
		
		assertEquals(1, model.getString().getPrototype().getSuperTypes().size());
		assertEquals(
				attr1Type,
				HelperUtils.getReferencedType(model.getString().getPrototype().getSuperTypes().iterator().next()));
	}
	
	/**
	 * Group:group=[A:class={Attribute1:{String,Integer,A}; Attribute2:{String,C};}; B:class=A+{}; C:class=A+{};
	 * Class:class={};]; .
	 * 
	 * @throws Exception
	 *             Exception
	 */
	@Test
	public void testContainsInheritanceOverClassInheritance2() throws Exception {
File Line
de/fhdw/wtf/parser/test/TestOperations.java 1067
de/fhdw/wtf/parser/test/TestOperations.java 1117
de/fhdw/wtf/parser/test/TestOperations.java 1164
de/fhdw/wtf/parser/test/TestOperations.java 1211
	public void testOperationReturnAProductThatShouldBeThrown() throws Exception {
		
		final IdentifierToken myGroupToken = IdentifierToken.create("MyGroup", Position.create("", 1, 1, 1));
		final IdentifierToken myClassToken = IdentifierToken.create("MyClass", Position.create("", 1, 16, 16));
		final IdentifierToken myOperationToken = IdentifierToken.create("MyOperation", Position.create("", 1, 31, 31));
		
		this.stream.add(myGroupToken);
		this.stream.add(ColonToken.create(Position.create("", 1, 8, 8)));
		this.stream.add(GroupToken.create(Position.create("", 1, 9, 9)));
		this.stream.add(EqualToken.create(Position.create("", 1, 14, 14)));
		this.stream.add(SquareBracketOpenToken.create(Position.create("", 1, 15, 15)));
		this.stream.add(myClassToken);
		this.stream.add(ColonToken.create(Position.create("", 1, 23, 23)));
		this.stream.add(ClassToken.create(Position.create("", 1, 24, 24)));
		this.stream.add(EqualToken.create(Position.create("", 1, 29, 29)));
		this.stream.add(CurlyBracketOpenToken.create(Position.create("", 1, 30, 30)));
		this.stream.add(myOperationToken);
		this.stream.add(ColonToken.create(Position.create("", 1, 42, 42)));
		this.stream.add(DoubleSquareBracketOpenToken.create(Position.create("", 1, 43, 43)));
		this.stream.add(BracketOpenToken.create(Position.create("", 1, 45, 45)));
		this.stream.add(BracketCloseToken.create(Position.create("", 1, 46, 46)));
		this.stream.add(ArrowToken.create(Position.create("", 1, 47, 47)));
		this.stream.add(BracketOpenToken.create(Position.create("", 1, 49, 49)));
File Line
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 58
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 200
						+ "operation : [[(parameter:Integer) -> String ]];}; ];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		Model model = null;
		model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		
		final SimpleWalkerTask doubleGroupcomponent = DoubleGroupcomponentCheck.create(model, taskmanager);
		final SimpleWalkerTask doubleAttributenameCheck = DoubleAttributenameCheck.create(model, taskmanager);
		final SimpleWalkerTask referencer = TypeReferencer.create(model, taskmanager);
		final SimpleWalkerTask prototypesTask = PrototypesTask.create(model, taskmanager);
		final SimpleWalkerTask cyclicInheritance = CyclicInheritanceCheck.create(model, taskmanager);
		final SimpleWalkerTask subtypesFillTask = SubtypesFillTask.create(model, taskmanager);
		final GroupDependencyTask doubleChecks = GroupDependencyTask.create(taskmanager);
		final SimpleWalkerTask overloadingCheck = OverloadingCheck.create(model, taskmanager);
		doubleChecks.addMembers(doubleGroupcomponent, doubleAttributenameCheck);
		referencer.addDependency(doubleChecks);
		cyclicInheritance.addDependency(referencer);
		subtypesFillTask.addDependency(cyclicInheritance);
		prototypesTask.addDependency(subtypesFillTask);
		overloadingCheck.addDependency(prototypesTask);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(7, okResult.size());
		assertEquals(1, failResult.size());
		
		final Exception exception = failResult.iterator().next().getError();
		if (exception instanceof InvalidOverloadingException) {
			final InvalidOverloadingException ex = (InvalidOverloadingException) exception;
			assertEquals(Position.create("", 1, 75, 74), ex.getStartPosition());
			assertEquals(Position.create("", 1, 122, 121), ex.getEndPos());
		} else {
			fail();
		}
	}
	
	/**
	 * Group:group=[Klasse:class={operation : [[(parameter:Klasse) -> String ]];operation : [[(parameter:Klasse) ->
	 * String ]];}; ]; .
	 * 
	 * @throws InterruptedException
	 * @throws ExecutionException
	 * @throws NoValidTokenStreamException
	 * @throws CyclicDependencyException
	 * @throws CyclicPartDefinitionException
	 */
	@Test
	public void testTwoEqualOperations2() throws InterruptedException, ExecutionException, NoValidTokenStreamException,
File Line
de/fhdw/wtf/parser/test/TestConstructors.java 853
de/fhdw/wtf/parser/test/TestConstructors.java 912
		final SimpleScannerInput input = new SimpleScannerInput("Group1:group=[A:class={s:String;();};];");
		final VerboseTokenStream output = new VerboseTokenStream(SimpleTokenStream.create());
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		
		final IdentifierToken group1IdentifierToken = IdentifierToken.create("Group1", Position.create("", 1, 1, 0));
		final IdentifierToken aIdentifierToken = IdentifierToken.create("A", Position.create("", 1, 1, 0));
		final IdentifierToken sIdentifierToken = IdentifierToken.create("s", Position.create("", 1, 1, 0));
		
		final Vector<GroupElement> group1Vector = new Vector<>();
		final Vector<Constructor> constructors = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name group1Name = UnqualifiedName.create(group1IdentifierToken);
		final Group group1 = Group.create(group1Name, group1Vector, group1IdentifierToken);
		
		final Name aName = group1Name.addName(aIdentifierToken);
		final ClassType aClass =
				RegularClassType.create(
						aName,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						constructors,
						aIdentifierToken,
						
						new Vector<ClassType>());
		group1Vector.add(aClass);
		
		final ByNameState attributeStringReferenceState =
				ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		
		final TypeProxy stringType = TypeProxy.create(this.stringIdentifier, attributeStringReferenceState);
		
		attributes.add(Attribute.create("s", stringType, new Vector<AttributeModifier>(), sIdentifierToken));
		
		final ProductType aProduct = ProductType.create(this.bracketOpenToken);
		
		constructors.add(Constructor.create(aProduct, aClass, new Vector<ConstructorReference>(), aIdentifierToken));
		
		final Model expected = Model.create(group1IdentifierToken);
		expected.addGroup(group1);
		
		this.parser = Parser.create(output);
		final Model actual = this.parser.parse();
		
		assertEquals(0, this.parser.getExceptions().size());
		assertEquals(expected, actual);
	}
	
	/**
	 * Group1:group=[A:class={();s:String;};];.
	 * 
	 * @throws Exception
	 *             {@link de.fhdw.wtf.common.exception.parser.NoValidTokenStreamException}
	 */
	@Test
	public void testFirstConstructorThanVariable() throws Exception {
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 1489
de/fhdw/wtf/parser/test/TestAttributes.java 1580
	public void testAttributeWithListOfMapAndProductAsKey() throws Exception {
		final IdentifierToken groupIdentifier = IdentifierToken.create("Group", Position.create("", 1, 1, 0));
		final IdentifierToken classIdentifier = IdentifierToken.create("Class", Position.create("", 1, 1, 0));
		final IdentifierToken attributeIdentifier = IdentifierToken.create("Attribute", Position.create("", 1, 1, 0));
		final IdentifierToken nameIdentifier = IdentifierToken.create("name", Position.create("", 1, 1, 0));
		final IdentifierToken countIdentifier = IdentifierToken.create("count", Position.create("", 1, 1, 0));
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(nameIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.stringIdentifier);
		this.stream.add(this.commaToken);
		this.stream.add(countIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.integerIdentifier);
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.arrowToken);
		this.stream.add(this.integerIdentifier);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.asteriskToken);
		this.stream.add(this.semicolonToken);
File Line
de/fhdw/wtf/parser/test/TestConstructors.java 1181
de/fhdw/wtf/parser/test/TestConstructors.java 1253
				new SimpleScannerInput("Group1:group=[A:class={op:[[(s:String)->{}]];();s:String;};];");
		final VerboseTokenStream output = new VerboseTokenStream(SimpleTokenStream.create());
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		
		final IdentifierToken group1IdentifierToken = IdentifierToken.create("Group1", Position.create("", 1, 1, 0));
		final IdentifierToken aIdentifierToken = IdentifierToken.create("A", Position.create("", 1, 1, 0));
		final IdentifierToken sIdentifierToken = IdentifierToken.create("s", Position.create("", 1, 1, 1));
		final IdentifierToken op = IdentifierToken.create("op", Position.create("", 1, 1, 0));
		
		final Vector<GroupElement> group1Vector = new Vector<>();
		final Vector<Constructor> constructors = new Vector<>();
		final Vector<Operation> operations = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name group1Name = UnqualifiedName.create(group1IdentifierToken);
		final Group group1 = Group.create(group1Name, group1Vector, group1IdentifierToken);
		
		final Name aName = group1Name.addName(aIdentifierToken);
		final ClassType aClass =
				RegularClassType.create(
						aName,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						operations,
						constructors,
						aIdentifierToken,
						
						new Vector<ClassType>());
		group1Vector.add(aClass);
		
		final ProductType aProduct = ProductType.create(this.bracketOpenToken);
		final ProductType sProduct = ProductType.create(this.bracketOpenToken);
		
		final ByNameState attributeStringReferenceState =
				ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final TypeProxy stringType = TypeProxy.create(this.stringIdentifier, attributeStringReferenceState);
		
		attributes.add(Attribute.create("s", stringType, new Vector<AttributeModifier>(), sIdentifierToken));
		sProduct.addElement(ProductElementType.create("s", stringType, sIdentifierToken));
		constructors.add(Constructor.create(aProduct, aClass, new Vector<ConstructorReference>(), aIdentifierToken));
		
		final Operation operation1 =
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 750
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 842
	public void testTransitiveInheritanceAndSumSupertypeIsClass() throws Exception {
		final SimpleScannerInput input =
				new SimpleScannerInput("Group:group=[A:class={Attribute1:{C,D};}; B:class=A+{}; C:class=B+{}; "
						+ "D:class=B+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final Iterator<GroupElement> iterator = model.getGroups().iterator().next().getGroupElements().iterator();
		final ClassType clssA = (ClassType) iterator.next();
		final ClassType clssB = (ClassType) iterator.next();
		
		final Iterator<Attribute> attrIterator = clssA.getAttributes().iterator();
		
		final Attribute attr1 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		assertEquals(1, supertypesAttr1.size());
		final Iterator<Type> superTypesAttr1Iterator = supertypesAttr1.iterator();
		assertEquals(clssB, HelperUtils.getReferencedType(superTypesAttr1Iterator.next()));
		
		assertEquals(1, model.getInteger().getPrototype().getSuperTypes().size());
		assertEquals(
				model.getAnything().getPrototype(),
				HelperUtils.getReferencedType(model.getInteger().getPrototype().getSuperTypes().iterator().next()));
		
		assertEquals(1, model.getString().getPrototype().getSuperTypes().size());
		assertEquals(
				model.getAnything().getPrototype(),
				HelperUtils.getReferencedType(model.getString().getPrototype().getSuperTypes().iterator().next()));
	}
	
	/**
	 * Group:group=[A:class={Attribute1:{B,C}; Attribute2:{D,E,F,G};}; B:class=A+{}; C:class=A+{}; D:class=B+{};
	 * E:class=B+{}; F:class=C+{}; G:class=C+{}; Class:class={};]; .
	 * 
	 * @throws Exception
	 *             Exception
	 */
	@Test
	public void testTransitiveInheritanceAndSumSupertypeIsClass2() throws Exception {
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 1288
de/fhdw/wtf/parser/test/TestAttributes.java 1489
de/fhdw/wtf/parser/test/TestAttributes.java 1580
	public void testAttributeWithMapOnProductAsKey() throws Exception {
		final IdentifierToken groupIdentifier = IdentifierToken.create("Group", Position.create("", 1, 1, 0));
		final IdentifierToken classIdentifier = IdentifierToken.create("Class", Position.create("", 1, 1, 0));
		final IdentifierToken attributeIdentifier = IdentifierToken.create("Attribute", Position.create("", 1, 1, 0));
		final IdentifierToken nameIdentifier = IdentifierToken.create("name", Position.create("", 1, 1, 0));
		final IdentifierToken countIdentifier = IdentifierToken.create("count", Position.create("", 1, 1, 0));
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(nameIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.stringIdentifier);
		this.stream.add(this.commaToken);
		this.stream.add(countIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.integerIdentifier);
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.arrowToken);
		this.stream.add(this.integerIdentifier);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
File Line
de/fhdw/wtf/parser/testWithScanner/TestParserScanner.java 217
de/fhdw/wtf/parser/testWithScanner/TestParserScanner.java 299
						"group1 : group = [ class1 : class = {op : [[(param1:Integer, param2:{Integer,String})->test]] abstract;} service transient;];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Operation> operations = new Vector<>();
		final Vector<ClassModifier> modifiers = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, GroupToken.create(Position.create("", 1, 1, 0)));
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType clazz =
				RegularClassType.create(
						className,
						modifiers,
						new Vector<Attribute>(),
						new Vector<Type>(),
						operations,
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ProductType product = ProductType.create(this.bracketOpenToken);
		final ByNameState integerByName = ByNameState.create(UnqualifiedName.create(integerIdentifier));
		final TypeProxy typeProxyInteger = TypeProxy.create(param1Identifier, integerByName);
		final ProductElementType productElement1 =
				ProductElementType.create("param1", typeProxyInteger, param1Identifier);
		
		final ByNameState stringByName = ByNameState.create(UnqualifiedName.create(stringIdentifier));
		final TypeProxy typeProxyString = TypeProxy.create(param2Identifier, stringByName);
		
		final SumType sum = SumType.create(this.curlyBracketOpenToken);
		sum.add(typeProxyInteger);
		sum.add(typeProxyString);
		
		final ProductElementType productElement2 = ProductElementType.create("param2", sum, param2Identifier);
		
		product.addElement(productElement1);
		product.addElement(productElement2);
		
		final ByNameState testByName = ByNameState.create(UnqualifiedName.create(test));
		final TypeProxy testTypeProxy = TypeProxy.create(test, testByName);
		
		final Vector<OperationModifier> operationModifiers = new Vector<>();
		operationModifiers.add(OperationModifierAbstract.create(this.abstractToken));
		
		final Operation operation = Operation.create("op", operationModifiers, product, clazz, testTypeProxy, op);
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 281
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 439
						+ "B:class=A+{}; C:class=A+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final ClassType clss = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		final Iterator<Attribute> attrIterator = clss.getAttributes().iterator();
		final Attribute attr1 = attrIterator.next();
		final Attribute attr2 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		assertEquals(1, supertypesAttr1.size());
		final Iterator<Type> superTypesAttr1Iterator = supertypesAttr1.iterator();
		final Type supertype = superTypesAttr1Iterator.next();
		final ByReferenceState state =
				ByReferenceState.create(
						model.getAnything().getPrototype(),
						UnqualifiedName.create(IdentifierToken.create(
								BaseTypeConstants.ANYTHING_CONSTANT,
								DummyToken.getDummyPosition())));
		final TypeProxy typeProxy = TypeProxy.create(DummyToken.getInstance(), state, DummyToken.getInstance());
		assertEquals(typeProxy, supertype);
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(supertype));
		
		assertEquals(0, ((SumType) attr2.getAttrType()).getSuperTypes().size());
		final Collection<Type> supertypesAttr2 =
				((SumType) ((SumType) attr2.getAttrType()).getPrototype()).getSuperTypes();
		
		final Collection<Type> expectedSupertypes = new ArrayList<>();
		expectedSupertypes.add(attr1Type);
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 333
de/fhdw/wtf/parser/test/TestExceptions.java 446
de/fhdw/wtf/parser/test/TestExceptions.java 777
	public void testOperationModifierAlreadyAddedException() {
		this.stream = SimpleTokenStream.create();
		this.parser = Parser.create(this.stream);
		final IdentifierToken myGroup = IdentifierToken.create("MyGroup", Position.create("", 1, 1, 0));
		final IdentifierToken myClass = IdentifierToken.create("MyClass", Position.create("", 1, 1, 0));
		final IdentifierToken myOperation = IdentifierToken.create("MyOperation", Position.create("", 1, 1, 0));
		final IdentifierToken myParameter = IdentifierToken.create("MyParameter", Position.create("", 1, 1, 0));
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myOperation);
		this.stream.add(this.colonToken);
		this.stream.add(this.doubleSquareBracketOpenToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(myParameter);
		this.stream.add(this.colonToken);
		this.stream.add(string);
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.arrowToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.doubleSquareBracketCloseToken);
		this.stream.add(this.abstractToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 58
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 129
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 200
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 272
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 344
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 414
						+ "operation : [[(parameter:Integer) -> String ]];}; ];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		Model model = null;
		model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		
		final SimpleWalkerTask doubleGroupcomponent = DoubleGroupcomponentCheck.create(model, taskmanager);
		final SimpleWalkerTask doubleAttributenameCheck = DoubleAttributenameCheck.create(model, taskmanager);
		final SimpleWalkerTask referencer = TypeReferencer.create(model, taskmanager);
		final SimpleWalkerTask prototypesTask = PrototypesTask.create(model, taskmanager);
		final SimpleWalkerTask cyclicInheritance = CyclicInheritanceCheck.create(model, taskmanager);
		final SimpleWalkerTask subtypesFillTask = SubtypesFillTask.create(model, taskmanager);
		final GroupDependencyTask doubleChecks = GroupDependencyTask.create(taskmanager);
		final SimpleWalkerTask overloadingCheck = OverloadingCheck.create(model, taskmanager);
		doubleChecks.addMembers(doubleGroupcomponent, doubleAttributenameCheck);
		referencer.addDependency(doubleChecks);
		cyclicInheritance.addDependency(referencer);
		subtypesFillTask.addDependency(cyclicInheritance);
		prototypesTask.addDependency(subtypesFillTask);
		overloadingCheck.addDependency(prototypesTask);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(7, okResult.size());
		assertEquals(1, failResult.size());
		
		final Exception exception = failResult.iterator().next().getError();
		if (exception instanceof InvalidOverloadingException) {
			final InvalidOverloadingException ex = (InvalidOverloadingException) exception;
			assertEquals(Position.create("", 1, 75, 74), ex.getStartPosition());
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 333
de/fhdw/wtf/parser/test/TestExceptions.java 446
de/fhdw/wtf/parser/test/TestExceptions.java 777
de/fhdw/wtf/parser/test/TestExceptions.java 1058
	public void testOperationModifierAlreadyAddedException() {
		this.stream = SimpleTokenStream.create();
		this.parser = Parser.create(this.stream);
		final IdentifierToken myGroup = IdentifierToken.create("MyGroup", Position.create("", 1, 1, 0));
		final IdentifierToken myClass = IdentifierToken.create("MyClass", Position.create("", 1, 1, 0));
		final IdentifierToken myOperation = IdentifierToken.create("MyOperation", Position.create("", 1, 1, 0));
		final IdentifierToken myParameter = IdentifierToken.create("MyParameter", Position.create("", 1, 1, 0));
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myOperation);
		this.stream.add(this.colonToken);
		this.stream.add(this.doubleSquareBracketOpenToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(myParameter);
		this.stream.add(this.colonToken);
		this.stream.add(string);
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.arrowToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.doubleSquareBracketCloseToken);
File Line
de/fhdw/wtf/parser/test/TestOperations.java 852
de/fhdw/wtf/parser/test/TestOperations.java 964
de/fhdw/wtf/parser/test/TestOperations.java 1071
de/fhdw/wtf/parser/test/TestOperations.java 1121
de/fhdw/wtf/parser/test/TestOperations.java 1168
de/fhdw/wtf/parser/test/TestOperations.java 1215
				IdentifierToken.create("TestException", Position.create("", 1, 68, 68));
		
		this.stream.add(myGroupToken);
		this.stream.add(ColonToken.create(Position.create("", 1, 8, 8)));
		this.stream.add(GroupToken.create(Position.create("", 1, 9, 9)));
		this.stream.add(EqualToken.create(Position.create("", 1, 14, 14)));
		this.stream.add(SquareBracketOpenToken.create(Position.create("", 1, 15, 15)));
		this.stream.add(myClassToken);
		this.stream.add(ColonToken.create(Position.create("", 1, 23, 23)));
		this.stream.add(ClassToken.create(Position.create("", 1, 24, 24)));
		this.stream.add(EqualToken.create(Position.create("", 1, 29, 29)));
		this.stream.add(CurlyBracketOpenToken.create(Position.create("", 1, 30, 30)));
		this.stream.add(myOperationToken);
		this.stream.add(ColonToken.create(Position.create("", 1, 42, 42)));
		this.stream.add(DoubleSquareBracketOpenToken.create(Position.create("", 1, 43, 43)));
		this.stream.add(BracketOpenToken.create(Position.create("", 1, 45, 45)));
		this.stream.add(BracketCloseToken.create(Position.create("", 1, 46, 46)));
		this.stream.add(ArrowToken.create(Position.create("", 1, 47, 47)));
		this.stream.add(testExceptionReferenceToken);
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 780
de/fhdw/wtf/parser/test/TestOperations.java 274
		final IdentifierToken myGroup = IdentifierToken.create("MyGroup", Position.create("", 1, 1, 0));
		final IdentifierToken myClass = IdentifierToken.create("MyClass", Position.create("", 1, 1, 0));
		final IdentifierToken myOperation = IdentifierToken.create("MyOperation", Position.create("", 1, 1, 0));
		final IdentifierToken myParameter = IdentifierToken.create("MyParameter", Position.create("", 1, 1, 0));
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myOperation);
		this.stream.add(this.colonToken);
		this.stream.add(this.doubleSquareBracketOpenToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(myParameter);
		this.stream.add(this.colonToken);
		this.stream.add(string);
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.arrowToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.doubleSquareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.semicolonToken);
File Line
de/fhdw/wtf/parser/test/TestConstructors.java 1503
de/fhdw/wtf/parser/test/TestConstructors.java 1590
		final IdentifierToken s2aIdentifierToken = IdentifierToken.create("S2A", Position.create("", 1, 1, 0));
		
		final Vector<GroupElement> group1Vector = new Vector<>();
		final Vector<Constructor> constructors = new Vector<>();
		
		final Name group1Name = UnqualifiedName.create(group1IdentifierToken);
		final Group group1 = Group.create(group1Name, group1Vector, group1IdentifierToken);
		
		final Name aName = group1Name.addName(aIdentifierToken);
		final Name s1aName = group1Name.addName(s1aIdentifierToken);
		final Name s2aName = group1Name.addName(s2aIdentifierToken);
		
		final Vector<Type> supertypes = new Vector<>();
		supertypes.add(TypeProxy.create(null, ByNameState.create(UnqualifiedName.create(s1aIdentifierToken))));
		supertypes.add(TypeProxy.create(null, ByNameState.create(UnqualifiedName.create(s2aIdentifierToken))));
		
		final ClassType s1aClass =
				RegularClassType.create(
						s1aName,
						new Vector<ClassModifier>(),
						new Vector<Attribute>(),
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						s1aIdentifierToken,
						
						new Vector<ClassType>());
		
		final ClassType s2aClass =
				RegularClassType.create(
						s2aName,
						new Vector<ClassModifier>(),
						new Vector<Attribute>(),
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						s2aIdentifierToken,
						
						new Vector<ClassType>());
		
		final ClassType aClass =
				RegularClassType.create(
						aName,
						new Vector<ClassModifier>(),
						new Vector<Attribute>(),
						supertypes,
						new Vector<Operation>(),
						constructors,
						aIdentifierToken,
						
						new Vector<ClassType>());
		group1Vector.add(s1aClass);
		group1Vector.add(s2aClass);
		group1Vector.add(aClass);
		
		final ProductType aProduct = ProductType.create(this.bracketOpenToken);
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 1288
de/fhdw/wtf/parser/test/TestAttributes.java 1489
de/fhdw/wtf/parser/test/TestAttributes.java 1580
de/fhdw/wtf/parser/test/TestAttributes.java 1767
	public void testAttributeWithMapOnProductAsKey() throws Exception {
		final IdentifierToken groupIdentifier = IdentifierToken.create("Group", Position.create("", 1, 1, 0));
		final IdentifierToken classIdentifier = IdentifierToken.create("Class", Position.create("", 1, 1, 0));
		final IdentifierToken attributeIdentifier = IdentifierToken.create("Attribute", Position.create("", 1, 1, 0));
		final IdentifierToken nameIdentifier = IdentifierToken.create("name", Position.create("", 1, 1, 0));
		final IdentifierToken countIdentifier = IdentifierToken.create("count", Position.create("", 1, 1, 0));
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(nameIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.stringIdentifier);
		this.stream.add(this.commaToken);
		this.stream.add(countIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.integerIdentifier);
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.arrowToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 222
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 316
						+ "Attribute2:{String,Integer};};" + "Class2:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final ClassType clss = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		final Iterator<Attribute> attrIterator = clss.getAttributes().iterator();
		final Attribute attr1 = attrIterator.next();
		final Attribute attr2 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		assertEquals(1, supertypesAttr1.size());
		final Iterator<Type> superTypesAttr1Iterator = supertypesAttr1.iterator();
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr1Iterator.next()));
		
		assertEquals(0, ((SumType) attr2.getAttrType()).getSuperTypes().size());
		final Collection<Type> supertypesAttr2 =
				((SumType) ((SumType) attr2.getAttrType()).getPrototype()).getSuperTypes();
		assertEquals(1, supertypesAttr2.size());
		final Iterator<Type> superTypesAttr2Iterator = supertypesAttr2.iterator();
		assertEquals(attr1Type, superTypesAttr2Iterator.next());
		
		assertEquals(1, model.getInteger().getPrototype().getSuperTypes().size());
		assertEquals(
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 2479
de/fhdw/wtf/parser/test/TestAttributes.java 2571
		this.stream.add(trueIdentifier);
		this.stream.add(this.commaToken);
		this.stream.add(falseIdentifier);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(EndToken.create(Position.create("", 1, 1, 0)));
		
		final Model model = Model.create(groupIdentifier);
		final Vector<GroupElement> groupVector = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		model.addGroup(group);
		
		final Name className = groupName.addName(classIdentifier);
		final Collection<Attribute> attributes = new Vector<>();
		final ClassType clazz =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		groupVector.add(clazz);
		
		final ByNameState stringByName = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final TypeProxy typeProxyString = TypeProxy.create(groupIdentifier, stringByName);
		
		final ByNameState trueByName = ByNameState.create(UnqualifiedName.create(trueIdentifier));
		final TypeProxy typeProxyTrue = TypeProxy.create(groupIdentifier, trueByName);
		
		final ByNameState falseByName = ByNameState.create(UnqualifiedName.create(falseIdentifier));
		final TypeProxy typeProxyFalse = TypeProxy.create(groupIdentifier, falseByName);
		
		final ListType list = ListType.create(this.stringIdentifier, typeProxyString);
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 336
de/fhdw/wtf/parser/test/TestExceptions.java 449
de/fhdw/wtf/parser/test/TestOperations.java 274
		final IdentifierToken myGroup = IdentifierToken.create("MyGroup", Position.create("", 1, 1, 0));
		final IdentifierToken myClass = IdentifierToken.create("MyClass", Position.create("", 1, 1, 0));
		final IdentifierToken myOperation = IdentifierToken.create("MyOperation", Position.create("", 1, 1, 0));
		final IdentifierToken myParameter = IdentifierToken.create("MyParameter", Position.create("", 1, 1, 0));
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myOperation);
		this.stream.add(this.colonToken);
		this.stream.add(this.doubleSquareBracketOpenToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(myParameter);
		this.stream.add(this.colonToken);
		this.stream.add(string);
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.arrowToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.doubleSquareBracketCloseToken);
		this.stream.add(this.abstractToken);
File Line
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 55
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 123
		final Model model = SyntaxCheck.getInstance().getModelFromString(input);
		final Group group = model.getGroups().iterator().next();
		final ClassType klasse = (ClassType) group.getGroupElements().iterator().next();
		final SumType sum = (SumType) klasse.getAttributes().iterator().next().getAttrType();
		
		final List<Type> standardizeElements = sum.standardize().accept(new TypeVisitorReturn<List<Type>>() {
			
			@Override
			public List<Type> handle(final AtomicType atomicType) {
				return new ArrayList<>();
			}
			
			@Override
			public List<Type> handle(final CompositeType compositeType) {
				return compositeType.accept(new CompositeTypeVisitorReturn<List<Type>>() {
					
					@Override
					public List<Type> handle(final ListType list) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final MapType map) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final ProductType product) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final SumType sum2) {
						return sum2.getElements();
					}
					
					@Override
					public List<Type> handle(final ThrownType thrownType) {
						return new ArrayList<>();
					}
				});
			}
			
			@Override
			public List<Type> handle(final TypeProxy typeProxy) {
				return new ArrayList<>();
			}
		});
		
		assertEquals(1, standardizeElements.size());
		assertEquals(sum.getElements().iterator().next(), standardizeElements.iterator().next());
	}
	
	/**
	 * A > B, A > C und C > D. {A,B,C,D} => {A}
	 * 
	 * @throws Exception
	 *             {@link de.fhdw.wtf.common.exception.parser.SumIsAnythingException},
	 *             {@link de.fhdw.wtf.common.exception.editor.MultipleCheckExceptions},
	 *             {@link de.fhdw.wtf.common.exception.walker.CyclicDependencyException}, {@link InterruptedException},
	 *             {@link de.fhdw.wtf.common.exception.walker.CyclicPartDefinitionException},
	 *             {@link java.util.concurrent.ExecutionException}
	 */
	@Test
	public void testClass2() throws Exception {
File Line
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1691
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1776
				TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(b)))));
		
		final List<Type> standardizeElements = actualSum.standardize().accept(new TypeVisitorReturn<List<Type>>() {
			
			@Override
			public List<Type> handle(final AtomicType atomicType) {
				return new ArrayList<>();
			}
			
			@Override
			public List<Type> handle(final CompositeType compositeType) {
				return compositeType.accept(new CompositeTypeVisitorReturn<List<Type>>() {
					
					@Override
					public List<Type> handle(final ListType list) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final MapType map) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final ProductType product) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final SumType sum2) {
						return sum2.getElements();
					}
					
					@Override
					public List<Type> handle(final ThrownType thrownType) {
						return new ArrayList<>();
					}
				});
			}
			
			@Override
			public List<Type> handle(final TypeProxy typeProxy) {
				return new ArrayList<>();
			}
		});
		
		// Prepare Expected
		final SumType expectedSum = SumType.create(dummyToken);
		expectedSum.add(ThrownType.create(
				dummyToken,
				TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(a)))));
		expectedSum.add(ThrownType.create(
				dummyToken,
				TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(b)))));
		
		// Test
		assertEquals(2, standardizeElements.size());
		assertEquals(2, expectedSum.getElements().size());
		this.assertEqualsOnlists(standardizeElements, expectedSum.getElements());
	}
	
	/**
	 * {A!,B!,A!} => Result: {A!,B!}.
	 * 
	 * @throws SumIsAnythingException
	 *             If it contains Anything throw specified Exception
	 */
	@Test
	public void testDoubleThrownElements() throws SumIsAnythingException {
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 1519
de/fhdw/wtf/parser/test/TestAttributes.java 1611
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.asteriskToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType classModel =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState stringReferenceState = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final TypeProxy stringType = TypeProxy.create(this.stringIdentifier, stringReferenceState);
		final ByNameState integerReferenceState = ByNameState.create(UnqualifiedName.create(this.integerIdentifier));
		final TypeProxy integerType = TypeProxy.create(this.integerIdentifier, integerReferenceState);
		
		final ProductElementType nameElement = ProductElementType.create("name", stringType, nameIdentifier);
		final ProductElementType countElement = ProductElementType.create("count", integerType, countIdentifier);
		final ProductType product = ProductType.create(this.bracketOpenToken);
		product.addElement(nameElement);
		product.addElement(countElement);
		
		final MapType map = MapType.create(this.bracketOpenToken, product, integerType);
		final ListType list = ListType.create(this.bracketOpenToken, map);
		
		final Attribute attribute =
File Line
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 453
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 523
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 602
		final Model model = SyntaxCheck.getInstance().getModelFromString(input);
		
		final Iterator<Type> iterator = model.getConstructorCallDependencies().keySet().iterator();
		while (iterator.hasNext()) {
			final Type current = iterator.next();
			
			switch (current.getTypeString()) {
			case "group1>A":
				assertTrue(true);
				assertEquals(0, model.getConstructorCallDependencies().get(current).size());
				break;
			case "group1>B":
				final Iterator<Type> bIterator = model.getConstructorCallDependencies().get(current).iterator();
				assertEquals("group1>A", bIterator.next().toString());
				assertEquals(1, model.getConstructorCallDependencies().get(current).size());
				break;
			case "group1>C":
				final Iterator<Type> cIterator = model.getConstructorCallDependencies().get(current).iterator();
				assertEquals("group1>A", cIterator.next().toString());
				assertEquals(1, model.getConstructorCallDependencies().get(current).size());
				break;
			case "group1>D":
				final Iterator<Type> dIterator = model.getConstructorCallDependencies().get(current).iterator();
				assertEquals("group1>A", dIterator.next().toString());
				assertEquals("group1>B", dIterator.next().toString());
				assertEquals("group1>C", dIterator.next().toString());
				assertEquals(3, model.getConstructorCallDependencies().get(current).size());
				break;
			case "group1>E":
				final Iterator<Type> eIterator = model.getConstructorCallDependencies().get(current).iterator();
				assertEquals("group1>D", eIterator.next().toString());
				assertEquals(1, model.getConstructorCallDependencies().get(current).size());
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 164
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 136
				HelperUtils.getReferencedType(model.getString().getPrototype().getSuperTypes().iterator().next()));
	}
	
	/**
	 * Group:group=[Class:class={Attribute1:{String,Integer}; Attribute2:{String};};]; .
	 * 
	 * @throws Exception
	 *             Exception
	 */
	@Test
	public void testNormalContainsInheritance() throws Exception {
		final SimpleScannerInput input =
				new SimpleScannerInput("Group:group=[Class:class={Attribute1:{String,Integer,Class}; "
						+ "Attribute2:{String,Integer};};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final ClassType clss = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		final Iterator<Attribute> attrIterator = clss.getAttributes().iterator();
		final Attribute attr1 = attrIterator.next();
		final Attribute attr2 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		assertTrue(attr1Type == model.getAnything().getPrototype());
		assertEquals(0, supertypesAttr1.size());
		
		assertEquals(0, ((SumType) attr2.getAttrType()).getSuperTypes().size());
		final Collection<Type> supertypesAttr2 =
				((SumType) ((SumType) attr2.getAttrType()).getPrototype()).getSuperTypes();
		assertEquals(1, supertypesAttr2.size());
		final Iterator<Type> superTypesAttr2Iterator = supertypesAttr2.iterator();
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr2Iterator.next()));
		
		assertEquals(1, model.getInteger().getPrototype().getSuperTypes().size());
File Line
de/fhdw/wtf/tooling/test/SyntaxCheckTest.java 57
de/fhdw/wtf/tooling/test/SyntaxCheckTest.java 131
		final Model model = instance.getModelFromString(input);
		
		// -- should be one group --//
		final Collection<Group> groups = model.getGroups();
		assertEquals(1, groups.size());
		
		// -- should be three groupElements --//
		final Group group1 = groups.iterator().next();
		final Collection<GroupElement> groupElements = group1.getGroupElements();
		assertEquals(3, groupElements.size());
		final Iterator<GroupElement> iterator = groupElements.iterator();
		
		// -- first groupElement should have one attribute --//
		iterator.next().accept(new GroupElementVisitor() {
			
			@Override
			public void handle(final Group group) {
				fail();
			}
			
			@Override
			public void handle(final ClassType clss) {
				assertEquals(1, clss.getAttributes().size());
				assertEquals(0, clss.getOperations().size());
				assertEquals(1, clss.getModifiers().size());
			}
		});
		
		// -- second groupElement should have no attribute --//
		iterator.next().accept(new GroupElementVisitor() {
			
			@Override
			public void handle(final Group group) {
				fail();
			}
			
			@Override
			public void handle(final ClassType clss) {
				assertEquals(0, clss.getAttributes().size());
				assertEquals(0, clss.getOperations().size());
				assertEquals(0, clss.getModifiers().size());
			}
		});
		
		// -- third groupElement should have one attribute --//
		iterator.next().accept(new GroupElementVisitor() {
			
			@Override
			public void handle(final Group group) {
				fail();
			}
			
			@Override
			public void handle(final ClassType clss) {
				assertEquals(1, clss.getAttributes().size());
				assertEquals(0, clss.getOperations().size());
				assertEquals(0, clss.getModifiers().size());
			}
		});
	}
	
	/**
	 * Tests the scanning, parsing, referencing and checks of a model-file.
	 * 
	 * @throws Exception
	 *             {@link java.io.FileNotFoundException}, {@link java.io.IOException}, {@link MultipleCheckExceptions},
	 *             {@link de.fhdw.wtf.common.exception.walker.CyclicDependencyException}, {@link InterruptedException},
	 *             {@link de.fhdw.wtf.common.exception.walker.CyclicPartDefinitionException},
	 *             {@link java.util.concurrent.ExecutionException}
	 */
	@Test
	public void testSimpleModelFromFile() throws Exception {
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 1061
de/fhdw/wtf/parser/test/TestOperations.java 274
		final IdentifierToken myGroup = IdentifierToken.create("MyGroup", Position.create("", 1, 1, 0));
		final IdentifierToken myClass = IdentifierToken.create("MyClass", Position.create("", 1, 1, 0));
		final IdentifierToken myOperation = IdentifierToken.create("MyOperation", Position.create("", 1, 1, 0));
		final IdentifierToken myParameter = IdentifierToken.create("MyParameter", Position.create("", 1, 1, 0));
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myOperation);
		this.stream.add(this.colonToken);
		this.stream.add(this.doubleSquareBracketOpenToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(myParameter);
		this.stream.add(this.colonToken);
		this.stream.add(string);
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.arrowToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 349
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 320
				HelperUtils.getReferencedType(model.getString().getPrototype().getSuperTypes().iterator().next()));
	}
	
	/**
	 * Group:group=[A:class={Attribute1:{A,B,C}; Attribute2:{A,B}; Attribute3:{B,C}; Attribute4:{A,C};}; B:class=A+{};
	 * C:class=A+{}; Class:class={};]; .
	 * 
	 * @throws Exception
	 *             Exception
	 */
	@Test
	public void testNormalContainsInheritance3() throws Exception {
		final SimpleScannerInput input =
				new SimpleScannerInput("Group:group=[A:class={Attribute1:{A,B,C}; Attribute2:{A,B}; Attribute3:{B,C}; "
						+ "Attribute4:{A,C};}; B:class={}; C:class={}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final ClassType clss = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		final Iterator<Attribute> attrIterator = clss.getAttributes().iterator();
		final Attribute attr1 = attrIterator.next();
		final Attribute attr2 = attrIterator.next();
		final Attribute attr3 = attrIterator.next();
		final Attribute attr4 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		assertEquals(1, supertypesAttr1.size());
		final Iterator<Type> superTypesAttr1Iterator = supertypesAttr1.iterator();
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr1Iterator.next()));
		
		assertEquals(0, ((SumType) attr2.getAttrType()).getSuperTypes().size());
		final Collection<Type> supertypesAttr2 =
				((SumType) ((SumType) attr2.getAttrType()).getPrototype()).getSuperTypes();
		assertEquals(1, supertypesAttr2.size());
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 1704
de/fhdw/wtf/parser/test/TestAttributes.java 1795
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.arrowToken);
		this.stream.add(this.stringIdentifier);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType classModel =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState stringReferenceState = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final TypeProxy stringType = TypeProxy.create(this.stringIdentifier, stringReferenceState);
		final ByNameState integerReferenceState = ByNameState.create(UnqualifiedName.create(this.integerIdentifier));
		final TypeProxy integerType = TypeProxy.create(this.integerIdentifier, integerReferenceState);
		
		final ProductElementType nameElement = ProductElementType.create("name", stringType, nameIdentifier);
		final ProductElementType countElement = ProductElementType.create("count", integerType, countIdentifier);
		final ProductType product = ProductType.create(this.bracketOpenToken);
		product.addElement(nameElement);
		product.addElement(countElement);
		
		final MapType mapKey = MapType.create(this.bracketOpenToken, product, integerType);
File Line
de/fhdw/wtf/parser/test/TestConstructors.java 539
de/fhdw/wtf/parser/test/TestConstructors.java 610
		final SimpleScannerInput input = new SimpleScannerInput("Group1:group=[A:class={();op:[[(s:String)->{}]];};];");
		final VerboseTokenStream output = new VerboseTokenStream(SimpleTokenStream.create());
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		
		final IdentifierToken group1IdentifierToken = IdentifierToken.create("Group1", Position.create("", 1, 1, 0));
		final IdentifierToken aIdentifierToken = IdentifierToken.create("A", Position.create("", 1, 1, 0));
		final IdentifierToken sParameterIdentifierToken = IdentifierToken.create("s", Position.create("", 1, 1, 1));
		final IdentifierToken op = IdentifierToken.create("op", Position.create("", 1, 1, 0));
		
		final Vector<GroupElement> group1Vector = new Vector<>();
		final Vector<Constructor> constructors = new Vector<>();
		final Vector<Operation> operations = new Vector<>();
		
		final Name group1Name = UnqualifiedName.create(group1IdentifierToken);
		final Group group1 = Group.create(group1Name, group1Vector, group1IdentifierToken);
		
		final Name aName = group1Name.addName(aIdentifierToken);
		
		final ClassType aClass =
				RegularClassType.create(
						aName,
						new Vector<ClassModifier>(),
						new Vector<Attribute>(),
						new Vector<Type>(),
						operations,
						constructors,
						aIdentifierToken,
						
						new Vector<ClassType>());
		group1Vector.add(aClass);
		
		final ProductType aProduct = ProductType.create(this.bracketOpenToken);
		final ProductType sProduct = ProductType.create(this.bracketOpenToken);
		
		final ByNameState stringName = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		
		final TypeProxy stringTypeProxy = TypeProxy.create(this.stringIdentifier, stringName);
		
		sProduct.addElement(ProductElementType.create("s", stringTypeProxy, sParameterIdentifierToken));
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 232
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 391
	public void testContainsInheritanceOverClassInheritanceAndSumSupertypeIsAnClass() throws Exception {
		final SimpleScannerInput input =
				new SimpleScannerInput("Group:group=[A:class={Attribute1:{String,Integer,A}; Attribute2:{B,C};}; "
						+ "B:class=A+{}; C:class=A+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final ClassType clss = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		final Iterator<Attribute> attrIterator = clss.getAttributes().iterator();
		final Attribute attr1 = attrIterator.next();
		final Attribute attr2 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		assertEquals(1, supertypesAttr1.size());
		final Iterator<Type> superTypesAttr1Iterator = supertypesAttr1.iterator();
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr1Iterator.next()));
		
		assertEquals(0, ((SumType) attr2.getAttrType()).getSuperTypes().size());
		final Collection<Type> supertypesAttr2 =
				((SumType) ((SumType) attr2.getAttrType()).getPrototype()).getSuperTypes();
		
		final Collection<Type> expectedSupertypes = new ArrayList<>();
		expectedSupertypes.add(attr1Type);
		expectedSupertypes.add(clss);
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 179
de/fhdw/wtf/parser/test/TestExceptions.java 333
de/fhdw/wtf/parser/test/TestExceptions.java 446
de/fhdw/wtf/parser/test/TestExceptions.java 777
de/fhdw/wtf/parser/test/TestExceptions.java 1058
	public void testNoArrowException() {
		this.stream = SimpleTokenStream.create();
		this.parser = Parser.create(this.stream);
		final IdentifierToken myGroup = IdentifierToken.create("MyGroup", Position.create("", 1, 1, 0));
		final IdentifierToken myClass = IdentifierToken.create("MyClass", Position.create("", 1, 1, 0));
		final IdentifierToken myOperation = IdentifierToken.create("MyOperation", Position.create("", 1, 1, 0));
		final IdentifierToken myParameter = IdentifierToken.create("MyParameter", Position.create("", 1, 1, 0));
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myOperation);
		this.stream.add(this.colonToken);
		this.stream.add(this.doubleSquareBracketOpenToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(myParameter);
		this.stream.add(this.colonToken);
		this.stream.add(string);
		this.stream.add(this.bracketCloseToken);
		this.stream.add(HyphenToken.create(Position.createDummyPosition()));
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 694
de/fhdw/wtf/parser/test/TestAttributes.java 782
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.asteriskToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType classModel =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState stringReferenceState = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final TypeProxy stringType = TypeProxy.create(this.stringIdentifier, stringReferenceState);
		final ByNameState integerReferenceState = ByNameState.create(UnqualifiedName.create(this.integerIdentifier));
		final TypeProxy integerType = TypeProxy.create(this.integerIdentifier, integerReferenceState);
		
		final ProductElementType nameElement = ProductElementType.create("name", stringType, nameIdentifier);
		final ProductElementType countElement = ProductElementType.create("count", integerType, countIdentifier);
		final ProductType product = ProductType.create(this.bracketOpenToken);
		product.addElement(nameElement);
		product.addElement(countElement);
		
		final ListType list = ListType.create(this.bracketOpenToken, product);
		
		final Attribute attribute =
File Line
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 486
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 549
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 612
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 674
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 737
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 800
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 865
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 927
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 1059
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 1121
								+ "operation : [[(param1:String,param2:Integer) -> String ]];}; ];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		Model model = null;
		model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		
		final SimpleWalkerTask doubleGroupcomponent = DoubleGroupcomponentCheck.create(model, taskmanager);
		final SimpleWalkerTask doubleAttributenameCheck = DoubleAttributenameCheck.create(model, taskmanager);
		final SimpleWalkerTask referencer = TypeReferencer.create(model, taskmanager);
		final SimpleWalkerTask prototypesTask = PrototypesTask.create(model, taskmanager);
		final SimpleWalkerTask cyclicInheritance = CyclicInheritanceCheck.create(model, taskmanager);
		final SimpleWalkerTask subtypesFillTask = SubtypesFillTask.create(model, taskmanager);
		final GroupDependencyTask doubleChecks = GroupDependencyTask.create(taskmanager);
		final SimpleWalkerTask overloadingCheck = OverloadingCheck.create(model, taskmanager);
		doubleChecks.addMembers(doubleGroupcomponent, doubleAttributenameCheck);
		referencer.addDependency(doubleChecks);
		cyclicInheritance.addDependency(referencer);
		subtypesFillTask.addDependency(cyclicInheritance);
		prototypesTask.addDependency(subtypesFillTask);
		overloadingCheck.addDependency(prototypesTask);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(8, okResult.size());
		assertEquals(0, failResult.size());
	}
	
	/**
	 * "Group:group=[Klasse:class={operation : [[(param:(p1:Integer,p2:String)) -> String ]];operation :
	 * [[(param:(p001:Integer,p002:String)) -> String ]];}; ]; .
	 * 
	 * @throws InterruptedException
	 * @throws ExecutionException
	 * @throws NoValidTokenStreamException
	 * @throws CyclicDependencyException
	 * @throws CyclicPartDefinitionException
	 */
	@Test
	public void testTwoDifferentProductsAsParamDifferentInProductElementNames() throws InterruptedException,
File Line
de/fhdw/wtf/dsl/scanner/test/ScannerTest.java 528
de/fhdw/wtf/dsl/scanner/test/ScannerTest.java 584
		final IdentifierToken myOperationToken = IdentifierToken.create("MyOperation", Position.create("", 1, 31, 30));
		
		stream.add(myGroupToken);
		stream.add(ColonToken.create(Position.create("", 1, 8, 7)));
		stream.add(GroupToken.create(Position.create("", 1, 9, 8)));
		stream.add(EqualToken.create(Position.create("", 1, 14, 13)));
		stream.add(SquareBracketOpenToken.create(Position.create("", 1, 15, 14)));
		stream.add(myClassToken);
		stream.add(ColonToken.create(Position.create("", 1, 23, 22)));
		stream.add(ClassToken.create(Position.create("", 1, 24, 23)));
		stream.add(EqualToken.create(Position.create("", 1, 29, 28)));
		stream.add(CurlyBracketOpenToken.create(Position.create("", 1, 30, 29)));
		stream.add(myOperationToken);
		stream.add(ColonToken.create(Position.create("", 1, 42, 41)));
		stream.add(DoubleSquareBracketOpenToken.create(Position.create("", 1, 43, 42)));
		stream.add(BracketOpenToken.create(Position.create("", 1, 45, 44)));
		stream.add(BracketCloseToken.create(Position.create("", 1, 46, 45)));
		stream.add(ArrowToken.create(Position.create("", 1, 47, 46)));
		stream.add(SquareBracketOpenToken.create(Position.create("", 1, 49, 48)));
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 781
de/fhdw/wtf/parser/test/TestAttributes.java 1610
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.asteriskToken);
		this.stream.add(this.asteriskToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType classModel =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState stringReferenceState = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final TypeProxy stringType = TypeProxy.create(this.stringIdentifier, stringReferenceState);
		final ByNameState integerReferenceState = ByNameState.create(UnqualifiedName.create(this.integerIdentifier));
		final TypeProxy integerType = TypeProxy.create(this.integerIdentifier, integerReferenceState);
		
		final ProductElementType nameElement = ProductElementType.create("name", stringType, nameIdentifier);
		final ProductElementType countElement = ProductElementType.create("count", integerType, countIdentifier);
		final ProductType product = ProductType.create(this.bracketOpenToken);
		product.addElement(nameElement);
		product.addElement(countElement);
		
		final ListType list = ListType.create(this.bracketOpenToken, product);
File Line
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 486
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 549
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 612
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 674
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 737
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 800
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 865
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 927
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 1059
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 1121
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 1184
								+ "operation : [[(param1:String,param2:Integer) -> String ]];}; ];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		Model model = null;
		model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		
		final SimpleWalkerTask doubleGroupcomponent = DoubleGroupcomponentCheck.create(model, taskmanager);
		final SimpleWalkerTask doubleAttributenameCheck = DoubleAttributenameCheck.create(model, taskmanager);
		final SimpleWalkerTask referencer = TypeReferencer.create(model, taskmanager);
		final SimpleWalkerTask prototypesTask = PrototypesTask.create(model, taskmanager);
		final SimpleWalkerTask cyclicInheritance = CyclicInheritanceCheck.create(model, taskmanager);
		final SimpleWalkerTask subtypesFillTask = SubtypesFillTask.create(model, taskmanager);
		final GroupDependencyTask doubleChecks = GroupDependencyTask.create(taskmanager);
		final SimpleWalkerTask overloadingCheck = OverloadingCheck.create(model, taskmanager);
		doubleChecks.addMembers(doubleGroupcomponent, doubleAttributenameCheck);
		referencer.addDependency(doubleChecks);
		cyclicInheritance.addDependency(referencer);
		subtypesFillTask.addDependency(cyclicInheritance);
		prototypesTask.addDependency(subtypesFillTask);
		overloadingCheck.addDependency(prototypesTask);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(8, okResult.size());
		assertEquals(0, failResult.size());
	}
File Line
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 259
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 703
		final Model model = SyntaxCheck.getInstance().getModelFromString(input);
		final Group group = model.getGroups().iterator().next();
		final ClassType klasse = (ClassType) group.getGroupElements().iterator().next();
		final SumType sum = (SumType) klasse.getAttributes().iterator().next().getAttrType();
		
		final List<Type> standardizeElements = sum.standardize().accept(new TypeVisitorReturn<List<Type>>() {
			
			@Override
			public List<Type> handle(final AtomicType atomicType) {
				return new ArrayList<>();
			}
			
			@Override
			public List<Type> handle(final CompositeType compositeType) {
				return compositeType.accept(new CompositeTypeVisitorReturn<List<Type>>() {
					
					@Override
					public List<Type> handle(final ListType list) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final MapType map) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final ProductType product) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final SumType sum2) {
						return sum2.getElements();
					}
					
					@Override
					public List<Type> handle(final ThrownType thrownType) {
						return new ArrayList<>();
					}
				});
			}
			
			@Override
			public List<Type> handle(final TypeProxy typeProxy) {
				return new ArrayList<>();
			}
		});
		
		assertEquals(1, standardizeElements.size());
		assertEquals(sum.getElements().get(3), standardizeElements.iterator().next());
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 1228
de/fhdw/wtf/parser/test/TestAttributes.java 1317
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType classModel =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState stringReferenceState = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final TypeProxy stringType = TypeProxy.create(this.stringIdentifier, stringReferenceState);
		final ByNameState integerReferenceState = ByNameState.create(UnqualifiedName.create(this.integerIdentifier));
		final TypeProxy integerType = TypeProxy.create(this.integerIdentifier, integerReferenceState);
		
		final ProductElementType nameElement = ProductElementType.create("name", stringType, nameIdentifier);
		final ProductElementType countElement = ProductElementType.create("count", integerType, countIdentifier);
		final ProductType product = ProductType.create(this.bracketOpenToken);
		product.addElement(nameElement);
		product.addElement(countElement);
		
		final MapType map = MapType.create(this.stringIdentifier, stringType, product);
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 2379
de/fhdw/wtf/parser/test/TestAttributes.java 2476
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.arrowToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(trueIdentifier);
		this.stream.add(this.commaToken);
		this.stream.add(falseIdentifier);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(EndToken.create(Position.create("", 1, 1, 0)));
		
		final Model model = Model.create(groupIdentifier);
		final Vector<GroupElement> groupVector = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		model.addGroup(group);
		
		final Name className = groupName.addName(classIdentifier);
		final Collection<Attribute> attributes = new Vector<>();
		final ClassType clazz =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		groupVector.add(clazz);
		
		final ByNameState stringByName = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final TypeProxy typeProxyString = TypeProxy.create(groupIdentifier, stringByName);
		
		final ByNameState integerByName = ByNameState.create(UnqualifiedName.create(this.integerIdentifier));
File Line
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 55
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 123
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 259
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 703
		final Model model = SyntaxCheck.getInstance().getModelFromString(input);
		final Group group = model.getGroups().iterator().next();
		final ClassType klasse = (ClassType) group.getGroupElements().iterator().next();
		final SumType sum = (SumType) klasse.getAttributes().iterator().next().getAttrType();
		
		final List<Type> standardizeElements = sum.standardize().accept(new TypeVisitorReturn<List<Type>>() {
			
			@Override
			public List<Type> handle(final AtomicType atomicType) {
				return new ArrayList<>();
			}
			
			@Override
			public List<Type> handle(final CompositeType compositeType) {
				return compositeType.accept(new CompositeTypeVisitorReturn<List<Type>>() {
					
					@Override
					public List<Type> handle(final ListType list) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final MapType map) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final ProductType product) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final SumType sum2) {
						return sum2.getElements();
					}
					
					@Override
					public List<Type> handle(final ThrownType thrownType) {
						return new ArrayList<>();
					}
				});
			}
			
			@Override
			public List<Type> handle(final TypeProxy typeProxy) {
				return new ArrayList<>();
			}
		});
		
		assertEquals(1, standardizeElements.size());
		assertEquals(sum.getElements().iterator().next(), standardizeElements.iterator().next());
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 179
de/fhdw/wtf/parser/test/TestExceptions.java 333
de/fhdw/wtf/parser/test/TestExceptions.java 391
de/fhdw/wtf/parser/test/TestExceptions.java 446
de/fhdw/wtf/parser/test/TestExceptions.java 777
de/fhdw/wtf/parser/test/TestExceptions.java 1058
	public void testNoArrowException() {
		this.stream = SimpleTokenStream.create();
		this.parser = Parser.create(this.stream);
		final IdentifierToken myGroup = IdentifierToken.create("MyGroup", Position.create("", 1, 1, 0));
		final IdentifierToken myClass = IdentifierToken.create("MyClass", Position.create("", 1, 1, 0));
		final IdentifierToken myOperation = IdentifierToken.create("MyOperation", Position.create("", 1, 1, 0));
		final IdentifierToken myParameter = IdentifierToken.create("MyParameter", Position.create("", 1, 1, 0));
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myOperation);
		this.stream.add(this.colonToken);
		this.stream.add(this.doubleSquareBracketOpenToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(myParameter);
		this.stream.add(this.colonToken);
		this.stream.add(string);
		this.stream.add(this.bracketCloseToken);
File Line
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 770
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 837
						+ "A:class={();}; B:class=A+{()=A();};];";
		final Model model = SyntaxCheck.getInstance().getModelFromString(input);
		final Group group = model.getGroups().iterator().next();
		final ClassType klasse = (ClassType) group.getGroupElements().iterator().next();
		final SumType sum = (SumType) klasse.getAttributes().iterator().next().getAttrType();
		
		final List<Type> standardizeElements = sum.standardize().accept(new TypeVisitorReturn<List<Type>>() {
			
			@Override
			public List<Type> handle(final AtomicType atomicType) {
				return new ArrayList<>();
			}
			
			@Override
			public List<Type> handle(final CompositeType compositeType) {
				return compositeType.accept(new CompositeTypeVisitorReturn<List<Type>>() {
					
					@Override
					public List<Type> handle(final ListType list) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final MapType map) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final ProductType product) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final SumType sum2) {
						return sum2.getElements();
					}
					
					@Override
					public List<Type> handle(final ThrownType thrownType) {
						return new ArrayList<>();
					}
				});
			}
			
			@Override
			public List<Type> handle(final TypeProxy typeProxy) {
				return new ArrayList<>();
			}
		});
		
		assertEquals(2, standardizeElements.size());
	}
	
	/**
	 * A > B. {[Integer->A],[Integer->B]} => {[Integer->A],[Integer->B]}
	 * 
	 * @throws Exception
	 *             {@link de.fhdw.wtf.common.exception.parser.SumIsAnythingException},
	 *             {@link de.fhdw.wtf.common.exception.editor.MultipleCheckExceptions},
	 *             {@link de.fhdw.wtf.common.exception.walker.CyclicDependencyException}, {@link InterruptedException},
	 *             {@link de.fhdw.wtf.common.exception.walker.CyclicPartDefinitionException},
	 *             {@link java.util.concurrent.ExecutionException}
	 */
	@Test
	public void testMap3() throws Exception {
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 1318
de/fhdw/wtf/parser/test/TestAttributes.java 1520
de/fhdw/wtf/parser/test/TestAttributes.java 1612
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType classModel =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState stringReferenceState = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final TypeProxy stringType = TypeProxy.create(this.stringIdentifier, stringReferenceState);
		final ByNameState integerReferenceState = ByNameState.create(UnqualifiedName.create(this.integerIdentifier));
		final TypeProxy integerType = TypeProxy.create(this.integerIdentifier, integerReferenceState);
		
		final ProductElementType nameElement = ProductElementType.create("name", stringType, nameIdentifier);
		final ProductElementType countElement = ProductElementType.create("count", integerType, countIdentifier);
		final ProductType product = ProductType.create(this.bracketOpenToken);
		product.addElement(nameElement);
		product.addElement(countElement);
		
		final MapType map = MapType.create(this.bracketOpenToken, product, integerType);
		
		final Attribute attribute =
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 209
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 177
				HelperUtils.getReferencedType(model.getString().getPrototype().getSuperTypes().iterator().next()));
	}
	
	/**
	 * Group:group=[Class:class={Attribute1:{String,Integer}; Attribute2:{String};}; Class2:class={};]; .
	 * 
	 * @throws Exception
	 *             Exception
	 */
	@Test
	public void testNormalContainsInheritance2() throws Exception {
		final SimpleScannerInput input =
				new SimpleScannerInput("Group:group=[Class:class={Attribute1:{String,Integer,Class}; "
						+ "Attribute2:{String,Integer};};" + "Class2:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final ClassType clss = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		final Iterator<Attribute> attrIterator = clss.getAttributes().iterator();
		final Attribute attr1 = attrIterator.next();
		final Attribute attr2 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		assertEquals(1, supertypesAttr1.size());
		final Iterator<Type> superTypesAttr1Iterator = supertypesAttr1.iterator();
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr1Iterator.next()));
		
		assertEquals(0, ((SumType) attr2.getAttrType()).getSuperTypes().size());
		final Collection<Type> supertypesAttr2 =
				((SumType) ((SumType) attr2.getAttrType()).getPrototype()).getSuperTypes();
		assertEquals(1, supertypesAttr2.size());
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 544
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 523
				HelperUtils.getReferencedType(model.getString().getPrototype().getSuperTypes().iterator().next()));
	}
	
	/**
	 * Group:group=[A:class={Attribute1:{String,Integer,A}; Attribute2:{String,A}; Attribute3:{B,C};}; B:class=A+{};
	 * C:class=A+{}; Class:class={};]; .
	 * 
	 * @throws Exception
	 *             Exception
	 */
	@Test
	public void testTransitiveInheritance() throws Exception {
		final SimpleScannerInput input =
				new SimpleScannerInput("Group:group=[A:class={Attribute1:{String,Integer,A}; Attribute2:{String,A}; "
						+ "Attribute3:{B,C};}; B:class=A+{}; C:class=A+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final ClassType clss = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		final Iterator<Attribute> attrIterator = clss.getAttributes().iterator();
		final Attribute attr1 = attrIterator.next();
		final Attribute attr2 = attrIterator.next();
		final Attribute attr3 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		assertEquals(1, supertypesAttr1.size());
		final Iterator<Type> superTypesAttr1Iterator = supertypesAttr1.iterator();
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr1Iterator.next()));
		
		assertEquals(0, ((SumType) attr2.getAttrType()).getSuperTypes().size());
		final Type attr2Type = ((SumType) attr2.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr2 = attr2Type.getSuperTypes();
File Line
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 327
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 537
		final Model model = SyntaxCheck.getInstance().getModelFromString(input);
		final Group group = model.getGroups().iterator().next();
		final ClassType klasse = (ClassType) group.getGroupElements().iterator().next();
		final SumType sum = (SumType) klasse.getAttributes().iterator().next().getAttrType();
		
		final List<Type> standardizeElements = sum.standardize().accept(new TypeVisitorReturn<List<Type>>() {
			
			@Override
			public List<Type> handle(final AtomicType atomicType) {
				return new ArrayList<>();
			}
			
			@Override
			public List<Type> handle(final CompositeType compositeType) {
				return compositeType.accept(new CompositeTypeVisitorReturn<List<Type>>() {
					
					@Override
					public List<Type> handle(final ListType list) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final MapType map) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final ProductType product) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final SumType sum2) {
						return sum2.getElements();
					}
					
					@Override
					public List<Type> handle(final ThrownType thrownType) {
						return new ArrayList<>();
					}
				});
			}
			
			@Override
			public List<Type> handle(final TypeProxy typeProxy) {
				return new ArrayList<>();
			}
		});
		
		assertEquals(4, standardizeElements.size());
		final Iterator<Type> iterator = standardizeElements.iterator();
File Line
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 401
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 771
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 838
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 904
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 970
		final Model model = SyntaxCheck.getInstance().getModelFromString(input);
		final Group group = model.getGroups().iterator().next();
		final ClassType klasse = (ClassType) group.getGroupElements().iterator().next();
		final SumType sum = (SumType) klasse.getAttributes().iterator().next().getAttrType();
		
		final List<Type> standardizeElements = sum.standardize().accept(new TypeVisitorReturn<List<Type>>() {
			
			@Override
			public List<Type> handle(final AtomicType atomicType) {
				return new ArrayList<>();
			}
			
			@Override
			public List<Type> handle(final CompositeType compositeType) {
				return compositeType.accept(new CompositeTypeVisitorReturn<List<Type>>() {
					
					@Override
					public List<Type> handle(final ListType list) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final MapType map) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final ProductType product) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final SumType sum2) {
						return sum2.getElements();
					}
					
					@Override
					public List<Type> handle(final ThrownType thrownType) {
						return new ArrayList<>();
					}
				});
			}
			
			@Override
			public List<Type> handle(final TypeProxy typeProxy) {
				return new ArrayList<>();
			}
		});
		
		assertEquals(2, standardizeElements.size());
	}
	
	/**
	 * A > B und A > C. {{A,B},C} => {A}
	 * 
	 * @throws Exception
	 *             {@link de.fhdw.wtf.common.exception.parser.SumIsAnythingException},
	 *             {@link de.fhdw.wtf.common.exception.editor.MultipleCheckExceptions},
	 *             {@link de.fhdw.wtf.common.exception.walker.CyclicDependencyException}, {@link InterruptedException},
	 *             {@link de.fhdw.wtf.common.exception.walker.CyclicPartDefinitionException},
	 *             {@link java.util.concurrent.ExecutionException}
	 */
	@Test
	public void testSum1() throws Exception {
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 269
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 316
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 426
						+ "B:class=A+{}; C:class=A+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final ClassType clss = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		final Iterator<Attribute> attrIterator = clss.getAttributes().iterator();
		final Attribute attr1 = attrIterator.next();
		final Attribute attr2 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		assertEquals(1, supertypesAttr1.size());
		final Iterator<Type> superTypesAttr1Iterator = supertypesAttr1.iterator();
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr1Iterator.next()));
		
		assertEquals(0, ((SumType) attr2.getAttrType()).getSuperTypes().size());
		final Collection<Type> supertypesAttr2 =
				((SumType) ((SumType) attr2.getAttrType()).getPrototype()).getSuperTypes();
		assertEquals(1, supertypesAttr2.size());
		final Iterator<Type> superTypesAttr2Iterator = supertypesAttr2.iterator();
		assertEquals(clss, HelperUtils.getReferencedType(superTypesAttr2Iterator.next()));
File Line
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 353
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 402
		final Model model = SyntaxCheck.getInstance().getModelFromString(input);
		
		final Iterator<Type> iterator = model.getConstructorCallDependencies().keySet().iterator();
		while (iterator.hasNext()) {
			final Type current = iterator.next();
			
			switch (current.getTypeString()) {
			case "group1>A":
				assertTrue(true);
				assertEquals(0, model.getConstructorCallDependencies().get(current).size());
				break;
			case "group1>B":
				final Iterator<Type> bIterator = model.getConstructorCallDependencies().get(current).iterator();
				assertEquals("group1>A", bIterator.next().toString());
				assertEquals(1, model.getConstructorCallDependencies().get(current).size());
				break;
			case "group1>C":
				final Iterator<Type> cIterator = model.getConstructorCallDependencies().get(current).iterator();
				assertEquals("group1>A", cIterator.next().toString());
				assertEquals(1, model.getConstructorCallDependencies().get(current).size());
				break;
			case "group1>D":
				final Iterator<Type> aIterator = model.getConstructorCallDependencies().get(current).iterator();
				assertEquals("group1>A", aIterator.next().toString());
				assertEquals("group1>C", aIterator.next().toString());
				assertEquals("group1>B", aIterator.next().toString());
				assertEquals(3, model.getConstructorCallDependencies().get(current).size());
				break;
			default:
				fail();
				break;
			}
		}
	}
	
	/**
	 * Tests the Diamond changed the order of the superConstructor-calls.
	 * 
	 * Model: group1:group = [A :class={();}; B:class= A + {()=A();}; C:class= A + {()=A();}; D:class= B + C
	 * +{()=A()+C()+B();};];
	 * 
	 * @throws Exception
	 *             x
	 */
	@Test
	public void testDiamondWithChangedOrderInSuperconstructorCall() throws Exception {
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 222
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 269
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 316
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 426
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 473
						+ "Attribute2:{String,Integer};};" + "Class2:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final ClassType clss = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		final Iterator<Attribute> attrIterator = clss.getAttributes().iterator();
		final Attribute attr1 = attrIterator.next();
		final Attribute attr2 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		assertEquals(1, supertypesAttr1.size());
		final Iterator<Type> superTypesAttr1Iterator = supertypesAttr1.iterator();
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr1Iterator.next()));
		
		assertEquals(0, ((SumType) attr2.getAttrType()).getSuperTypes().size());
		final Collection<Type> supertypesAttr2 =
				((SumType) ((SumType) attr2.getAttrType()).getPrototype()).getSuperTypes();
		assertEquals(1, supertypesAttr2.size());
		final Iterator<Type> superTypesAttr2Iterator = supertypesAttr2.iterator();
		assertEquals(attr1Type, superTypesAttr2Iterator.next());
File Line
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 55
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 123
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 259
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 467
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 703
		final Model model = SyntaxCheck.getInstance().getModelFromString(input);
		final Group group = model.getGroups().iterator().next();
		final ClassType klasse = (ClassType) group.getGroupElements().iterator().next();
		final SumType sum = (SumType) klasse.getAttributes().iterator().next().getAttrType();
		
		final List<Type> standardizeElements = sum.standardize().accept(new TypeVisitorReturn<List<Type>>() {
			
			@Override
			public List<Type> handle(final AtomicType atomicType) {
				return new ArrayList<>();
			}
			
			@Override
			public List<Type> handle(final CompositeType compositeType) {
				return compositeType.accept(new CompositeTypeVisitorReturn<List<Type>>() {
					
					@Override
					public List<Type> handle(final ListType list) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final MapType map) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final ProductType product) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final SumType sum2) {
						return sum2.getElements();
					}
					
					@Override
					public List<Type> handle(final ThrownType thrownType) {
						return new ArrayList<>();
					}
				});
			}
			
			@Override
			public List<Type> handle(final TypeProxy typeProxy) {
				return new ArrayList<>();
			}
		});
		
		assertEquals(1, standardizeElements.size());
		assertEquals(sum.getElements().iterator().next(), standardizeElements.iterator().next());
File Line
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1036
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1106
		final Model model = SyntaxCheck.getInstance().getModelFromString(input);
		final Group group = model.getGroups().iterator().next();
		final ClassType klasse = (ClassType) group.getGroupElements().iterator().next();
		final SumType sum = (SumType) klasse.getAttributes().iterator().next().getAttrType();
		try {
			sum.standardize().accept(new TypeVisitorReturn<List<Type>>() {
				
				@Override
				public List<Type> handle(final AtomicType atomicType) {
					return new ArrayList<>();
				}
				
				@Override
				public List<Type> handle(final CompositeType compositeType) {
					return compositeType.accept(new CompositeTypeVisitorReturn<List<Type>>() {
						
						@Override
						public List<Type> handle(final ListType list) {
							return new ArrayList<>();
						}
						
						@Override
						public List<Type> handle(final MapType map) {
							return new ArrayList<>();
						}
						
						@Override
						public List<Type> handle(final ProductType product) {
							return new ArrayList<>();
						}
						
						@Override
						public List<Type> handle(final SumType sum2) {
							return sum2.getElements();
						}
						
						@Override
						public List<Type> handle(final ThrownType thrownType) {
							return new ArrayList<>();
						}
					});
				}
				
				@Override
				public List<Type> handle(final TypeProxy typeProxy) {
					return new ArrayList<>();
				}
			});
			
			fail();
		} catch (final SumIsAnythingException e) {
			// Nothing
		}
	}
	
	/**
	 * A > B. {{Anything,C},A,B} => Summe "Anything"
	 * 
	 * @throws Exception
	 *             {@link de.fhdw.wtf.common.exception.parser.SumIsAnythingException},
	 *             {@link de.fhdw.wtf.common.exception.editor.MultipleCheckExceptions},
	 *             {@link de.fhdw.wtf.common.exception.walker.CyclicDependencyException}, {@link InterruptedException},
	 *             {@link de.fhdw.wtf.common.exception.walker.CyclicPartDefinitionException},
	 *             {@link java.util.concurrent.ExecutionException}
	 */
	@Test
	public void testAnything2() throws Exception {
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 1228
de/fhdw/wtf/parser/test/TestAttributes.java 1317
de/fhdw/wtf/parser/test/TestAttributes.java 1706
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType classModel =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState stringReferenceState = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final TypeProxy stringType = TypeProxy.create(this.stringIdentifier, stringReferenceState);
		final ByNameState integerReferenceState = ByNameState.create(UnqualifiedName.create(this.integerIdentifier));
		final TypeProxy integerType = TypeProxy.create(this.integerIdentifier, integerReferenceState);
		
		final ProductElementType nameElement = ProductElementType.create("name", stringType, nameIdentifier);
		final ProductElementType countElement = ProductElementType.create("count", integerType, countIdentifier);
		final ProductType product = ProductType.create(this.bracketOpenToken);
		product.addElement(nameElement);
		product.addElement(countElement);
		
		final MapType map = MapType.create(this.stringIdentifier, stringType, product);
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 255
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 221
				HelperUtils.getReferencedType(model.getString().getPrototype().getSuperTypes().iterator().next()));
	}
	
	/**
	 * Group:group=[A:class={Attribute1:{String,Integer,A}; Attribute2:{B,C};}; B:class=A+{}; C:class=A+{};
	 * Class:class={};]; .
	 * 
	 * @throws Exception
	 *             Exception
	 */
	@Test
	public void testContainsInheritanceOverClassInheritanceAndSumSupertypeIsAnClass() throws Exception {
		final SimpleScannerInput input =
				new SimpleScannerInput("Group:group=[A:class={Attribute1:{String,Integer,A}; Attribute2:{B,C};}; "
						+ "B:class=A+{}; C:class=A+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final ClassType clss = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		final Iterator<Attribute> attrIterator = clss.getAttributes().iterator();
		final Attribute attr1 = attrIterator.next();
		final Attribute attr2 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		assertEquals(1, supertypesAttr1.size());
		final Iterator<Type> superTypesAttr1Iterator = supertypesAttr1.iterator();
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr1Iterator.next()));
		
		assertEquals(0, ((SumType) attr2.getAttrType()).getSuperTypes().size());
		final Collection<Type> supertypesAttr2 =
				((SumType) ((SumType) attr2.getAttrType()).getPrototype()).getSuperTypes();
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 412
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 380
				HelperUtils.getReferencedType(model.getString().getPrototype().getSuperTypes().iterator().next()));
	}
	
	/**
	 * Group:group=[A:class={Attribute1:{String,Integer,A}; Attribute2:{C,D,E};}; B:class=A+{}; C:class=A+{};
	 * Class:class={}; D:class=B+{}; E:class=B+{};]; .
	 * 
	 * @throws Exception
	 *             Exception
	 */
	@Test
	public void testSumSupertypeIsAnClass() throws Exception {
		final SimpleScannerInput input =
				new SimpleScannerInput("Group:group=[A:class={Attribute1:{String,Integer,A}; Attribute2:{B,C};}; "
						+ "B:class=A+{}; C:class=A+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final ClassType clss = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		final Iterator<Attribute> attrIterator = clss.getAttributes().iterator();
		final Attribute attr1 = attrIterator.next();
		final Attribute attr2 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		assertEquals(1, supertypesAttr1.size());
		final Iterator<Type> superTypesAttr1Iterator = supertypesAttr1.iterator();
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr1Iterator.next()));
		
		assertEquals(0, ((SumType) attr2.getAttrType()).getSuperTypes().size());
		final Collection<Type> supertypesAttr2 =
				((SumType) ((SumType) attr2.getAttrType()).getPrototype()).getSuperTypes();
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 694
de/fhdw/wtf/parser/test/TestAttributes.java 782
de/fhdw/wtf/parser/test/TestAttributes.java 1519
de/fhdw/wtf/parser/test/TestAttributes.java 1611
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.asteriskToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType classModel =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState stringReferenceState = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final TypeProxy stringType = TypeProxy.create(this.stringIdentifier, stringReferenceState);
		final ByNameState integerReferenceState = ByNameState.create(UnqualifiedName.create(this.integerIdentifier));
		final TypeProxy integerType = TypeProxy.create(this.integerIdentifier, integerReferenceState);
		
		final ProductElementType nameElement = ProductElementType.create("name", stringType, nameIdentifier);
		final ProductElementType countElement = ProductElementType.create("count", integerType, countIdentifier);
		final ProductType product = ProductType.create(this.bracketOpenToken);
		product.addElement(nameElement);
		product.addElement(countElement);
		
		final ListType list = ListType.create(this.bracketOpenToken, product);
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 1228
de/fhdw/wtf/parser/test/TestAttributes.java 1317
de/fhdw/wtf/parser/test/TestAttributes.java 1797
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType classModel =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState stringReferenceState = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final TypeProxy stringType = TypeProxy.create(this.stringIdentifier, stringReferenceState);
		final ByNameState integerReferenceState = ByNameState.create(UnqualifiedName.create(this.integerIdentifier));
		final TypeProxy integerType = TypeProxy.create(this.integerIdentifier, integerReferenceState);
		
		final ProductElementType nameElement = ProductElementType.create("name", stringType, nameIdentifier);
		final ProductElementType countElement = ProductElementType.create("count", integerType, countIdentifier);
		final ProductType product = ProductType.create(this.bracketOpenToken);
		product.addElement(nameElement);
		product.addElement(countElement);
		
		final MapType map = MapType.create(this.stringIdentifier, stringType, product);
File Line
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 191
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 401
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 771
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 838
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 904
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 970
		final Model model = SyntaxCheck.getInstance().getModelFromString(input);
		final Group group = model.getGroups().iterator().next();
		final ClassType klasse = (ClassType) group.getGroupElements().iterator().next();
		final SumType sum = (SumType) klasse.getAttributes().iterator().next().getAttrType();
		
		final List<Type> standardizeElements = sum.standardize().accept(new TypeVisitorReturn<List<Type>>() {
			
			@Override
			public List<Type> handle(final AtomicType atomicType) {
				return new ArrayList<>();
			}
			
			@Override
			public List<Type> handle(final CompositeType compositeType) {
				return compositeType.accept(new CompositeTypeVisitorReturn<List<Type>>() {
					
					@Override
					public List<Type> handle(final ListType list) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final MapType map) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final ProductType product) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final SumType sum2) {
						return sum2.getElements();
					}
					
					@Override
					public List<Type> handle(final ThrownType thrownType) {
						return new ArrayList<>();
					}
				});
			}
			
			@Override
			public List<Type> handle(final TypeProxy typeProxy) {
				return new ArrayList<>();
			}
		});
		
		assertEquals(2, standardizeElements.size());
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 1229
de/fhdw/wtf/parser/test/TestAttributes.java 1520
de/fhdw/wtf/parser/test/TestAttributes.java 1612
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType classModel =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState stringReferenceState = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final TypeProxy stringType = TypeProxy.create(this.stringIdentifier, stringReferenceState);
		final ByNameState integerReferenceState = ByNameState.create(UnqualifiedName.create(this.integerIdentifier));
		final TypeProxy integerType = TypeProxy.create(this.integerIdentifier, integerReferenceState);
		
		final ProductElementType nameElement = ProductElementType.create("name", stringType, nameIdentifier);
		final ProductElementType countElement = ProductElementType.create("count", integerType, countIdentifier);
		final ProductType product = ProductType.create(this.bracketOpenToken);
		product.addElement(nameElement);
		product.addElement(countElement);
		
		final MapType map = MapType.create(this.stringIdentifier, stringType, product);
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 501
de/fhdw/wtf/parser/test/TestExceptions.java 551
	public void testNoBracketCloseExceptionAttribute() {
		this.stream = SimpleTokenStream.create();
		this.parser = Parser.create(this.stream);
		final IdentifierToken myGroup = IdentifierToken.create("MyGroup", Position.create("", 1, 1, 0));
		final IdentifierToken myClass = IdentifierToken.create("MyClass", Position.create("", 1, 1, 0));
		final IdentifierToken myAttribute = IdentifierToken.create("MyAttribute", Position.create("", 1, 1, 0));
		final IdentifierToken name = IdentifierToken.create("name", Position.create("", 1, 1, 0));
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myAttribute);
		this.stream.add(this.colonToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(name);
		this.stream.add(this.colonToken);
		this.stream.add(string);
		this.stream.add(this.semicolonToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 283
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 332
								+ "NaturalPerson:class=Person+{}; CorporateBody:class=Person+{};];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		final SimpleWalkerTask referencer = TypeReferencer.create(model, taskmanager);
		final SimpleWalkerTask cyclicInheritance = CyclicInheritanceCheck.create(model, taskmanager);
		cyclicInheritance.addDependency(referencer);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<OKTaskResult>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<ExceptionalTaskResult>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(1, okResult.size());
		assertEquals(1, failResult.size());
		
		final Exception exception = failResult.iterator().next().getError();
		if (exception instanceof CyclicInheritanceException) {
			final CyclicInheritanceException ex = (CyclicInheritanceException) exception;
			assertEquals(Position.create("", 1, 116, 115), ex.getStartPosition());
			assertEquals(Position.create("", 1, 122, 121), ex.getEndPos());
		} else {
			fail();
		}
	}
	
	@Test
	public void testCyclicInheritanceOverMoreClassesInSecondSupertype() throws InterruptedException,
File Line
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 166
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 559
						+ "NaturalPerson:class=Person+{}; CorporateBody:class=Person+{};];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		final SimpleWalkerTask referencer = TypeReferencer.create(model, taskmanager);
		final SimpleWalkerTask cyclicInheritance = CyclicInheritanceCheck.create(model, taskmanager);
		cyclicInheritance.addDependency(referencer);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<OKTaskResult>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<ExceptionalTaskResult>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(1, okResult.size());
		assertEquals(1, failResult.size());
		
		final Exception exception = failResult.iterator().next().getError();
		if (exception instanceof CyclicInheritanceException) {
			final CyclicInheritanceException ex = (CyclicInheritanceException) exception;
			assertEquals(Position.create("", 1, 92, 91), ex.getStartPosition());
			assertEquals(Position.create("", 1, 98, 97), ex.getEndPos());
		} else {
			fail();
		}
	}
	
	@Test
	public void testInvalidTypeReference() throws InterruptedException, ExecutionException,
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 266
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 391
	public void testContainsInheritanceOverClassInheritanceAndSumSupertypeIsAnClass() throws Exception {
		final SimpleScannerInput input =
				new SimpleScannerInput("Group:group=[A:class={Attribute1:{String,Integer,A}; Attribute2:{B,C};}; "
						+ "B:class=A+{}; C:class=A+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final ClassType clss = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		final Iterator<Attribute> attrIterator = clss.getAttributes().iterator();
		final Attribute attr1 = attrIterator.next();
		final Attribute attr2 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		assertEquals(1, supertypesAttr1.size());
		final Iterator<Type> superTypesAttr1Iterator = supertypesAttr1.iterator();
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr1Iterator.next()));
		
		assertEquals(0, ((SumType) attr2.getAttrType()).getSuperTypes().size());
		final Collection<Type> supertypesAttr2 =
				((SumType) ((SumType) attr2.getAttrType()).getPrototype()).getSuperTypes();
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 423
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 232
	public void testSumSupertypeIsAnClass() throws Exception {
		final SimpleScannerInput input =
				new SimpleScannerInput("Group:group=[A:class={Attribute1:{String,Integer,A}; Attribute2:{B,C};}; "
						+ "B:class=A+{}; C:class=A+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final ClassType clss = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		final Iterator<Attribute> attrIterator = clss.getAttributes().iterator();
		final Attribute attr1 = attrIterator.next();
		final Attribute attr2 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		assertEquals(1, supertypesAttr1.size());
		final Iterator<Type> superTypesAttr1Iterator = supertypesAttr1.iterator();
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr1Iterator.next()));
		
		assertEquals(0, ((SumType) attr2.getAttrType()).getSuperTypes().size());
		final Collection<Type> supertypesAttr2 =
				((SumType) ((SumType) attr2.getAttrType()).getPrototype()).getSuperTypes();
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 599
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 581
				HelperUtils.getReferencedType(model.getString().getPrototype().getSuperTypes().iterator().next()));
	}
	
	/**
	 * Group:group=[A:class={Attribute1:{}; Attribute2:{String,A}; Attribute3:{Integer,String};}; B:class=A+{};
	 * C:class=A+{}; Class:class={};]; .
	 * 
	 * @throws Exception
	 *             Exception
	 */
	@Test
	public void testEmptySum() throws Exception {
		final SimpleScannerInput input =
				new SimpleScannerInput(" Group:group=[A:class={Attribute1:{}; Attribute2:{String,A}; "
						+ "Attribute3:{Integer,String};}; B:class=A+{}; C:class=A+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final Iterator<GroupElement> iterator = model.getGroups().iterator().next().getGroupElements().iterator();
		
		final ClassType clssA = (ClassType) iterator.next();
		final ClassType clssB = (ClassType) iterator.next();
		final ClassType clssC = (ClassType) iterator.next();
		final ClassType clssClass = (ClassType) iterator.next();
		
		final Iterator<Attribute> attrIterator = clssA.getAttributes().iterator();
		final Attribute attr1 = attrIterator.next();
		final Attribute attr2 = attrIterator.next();
		final Attribute attr3 = attrIterator.next();
		
		final Type attr2Type = ((SumType) attr2.getAttrType()).getPrototype();
		final Type attr3Type = ((SumType) attr3.getAttrType()).getPrototype();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
File Line
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 55
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 123
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 191
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 259
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 327
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 401
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 467
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 537
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 626
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 703
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 771
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 838
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 904
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 970
		final Model model = SyntaxCheck.getInstance().getModelFromString(input);
		final Group group = model.getGroups().iterator().next();
		final ClassType klasse = (ClassType) group.getGroupElements().iterator().next();
		final SumType sum = (SumType) klasse.getAttributes().iterator().next().getAttrType();
		
		final List<Type> standardizeElements = sum.standardize().accept(new TypeVisitorReturn<List<Type>>() {
			
			@Override
			public List<Type> handle(final AtomicType atomicType) {
				return new ArrayList<>();
			}
			
			@Override
			public List<Type> handle(final CompositeType compositeType) {
				return compositeType.accept(new CompositeTypeVisitorReturn<List<Type>>() {
					
					@Override
					public List<Type> handle(final ListType list) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final MapType map) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final ProductType product) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final SumType sum2) {
						return sum2.getElements();
					}
					
					@Override
					public List<Type> handle(final ThrownType thrownType) {
						return new ArrayList<>();
					}
				});
			}
			
			@Override
			public List<Type> handle(final TypeProxy typeProxy) {
				return new ArrayList<>();
			}
		});
		
		assertEquals(1, standardizeElements.size());
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 695
de/fhdw/wtf/parser/test/TestAttributes.java 783
de/fhdw/wtf/parser/test/TestAttributes.java 1798
		this.stream.add(this.asteriskToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType classModel =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState stringReferenceState = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final TypeProxy stringType = TypeProxy.create(this.stringIdentifier, stringReferenceState);
		final ByNameState integerReferenceState = ByNameState.create(UnqualifiedName.create(this.integerIdentifier));
		final TypeProxy integerType = TypeProxy.create(this.integerIdentifier, integerReferenceState);
		
		final ProductElementType nameElement = ProductElementType.create("name", stringType, nameIdentifier);
		final ProductElementType countElement = ProductElementType.create("count", integerType, countIdentifier);
		final ProductType product = ProductType.create(this.bracketOpenToken);
		product.addElement(nameElement);
		product.addElement(countElement);
		
		final ListType list = ListType.create(this.bracketOpenToken, product);
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 1520
de/fhdw/wtf/parser/test/TestAttributes.java 1612
de/fhdw/wtf/parser/test/TestAttributes.java 1707
		this.stream.add(this.asteriskToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType classModel =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState stringReferenceState = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final TypeProxy stringType = TypeProxy.create(this.stringIdentifier, stringReferenceState);
		final ByNameState integerReferenceState = ByNameState.create(UnqualifiedName.create(this.integerIdentifier));
		final TypeProxy integerType = TypeProxy.create(this.integerIdentifier, integerReferenceState);
		
		final ProductElementType nameElement = ProductElementType.create("name", stringType, nameIdentifier);
		final ProductElementType countElement = ProductElementType.create("count", integerType, countIdentifier);
		final ProductType product = ProductType.create(this.bracketOpenToken);
		product.addElement(nameElement);
		product.addElement(countElement);
		
		final MapType map = MapType.create(this.bracketOpenToken, product, integerType);
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 182
de/fhdw/wtf/parser/test/TestOperations.java 274
		final IdentifierToken myGroup = IdentifierToken.create("MyGroup", Position.create("", 1, 1, 0));
		final IdentifierToken myClass = IdentifierToken.create("MyClass", Position.create("", 1, 1, 0));
		final IdentifierToken myOperation = IdentifierToken.create("MyOperation", Position.create("", 1, 1, 0));
		final IdentifierToken myParameter = IdentifierToken.create("MyParameter", Position.create("", 1, 1, 0));
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myOperation);
		this.stream.add(this.colonToken);
		this.stream.add(this.doubleSquareBracketOpenToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(myParameter);
		this.stream.add(this.colonToken);
		this.stream.add(string);
		this.stream.add(this.bracketCloseToken);
		this.stream.add(HyphenToken.create(Position.createDummyPosition()));
File Line
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 58
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 129
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 200
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 272
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 344
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 414
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 486
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 549
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 612
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 674
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 737
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 800
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 865
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 927
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 1059
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 1121
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 1184
						+ "operation : [[(parameter:Integer) -> String ]];}; ];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		Model model = null;
		model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		
		final SimpleWalkerTask doubleGroupcomponent = DoubleGroupcomponentCheck.create(model, taskmanager);
		final SimpleWalkerTask doubleAttributenameCheck = DoubleAttributenameCheck.create(model, taskmanager);
		final SimpleWalkerTask referencer = TypeReferencer.create(model, taskmanager);
		final SimpleWalkerTask prototypesTask = PrototypesTask.create(model, taskmanager);
		final SimpleWalkerTask cyclicInheritance = CyclicInheritanceCheck.create(model, taskmanager);
		final SimpleWalkerTask subtypesFillTask = SubtypesFillTask.create(model, taskmanager);
		final GroupDependencyTask doubleChecks = GroupDependencyTask.create(taskmanager);
		final SimpleWalkerTask overloadingCheck = OverloadingCheck.create(model, taskmanager);
		doubleChecks.addMembers(doubleGroupcomponent, doubleAttributenameCheck);
		referencer.addDependency(doubleChecks);
		cyclicInheritance.addDependency(referencer);
		subtypesFillTask.addDependency(cyclicInheritance);
		prototypesTask.addDependency(subtypesFillTask);
		overloadingCheck.addDependency(prototypesTask);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(7, okResult.size());
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 695
de/fhdw/wtf/parser/test/TestAttributes.java 783
de/fhdw/wtf/parser/test/TestAttributes.java 1229
de/fhdw/wtf/parser/test/TestAttributes.java 1318
de/fhdw/wtf/parser/test/TestAttributes.java 1707
		this.stream.add(this.asteriskToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType classModel =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState stringReferenceState = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final TypeProxy stringType = TypeProxy.create(this.stringIdentifier, stringReferenceState);
		final ByNameState integerReferenceState = ByNameState.create(UnqualifiedName.create(this.integerIdentifier));
		final TypeProxy integerType = TypeProxy.create(this.integerIdentifier, integerReferenceState);
		
		final ProductElementType nameElement = ProductElementType.create("name", stringType, nameIdentifier);
		final ProductElementType countElement = ProductElementType.create("count", integerType, countIdentifier);
		final ProductType product = ProductType.create(this.bracketOpenToken);
		product.addElement(nameElement);
		product.addElement(countElement);
		
		final ListType list = ListType.create(this.bracketOpenToken, product);
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 1520
de/fhdw/wtf/parser/test/TestAttributes.java 1612
de/fhdw/wtf/parser/test/TestAttributes.java 1798
		this.stream.add(this.asteriskToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType classModel =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState stringReferenceState = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final TypeProxy stringType = TypeProxy.create(this.stringIdentifier, stringReferenceState);
		final ByNameState integerReferenceState = ByNameState.create(UnqualifiedName.create(this.integerIdentifier));
		final TypeProxy integerType = TypeProxy.create(this.integerIdentifier, integerReferenceState);
		
		final ProductElementType nameElement = ProductElementType.create("name", stringType, nameIdentifier);
		final ProductElementType countElement = ProductElementType.create("count", integerType, countIdentifier);
		final ProductType product = ProductType.create(this.bracketOpenToken);
		product.addElement(nameElement);
		product.addElement(countElement);
		
		final MapType map = MapType.create(this.bracketOpenToken, product, integerType);
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 2291
de/fhdw/wtf/parser/test/TestAttributes.java 2384
		this.stream.add(this.stringIdentifier);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(EndToken.create(Position.create("", 1, 1, 0)));
		
		final Model model = Model.create(groupIdentifier);
		final Vector<GroupElement> groupVector = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		model.addGroup(group);
		
		final Name className = groupName.addName(classIdentifier);
		final Collection<Attribute> attributes = new Vector<>();
		final ClassType clazz =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		groupVector.add(clazz);
		
		final ByNameState stringByName = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final TypeProxy typeProxyString = TypeProxy.create(groupIdentifier, stringByName);
		
		final ByNameState integerByName = ByNameState.create(UnqualifiedName.create(this.integerIdentifier));
		final TypeProxy typeProxyInteger = TypeProxy.create(groupIdentifier, integerByName);
		
		final SumType sum = SumType.create(this.integerIdentifier);
File Line
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 87
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 741
		final SimpleScannerInput input = new SimpleScannerInput(stringInput);
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		final Vector<ClassModifier> modifiers = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, GroupToken.create(Position.create("", 1, 1, 0)));
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType clazz =
				RegularClassType.create(
						className,
						modifiers,
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState integerByName = ByNameState.create(UnqualifiedName.create(integerIdentifier));
		final TypeProxy typeProxyInteger = TypeProxy.create(integerIdentifier, integerByName);
		
		final ByNameState stringByName = ByNameState.create(UnqualifiedName.create(stringIdentifier));
		final TypeProxy typeProxyString = TypeProxy.create(stringIdentifier, stringByName);
		
		final ByNameState testByName = ByNameState.create(UnqualifiedName.create(testIdentifier));
		final TypeProxy typeProxyTest = TypeProxy.create(testIdentifier, testByName);
		
		final SumType sum1 = SumType.create(this.curlyBracketOpenToken);
		sum1.add(typeProxyInteger);
		sum1.add(typeProxyString);
File Line
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 87
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 525
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 741
		final SimpleScannerInput input = new SimpleScannerInput(stringInput);
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		final Vector<ClassModifier> modifiers = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, GroupToken.create(Position.create("", 1, 1, 0)));
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType clazz =
				RegularClassType.create(
						className,
						modifiers,
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState integerByName = ByNameState.create(UnqualifiedName.create(integerIdentifier));
		final TypeProxy typeProxyInteger = TypeProxy.create(integerIdentifier, integerByName);
		
		final ByNameState stringByName = ByNameState.create(UnqualifiedName.create(stringIdentifier));
		final TypeProxy typeProxyString = TypeProxy.create(stringIdentifier, stringByName);
		
		final ByNameState testByName = ByNameState.create(UnqualifiedName.create(testIdentifier));
		final TypeProxy typeProxyTest = TypeProxy.create(testIdentifier, testByName);
		
		final SumType sum1 = SumType.create(this.curlyBracketOpenToken);
		sum1.add(typeProxyInteger);
		sum1.add(typeProxyString);
File Line
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 59
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 123
						+ "attributeLong: Integer;" + "};" + "];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		final SimpleWalkerTask doubleGroupcomponent = DoubleGroupcomponentCheck.create(model, taskmanager);
		final TypeReferencer referencer = TypeReferencer.create(model, taskmanager);
		final SimpleWalkerTask cyclicInheritance = CyclicInheritanceCheck.create(model, taskmanager);
		final DoubleAttributenameCheck doubleAttributenameCheck = DoubleAttributenameCheck.create(model, taskmanager);
		final GroupDependencyTask inheritanceChecker = GroupDependencyTask.create(taskmanager);
		final SimpleWalkerTask baseTypeInheritanceCheck = BaseTypeInheritanceCheck.create(model, taskmanager);
		
		referencer.addDependency(doubleGroupcomponent);
		baseTypeInheritanceCheck.addDependency(referencer);
		cyclicInheritance.addDependency(referencer);
		inheritanceChecker.addMembers(cyclicInheritance, baseTypeInheritanceCheck);
		
		doubleAttributenameCheck.addDependency(inheritanceChecker);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(6, okResult.size());
		assertEquals(0, failResult.size());
	}
	
	/**
	 * "" + "group1:group=[" + "class1:class={" + "attributelong: Integer;" + "attribute: Integer;" + "};" + "];" .
	 * 
	 * @throws NoValidTokenStreamException
	 *             NoValidTokenStreamException
	 * @throws CyclicDependencyException
	 *             CyclicDependencyException
	 * @throws InterruptedException
	 *             InterruptedException
	 * @throws ExecutionException
	 *             ExecutionException
	 * @throws CyclicPartDefinitionException
	 *             CyclicPartDefinitionException
	 */
	@Test
	public void testDoubleAttributename2() throws InterruptedException, ExecutionException,
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 1023
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 1093
		final ProductType productPrototyp = (ProductType) iterator2.next();
		
		expectedSupertypes = new ArrayList<>();
		final ProductType abstrProductCreated = ProductType.create(DummyToken.getInstance(), DummyToken.getInstance());
		ByReferenceState state = ByReferenceState.create(model.getString(), model.getString().getTypeName());
		TypeProxy typeProxy = TypeProxy.create(DummyToken.getInstance(), state);
		abstrProductCreated.addElement(ProductElementType.create("p$1", typeProxy, DummyToken.getInstance()));
		state = ByReferenceState.create(model.getInteger(), model.getInteger().getTypeName());
		typeProxy = TypeProxy.create(DummyToken.getInstance(), state);
		abstrProductCreated.addElement(ProductElementType.create("p$2", typeProxy, DummyToken.getInstance()));
		state = ByReferenceState.create(clssB, clssB.getName());
		typeProxy = TypeProxy.create(DummyToken.getInstance(), state);
		abstrProductCreated.addElement(ProductElementType.create("p$3", typeProxy, DummyToken.getInstance()));
		final ByReferenceState state2 = ByReferenceState.create(clss, clss.getName());
		final TypeProxy typeProxy2 = TypeProxy.create(DummyToken.getInstance(), state2);
		abstrProductCreated.addElement(ProductElementType.create("p$4", typeProxy2, DummyToken.getInstance()));
		expectedSupertypes.add(abstrProductCreated);
		expectedSupertypes.add(sum);
		expectedSupertypes.add(model.getAnything().getPrototype());
		
		this.checkSupertypes(expectedSupertypes, productPrototyp.getSuperTypes());
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 394
de/fhdw/wtf/parser/test/TestOperations.java 274
		final IdentifierToken myGroup = IdentifierToken.create("MyGroup", Position.create("", 1, 1, 0));
		final IdentifierToken myClass = IdentifierToken.create("MyClass", Position.create("", 1, 1, 0));
		final IdentifierToken myOperation = IdentifierToken.create("MyOperation", Position.create("", 1, 1, 0));
		final IdentifierToken myParameter = IdentifierToken.create("MyParameter", Position.create("", 1, 1, 0));
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myOperation);
		this.stream.add(this.colonToken);
		this.stream.add(this.doubleSquareBracketOpenToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(myParameter);
		this.stream.add(this.colonToken);
		this.stream.add(string);
		this.stream.add(this.arrowToken);
File Line
de/fhdw/wtf/parser/test/TestConstructors.java 1106
de/fhdw/wtf/parser/test/TestConstructors.java 1181
de/fhdw/wtf/parser/test/TestConstructors.java 1253
				new SimpleScannerInput("Group1:group=[A:class={op:[[(s:String)->{}]];s:String;();};];");
		final VerboseTokenStream output = new VerboseTokenStream(SimpleTokenStream.create());
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		
		final IdentifierToken group1IdentifierToken = IdentifierToken.create("Group1", Position.create("", 1, 1, 0));
		final IdentifierToken aIdentifierToken = IdentifierToken.create("A", Position.create("", 1, 1, 0));
		final IdentifierToken sIdentifierToken = IdentifierToken.create("s", Position.create("", 1, 1, 1));
		final IdentifierToken op = IdentifierToken.create("op", Position.create("", 1, 1, 0));
		
		final Vector<GroupElement> group1Vector = new Vector<>();
		final Vector<Constructor> constructors = new Vector<>();
		final Vector<Operation> operations = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name group1Name = UnqualifiedName.create(group1IdentifierToken);
		final Group group1 = Group.create(group1Name, group1Vector, group1IdentifierToken);
		
		final Name aName = group1Name.addName(aIdentifierToken);
		final ClassType aClass =
				RegularClassType.create(
						aName,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						operations,
						constructors,
						aIdentifierToken,
						
						new Vector<ClassType>());
		group1Vector.add(aClass);
		
		final ProductType aProduct = ProductType.create(this.bracketOpenToken);
		final ProductType sProduct = ProductType.create(this.bracketOpenToken);
		
		final TypeProxy stringType =
File Line
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 59
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 123
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 320
						+ "attributeLong: Integer;" + "};" + "];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		final SimpleWalkerTask doubleGroupcomponent = DoubleGroupcomponentCheck.create(model, taskmanager);
		final TypeReferencer referencer = TypeReferencer.create(model, taskmanager);
		final SimpleWalkerTask cyclicInheritance = CyclicInheritanceCheck.create(model, taskmanager);
		final DoubleAttributenameCheck doubleAttributenameCheck = DoubleAttributenameCheck.create(model, taskmanager);
		final GroupDependencyTask inheritanceChecker = GroupDependencyTask.create(taskmanager);
		final SimpleWalkerTask baseTypeInheritanceCheck = BaseTypeInheritanceCheck.create(model, taskmanager);
		
		referencer.addDependency(doubleGroupcomponent);
		baseTypeInheritanceCheck.addDependency(referencer);
		cyclicInheritance.addDependency(referencer);
		inheritanceChecker.addMembers(cyclicInheritance, baseTypeInheritanceCheck);
		
		doubleAttributenameCheck.addDependency(inheritanceChecker);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(6, okResult.size());
		assertEquals(0, failResult.size());
	}
	
	/**
	 * "" + "group1:group=[" + "class1:class={" + "attributelong: Integer;" + "attribute: Integer;" + "};" + "];" .
	 * 
	 * @throws NoValidTokenStreamException
	 *             NoValidTokenStreamException
	 * @throws CyclicDependencyException
	 *             CyclicDependencyException
	 * @throws InterruptedException
	 *             InterruptedException
	 * @throws ExecutionException
	 *             ExecutionException
	 * @throws CyclicPartDefinitionException
	 *             CyclicPartDefinitionException
	 */
	@Test
	public void testDoubleAttributename2() throws InterruptedException, ExecutionException,
File Line
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 256
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 386
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 452
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 517
						+ "class2:class={" + "attribute: Integer;" + "};" + "];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		final SimpleWalkerTask doubleGroupcomponent = DoubleGroupcomponentCheck.create(model, taskmanager);
		final TypeReferencer referencer = TypeReferencer.create(model, taskmanager);
		final SimpleWalkerTask cyclicInheritance = CyclicInheritanceCheck.create(model, taskmanager);
		final DoubleAttributenameCheck doubleAttributenameCheck = DoubleAttributenameCheck.create(model, taskmanager);
		final GroupDependencyTask inheritanceChecker = GroupDependencyTask.create(taskmanager);
		final SimpleWalkerTask baseTypeInheritanceCheck = BaseTypeInheritanceCheck.create(model, taskmanager);
		
		referencer.addDependency(doubleGroupcomponent);
		cyclicInheritance.addDependency(referencer);
		baseTypeInheritanceCheck.addDependency(referencer);
		inheritanceChecker.addMembers(cyclicInheritance, baseTypeInheritanceCheck);
		
		doubleAttributenameCheck.addDependency(inheritanceChecker);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(6, okResult.size());
		assertEquals(0, failResult.size());
	}
	
	/**
	 * group1:group=[class1:class=class2+{attribute: Integer;};class2:class={attribute: Integer;};]; .
	 * 
	 * @throws NoValidTokenStreamException
	 *             NoValidTokenStreamException
	 * @throws CyclicDependencyException
	 *             CyclicDependencyException
	 * @throws InterruptedException
	 *             InterruptedException
	 * @throws ExecutionException
	 *             ExecutionException
	 * @throws CyclicPartDefinitionException
	 *             CyclicPartDefinitionException
	 */
	@Test
	public void testDoubleAttributenameInInheritance1() throws InterruptedException, ExecutionException,
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 2209
de/fhdw/wtf/parser/test/TestAttributes.java 2292
de/fhdw/wtf/parser/test/TestAttributes.java 2385
		this.stream.add(this.stringIdentifier);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(EndToken.create(Position.create("", 1, 1, 0)));
		
		final Model model = Model.create(groupIdentifier);
		final Vector<GroupElement> groupVector = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		model.addGroup(group);
		
		final Name className = groupName.addName(classIdentifier);
		final Collection<Attribute> attributes = new Vector<>();
		final ClassType clazz =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		groupVector.add(clazz);
		
		final ByNameState stringByName = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final TypeProxy typeProxyString = TypeProxy.create(groupIdentifier, stringByName);
		
		final ByNameState integerByName = ByNameState.create(UnqualifiedName.create(this.integerIdentifier));
		final TypeProxy typeProxyInteger = TypeProxy.create(groupIdentifier, integerByName);
		
		final MapType map1 = MapType.create(this.integerIdentifier, typeProxyInteger, typeProxyInteger);
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 2382
de/fhdw/wtf/parser/test/TestAttributes.java 2571
		this.stream.add(trueIdentifier);
		this.stream.add(this.commaToken);
		this.stream.add(falseIdentifier);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(EndToken.create(Position.create("", 1, 1, 0)));
		
		final Model model = Model.create(groupIdentifier);
		final Vector<GroupElement> groupVector = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		model.addGroup(group);
		
		final Name className = groupName.addName(classIdentifier);
		final Collection<Attribute> attributes = new Vector<>();
		final ClassType clazz =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		groupVector.add(clazz);
		
		final ByNameState stringByName = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final TypeProxy typeProxyString = TypeProxy.create(groupIdentifier, stringByName);
		
		final ByNameState integerByName = ByNameState.create(UnqualifiedName.create(this.integerIdentifier));
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 269
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 316
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 426
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 473
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 190
						+ "B:class=A+{}; C:class=A+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final ClassType clss = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		final Iterator<Attribute> attrIterator = clss.getAttributes().iterator();
		final Attribute attr1 = attrIterator.next();
		final Attribute attr2 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		assertEquals(1, supertypesAttr1.size());
		final Iterator<Type> superTypesAttr1Iterator = supertypesAttr1.iterator();
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr1Iterator.next()));
		
		assertEquals(0, ((SumType) attr2.getAttrType()).getSuperTypes().size());
		final Collection<Type> supertypesAttr2 =
				((SumType) ((SumType) attr2.getAttrType()).getPrototype()).getSuperTypes();
		assertEquals(1, supertypesAttr2.size());
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 316
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 235
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 394
						+ "B:class=A+{}; C:class=A+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final ClassType clss = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		final Iterator<Attribute> attrIterator = clss.getAttributes().iterator();
		final Attribute attr1 = attrIterator.next();
		final Attribute attr2 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		assertEquals(1, supertypesAttr1.size());
		final Iterator<Type> superTypesAttr1Iterator = supertypesAttr1.iterator();
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr1Iterator.next()));
		
		assertEquals(0, ((SumType) attr2.getAttrType()).getSuperTypes().size());
		final Collection<Type> supertypesAttr2 =
				((SumType) ((SumType) attr2.getAttrType()).getPrototype()).getSuperTypes();
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 1017
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 928
		this.checkSupertypes(expectedSupertypes, supertypesAttr1);
		
		assertEquals(1, clssA.getSuperTypes().size());
		assertEquals(1, clssB.getSuperTypes().size());
		assertEquals(1, model.getString().getSuperTypes().size());
		assertEquals(1, model.getInteger().getSuperTypes().size());
		
	}
	
	/**
	 * Group:group=[A:class={Attribute1:(p1:String, p2: Integer, p3:B, p4:Class);}; B:class=A+{}; C:class=B+{};
	 * D:class=B+{}; Class:class={};]; .
	 * 
	 * @throws Exception
	 *             Exception
	 */
	@Test
	public void testProductHierarchie2() throws Exception {
		final SimpleScannerInput input =
				new SimpleScannerInput(
						"Group:group=[A:class={Attribute1:(p1:String, p2: Integer, p3:B, p4:Class);}; B:class=A+{}; C:class=B+{}; "
								+ "D:class=B+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final Iterator<GroupElement> iterator = model.getGroups().iterator().next().getGroupElements().iterator();
		final ClassType clssA = (ClassType) iterator.next();
		final ClassType clssB = (ClassType) iterator.next();
		
		final Iterator<Attribute> attrIterator = clssA.getAttributes().iterator();
		
		final Attribute attr1 = attrIterator.next();
		
		assertEquals(0, attr1.getAttrType().getSuperTypes().size());
		final Type attr1Type = attr1.getAttrType().getPrototype();
		final Collection<Type> supertypesAttr1 = attr1Type.getSuperTypes();
		
		final Collection<Type> expectedSupertypes = new ArrayList<>();
		expectedSupertypes.add(((ProductType) attr1Type).getAbstractPrototype());
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 1018
de/fhdw/wtf/parser/test/TestAttributes.java 1794
		this.stream.add(this.integerIdentifier);
		this.stream.add(this.asteriskToken);
		this.stream.add(this.arrowToken);
		this.stream.add(this.stringIdentifier);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType classModel =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState stringReferenceState = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final TypeProxy stringType = TypeProxy.create(this.stringIdentifier, stringReferenceState);
		final ByNameState integerReferenceState = ByNameState.create(UnqualifiedName.create(this.integerIdentifier));
		final TypeProxy integerType = TypeProxy.create(this.integerIdentifier, integerReferenceState);
		
		final ListType list = ListType.create(this.integerIdentifier, integerType);
File Line
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 256
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 386
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 452
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 517
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 583
						+ "class2:class={" + "attribute: Integer;" + "};" + "];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		final SimpleWalkerTask doubleGroupcomponent = DoubleGroupcomponentCheck.create(model, taskmanager);
		final TypeReferencer referencer = TypeReferencer.create(model, taskmanager);
		final SimpleWalkerTask cyclicInheritance = CyclicInheritanceCheck.create(model, taskmanager);
		final DoubleAttributenameCheck doubleAttributenameCheck = DoubleAttributenameCheck.create(model, taskmanager);
		final GroupDependencyTask inheritanceChecker = GroupDependencyTask.create(taskmanager);
		final SimpleWalkerTask baseTypeInheritanceCheck = BaseTypeInheritanceCheck.create(model, taskmanager);
		
		referencer.addDependency(doubleGroupcomponent);
		cyclicInheritance.addDependency(referencer);
		baseTypeInheritanceCheck.addDependency(referencer);
		inheritanceChecker.addMembers(cyclicInheritance, baseTypeInheritanceCheck);
		
		doubleAttributenameCheck.addDependency(inheritanceChecker);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(6, okResult.size());
		assertEquals(0, failResult.size());
	}
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 222
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 473
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 190
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 235
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 394
						+ "Attribute2:{String,Integer};};" + "Class2:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final ClassType clss = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		final Iterator<Attribute> attrIterator = clss.getAttributes().iterator();
		final Attribute attr1 = attrIterator.next();
		final Attribute attr2 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		assertEquals(1, supertypesAttr1.size());
		final Iterator<Type> superTypesAttr1Iterator = supertypesAttr1.iterator();
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr1Iterator.next()));
		
		assertEquals(0, ((SumType) attr2.getAttrType()).getSuperTypes().size());
		final Collection<Type> supertypesAttr2 =
				((SumType) ((SumType) attr2.getAttrType()).getPrototype()).getSuperTypes();
File Line
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1608
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 2060
		actualSum.add(TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(a))));
		actualSum.add(ThrownType.create(
				dummyToken,
				TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(b)))));
		
		final List<Type> standardizeElements = actualSum.standardize().accept(new TypeVisitorReturn<List<Type>>() {
			
			@Override
			public List<Type> handle(final AtomicType atomicType) {
				return new ArrayList<>();
			}
			
			@Override
			public List<Type> handle(final CompositeType compositeType) {
				return compositeType.accept(new CompositeTypeVisitorReturn<List<Type>>() {
					
					@Override
					public List<Type> handle(final ListType list) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final MapType map) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final ProductType product) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final SumType sum2) {
						return sum2.getElements();
					}
					
					@Override
					public List<Type> handle(final ThrownType thrownType) {
						return new ArrayList<>();
					}
				});
			}
			
			@Override
			public List<Type> handle(final TypeProxy typeProxy) {
				return new ArrayList<>();
			}
		});
		
		// Prepare Expected
		final SumType expectedSum = SumType.create(dummyToken);
		expectedSum.add(TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(a))));
File Line
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1533
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 2063
		actualSum.add(TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(b))));
		
		final List<Type> standardizeElements = actualSum.standardize().accept(new TypeVisitorReturn<List<Type>>() {
			
			@Override
			public List<Type> handle(final AtomicType atomicType) {
				return new ArrayList<>();
			}
			
			@Override
			public List<Type> handle(final CompositeType compositeType) {
				return compositeType.accept(new CompositeTypeVisitorReturn<List<Type>>() {
					
					@Override
					public List<Type> handle(final ListType list) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final MapType map) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final ProductType product) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final SumType sum2) {
						return sum2.getElements();
					}
					
					@Override
					public List<Type> handle(final ThrownType thrownType) {
						return new ArrayList<>();
					}
				});
			}
			
			@Override
			public List<Type> handle(final TypeProxy typeProxy) {
				return new ArrayList<>();
			}
		});
		
		// Prepare Expected
		final SumType expectedSum = SumType.create(dummyToken);
		expectedSum.add(TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(b))));
		expectedSum.add(ThrownType.create(
				dummyToken,
				TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(a)))));
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 156
de/fhdw/wtf/parser/test/TestOperations.java 173
		this.colonToken = ColonToken.create(Position.create("", 1, 1, 0));
		this.groupToken = GroupToken.create(Position.create("", 1, 1, 0));
		this.equalToken = EqualToken.create(Position.create("", 1, 1, 0));
		this.squareBracketOpenToken = SquareBracketOpenToken.create(Position.create("", 1, 1, 0));
		this.squareBracketCloseToken = SquareBracketCloseToken.create(Position.create("", 1, 1, 0));
		this.bracketOpenToken = BracketOpenToken.create(Position.create("", 1, 1, 0));
		this.bracketCloseToken = BracketCloseToken.create(Position.create("", 1, 1, 0));
		this.semicolonToken = SemicolonToken.create(Position.create("", 1, 1, 0));
		this.classToken = ClassToken.create(Position.create("", 1, 1, 0));
		this.curlyBracketOpenToken = CurlyBracketOpenToken.create(Position.create("", 1, 1, 0));
		this.curlyBracketCloseToken = CurlyBracketCloseToken.create(Position.create("", 1, 1, 0));
		this.endToken = EndToken.create(Position.create("", 1, 1, 0));
		this.abstractToken = AbstractToken.create(Position.create("", 1, 1, 0));
		this.commaToken = CommaToken.create(Position.create("", 1, 1, 0));
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 671
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 650
		this.checkSupertypes(expectedSupertypes, model.getString().getPrototype().getSuperTypes());
	}
	
	/**
	 * Group:group=[A:class={Attribute1:{}; Attribute2:{String,A,Anything}; Attribute3:{Integer,String};}; B:class=A+{};
	 * C:class=A+{}; Class:class={};]; .
	 * 
	 * @throws Exception
	 *             Exception
	 */
	@Test
	public void testEmptySum2() throws Exception {
		final SimpleScannerInput input =
				new SimpleScannerInput(" Group:group=[A:class={Attribute1:{}; Attribute2:{String,A,Anything}; "
						+ "Attribute3:{Integer,String};}; B:class=A+{}; C:class=A+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final Iterator<GroupElement> iterator = model.getGroups().iterator().next().getGroupElements().iterator();
		
		final ClassType clssA = (ClassType) iterator.next();
		final ClassType clssB = (ClassType) iterator.next();
		final ClassType clssC = (ClassType) iterator.next();
		final ClassType clssClass = (ClassType) iterator.next();
		
		final Iterator<Attribute> attrIterator = clssA.getAttributes().iterator();
		final Attribute attr1 = attrIterator.next();
		final Attribute attr2 = attrIterator.next();
		final Attribute attr3 = attrIterator.next();
		
		final Type attr3Type = ((SumType) attr3.getAttrType()).getPrototype();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
File Line
de/fhdw/wtf/parser/test/TestModels.java 122
de/fhdw/wtf/parser/test/TestModels.java 198
		stream.add(this.squareBracketOpenToken);
		stream.add(class1Identifier);
		stream.add(this.colonToken);
		stream.add(this.classToken);
		stream.add(this.equalToken);
		stream.add(this.curlyBracketOpenToken);
		stream.add(this.curlyBracketCloseToken);
		stream.add(this.semicolonToken);
		stream.add(this.squareBracketCloseToken);
		stream.add(this.semicolonToken);
		stream.add(group2Identifier);
		stream.add(this.colonToken);
		stream.add(this.groupToken);
		stream.add(this.equalToken);
		stream.add(this.squareBracketOpenToken);
		stream.add(class2Identifier);
		stream.add(this.colonToken);
		stream.add(this.classToken);
		stream.add(this.equalToken);
		stream.add(this.curlyBracketOpenToken);
		stream.add(this.curlyBracketCloseToken);
		stream.add(this.semicolonToken);
		stream.add(class3Identifier);
		stream.add(this.colonToken);
		stream.add(this.classToken);
		stream.add(this.equalToken);
		stream.add(this.curlyBracketOpenToken);
		stream.add(this.curlyBracketCloseToken);
		stream.add(this.semicolonToken);
		stream.add(this.squareBracketCloseToken);
		stream.add(this.semicolonToken);
		stream.add(this.endToken);
		
		final Model model = parser.parse();
		final Tuple<Collection<ClassType>, Collection<Group>> groupsClasses = model.calcAllGroupsAndClasses();
		assertEquals(3, groupsClasses.getFirst().size());
File Line
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 87
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 525
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 625
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 741
		final SimpleScannerInput input = new SimpleScannerInput(stringInput);
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		final Vector<ClassModifier> modifiers = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, GroupToken.create(Position.create("", 1, 1, 0)));
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType clazz =
				RegularClassType.create(
						className,
						modifiers,
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState integerByName = ByNameState.create(UnqualifiedName.create(integerIdentifier));
		final TypeProxy typeProxyInteger = TypeProxy.create(integerIdentifier, integerByName);
		
		final ByNameState stringByName = ByNameState.create(UnqualifiedName.create(stringIdentifier));
		final TypeProxy typeProxyString = TypeProxy.create(stringIdentifier, stringByName);
		
		final ByNameState testByName = ByNameState.create(UnqualifiedName.create(testIdentifier));
		final TypeProxy typeProxyTest = TypeProxy.create(testIdentifier, testByName);
		
		final SumType sum1 = SumType.create(this.curlyBracketOpenToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 159
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 327
						"Group:group=[Klasse:class={operation : [[(parameter:Integer) -> String ]] abstract;}; Klasse2:class={operation : [[(parameter:Integer) -> String ]] abstract;}abstract;];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		Model model = null;
		model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		AbstractOperationsCheck.create(model, taskmanager);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(0, okResult.size());
		assertEquals(1, failResult.size());
		
		final Exception exception = failResult.iterator().next().getError();
		if (exception instanceof AbstractOperationsException) {
			final AbstractOperationsException ex = (AbstractOperationsException) exception;
			assertEquals(Position.create("", 1, 28, 27), ex.getStartPosition());
			assertEquals(Position.create("", 1, 84, 83), ex.getEndPos());
		} else {
			fail();
		}
	}
	
	/**
	 * Group:group=[Klasse:class={operation : [[(parameter:Integer) -> String ]] ;}; Klasse2:class={operation :
	 * [[(parameter:Integer) -> String ]] abstract;};]; .
	 * 
	 * @throws InterruptedException
	 * @throws ExecutionException
	 * @throws NoValidTokenStreamException
	 * @throws CyclicDependencyException
	 */
	@Test
	public void testAbstractOperationInNotAbstractClass4() throws InterruptedException, ExecutionException,
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 1110
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 1179
		final ProductType productPrototyp = (ProductType) iterator2.next();
		
		expectedSupertypes = new ArrayList<>();
		final ProductType abstrProductCreated = ProductType.create(DummyToken.getInstance(), DummyToken.getInstance());
		ByReferenceState state = ByReferenceState.create(model.getString(), model.getString().getTypeName());
		TypeProxy typeProxy = TypeProxy.create(DummyToken.getInstance(), state);
		abstrProductCreated.addElement(ProductElementType.create("p$1", typeProxy, DummyToken.getInstance()));
		state = ByReferenceState.create(model.getInteger(), model.getInteger().getTypeName());
		typeProxy = TypeProxy.create(DummyToken.getInstance(), state);
		abstrProductCreated.addElement(ProductElementType.create("p$2", typeProxy, DummyToken.getInstance()));
		state = ByReferenceState.create(clssB, clssB.getName());
		typeProxy = TypeProxy.create(DummyToken.getInstance(), state);
		abstrProductCreated.addElement(ProductElementType.create("p$3", typeProxy, DummyToken.getInstance()));
		final ByReferenceState state2 = ByReferenceState.create(clss, clss.getName());
		final TypeProxy typeProxy2 = TypeProxy.create(DummyToken.getInstance(), state2);
		abstrProductCreated.addElement(ProductElementType.create("p$4", typeProxy2, DummyToken.getInstance()));
		expectedSupertypes.add(abstrProductCreated);
		expectedSupertypes.add(sum);
		
		this.checkSupertypes(expectedSupertypes, productPrototyp.getSuperTypes());
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 179
de/fhdw/wtf/parser/test/TestExceptions.java 333
de/fhdw/wtf/parser/test/TestExceptions.java 391
de/fhdw/wtf/parser/test/TestExceptions.java 446
de/fhdw/wtf/parser/test/TestExceptions.java 659
de/fhdw/wtf/parser/test/TestExceptions.java 777
de/fhdw/wtf/parser/test/TestExceptions.java 1058
	public void testNoArrowException() {
		this.stream = SimpleTokenStream.create();
		this.parser = Parser.create(this.stream);
		final IdentifierToken myGroup = IdentifierToken.create("MyGroup", Position.create("", 1, 1, 0));
		final IdentifierToken myClass = IdentifierToken.create("MyClass", Position.create("", 1, 1, 0));
		final IdentifierToken myOperation = IdentifierToken.create("MyOperation", Position.create("", 1, 1, 0));
		final IdentifierToken myParameter = IdentifierToken.create("MyParameter", Position.create("", 1, 1, 0));
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myOperation);
		this.stream.add(this.colonToken);
		this.stream.add(this.doubleSquareBracketOpenToken);
		this.stream.add(this.bracketOpenToken);
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 944
de/fhdw/wtf/parser/test/TestAttributes.java 1019
de/fhdw/wtf/parser/test/TestAttributes.java 1704
de/fhdw/wtf/parser/test/TestAttributes.java 1795
		this.stream.add(this.integerIdentifier);
		this.stream.add(this.arrowToken);
		this.stream.add(this.stringIdentifier);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType classModel =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState stringReferenceState = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final TypeProxy stringType = TypeProxy.create(this.stringIdentifier, stringReferenceState);
		final ByNameState integerReferenceState = ByNameState.create(UnqualifiedName.create(this.integerIdentifier));
		final TypeProxy integerType = TypeProxy.create(this.integerIdentifier, integerReferenceState);
		
		final MapType map = MapType.create(this.integerIdentifier, integerType, stringType);
File Line
de/fhdw/wtf/walker/tasks/test/TestBaseTypeInheritanceCheck.java 52
de/fhdw/wtf/walker/tasks/test/TestBaseTypeInheritanceCheck.java 110
		final SimpleScannerInput input = new SimpleScannerInput("personGroup:group=[Person:class=Integer+{};];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		final SimpleWalkerTask referencer = TypeReferencer.create(model, taskmanager);
		final SimpleWalkerTask baseTypeInheritanceCheck = BaseTypeInheritanceCheck.create(model, taskmanager);
		baseTypeInheritanceCheck.addDependency(referencer);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(1, okResult.size());
		assertEquals(1, failResult.size());
		
		final Exception exception = failResult.iterator().next().getError();
		if (exception instanceof BaseTypeInheritanceException) {
			final BaseTypeInheritanceException ex = (BaseTypeInheritanceException) exception;
			assertEquals(Position.create("", 1, 33, 32), ex.getStartPosition());
			assertEquals(Position.create("", 1, 40, 39), ex.getEndPos());
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 1077
de/fhdw/wtf/parser/test/TestAttributes.java 1154
	public void testAttributeWithListOfMap() throws Exception {
		final IdentifierToken groupIdentifier = IdentifierToken.create("Group", Position.create("", 1, 1, 0));
		final IdentifierToken classIdentifier = IdentifierToken.create("Class", Position.create("", 1, 1, 0));
		final IdentifierToken attributeIdentifier = IdentifierToken.create("Attribute", Position.create("", 1, 1, 0));
		
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.integerIdentifier);
		this.stream.add(this.arrowToken);
		this.stream.add(this.stringIdentifier);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.asteriskToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 1877
de/fhdw/wtf/parser/test/TestAttributes.java 1948
		this.stream.add(PriorToken.create(Position.create("", 0 + 1, 0 + 1, 0)));
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType classModel =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState attributeReferenceState = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final TypeProxy type = TypeProxy.create(this.stringIdentifier, attributeReferenceState);
		
		final Vector<AttributeModifier> modifiers = new Vector<>();
		modifiers.add(AttributeModifierPrior.create(PriorToken.create(Position.create("", 0, 0, 0))));
File Line
de/fhdw/wtf/parser/test/TestOperations.java 200
de/fhdw/wtf/parser/test/TestOperations.java 798
	public void testSimpleOperationWithoutParameters() throws Exception {
		final IdentifierToken myGroup = IdentifierToken.create("MyGroup", Position.create("", 1, 1, 0));
		final IdentifierToken myClass = IdentifierToken.create("MyClass", Position.create("", 1, 1, 0));
		final IdentifierToken myOperation = IdentifierToken.create("MyOperation", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myOperation);
		this.stream.add(this.colonToken);
		this.stream.add(this.doubleSquareBracketOpenToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.arrowToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.doubleSquareBracketCloseToken);
		this.stream.add(this.semicolonToken);
File Line
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 87
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 425
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 525
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 625
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 741
		final SimpleScannerInput input = new SimpleScannerInput(stringInput);
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		final Vector<ClassModifier> modifiers = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, GroupToken.create(Position.create("", 1, 1, 0)));
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType clazz =
				RegularClassType.create(
						className,
						modifiers,
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState integerByName = ByNameState.create(UnqualifiedName.create(integerIdentifier));
		final TypeProxy typeProxyInteger = TypeProxy.create(integerIdentifier, integerByName);
		
		final ByNameState stringByName = ByNameState.create(UnqualifiedName.create(stringIdentifier));
		final TypeProxy typeProxyString = TypeProxy.create(stringIdentifier, stringByName);
		
		final ByNameState testByName = ByNameState.create(UnqualifiedName.create(testIdentifier));
		final TypeProxy typeProxyTest = TypeProxy.create(testIdentifier, testByName);
		
		final SumType sum1 = SumType.create(this.curlyBracketOpenToken);
File Line
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 87
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 320
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 425
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 525
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 625
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 741
		final SimpleScannerInput input = new SimpleScannerInput(stringInput);
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		final Vector<ClassModifier> modifiers = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, GroupToken.create(Position.create("", 1, 1, 0)));
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType clazz =
				RegularClassType.create(
						className,
						modifiers,
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState integerByName = ByNameState.create(UnqualifiedName.create(integerIdentifier));
		final TypeProxy typeProxyInteger = TypeProxy.create(integerIdentifier, integerByName);
		
		final ByNameState stringByName = ByNameState.create(UnqualifiedName.create(stringIdentifier));
		final TypeProxy typeProxyString = TypeProxy.create(stringIdentifier, stringByName);
		
		final ByNameState testByName = ByNameState.create(UnqualifiedName.create(testIdentifier));
		final TypeProxy typeProxyTest = TypeProxy.create(testIdentifier, testByName);
		
		final SumType sum1 = SumType.create(this.curlyBracketOpenToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 187
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 256
						+ "attribute: Integer;" + "};" + "];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		final SimpleWalkerTask doubleGroupcomponent = DoubleGroupcomponentCheck.create(model, taskmanager);
		final TypeReferencer referencer = TypeReferencer.create(model, taskmanager);
		final SimpleWalkerTask cyclicInheritance = CyclicInheritanceCheck.create(model, taskmanager);
		final DoubleAttributenameCheck doubleAttributenameCheck = DoubleAttributenameCheck.create(model, taskmanager);
		final GroupDependencyTask inheritanceChecker = GroupDependencyTask.create(taskmanager);
		final SimpleWalkerTask baseTypeInheritanceCheck = BaseTypeInheritanceCheck.create(model, taskmanager);
		
		referencer.addDependency(doubleGroupcomponent);
		cyclicInheritance.addDependency(referencer);
		baseTypeInheritanceCheck.addDependency(referencer);
		inheritanceChecker.addMembers(cyclicInheritance, baseTypeInheritanceCheck);
		
		doubleAttributenameCheck.addDependency(inheritanceChecker);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(5, okResult.size());
File Line
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1608
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1688
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 2060
		actualSum.add(TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(a))));
		actualSum.add(ThrownType.create(
				dummyToken,
				TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(b)))));
		
		final List<Type> standardizeElements = actualSum.standardize().accept(new TypeVisitorReturn<List<Type>>() {
			
			@Override
			public List<Type> handle(final AtomicType atomicType) {
				return new ArrayList<>();
			}
			
			@Override
			public List<Type> handle(final CompositeType compositeType) {
				return compositeType.accept(new CompositeTypeVisitorReturn<List<Type>>() {
					
					@Override
					public List<Type> handle(final ListType list) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final MapType map) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final ProductType product) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final SumType sum2) {
						return sum2.getElements();
					}
					
					@Override
					public List<Type> handle(final ThrownType thrownType) {
						return new ArrayList<>();
					}
				});
			}
			
			@Override
			public List<Type> handle(final TypeProxy typeProxy) {
				return new ArrayList<>();
			}
		});
		
		// Prepare Expected
		final SumType expectedSum = SumType.create(dummyToken);
		expectedSum.add(TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(a))));
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 2291
de/fhdw/wtf/parser/test/TestAttributes.java 2481
de/fhdw/wtf/parser/test/TestAttributes.java 2573
		this.stream.add(this.stringIdentifier);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(EndToken.create(Position.create("", 1, 1, 0)));
		
		final Model model = Model.create(groupIdentifier);
		final Vector<GroupElement> groupVector = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		model.addGroup(group);
		
		final Name className = groupName.addName(classIdentifier);
		final Collection<Attribute> attributes = new Vector<>();
		final ClassType clazz =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		groupVector.add(clazz);
		
		final ByNameState stringByName = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final TypeProxy typeProxyString = TypeProxy.create(groupIdentifier, stringByName);
		
		final ByNameState integerByName = ByNameState.create(UnqualifiedName.create(this.integerIdentifier));
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 2455
de/fhdw/wtf/parser/test/TestAttributes.java 2545
	public void testListAsKey() throws Exception {
		final IdentifierToken groupIdentifier = IdentifierToken.create("Group", Position.create("", 1, 1, 0));
		final IdentifierToken classIdentifier = IdentifierToken.create("Class", Position.create("", 1, 1, 0));
		final IdentifierToken attributeIdentifier = IdentifierToken.create("Attribute", Position.create("", 1, 1, 0));
		final IdentifierToken trueIdentifier = IdentifierToken.create("true", Position.create("", 1, 1, 0));
		final IdentifierToken falseIdentifier = IdentifierToken.create("false", Position.create("", 1, 1, 0));
		
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.stringIdentifier);
		this.stream.add(this.asteriskToken);
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 832
de/fhdw/wtf/parser/test/TestExceptions.java 1230
	public void testNoCurlyBracketCloseExceptionSum() {
		this.stream = SimpleTokenStream.create();
		this.parser = Parser.create(this.stream);
		final IdentifierToken myGroup = IdentifierToken.create("MyGroup", Position.create("", 1, 1, 0));
		final IdentifierToken myClass = IdentifierToken.create("MyClass", Position.create("", 1, 1, 0));
		final IdentifierToken myAttribute = IdentifierToken.create("MyAttribute", Position.create("", 1, 1, 0));
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		final IdentifierToken integer = IdentifierToken.create("Integer", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myAttribute);
		this.stream.add(this.colonToken);
		this.stream.add(this.curlyBracketOpenToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 187
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 386
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 452
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 517
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 583
						+ "attribute: Integer;" + "};" + "];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		final SimpleWalkerTask doubleGroupcomponent = DoubleGroupcomponentCheck.create(model, taskmanager);
		final TypeReferencer referencer = TypeReferencer.create(model, taskmanager);
		final SimpleWalkerTask cyclicInheritance = CyclicInheritanceCheck.create(model, taskmanager);
		final DoubleAttributenameCheck doubleAttributenameCheck = DoubleAttributenameCheck.create(model, taskmanager);
		final GroupDependencyTask inheritanceChecker = GroupDependencyTask.create(taskmanager);
		final SimpleWalkerTask baseTypeInheritanceCheck = BaseTypeInheritanceCheck.create(model, taskmanager);
		
		referencer.addDependency(doubleGroupcomponent);
		cyclicInheritance.addDependency(referencer);
		baseTypeInheritanceCheck.addDependency(referencer);
		inheritanceChecker.addMembers(cyclicInheritance, baseTypeInheritanceCheck);
		
		doubleAttributenameCheck.addDependency(inheritanceChecker);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(5, okResult.size());
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 1110
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 1093
		final ProductType productPrototyp = (ProductType) iterator2.next();
		
		expectedSupertypes = new ArrayList<>();
		final ProductType abstrProductCreated = ProductType.create(DummyToken.getInstance(), DummyToken.getInstance());
		ByReferenceState state = ByReferenceState.create(model.getString(), model.getString().getTypeName());
		TypeProxy typeProxy = TypeProxy.create(DummyToken.getInstance(), state);
		abstrProductCreated.addElement(ProductElementType.create("p$1", typeProxy, DummyToken.getInstance()));
		state = ByReferenceState.create(model.getInteger(), model.getInteger().getTypeName());
		typeProxy = TypeProxy.create(DummyToken.getInstance(), state);
		abstrProductCreated.addElement(ProductElementType.create("p$2", typeProxy, DummyToken.getInstance()));
		state = ByReferenceState.create(clssB, clssB.getName());
		typeProxy = TypeProxy.create(DummyToken.getInstance(), state);
		abstrProductCreated.addElement(ProductElementType.create("p$3", typeProxy, DummyToken.getInstance()));
		final ByReferenceState state2 = ByReferenceState.create(clss, clss.getName());
		final TypeProxy typeProxy2 = TypeProxy.create(DummyToken.getInstance(), state2);
		abstrProductCreated.addElement(ProductElementType.create("p$4", typeProxy2, DummyToken.getInstance()));
		expectedSupertypes.add(abstrProductCreated);
		expectedSupertypes.add(sum);
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 1179
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 1023
		final ProductType productPrototyp2 = (ProductType) iterator2.next();
		
		expectedSupertypes = new ArrayList<>();
		final ProductType abstrProductCreated = ProductType.create(DummyToken.getInstance(), DummyToken.getInstance());
		ByReferenceState state = ByReferenceState.create(model.getString(), model.getString().getTypeName());
		TypeProxy typeProxy = TypeProxy.create(DummyToken.getInstance(), state);
		abstrProductCreated.addElement(ProductElementType.create("p$1", typeProxy, DummyToken.getInstance()));
		state = ByReferenceState.create(model.getInteger(), model.getInteger().getTypeName());
		typeProxy = TypeProxy.create(DummyToken.getInstance(), state);
		abstrProductCreated.addElement(ProductElementType.create("p$2", typeProxy, DummyToken.getInstance()));
		state = ByReferenceState.create(clssB, clssB.getName());
		typeProxy = TypeProxy.create(DummyToken.getInstance(), state);
		abstrProductCreated.addElement(ProductElementType.create("p$3", typeProxy, DummyToken.getInstance()));
		final ByReferenceState state2 = ByReferenceState.create(clss, clss.getName());
		final TypeProxy typeProxy2 = TypeProxy.create(DummyToken.getInstance(), state2);
		abstrProductCreated.addElement(ProductElementType.create("p$4", typeProxy2, DummyToken.getInstance()));
		expectedSupertypes.add(abstrProductCreated);
		expectedSupertypes.add(sum);
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 1097
de/fhdw/wtf/parser/test/TestAttributes.java 1518
		this.stream.add(this.stringIdentifier);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.asteriskToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType classModel =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState stringReferenceState = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final TypeProxy stringType = TypeProxy.create(this.stringIdentifier, stringReferenceState);
		final ByNameState integerReferenceState = ByNameState.create(UnqualifiedName.create(this.integerIdentifier));
		final TypeProxy integerType = TypeProxy.create(this.integerIdentifier, integerReferenceState);
		
		final MapType map = MapType.create(this.integerIdentifier, integerType, stringType);
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 1079
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 1148
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 992
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 1062
								+ "D:class=B+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final Iterator<GroupElement> iterator = model.getGroups().iterator().next().getGroupElements().iterator();
		final ClassType clssA = (ClassType) iterator.next();
		final ClassType clssB = (ClassType) iterator.next();
		iterator.next();
		iterator.next();
		final ClassType clss = (ClassType) iterator.next();
		
		final Iterator<Attribute> attrIterator = clssA.getAttributes().iterator();
		
		final Attribute attr1 = attrIterator.next();
		
		// Summe
		assertEquals(0, attr1.getAttrType().getSuperTypes().size());
		final Type attr1Type = attr1.getAttrType().getPrototype();
		final Collection<Type> supertypesAttr1 = attr1Type.getSuperTypes();
		
		Collection<Type> expectedSupertypes = new ArrayList<>();
		expectedSupertypes.add(model.getAnything().getPrototype());
		
		this.checkSupertypes(expectedSupertypes, supertypesAttr1);
		
		// Product
		final SumType sum = (SumType) attr1Type;
		final Iterator<Type> iterator2 = sum.getElements().iterator();
File Line
de/fhdw/wtf/walker/tasks/test/TestTypeReferencer.java 505
de/fhdw/wtf/walker/tasks/test/TestTypeReferencer.java 682
		class21SuperTypes.add(class21SuperTypeReference);
		final ByReferenceState class211AttributeTypeReferenceState =
				ByReferenceState.create(class121, class121.getTypeName());
		final TypeProxy class211AttributeTypeReference =
				TypeProxy.create(class121IdentifierToken, class211AttributeTypeReferenceState);
		final IdentifierToken class211AttributeTypeIdentifier =
				IdentifierToken.create("", Position.create("", 0 + 1, 0 + 1, 0));
		final IdentifierToken class211AttributeIdentifier =
				IdentifierToken.create("classa", Position.create("", 0 + 1, 0 + 1, 0));
		final Attribute class211Attribute =
				Attribute.create(
						"classa",
						class211AttributeTypeReference,
						new Vector<AttributeModifier>(),
						class211AttributeIdentifier);
		class211Attributes.add(class211Attribute);
		final IdentifierToken group211IdentifierToken =
				IdentifierToken.create("Group1", Position.create("", 0 + 1, 0 + 1, 0));
		final Name group211Name = group21Name.addName(group211IdentifierToken);
		final Collection<GroupElement> group211Elements = new Vector<>();
		final Group group211 = Group.create(group211Name, group211Elements, group211IdentifierToken);
		group21Elements.add(group211);
		final IdentifierToken class2111IdentifierToken =
				IdentifierToken.create("Class1", Position.create("", 0 + 1, 0 + 1, 0));
		final Name class2111Name = group211Name.addName(class2111IdentifierToken);
		final Collection<ClassModifier> class2111Modifiers = new Vector<>();
		final Collection<Attribute> class2111Attributes = new Vector<>();
		final List<Type> class2111SuperTypes = new Vector<>();
		final Collection<Operation> class2111Operations = new Vector<>();
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 947
de/fhdw/wtf/parser/test/TestAttributes.java 1099
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType classModel =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState stringReferenceState = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final TypeProxy stringType = TypeProxy.create(this.stringIdentifier, stringReferenceState);
		final ByNameState integerReferenceState = ByNameState.create(UnqualifiedName.create(this.integerIdentifier));
		final TypeProxy integerType = TypeProxy.create(this.integerIdentifier, integerReferenceState);
		
		final MapType map = MapType.create(this.integerIdentifier, integerType, stringType);
		
		final Attribute attribute =
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 1199
de/fhdw/wtf/parser/test/TestAttributes.java 1288
de/fhdw/wtf/parser/test/TestAttributes.java 1489
de/fhdw/wtf/parser/test/TestAttributes.java 1580
de/fhdw/wtf/parser/test/TestAttributes.java 1673
de/fhdw/wtf/parser/test/TestAttributes.java 1767
	public void testAttributeWithMapOnProduct() throws Exception {
		final IdentifierToken groupIdentifier = IdentifierToken.create("Group", Position.create("", 1, 1, 0));
		final IdentifierToken classIdentifier = IdentifierToken.create("Class", Position.create("", 1, 1, 0));
		final IdentifierToken attributeIdentifier = IdentifierToken.create("Attribute", Position.create("", 1, 1, 0));
		final IdentifierToken nameIdentifier = IdentifierToken.create("name", Position.create("", 1, 1, 0));
		final IdentifierToken countIdentifier = IdentifierToken.create("count", Position.create("", 1, 1, 0));
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.stringIdentifier);
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 2209
de/fhdw/wtf/parser/test/TestAttributes.java 2482
de/fhdw/wtf/parser/test/TestAttributes.java 2574
		this.stream.add(this.stringIdentifier);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(EndToken.create(Position.create("", 1, 1, 0)));
		
		final Model model = Model.create(groupIdentifier);
		final Vector<GroupElement> groupVector = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		model.addGroup(group);
		
		final Name className = groupName.addName(classIdentifier);
		final Collection<Attribute> attributes = new Vector<>();
		final ClassType clazz =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		groupVector.add(clazz);
		
		final ByNameState stringByName = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final TypeProxy typeProxyString = TypeProxy.create(groupIdentifier, stringByName);
		
		final ByNameState integerByName = ByNameState.create(UnqualifiedName.create(this.integerIdentifier));
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 555
de/fhdw/wtf/parser/test/TestExceptions.java 606
		final IdentifierToken myClass = IdentifierToken.create("MyClass", Position.create("", 1, 1, 0));
		final IdentifierToken myAttribute = IdentifierToken.create("MyAttribute", Position.create("", 1, 1, 0));
		final IdentifierToken name = IdentifierToken.create("name", Position.create("", 1, 1, 0));
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myAttribute);
		this.stream.add(this.colonToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(name);
		this.stream.add(this.colonToken);
		this.stream.add(string);
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.curlyBracketCloseToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 166
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 283
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 332
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 381
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 430
						+ "NaturalPerson:class=Person+{}; CorporateBody:class=Person+{};];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		final SimpleWalkerTask referencer = TypeReferencer.create(model, taskmanager);
		final SimpleWalkerTask cyclicInheritance = CyclicInheritanceCheck.create(model, taskmanager);
		cyclicInheritance.addDependency(referencer);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<OKTaskResult>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<ExceptionalTaskResult>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(1, okResult.size());
		assertEquals(1, failResult.size());
		
		final Exception exception = failResult.iterator().next().getError();
		if (exception instanceof CyclicInheritanceException) {
			final CyclicInheritanceException ex = (CyclicInheritanceException) exception;
			assertEquals(Position.create("", 1, 92, 91), ex.getStartPosition());
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 668
de/fhdw/wtf/parser/test/TestAttributes.java 754
	public void testAttributeWithListOnProduct() throws Exception {
		final IdentifierToken groupIdentifier = IdentifierToken.create("Group", Position.create("", 1, 1, 0));
		final IdentifierToken classIdentifier = IdentifierToken.create("Class", Position.create("", 1, 1, 0));
		final IdentifierToken attributeIdentifier = IdentifierToken.create("Attribute", Position.create("", 1, 1, 0));
		final IdentifierToken nameIdentifier = IdentifierToken.create("name", Position.create("", 1, 1, 0));
		final IdentifierToken countIdentifier = IdentifierToken.create("count", Position.create("", 1, 1, 0));
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(nameIdentifier);
File Line
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 39
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 166
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 283
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 332
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 381
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 430
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 559
						+ "CorporateBody:class=Person+{};];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		final SimpleWalkerTask referencer = TypeReferencer.create(model, taskmanager);
		final SimpleWalkerTask cyclicInheritance = CyclicInheritanceCheck.create(model, taskmanager);
		cyclicInheritance.addDependency(referencer);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<OKTaskResult>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<ExceptionalTaskResult>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(1, okResult.size());
		assertEquals(1, failResult.size());
		
		final Exception exception = failResult.iterator().next().getError();
		if (exception instanceof CyclicInheritanceException) {
			final CyclicInheritanceException ex = (CyclicInheritanceException) exception;
			assertEquals(Position.create("", 1, 33, 32), ex.getStartPosition());
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 694
de/fhdw/wtf/parser/test/TestAttributes.java 782
de/fhdw/wtf/parser/test/TestAttributes.java 1098
de/fhdw/wtf/parser/test/TestAttributes.java 1611
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.asteriskToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType classModel =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState stringReferenceState = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final TypeProxy stringType = TypeProxy.create(this.stringIdentifier, stringReferenceState);
		final ByNameState integerReferenceState = ByNameState.create(UnqualifiedName.create(this.integerIdentifier));
		final TypeProxy integerType = TypeProxy.create(this.integerIdentifier, integerReferenceState);
		
		final ProductElementType nameElement = ProductElementType.create("name", stringType, nameIdentifier);
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 946
de/fhdw/wtf/parser/test/TestAttributes.java 1021
de/fhdw/wtf/parser/test/TestAttributes.java 1228
de/fhdw/wtf/parser/test/TestAttributes.java 1317
		this.stream.add(this.stringIdentifier);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType classModel =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState stringReferenceState = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final TypeProxy stringType = TypeProxy.create(this.stringIdentifier, stringReferenceState);
		final ByNameState integerReferenceState = ByNameState.create(UnqualifiedName.create(this.integerIdentifier));
		final TypeProxy integerType = TypeProxy.create(this.integerIdentifier, integerReferenceState);
		
		final MapType map = MapType.create(this.integerIdentifier, integerType, stringType);
File Line
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 47
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 158
						"Group:group=[Klasse:class={operation : [[(parameter:Integer,parameter:String) -> String ]];};];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		Model model = null;
		model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		ProductCheck.create(model, taskmanager);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(0, okResult.size());
		assertEquals(1, failResult.size());
		
		final Exception exception = failResult.iterator().next().getError();
		if (exception instanceof InvalidProductException) {
			final InvalidProductException ex = (InvalidProductException) exception;
			assertEquals(Position.create("", 1, 42, 41), ex.getStartPosition());
			assertEquals(Position.create("", 1, 79, 78), ex.getEndPos());
File Line
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 101
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 213
				new SimpleScannerInput("Group:group=[Klasse:class={attr : (parameter:Integer,parameter:String);};];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		Model model = null;
		model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		ProductCheck.create(model, taskmanager);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(0, okResult.size());
		assertEquals(1, failResult.size());
		
		final Exception exception = failResult.iterator().next().getError();
		if (exception instanceof InvalidProductException) {
			final InvalidProductException ex = (InvalidProductException) exception;
			assertEquals(Position.create("", 1, 35, 34), ex.getStartPosition());
			assertEquals(Position.create("", 1, 71, 70), ex.getEndPos());
File Line
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1533
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1611
		actualSum.add(TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(b))));
		
		final List<Type> standardizeElements = actualSum.standardize().accept(new TypeVisitorReturn<List<Type>>() {
			
			@Override
			public List<Type> handle(final AtomicType atomicType) {
				return new ArrayList<>();
			}
			
			@Override
			public List<Type> handle(final CompositeType compositeType) {
				return compositeType.accept(new CompositeTypeVisitorReturn<List<Type>>() {
					
					@Override
					public List<Type> handle(final ListType list) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final MapType map) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final ProductType product) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final SumType sum2) {
						return sum2.getElements();
					}
					
					@Override
					public List<Type> handle(final ThrownType thrownType) {
						return new ArrayList<>();
					}
				});
			}
			
			@Override
			public List<Type> handle(final TypeProxy typeProxy) {
				return new ArrayList<>();
			}
		});
		
		// Prepare Expected
		final SumType expectedSum = SumType.create(dummyToken);
		expectedSum.add(TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(b))));
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 926
de/fhdw/wtf/parser/test/TestAttributes.java 1077
de/fhdw/wtf/parser/test/TestAttributes.java 1154
	public void testAttributeMap() throws Exception {
		final IdentifierToken groupIdentifier = IdentifierToken.create("Group", Position.create("", 1, 1, 0));
		final IdentifierToken classIdentifier = IdentifierToken.create("Class", Position.create("", 1, 1, 0));
		final IdentifierToken attributeIdentifier = IdentifierToken.create("Attribute", Position.create("", 1, 1, 0));
		
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.integerIdentifier);
		this.stream.add(this.arrowToken);
		this.stream.add(this.stringIdentifier);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 1001
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 898
		final Collection<Type> expectedSupertypes = new ArrayList<>();
		final ProductType abstrProductCreated = ProductType.create(DummyToken.getInstance(), DummyToken.getInstance());
		ByReferenceState state = ByReferenceState.create(model.getString(), model.getString().getTypeName());
		TypeProxy typeProxy = TypeProxy.create(DummyToken.getInstance(), state);
		abstrProductCreated.addElement(ProductElementType.create("p$1", typeProxy, DummyToken.getInstance()));
		state = ByReferenceState.create(model.getInteger(), model.getInteger().getTypeName());
		typeProxy = TypeProxy.create(DummyToken.getInstance(), state);
		abstrProductCreated.addElement(ProductElementType.create("p$2", typeProxy, DummyToken.getInstance()));
		state = ByReferenceState.create(clssB, clssB.getName());
		typeProxy = TypeProxy.create(DummyToken.getInstance(), state);
		abstrProductCreated.addElement(ProductElementType.create("p$3", typeProxy, DummyToken.getInstance()));
		final ByReferenceState state2 = ByReferenceState.create(clss, clss.getName());
		final TypeProxy typeProxy2 = TypeProxy.create(DummyToken.getInstance(), state2);
		abstrProductCreated.addElement(ProductElementType.create("p$4", typeProxy2, DummyToken.getInstance()));
		expectedSupertypes.add(abstrProductCreated);
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 662
de/fhdw/wtf/parser/test/TestOperations.java 274
		final IdentifierToken myGroup = IdentifierToken.create("MyGroup", Position.create("", 1, 1, 0));
		final IdentifierToken myClass = IdentifierToken.create("MyClass", Position.create("", 1, 1, 0));
		final IdentifierToken myOperation = IdentifierToken.create("MyOperation", Position.create("", 1, 1, 0));
		final IdentifierToken myParameter = IdentifierToken.create("MyParameter", Position.create("", 1, 1, 0));
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myOperation);
		this.stream.add(this.colonToken);
		this.stream.add(this.doubleSquareBracketOpenToken);
		this.stream.add(myParameter);
File Line
de/fhdw/wtf/parser/test/TestOperations.java 295
de/fhdw/wtf/parser/test/TestOperations.java 383
		this.stream.add(string);
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.arrowToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.doubleSquareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Operation> operations = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(myGroup);
		final Group group = Group.create(groupName, groupVector, myGroup);
		
		final Name className = groupName.addName(myClass);
		final ClassType class1 =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						new Vector<Attribute>(),
						new Vector<Type>(),
						operations,
						new Vector<Constructor>(),
						myClass,
						
						new Vector<ClassType>());
		groupVector.add(class1);
		
		final ProductType product = ProductType.create(this.bracketOpenToken);
		final ByNameState byName = ByNameState.create(UnqualifiedName.create(string));
File Line
de/fhdw/wtf/parser/testWithScanner/TestParserScanner.java 468
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 865
						"group1 : group = [ class1 : class = {map : [String->Integer];} visitable abstract;];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		final Vector<ClassModifier> modifiers = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, GroupToken.create(Position.create("", 1, 1, 0)));
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType clazz =
				RegularClassType.create(
						className,
						modifiers,
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState integerByName = ByNameState.create(UnqualifiedName.create(integerIdentifier));
		final TypeProxy typeProxyInteger = TypeProxy.create(integerIdentifier, integerByName);
		
		final ByNameState stringByName = ByNameState.create(UnqualifiedName.create(stringIdentifier));
		final TypeProxy typeProxyString = TypeProxy.create(stringIdentifier, stringByName);
		final MapType map = MapType.create(mapIdentifier, typeProxyString, typeProxyInteger);
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 1859
de/fhdw/wtf/parser/test/TestAttributes.java 1927
	public void testAttributeWithModifier() throws Exception {
		final IdentifierToken groupIdentifier = IdentifierToken.create("Group", Position.create("", 0 + 1, 0 + 1, 0));
		final IdentifierToken classIdentifier = IdentifierToken.create("Class", Position.create("", 0 + 1, 0 + 1, 0));
		final IdentifierToken attributeIdentifier =
				IdentifierToken.create("Attribute", Position.create("", 0 + 1, 0 + 1, 0));
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.stringIdentifier);
		this.stream.add(PriorToken.create(Position.create("", 0 + 1, 0 + 1, 0)));
		this.stream.add(this.semicolonToken);
File Line
de/fhdw/wtf/parser/test/TestOperations.java 217
de/fhdw/wtf/parser/test/TestOperations.java 295
de/fhdw/wtf/parser/test/TestOperations.java 383
		this.stream.add(this.bracketOpenToken);
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.arrowToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.doubleSquareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Operation> operations = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(myGroup);
		final Group group = Group.create(groupName, groupVector, myGroup);
		
		final Name className = groupName.addName(myClass);
		
		final ClassType class1 =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						new Vector<Attribute>(),
						new Vector<Type>(),
						operations,
						new Vector<Constructor>(),
						myClass,
						
						new Vector<ClassType>());
		groupVector.add(class1);
		
		final ProductType product = ProductType.create(this.bracketOpenToken);
		final SumType sum = SumType.create(this.curlyBracketOpenToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 304
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 353
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 402
		final Model model = SyntaxCheck.getInstance().getModelFromString(input);
		
		final Iterator<Type> iterator = model.getConstructorCallDependencies().keySet().iterator();
		while (iterator.hasNext()) {
			final Type current = iterator.next();
			
			switch (current.getTypeString()) {
			case "group1>A":
				assertTrue(true);
				assertEquals(0, model.getConstructorCallDependencies().get(current).size());
				break;
			case "group1>B":
				final Iterator<Type> bIterator = model.getConstructorCallDependencies().get(current).iterator();
				assertEquals("group1>A", bIterator.next().toString());
				assertEquals(1, model.getConstructorCallDependencies().get(current).size());
				break;
			case "group1>C":
				final Iterator<Type> cIterator = model.getConstructorCallDependencies().get(current).iterator();
				assertEquals("group1>A", cIterator.next().toString());
				assertEquals(1, model.getConstructorCallDependencies().get(current).size());
				break;
			case "group1>D":
				final Iterator<Type> aIterator = model.getConstructorCallDependencies().get(current).iterator();
				assertEquals("group1>A", aIterator.next().toString());
				assertEquals("group1>B", aIterator.next().toString());
File Line
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 453
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 523
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 602
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 677
		final Model model = SyntaxCheck.getInstance().getModelFromString(input);
		
		final Iterator<Type> iterator = model.getConstructorCallDependencies().keySet().iterator();
		while (iterator.hasNext()) {
			final Type current = iterator.next();
			
			switch (current.getTypeString()) {
			case "group1>A":
				assertTrue(true);
				assertEquals(0, model.getConstructorCallDependencies().get(current).size());
				break;
			case "group1>B":
				final Iterator<Type> bIterator = model.getConstructorCallDependencies().get(current).iterator();
				assertEquals("group1>A", bIterator.next().toString());
				assertEquals(1, model.getConstructorCallDependencies().get(current).size());
				break;
			case "group1>C":
				final Iterator<Type> cIterator = model.getConstructorCallDependencies().get(current).iterator();
				assertEquals("group1>A", cIterator.next().toString());
				assertEquals(1, model.getConstructorCallDependencies().get(current).size());
				break;
			case "group1>D":
				final Iterator<Type> dIterator = model.getConstructorCallDependencies().get(current).iterator();
				assertEquals("group1>A", dIterator.next().toString());
				assertEquals("group1>B", dIterator.next().toString());
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 1001
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 1112
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 1181
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 1025
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 1095
		final Collection<Type> expectedSupertypes = new ArrayList<>();
		final ProductType abstrProductCreated = ProductType.create(DummyToken.getInstance(), DummyToken.getInstance());
		ByReferenceState state = ByReferenceState.create(model.getString(), model.getString().getTypeName());
		TypeProxy typeProxy = TypeProxy.create(DummyToken.getInstance(), state);
		abstrProductCreated.addElement(ProductElementType.create("p$1", typeProxy, DummyToken.getInstance()));
		state = ByReferenceState.create(model.getInteger(), model.getInteger().getTypeName());
		typeProxy = TypeProxy.create(DummyToken.getInstance(), state);
		abstrProductCreated.addElement(ProductElementType.create("p$2", typeProxy, DummyToken.getInstance()));
		state = ByReferenceState.create(clssB, clssB.getName());
		typeProxy = TypeProxy.create(DummyToken.getInstance(), state);
		abstrProductCreated.addElement(ProductElementType.create("p$3", typeProxy, DummyToken.getInstance()));
		final ByReferenceState state2 = ByReferenceState.create(clss, clss.getName());
		final TypeProxy typeProxy2 = TypeProxy.create(DummyToken.getInstance(), state2);
		abstrProductCreated.addElement(ProductElementType.create("p$4", typeProxy2, DummyToken.getInstance()));
		expectedSupertypes.add(abstrProductCreated);
File Line
de/fhdw/wtf/walker/tasks/test/TestTypeReferencer.java 474
de/fhdw/wtf/walker/tasks/test/TestTypeReferencer.java 648
						null);
		group2Elements.add(class21);
		final IdentifierToken group21IdentifierToken =
				IdentifierToken.create("Group1", Position.create("", 0 + 1, 0 + 1, 0));
		final Name group21Name = group2Name.addName(group21IdentifierToken);
		final Collection<GroupElement> group21Elements = new Vector<>();
		final Group group21 = Group.create(group21Name, group21Elements, group21IdentifierToken);
		group2Elements.add(group21);
		final IdentifierToken class211IdentifierToken =
				IdentifierToken.create("Class1", Position.create("", 0 + 1, 0 + 1, 0));
		final Name class211Name = group21Name.addName(class211IdentifierToken);
		final Collection<ClassModifier> class211Modifiers = new Vector<>();
		final Collection<Attribute> class211Attributes = new Vector<>();
		final List<Type> class211SuperTypes = new Vector<>();
		final Collection<Operation> class211Operations = new Vector<>();
		final ClassType class211 =
				RegularClassType.create(
						class211Name,
						class211Modifiers,
						class211Attributes,
						class211SuperTypes,
						class211Operations,
						new Vector<Constructor>(),
						class211IdentifierToken,
						
						new Vector<ClassType>());
		group21Elements.add(class211);
		final ByReferenceState class21SuperTypeReferenceState =
				ByReferenceState.create(class211, class211.getTypeName());
		final TypeProxy class21SuperTypeReference =
				TypeProxy.create(class211IdentifierToken, class21SuperTypeReferenceState);
		class21SuperTypes.add(class21SuperTypeReference);
		final ByReferenceState class211AttributeTypeReferenceState =
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 668
de/fhdw/wtf/parser/test/TestAttributes.java 754
de/fhdw/wtf/parser/test/TestAttributes.java 1199
de/fhdw/wtf/parser/test/TestAttributes.java 1288
de/fhdw/wtf/parser/test/TestAttributes.java 1489
de/fhdw/wtf/parser/test/TestAttributes.java 1580
de/fhdw/wtf/parser/test/TestAttributes.java 1673
de/fhdw/wtf/parser/test/TestAttributes.java 1767
	public void testAttributeWithListOnProduct() throws Exception {
		final IdentifierToken groupIdentifier = IdentifierToken.create("Group", Position.create("", 1, 1, 0));
		final IdentifierToken classIdentifier = IdentifierToken.create("Class", Position.create("", 1, 1, 0));
		final IdentifierToken attributeIdentifier = IdentifierToken.create("Attribute", Position.create("", 1, 1, 0));
		final IdentifierToken nameIdentifier = IdentifierToken.create("name", Position.create("", 1, 1, 0));
		final IdentifierToken countIdentifier = IdentifierToken.create("count", Position.create("", 1, 1, 0));
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.bracketOpenToken);
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 843
de/fhdw/wtf/parser/test/TestAttributes.java 2455
de/fhdw/wtf/parser/test/TestAttributes.java 2545
	public void testAttributeWithMoreListsOnSum() throws Exception {
		final IdentifierToken groupIdentifier = IdentifierToken.create("Group", Position.create("", 1, 1, 0));
		final IdentifierToken classIdentifier = IdentifierToken.create("Class", Position.create("", 1, 1, 0));
		final IdentifierToken attributeIdentifier = IdentifierToken.create("Attribute", Position.create("", 1, 1, 0));
		final IdentifierToken trueIdentifier = IdentifierToken.create("true", Position.create("", 1, 1, 0));
		final IdentifierToken falseIdentifier = IdentifierToken.create("false", Position.create("", 1, 1, 0));
		
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.curlyBracketOpenToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 1112
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 1181
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 898
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 1025
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 1095
		expectedSupertypes = new ArrayList<>();
		final ProductType abstrProductCreated = ProductType.create(DummyToken.getInstance(), DummyToken.getInstance());
		ByReferenceState state = ByReferenceState.create(model.getString(), model.getString().getTypeName());
		TypeProxy typeProxy = TypeProxy.create(DummyToken.getInstance(), state);
		abstrProductCreated.addElement(ProductElementType.create("p$1", typeProxy, DummyToken.getInstance()));
		state = ByReferenceState.create(model.getInteger(), model.getInteger().getTypeName());
		typeProxy = TypeProxy.create(DummyToken.getInstance(), state);
		abstrProductCreated.addElement(ProductElementType.create("p$2", typeProxy, DummyToken.getInstance()));
		state = ByReferenceState.create(clssB, clssB.getName());
		typeProxy = TypeProxy.create(DummyToken.getInstance(), state);
		abstrProductCreated.addElement(ProductElementType.create("p$3", typeProxy, DummyToken.getInstance()));
		final ByReferenceState state2 = ByReferenceState.create(clss, clss.getName());
		final TypeProxy typeProxy2 = TypeProxy.create(DummyToken.getInstance(), state2);
		abstrProductCreated.addElement(ProductElementType.create("p$4", typeProxy2, DummyToken.getInstance()));
		expectedSupertypes.add(abstrProductCreated);
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 505
de/fhdw/wtf/parser/test/TestExceptions.java 606
		final IdentifierToken myClass = IdentifierToken.create("MyClass", Position.create("", 1, 1, 0));
		final IdentifierToken myAttribute = IdentifierToken.create("MyAttribute", Position.create("", 1, 1, 0));
		final IdentifierToken name = IdentifierToken.create("name", Position.create("", 1, 1, 0));
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myAttribute);
		this.stream.add(this.colonToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(name);
		this.stream.add(this.colonToken);
		this.stream.add(string);
		this.stream.add(this.semicolonToken);
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 1859
de/fhdw/wtf/parser/test/TestAttributes.java 1927
de/fhdw/wtf/parser/test/TestAttributes.java 2001
	public void testAttributeWithModifier() throws Exception {
		final IdentifierToken groupIdentifier = IdentifierToken.create("Group", Position.create("", 0 + 1, 0 + 1, 0));
		final IdentifierToken classIdentifier = IdentifierToken.create("Class", Position.create("", 0 + 1, 0 + 1, 0));
		final IdentifierToken attributeIdentifier =
				IdentifierToken.create("Attribute", Position.create("", 0 + 1, 0 + 1, 0));
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.stringIdentifier);
		this.stream.add(PriorToken.create(Position.create("", 0 + 1, 0 + 1, 0)));
		this.stream.add(this.semicolonToken);
File Line
de/fhdw/wtf/parser/test/TestConstructors.java 1277
de/fhdw/wtf/parser/test/TestConstructors.java 1370
						new Vector<Type>(),
						operations,
						constructors,
						aIdentifierToken,
						
						new Vector<ClassType>());
		group1Vector.add(aClass);
		
		final ProductType aProduct = ProductType.create(this.bracketOpenToken);
		final ProductType sProduct = ProductType.create(this.bracketOpenToken);
		
		final ByNameState attributeStringReferenceState =
				ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final TypeProxy stringType = TypeProxy.create(this.stringIdentifier, attributeStringReferenceState);
		
		attributes.add(Attribute.create("s", stringType, new Vector<AttributeModifier>(), sIdentifierToken));
		sProduct.addElement(ProductElementType.create("s", stringType, sIdentifierToken));
		constructors.add(Constructor.create(aProduct, aClass, new Vector<ConstructorReference>(), aIdentifierToken));
		
		final Operation operation =
				Operation.create(
						"op",
						new Vector<OperationModifier>(),
						sProduct,
						aClass,
						SumType.create(this.curlyBracketOpenToken),
						op);
		operations.add(operation);
		
		final Model expected = Model.create(group1IdentifierToken);
		expected.addGroup(group1);
		
		this.parser = Parser.create(output);
		final Model actual = this.parser.parse();
		
		assertEquals(0, this.parser.getExceptions().size());
		assertEquals(expected, actual);
	}
	
	/**
	 * Group1:group=[SA:class={};A:class=SA+{();op:[[(s:String)->{}]];s:String;};];.
	 * 
	 * @throws Exception
	 *             {@link de.fhdw.wtf.common.exception.parser.NoValidTokenStreamException}
	 */
	@Test
	public void testConstructorWithoutParameterAndSuperclassWithoutParameter() throws Exception {
File Line
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 374
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 474
		product1.addElement(element13);
		
		final ProductType product2 = ProductType.create(this.bracketOpenToken);
		final ProductElementType element21 =
				ProductElementType.create(
						"int3",
						typeProxyInteger,
						IdentifierToken.create("int3", Position.create("", 1, 1, 0)));
		final ProductElementType element22 =
				ProductElementType.create(
						"int4",
						typeProxyInteger,
						IdentifierToken.create("int4", Position.create("", 1, 1, 0)));
		product2.addElement(element21);
		product2.addElement(element22);
		
		final SumType sum = SumType.create(this.curlyBracketOpenToken);
		sum.add(product1);
		sum.add(typeProxyString);
		sum.add(product2);
		sum.add(typeProxyTest);
		
		final Attribute attribute =
				Attribute.create("attribute", sum, new Vector<AttributeModifier>(), attributeIdentifier);
		attributes.add(attribute);
		
		modifiers.add(ClassModifierService.create(VisitableToken.create(Position.create("", 1, 1, 0))));
		modifiers.add(ClassModifierTransient.create(AbstractToken.create(Position.create("", 1, 1, 0))));
		groupVector.add(clazz);
		final Model expected = Model.create(groupIdentifier);
		expected.addGroup(group);
		assertEquals(expected, model);
	}
	
	/**
	 * group1 : group = [ class1 : class = {attribute : {(sum:{Integer, String}, int42:Integer), String,
	 * (int3:Integer,int4:Integer), Test} ;} service transient;]; .
	 * 
	 * @throws Exception
	 */
	@Test
	public void testProductSum5() throws Exception {
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 695
de/fhdw/wtf/parser/test/TestAttributes.java 783
de/fhdw/wtf/parser/test/TestAttributes.java 947
de/fhdw/wtf/parser/test/TestAttributes.java 1022
de/fhdw/wtf/parser/test/TestAttributes.java 1099
de/fhdw/wtf/parser/test/TestAttributes.java 1229
de/fhdw/wtf/parser/test/TestAttributes.java 1318
de/fhdw/wtf/parser/test/TestAttributes.java 1520
de/fhdw/wtf/parser/test/TestAttributes.java 1612
de/fhdw/wtf/parser/test/TestAttributes.java 1707
de/fhdw/wtf/parser/test/TestAttributes.java 1798
		this.stream.add(this.asteriskToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType classModel =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState stringReferenceState = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final TypeProxy stringType = TypeProxy.create(this.stringIdentifier, stringReferenceState);
		final ByNameState integerReferenceState = ByNameState.create(UnqualifiedName.create(this.integerIdentifier));
		final TypeProxy integerType = TypeProxy.create(this.integerIdentifier, integerReferenceState);
		
		final ProductElementType nameElement = ProductElementType.create("name", stringType, nameIdentifier);
File Line
de/fhdw/wtf/parser/testWithScanner/TestParserScanner.java 468
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 87
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 180
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 254
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 320
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 425
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 525
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 625
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 741
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 865
						"group1 : group = [ class1 : class = {map : [String->Integer];} visitable abstract;];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		final Vector<ClassModifier> modifiers = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, GroupToken.create(Position.create("", 1, 1, 0)));
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType clazz =
				RegularClassType.create(
						className,
						modifiers,
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState integerByName = ByNameState.create(UnqualifiedName.create(integerIdentifier));
		final TypeProxy typeProxyInteger = TypeProxy.create(integerIdentifier, integerByName);
		
		final ByNameState stringByName = ByNameState.create(UnqualifiedName.create(stringIdentifier));
		final TypeProxy typeProxyString = TypeProxy.create(stringIdentifier, stringByName);
		final MapType map = MapType.create(mapIdentifier, typeProxyString, typeProxyInteger);
File Line
de/fhdw/wtf/parser/test/TestOperations.java 1140
de/fhdw/wtf/parser/test/TestOperations.java 1187
		this.stream.add(AsteriskToken.create(Position.create("", 1, 55, 55)));
		this.stream.add(ExclamationToken.create(Position.create("", 1, 56, 56)));
		this.stream.add(DoubleSquareBracketCloseToken.create(Position.create("", 1, 57, 57)));
		this.stream.add(SemicolonToken.create(Position.create("", 1, 59, 59)));
		this.stream.add(CurlyBracketCloseToken.create(Position.create("", 1, 60, 60)));
		this.stream.add(SemicolonToken.create(Position.create("", 1, 61, 61)));
		this.stream.add(SquareBracketCloseToken.create(Position.create("", 1, 62, 62)));
		this.stream.add(SemicolonToken.create(Position.create("", 1, 63, 63)));
		this.stream.add(EndToken.create(Position.create("", 1, 64, 64)));
		
		try {
			this.parser.parse();
		} catch (final NoValidTokenStreamException e) {
			assertTrue(true);
		}
	}
	
	/**
	 * MyGroup:group=[MyClass:class={MyOperation:[[()->String!!]];};];.
	 * 
	 * @throws Exception
	 *             {@link de.fhdw.wtf.common.exception.parser.NoValidTokenStreamException}
	 */
	@Test
	public void testOperationReturnAThrownTypeThatShouldBeThrown() throws Exception {
File Line
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1611
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1776
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 2063
				TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(b)))));
		
		final List<Type> standardizeElements = actualSum.standardize().accept(new TypeVisitorReturn<List<Type>>() {
			
			@Override
			public List<Type> handle(final AtomicType atomicType) {
				return new ArrayList<>();
			}
			
			@Override
			public List<Type> handle(final CompositeType compositeType) {
				return compositeType.accept(new CompositeTypeVisitorReturn<List<Type>>() {
					
					@Override
					public List<Type> handle(final ListType list) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final MapType map) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final ProductType product) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final SumType sum2) {
						return sum2.getElements();
					}
					
					@Override
					public List<Type> handle(final ThrownType thrownType) {
						return new ArrayList<>();
					}
				});
			}
			
			@Override
			public List<Type> handle(final TypeProxy typeProxy) {
				return new ArrayList<>();
			}
		});
		
		// Prepare Expected
		final SumType expectedSum = SumType.create(dummyToken);
		expectedSum.add(TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(a))));
File Line
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1533
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1691
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1776
		actualSum.add(TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(b))));
		
		final List<Type> standardizeElements = actualSum.standardize().accept(new TypeVisitorReturn<List<Type>>() {
			
			@Override
			public List<Type> handle(final AtomicType atomicType) {
				return new ArrayList<>();
			}
			
			@Override
			public List<Type> handle(final CompositeType compositeType) {
				return compositeType.accept(new CompositeTypeVisitorReturn<List<Type>>() {
					
					@Override
					public List<Type> handle(final ListType list) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final MapType map) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final ProductType product) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final SumType sum2) {
						return sum2.getElements();
					}
					
					@Override
					public List<Type> handle(final ThrownType thrownType) {
						return new ArrayList<>();
					}
				});
			}
			
			@Override
			public List<Type> handle(final TypeProxy typeProxy) {
				return new ArrayList<>();
			}
		});
		
		// Prepare Expected
		final SumType expectedSum = SumType.create(dummyToken);
		expectedSum.add(TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(b))));
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 179
de/fhdw/wtf/parser/test/TestExceptions.java 333
de/fhdw/wtf/parser/test/TestExceptions.java 391
de/fhdw/wtf/parser/test/TestExceptions.java 446
de/fhdw/wtf/parser/test/TestExceptions.java 659
de/fhdw/wtf/parser/test/TestExceptions.java 777
de/fhdw/wtf/parser/test/TestExceptions.java 882
de/fhdw/wtf/parser/test/TestExceptions.java 1058
	public void testNoArrowException() {
		this.stream = SimpleTokenStream.create();
		this.parser = Parser.create(this.stream);
		final IdentifierToken myGroup = IdentifierToken.create("MyGroup", Position.create("", 1, 1, 0));
		final IdentifierToken myClass = IdentifierToken.create("MyClass", Position.create("", 1, 1, 0));
		final IdentifierToken myOperation = IdentifierToken.create("MyOperation", Position.create("", 1, 1, 0));
		final IdentifierToken myParameter = IdentifierToken.create("MyParameter", Position.create("", 1, 1, 0));
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 453
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 523
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 602
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 677
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 742
		final Model model = SyntaxCheck.getInstance().getModelFromString(input);
		
		final Iterator<Type> iterator = model.getConstructorCallDependencies().keySet().iterator();
		while (iterator.hasNext()) {
			final Type current = iterator.next();
			
			switch (current.getTypeString()) {
			case "group1>A":
				assertTrue(true);
				assertEquals(0, model.getConstructorCallDependencies().get(current).size());
				break;
			case "group1>B":
				final Iterator<Type> bIterator = model.getConstructorCallDependencies().get(current).iterator();
				assertEquals("group1>A", bIterator.next().toString());
				assertEquals(1, model.getConstructorCallDependencies().get(current).size());
				break;
			case "group1>C":
				final Iterator<Type> cIterator = model.getConstructorCallDependencies().get(current).iterator();
				assertEquals("group1>A", cIterator.next().toString());
				assertEquals(1, model.getConstructorCallDependencies().get(current).size());
				break;
			case "group1>D":
				final Iterator<Type> dIterator = model.getConstructorCallDependencies().get(current).iterator();
				assertEquals("group1>A", dIterator.next().toString());
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 463
de/fhdw/wtf/parser/test/TestAttributes.java 531
	public void testAttributeWithList() throws Exception {
		final IdentifierToken groupIdentifier = IdentifierToken.create("Group", Position.create("", 0 + 1, 0 + 1, 0));
		final IdentifierToken classIdentifier = IdentifierToken.create("Class", Position.create("", 0 + 1, 0 + 1, 0));
		final IdentifierToken attributeIdentifier =
				IdentifierToken.create("Attribute", Position.create("", 0 + 1, 0 + 1, 0));
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.stringIdentifier);
		this.stream.add(this.asteriskToken);
		this.stream.add(this.semicolonToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 740
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 728
				HelperUtils.getReferencedType(model.getString().getPrototype().getSuperTypes().iterator().next()));
	}
	
	/**
	 * Group:group=[A:class={Attribute1:{C,D};}; B:class=A+{}; C:class=B+{}; D:class=B+{}; Class:class={};]; .
	 * 
	 * @throws Exception
	 *             Exception
	 */
	@Test
	public void testTransitiveInheritanceAndSumSupertypeIsClass() throws Exception {
		final SimpleScannerInput input =
				new SimpleScannerInput("Group:group=[A:class={Attribute1:{C,D};}; B:class=A+{}; C:class=B+{}; "
						+ "D:class=B+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final Iterator<GroupElement> iterator = model.getGroups().iterator().next().getGroupElements().iterator();
		final ClassType clssA = (ClassType) iterator.next();
		final ClassType clssB = (ClassType) iterator.next();
		
		final Iterator<Attribute> attrIterator = clssA.getAttributes().iterator();
		
		final Attribute attr1 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
File Line
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 47
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 103
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 159
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 215
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 271
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 327
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 383
						"Group:group=[Klasse:class={name : String; operation : [[(parameter:Integer) -> String ]] abstract;}; ];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		Model model = null;
		model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		AbstractOperationsCheck.create(model, taskmanager);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(0, okResult.size());
		assertEquals(1, failResult.size());
		
		final Exception exception = failResult.iterator().next().getError();
		if (exception instanceof AbstractOperationsException) {
			final AbstractOperationsException ex = (AbstractOperationsException) exception;
			assertEquals(Position.create("", 1, 43, 42), ex.getStartPosition());
File Line
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 47
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 101
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 158
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 213
						"Group:group=[Klasse:class={operation : [[(parameter:Integer,parameter:String) -> String ]];};];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		Model model = null;
		model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		ProductCheck.create(model, taskmanager);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(0, okResult.size());
		assertEquals(1, failResult.size());
		
		final Exception exception = failResult.iterator().next().getError();
		if (exception instanceof InvalidProductException) {
			final InvalidProductException ex = (InvalidProductException) exception;
			assertEquals(Position.create("", 1, 42, 41), ex.getStartPosition());
File Line
de/fhdw/wtf/common/stream/test/FilteredTokenStreamTest.java 14
de/fhdw/wtf/common/stream/test/SimpleTokenStreamTest.java 14
public class FilteredTokenStreamTest {
	
	@Test
	public void test() {
		
		final Token t1 = WhitespaceToken.create("t1", Position.create("", 0 + 1, 0 + 1, 0));
		final Token t2 = IdentifierToken.create("t2", Position.create("", 0 + 1, 0 + 1, 0));
		final Token t3 = IdentifierToken.create("t3", Position.create("", 0 + 1, 0 + 1, 0));
		final Token t4 = WhitespaceToken.create("t4", Position.create("", 0 + 1, 0 + 1, 0));
		final Token t5 = CommentTextToken.create("t5", Position.create("", 0 + 1, 0 + 1, 0));
		final Token t6 = WhitespaceToken.create("t6", Position.create("", 0 + 1, 0 + 1, 0));
		final Token t7 = IdentifierToken.create("t7", Position.create("", 0 + 1, 0 + 1, 0));
		final Token t8 = WhitespaceToken.create("t8", Position.create("", 0 + 1, 0 + 1, 0));
		
		final FilteredTokenStream stream = FilteredTokenStream.create();
File Line
de/fhdw/wtf/parser/test/TestOperations.java 885
de/fhdw/wtf/parser/test/TestOperations.java 999
		this.stream.add(EndToken.create(Position.create("", 1, 97, 97)));
		
		// ---------------------------- MyGroup
		// -------------------------------------------------------------//
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Operation> operations = new Vector<>();
		final Vector<OperationModifier> operationModifiers = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(myGroupToken);
		final Group group = Group.create(groupName, groupVector, myGroupToken);
		
		final Name className = groupName.addName(myClassToken);
		final ClassType class1 =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						new Vector<Attribute>(),
						new Vector<Type>(),
						operations,
						new Vector<Constructor>(),
						myClassToken,
						new Vector<ClassType>());
		groupVector.add(class1);
		
		final Name exceptionName = groupName.addName(testExceptionToken);
		final ClassType exception1 =
				ExceptionClassType.create(
						exceptionName,
						new Vector<ClassModifier>(),
						new Vector<Attribute>(),
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						testExceptionToken,
						new Vector<ClassType>());
		groupVector.add(exception1);
		
		// -------------------------------------
		// --------------------------------------------------------//
		final ProductType product = ProductType.create(this.bracketOpenToken);
		final ByNameState byNameString = ByNameState.create(UnqualifiedName.create(testExceptionReferenceToken));
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 302
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 266
				HelperUtils.getReferencedType(model.getString().getPrototype().getSuperTypes().iterator().next()));
	}
	
	/**
	 * Group:group=[A:class={Attribute1:{String,Integer,A}; Attribute2:{String,C};}; B:class=A+{}; C:class=A+{};
	 * Class:class={};]; .
	 * 
	 * @throws Exception
	 *             Exception
	 */
	@Test
	public void testContainsInheritanceOverClassInheritance2() throws Exception {
		final SimpleScannerInput input =
				new SimpleScannerInput("Group:group=[A:class={Attribute1:{String,Integer,A}; Attribute2:{String,C};}; "
						+ "B:class=A+{}; C:class=A+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final ClassType clss = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		final Iterator<Attribute> attrIterator = clss.getAttributes().iterator();
		final Attribute attr1 = attrIterator.next();
		final Attribute attr2 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		assertEquals(1, supertypesAttr1.size());
		final Iterator<Type> superTypesAttr1Iterator = supertypesAttr1.iterator();
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 459
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 425
				HelperUtils.getReferencedType(model.getString().getPrototype().getSuperTypes().iterator().next()));
	}
	
	/**
	 * Group:group=[A:class={Attribute1:{String,Integer,A}; Attribute2:{B,C};}; B:class=A+{}; C:class=A+{};
	 * D:class=A+{}; Class:class={};]; .
	 * 
	 * @throws Exception
	 *             Exception
	 */
	@Test
	public void testSumSupertypeIsAnClass2() throws Exception {
		final SimpleScannerInput input =
				new SimpleScannerInput("Group:group=[A:class={Attribute1:{String,Integer,A}; Attribute2:{B,C};}; "
						+ "B:class=A+{}; C:class=A+{}; D:class=A+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final ClassType clss = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		final Iterator<Attribute> attrIterator = clss.getAttributes().iterator();
		final Attribute attr1 = attrIterator.next();
		final Attribute attr2 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		assertEquals(1, supertypesAttr1.size());
		final Iterator<Type> superTypesAttr1Iterator = supertypesAttr1.iterator();
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 738
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 830
	public void testTransitiveInheritanceAndSumSupertypeIsClass() throws Exception {
		final SimpleScannerInput input =
				new SimpleScannerInput("Group:group=[A:class={Attribute1:{C,D};}; B:class=A+{}; C:class=B+{}; "
						+ "D:class=B+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final Iterator<GroupElement> iterator = model.getGroups().iterator().next().getGroupElements().iterator();
		final ClassType clssA = (ClassType) iterator.next();
		final ClassType clssB = (ClassType) iterator.next();
		
		final Iterator<Attribute> attrIterator = clssA.getAttributes().iterator();
		
		final Attribute attr1 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		
		final Collection<Type> expectedSupertypes = new ArrayList<>();
		expectedSupertypes.add(clssA);
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 965
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 861
				HelperUtils.getReferencedType(model.getString().getPrototype().getSuperTypes().iterator().next()));
	}
	
	/**
	 * Group:group=[A:class={Attribute1:(name:String, alter: Integer, b:B, clss:Class);}; B:class=A+{}; C:class=B+{};
	 * D:class=B+{}; Class:class={};]; .
	 * 
	 * @throws Exception
	 *             Exception
	 */
	@Test
	public void testProductHierarchie() throws Exception {
		final SimpleScannerInput input =
				new SimpleScannerInput(
						"Group:group=[A:class={Attribute1:(name:String, alter: Integer, b:B, clss:Class);}; B:class=A+{}; C:class=B+{}; "
								+ "D:class=B+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final Iterator<GroupElement> iterator = model.getGroups().iterator().next().getGroupElements().iterator();
		final ClassType clssA = (ClassType) iterator.next();
		final ClassType clssB = (ClassType) iterator.next();
		iterator.next();
		iterator.next();
		final ClassType clss = (ClassType) iterator.next();
		
		final Iterator<Attribute> attrIterator = clssA.getAttributes().iterator();
		
		final Attribute attr1 = attrIterator.next();
		
		assertEquals(0, attr1.getAttrType().getSuperTypes().size());
		final Type attr1Type = attr1.getAttrType().getPrototype();
		final Collection<Type> supertypesAttr1 = attr1Type.getSuperTypes();
File Line
de/fhdw/wtf/parser/test/TestOperations.java 387
de/fhdw/wtf/parser/test/TestOperations.java 599
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.doubleSquareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Operation> operations = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(myGroup);
		final Group group = Group.create(groupName, groupVector, myGroup);
		
		final Name className = groupName.addName(myClass);
		final ClassType class1 =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						new Vector<Attribute>(),
						new Vector<Type>(),
						operations,
						new Vector<Constructor>(),
						myClass,
						
						new Vector<ClassType>());
		groupVector.add(class1);
		
		final ProductType product = ProductType.create(this.bracketOpenToken);
		final ByNameState byNameString = ByNameState.create(UnqualifiedName.create(string));
		final TypeProxy typeProxyString = TypeProxy.create(string, byNameString);
File Line
de/fhdw/wtf/parser/testWithScanner/TestParserScanner.java 286
de/fhdw/wtf/parser/testWithScanner/TestParserScanner.java 370
	public void testSimpleClassOperation4() throws Exception {
		final IdentifierToken classIdentifier = IdentifierToken.create("class1", Position.create("", 1, 1, 0));
		final IdentifierToken test = IdentifierToken.create("test", Position.create("", 1, 1, 0));
		final IdentifierToken op1 = IdentifierToken.create("op1", Position.create("", 1, 1, 0));
		final IdentifierToken op2 = IdentifierToken.create("op2", Position.create("", 1, 1, 0));
		final IdentifierToken groupIdentifier = IdentifierToken.create("group1", Position.create("", 1, 1, 0));
		final IdentifierToken param1Identifier = IdentifierToken.create("param1", Position.create("", 1, 1, 0));
		final IdentifierToken param2Identifier = IdentifierToken.create("param2", Position.create("", 1, 1, 0));
		final IdentifierToken integerIdentifier = IdentifierToken.create("Integer", Position.create("", 1, 1, 0));
		final IdentifierToken stringIdentifier = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		
		final SimpleScannerInput input =
				new SimpleScannerInput(
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 130
de/fhdw/wtf/parser/test/TestAttributes.java 463
de/fhdw/wtf/parser/test/TestAttributes.java 531
	public void testOneAttribute() throws Exception {
		final IdentifierToken groupIdentifier = IdentifierToken.create("Group", Position.create("", 0 + 1, 0 + 1, 0));
		final IdentifierToken classIdentifier = IdentifierToken.create("Class", Position.create("", 0 + 1, 0 + 1, 0));
		final IdentifierToken attributeIdentifier =
				IdentifierToken.create("Attribute", Position.create("", 0 + 1, 0 + 1, 0));
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.stringIdentifier);
		this.stream.add(this.semicolonToken);
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 480
de/fhdw/wtf/parser/test/TestAttributes.java 550
		this.stream.add(this.stringIdentifier);
		this.stream.add(this.asteriskToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType classModel =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState attributeReferenceState = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final TypeProxy attributeType = TypeProxy.create(this.stringIdentifier, attributeReferenceState);
		final ListType listType = ListType.create(this.stringIdentifier, attributeType);
File Line
de/fhdw/wtf/parser/testWithScanner/TestParserScanner.java 150
de/fhdw/wtf/parser/testWithScanner/TestParserScanner.java 217
de/fhdw/wtf/parser/testWithScanner/TestParserScanner.java 299
						"group1 : group = [ class1 : class = {op : [[(param:Integer)->test]];} service transient;];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Operation> operations = new Vector<>();
		final Vector<ClassModifier> modifiers = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, GroupToken.create(Position.create("", 1, 1, 0)));
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType clazz =
				RegularClassType.create(
						className,
						modifiers,
						new Vector<Attribute>(),
						new Vector<Type>(),
						operations,
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ProductType product = ProductType.create(this.bracketOpenToken);
		final ByNameState integerByName = ByNameState.create(UnqualifiedName.create(integerIdentifier));
		final TypeProxy typeProxyInteger = TypeProxy.create(paramIdentifier, integerByName);
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 1314
de/fhdw/wtf/parser/test/TestAttributes.java 1432
		this.stream.add(this.integerIdentifier);
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.arrowToken);
		this.stream.add(this.integerIdentifier);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType classModel =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState stringReferenceState = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
File Line
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1215
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1533
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1611
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1691
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1776
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 2063
		actualSum.add(actualThrownType);
		
		final List<Type> standardizeElements = actualSum.standardize().accept(new TypeVisitorReturn<List<Type>>() {
			
			@Override
			public List<Type> handle(final AtomicType atomicType) {
				return new ArrayList<>();
			}
			
			@Override
			public List<Type> handle(final CompositeType compositeType) {
				return compositeType.accept(new CompositeTypeVisitorReturn<List<Type>>() {
					
					@Override
					public List<Type> handle(final ListType list) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final MapType map) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final ProductType product) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final SumType sum2) {
						return sum2.getElements();
					}
					
					@Override
					public List<Type> handle(final ThrownType thrownType) {
						return new ArrayList<>();
					}
				});
			}
			
			@Override
			public List<Type> handle(final TypeProxy typeProxy) {
				return new ArrayList<>();
			}
		});
		
		// Prepare Expected
		final ThrownType expectedThrownType =
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 130
de/fhdw/wtf/parser/test/TestAttributes.java 463
de/fhdw/wtf/parser/test/TestAttributes.java 531
de/fhdw/wtf/parser/test/TestAttributes.java 1859
de/fhdw/wtf/parser/test/TestAttributes.java 1927
	public void testOneAttribute() throws Exception {
		final IdentifierToken groupIdentifier = IdentifierToken.create("Group", Position.create("", 0 + 1, 0 + 1, 0));
		final IdentifierToken classIdentifier = IdentifierToken.create("Class", Position.create("", 0 + 1, 0 + 1, 0));
		final IdentifierToken attributeIdentifier =
				IdentifierToken.create("Attribute", Position.create("", 0 + 1, 0 + 1, 0));
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.stringIdentifier);
		this.stream.add(this.semicolonToken);
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 926
de/fhdw/wtf/parser/test/TestAttributes.java 1000
de/fhdw/wtf/parser/test/TestAttributes.java 1077
de/fhdw/wtf/parser/test/TestAttributes.java 1154
	public void testAttributeMap() throws Exception {
		final IdentifierToken groupIdentifier = IdentifierToken.create("Group", Position.create("", 1, 1, 0));
		final IdentifierToken classIdentifier = IdentifierToken.create("Class", Position.create("", 1, 1, 0));
		final IdentifierToken attributeIdentifier = IdentifierToken.create("Attribute", Position.create("", 1, 1, 0));
		
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.integerIdentifier);
		this.stream.add(this.arrowToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 127
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 479
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 519
						+ "NaturalPerson:class=Person+{}; CorporateBody:class=Person+{};];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		final SimpleWalkerTask referencer = TypeReferencer.create(model, taskmanager);
		final SimpleWalkerTask cyclicInheritance = CyclicInheritanceCheck.create(model, taskmanager);
		cyclicInheritance.addDependency(referencer);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<OKTaskResult>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<ExceptionalTaskResult>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(2, okResult.size());
		assertEquals(0, failResult.size());
	}
	
	@Test
	public void testCyclicInheritanceOverMoreClasses() throws InterruptedException, ExecutionException,
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 832
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 820
				HelperUtils.getReferencedType(model.getString().getPrototype().getSuperTypes().iterator().next()));
	}
	
	/**
	 * Group:group=[A:class={Attribute1:{C,D};}; B:class=A+{}; C:class=B+{}; D:class=B+{}; Class:class={};]; .
	 * 
	 * @throws Exception
	 *             Exception
	 */
	@Test
	public void testTransitiveInheritanceAndSumSupertypeIsClass3() throws Exception {
		final SimpleScannerInput input =
				new SimpleScannerInput("Group:group=[A:class={Attribute1:{C,D};}; B:class=A+{}; C:class=B+{}; "
						+ "D:class=B+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final Iterator<GroupElement> iterator = model.getGroups().iterator().next().getGroupElements().iterator();
		final ClassType clssA = (ClassType) iterator.next();
		final ClassType clssB = (ClassType) iterator.next();
		
		final Iterator<Attribute> attrIterator = clssA.getAttributes().iterator();
		
		final Attribute attr1 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 130
de/fhdw/wtf/parser/test/TestAttributes.java 463
de/fhdw/wtf/parser/test/TestAttributes.java 531
de/fhdw/wtf/parser/test/TestAttributes.java 2001
	public void testOneAttribute() throws Exception {
		final IdentifierToken groupIdentifier = IdentifierToken.create("Group", Position.create("", 0 + 1, 0 + 1, 0));
		final IdentifierToken classIdentifier = IdentifierToken.create("Class", Position.create("", 0 + 1, 0 + 1, 0));
		final IdentifierToken attributeIdentifier =
				IdentifierToken.create("Attribute", Position.create("", 0 + 1, 0 + 1, 0));
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.stringIdentifier);
		this.stream.add(this.semicolonToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 304
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 353
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 402
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 453
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 523
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 602
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 677
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 742
		final Model model = SyntaxCheck.getInstance().getModelFromString(input);
		
		final Iterator<Type> iterator = model.getConstructorCallDependencies().keySet().iterator();
		while (iterator.hasNext()) {
			final Type current = iterator.next();
			
			switch (current.getTypeString()) {
			case "group1>A":
				assertTrue(true);
				assertEquals(0, model.getConstructorCallDependencies().get(current).size());
				break;
			case "group1>B":
				final Iterator<Type> bIterator = model.getConstructorCallDependencies().get(current).iterator();
				assertEquals("group1>A", bIterator.next().toString());
				assertEquals(1, model.getConstructorCallDependencies().get(current).size());
				break;
			case "group1>C":
				final Iterator<Type> cIterator = model.getConstructorCallDependencies().get(current).iterator();
				assertEquals("group1>A", cIterator.next().toString());
				assertEquals(1, model.getConstructorCallDependencies().get(current).size());
				break;
			case "group1>D":
				final Iterator<Type> aIterator = model.getConstructorCallDependencies().get(current).iterator();
File Line
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 88
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 127
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 479
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 519
						+ "CorporateBody:class=Person+{}; group2:group=[Person:class={};];];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		final SimpleWalkerTask referencer = TypeReferencer.create(model, taskmanager);
		final SimpleWalkerTask cyclicInheritance = CyclicInheritanceCheck.create(model, taskmanager);
		cyclicInheritance.addDependency(referencer);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<OKTaskResult>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<ExceptionalTaskResult>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(2, okResult.size());
		assertEquals(0, failResult.size());
	}
	
	@Test
	public void testInheritFromBasetype() throws InterruptedException, ExecutionException, NoValidTokenStreamException,
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 1079
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 1148
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 877
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 992
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 1062
								+ "D:class=B+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final Iterator<GroupElement> iterator = model.getGroups().iterator().next().getGroupElements().iterator();
		final ClassType clssA = (ClassType) iterator.next();
		final ClassType clssB = (ClassType) iterator.next();
		iterator.next();
		iterator.next();
		final ClassType clss = (ClassType) iterator.next();
		
		final Iterator<Attribute> attrIterator = clssA.getAttributes().iterator();
		
		final Attribute attr1 = attrIterator.next();
		
		// Summe
		assertEquals(0, attr1.getAttrType().getSuperTypes().size());
		final Type attr1Type = attr1.getAttrType().getPrototype();
		final Collection<Type> supertypesAttr1 = attr1Type.getSuperTypes();
		
		Collection<Type> expectedSupertypes = new ArrayList<>();
File Line
de/fhdw/wtf/parser/testWithScanner/TestParserScanner.java 468
de/fhdw/wtf/parser/testWithScanner/TestParserScanner.java 708
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 87
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 180
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 254
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 320
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 425
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 525
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 625
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 741
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 865
						"group1 : group = [ class1 : class = {map : [String->Integer];} visitable abstract;];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		final Vector<ClassModifier> modifiers = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, GroupToken.create(Position.create("", 1, 1, 0)));
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType clazz =
				RegularClassType.create(
						className,
						modifiers,
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState integerByName = ByNameState.create(UnqualifiedName.create(integerIdentifier));
		final TypeProxy typeProxyInteger = TypeProxy.create(integerIdentifier, integerByName);
		
		final ByNameState stringByName = ByNameState.create(UnqualifiedName.create(stringIdentifier));
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 782
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 769
				HelperUtils.getReferencedType(model.getString().getPrototype().getSuperTypes().iterator().next()));
	}
	
	/**
	 * Group:group=[A:class={Attribute1:{B,C}; Attribute2:{D,E,F,G};}; B:class=A+{}; C:class=A+{}; D:class=B+{};
	 * E:class=B+{}; F:class=C+{}; G:class=C+{}; Class:class={};]; .
	 * 
	 * @throws Exception
	 *             Exception
	 */
	@Test
	public void testTransitiveInheritanceAndSumSupertypeIsClass2() throws Exception {
		final SimpleScannerInput input =
				new SimpleScannerInput("Group:group=[A:class={Attribute1:{B,C}; Attribute2:{D,E,F,G};}; B:class=A+{}; "
						+ "C:class=A+{}; D:class=B+{}; E:class=B+{}; F:class=C+{}; G:class=C+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final Iterator<GroupElement> iterator = model.getGroups().iterator().next().getGroupElements().iterator();
		final ClassType clssA = (ClassType) iterator.next();
		
		final Iterator<Attribute> attrIterator = clssA.getAttributes().iterator();
		
		final Attribute attr1 = attrIterator.next();
		final Attribute attr2 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
File Line
de/fhdw/wtf/walker/tasks/test/TestBaseTypeInheritanceCheck.java 168
de/fhdw/wtf/walker/tasks/test/TestBaseTypeInheritanceCheck.java 217
		final SimpleScannerInput input = new SimpleScannerInput("personGroup:group=[Person:class=Anything+{};];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		final SimpleWalkerTask referencer = TypeReferencer.create(model, taskmanager);
		final SimpleWalkerTask baseTypeInheritanceCheck = BaseTypeInheritanceCheck.create(model, taskmanager);
		baseTypeInheritanceCheck.addDependency(referencer);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(2, okResult.size());
		assertEquals(0, failResult.size());
	}
	
	/**
	 * personGroup:group=[Person:class=Person+{};];.
	 * 
	 * @throws InterruptedException
	 *             InterruptedException
	 * @throws ExecutionException
	 *             ExecutionException
	 * @throws NoValidTokenStreamException
	 *             NoValidTokenStreamException
	 * @throws CyclicDependencyException
	 *             CyclicDependencyException
	 */
	@Test
	public void testInheritFromItself() throws InterruptedException, ExecutionException, NoValidTokenStreamException,
File Line
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 44
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 88
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 133
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 177
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 223
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 268
						+ "Class3:class={Attribute1:Class2 symmetric (Class1);};];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		final SimpleWalkerTask referencer = TypeReferencer.create(model, taskmanager);
		final InvalidAttributeModifierCheck modifierCheck = InvalidAttributeModifierCheck.create(model, taskmanager);
		modifierCheck.addDependency(referencer);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(2, okResult.size());
		assertEquals(0, failResult.size());
	}
	
	/**
	 * Group:group=[Class1:class={}; Class2:class={}; Class3:class={Attribute1:Class2* symmetric (Class1);};];.
	 * 
	 * @throws Exception
	 *             : {@link de.fhdw.wtf.common.exception.parser.NoValidTokenStreamException}
	 */
	@Test
	public void testListOfSymmetricModifier() throws Exception {
File Line
de/fhdw/wtf/parser/test/TestConstructors.java 979
de/fhdw/wtf/parser/test/TestConstructors.java 1045
		final IdentifierToken nameIdentifierToken = IdentifierToken.create("s", Position.create("", 1, 1, 0));
		
		final Vector<GroupElement> group1Vector = new Vector<>();
		final Vector<Constructor> constructors = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name group1Name = UnqualifiedName.create(group1IdentifierToken);
		final Group group1 = Group.create(group1Name, group1Vector, group1IdentifierToken);
		
		final Name aName = group1Name.addName(aIdentifierToken);
		final ClassType aClass =
				RegularClassType.create(
						aName,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						constructors,
						aIdentifierToken,
						
						new Vector<ClassType>());
		group1Vector.add(aClass);
		
		final ByNameState attributeStringReferenceState =
				ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final ByNameState attributeIntegerReferenceState =
				ByNameState.create(UnqualifiedName.create(this.integerIdentifier));
		
		final TypeProxy stringType = TypeProxy.create(this.stringIdentifier, attributeStringReferenceState);
		final TypeProxy integerType = TypeProxy.create(this.integerIdentifier, attributeIntegerReferenceState);
File Line
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 264
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 310
	public void testTwoDifferentNames() throws InterruptedException, ExecutionException, NoValidTokenStreamException,
			CyclicDependencyException {
		final SimpleScannerInput input =
				new SimpleScannerInput(
						"Group:group=[Klasse:class={operation : [[(parameter1:Integer,parameter2:String) -> String ]];};];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		Model model = null;
		model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		ProductCheck.create(model, taskmanager);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(1, okResult.size());
		assertEquals(0, failResult.size());
	}
	
	/**
	 * Group:group=[Klasse:class={operation : [[(parameter1:Integer,parameter2:String) -> String ]];};]; .
	 * 
	 * @throws InterruptedException
	 * @throws ExecutionException
	 * @throws NoValidTokenStreamException
	 * @throws CyclicDependencyException
	 */
	@Test
	public void testTwoDifferentNames2() throws InterruptedException, ExecutionException, NoValidTokenStreamException,
File Line
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 88
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 127
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 479
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 519
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 606
						+ "CorporateBody:class=Person+{}; group2:group=[Person:class={};];];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		final SimpleWalkerTask referencer = TypeReferencer.create(model, taskmanager);
		final SimpleWalkerTask cyclicInheritance = CyclicInheritanceCheck.create(model, taskmanager);
		cyclicInheritance.addDependency(referencer);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<OKTaskResult>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<ExceptionalTaskResult>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(2, okResult.size());
		assertEquals(0, failResult.size());
	}
File Line
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 60
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 128
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 196
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 264
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 332
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 406
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 472
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 542
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 631
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 708
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 776
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 843
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 909
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 975
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1041
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1111
		final List<Type> standardizeElements = sum.standardize().accept(new TypeVisitorReturn<List<Type>>() {
			
			@Override
			public List<Type> handle(final AtomicType atomicType) {
				return new ArrayList<>();
			}
			
			@Override
			public List<Type> handle(final CompositeType compositeType) {
				return compositeType.accept(new CompositeTypeVisitorReturn<List<Type>>() {
					
					@Override
					public List<Type> handle(final ListType list) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final MapType map) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final ProductType product) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final SumType sum2) {
						return sum2.getElements();
					}
					
					@Override
					public List<Type> handle(final ThrownType thrownType) {
						return new ArrayList<>();
					}
				});
			}
			
			@Override
			public List<Type> handle(final TypeProxy typeProxy) {
				return new ArrayList<>();
			}
		});
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 885
de/fhdw/wtf/parser/test/TestOperations.java 274
		final IdentifierToken myGroup = IdentifierToken.create("MyGroup", Position.create("", 1, 1, 0));
		final IdentifierToken myClass = IdentifierToken.create("MyClass", Position.create("", 1, 1, 0));
		final IdentifierToken myOperation = IdentifierToken.create("MyOperation", Position.create("", 1, 1, 0));
		final IdentifierToken myParameter = IdentifierToken.create("MyParameter", Position.create("", 1, 1, 0));
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(myOperation);
File Line
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 60
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 128
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 196
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 264
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 332
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 406
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 472
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 542
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 631
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 708
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 776
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 843
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 909
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 975
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1041
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1111
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1217
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1535
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1613
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1693
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1778
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 2065
		final List<Type> standardizeElements = sum.standardize().accept(new TypeVisitorReturn<List<Type>>() {
			
			@Override
			public List<Type> handle(final AtomicType atomicType) {
				return new ArrayList<>();
			}
			
			@Override
			public List<Type> handle(final CompositeType compositeType) {
				return compositeType.accept(new CompositeTypeVisitorReturn<List<Type>>() {
					
					@Override
					public List<Type> handle(final ListType list) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final MapType map) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final ProductType product) {
						return new ArrayList<>();
					}
					
					@Override
					public List<Type> handle(final SumType sum2) {
						return sum2.getElements();
					}
					
					@Override
					public List<Type> handle(final ThrownType thrownType) {
						return new ArrayList<>();
					}
				});
			}
			
			@Override
			public List<Type> handle(final TypeProxy typeProxy) {
				return new ArrayList<>();
			}
		});
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 130
de/fhdw/wtf/parser/test/TestAttributes.java 463
de/fhdw/wtf/parser/test/TestAttributes.java 531
de/fhdw/wtf/parser/test/TestAttributes.java 1859
de/fhdw/wtf/parser/test/TestAttributes.java 1927
de/fhdw/wtf/parser/test/TestAttributes.java 2043
	public void testOneAttribute() throws Exception {
		final IdentifierToken groupIdentifier = IdentifierToken.create("Group", Position.create("", 0 + 1, 0 + 1, 0));
		final IdentifierToken classIdentifier = IdentifierToken.create("Class", Position.create("", 0 + 1, 0 + 1, 0));
		final IdentifierToken attributeIdentifier =
				IdentifierToken.create("Attribute", Position.create("", 0 + 1, 0 + 1, 0));
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.stringIdentifier);
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 926
de/fhdw/wtf/parser/test/TestAttributes.java 1000
de/fhdw/wtf/parser/test/TestAttributes.java 1077
de/fhdw/wtf/parser/test/TestAttributes.java 1154
de/fhdw/wtf/parser/test/TestAttributes.java 1414
de/fhdw/wtf/parser/test/TestAttributes.java 2186
de/fhdw/wtf/parser/test/TestAttributes.java 2265
	public void testAttributeMap() throws Exception {
		final IdentifierToken groupIdentifier = IdentifierToken.create("Group", Position.create("", 1, 1, 0));
		final IdentifierToken classIdentifier = IdentifierToken.create("Class", Position.create("", 1, 1, 0));
		final IdentifierToken attributeIdentifier = IdentifierToken.create("Attribute", Position.create("", 1, 1, 0));
		
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.integerIdentifier);
File Line
de/fhdw/wtf/walker/tasks/test/TestBaseTypeInheritanceCheck.java 168
de/fhdw/wtf/walker/tasks/test/TestBaseTypeInheritanceCheck.java 217
de/fhdw/wtf/walker/tasks/test/TestBaseTypeInheritanceCheck.java 267
		final SimpleScannerInput input = new SimpleScannerInput("personGroup:group=[Person:class=Anything+{};];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		final SimpleWalkerTask referencer = TypeReferencer.create(model, taskmanager);
		final SimpleWalkerTask baseTypeInheritanceCheck = BaseTypeInheritanceCheck.create(model, taskmanager);
		baseTypeInheritanceCheck.addDependency(referencer);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(2, okResult.size());
		assertEquals(0, failResult.size());
	}
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 750
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 830
	public void testTransitiveInheritanceAndSumSupertypeIsClass() throws Exception {
		final SimpleScannerInput input =
				new SimpleScannerInput("Group:group=[A:class={Attribute1:{C,D};}; B:class=A+{}; C:class=B+{}; "
						+ "D:class=B+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final Iterator<GroupElement> iterator = model.getGroups().iterator().next().getGroupElements().iterator();
		final ClassType clssA = (ClassType) iterator.next();
		final ClassType clssB = (ClassType) iterator.next();
		
		final Iterator<Attribute> attrIterator = clssA.getAttributes().iterator();
		
		final Attribute attr1 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 842
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 738
	public void testTransitiveInheritanceAndSumSupertypeIsClass3() throws Exception {
		final SimpleScannerInput input =
				new SimpleScannerInput("Group:group=[A:class={Attribute1:{C,D};}; B:class=A+{}; C:class=B+{}; "
						+ "D:class=B+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final Iterator<GroupElement> iterator = model.getGroups().iterator().next().getGroupElements().iterator();
		final ClassType clssA = (ClassType) iterator.next();
		final ClassType clssB = (ClassType) iterator.next();
		
		final Iterator<Attribute> attrIterator = clssA.getAttributes().iterator();
		
		final Attribute attr1 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
File Line
de/fhdw/wtf/parser/test/TestOperations.java 299
de/fhdw/wtf/parser/test/TestOperations.java 599
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.doubleSquareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Operation> operations = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(myGroup);
		final Group group = Group.create(groupName, groupVector, myGroup);
		
		final Name className = groupName.addName(myClass);
		final ClassType class1 =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						new Vector<Attribute>(),
						new Vector<Type>(),
						operations,
						new Vector<Constructor>(),
						myClass,
						
						new Vector<ClassType>());
		groupVector.add(class1);
		
		final ProductType product = ProductType.create(this.bracketOpenToken);
		final ByNameState byName = ByNameState.create(UnqualifiedName.create(string));
File Line
de/fhdw/wtf/parser/test/TestOperations.java 221
de/fhdw/wtf/parser/test/TestOperations.java 599
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.doubleSquareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Operation> operations = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(myGroup);
		final Group group = Group.create(groupName, groupVector, myGroup);
		
		final Name className = groupName.addName(myClass);
		
		final ClassType class1 =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						new Vector<Attribute>(),
						new Vector<Type>(),
						operations,
						new Vector<Constructor>(),
						myClass,
						
						new Vector<ClassType>());
		groupVector.add(class1);
		
		final ProductType product = ProductType.create(this.bracketOpenToken);
		final SumType sum = SumType.create(this.curlyBracketOpenToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 269
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 426
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 235
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 281
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 394
						+ "B:class=A+{}; C:class=A+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final ClassType clss = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		final Iterator<Attribute> attrIterator = clss.getAttributes().iterator();
		final Attribute attr1 = attrIterator.next();
		final Attribute attr2 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		assertEquals(1, supertypesAttr1.size());
		final Iterator<Type> superTypesAttr1Iterator = supertypesAttr1.iterator();
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 2001
de/fhdw/wtf/parser/test/TestAttributes.java 2043
	public void testSimpleClassInGroupWithPriorModifiersComplete() {
		final IdentifierToken groupIdentifier = IdentifierToken.create("Group", Position.create("", 0 + 1, 0 + 1, 0));
		final IdentifierToken classIdentifier = IdentifierToken.create("Class", Position.create("", 0 + 1, 0 + 1, 0));
		final IdentifierToken attributeIdentifier =
				IdentifierToken.create("Attribute", Position.create("", 0 + 1, 0 + 1, 0));
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.stringIdentifier);
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 222
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 269
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 316
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 426
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 473
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 190
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 235
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 281
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 394
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 439
						+ "Attribute2:{String,Integer};};" + "Class2:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final ClassType clss = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		final Iterator<Attribute> attrIterator = clss.getAttributes().iterator();
		final Attribute attr1 = attrIterator.next();
		final Attribute attr2 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		assertEquals(1, supertypesAttr1.size());
		final Iterator<Type> superTypesAttr1Iterator = supertypesAttr1.iterator();
File Line
de/fhdw/wtf/parser/test/TestOperations.java 360
de/fhdw/wtf/parser/test/TestOperations.java 668
		final IdentifierToken myParameter2 = IdentifierToken.create("MyParameter2", Position.create("", 1, 1, 0));
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		final IdentifierToken integer = IdentifierToken.create("Integer", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myOperation);
		this.stream.add(this.colonToken);
		this.stream.add(this.doubleSquareBracketOpenToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(myParameter1);
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 980
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 1079
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 1148
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 992
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 1062
								+ "D:class=B+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final Iterator<GroupElement> iterator = model.getGroups().iterator().next().getGroupElements().iterator();
		final ClassType clssA = (ClassType) iterator.next();
		final ClassType clssB = (ClassType) iterator.next();
		iterator.next();
		iterator.next();
		final ClassType clss = (ClassType) iterator.next();
		
		final Iterator<Attribute> attrIterator = clssA.getAttributes().iterator();
		
		final Attribute attr1 = attrIterator.next();
		
		assertEquals(0, attr1.getAttrType().getSuperTypes().size());
		final Type attr1Type = attr1.getAttrType().getPrototype();
		final Collection<Type> supertypesAttr1 = attr1Type.getSuperTypes();
File Line
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1401
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1488
		actualSum.add(TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(a))));
		actualSum.add(ThrownType.create(
				dummyToken,
				TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(b)))));
		
		final ThrownType thrownType = ThrownType.create(DummyToken.getInstance(), actualSum, DummyToken.getInstance());
		
		final Type standardizedType = thrownType.standardize();
		
		// Prepare Expected
		final SumType expectedSum = SumType.create(dummyToken);
		expectedSum.add(ThrownType.create(
				dummyToken,
				TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(a)))));
		expectedSum.add(ThrownType.create(
				dummyToken,
				TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(b)))));
		
		// Test
		assertTrue(standardizedType instanceof SumType);
		final SumType sum = (SumType) standardizedType;
		assertEquals(2, sum.getElements().size());
		assertEquals(2, expectedSum.getElements().size());
		this.assertEqualsOnlists(sum.getElements(), expectedSum.getElements());
	}
	
	/**
	 * {B!,A}! => Result: {A!,B!}.
	 * 
	 * @throws SumIsAnythingException
	 *             If it contains Anything throw specified Exception
	 */
	@Test
	public void testThrownSumContainsOneThrownTypeSecondAndOneNormalThrownTypesAndDifferentOrder()
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 145
de/fhdw/wtf/parser/test/TestAttributes.java 300
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.stringIdentifier);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group1 = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType class1 =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						new Vector<ClassType>());
		
		final ByNameState attributeTypeReferenceState =
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 549
de/fhdw/wtf/parser/test/TestAttributes.java 781
de/fhdw/wtf/parser/test/TestAttributes.java 866
de/fhdw/wtf/parser/test/TestAttributes.java 1610
		this.stream.add(this.asteriskToken);
		this.stream.add(this.asteriskToken);
		this.stream.add(this.asteriskToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType classModel =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState attributeReferenceState = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
File Line
de/fhdw/wtf/parser/testWithScanner/TestParserScanner.java 91
de/fhdw/wtf/parser/testWithScanner/TestParserScanner.java 150
de/fhdw/wtf/parser/testWithScanner/TestParserScanner.java 217
de/fhdw/wtf/parser/testWithScanner/TestParserScanner.java 299
				new SimpleScannerInput("group1 : group = [ class1 : class = {op : [[()->test]];} service transient;];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Operation> operations = new Vector<>();
		final Vector<ClassModifier> modifiers = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, GroupToken.create(Position.create("", 1, 1, 0)));
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType clazz =
				RegularClassType.create(
						className,
						modifiers,
						new Vector<Attribute>(),
						new Vector<Type>(),
						operations,
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ProductType product = ProductType.create(this.bracketOpenToken);
		final ByNameState testByName = ByNameState.create(UnqualifiedName.create(test));
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 603
de/fhdw/wtf/parser/test/TestAttributes.java 926
de/fhdw/wtf/parser/test/TestAttributes.java 1000
de/fhdw/wtf/parser/test/TestAttributes.java 1077
de/fhdw/wtf/parser/test/TestAttributes.java 1154
de/fhdw/wtf/parser/test/TestAttributes.java 1414
de/fhdw/wtf/parser/test/TestAttributes.java 2186
de/fhdw/wtf/parser/test/TestAttributes.java 2265
	public void testAttributeWithEmptyProduct() throws Exception {
		final IdentifierToken groupIdentifier = IdentifierToken.create("Group", Position.create("", 1, 1, 0));
		final IdentifierToken classIdentifier = IdentifierToken.create("Class", Position.create("", 1, 1, 0));
		final IdentifierToken attributeIdentifier = IdentifierToken.create("Attribute", Position.create("", 1, 1, 0));
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.bracketOpenToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 231
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 325
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 374
		final Attribute attr2 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		assertEquals(1, supertypesAttr1.size());
		final Iterator<Type> superTypesAttr1Iterator = supertypesAttr1.iterator();
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr1Iterator.next()));
		
		assertEquals(0, ((SumType) attr2.getAttrType()).getSuperTypes().size());
		final Collection<Type> supertypesAttr2 =
				((SumType) ((SumType) attr2.getAttrType()).getPrototype()).getSuperTypes();
		assertEquals(1, supertypesAttr2.size());
		final Iterator<Type> superTypesAttr2Iterator = supertypesAttr2.iterator();
		assertEquals(attr1Type, superTypesAttr2Iterator.next());
		
		assertEquals(1, model.getInteger().getPrototype().getSuperTypes().size());
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 506
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 479
				HelperUtils.getReferencedType(model.getString().getPrototype().getSuperTypes().iterator().next()));
	}
	
	/**
	 * Group:group=[A:class={ Attribute1:{B,C};}; B:class=A+{}; C:class=A+{}; Class:class={};]; .
	 * 
	 * @throws Exception
	 *             Exception
	 */
	@Test
	public void testSumSupertypeIsAnClass3() throws Exception {
		final SimpleScannerInput input =
				new SimpleScannerInput("Group:group=[A:class={ Attribute1:{B,C};}; "
						+ "B:class=A+{}; C:class=A+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final ClassType clss = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		final Iterator<Attribute> attrIterator = clss.getAttributes().iterator();
		final Attribute attr1 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		assertEquals(1, supertypesAttr1.size());
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 481
de/fhdw/wtf/parser/test/TestAttributes.java 551
de/fhdw/wtf/parser/test/TestAttributes.java 1877
de/fhdw/wtf/parser/test/TestAttributes.java 1948
		this.stream.add(this.asteriskToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType classModel =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState attributeReferenceState = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final TypeProxy attributeType = TypeProxy.create(this.stringIdentifier, attributeReferenceState);
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 1293
de/fhdw/wtf/parser/test/TestAttributes.java 1494
de/fhdw/wtf/parser/test/TestAttributes.java 1585
de/fhdw/wtf/parser/test/TestAttributes.java 1772
de/fhdw/wtf/parser/test/TestAttributes.java 2357
		final IdentifierToken countIdentifier = IdentifierToken.create("count", Position.create("", 1, 1, 0));
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(nameIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.stringIdentifier);
		this.stream.add(this.commaToken);
		this.stream.add(countIdentifier);
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 2355
de/fhdw/wtf/parser/test/TestAttributes.java 2458
de/fhdw/wtf/parser/test/TestAttributes.java 2548
		final IdentifierToken productIdentifier = IdentifierToken.create("product", Position.create("", 1, 1, 0));
		final IdentifierToken trueIdentifier = IdentifierToken.create("true", Position.create("", 1, 1, 0));
		final IdentifierToken falseIdentifier = IdentifierToken.create("false", Position.create("", 1, 1, 0));
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.bracketOpenToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 451
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 496
				new SimpleScannerInput("Group:group=[Klasse:class={attr : (parameter:Integer,Parameter:String);};];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		Model model = null;
		model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		ProductCheck.create(model, taskmanager);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<OKTaskResult>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<ExceptionalTaskResult>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(1, okResult.size());
		assertEquals(0, failResult.size());
	}
	
	/**
	 * Group:group=[Klasse:class={attr : (parameter:Integer,paraMeter:String);};]; .
	 * 
	 * @throws InterruptedException
	 * @throws ExecutionException
	 * @throws NoValidTokenStreamException
	 * @throws CyclicDependencyException
	 */
	@Test
	public void testCapitalisation4() throws InterruptedException, ExecutionException, NoValidTokenStreamException,
File Line
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1319
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1361
		actualSum.add(TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(a))));
		actualSum.add(TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(b))));
		
		final ThrownType thrownType = ThrownType.create(DummyToken.getInstance(), actualSum, DummyToken.getInstance());
		
		final Type standardizedType = thrownType.standardize();
		
		// Prepare Expected
		final SumType expectedSum = SumType.create(dummyToken);
		expectedSum.add(ThrownType.create(
				dummyToken,
				TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(a)))));
		expectedSum.add(ThrownType.create(
				dummyToken,
				TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(b)))));
		
		// Test
		assertTrue(standardizedType instanceof SumType);
		final SumType sum = (SumType) standardizedType;
		assertEquals(2, sum.getElements().size());
		assertEquals(2, expectedSum.getElements().size());
		this.assertEqualsOnlists(sum.getElements(), expectedSum.getElements());
	}
	
	/**
	 * {A!,B}! => Result: {A!,B!}.
	 * 
	 * @throws SumIsAnythingException
	 *             If it contains Anything throw specified Exception
	 */
	@Test
	public void testThrownSumContainsOneThrownTypeFirstAndOneNormalThrownTypes() throws SumIsAnythingException {
File Line
de/fhdw/wtf/parser/test/TestConstructors.java 95
de/fhdw/wtf/parser/test/TestConstructors.java 141
		final SimpleScannerInput input = new SimpleScannerInput("Group1:group=[A:class={};];");
		final VerboseTokenStream output = new VerboseTokenStream(SimpleTokenStream.create());
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		
		final IdentifierToken group1IdentifierToken = (IdentifierToken) output.getStream().peek();
		final IdentifierToken aIdentifierToken = IdentifierToken.create("A", Position.create("", 1, 15, 6));
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Constructor> constructors = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(group1IdentifierToken);
		final Group group = Group.create(groupName, groupVector, group1IdentifierToken);
		
		final Name aName = groupName.addName(aIdentifierToken);
		final ClassType aClass =
				RegularClassType.create(
						aName,
						new Vector<ClassModifier>(),
						new Vector<Attribute>(),
						new Vector<Type>(),
						new Vector<Operation>(),
						constructors,
						aIdentifierToken,
						
						new Vector<ClassType>());
		groupVector.add(aClass);
		
		final Model expected = Model.create(group1IdentifierToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 127
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 166
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 214
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 283
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 332
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 381
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 430
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 479
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 519
						+ "NaturalPerson:class=Person+{}; CorporateBody:class=Person+{};];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		final SimpleWalkerTask referencer = TypeReferencer.create(model, taskmanager);
		final SimpleWalkerTask cyclicInheritance = CyclicInheritanceCheck.create(model, taskmanager);
		cyclicInheritance.addDependency(referencer);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<OKTaskResult>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<ExceptionalTaskResult>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(2, okResult.size());
File Line
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 268
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 314
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 360
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 406
						"Group:group=[Klasse:class={operation : [[(parameter1:Integer,parameter2:String) -> String ]];};];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		Model model = null;
		model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		ProductCheck.create(model, taskmanager);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(1, okResult.size());
		assertEquals(0, failResult.size());
	}
	
	/**
	 * Group:group=[Klasse:class={operation : [[(parameter1:Integer,parameter2:String) -> String ]];};]; .
	 * 
	 * @throws InterruptedException
	 * @throws ExecutionException
	 * @throws NoValidTokenStreamException
	 * @throws CyclicDependencyException
	 */
	@Test
	public void testTwoDifferentNames2() throws InterruptedException, ExecutionException, NoValidTokenStreamException,
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 481
de/fhdw/wtf/parser/test/TestAttributes.java 551
de/fhdw/wtf/parser/test/TestAttributes.java 1877
de/fhdw/wtf/parser/test/TestAttributes.java 1948
de/fhdw/wtf/parser/test/TestAttributes.java 2136
		this.stream.add(this.asteriskToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType classModel =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState attributeReferenceState = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
File Line
de/fhdw/wtf/parser/test/TestConstructors.java 688
de/fhdw/wtf/parser/test/TestConstructors.java 763
		final IdentifierToken iParameterIdentifierToken = IdentifierToken.create("i", Position.create("", 1, 1, 1));
		
		final IdentifierToken op1 = IdentifierToken.create("op1", Position.create("", 1, 1, 0));
		final IdentifierToken op2 = IdentifierToken.create("op2", Position.create("", 1, 1, 0));
		
		final Vector<GroupElement> group1Vector = new Vector<>();
		final Vector<Constructor> constructors = new Vector<>();
		final Vector<Operation> operations = new Vector<>();
		
		final Name group1Name = UnqualifiedName.create(group1IdentifierToken);
		final Group group1 = Group.create(group1Name, group1Vector, group1IdentifierToken);
		
		final Name aName = group1Name.addName(aIdentifierToken);
		final ClassType aClass =
				RegularClassType.create(
						aName,
						new Vector<ClassModifier>(),
						new Vector<Attribute>(),
						new Vector<Type>(),
						operations,
						constructors,
						aIdentifierToken,
						
						new Vector<ClassType>());
		group1Vector.add(aClass);
		
		final ProductType aProduct = ProductType.create(this.bracketOpenToken);
		final ProductType sProduct = ProductType.create(this.bracketOpenToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 39
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 88
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 127
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 166
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 214
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 283
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 332
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 381
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 430
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 479
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 519
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 559
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 606
						+ "CorporateBody:class=Person+{};];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		final SimpleWalkerTask referencer = TypeReferencer.create(model, taskmanager);
		final SimpleWalkerTask cyclicInheritance = CyclicInheritanceCheck.create(model, taskmanager);
		cyclicInheritance.addDependency(referencer);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<OKTaskResult>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<ExceptionalTaskResult>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(1, okResult.size());
File Line
de/fhdw/wtf/parser/test/TestGetFirstAndLastToken.java 414
de/fhdw/wtf/parser/test/TestGetFirstAndLastToken.java 503
de/fhdw/wtf/parser/test/TestGetFirstAndLastToken.java 715
		expectedLastToken = EndToken.create(Position.create("", 0 + 1, 47 + 1, 47));
		
		assertEquals(expectedFirstToken, group.getFirstToken());
		assertEquals(expectedLastToken, group.getLastToken());
		
		// Gruppenname
		Name name = group.getName();
		assertEquals(expectedFirstToken, name.getFirstToken());
		expectedLastToken = ColonToken.create(Position.create("", 0 + 1, 5 + 1, 5));
		assertEquals(expectedLastToken, name.getLastToken());
		
		// Klasse Class
		final Iterator<GroupElement> iterator2 = group.getGroupElements().iterator();
		final GroupElement groupElement = iterator2.next();
		final ClassType class1 = groupElement.accept(new GroupElementReturnVisitor<ClassType>() {
			
			@Override
			public ClassType handle(final Group group) {
				fail();
				return null;
			}
			
			@Override
			public ClassType handle(final ClassType clss) {
				return clss;
			}
		});
		
		expectedFirstToken = IdentifierToken.create("Class", Position.create("", 0 + 1, 13 + 1, 13));
		expectedLastToken = SquareBracketCloseToken.create(Position.create("", 0 + 1, 45 + 1, 45));
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 480
de/fhdw/wtf/parser/test/TestAttributes.java 550
de/fhdw/wtf/parser/test/TestAttributes.java 694
de/fhdw/wtf/parser/test/TestAttributes.java 782
de/fhdw/wtf/parser/test/TestAttributes.java 867
de/fhdw/wtf/parser/test/TestAttributes.java 1098
de/fhdw/wtf/parser/test/TestAttributes.java 1519
de/fhdw/wtf/parser/test/TestAttributes.java 1611
		this.stream.add(this.stringIdentifier);
		this.stream.add(this.asteriskToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType classModel =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState attributeReferenceState = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 946
de/fhdw/wtf/parser/test/TestAttributes.java 1021
de/fhdw/wtf/parser/test/TestAttributes.java 1228
de/fhdw/wtf/parser/test/TestAttributes.java 1435
de/fhdw/wtf/parser/test/TestAttributes.java 1706
de/fhdw/wtf/parser/test/TestAttributes.java 1797
		this.stream.add(this.stringIdentifier);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType classModel =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState stringReferenceState = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
File Line
de/fhdw/wtf/walker/tasks/test/TestBaseTypeInheritanceCheck.java 52
de/fhdw/wtf/walker/tasks/test/TestBaseTypeInheritanceCheck.java 110
de/fhdw/wtf/walker/tasks/test/TestBaseTypeInheritanceCheck.java 168
de/fhdw/wtf/walker/tasks/test/TestBaseTypeInheritanceCheck.java 217
de/fhdw/wtf/walker/tasks/test/TestBaseTypeInheritanceCheck.java 267
		final SimpleScannerInput input = new SimpleScannerInput("personGroup:group=[Person:class=Integer+{};];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		final SimpleWalkerTask referencer = TypeReferencer.create(model, taskmanager);
		final SimpleWalkerTask baseTypeInheritanceCheck = BaseTypeInheritanceCheck.create(model, taskmanager);
		baseTypeInheritanceCheck.addDependency(referencer);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(1, okResult.size());
File Line
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 44
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 88
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 133
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 177
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 223
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 268
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 311
						+ "Class3:class={Attribute1:Class2 symmetric (Class1);};];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		final SimpleWalkerTask referencer = TypeReferencer.create(model, taskmanager);
		final InvalidAttributeModifierCheck modifierCheck = InvalidAttributeModifierCheck.create(model, taskmanager);
		modifierCheck.addDependency(referencer);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(2, okResult.size());
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 619
de/fhdw/wtf/parser/test/TestAttributes.java 2135
		this.stream.add(this.bracketOpenToken);
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType classModel =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ProductType product = ProductType.create(this.bracketOpenToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 484
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 534
						"Group:group=[Klasse:class={name : String;operation : [[(parameter:Integer) -> String ]] ;operation2 : [[(parameter:Integer) -> String ]] abstract;} abstract; ];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		Model model = null;
		model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		AbstractOperationsCheck.create(model, taskmanager);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(1, okResult.size());
		assertEquals(0, failResult.size());
	}
File Line
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 268
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 314
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 360
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 406
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 544
						"Group:group=[Klasse:class={operation : [[(parameter1:Integer,parameter2:String) -> String ]];};];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		Model model = null;
		model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		ProductCheck.create(model, taskmanager);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(1, okResult.size());
		assertEquals(0, failResult.size());
	}
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 278
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 374
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 435
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 482
		final Attribute attr2 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		assertEquals(1, supertypesAttr1.size());
		final Iterator<Type> superTypesAttr1Iterator = supertypesAttr1.iterator();
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr1Iterator.next()));
		
		assertEquals(0, ((SumType) attr2.getAttrType()).getSuperTypes().size());
		final Collection<Type> supertypesAttr2 =
				((SumType) ((SumType) attr2.getAttrType()).getPrototype()).getSuperTypes();
		assertEquals(1, supertypesAttr2.size());
		final Iterator<Type> superTypesAttr2Iterator = supertypesAttr2.iterator();
		assertEquals(clss, HelperUtils.getReferencedType(superTypesAttr2Iterator.next()));
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 199
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 345
		final Attribute attr2 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		assertEquals(1, supertypesAttr1.size());
		final Iterator<Type> superTypesAttr1Iterator = supertypesAttr1.iterator();
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr1Iterator.next()));
		
		assertEquals(0, ((SumType) attr2.getAttrType()).getSuperTypes().size());
		final Collection<Type> supertypesAttr2 =
				((SumType) ((SumType) attr2.getAttrType()).getPrototype()).getSuperTypes();
		assertEquals(2, supertypesAttr2.size());
		final Iterator<Type> superTypesAttr2Iterator = supertypesAttr2.iterator();
		assertEquals(attr1Type, superTypesAttr2Iterator.next());
File Line
de/fhdw/wtf/parser/testWithScanner/TestParserScanner.java 91
de/fhdw/wtf/parser/testWithScanner/TestParserScanner.java 150
de/fhdw/wtf/parser/testWithScanner/TestParserScanner.java 217
de/fhdw/wtf/parser/testWithScanner/TestParserScanner.java 299
de/fhdw/wtf/parser/testWithScanner/TestParserScanner.java 383
				new SimpleScannerInput("group1 : group = [ class1 : class = {op : [[()->test]];} service transient;];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Operation> operations = new Vector<>();
		final Vector<ClassModifier> modifiers = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, GroupToken.create(Position.create("", 1, 1, 0)));
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType clazz =
				RegularClassType.create(
						className,
						modifiers,
						new Vector<Attribute>(),
						new Vector<Type>(),
						operations,
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ProductType product = ProductType.create(this.bracketOpenToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 125
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 150
		final SimpleScannerInput input = new SimpleScannerInput("Group:group=[];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		assertEquals(1, model.getInteger().getPrototype().getSuperTypes().size());
		assertEquals(
				model.getAnything().getPrototype(),
				HelperUtils.getReferencedType(model.getInteger().getPrototype().getSuperTypes().iterator().next()));
		
		assertEquals(1, model.getString().getPrototype().getSuperTypes().size());
		assertEquals(
				model.getAnything().getPrototype(),
				HelperUtils.getReferencedType(model.getString().getPrototype().getSuperTypes().iterator().next()));
	}
	
	/**
	 * Group:group=[Class:class={Attribute:String;};]; .
	 * 
	 * @throws Exception
	 *             Exception
	 */
	@Test
	public void testModelWithoutSum() throws Exception {
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 846
de/fhdw/wtf/parser/test/TestAttributes.java 2355
		final IdentifierToken attributeIdentifier = IdentifierToken.create("Attribute", Position.create("", 1, 1, 0));
		final IdentifierToken trueIdentifier = IdentifierToken.create("true", Position.create("", 1, 1, 0));
		final IdentifierToken falseIdentifier = IdentifierToken.create("false", Position.create("", 1, 1, 0));
		
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.curlyBracketOpenToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 177
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 222
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 269
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 316
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 426
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 473
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 149
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 190
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 235
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 281
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 394
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 439
						+ "Attribute2:{String,Integer};};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final ClassType clss = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		final Iterator<Attribute> attrIterator = clss.getAttributes().iterator();
		final Attribute attr1 = attrIterator.next();
		final Attribute attr2 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
File Line
de/fhdw/wtf/parser/test/TestGroups.java 215
de/fhdw/wtf/parser/test/TestGroups.java 248
	public void testSimpleGroupInGroupInGroup2GroupCloseMissing() {
		this.stream.add(this.idGroup1Token);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.idGroup2Token);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.idGroup3Token);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.semicolonToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 613
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 685
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 596
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 664
						+ "Attribute3:{Integer,String};}; B:class=A+{}; C:class=A+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final Iterator<GroupElement> iterator = model.getGroups().iterator().next().getGroupElements().iterator();
		
		final ClassType clssA = (ClassType) iterator.next();
		final ClassType clssB = (ClassType) iterator.next();
		final ClassType clssC = (ClassType) iterator.next();
		final ClassType clssClass = (ClassType) iterator.next();
		
		final Iterator<Attribute> attrIterator = clssA.getAttributes().iterator();
		final Attribute attr1 = attrIterator.next();
		final Attribute attr2 = attrIterator.next();
		final Attribute attr3 = attrIterator.next();
		
		final Type attr2Type = ((SumType) attr2.getAttrType()).getPrototype();
File Line
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 365
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 394
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 533
		final SimpleScannerInput input = new SimpleScannerInput("Group:group=[Class:class={Attribute1:{Class};};];");
		final Model model = this.getModel(input);
		
		assertTrue(model.getString().getPrototype() == model.getString());
		assertTrue(model.getInteger().getPrototype() == model.getInteger());
		
		final ClassType cls = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		
		assertTrue(cls.getPrototype() == cls);
		
		final Iterator<Attribute> attributes = cls.getAttributes().iterator();
		final Attribute attribute1 = attributes.next();
		
		assertTrue(attribute1.getAttrType() instanceof SumType);
		final SumType sum = (SumType) attribute1.getAttrType();
		
		assertTrue(sum.getPrototype() == cls);
		// String,Integer,Class
		assertEquals(3, ((SumType) model.getAnything().getPrototype()).getElements().size());
	}
	
	/**
	 * Group:group=[Class:class={Attribute1:{{Class}};};]; .
	 * 
	 * @throws Exception
	 *             possible Exception
	 */
	@Test
	public void testSumWithOneElementAtBeginningOneSumWithOneClass() throws Exception {
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 481
de/fhdw/wtf/parser/test/TestAttributes.java 551
de/fhdw/wtf/parser/test/TestAttributes.java 695
de/fhdw/wtf/parser/test/TestAttributes.java 783
de/fhdw/wtf/parser/test/TestAttributes.java 868
de/fhdw/wtf/parser/test/TestAttributes.java 947
de/fhdw/wtf/parser/test/TestAttributes.java 1022
de/fhdw/wtf/parser/test/TestAttributes.java 1099
de/fhdw/wtf/parser/test/TestAttributes.java 1229
de/fhdw/wtf/parser/test/TestAttributes.java 1318
de/fhdw/wtf/parser/test/TestAttributes.java 1436
de/fhdw/wtf/parser/test/TestAttributes.java 1520
de/fhdw/wtf/parser/test/TestAttributes.java 1612
de/fhdw/wtf/parser/test/TestAttributes.java 1707
de/fhdw/wtf/parser/test/TestAttributes.java 1798
de/fhdw/wtf/parser/test/TestAttributes.java 1877
de/fhdw/wtf/parser/test/TestAttributes.java 1948
de/fhdw/wtf/parser/test/TestAttributes.java 2136
		this.stream.add(this.asteriskToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType classModel =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState attributeReferenceState = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 185
de/fhdw/wtf/parser/test/TestExceptions.java 339
de/fhdw/wtf/parser/test/TestExceptions.java 397
de/fhdw/wtf/parser/test/TestExceptions.java 452
de/fhdw/wtf/parser/test/TestExceptions.java 783
de/fhdw/wtf/parser/test/TestExceptions.java 1064
de/fhdw/wtf/parser/test/TestOperations.java 277
de/fhdw/wtf/parser/test/TestOperations.java 580
		final IdentifierToken myParameter = IdentifierToken.create("MyParameter", Position.create("", 1, 1, 0));
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myOperation);
		this.stream.add(this.colonToken);
		this.stream.add(this.doubleSquareBracketOpenToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(myParameter);
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 481
de/fhdw/wtf/parser/test/TestAttributes.java 551
de/fhdw/wtf/parser/test/TestAttributes.java 620
de/fhdw/wtf/parser/test/TestAttributes.java 695
de/fhdw/wtf/parser/test/TestAttributes.java 783
de/fhdw/wtf/parser/test/TestAttributes.java 868
de/fhdw/wtf/parser/test/TestAttributes.java 947
de/fhdw/wtf/parser/test/TestAttributes.java 1022
de/fhdw/wtf/parser/test/TestAttributes.java 1099
de/fhdw/wtf/parser/test/TestAttributes.java 1229
de/fhdw/wtf/parser/test/TestAttributes.java 1318
de/fhdw/wtf/parser/test/TestAttributes.java 1436
de/fhdw/wtf/parser/test/TestAttributes.java 1520
de/fhdw/wtf/parser/test/TestAttributes.java 1612
de/fhdw/wtf/parser/test/TestAttributes.java 1707
de/fhdw/wtf/parser/test/TestAttributes.java 1798
de/fhdw/wtf/parser/test/TestAttributes.java 1877
de/fhdw/wtf/parser/test/TestAttributes.java 1948
		this.stream.add(this.asteriskToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType classModel =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						
						new Vector<ClassType>());
		
		final ByNameState attributeReferenceState = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 898
de/fhdw/wtf/parser/test/TestOperations.java 288
		this.stream.add(this.equalToken);
		this.stream.add(myOperation);
		this.stream.add(this.colonToken);
		this.stream.add(this.doubleSquareBracketOpenToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(myParameter);
		this.stream.add(this.colonToken);
		this.stream.add(string);
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.arrowToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.doubleSquareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
File Line
de/fhdw/wtf/parser/test/TestOperations.java 203
de/fhdw/wtf/parser/test/TestOperations.java 581
de/fhdw/wtf/parser/test/TestOperations.java 801
		final IdentifierToken myOperation = IdentifierToken.create("MyOperation", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myOperation);
		this.stream.add(this.colonToken);
		this.stream.add(this.doubleSquareBracketOpenToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.arrowToken);
		this.stream.add(this.curlyBracketOpenToken);
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 186
de/fhdw/wtf/parser/test/TestExceptions.java 340
de/fhdw/wtf/parser/test/TestExceptions.java 398
de/fhdw/wtf/parser/test/TestExceptions.java 453
de/fhdw/wtf/parser/test/TestExceptions.java 784
de/fhdw/wtf/parser/test/TestExceptions.java 1065
de/fhdw/wtf/parser/test/TestOperations.java 278
de/fhdw/wtf/parser/test/TestOperations.java 670
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myOperation);
		this.stream.add(this.colonToken);
		this.stream.add(this.doubleSquareBracketOpenToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(myParameter);
		this.stream.add(this.colonToken);
		this.stream.add(string);
File Line
de/fhdw/wtf/parser/test/TestGetFirstAndLastToken.java 443
de/fhdw/wtf/parser/test/TestGetFirstAndLastToken.java 532
		expectedLastToken = SquareBracketCloseToken.create(Position.create("", 0 + 1, 45 + 1, 45));
		
		assertEquals(expectedFirstToken, class1.getFirstToken());
		assertEquals(expectedLastToken, class1.getLastToken());
		
		// Klassenname
		name = class1.getName();
		
		// klassenName
		final UnqualifiedName lastAddedName = name.getLastAddedName();
		expectedFirstToken = IdentifierToken.create("Class", Position.create("", 0 + 1, 13 + 1, 13));
		assertEquals(expectedFirstToken, lastAddedName.getFirstToken());
		expectedLastToken = ColonToken.create(Position.create("", 0 + 1, 18 + 1, 18));
		assertEquals(expectedLastToken, lastAddedName.getLastToken());
		
		// Attribut Attribute
		final Iterator<Attribute> iterator3 = class1.getAttributes().iterator();
		final Attribute attribute = iterator3.next();
		
		expectedFirstToken = IdentifierToken.create("Attribute", Position.create("", 0 + 1, 26 + 1, 26));
		expectedLastToken = CurlyBracketCloseToken.create(Position.create("", 0 + 1, 43 + 1, 43));
File Line
de/fhdw/wtf/parser/test/TestOperations.java 203
de/fhdw/wtf/parser/test/TestOperations.java 471
de/fhdw/wtf/parser/test/TestOperations.java 801
		final IdentifierToken myOperation = IdentifierToken.create("MyOperation", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myOperation);
		this.stream.add(this.colonToken);
		this.stream.add(this.doubleSquareBracketOpenToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.arrowToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
File Line
de/fhdw/wtf/parser/test/TestConstructors.java 859
de/fhdw/wtf/parser/test/TestConstructors.java 918
de/fhdw/wtf/parser/test/TestConstructors.java 1044
		final IdentifierToken aIdentifierToken = IdentifierToken.create("A", Position.create("", 1, 1, 0));
		final IdentifierToken sIdentifierToken = IdentifierToken.create("s", Position.create("", 1, 1, 0));
		
		final Vector<GroupElement> group1Vector = new Vector<>();
		final Vector<Constructor> constructors = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name group1Name = UnqualifiedName.create(group1IdentifierToken);
		final Group group1 = Group.create(group1Name, group1Vector, group1IdentifierToken);
		
		final Name aName = group1Name.addName(aIdentifierToken);
		final ClassType aClass =
				RegularClassType.create(
						aName,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						constructors,
						aIdentifierToken,
						
						new Vector<ClassType>());
		group1Vector.add(aClass);
		
		final ByNameState attributeStringReferenceState =
				ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		
		final TypeProxy stringType = TypeProxy.create(this.stringIdentifier, attributeStringReferenceState);
File Line
de/fhdw/wtf/core/integration/test/TestScannerParserIntegration.java 64
de/fhdw/wtf/core/integration/test/TestScannerParserIntegration.java 90
		final SimpleTokenStream scannerOutput = SimpleTokenStream.create();
		final ModelDslScanner scanner = ModelDslScanner.create();
		scanner.scan(input, scannerOutput);
		final Parser p = Parser.create(scannerOutput);
		
		try {
			final Model result = p.parse();
			assertEquals(0, p.getExceptions().size());
			assertEquals(1, result.getGroups().size());
			final Group g = result.getGroups().iterator().next();
			assertEquals("gruppenName", ((UnqualifiedName) g.getName()).getIdentifierToken().getIdentifier());
			assertEquals(0, g.getGroupElements().size());
		} catch (final NoValidTokenStreamException e) {
			if (p.getExceptions().size() > 0) {
				System.out.println(p.getExceptions());
			}
			fail();
		}
	}
	
	/**
	 * "gruppenName : group =  \n [    \n];   " .
	 */
	@Test
	public void modelSimpleValidWhitespace() {
File Line
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1320
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1362
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1404
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1447
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1491
		actualSum.add(TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(b))));
		
		final ThrownType thrownType = ThrownType.create(DummyToken.getInstance(), actualSum, DummyToken.getInstance());
		
		final Type standardizedType = thrownType.standardize();
		
		// Prepare Expected
		final SumType expectedSum = SumType.create(dummyToken);
		expectedSum.add(ThrownType.create(
				dummyToken,
				TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(a)))));
		expectedSum.add(ThrownType.create(
				dummyToken,
				TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(b)))));
		
		// Test
		assertTrue(standardizedType instanceof SumType);
		final SumType sum = (SumType) standardizedType;
		assertEquals(2, sum.getElements().size());
		assertEquals(2, expectedSum.getElements().size());
		this.assertEqualsOnlists(sum.getElements(), expectedSum.getElements());
	}
	
	/**
	 * {A!,B}! => Result: {A!,B!}.
	 * 
	 * @throws SumIsAnythingException
	 *             If it contains Anything throw specified Exception
	 */
	@Test
	public void testThrownSumContainsOneThrownTypeFirstAndOneNormalThrownTypes() throws SumIsAnythingException {
File Line
de/fhdw/wtf/parser/test/TestConstructors.java 213
de/fhdw/wtf/parser/test/TestConstructors.java 313
		final Name cName = group1Name.addName(cIdentifierToken);
		
		final ClassType aClass =
				RegularClassType.create(
						aName,
						new Vector<ClassModifier>(),
						new Vector<Attribute>(),
						new Vector<Type>(),
						new Vector<Operation>(),
						aConstructors,
						aIdentifierToken,
						
						new Vector<ClassType>());
		
		final ClassType bClass =
				RegularClassType.create(
						bName,
						new Vector<ClassModifier>(),
						new Vector<Attribute>(),
						new Vector<Type>(),
						new Vector<Operation>(),
						bConstructors,
						
						bIdentifierToken,
						
						new Vector<ClassType>());
		
		final ClassType cClass =
				RegularClassType.create(
						cName,
						new Vector<ClassModifier>(),
						new Vector<Attribute>(),
						new Vector<Type>(),
						new Vector<Operation>(),
						cConstructors,
						cIdentifierToken,
						
						new Vector<ClassType>());
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 665
de/fhdw/wtf/parser/test/TestOperations.java 580
		final IdentifierToken myParameter = IdentifierToken.create("MyParameter", Position.create("", 1, 1, 0));
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myOperation);
		this.stream.add(this.colonToken);
		this.stream.add(this.doubleSquareBracketOpenToken);
		this.stream.add(myParameter);
File Line
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 47
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 103
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 159
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 215
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 271
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 327
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 383
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 484
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 534
						"Group:group=[Klasse:class={name : String; operation : [[(parameter:Integer) -> String ]] abstract;}; ];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		Model model = null;
		model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		AbstractOperationsCheck.create(model, taskmanager);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(0, okResult.size());
File Line
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 47
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 101
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 158
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 213
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 268
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 314
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 360
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 406
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 544
						"Group:group=[Klasse:class={operation : [[(parameter:Integer,parameter:String) -> String ]];};];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		Model model = null;
		model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		ProductCheck.create(model, taskmanager);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(0, okResult.size());
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 1204
de/fhdw/wtf/parser/test/TestAttributes.java 2550
		final IdentifierToken countIdentifier = IdentifierToken.create("count", Position.create("", 1, 1, 0));
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.stringIdentifier);
		this.stream.add(this.arrowToken);
		this.stream.add(this.bracketOpenToken);
File Line
de/fhdw/wtf/parser/test/TestConstructors.java 547
de/fhdw/wtf/parser/test/TestConstructors.java 618
de/fhdw/wtf/parser/test/TestConstructors.java 691
		final IdentifierToken op = IdentifierToken.create("op", Position.create("", 1, 1, 0));
		
		final Vector<GroupElement> group1Vector = new Vector<>();
		final Vector<Constructor> constructors = new Vector<>();
		final Vector<Operation> operations = new Vector<>();
		
		final Name group1Name = UnqualifiedName.create(group1IdentifierToken);
		final Group group1 = Group.create(group1Name, group1Vector, group1IdentifierToken);
		
		final Name aName = group1Name.addName(aIdentifierToken);
		
		final ClassType aClass =
				RegularClassType.create(
						aName,
						new Vector<ClassModifier>(),
						new Vector<Attribute>(),
						new Vector<Type>(),
						operations,
						constructors,
						aIdentifierToken,
						
						new Vector<ClassType>());
		group1Vector.add(aClass);
		
		final ProductType aProduct = ProductType.create(this.bracketOpenToken);
		final ProductType sProduct = ProductType.create(this.bracketOpenToken);
		
		final ByNameState stringName = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 718
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 696
		assertEquals(expectedSupertypes, actualSupertypes);
		
		assertEquals(0, ((SumType) attr2.getAttrType()).getSuperTypes().size());
		final Collection<Type> supertypesAttr2 =
				((SumType) ((SumType) attr2.getAttrType()).getPrototype()).getSuperTypes();
		assertEquals(0, supertypesAttr2.size());
		
		assertEquals(0, ((SumType) attr3.getAttrType()).getSuperTypes().size());
		final Collection<Type> supertypesAttr3 =
				((SumType) ((SumType) attr3.getAttrType()).getPrototype()).getSuperTypes();
		assertEquals(1, supertypesAttr3.size());
		final Iterator<Type> superTypesAttr3Iterator = supertypesAttr3.iterator();
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr3Iterator.next()));
		
		assertEquals(1, model.getInteger().getPrototype().getSuperTypes().size());
File Line
de/fhdw/wtf/parser/test/TestConstructors.java 860
de/fhdw/wtf/parser/test/TestConstructors.java 919
de/fhdw/wtf/parser/test/TestConstructors.java 979
		final IdentifierToken sIdentifierToken = IdentifierToken.create("s", Position.create("", 1, 1, 0));
		
		final Vector<GroupElement> group1Vector = new Vector<>();
		final Vector<Constructor> constructors = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name group1Name = UnqualifiedName.create(group1IdentifierToken);
		final Group group1 = Group.create(group1Name, group1Vector, group1IdentifierToken);
		
		final Name aName = group1Name.addName(aIdentifierToken);
		final ClassType aClass =
				RegularClassType.create(
						aName,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						constructors,
						aIdentifierToken,
						
						new Vector<ClassType>());
		group1Vector.add(aClass);
		
		final ByNameState attributeStringReferenceState =
				ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		
		final TypeProxy stringType = TypeProxy.create(this.stringIdentifier, attributeStringReferenceState);
File Line
de/fhdw/wtf/parser/test/TestConstructors.java 1144
de/fhdw/wtf/parser/test/TestConstructors.java 1290
de/fhdw/wtf/parser/test/TestConstructors.java 1383
						ByNameState.create(UnqualifiedName.create(this.stringIdentifier)));
		
		attributes.add(Attribute.create("s", stringType, new Vector<AttributeModifier>(), sIdentifierToken));
		sProduct.addElement(ProductElementType.create("s", stringType, sIdentifierToken));
		constructors.add(Constructor.create(aProduct, aClass, new Vector<ConstructorReference>(), aIdentifierToken));
		
		final Operation operation =
				Operation.create(
						"op",
						new Vector<OperationModifier>(),
						sProduct,
						aClass,
						SumType.create(this.curlyBracketOpenToken),
						op);
		operations.add(operation);
		
		final Model expected = Model.create(group1IdentifierToken);
		expected.addGroup(group1);
		
		this.parser = Parser.create(output);
		final Model actual = this.parser.parse();
		
		assertEquals(0, this.parser.getExceptions().size());
		assertEquals(expected, actual);
		
	}
	
	/**
	 * Group1:group=[A:class={op:[[(s:String)->{}]];();s:String;};];.
	 * 
	 * 
	 * @throws Exception
	 *             {@link de.fhdw.wtf.common.exception.parser.NoValidTokenStreamException}
	 */
	@Test
	public void testFirstOperationThanConstructorThanVariale() throws Exception {
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 673
de/fhdw/wtf/parser/test/TestAttributes.java 1381
		final IdentifierToken countIdentifier = IdentifierToken.create("count", Position.create("", 1, 1, 0));
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(nameIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.stringIdentifier);
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 937
de/fhdw/wtf/parser/test/TestExceptions.java 977
	public void testNoCurlyBracketOpenException2() {
		this.stream = SimpleTokenStream.create();
		this.parser = Parser.create(this.stream);
		final IdentifierToken myGroup = IdentifierToken.create("MyGroup", Position.create("", 1, 1, 0));
		final IdentifierToken myClass = IdentifierToken.create("MyClass", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 231
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 278
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 325
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 435
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 482
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 345
		final Attribute attr2 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		assertEquals(1, supertypesAttr1.size());
		final Iterator<Type> superTypesAttr1Iterator = supertypesAttr1.iterator();
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr1Iterator.next()));
		
		assertEquals(0, ((SumType) attr2.getAttrType()).getSuperTypes().size());
		final Collection<Type> supertypesAttr2 =
				((SumType) ((SumType) attr2.getAttrType()).getPrototype()).getSuperTypes();
		assertEquals(1, supertypesAttr2.size());
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 374
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 199
		final Attribute attr4 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		assertEquals(1, supertypesAttr1.size());
		final Iterator<Type> superTypesAttr1Iterator = supertypesAttr1.iterator();
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr1Iterator.next()));
		
		assertEquals(0, ((SumType) attr2.getAttrType()).getSuperTypes().size());
		final Collection<Type> supertypesAttr2 =
				((SumType) ((SumType) attr2.getAttrType()).getPrototype()).getSuperTypes();
		assertEquals(1, supertypesAttr2.size());
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 241
de/fhdw/wtf/parser/test/TestExceptions.java 508
de/fhdw/wtf/parser/test/TestExceptions.java 558
de/fhdw/wtf/parser/test/TestExceptions.java 609
		final IdentifierToken name = IdentifierToken.create("name", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myAttribute);
		this.stream.add(this.colonToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(name);
		this.stream.add(this.colonToken);
		this.stream.add(this.bracketCloseToken);
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 290
de/fhdw/wtf/parser/test/TestExceptions.java 839
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myAttribute);
		this.stream.add(this.colonToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(string);
		this.stream.add(this.commaToken);
		this.stream.add(this.curlyBracketCloseToken);
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 837
de/fhdw/wtf/parser/test/TestExceptions.java 1235
de/fhdw/wtf/parser/test/TestOperations.java 360
de/fhdw/wtf/parser/test/TestOperations.java 668
		final IdentifierToken myAttribute = IdentifierToken.create("MyAttribute", Position.create("", 1, 1, 0));
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		final IdentifierToken integer = IdentifierToken.create("Integer", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myAttribute);
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 374
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 244
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 345
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 403
		final Attribute attr4 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		assertEquals(1, supertypesAttr1.size());
		final Iterator<Type> superTypesAttr1Iterator = supertypesAttr1.iterator();
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr1Iterator.next()));
		
		assertEquals(0, ((SumType) attr2.getAttrType()).getSuperTypes().size());
		final Collection<Type> supertypesAttr2 =
				((SumType) ((SumType) attr2.getAttrType()).getPrototype()).getSuperTypes();
File Line
de/fhdw/wtf/parser/test/TestGetFirstAndLastToken.java 414
de/fhdw/wtf/parser/test/TestGetFirstAndLastToken.java 503
de/fhdw/wtf/parser/test/TestGetFirstAndLastToken.java 607
de/fhdw/wtf/parser/test/TestGetFirstAndLastToken.java 715
		expectedLastToken = EndToken.create(Position.create("", 0 + 1, 47 + 1, 47));
		
		assertEquals(expectedFirstToken, group.getFirstToken());
		assertEquals(expectedLastToken, group.getLastToken());
		
		// Gruppenname
		Name name = group.getName();
		assertEquals(expectedFirstToken, name.getFirstToken());
		expectedLastToken = ColonToken.create(Position.create("", 0 + 1, 5 + 1, 5));
		assertEquals(expectedLastToken, name.getLastToken());
		
		// Klasse Class
		final Iterator<GroupElement> iterator2 = group.getGroupElements().iterator();
		final GroupElement groupElement = iterator2.next();
		final ClassType class1 = groupElement.accept(new GroupElementReturnVisitor<ClassType>() {
			
			@Override
			public ClassType handle(final Group group) {
				fail();
				return null;
			}
			
			@Override
			public ClassType handle(final ClassType clss) {
				return clss;
			}
		});
		
		expectedFirstToken = IdentifierToken.create("Class", Position.create("", 0 + 1, 13 + 1, 13));
File Line
de/fhdw/wtf/parser/test/TestOperations.java 471
de/fhdw/wtf/parser/test/TestOperations.java 581
		this.stream.add(this.semicolonToken);
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myOperation);
		this.stream.add(this.colonToken);
		this.stream.add(this.doubleSquareBracketOpenToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.arrowToken);
		this.stream.add(this.curlyBracketOpenToken);
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 289
de/fhdw/wtf/parser/test/TestExceptions.java 507
de/fhdw/wtf/parser/test/TestExceptions.java 557
de/fhdw/wtf/parser/test/TestExceptions.java 608
		final IdentifierToken myAttribute = IdentifierToken.create("MyAttribute", Position.create("", 1, 1, 0));
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myAttribute);
		this.stream.add(this.colonToken);
		this.stream.add(this.curlyBracketOpenToken);
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 679
de/fhdw/wtf/parser/test/TestExceptions.java 902
		this.stream.add(this.doubleSquareBracketOpenToken);
		this.stream.add(myParameter);
		this.stream.add(this.colonToken);
		this.stream.add(string);
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.arrowToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.doubleSquareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		try {
			this.parser.parse();
			fail();
		} catch (final NoValidTokenStreamException e) {
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 1204
de/fhdw/wtf/parser/test/TestAttributes.java 2460
		final IdentifierToken countIdentifier = IdentifierToken.create("count", Position.create("", 1, 1, 0));
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.stringIdentifier);
		this.stream.add(this.arrowToken);
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 1678
de/fhdw/wtf/parser/test/TestAttributes.java 2189
		final IdentifierToken countIdentifier = IdentifierToken.create("count", Position.create("", 1, 1, 0));
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.bracketOpenToken);
File Line
de/fhdw/wtf/parser/test/TestConstructors.java 547
de/fhdw/wtf/parser/test/TestConstructors.java 618
de/fhdw/wtf/parser/test/TestConstructors.java 766
		final IdentifierToken op = IdentifierToken.create("op", Position.create("", 1, 1, 0));
		
		final Vector<GroupElement> group1Vector = new Vector<>();
		final Vector<Constructor> constructors = new Vector<>();
		final Vector<Operation> operations = new Vector<>();
		
		final Name group1Name = UnqualifiedName.create(group1IdentifierToken);
		final Group group1 = Group.create(group1Name, group1Vector, group1IdentifierToken);
		
		final Name aName = group1Name.addName(aIdentifierToken);
		
		final ClassType aClass =
				RegularClassType.create(
						aName,
						new Vector<ClassModifier>(),
						new Vector<Attribute>(),
						new Vector<Type>(),
						operations,
						constructors,
						aIdentifierToken,
						
						new Vector<ClassType>());
		group1Vector.add(aClass);
		
		final ProductType aProduct = ProductType.create(this.bracketOpenToken);
		final ProductType sProduct = ProductType.create(this.bracketOpenToken);
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 1293
de/fhdw/wtf/parser/test/TestAttributes.java 1417
de/fhdw/wtf/parser/test/TestAttributes.java 1494
de/fhdw/wtf/parser/test/TestAttributes.java 1585
de/fhdw/wtf/parser/test/TestAttributes.java 1772
de/fhdw/wtf/parser/test/TestAttributes.java 2357
		final IdentifierToken countIdentifier = IdentifierToken.create("count", Position.create("", 1, 1, 0));
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(nameIdentifier);
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 186
de/fhdw/wtf/parser/test/TestExceptions.java 340
de/fhdw/wtf/parser/test/TestExceptions.java 398
de/fhdw/wtf/parser/test/TestExceptions.java 453
de/fhdw/wtf/parser/test/TestExceptions.java 784
de/fhdw/wtf/parser/test/TestExceptions.java 1065
de/fhdw/wtf/parser/test/TestOperations.java 203
de/fhdw/wtf/parser/test/TestOperations.java 278
de/fhdw/wtf/parser/test/TestOperations.java 362
de/fhdw/wtf/parser/test/TestOperations.java 581
de/fhdw/wtf/parser/test/TestOperations.java 670
de/fhdw/wtf/parser/test/TestOperations.java 801
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myOperation);
		this.stream.add(this.colonToken);
		this.stream.add(this.doubleSquareBracketOpenToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(myParameter);
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 937
de/fhdw/wtf/parser/test/TestExceptions.java 977
de/fhdw/wtf/parser/test/TestExceptions.java 1152
	public void testNoCurlyBracketOpenException2() {
		this.stream = SimpleTokenStream.create();
		this.parser = Parser.create(this.stream);
		final IdentifierToken myGroup = IdentifierToken.create("MyGroup", Position.create("", 1, 1, 0));
		final IdentifierToken myClass = IdentifierToken.create("MyClass", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestDoubleGroupcomponentCheck.java 113
de/fhdw/wtf/walker/tasks/test/TestDoubleGroupcomponentCheck.java 184
						+ "a:group2>class2;" + "};" + "];" + "];" + "];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		Model model = null;
		try {
			model = parser.parse();
		} catch (final NoValidTokenStreamException e) {
			fail();
		}
		
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		
		final SimpleWalkerTask doubleGroupcomponent = DoubleGroupcomponentCheck.create(model, taskmanager);
		
		final Collection<SimpleWalkerTask> tasks = new Vector<>();
		tasks.add(doubleGroupcomponent);
		taskmanager.start(tasks);
		
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			assertTrue(current instanceof ExceptionalTaskResult);
		}
		assertEquals(1, results.size());
	}
	
	/**
	 * checks wether a group can have the same name as a class.
	 * 
	 * @throws InterruptedException
	 * @throws ExecutionException
	 */
	@Test
	public void testDoubleGroupcomponents3() throws InterruptedException, ExecutionException {
File Line
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 424
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 460
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 497
				new SimpleScannerInput("Group:group=[Class:class={Attribute1:{String*}; Attribute2:String*;};];");
		final Model model = this.getModel(input);
		
		assertTrue(model.getString().getPrototype() == model.getString());
		assertTrue(model.getInteger().getPrototype() == model.getInteger());
		
		final ClassType cls = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		
		assertTrue(cls.getPrototype() == cls);
		
		final Iterator<Attribute> attributes = cls.getAttributes().iterator();
		final Attribute attribute1 = attributes.next();
		final Attribute attribute2 = attributes.next();
		
		assertTrue(attribute1.getAttrType() instanceof SumType);
		final SumType sum = (SumType) attribute1.getAttrType();
		
		assertTrue(sum.getPrototype() instanceof ListType);
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 653
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 723
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr2Iterator.next()));
		
		assertEquals(0, ((SumType) attr3.getAttrType()).getSuperTypes().size());
		final Collection<Type> supertypesAttr3 =
				((SumType) ((SumType) attr3.getAttrType()).getPrototype()).getSuperTypes();
		assertEquals(1, supertypesAttr3.size());
		final Iterator<Type> superTypesAttr3Iterator = supertypesAttr3.iterator();
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr3Iterator.next()));
		
		assertEquals(1, model.getInteger().getPrototype().getSuperTypes().size());
		assertEquals(
				attr3Type,
				HelperUtils.getReferencedType(model.getInteger().getPrototype().getSuperTypes().iterator().next()));
File Line
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 2048
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 2129
	public void testSumTypesManyTimes() throws SumIsAnythingException {
		
		final Token dummyToken = DummyToken.getInstance();
		final Position dummyPosition = DummyToken.getDummyPosition();
		final IdentifierToken b = IdentifierToken.create("B", dummyPosition);
		
		// Prepare Actual
		final SumType actualSum = SumType.create(dummyToken);
		actualSum.add(ThrownType.create(
				dummyToken,
				TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(b)))));
		actualSum.add(TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(b))));
		actualSum.add(TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(b))));
		actualSum.add(ThrownType.create(
				dummyToken,
				TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(b)))));
		
		final List<Type> standardizeElements = actualSum.standardize().accept(new TypeVisitorReturn<List<Type>>() {
File Line
de/fhdw/wtf/parser/test/TestConstructors.java 1427
de/fhdw/wtf/parser/test/TestConstructors.java 1680
		final IdentifierToken iParameterIdentifierToken = IdentifierToken.create("i", Position.create("", 1, 1, 1));
		
		final Vector<GroupElement> group1Vector = new Vector<>();
		final Vector<Constructor> constructors = new Vector<>();
		
		final Name group1Name = UnqualifiedName.create(group1IdentifierToken);
		final Group group1 = Group.create(group1Name, group1Vector, group1IdentifierToken);
		
		final Name aName = group1Name.addName(aIdentifierToken);
		final Name saName = group1Name.addName(saIdentifierToken);
		
		final Vector<Type> supertypes = new Vector<>();
		supertypes.add(TypeProxy.create(null, ByNameState.create(UnqualifiedName.create(saIdentifierToken))));
		
		final ClassType saClass =
				RegularClassType.create(
						saName,
						new Vector<ClassModifier>(),
						new Vector<Attribute>(),
						new Vector<Type>(),
						new Vector<Operation>(),
File Line
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 310
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 415
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 515
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 615
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 731
	public void testProductSum4() throws Exception {
		final IdentifierToken classIdentifier = IdentifierToken.create("class1", Position.create("", 1, 1, 0));
		final IdentifierToken groupIdentifier = IdentifierToken.create("group1", Position.create("", 1, 1, 0));
		final IdentifierToken attributeIdentifier = IdentifierToken.create("attribute", Position.create("", 1, 1, 0));
		final IdentifierToken integerIdentifier = IdentifierToken.create("Integer", Position.create("", 1, 1, 0));
		final IdentifierToken stringIdentifier = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		final IdentifierToken testIdentifier = IdentifierToken.create("Test", Position.create("", 1, 1, 0));
		
		final SimpleScannerInput input =
				new SimpleScannerInput(
File Line
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 443
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 490
		final Model model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		AbstractOperationsCheck.create(model, taskmanager);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(1, okResult.size());
		assertEquals(0, failResult.size());
	}
	
	/**
	 * Group:group=[Klasse:class={name : String;operation : [[(parameter:Integer) -> String ]] ;operation2 :
	 * [[(parameter:Integer) -> String ]] abstract;} abstract; ]; .
	 * 
	 * @throws InterruptedException
	 * @throws ExecutionException
	 * @throws NoValidTokenStreamException
	 * @throws CyclicDependencyException
	 */
	@Test
	public void testAbstractOperationInAbstractClass1() throws InterruptedException, ExecutionException,
File Line
de/fhdw/wtf/walker/tasks/test/TestDoubleGroupcomponentCheck.java 148
de/fhdw/wtf/walker/tasks/test/TestDoubleGroupcomponentCheck.java 221
		final SimpleScannerInput input = new SimpleScannerInput("" + "k:group=[" + "k:class={};" + "];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		Model model = null;
		try {
			model = parser.parse();
		} catch (final NoValidTokenStreamException e) {
			fail();
		}
		
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		
		final SimpleWalkerTask doubleGroupcomponent = DoubleGroupcomponentCheck.create(model, taskmanager);
		
		final Collection<SimpleWalkerTask> tasks = new Vector<>();
		tasks.add(doubleGroupcomponent);
		taskmanager.start(tasks);
		
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			assertFalse(current instanceof ExceptionalTaskResult);
		}
		assertEquals(1, results.size());
	}
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 650
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 634
		final Collection<Type> supertypesAttr2 = attr2Type.getSuperTypes();
		assertEquals(1, supertypesAttr2.size());
		final Iterator<Type> superTypesAttr2Iterator = supertypesAttr2.iterator();
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr2Iterator.next()));
		
		assertEquals(0, ((SumType) attr3.getAttrType()).getSuperTypes().size());
		final Collection<Type> supertypesAttr3 =
				((SumType) ((SumType) attr3.getAttrType()).getPrototype()).getSuperTypes();
		assertEquals(1, supertypesAttr3.size());
		final Iterator<Type> superTypesAttr3Iterator = supertypesAttr3.iterator();
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr3Iterator.next()));
		
		assertEquals(1, model.getInteger().getPrototype().getSuperTypes().size());
File Line
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 55
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 111
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 167
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 223
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 279
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 335
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 391
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 55
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 109
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 166
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 221
		AbstractOperationsCheck.create(model, taskmanager);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(0, okResult.size());
		assertEquals(1, failResult.size());
		
		final Exception exception = failResult.iterator().next().getError();
		if (exception instanceof AbstractOperationsException) {
File Line
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 301
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 333
		final SimpleScannerInput input = new SimpleScannerInput("Group:group=[Class:class={Attribute1:{Integer};};];");
		final Model model = this.getModel(input);
		
		assertTrue(model.getString().getPrototype() == model.getString());
		assertTrue(model.getInteger().getPrototype() == model.getInteger());
		
		final ClassType cls = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		
		assertTrue(cls.getPrototype() == cls);
		
		final Iterator<Attribute> attributes = cls.getAttributes().iterator();
		final Attribute attribute1 = attributes.next();
		
		assertTrue(attribute1.getAttrType() instanceof SumType);
		final SumType sum = (SumType) attribute1.getAttrType();
		
		assertTrue(sum.getPrototype() instanceof BaseType);
		final BaseType integer = (BaseType) sum.getPrototype();
File Line
de/fhdw/wtf/walker/tasks/test/TestTypeReferencer.java 1096
de/fhdw/wtf/walker/tasks/test/TestTypeReferencer.java 1174
		final SumType sum = SumType.create(DummyToken.getInstance());
		sum.add(proxy);
		
		final BaseType string = model.getString();
		classState = ByReferenceState.create(string, string.getTypeName());
		proxy = TypeProxy.create(DummyToken.getInstance(), classState);
		sum.add(proxy);
		
		final BaseType integer = model.getInteger();
		classState = ByReferenceState.create(integer, integer.getTypeName());
		proxy = TypeProxy.create(DummyToken.getInstance(), classState);
		sum.add(proxy);
		
		final Group g = model.getGroups().iterator().next();
		final ClassType c = (ClassType) g.getGroupElements().iterator().next();
		final Attribute a = c.getAttributes().iterator().next();
		final TypeProxy t = (TypeProxy) a.getAttrType();
File Line
de/fhdw/wtf/parser/test/TestConstructors.java 1112
de/fhdw/wtf/parser/test/TestConstructors.java 1187
de/fhdw/wtf/parser/test/TestConstructors.java 1259
de/fhdw/wtf/parser/test/TestConstructors.java 1332
		final IdentifierToken aIdentifierToken = IdentifierToken.create("A", Position.create("", 1, 1, 0));
		final IdentifierToken sIdentifierToken = IdentifierToken.create("s", Position.create("", 1, 1, 1));
		final IdentifierToken op = IdentifierToken.create("op", Position.create("", 1, 1, 0));
		
		final Vector<GroupElement> group1Vector = new Vector<>();
		final Vector<Constructor> constructors = new Vector<>();
		final Vector<Operation> operations = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name group1Name = UnqualifiedName.create(group1IdentifierToken);
		final Group group1 = Group.create(group1Name, group1Vector, group1IdentifierToken);
		
		final Name aName = group1Name.addName(aIdentifierToken);
		final ClassType aClass =
File Line
de/fhdw/wtf/parser/testWithScanner/TestParserScanner.java 118
de/fhdw/wtf/parser/testWithScanner/TestParserScanner.java 181
		final ProductType product = ProductType.create(this.bracketOpenToken);
		final ByNameState testByName = ByNameState.create(UnqualifiedName.create(test));
		final TypeProxy testTypeProxy = TypeProxy.create(test, testByName);
		
		final Operation operation =
				Operation.create("op", new Vector<OperationModifier>(), product, clazz, testTypeProxy, op);
		operations.add(operation);
		
		modifiers.add(ClassModifierService.create(ServiceToken.create(Position.create("", 1, 1, 0))));
		modifiers.add(ClassModifierTransient.create(TransientToken.create(Position.create("", 1, 1, 0))));
		groupVector.add(clazz);
		final Model expected = Model.create(groupIdentifier);
		expected.addGroup(group);
		assertEquals(expected, model);
	}
	
	/**
	 * group1 : group = [ class1 : class = {op : [(param:Integer)->test];} service transient;]; .
	 * 
	 * @throws Exception
	 */
	@Test
	public void testSimpleClassOperation2() throws Exception {
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 929
de/fhdw/wtf/parser/test/TestAttributes.java 1003
de/fhdw/wtf/parser/test/TestAttributes.java 1080
de/fhdw/wtf/parser/test/TestAttributes.java 1157
de/fhdw/wtf/parser/test/TestAttributes.java 1204
de/fhdw/wtf/parser/test/TestAttributes.java 1293
de/fhdw/wtf/parser/test/TestAttributes.java 1417
de/fhdw/wtf/parser/test/TestAttributes.java 1494
de/fhdw/wtf/parser/test/TestAttributes.java 1585
de/fhdw/wtf/parser/test/TestAttributes.java 1678
de/fhdw/wtf/parser/test/TestAttributes.java 1772
de/fhdw/wtf/parser/test/TestAttributes.java 2189
de/fhdw/wtf/parser/test/TestAttributes.java 2268
de/fhdw/wtf/parser/test/TestAttributes.java 2357
de/fhdw/wtf/parser/test/TestAttributes.java 2460
de/fhdw/wtf/parser/test/TestAttributes.java 2550
		final IdentifierToken attributeIdentifier = IdentifierToken.create("Attribute", Position.create("", 1, 1, 0));
		
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.integerIdentifier);
File Line
de/fhdw/wtf/parser/test/TestOperations.java 228
de/fhdw/wtf/parser/test/TestOperations.java 518
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Operation> operations = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(myGroup);
		final Group group = Group.create(groupName, groupVector, myGroup);
		
		final Name className = groupName.addName(myClass);
		
		final ClassType class1 =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						new Vector<Attribute>(),
						new Vector<Type>(),
						operations,
						new Vector<Constructor>(),
						myClass,
						
						new Vector<ClassType>());
		groupVector.add(class1);
		
		final ProductType product = ProductType.create(this.bracketOpenToken);
		final SumType sum = SumType.create(this.curlyBracketOpenToken);
		
		final Operation operation =
File Line
de/fhdw/wtf/walker/tasks/test/TestBaseTypeInheritanceCheck.java 61
de/fhdw/wtf/walker/tasks/test/TestBaseTypeInheritanceCheck.java 119
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 320
		baseTypeInheritanceCheck.addDependency(referencer);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(1, okResult.size());
		assertEquals(1, failResult.size());
		
		final Exception exception = failResult.iterator().next().getError();
		if (exception instanceof BaseTypeInheritanceException) {
File Line
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 443
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 540
		final Model model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		AbstractOperationsCheck.create(model, taskmanager);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(1, okResult.size());
		assertEquals(0, failResult.size());
	}
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 103
de/fhdw/wtf/parser/test/TestModels.java 90
		this.colonToken = ColonToken.create(Position.create("", 0 + 1, 0 + 1, 0));
		this.groupToken = GroupToken.create(Position.create("", 0 + 1, 0 + 1, 0));
		this.equalToken = EqualToken.create(Position.create("", 0 + 1, 0 + 1, 0));
		this.squareBracketOpenToken = SquareBracketOpenToken.create(Position.create("", 0, 0, 0));
		this.squareBracketCloseToken = SquareBracketCloseToken.create(Position.create("", 0, 0, 0));
		this.semicolonToken = SemicolonToken.create(Position.create("", 0 + 1, 0 + 1, 0));
		this.parser = Parser.create(this.stream);
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 606
de/fhdw/wtf/parser/test/TestAttributes.java 673
de/fhdw/wtf/parser/test/TestAttributes.java 759
de/fhdw/wtf/parser/test/TestAttributes.java 1381
		final IdentifierToken attributeIdentifier = IdentifierToken.create("Attribute", Position.create("", 1, 1, 0));
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(this.bracketCloseToken);
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 666
de/fhdw/wtf/parser/test/TestOperations.java 203
de/fhdw/wtf/parser/test/TestOperations.java 362
de/fhdw/wtf/parser/test/TestOperations.java 670
de/fhdw/wtf/parser/test/TestOperations.java 801
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myOperation);
		this.stream.add(this.colonToken);
		this.stream.add(this.doubleSquareBracketOpenToken);
		this.stream.add(myParameter);
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 937
de/fhdw/wtf/parser/test/TestExceptions.java 977
de/fhdw/wtf/parser/test/TestExceptions.java 1152
de/fhdw/wtf/parser/test/TestExceptions.java 1191
	public void testNoCurlyBracketOpenException2() {
		this.stream = SimpleTokenStream.create();
		this.parser = Parser.create(this.stream);
		final IdentifierToken myGroup = IdentifierToken.create("MyGroup", Position.create("", 1, 1, 0));
		final IdentifierToken myClass = IdentifierToken.create("MyClass", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
File Line
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 77
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 310
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 415
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 515
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 615
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 731
	public void testProductSum1() throws Exception {
		final IdentifierToken classIdentifier = IdentifierToken.create("class1", Position.create("", 1, 1, 0));
		final IdentifierToken groupIdentifier = IdentifierToken.create("group1", Position.create("", 1, 1, 0));
		final IdentifierToken attributeIdentifier = IdentifierToken.create("attribute", Position.create("", 1, 1, 0));
		final IdentifierToken integerIdentifier = IdentifierToken.create("Integer", Position.create("", 1, 1, 0));
		final IdentifierToken stringIdentifier = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		final IdentifierToken testIdentifier = IdentifierToken.create("Test", Position.create("", 1, 1, 0));
		
		final String stringInput =
File Line
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 76
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 140
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 273
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 337
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 403
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 469
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 534
		cyclicInheritance.addDependency(referencer);
		inheritanceChecker.addMembers(cyclicInheritance, baseTypeInheritanceCheck);
		
		doubleAttributenameCheck.addDependency(inheritanceChecker);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(6, okResult.size());
		assertEquals(0, failResult.size());
	}
	
	/**
	 * "" + "group1:group=[" + "class1:class={" + "attributelong: Integer;" + "attribute: Integer;" + "};" + "];" .
	 * 
	 * @throws NoValidTokenStreamException
	 *             NoValidTokenStreamException
	 * @throws CyclicDependencyException
	 *             CyclicDependencyException
	 * @throws InterruptedException
	 *             InterruptedException
	 * @throws ExecutionException
	 *             ExecutionException
	 * @throws CyclicPartDefinitionException
	 *             CyclicPartDefinitionException
	 */
	@Test
	public void testDoubleAttributename2() throws InterruptedException, ExecutionException,
File Line
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 301
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 333
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 365
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 394
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 533
		final SimpleScannerInput input = new SimpleScannerInput("Group:group=[Class:class={Attribute1:{Integer};};];");
		final Model model = this.getModel(input);
		
		assertTrue(model.getString().getPrototype() == model.getString());
		assertTrue(model.getInteger().getPrototype() == model.getInteger());
		
		final ClassType cls = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		
		assertTrue(cls.getPrototype() == cls);
		
		final Iterator<Attribute> attributes = cls.getAttributes().iterator();
		final Attribute attribute1 = attributes.next();
		
		assertTrue(attribute1.getAttrType() instanceof SumType);
		final SumType sum = (SumType) attribute1.getAttrType();
		
		assertTrue(sum.getPrototype() instanceof BaseType);
File Line
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 592
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 803
				ProductElementType.create("sum3", sum2, IdentifierToken.create("sum3", Position.create("", 1, 1, 0)));
		product2.addElement(element21);
		product2.addElement(element22);
		
		final Attribute attribute =
				Attribute.create("attribute", product2, new Vector<AttributeModifier>(), attributeIdentifier);
		attributes.add(attribute);
		
		modifiers.add(ClassModifierService.create(VisitableToken.create(Position.create("", 1, 1, 0))));
		modifiers.add(ClassModifierTransient.create(AbstractToken.create(Position.create("", 1, 1, 0))));
		groupVector.add(clazz);
		final Model expected = Model.create(groupIdentifier);
		expected.addGroup(group);
		assertEquals(expected, model);
	}
	
	/**
	 * group1 : group = [ class1 : class = {attribute : (sum1:{Integer, Test}, sum2:{{Integer, (str1:String,
	 * str2:String)}, (int3:Integer, int4:Integer), Test}) ;} service transient;]; .
	 * 
	 * @throws Exception
	 */
	@Test
	public void testProductSum7() throws Exception {
File Line
de/fhdw/wtf/walker/tasks/test/TestTypeReferencer.java 554
de/fhdw/wtf/walker/tasks/test/TestTypeReferencer.java 730
				IdentifierToken.create("", Position.create("", 0 + 1, 0 + 1, 0));
		final Attribute class2111Attribute =
				Attribute.create(
						"class21",
						class2111AttributeTypeReference,
						new Vector<AttributeModifier>(),
						class2111AttributeIdentifier);
		class2111Attributes.add(class2111Attribute);
		
		final TokenStream output = FilteredTokenStream.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model result = parser.parse();
		
		final TypeReferencerTestReturnValue v = new TypeReferencerTestReturnValue(result);
		
		assertEquals(1, v.getFailResult().size());
		assertEquals(1, v.getTypeReferencer().getExceptions().size());
		assertEquals(0, v.getOkResult().size());
	}
	
	/**
	 * Test the referencing of: Group1:group = [Group2:group = [Class1:class={};];]; Group2:group= [Class1:class=
	 * Group1>Class1 + {}; Group1:group=[Class1:class= Group2>Class1 +{classa:Group1>Group2>Class1;};
	 * Group1:group=[Class1:class = Group2>Group1>Class1 + {class21:Group2>Group1>Class1;};];];];.
	 * 
	 * @throws Exception
	 *             {@link de.fhdw.wtf.common.exception.parser.NoValidTokenStreamException}, {@link InterruptedException}
	 *             , {@link ExecutionException}.
	 */
	@Test
	public void test2GroupsWithClasseHierarchieZyklus() throws Exception {
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 186
de/fhdw/wtf/parser/test/TestExceptions.java 340
de/fhdw/wtf/parser/test/TestExceptions.java 398
de/fhdw/wtf/parser/test/TestExceptions.java 453
de/fhdw/wtf/parser/test/TestExceptions.java 784
de/fhdw/wtf/parser/test/TestExceptions.java 1065
de/fhdw/wtf/parser/test/TestOperations.java 278
de/fhdw/wtf/parser/test/TestOperations.java 362
de/fhdw/wtf/parser/test/TestOperations.java 471
de/fhdw/wtf/parser/test/TestOperations.java 670
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myOperation);
		this.stream.add(this.colonToken);
		this.stream.add(this.doubleSquareBracketOpenToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(myParameter);
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 281
de/fhdw/wtf/parser/test/TestAttributes.java 2118
				IdentifierToken.create("Attribute3", Position.create("", 0 + 1, 0 + 1, 0));
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier1);
		this.stream.add(this.colonToken);
		this.stream.add(this.stringIdentifier);
File Line
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 76
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 140
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 337
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 600
		cyclicInheritance.addDependency(referencer);
		inheritanceChecker.addMembers(cyclicInheritance, baseTypeInheritanceCheck);
		
		doubleAttributenameCheck.addDependency(inheritanceChecker);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(6, okResult.size());
		assertEquals(0, failResult.size());
	}
File Line
de/fhdw/wtf/parser/test/TestConstructors.java 1205
de/fhdw/wtf/parser/test/TestConstructors.java 1370
						new Vector<Type>(),
						operations,
						constructors,
						aIdentifierToken,
						
						new Vector<ClassType>());
		group1Vector.add(aClass);
		
		final ProductType aProduct = ProductType.create(this.bracketOpenToken);
		final ProductType sProduct = ProductType.create(this.bracketOpenToken);
		
		final ByNameState attributeStringReferenceState =
				ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		final TypeProxy stringType = TypeProxy.create(this.stringIdentifier, attributeStringReferenceState);
		
		attributes.add(Attribute.create("s", stringType, new Vector<AttributeModifier>(), sIdentifierToken));
		sProduct.addElement(ProductElementType.create("s", stringType, sIdentifierToken));
		constructors.add(Constructor.create(aProduct, aClass, new Vector<ConstructorReference>(), aIdentifierToken));
		
		final Operation operation1 =
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 185
de/fhdw/wtf/parser/test/TestExceptions.java 289
de/fhdw/wtf/parser/test/TestExceptions.java 339
de/fhdw/wtf/parser/test/TestExceptions.java 397
de/fhdw/wtf/parser/test/TestExceptions.java 452
de/fhdw/wtf/parser/test/TestExceptions.java 507
de/fhdw/wtf/parser/test/TestExceptions.java 557
de/fhdw/wtf/parser/test/TestExceptions.java 608
de/fhdw/wtf/parser/test/TestExceptions.java 665
de/fhdw/wtf/parser/test/TestExceptions.java 783
de/fhdw/wtf/parser/test/TestExceptions.java 1064
de/fhdw/wtf/parser/test/TestOperations.java 277
de/fhdw/wtf/parser/test/TestOperations.java 580
		final IdentifierToken myParameter = IdentifierToken.create("MyParameter", Position.create("", 1, 1, 0));
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myOperation);
File Line
de/fhdw/wtf/parser/test/TestModels.java 109
de/fhdw/wtf/parser/test/TestModels.java 169
	public void testModelCalculation() throws Exception {
		final TokenStream stream = SimpleTokenStream.create();
		final Parser parser = Parser.create(stream);
		final IdentifierToken group1Identifier = IdentifierToken.create("Group1", Position.create("", 1, 1, 0));
		final IdentifierToken class1Identifier = IdentifierToken.create("Class1", Position.create("", 1, 1, 0));
		final IdentifierToken group2Identifier = IdentifierToken.create("Group2", Position.create("", 1, 1, 0));
		final IdentifierToken class2Identifier = IdentifierToken.create("Class2", Position.create("", 1, 1, 0));
		final IdentifierToken class3Identifier = IdentifierToken.create("Class3", Position.create("", 1, 1, 0));
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 534
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 772
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 864
		assertEquals(clss, HelperUtils.getReferencedType(superTypesAttr1Iterator.next()));
		
		assertEquals(1, model.getInteger().getPrototype().getSuperTypes().size());
		assertEquals(
				model.getAnything().getPrototype(),
				HelperUtils.getReferencedType(model.getInteger().getPrototype().getSuperTypes().iterator().next()));
		
		assertEquals(1, model.getString().getPrototype().getSuperTypes().size());
		assertEquals(
				model.getAnything().getPrototype(),
				HelperUtils.getReferencedType(model.getString().getPrototype().getSuperTypes().iterator().next()));
	}
	
	/**
	 * Group:group=[A:class={Attribute1:{String,Integer,A}; Attribute2:{String,A}; Attribute3:{B,C};}; B:class=A+{};
	 * C:class=A+{}; Class:class={};]; .
	 * 
	 * @throws Exception
	 *             Exception
	 */
	@Test
	public void testTransitiveInheritance() throws Exception {
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 753
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 845
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 1038
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 741
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 833
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 949
						+ "D:class=B+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final Iterator<GroupElement> iterator = model.getGroups().iterator().next().getGroupElements().iterator();
		final ClassType clssA = (ClassType) iterator.next();
		final ClassType clssB = (ClassType) iterator.next();
		
		final Iterator<Attribute> attrIterator = clssA.getAttributes().iterator();
		
		final Attribute attr1 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 257
de/fhdw/wtf/parser/test/TestExceptions.java 306
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		try {
			this.parser.parse();
			fail();
		} catch (final NoValidTokenStreamException e) {
			boolean noType = false;
			assertEquals(1, this.parser.getExceptions().size());
			for (final Exception ex : this.parser.getExceptions()) {
				if (ex instanceof NoTypeException) {
					noType = true;
				}
			}
			assertTrue(noType);
		}
	}
	
	/**
	 * MyGroup:group=[MyClass:class={MyAttribute:{String,};};];.
	 */
	@Test
	public void testNoTypeExceptionSum() {
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 415
de/fhdw/wtf/parser/test/TestExceptions.java 906
		this.stream.add(string);
		this.stream.add(this.arrowToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.doubleSquareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		try {
			this.parser.parse();
			fail();
		} catch (final NoValidTokenStreamException e) {
			assertEquals(1, this.parser.getExceptions().size());
			boolean noBracketClose = false;
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 419
de/fhdw/wtf/parser/test/TestExceptions.java 524
		this.stream.add(this.doubleSquareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		try {
			this.parser.parse();
			fail();
		} catch (final NoValidTokenStreamException e) {
			assertEquals(1, this.parser.getExceptions().size());
			boolean noBracketClose = false;
			for (final Exception ex : this.parser.getExceptions()) {
				if (ex instanceof NoBracketCloseException) {
					noBracketClose = true;
				}
			}
			assertTrue(noBracketClose);
		}
	}
	
	/**
	 * MyGroup:group=[MyClass:class={MyOperation:[[(MyParameter:String)->{}]]};];.
	 */
	@Test
	public void testNoSemicolonExceptionOperation() {
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 1125
de/fhdw/wtf/parser/test/TestExceptions.java 1164
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		try {
			this.parser.parse();
			fail();
		} catch (final NoValidTokenStreamException e) {
			boolean noEqual = false;
			assertEquals(1, this.parser.getExceptions().size());
			for (final Exception ex : this.parser.getExceptions()) {
				if (ex instanceof NoEqualException) {
					noEqual = true;
				}
			}
			assertTrue(noEqual);
		}
	}
	
	/**
	 * MyGroup:group=[MyClass:class{};];.
	 */
	@Test
	public void testNoEqualsExceptionClass() {
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 132
de/fhdw/wtf/parser/test/TestAttributes.java 199
de/fhdw/wtf/parser/test/TestAttributes.java 465
de/fhdw/wtf/parser/test/TestAttributes.java 533
de/fhdw/wtf/parser/test/TestAttributes.java 1861
de/fhdw/wtf/parser/test/TestAttributes.java 1929
de/fhdw/wtf/parser/test/TestAttributes.java 2003
de/fhdw/wtf/parser/test/TestAttributes.java 2045
		final IdentifierToken classIdentifier = IdentifierToken.create("Class", Position.create("", 0 + 1, 0 + 1, 0));
		final IdentifierToken attributeIdentifier =
				IdentifierToken.create("Attribute", Position.create("", 0 + 1, 0 + 1, 0));
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 679
de/fhdw/wtf/parser/test/TestOperations.java 292
		this.stream.add(this.doubleSquareBracketOpenToken);
		this.stream.add(myParameter);
		this.stream.add(this.colonToken);
		this.stream.add(string);
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.arrowToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.doubleSquareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
File Line
de/fhdw/wtf/parser/test/TestGetFirstAndLastToken.java 443
de/fhdw/wtf/parser/test/TestGetFirstAndLastToken.java 532
de/fhdw/wtf/parser/test/TestGetFirstAndLastToken.java 744
		expectedLastToken = SquareBracketCloseToken.create(Position.create("", 0 + 1, 45 + 1, 45));
		
		assertEquals(expectedFirstToken, class1.getFirstToken());
		assertEquals(expectedLastToken, class1.getLastToken());
		
		// Klassenname
		name = class1.getName();
		
		// klassenName
		final UnqualifiedName lastAddedName = name.getLastAddedName();
		expectedFirstToken = IdentifierToken.create("Class", Position.create("", 0 + 1, 13 + 1, 13));
		assertEquals(expectedFirstToken, lastAddedName.getFirstToken());
		expectedLastToken = ColonToken.create(Position.create("", 0 + 1, 18 + 1, 18));
		assertEquals(expectedLastToken, lastAddedName.getLastToken());
		
		// Attribut Attribute
		final Iterator<Attribute> iterator3 = class1.getAttributes().iterator();
		final Attribute attribute = iterator3.next();
		
		expectedFirstToken = IdentifierToken.create("Attribute", Position.create("", 0 + 1, 26 + 1, 26));
File Line
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 123
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 187
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 256
						+ "attribute: Integer;" + "};" + "];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		final SimpleWalkerTask doubleGroupcomponent = DoubleGroupcomponentCheck.create(model, taskmanager);
		final TypeReferencer referencer = TypeReferencer.create(model, taskmanager);
		final SimpleWalkerTask cyclicInheritance = CyclicInheritanceCheck.create(model, taskmanager);
		final DoubleAttributenameCheck doubleAttributenameCheck = DoubleAttributenameCheck.create(model, taskmanager);
		final GroupDependencyTask inheritanceChecker = GroupDependencyTask.create(taskmanager);
		final SimpleWalkerTask baseTypeInheritanceCheck = BaseTypeInheritanceCheck.create(model, taskmanager);
		
		referencer.addDependency(doubleGroupcomponent);
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 51
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 55
public class TestSupertypesCleanInheritanceTask {
	
	/**
	 * Entsprechende Task laufen und erzeugen das Model.
	 * 
	 * @param input
	 *            SimpleScannerInput
	 * @return Model
	 * @throws CyclicDependencyException
	 *             CyclicDependencyException
	 * @throws InterruptedException
	 *             InterruptedException
	 * @throws ExecutionException
	 *             ExecutionException
	 * @throws NoValidTokenStreamException
	 *             NoValidTokenStreamException
	 */
	private Model getModel(final SimpleScannerInput input) throws CyclicDependencyException, InterruptedException,
			ExecutionException, NoValidTokenStreamException {
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		Model model = null;
		model = parser.parse();
		assertEquals(0, parser.getExceptions().size());
		
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		final TypeReferencer referencer = TypeReferencer.create(model, taskmanager);
		final SimpleWalkerTask prototypesTask = PrototypesTask.create(model, taskmanager);
		final SimpleWalkerTask subtypesFillTask = SubtypesFillTask.create(model, taskmanager);
		final SimpleWalkerTask cyclicInheritance = CyclicInheritanceCheck.create(model, taskmanager);
		final SupertypesFillTask supertypesFillTask = SupertypesFillTask.create(model, taskmanager);
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 606
de/fhdw/wtf/parser/test/TestAttributes.java 673
de/fhdw/wtf/parser/test/TestAttributes.java 759
de/fhdw/wtf/parser/test/TestAttributes.java 848
de/fhdw/wtf/parser/test/TestAttributes.java 929
de/fhdw/wtf/parser/test/TestAttributes.java 1003
de/fhdw/wtf/parser/test/TestAttributes.java 1080
de/fhdw/wtf/parser/test/TestAttributes.java 1157
de/fhdw/wtf/parser/test/TestAttributes.java 1204
de/fhdw/wtf/parser/test/TestAttributes.java 1293
de/fhdw/wtf/parser/test/TestAttributes.java 1381
de/fhdw/wtf/parser/test/TestAttributes.java 1417
de/fhdw/wtf/parser/test/TestAttributes.java 1494
de/fhdw/wtf/parser/test/TestAttributes.java 1585
de/fhdw/wtf/parser/test/TestAttributes.java 1678
de/fhdw/wtf/parser/test/TestAttributes.java 1772
de/fhdw/wtf/parser/test/TestAttributes.java 2189
de/fhdw/wtf/parser/test/TestAttributes.java 2268
de/fhdw/wtf/parser/test/TestAttributes.java 2357
de/fhdw/wtf/parser/test/TestAttributes.java 2460
de/fhdw/wtf/parser/test/TestAttributes.java 2550
		final IdentifierToken attributeIdentifier = IdentifierToken.create("Attribute", Position.create("", 1, 1, 0));
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.bracketOpenToken);
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 241
de/fhdw/wtf/parser/test/TestExceptions.java 290
de/fhdw/wtf/parser/test/TestExceptions.java 508
de/fhdw/wtf/parser/test/TestExceptions.java 558
de/fhdw/wtf/parser/test/TestExceptions.java 609
de/fhdw/wtf/parser/test/TestExceptions.java 839
de/fhdw/wtf/parser/test/TestExceptions.java 1237
		final IdentifierToken name = IdentifierToken.create("name", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myAttribute);
		this.stream.add(this.colonToken);
		this.stream.add(this.bracketOpenToken);
File Line
de/fhdw/wtf/parser/testWithScanner/TestParserScanner.java 208
de/fhdw/wtf/parser/testWithScanner/TestParserScanner.java 290
de/fhdw/wtf/parser/testWithScanner/TestParserScanner.java 374
		final IdentifierToken op = IdentifierToken.create("op", Position.create("", 1, 1, 0));
		final IdentifierToken groupIdentifier = IdentifierToken.create("group1", Position.create("", 1, 1, 0));
		final IdentifierToken param1Identifier = IdentifierToken.create("param1", Position.create("", 1, 1, 0));
		final IdentifierToken param2Identifier = IdentifierToken.create("param2", Position.create("", 1, 1, 0));
		final IdentifierToken integerIdentifier = IdentifierToken.create("Integer", Position.create("", 1, 1, 0));
		final IdentifierToken stringIdentifier = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		
		final SimpleScannerInput input =
				new SimpleScannerInput(
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 1305
de/fhdw/wtf/parser/test/TestAttributes.java 1506
de/fhdw/wtf/parser/test/TestAttributes.java 1597
de/fhdw/wtf/parser/test/TestAttributes.java 1691
		this.stream.add(this.colonToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(nameIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.stringIdentifier);
		this.stream.add(this.commaToken);
		this.stream.add(countIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.integerIdentifier);
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.arrowToken);
		this.stream.add(this.integerIdentifier);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
File Line
de/fhdw/wtf/parser/test/TestConstructors.java 388
de/fhdw/wtf/parser/test/TestConstructors.java 2027
		final IdentifierToken sParameterIdentifierToken = IdentifierToken.create("s", Position.create("", 1, 1, 0));
		
		final Vector<GroupElement> group1Vector = new Vector<>();
		final Vector<Constructor> constructors = new Vector<>();
		
		final Name group1Name = UnqualifiedName.create(group1IdentifierToken);
		final Group group1 = Group.create(group1Name, group1Vector, group1IdentifierToken);
		
		final Name aName = group1Name.addName(aIdentifierToken);
		final ClassType aClass =
				RegularClassType.create(
						aName,
						new Vector<ClassModifier>(),
						new Vector<Attribute>(),
						new Vector<Type>(),
						new Vector<Operation>(),
						constructors,
						aIdentifierToken,
						
						new Vector<ClassType>());
		group1Vector.add(aClass);
		
		final ProductType aProduct = ProductType.create(this.bracketOpenToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 59
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 187
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 256
						+ "attributeLong: Integer;" + "};" + "];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		final SimpleWalkerTask doubleGroupcomponent = DoubleGroupcomponentCheck.create(model, taskmanager);
		final TypeReferencer referencer = TypeReferencer.create(model, taskmanager);
		final SimpleWalkerTask cyclicInheritance = CyclicInheritanceCheck.create(model, taskmanager);
		final DoubleAttributenameCheck doubleAttributenameCheck = DoubleAttributenameCheck.create(model, taskmanager);
		final GroupDependencyTask inheritanceChecker = GroupDependencyTask.create(taskmanager);
		final SimpleWalkerTask baseTypeInheritanceCheck = BaseTypeInheritanceCheck.create(model, taskmanager);
		
		referencer.addDependency(doubleGroupcomponent);
File Line
de/fhdw/wtf/parser/test/TestOperations.java 306
de/fhdw/wtf/parser/test/TestOperations.java 394
de/fhdw/wtf/parser/test/TestOperations.java 518
de/fhdw/wtf/parser/test/TestOperations.java 606
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Operation> operations = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(myGroup);
		final Group group = Group.create(groupName, groupVector, myGroup);
		
		final Name className = groupName.addName(myClass);
		final ClassType class1 =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						new Vector<Attribute>(),
						new Vector<Type>(),
						operations,
						new Vector<Constructor>(),
						myClass,
						
						new Vector<ClassType>());
		groupVector.add(class1);
		
		final ProductType product = ProductType.create(this.bracketOpenToken);
		final ByNameState byName = ByNameState.create(UnqualifiedName.create(string));
File Line
de/fhdw/wtf/parser/test/TestClasses.java 250
de/fhdw/wtf/parser/test/TestClasses.java 515
	public void testClassAbstractModifier() throws Exception {
		this.stream.add(this.group1IdentifierToken);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.classIdentifierToken);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.abstractToken);
		this.stream.add(this.semicolonToken);
File Line
de/fhdw/wtf/parser/test/TestClasses.java 352
de/fhdw/wtf/parser/test/TestClasses.java 572
	public void testClassServiceModifier() throws Exception {
		this.stream.add(this.group1IdentifierToken);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.classIdentifierToken);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.serviceToken);
		this.stream.add(this.semicolonToken);
File Line
de/fhdw/wtf/parser/test/TestClasses.java 668
de/fhdw/wtf/parser/test/TestClasses.java 743
de/fhdw/wtf/parser/test/TestClasses.java 842
	public void testSimpleInheritance() throws Exception {
		this.stream.add(this.group1IdentifierToken);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.superClass1IdentifierToken);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.classIdentifierToken);
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 794
de/fhdw/wtf/parser/test/TestExceptions.java 898
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myOperation);
		this.stream.add(this.colonToken);
		this.stream.add(this.doubleSquareBracketOpenToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(myParameter);
		this.stream.add(this.colonToken);
		this.stream.add(string);
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.arrowToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.doubleSquareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.semicolonToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestDoubleGroupcomponentCheck.java 184
de/fhdw/wtf/walker/tasks/test/TestDoubleGroupcomponentCheck.java 220
				new SimpleScannerInput("" + "group1:group=[" + "k:class={};" + "k:group=[];" + "];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		Model model = null;
		try {
			model = parser.parse();
		} catch (final NoValidTokenStreamException e) {
			fail();
		}
		
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		
		final SimpleWalkerTask doubleGroupcomponent = DoubleGroupcomponentCheck.create(model, taskmanager);
		
		final Collection<SimpleWalkerTask> tasks = new Vector<>();
		tasks.add(doubleGroupcomponent);
		taskmanager.start(tasks);
		
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 231
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 278
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 325
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 374
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 435
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 482
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 568
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 199
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 244
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 345
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 403
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 547
		final Attribute attr2 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		assertEquals(1, supertypesAttr1.size());
		final Iterator<Type> superTypesAttr1Iterator = supertypesAttr1.iterator();
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr1Iterator.next()));
		
		assertEquals(0, ((SumType) attr2.getAttrType()).getSuperTypes().size());
		final Collection<Type> supertypesAttr2 =
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 534
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 772
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 864
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 916
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 955
		assertEquals(clss, HelperUtils.getReferencedType(superTypesAttr1Iterator.next()));
		
		assertEquals(1, model.getInteger().getPrototype().getSuperTypes().size());
		assertEquals(
				model.getAnything().getPrototype(),
				HelperUtils.getReferencedType(model.getInteger().getPrototype().getSuperTypes().iterator().next()));
		
		assertEquals(1, model.getString().getPrototype().getSuperTypes().size());
		assertEquals(
				model.getAnything().getPrototype(),
				HelperUtils.getReferencedType(model.getString().getPrototype().getSuperTypes().iterator().next()));
	}
	
	/**
	 * Group:group=[A:class={Attribute1:{String,Integer,A}; Attribute2:{String,A}; Attribute3:{B,C};}; B:class=A+{};
	 * C:class=A+{}; Class:class={};]; .
	 * 
	 * @throws Exception
	 *             Exception
	 */
	@Test
	public void testTransitiveInheritance() throws Exception {
File Line
de/fhdw/wtf/common/ast/type/test/TypeTest.java 56
de/fhdw/wtf/common/ast/type/test/TypeTest.java 92
de/fhdw/wtf/common/ast/type/test/TypeTest.java 128
de/fhdw/wtf/common/ast/type/test/TypeTest.java 164
	public void testClassAbstract() {
		final IdentifierToken className = IdentifierToken.create("className", Position.createDummyPosition());
		final Name name = UnqualifiedName.create(className);
		final Collection<ClassModifier> modifiers = new Vector<>();
		final Collection<Attribute> attributes = new Vector<>();
		final List<Type> superTypes = new Vector<>();
		final Collection<Operation> operations = new Vector<>();
		final Collection<Constructor> superConstructors = new Vector<>();
		final Collection<ClassType> subTypes = new Vector<>();
		
		final ClassType clazz =
				RegularClassType.create(
						name,
						modifiers,
						attributes,
						superTypes,
						operations,
						superConstructors,
						className,
						subTypes);
		
		final AbstractToken abstractToken = AbstractToken.create(Position.createDummyPosition());
File Line
de/fhdw/wtf/parser/test/TestClasses.java 324
de/fhdw/wtf/parser/test/TestClasses.java 601
		final Name className = groupName.addName(this.classIdentifierToken);
		modifiers.add(ClassModifierTransient.create(this.transientToken));
		final ClassType class1 =
				RegularClassType.create(
						className,
						modifiers,
						new Vector<Attribute>(),
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						this.classIdentifierToken,
						
						new Vector<ClassType>());
		groupVector.add(class1);
		final Model expected = Model.create(this.group1IdentifierToken);
		expected.addGroup(group);
		
		final Model actual = this.parser.parse();
		assertEquals(expected, actual);
		assertEquals(0, this.parser.getExceptions().size());
	}
	
	/**
	 * Group:group=[Class:class={} service;]; .
	 * 
	 * @throws Exception
	 */
	@Test
	public void testClassServiceModifier() throws Exception {
File Line
de/fhdw/wtf/parser/test/TestClasses.java 426
de/fhdw/wtf/parser/test/TestClasses.java 544
		final Name className = groupName.addName(this.classIdentifierToken);
		modifiers.add(ClassModifierVisitable.create(this.visitableToken));
		final ClassType class1 =
				RegularClassType.create(
						className,
						modifiers,
						new Vector<Attribute>(),
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						this.classIdentifierToken,
						
						new Vector<ClassType>());
		groupVector.add(class1);
		final Model expected = Model.create(this.group1IdentifierToken);
		expected.addGroup(group);
		
		final Model actual = this.parser.parse();
		assertEquals(expected, actual);
		assertEquals(0, this.parser.getExceptions().size());
	}
	
	/**
	 * Group:group=[Class:class={} [;]; .
	 */
	@Test
	public void testClassWithExceptionInParseModifier() {
File Line
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 445
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 492
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 276
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 322
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 368
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 414
		AbstractOperationsCheck.create(model, taskmanager);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(1, okResult.size());
		assertEquals(0, failResult.size());
	}
	
	/**
	 * Group:group=[Klasse:class={name : String;operation : [[(parameter:Integer) -> String ]] ;operation2 :
	 * [[(parameter:Integer) -> String ]] abstract;} abstract; ]; .
	 * 
	 * @throws InterruptedException
	 * @throws ExecutionException
	 * @throws NoValidTokenStreamException
	 * @throws CyclicDependencyException
	 */
	@Test
	public void testAbstractOperationInAbstractClass1() throws InterruptedException, ExecutionException,
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 402
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 822
		assertEquals(attr1Type, superTypesAttr4Iterator.next());
		
		assertEquals(1, model.getInteger().getPrototype().getSuperTypes().size());
		assertEquals(
				model.getAnything().getPrototype(),
				HelperUtils.getReferencedType(model.getInteger().getPrototype().getSuperTypes().iterator().next()));
		
		assertEquals(1, model.getString().getPrototype().getSuperTypes().size());
		assertEquals(
				model.getAnything().getPrototype(),
				HelperUtils.getReferencedType(model.getString().getPrototype().getSuperTypes().iterator().next()));
	}
	
	/**
	 * Group:group=[A:class={Attribute1:{String,Integer,A}; Attribute2:{C,D,E};}; B:class=A+{}; C:class=A+{};
	 * Class:class={}; D:class=B+{}; E:class=B+{};]; .
	 * 
	 * @throws Exception
	 *             Exception
	 */
	@Test
	public void testSumSupertypeIsAnClass() throws Exception {
File Line
de/fhdw/wtf/common/ast/type/test/TypeTest.java 56
de/fhdw/wtf/common/ast/type/test/TypeTest.java 92
de/fhdw/wtf/common/ast/type/test/TypeTest.java 128
de/fhdw/wtf/common/ast/type/test/TypeTest.java 164
de/fhdw/wtf/common/ast/type/test/TypeTest.java 200
	public void testClassAbstract() {
		final IdentifierToken className = IdentifierToken.create("className", Position.createDummyPosition());
		final Name name = UnqualifiedName.create(className);
		final Collection<ClassModifier> modifiers = new Vector<>();
		final Collection<Attribute> attributes = new Vector<>();
		final List<Type> superTypes = new Vector<>();
		final Collection<Operation> operations = new Vector<>();
		final Collection<Constructor> superConstructors = new Vector<>();
		final Collection<ClassType> subTypes = new Vector<>();
		
		final ClassType clazz =
				RegularClassType.create(
						name,
						modifiers,
						attributes,
						superTypes,
						operations,
						superConstructors,
						className,
						subTypes);
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 666
de/fhdw/wtf/parser/test/TestOperations.java 471
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myOperation);
		this.stream.add(this.colonToken);
		this.stream.add(this.doubleSquareBracketOpenToken);
		this.stream.add(myParameter);
File Line
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 59
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 123
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 386
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 452
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 517
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 583
						+ "attributeLong: Integer;" + "};" + "];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		final SimpleWalkerTask doubleGroupcomponent = DoubleGroupcomponentCheck.create(model, taskmanager);
		final TypeReferencer referencer = TypeReferencer.create(model, taskmanager);
		final SimpleWalkerTask cyclicInheritance = CyclicInheritanceCheck.create(model, taskmanager);
		final DoubleAttributenameCheck doubleAttributenameCheck = DoubleAttributenameCheck.create(model, taskmanager);
		final GroupDependencyTask inheritanceChecker = GroupDependencyTask.create(taskmanager);
		final SimpleWalkerTask baseTypeInheritanceCheck = BaseTypeInheritanceCheck.create(model, taskmanager);
		
		referencer.addDependency(doubleGroupcomponent);
File Line
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 187
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 256
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 320
						+ "attribute: Integer;" + "};" + "];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		final SimpleWalkerTask doubleGroupcomponent = DoubleGroupcomponentCheck.create(model, taskmanager);
		final TypeReferencer referencer = TypeReferencer.create(model, taskmanager);
		final SimpleWalkerTask cyclicInheritance = CyclicInheritanceCheck.create(model, taskmanager);
		final DoubleAttributenameCheck doubleAttributenameCheck = DoubleAttributenameCheck.create(model, taskmanager);
		final GroupDependencyTask inheritanceChecker = GroupDependencyTask.create(taskmanager);
		final SimpleWalkerTask baseTypeInheritanceCheck = BaseTypeInheritanceCheck.create(model, taskmanager);
		
		referencer.addDependency(doubleGroupcomponent);
File Line
de/fhdw/wtf/walker/tasks/test/TestDoubleGroupcomponentCheck.java 38
de/fhdw/wtf/walker/tasks/test/TestDoubleGroupcomponentCheck.java 75
						+ "a:group2>class2;" + "};" + "];" + "];" + "];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		Model model = null;
		try {
			model = parser.parse();
		} catch (final NoValidTokenStreamException e) {
			fail();
		}
		
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		
		final SimpleWalkerTask doubleClassname = DoubleGroupcomponentCheck.create(model, taskmanager);
		
		final Collection<SimpleWalkerTask> tasks = new Vector<>();
		tasks.add(doubleClassname);
		taskmanager.start(tasks);
		
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
File Line
de/fhdw/wtf/walker/tasks/test/TestDoubleGroupcomponentCheck.java 113
de/fhdw/wtf/walker/tasks/test/TestDoubleGroupcomponentCheck.java 148
de/fhdw/wtf/walker/tasks/test/TestDoubleGroupcomponentCheck.java 184
de/fhdw/wtf/walker/tasks/test/TestDoubleGroupcomponentCheck.java 221
						+ "a:group2>class2;" + "};" + "];" + "];" + "];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		Model model = null;
		try {
			model = parser.parse();
		} catch (final NoValidTokenStreamException e) {
			fail();
		}
		
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		
		final SimpleWalkerTask doubleGroupcomponent = DoubleGroupcomponentCheck.create(model, taskmanager);
		
		final Collection<SimpleWalkerTask> tasks = new Vector<>();
		tasks.add(doubleGroupcomponent);
		taskmanager.start(tasks);
		
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 363
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 558
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 334
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 537
						+ "Attribute4:{A,C};}; B:class={}; C:class={}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final ClassType clss = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		final Iterator<Attribute> attrIterator = clss.getAttributes().iterator();
		final Attribute attr1 = attrIterator.next();
		final Attribute attr2 = attrIterator.next();
		final Attribute attr3 = attrIterator.next();
File Line
de/fhdw/wtf/walker/tasks/test/TestTypeReferencer.java 253
de/fhdw/wtf/walker/tasks/test/TestTypeReferencer.java 428
de/fhdw/wtf/walker/tasks/test/TestTypeReferencer.java 604
		final Group group12 = Group.create(group12Name, group12Elements, group12IdentifierToken, null);
		group1Elements.add(group12);
		final IdentifierToken class121IdentifierToken =
				IdentifierToken.create("Class1", Position.create("", 0 + 1, 0 + 1, 0));
		final Name class121Name = group12Name.addName(class121IdentifierToken);
		final Collection<ClassModifier> class121Modifiers = new Vector<>();
		final Collection<Attribute> class121Attributes = new Vector<>();
		final List<Type> class121SuperTypes = new Vector<>();
		final Collection<Operation> class121Operations = new Vector<>();
		final ClassType class121 =
				RegularClassType.create(
						class121Name,
						class121Modifiers,
						class121Attributes,
						class121SuperTypes,
						class121Operations,
						new Vector<Constructor>(),
						class121IdentifierToken,
						
						new Vector<ClassType>(),
File Line
de/fhdw/wtf/walker/tasks/test/TestTypeReferencer.java 279
de/fhdw/wtf/walker/tasks/test/TestTypeReferencer.java 454
de/fhdw/wtf/walker/tasks/test/TestTypeReferencer.java 629
		final Group group2 = Group.create(group2Name, group2Elements, group2IdentifierToken, null);
		model.addGroup(group2);
		final IdentifierToken class21IdentifierToken =
				IdentifierToken.create("Class1", Position.create("", 0 + 1, 0 + 1, 0));
		final Name class21Name = group2Name.addName(class21IdentifierToken);
		final Collection<ClassModifier> class21Modifiers = new Vector<>();
		final Collection<Attribute> class21Attributes = new Vector<>();
		final List<Type> class21SuperTypes = new Vector<>();
		final Collection<Operation> class21Operations = new Vector<>();
		final ClassType class21 =
				RegularClassType.create(
						class21Name,
						class21Modifiers,
						class21Attributes,
						class21SuperTypes,
						class21Operations,
						new Vector<Constructor>(),
						class21IdentifierToken,
						
						new Vector<ClassType>(),
File Line
de/fhdw/wtf/walker/tasks/test/TestTypeReferencer.java 305
de/fhdw/wtf/walker/tasks/test/TestTypeReferencer.java 480
de/fhdw/wtf/walker/tasks/test/TestTypeReferencer.java 654
		final Group group21 = Group.create(group21Name, group21Elements, group21IdentifierToken, null);
		group2Elements.add(group21);
		final IdentifierToken class211IdentifierToken =
				IdentifierToken.create("Class1", Position.create("", 0 + 1, 0 + 1, 0));
		final Name class211Name = group21Name.addName(class211IdentifierToken);
		final Collection<ClassModifier> class211Modifiers = new Vector<>();
		final Collection<Attribute> class211Attributes = new Vector<>();
		final List<Type> class211SuperTypes = new Vector<>();
		final Collection<Operation> class211Operations = new Vector<>();
		final ClassType class211 =
				RegularClassType.create(
						class211Name,
						class211Modifiers,
						class211Attributes,
						class211SuperTypes,
						class211Operations,
						new Vector<Constructor>(),
						class211IdentifierToken,
						
						new Vector<ClassType>(),
File Line
de/fhdw/wtf/walker/tasks/test/TestBaseTypeInheritanceCheck.java 177
de/fhdw/wtf/walker/tasks/test/TestBaseTypeInheritanceCheck.java 226
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 53
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 97
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 142
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 186
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 232
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 277
		baseTypeInheritanceCheck.addDependency(referencer);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(2, okResult.size());
		assertEquals(0, failResult.size());
	}
	
	/**
	 * personGroup:group=[Person:class=Person+{};];.
	 * 
	 * @throws InterruptedException
	 *             InterruptedException
	 * @throws ExecutionException
	 *             ExecutionException
	 * @throws NoValidTokenStreamException
	 *             NoValidTokenStreamException
	 * @throws CyclicDependencyException
	 *             CyclicDependencyException
	 */
	@Test
	public void testInheritFromItself() throws InterruptedException, ExecutionException, NoValidTokenStreamException,
File Line
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 58
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 129
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 200
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 272
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 344
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 414
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 486
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 549
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 612
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 674
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 737
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 800
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 865
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 927
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 989
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 1059
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 1121
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 1184
						+ "operation : [[(parameter:Integer) -> String ]];}; ];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		Model model = null;
		model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		
		final SimpleWalkerTask doubleGroupcomponent = DoubleGroupcomponentCheck.create(model, taskmanager);
		final SimpleWalkerTask doubleAttributenameCheck = DoubleAttributenameCheck.create(model, taskmanager);
		final SimpleWalkerTask referencer = TypeReferencer.create(model, taskmanager);
		final SimpleWalkerTask prototypesTask = PrototypesTask.create(model, taskmanager);
		final SimpleWalkerTask cyclicInheritance = CyclicInheritanceCheck.create(model, taskmanager);
		final SimpleWalkerTask subtypesFillTask = SubtypesFillTask.create(model, taskmanager);
		final GroupDependencyTask doubleChecks = GroupDependencyTask.create(taskmanager);
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 129
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 154
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 402
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 822
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		assertEquals(1, model.getInteger().getPrototype().getSuperTypes().size());
		assertEquals(
				model.getAnything().getPrototype(),
				HelperUtils.getReferencedType(model.getInteger().getPrototype().getSuperTypes().iterator().next()));
		
		assertEquals(1, model.getString().getPrototype().getSuperTypes().size());
		assertEquals(
				model.getAnything().getPrototype(),
				HelperUtils.getReferencedType(model.getString().getPrototype().getSuperTypes().iterator().next()));
	}
	
	/**
	 * Group:group=[Class:class={Attribute:String;};]; .
	 * 
	 * @throws Exception
	 *             Exception
	 */
	@Test
	public void testModelWithoutSum() throws Exception {
File Line
de/fhdw/wtf/parser/test/TestClasses.java 250
de/fhdw/wtf/parser/test/TestClasses.java 515
de/fhdw/wtf/parser/test/TestClasses.java 627
	public void testClassAbstractModifier() throws Exception {
		this.stream.add(this.group1IdentifierToken);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.classIdentifierToken);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.abstractToken);
		this.stream.add(this.semicolonToken);
File Line
de/fhdw/wtf/parser/test/TestClasses.java 403
de/fhdw/wtf/parser/test/TestClasses.java 482
	public void testClassVisitableModifier() throws Exception {
		this.stream.add(this.group1IdentifierToken);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.classIdentifierToken);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.visitableToken);
		this.stream.add(this.semicolonToken);
File Line
de/fhdw/wtf/parser/test/TestClasses.java 674
de/fhdw/wtf/parser/test/TestClasses.java 756
		this.stream.add(this.superClass1IdentifierToken);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.classIdentifierToken);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.superClass1IdentifierToken);
		this.stream.add(this.plusSymbolToken);
		this.stream.add(this.curlyBracketOpenToken);
File Line
de/fhdw/wtf/parser/test/TestConstructors.java 403
de/fhdw/wtf/parser/test/TestConstructors.java 782
						new Vector<Operation>(),
						constructors,
						aIdentifierToken,
						
						new Vector<ClassType>());
		group1Vector.add(aClass);
		
		final ProductType aProduct = ProductType.create(this.bracketOpenToken);
		final ProductType xProduct = ProductType.create(this.bracketOpenToken);
		final ProductType sProduct = ProductType.create(this.bracketOpenToken);
		final ProductType xsProduct = ProductType.create(this.bracketOpenToken);
		
		final ByNameState integerName = ByNameState.create(UnqualifiedName.create(this.integerIdentifier));
		final ByNameState stringName = ByNameState.create(UnqualifiedName.create(this.stringIdentifier));
		
		final TypeProxy stringTypeProxy = TypeProxy.create(this.stringIdentifier, stringName);
		final TypeProxy integerTypeProxy = TypeProxy.create(this.integerIdentifier, integerName);
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 289
de/fhdw/wtf/parser/test/TestExceptions.java 507
de/fhdw/wtf/parser/test/TestExceptions.java 557
de/fhdw/wtf/parser/test/TestExceptions.java 608
de/fhdw/wtf/parser/test/TestExceptions.java 888
de/fhdw/wtf/parser/test/TestOperations.java 580
		final IdentifierToken myAttribute = IdentifierToken.create("MyAttribute", Position.create("", 1, 1, 0));
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 542
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 552
		AbstractOperationsCheck.create(model, taskmanager);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(1, okResult.size());
		assertEquals(0, failResult.size());
	}
}
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 129
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 154
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 402
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 534
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 772
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 822
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 864
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 916
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 955
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		assertEquals(1, model.getInteger().getPrototype().getSuperTypes().size());
		assertEquals(
				model.getAnything().getPrototype(),
				HelperUtils.getReferencedType(model.getInteger().getPrototype().getSuperTypes().iterator().next()));
		
		assertEquals(1, model.getString().getPrototype().getSuperTypes().size());
		assertEquals(
				model.getAnything().getPrototype(),
				HelperUtils.getReferencedType(model.getString().getPrototype().getSuperTypes().iterator().next()));
	}
	
	/**
	 * Group:group=[Class:class={Attribute:String;};]; .
	 * 
	 * @throws Exception
	 *             Exception
	 */
	@Test
	public void testModelWithoutSum() throws Exception {
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 199
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 245
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr2Iterator.next()));
		
		assertEquals(1, model.getInteger().getPrototype().getSuperTypes().size());
		assertEquals(
				attr2.getAttrType().getPrototype(),
				HelperUtils.getReferencedType(model.getInteger().getPrototype().getSuperTypes().iterator().next()));
		
		assertEquals(1, model.getString().getPrototype().getSuperTypes().size());
		assertEquals(
				attr2.getAttrType().getPrototype(),
				HelperUtils.getReferencedType(model.getString().getPrototype().getSuperTypes().iterator().next()));
	}
	
	/**
	 * Group:group=[Class:class={Attribute1:{String,Integer}; Attribute2:{String};}; Class2:class={};]; .
	 * 
	 * @throws Exception
	 *             Exception
	 */
	@Test
	public void testNormalContainsInheritance2() throws Exception {
File Line
de/fhdw/wtf/common/task/test/TaskTest.java 152
de/fhdw/wtf/common/task/test/TaskTest.java 186
	public void testCyclicDependency() {
		final SimpleScannerInput input =
				new SimpleScannerInput("" + "group1:group=[" + "class1:class={};" + "group2:group=["
						+ "class2:class={};" + "group3:group=[" + "class3:class={" + "a:group2>class2;" + "};" + "];"
						+ "];" + "];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		Model model = null;
		try {
			model = parser.parse();
		} catch (final NoValidTokenStreamException e) {
			fail();
		}
		
		final TaskExecutor taskmanager = TaskExecutorFixed.create();
		
		final SimpleWalkerTask doubleAttributename = DoubleAttributenameCheck.create(model, taskmanager);
		final SimpleWalkerTask doubleGroupcomponent = DoubleGroupcomponentCheck.create(model, taskmanager);
File Line
de/fhdw/wtf/parser/test/TestConstructors.java 578
de/fhdw/wtf/parser/test/TestConstructors.java 1147
de/fhdw/wtf/parser/test/TestConstructors.java 1293
de/fhdw/wtf/parser/test/TestConstructors.java 1386
		sProduct.addElement(ProductElementType.create("s", stringTypeProxy, sParameterIdentifierToken));
		
		constructors.add(Constructor.create(aProduct, aClass, new Vector<ConstructorReference>(), aIdentifierToken));
		
		final Operation operation =
				Operation.create(
						"op",
						new Vector<OperationModifier>(),
						sProduct,
						aClass,
						SumType.create(this.curlyBracketOpenToken),
						op);
		operations.add(operation);
		
		final Model expected = Model.create(group1IdentifierToken);
		expected.addGroup(group1);
		
		this.parser = Parser.create(output);
		final Model actual = this.parser.parse();
		
		assertEquals(0, this.parser.getExceptions().size());
		assertEquals(expected, actual);
	}
	
	/**
	 * Group1:group=[A:class={op:[[(s:String)->{}]];();};]; Parser macht wieder Reihenfolge: Konstruktor, Operation.
	 * 
	 * @throws Exception
	 *             {@link de.fhdw.wtf.common.exception.parser.NoValidTokenStreamException}
	 */
	@Test
	public void testFirstOperationThanConstructor() throws Exception {
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 475
de/fhdw/wtf/parser/test/TestExceptions.java 575
de/fhdw/wtf/parser/test/TestExceptions.java 633
		this.stream.add(this.doubleSquareBracketCloseToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		try {
			this.parser.parse();
			fail();
		} catch (final NoValidTokenStreamException e) {
			assertEquals(1, this.parser.getExceptions().size());
			boolean noSemicolon = false;
			for (final Exception ex : this.parser.getExceptions()) {
				if (ex instanceof NoSemicolonException) {
					noSemicolon = true;
				}
			}
			assertTrue(noSemicolon);
		}
	}
	
	/**
	 * MyGroup:group=[MyClass:class={MyAttribute:(name:String;};];.
	 */
	@Test
	public void testNoBracketCloseExceptionAttribute() {
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 911
de/fhdw/wtf/parser/test/TestExceptions.java 990
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		try {
			this.parser.parse();
			fail();
		} catch (final NoValidTokenStreamException e) {
			assertEquals(1, this.parser.getExceptions().size());
			boolean noCurlyBracketOpen = false;
			for (final Exception ex : this.parser.getExceptions()) {
				if (ex instanceof NoCurlyBracketOpenException) {
					noCurlyBracketOpen = true;
				}
			}
			assertTrue(noCurlyBracketOpen);
		}
	}
	
	/**
	 * MyGroup:group=[MyClass:class=[];];.
	 */
	@Test
	public void testNoCurlyBracketOpenException2() {
File Line
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 445
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 492
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 552
		AbstractOperationsCheck.create(model, taskmanager);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(1, okResult.size());
		assertEquals(0, failResult.size());
	}
File Line
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 542
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 276
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 322
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 368
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 414
		AbstractOperationsCheck.create(model, taskmanager);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(1, okResult.size());
		assertEquals(0, failResult.size());
	}
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 134
de/fhdw/wtf/parser/test/TestAttributes.java 467
de/fhdw/wtf/parser/test/TestAttributes.java 535
de/fhdw/wtf/parser/test/TestAttributes.java 606
de/fhdw/wtf/parser/test/TestAttributes.java 673
de/fhdw/wtf/parser/test/TestAttributes.java 759
de/fhdw/wtf/parser/test/TestAttributes.java 848
de/fhdw/wtf/parser/test/TestAttributes.java 929
de/fhdw/wtf/parser/test/TestAttributes.java 1003
de/fhdw/wtf/parser/test/TestAttributes.java 1080
de/fhdw/wtf/parser/test/TestAttributes.java 1157
de/fhdw/wtf/parser/test/TestAttributes.java 1204
de/fhdw/wtf/parser/test/TestAttributes.java 1293
de/fhdw/wtf/parser/test/TestAttributes.java 1381
de/fhdw/wtf/parser/test/TestAttributes.java 1417
de/fhdw/wtf/parser/test/TestAttributes.java 1494
de/fhdw/wtf/parser/test/TestAttributes.java 1585
de/fhdw/wtf/parser/test/TestAttributes.java 1678
de/fhdw/wtf/parser/test/TestAttributes.java 1772
de/fhdw/wtf/parser/test/TestAttributes.java 1863
de/fhdw/wtf/parser/test/TestAttributes.java 1931
de/fhdw/wtf/parser/test/TestAttributes.java 2005
de/fhdw/wtf/parser/test/TestAttributes.java 2189
de/fhdw/wtf/parser/test/TestAttributes.java 2268
de/fhdw/wtf/parser/test/TestAttributes.java 2357
de/fhdw/wtf/parser/test/TestAttributes.java 2460
de/fhdw/wtf/parser/test/TestAttributes.java 2550
				IdentifierToken.create("Attribute", Position.create("", 0 + 1, 0 + 1, 0));
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.stringIdentifier);
File Line
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 171
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 245
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 856
	public void testProductSum2() throws Exception {
		final IdentifierToken classIdentifier = IdentifierToken.create("class1", Position.create("", 1, 1, 0));
		final IdentifierToken groupIdentifier = IdentifierToken.create("group1", Position.create("", 1, 1, 0));
		final IdentifierToken attributeIdentifier = IdentifierToken.create("attribute", Position.create("", 1, 1, 0));
		final IdentifierToken integerIdentifier = IdentifierToken.create("Integer", Position.create("", 1, 1, 0));
		final IdentifierToken stringIdentifier = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		
		final SimpleScannerInput input =
				new SimpleScannerInput(
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 631
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 701
		final Type attr2Type = ((SumType) attr2.getAttrType()).getPrototype();
		final Type attr3Type = ((SumType) attr3.getAttrType()).getPrototype();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		assertEquals(4, supertypesAttr1.size());
		final Set<Type> actualSupertypes = new HashSet<>();
		for (final Type type : supertypesAttr1) {
			actualSupertypes.add(HelperUtils.getReferencedType(type));
		}
		final Set<Type> expectedSupertypes1 = new HashSet<>();
File Line
de/fhdw/wtf/walker/tasks/test/TestTypeReferencer.java 1065
de/fhdw/wtf/walker/tasks/test/TestTypeReferencer.java 1134
		final SimpleScannerInput input = new SimpleScannerInput("group1:group=[class1:class={attribute:Anything;};];");
		
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		final TypeReferencerTestReturnValue v = new TypeReferencerTestReturnValue(model);
		assertEquals(1, v.getOkResult().size());
		assertEquals(0, v.getFailResult().size());
		this.assertOperations.assertAllReferencesByType(model);
		
		final Vector<Attribute> attributes = new Vector<>();
		
		final QualifiedName name =
				QualifiedName
						.create(UnqualifiedName.create(group1Identifier), UnqualifiedName.create(class1Identifier));
		
		final ClassType clazz =
File Line
de/fhdw/wtf/parser/test/TestClasses.java 680
de/fhdw/wtf/parser/test/TestClasses.java 861
		this.stream.add(this.semicolonToken);
		this.stream.add(this.classIdentifierToken);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.superClass1IdentifierToken);
		this.stream.add(this.plusSymbolToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
File Line
de/fhdw/wtf/parser/test/TestConstructors.java 254
de/fhdw/wtf/parser/test/TestConstructors.java 350
		groupVector.add(cClass);
		
		final ProductType aProduct = ProductType.create(this.bracketOpenToken);
		final ProductType bProduct = ProductType.create(this.bracketOpenToken);
		final ProductType cProduct = ProductType.create(this.bracketOpenToken);
		
		aConstructors.add(Constructor.create(aProduct, aClass, new Vector<ConstructorReference>(), aIdentifierToken));
		bConstructors.add(Constructor.create(bProduct, bClass, new Vector<ConstructorReference>(), bIdentifierToken));
		cConstructors.add(Constructor.create(cProduct, cClass, new Vector<ConstructorReference>(), cIdentifierToken));
		
		final Model expected = Model.create(group1IdentifierToken);
		expected.addGroup(group1);
File Line
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 53
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 109
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 165
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 221
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 277
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 333
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 389
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 443
		model = parser.parse();
		final TaskExecutorFixed taskmanager = TaskExecutorFixed.create();
		AbstractOperationsCheck.create(model, taskmanager);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(0, okResult.size());
File Line
de/fhdw/wtf/walker/tasks/test/TestBaseTypeInheritanceCheck.java 276
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 53
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 97
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 142
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 186
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 232
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 277
		baseTypeInheritanceCheck.addDependency(referencer);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(2, okResult.size());
		assertEquals(0, failResult.size());
	}
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 606
de/fhdw/wtf/parser/test/TestAttributes.java 673
de/fhdw/wtf/parser/test/TestAttributes.java 759
de/fhdw/wtf/parser/test/TestAttributes.java 848
de/fhdw/wtf/parser/test/TestAttributes.java 929
de/fhdw/wtf/parser/test/TestAttributes.java 1003
de/fhdw/wtf/parser/test/TestAttributes.java 1080
de/fhdw/wtf/parser/test/TestAttributes.java 1157
de/fhdw/wtf/parser/test/TestAttributes.java 1204
de/fhdw/wtf/parser/test/TestAttributes.java 1293
de/fhdw/wtf/parser/test/TestAttributes.java 1381
de/fhdw/wtf/parser/test/TestAttributes.java 1417
de/fhdw/wtf/parser/test/TestAttributes.java 1494
de/fhdw/wtf/parser/test/TestAttributes.java 1585
de/fhdw/wtf/parser/test/TestAttributes.java 1678
de/fhdw/wtf/parser/test/TestAttributes.java 1772
de/fhdw/wtf/parser/test/TestAttributes.java 2047
de/fhdw/wtf/parser/test/TestAttributes.java 2189
de/fhdw/wtf/parser/test/TestAttributes.java 2268
de/fhdw/wtf/parser/test/TestAttributes.java 2357
de/fhdw/wtf/parser/test/TestAttributes.java 2460
de/fhdw/wtf/parser/test/TestAttributes.java 2550
		final IdentifierToken attributeIdentifier = IdentifierToken.create("Attribute", Position.create("", 1, 1, 0));
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.bracketOpenToken);
File Line
de/fhdw/wtf/parser/test/TestClasses.java 685
de/fhdw/wtf/parser/test/TestClasses.java 769
		this.stream.add(this.superClass1IdentifierToken);
		this.stream.add(this.plusSymbolToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(this.group1IdentifierToken);
		final Group group = Group.create(groupName, groupVector, this.group1IdentifierToken);
		final Name className = groupName.addName(this.classIdentifierToken);
		final Name superclassName = groupName.addName(this.superClass1IdentifierToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 614
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 680
		final Type attr2Type = ((SumType) attr2.getAttrType()).getPrototype();
		final Type attr3Type = ((SumType) attr3.getAttrType()).getPrototype();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		
		final Collection<Type> expectedSupertypes = new ArrayList<>();
		expectedSupertypes.add(clssA);
		expectedSupertypes.add(clssB);
		expectedSupertypes.add(clssC);
		expectedSupertypes.add(clssClass);
		expectedSupertypes.add(attr3Type);
		expectedSupertypes.add(attr2Type);
File Line
de/fhdw/wtf/parser/test/TestConstructors.java 388
de/fhdw/wtf/parser/test/TestConstructors.java 471
		final IdentifierToken sParameterIdentifierToken = IdentifierToken.create("s", Position.create("", 1, 1, 0));
		
		final Vector<GroupElement> group1Vector = new Vector<>();
		final Vector<Constructor> constructors = new Vector<>();
		
		final Name group1Name = UnqualifiedName.create(group1IdentifierToken);
		final Group group1 = Group.create(group1Name, group1Vector, group1IdentifierToken);
		
		final Name aName = group1Name.addName(aIdentifierToken);
		final ClassType aClass =
				RegularClassType.create(
						aName,
						new Vector<ClassModifier>(),
						new Vector<Attribute>(),
						new Vector<Type>(),
						new Vector<Operation>(),
						constructors,
						aIdentifierToken,
						
						new Vector<ClassType>());
		group1Vector.add(aClass);
		
		final ProductType aProduct = ProductType.create(this.bracketOpenToken);
File Line
de/fhdw/wtf/parser/test/TestConstructors.java 1495
de/fhdw/wtf/parser/test/TestConstructors.java 1581
				new SimpleScannerInput("Group1:group=[S1A:class={};S2A:class={};A:class=S1A+S2A+{();};];");
		final VerboseTokenStream output = new VerboseTokenStream(SimpleTokenStream.create());
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		
		final IdentifierToken group1IdentifierToken = IdentifierToken.create("Group1", Position.create("", 1, 1, 0));
		final IdentifierToken aIdentifierToken = IdentifierToken.create("A", Position.create("", 1, 1, 0));
		final IdentifierToken s1aIdentifierToken = IdentifierToken.create("S1A", Position.create("", 1, 1, 0));
		final IdentifierToken s2aIdentifierToken = IdentifierToken.create("S2A", Position.create("", 1, 1, 0));
		
		final Vector<GroupElement> group1Vector = new Vector<>();
File Line
de/fhdw/wtf/parser/test/TestConstructors.java 1752
de/fhdw/wtf/parser/test/TestConstructors.java 1866
						+ "A:class=SA1+SA2+{(i:Integer)=SA1(Integer)+SA2(Integer);};];");
		final VerboseTokenStream output = new VerboseTokenStream(SimpleTokenStream.create());
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final IdentifierToken group1IdentifierToken = IdentifierToken.create("Group1", Position.create("", 1, 1, 0));
		final IdentifierToken aIdentifierToken = IdentifierToken.create("A", Position.create("", 1, 1, 0));
		final IdentifierToken iIdentifierToken = IdentifierToken.create("i", Position.create("", 1, 1, 0));
		final IdentifierToken sa1IdentifierToken = IdentifierToken.create("SA1", Position.create("", 1, 1, 0));
		final IdentifierToken sa2IdentifierToken = IdentifierToken.create("SA2", Position.create("", 1, 1, 0));
File Line
de/fhdw/wtf/parser/test/TestClasses.java 124
de/fhdw/wtf/parser/test/TestClasses.java 250
de/fhdw/wtf/parser/test/TestClasses.java 301
de/fhdw/wtf/parser/test/TestClasses.java 352
de/fhdw/wtf/parser/test/TestClasses.java 403
de/fhdw/wtf/parser/test/TestClasses.java 515
de/fhdw/wtf/parser/test/TestClasses.java 572
	public void testSimpleClass() throws Exception {
		this.stream.add(this.group1IdentifierToken);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.classIdentifierToken);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
File Line
de/fhdw/wtf/parser/test/TestConstructors.java 471
de/fhdw/wtf/parser/test/TestConstructors.java 2027
		final IdentifierToken iParameterIdentifierToken = IdentifierToken.create("i", Position.create("", 1, 1, 1));
		
		final Vector<GroupElement> group1Vector = new Vector<>();
		final Vector<Constructor> constructors = new Vector<>();
		
		final Name group1Name = UnqualifiedName.create(group1IdentifierToken);
		final Group group1 = Group.create(group1Name, group1Vector, group1IdentifierToken);
		
		final Name aName = group1Name.addName(aIdentifierToken);
		final ClassType aClass =
				RegularClassType.create(
						aName,
						new Vector<ClassModifier>(),
						new Vector<Attribute>(),
						new Vector<Type>(),
						new Vector<Operation>(),
						constructors,
						aIdentifierToken,
						
						new Vector<ClassType>());
		group1Vector.add(aClass);
		
		final ProductType emptyProduct = ProductType.create(this.bracketOpenToken);
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 350
de/fhdw/wtf/parser/test/TestExceptions.java 463
de/fhdw/wtf/parser/test/TestExceptions.java 898
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myOperation);
		this.stream.add(this.colonToken);
		this.stream.add(this.doubleSquareBracketOpenToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(myParameter);
		this.stream.add(this.colonToken);
		this.stream.add(string);
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.arrowToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.doubleSquareBracketCloseToken);
		this.stream.add(this.abstractToken);
File Line
de/fhdw/wtf/parser/test/TestGetFirstAndLastToken.java 615
de/fhdw/wtf/parser/test/TestGetFirstAndLastToken.java 832
		expectedLastToken = ColonToken.create(Position.create("", 0 + 1, 5 + 1, 5));
		assertEquals(expectedLastToken, name.getLastToken());
		
		// Klasse Class
		final Iterator<GroupElement> iterator2 = group.getGroupElements().iterator();
		final GroupElement groupElement = iterator2.next();
		final ClassType class1 = groupElement.accept(new GroupElementReturnVisitor<ClassType>() {
			
			@Override
			public ClassType handle(final Group group) {
				fail();
				return null;
			}
			
			@Override
			public ClassType handle(final ClassType clss) {
				return clss;
			}
		});
		
		expectedFirstToken = IdentifierToken.create("Class", Position.create("", 1, 14, 13));
		expectedLastToken = SquareBracketCloseToken.create(Position.create("", 1, 59, 58));
File Line
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 233
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 268
						+ "Attribute2:(name:String, count:Integer); Attribute3:[Integer->String];};];");
		final Model model = this.getModel(input);
		
		assertTrue(model.getString().getPrototype() == model.getString());
		assertTrue(model.getInteger().getPrototype() == model.getInteger());
		
		final ClassType cls = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		
		assertTrue(cls.getPrototype() == cls);
		
		final Iterator<Attribute> attributes = cls.getAttributes().iterator();
		final Attribute attribute_1 = attributes.next();
		final Attribute attribute_2 = attributes.next();
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 1202
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 1118
		expectedSupertypes.add(abstrProductCreated);
		
		this.checkSupertypes(expectedSupertypes, productPrototyp2.getSuperTypes());
		
		assertEquals(1, clssA.getSuperTypes().size());
		assertEquals(1, model.getString().getSuperTypes().size());
		assertEquals(1, model.getInteger().getSuperTypes().size());
	}
	
	/**
	 * Assert Equality of expectedSupertypes and supertypes.
	 * 
	 * @param expectedSupertypes
	 *            expectedSupertypes
	 * @param supertypes
	 *            supertypes
	 */
	private void checkSupertypes(final Collection<Type> expectedSupertypes, final Collection<Type> supertypes) {
		assertEquals(expectedSupertypes.size(), supertypes.size());
		for (final Type type : supertypes) {
			assertTrue(expectedSupertypes.remove(HelperUtils.getReferencedType(type)));
		}
	}
	
}
File Line
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 301
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 333
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 365
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 394
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 533
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 696
		final SimpleScannerInput input = new SimpleScannerInput("Group:group=[Class:class={Attribute1:{Integer};};];");
		final Model model = this.getModel(input);
		
		assertTrue(model.getString().getPrototype() == model.getString());
		assertTrue(model.getInteger().getPrototype() == model.getInteger());
		
		final ClassType cls = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		
		assertTrue(cls.getPrototype() == cls);
		
		final Iterator<Attribute> attributes = cls.getAttributes().iterator();
		final Attribute attribute1 = attributes.next();
		
		assertTrue(attribute1.getAttrType() instanceof SumType);
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 177
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 222
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 269
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 316
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 363
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 426
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 473
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 558
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 149
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 190
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 235
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 281
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 334
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 394
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 439
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 537
						+ "Attribute2:{String,Integer};};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final ClassType clss = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		final Iterator<Attribute> attrIterator = clss.getAttributes().iterator();
		final Attribute attr1 = attrIterator.next();
		final Attribute attr2 = attrIterator.next();
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 613
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 685
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 886
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 596
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 664
						+ "Attribute3:{Integer,String};}; B:class=A+{}; C:class=A+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final Iterator<GroupElement> iterator = model.getGroups().iterator().next().getGroupElements().iterator();
		
		final ClassType clssA = (ClassType) iterator.next();
		final ClassType clssB = (ClassType) iterator.next();
		final ClassType clssC = (ClassType) iterator.next();
		final ClassType clssClass = (ClassType) iterator.next();
File Line
de/fhdw/wtf/walker/tasks/test/TestTypeReferencer.java 349
de/fhdw/wtf/walker/tasks/test/TestTypeReferencer.java 525
		final Group group211 = Group.create(group211Name, group211Elements, group211IdentifierToken, null);
		group21Elements.add(group211);
		final IdentifierToken class2111IdentifierToken =
				IdentifierToken.create("Class1", Position.create("", 0 + 1, 0 + 1, 0));
		final Name class2111Name = group211Name.addName(class2111IdentifierToken);
		final Collection<ClassModifier> class2111Modifiers = new Vector<>();
		final Collection<Attribute> class2111Attributes = new Vector<>();
		final List<Type> class2111SuperTypes = new Vector<>();
		final Collection<Operation> class2111Operations = new Vector<>();
		final ClassType class2111 =
				RegularClassType.create(
						class2111Name,
						class2111Modifiers,
						class2111Attributes,
						class2111SuperTypes,
						class2111Operations,
						new Vector<Constructor>(),
File Line
de/fhdw/wtf/parser/test/TestClasses.java 171
de/fhdw/wtf/parser/test/TestClasses.java 452
de/fhdw/wtf/parser/test/TestClasses.java 482
de/fhdw/wtf/parser/test/TestClasses.java 627
	public void testSimpleClassWithoutSemicolon() {
		this.stream.add(this.group1IdentifierToken);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.classIdentifierToken);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.squareBracketCloseToken);
File Line
de/fhdw/wtf/parser/test/TestClasses.java 312
de/fhdw/wtf/parser/test/TestClasses.java 586
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.transientToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<ClassModifier> modifiers = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(this.group1IdentifierToken);
		final Group group = Group.create(groupName, groupVector, this.group1IdentifierToken);
		final Name className = groupName.addName(this.classIdentifierToken);
		modifiers.add(ClassModifierTransient.create(this.transientToken));
File Line
de/fhdw/wtf/parser/test/TestClasses.java 414
de/fhdw/wtf/parser/test/TestClasses.java 529
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.visitableToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<ClassModifier> modifiers = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(this.group1IdentifierToken);
		final Group group = Group.create(groupName, groupVector, this.group1IdentifierToken);
		final Name className = groupName.addName(this.classIdentifierToken);
		modifiers.add(ClassModifierVisitable.create(this.visitableToken));
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 415
de/fhdw/wtf/parser/test/TestExceptions.java 683
		this.stream.add(string);
		this.stream.add(this.arrowToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.doubleSquareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		try {
			this.parser.parse();
			fail();
		} catch (final NoValidTokenStreamException e) {
File Line
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 77
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 171
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 245
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 310
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 415
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 515
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 615
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 731
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 856
	public void testProductSum1() throws Exception {
		final IdentifierToken classIdentifier = IdentifierToken.create("class1", Position.create("", 1, 1, 0));
		final IdentifierToken groupIdentifier = IdentifierToken.create("group1", Position.create("", 1, 1, 0));
		final IdentifierToken attributeIdentifier = IdentifierToken.create("attribute", Position.create("", 1, 1, 0));
		final IdentifierToken integerIdentifier = IdentifierToken.create("Integer", Position.create("", 1, 1, 0));
		final IdentifierToken stringIdentifier = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		final IdentifierToken testIdentifier = IdentifierToken.create("Test", Position.create("", 1, 1, 0));
File Line
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 76
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 140
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 204
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 337
		cyclicInheritance.addDependency(referencer);
		inheritanceChecker.addMembers(cyclicInheritance, baseTypeInheritanceCheck);
		
		doubleAttributenameCheck.addDependency(inheritanceChecker);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(6, okResult.size());
File Line
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 79
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 143
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 276
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 340
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 406
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 472
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 537
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 603
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 90
		doubleAttributenameCheck.addDependency(inheritanceChecker);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(6, okResult.size());
		assertEquals(0, failResult.size());
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 134
de/fhdw/wtf/parser/test/TestAttributes.java 281
de/fhdw/wtf/parser/test/TestAttributes.java 467
de/fhdw/wtf/parser/test/TestAttributes.java 535
de/fhdw/wtf/parser/test/TestAttributes.java 1863
de/fhdw/wtf/parser/test/TestAttributes.java 1931
de/fhdw/wtf/parser/test/TestAttributes.java 2005
de/fhdw/wtf/parser/test/TestAttributes.java 2047
de/fhdw/wtf/parser/test/TestAttributes.java 2118
				IdentifierToken.create("Attribute", Position.create("", 0 + 1, 0 + 1, 0));
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier);
File Line
de/fhdw/wtf/parser/test/TestClasses.java 262
de/fhdw/wtf/parser/test/TestClasses.java 530
		this.stream.add(this.abstractToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<ClassModifier> modifiers = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(this.group1IdentifierToken);
		final Group group = Group.create(groupName, groupVector, this.group1IdentifierToken);
		final Name className = groupName.addName(this.classIdentifierToken);
		modifiers.add(ClassModifierAbstract.create(this.abstractToken));
File Line
de/fhdw/wtf/parser/test/TestClasses.java 274
de/fhdw/wtf/parser/test/TestClasses.java 325
de/fhdw/wtf/parser/test/TestClasses.java 376
de/fhdw/wtf/parser/test/TestClasses.java 427
de/fhdw/wtf/parser/test/TestClasses.java 545
de/fhdw/wtf/parser/test/TestClasses.java 602
		modifiers.add(ClassModifierAbstract.create(this.abstractToken));
		final ClassType class1 =
				RegularClassType.create(
						className,
						modifiers,
						new Vector<Attribute>(),
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						this.classIdentifierToken,
						
						new Vector<ClassType>());
		groupVector.add(class1);
		final Model expected = Model.create(this.group1IdentifierToken);
		expected.addGroup(group);
		
		final Model actual = this.parser.parse();
		assertEquals(expected, actual);
		assertEquals(0, this.parser.getExceptions().size());
	}
	
	/**
	 * Group:group=[Class:class={} transient;]; .
	 * 
	 * @throws Exception
	 */
	@Test
	public void testClassTransientModifier() throws Exception {
File Line
de/fhdw/wtf/parser/test/TestClasses.java 364
de/fhdw/wtf/parser/test/TestClasses.java 587
		this.stream.add(this.serviceToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<ClassModifier> modifiers = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(this.group1IdentifierToken);
		final Group group = Group.create(groupName, groupVector, this.group1IdentifierToken);
		final Name className = groupName.addName(this.classIdentifierToken);
		modifiers.add(ClassModifierService.create(this.serviceToken));
File Line
de/fhdw/wtf/parser/test/TestOperations.java 273
de/fhdw/wtf/parser/test/TestOperations.java 664
	public void testOperationWithOneSimpleInputParameter() throws Exception {
		final IdentifierToken myGroup = IdentifierToken.create("MyGroup", Position.create("", 1, 1, 0));
		final IdentifierToken myClass = IdentifierToken.create("MyClass", Position.create("", 1, 1, 0));
		final IdentifierToken myOperation = IdentifierToken.create("MyOperation", Position.create("", 1, 1, 0));
		final IdentifierToken myParameter = IdentifierToken.create("MyParameter", Position.create("", 1, 1, 0));
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
File Line
de/fhdw/wtf/parser/test/TestClasses.java 124
de/fhdw/wtf/parser/test/TestClasses.java 171
de/fhdw/wtf/parser/test/TestClasses.java 250
de/fhdw/wtf/parser/test/TestClasses.java 301
de/fhdw/wtf/parser/test/TestClasses.java 352
de/fhdw/wtf/parser/test/TestClasses.java 403
de/fhdw/wtf/parser/test/TestClasses.java 452
de/fhdw/wtf/parser/test/TestClasses.java 482
de/fhdw/wtf/parser/test/TestClasses.java 515
de/fhdw/wtf/parser/test/TestClasses.java 572
de/fhdw/wtf/parser/test/TestClasses.java 627
	public void testSimpleClass() throws Exception {
		this.stream.add(this.group1IdentifierToken);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.classIdentifierToken);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 78
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 149
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 220
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 292
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 364
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 434
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 506
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 569
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 632
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 694
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 757
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 820
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 885
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 947
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 1008
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 1079
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 1141
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 1204
		subtypesFillTask.addDependency(cyclicInheritance);
		prototypesTask.addDependency(subtypesFillTask);
		overloadingCheck.addDependency(prototypesTask);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(7, okResult.size());
File Line
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1477
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1677
	public void testThrownSumContainsThrownTypes() throws SumIsAnythingException {
		
		final Token dummyToken = DummyToken.getInstance();
		final Position dummyPosition = DummyToken.getDummyPosition();
		final IdentifierToken a = IdentifierToken.create("A", dummyPosition);
		final IdentifierToken b = IdentifierToken.create("B", dummyPosition);
		
		// Prepare Actual
		final SumType actualSum = SumType.create(dummyToken);
		actualSum.add(ThrownType.create(
				dummyToken,
				TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(a)))));
		actualSum.add(ThrownType.create(
				dummyToken,
				TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(b)))));
		
		final ThrownType thrownType = ThrownType.create(DummyToken.getInstance(), actualSum, DummyToken.getInstance());
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 2636
de/fhdw/wtf/parser/test/TestAttributes.java 2676
	public void testAttributeToString() {
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 0 + 1, 0 + 1, 0));
		final IdentifierToken attributeIdentifier =
				IdentifierToken.create("Attribute", Position.create("", 0 + 1, 0 + 1, 0));
		final IdentifierToken prior = IdentifierToken.create("prior", Position.create("", 0 + 1, 0 + 1, 0));
		final UnqualifiedName name = UnqualifiedName.create(string);
		final BaseType type = BaseType.create(name, string, string);
		final Collection<AttributeModifier> modifiers = new ArrayList<AttributeModifier>();
File Line
de/fhdw/wtf/parser/test/TestConstructors.java 680
de/fhdw/wtf/parser/test/TestConstructors.java 755
				new SimpleScannerInput("Group1:group=[A:class={op1:[[(s:String)->{}]];();op2:[[(i:Integer)->{}]];};];");
		final VerboseTokenStream output = new VerboseTokenStream(SimpleTokenStream.create());
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		
		final IdentifierToken group1IdentifierToken = IdentifierToken.create("Group1", Position.create("", 1, 1, 0));
		final IdentifierToken aIdentifierToken = IdentifierToken.create("A", Position.create("", 1, 1, 0));
		final IdentifierToken sParameterIdentifierToken = IdentifierToken.create("s", Position.create("", 1, 1, 1));
		final IdentifierToken iParameterIdentifierToken = IdentifierToken.create("i", Position.create("", 1, 1, 1));
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 807
de/fhdw/wtf/parser/test/TestExceptions.java 857
		this.stream.add(this.semicolonToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		try {
			this.parser.parse();
			fail();
		} catch (final NoValidTokenStreamException e) {
			boolean noCurlyBracketClose = false;
			assertEquals(1, this.parser.getExceptions().size());
			for (final Exception ex : this.parser.getExceptions()) {
				if (ex instanceof NoCurlyBracketCloseException) {
					noCurlyBracketClose = true;
				}
			}
			assertTrue(noCurlyBracketClose);
		}
	}
	
	/**
	 * MyGroup:group=[MyClass:class={MyAttribute:{String, Integer;};];.
	 */
	@Test
	public void testNoCurlyBracketCloseExceptionSum() {
File Line
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 213
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 256
		final Model model = SyntaxCheck.getInstance().getModelFromString(input);
		
		final Iterator<Type> iterator = model.getConstructorCallDependencies().keySet().iterator();
		while (iterator.hasNext()) {
			final Type current = iterator.next();
			
			switch (current.getTypeString()) {
			case "group1>A":
				assertTrue(true);
				assertEquals(0, model.getConstructorCallDependencies().get(current).size());
				break;
			case "group1>B":
				assertTrue(true);
				assertEquals(0, model.getConstructorCallDependencies().get(current).size());
				break;
			case "group1>C":
File Line
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1477
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1677
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1759
	public void testThrownSumContainsThrownTypes() throws SumIsAnythingException {
		
		final Token dummyToken = DummyToken.getInstance();
		final Position dummyPosition = DummyToken.getDummyPosition();
		final IdentifierToken a = IdentifierToken.create("A", dummyPosition);
		final IdentifierToken b = IdentifierToken.create("B", dummyPosition);
		
		// Prepare Actual
		final SumType actualSum = SumType.create(dummyToken);
		actualSum.add(ThrownType.create(
				dummyToken,
				TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(a)))));
		actualSum.add(ThrownType.create(
				dummyToken,
				TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(b)))));
File Line
de/fhdw/wtf/core/integration/test/TestScannerParserIntegration.java 131
de/fhdw/wtf/parser/test/TestAttributes.java 487
de/fhdw/wtf/parser/test/TestAttributes.java 557
de/fhdw/wtf/parser/test/TestAttributes.java 701
de/fhdw/wtf/parser/test/TestAttributes.java 789
de/fhdw/wtf/parser/test/TestAttributes.java 874
de/fhdw/wtf/parser/test/TestAttributes.java 953
de/fhdw/wtf/parser/test/TestAttributes.java 1028
de/fhdw/wtf/parser/test/TestAttributes.java 1105
de/fhdw/wtf/parser/test/TestAttributes.java 1235
de/fhdw/wtf/parser/test/TestAttributes.java 1324
de/fhdw/wtf/parser/test/TestAttributes.java 1442
de/fhdw/wtf/parser/test/TestAttributes.java 1526
de/fhdw/wtf/parser/test/TestAttributes.java 1618
de/fhdw/wtf/parser/test/TestAttributes.java 1713
de/fhdw/wtf/parser/test/TestAttributes.java 1804
de/fhdw/wtf/parser/test/TestAttributes.java 1883
de/fhdw/wtf/parser/test/TestAttributes.java 1954
de/fhdw/wtf/parser/test/TestAttributes.java 2142
		final IdentifierToken valueIdentifier = IdentifierToken.create("value", position);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType classModel =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						new Vector<ClassType>());
		
		final ByNameState keyReferenceState = ByNameState.create(UnqualifiedName.create(keyIdentifier));
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 1701
de/fhdw/wtf/parser/test/TestAttributes.java 2204
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.arrowToken);
		this.stream.add(this.integerIdentifier);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.arrowToken);
		this.stream.add(this.stringIdentifier);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
File Line
de/fhdw/wtf/core/integration/test/TestScannerParserIntegration.java 131
de/fhdw/wtf/parser/test/TestAttributes.java 626
		final IdentifierToken valueIdentifier = IdentifierToken.create("value", position);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<Attribute> attributes = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(groupIdentifier);
		final Group group = Group.create(groupName, groupVector, groupIdentifier);
		
		final Name className = groupName.addName(classIdentifier);
		final ClassType classModel =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						attributes,
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						classIdentifier,
						new Vector<ClassType>());
		
		final ByNameState keyReferenceState = ByNameState.create(UnqualifiedName.create(keyIdentifier));
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 186
de/fhdw/wtf/parser/test/TestExceptions.java 241
de/fhdw/wtf/parser/test/TestExceptions.java 290
de/fhdw/wtf/parser/test/TestExceptions.java 340
de/fhdw/wtf/parser/test/TestExceptions.java 398
de/fhdw/wtf/parser/test/TestExceptions.java 453
de/fhdw/wtf/parser/test/TestExceptions.java 508
de/fhdw/wtf/parser/test/TestExceptions.java 558
de/fhdw/wtf/parser/test/TestExceptions.java 609
de/fhdw/wtf/parser/test/TestExceptions.java 666
de/fhdw/wtf/parser/test/TestExceptions.java 784
de/fhdw/wtf/parser/test/TestExceptions.java 839
de/fhdw/wtf/parser/test/TestExceptions.java 1065
de/fhdw/wtf/parser/test/TestExceptions.java 1237
de/fhdw/wtf/parser/test/TestOperations.java 203
de/fhdw/wtf/parser/test/TestOperations.java 278
de/fhdw/wtf/parser/test/TestOperations.java 362
de/fhdw/wtf/parser/test/TestOperations.java 581
de/fhdw/wtf/parser/test/TestOperations.java 670
de/fhdw/wtf/parser/test/TestOperations.java 801
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myOperation);
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 235
de/fhdw/wtf/parser/test/TestExceptions.java 501
de/fhdw/wtf/parser/test/TestExceptions.java 551
	public void testNoTypeExceptionProduct() {
		this.stream = SimpleTokenStream.create();
		this.parser = Parser.create(this.stream);
		final IdentifierToken myGroup = IdentifierToken.create("MyGroup", Position.create("", 1, 1, 0));
		final IdentifierToken myClass = IdentifierToken.create("MyClass", Position.create("", 1, 1, 0));
		final IdentifierToken myAttribute = IdentifierToken.create("MyAttribute", Position.create("", 1, 1, 0));
		final IdentifierToken name = IdentifierToken.create("name", Position.create("", 1, 1, 0));
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 284
de/fhdw/wtf/parser/test/TestExceptions.java 832
de/fhdw/wtf/parser/test/TestExceptions.java 1230
	public void testNoTypeExceptionSum() {
		this.stream = SimpleTokenStream.create();
		this.parser = Parser.create(this.stream);
		final IdentifierToken myGroup = IdentifierToken.create("MyGroup", Position.create("", 1, 1, 0));
		final IdentifierToken myClass = IdentifierToken.create("MyClass", Position.create("", 1, 1, 0));
		final IdentifierToken myAttribute = IdentifierToken.create("MyAttribute", Position.create("", 1, 1, 0));
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
File Line
de/fhdw/wtf/parser/test/TestModels.java 111
de/fhdw/wtf/parser/test/TestModels.java 171
de/fhdw/wtf/parser/test/TestModels.java 248
		final Parser parser = Parser.create(stream);
		final IdentifierToken group1Identifier = IdentifierToken.create("Group1", Position.create("", 1, 1, 0));
		final IdentifierToken class1Identifier = IdentifierToken.create("Class1", Position.create("", 1, 1, 0));
		final IdentifierToken group2Identifier = IdentifierToken.create("Group2", Position.create("", 1, 1, 0));
		final IdentifierToken class2Identifier = IdentifierToken.create("Class2", Position.create("", 1, 1, 0));
		final IdentifierToken class3Identifier = IdentifierToken.create("Class3", Position.create("", 1, 1, 0));
File Line
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 151
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 225
		product.addElement(element4);
		
		final Attribute attribute =
				Attribute.create("attribute", product, new Vector<AttributeModifier>(), attributeIdentifier);
		attributes.add(attribute);
		
		modifiers.add(ClassModifierService.create(VisitableToken.create(Position.create("", 1, 1, 0))));
		modifiers.add(ClassModifierTransient.create(AbstractToken.create(Position.create("", 1, 1, 0))));
		groupVector.add(clazz);
		final Model expected = Model.create(groupIdentifier);
		expected.addGroup(group);
		assertEquals(expected, model);
	}
	
	/**
	 * group1 : group = [ class1 : class = {attribute : (int1:Integer, str:String) ;} service transient;]; .
	 * 
	 * @throws Exception
	 */
	@Test
	public void testProductSum2() throws Exception {
File Line
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 289
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 394
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 494
		sum.add(typeProxyString);
		
		final Attribute attribute =
				Attribute.create("attribute", sum, new Vector<AttributeModifier>(), attributeIdentifier);
		attributes.add(attribute);
		
		modifiers.add(ClassModifierService.create(VisitableToken.create(Position.create("", 1, 1, 0))));
		modifiers.add(ClassModifierTransient.create(AbstractToken.create(Position.create("", 1, 1, 0))));
		groupVector.add(clazz);
		final Model expected = Model.create(groupIdentifier);
		expected.addGroup(group);
		assertEquals(expected, model);
	}
	
	/**
	 * group1 : group = [ class1 : class = {attribute : {(int1:Integer,int2:Integer,int42:Integer), String,
	 * (int3:Integer,int4:Integer), Test} ;} service transient;]; .
	 * 
	 * @throws Exception
	 */
	@Test
	public void testProductSum4() throws Exception {
File Line
de/fhdw/wtf/parser/test/TestClasses.java 133
de/fhdw/wtf/parser/test/TestClasses.java 686
de/fhdw/wtf/parser/test/TestClasses.java 770
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(this.group1IdentifierToken);
		final Group group = Group.create(groupName, groupVector, this.group1IdentifierToken);
		final Name className = groupName.addName(this.classIdentifierToken);
		final ClassType class1 =
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 182
de/fhdw/wtf/parser/test/TestExceptions.java 336
de/fhdw/wtf/parser/test/TestExceptions.java 394
de/fhdw/wtf/parser/test/TestExceptions.java 449
de/fhdw/wtf/parser/test/TestExceptions.java 662
de/fhdw/wtf/parser/test/TestExceptions.java 780
de/fhdw/wtf/parser/test/TestExceptions.java 885
de/fhdw/wtf/parser/test/TestExceptions.java 1061
de/fhdw/wtf/parser/test/TestOperations.java 665
		final IdentifierToken myGroup = IdentifierToken.create("MyGroup", Position.create("", 1, 1, 0));
		final IdentifierToken myClass = IdentifierToken.create("MyClass", Position.create("", 1, 1, 0));
		final IdentifierToken myOperation = IdentifierToken.create("MyOperation", Position.create("", 1, 1, 0));
		final IdentifierToken myParameter = IdentifierToken.create("MyParameter", Position.create("", 1, 1, 0));
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
File Line
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 48
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 175
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 292
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 341
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 390
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 439
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 568
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 459
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 504
		cyclicInheritance.addDependency(referencer);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<OKTaskResult>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<ExceptionalTaskResult>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(1, okResult.size());
		assertEquals(1, failResult.size());
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 269
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 316
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 426
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 519
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 235
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 281
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 394
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 492
						+ "B:class=A+{}; C:class=A+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final ClassType clss = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		final Iterator<Attribute> attrIterator = clss.getAttributes().iterator();
		final Attribute attr1 = attrIterator.next();
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 896
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 945
		final ClassType clssD = (ClassType) iterator.next();
		
		final Collection<Type> supertypesClassA = clssA.getSuperTypes();
		assertEquals(1, supertypesClassA.size());
		final Iterator<Type> supertypesClassAIterator = supertypesClassA.iterator();
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(supertypesClassAIterator.next()));
		
		final Collection<Type> supertypesClassB = clssB.getSuperTypes();
		assertEquals(1, supertypesClassB.size());
		final Iterator<Type> supertypesClassBIterator = supertypesClassB.iterator();
		assertEquals(clssA, HelperUtils.getReferencedType(supertypesClassBIterator.next()));
File Line
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 301
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 333
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 365
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 394
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 424
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 460
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 497
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 533
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 696
		final SimpleScannerInput input = new SimpleScannerInput("Group:group=[Class:class={Attribute1:{Integer};};];");
		final Model model = this.getModel(input);
		
		assertTrue(model.getString().getPrototype() == model.getString());
		assertTrue(model.getInteger().getPrototype() == model.getInteger());
		
		final ClassType cls = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		
		assertTrue(cls.getPrototype() == cls);
		
		final Iterator<Attribute> attributes = cls.getAttributes().iterator();
		final Attribute attribute1 = attributes.next();
File Line
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 727
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 768
						+ "Attribute2:(p1:String,p2:Integer);};];");
		final Model model = this.getModel(input);
		
		assertTrue(model.getString().getPrototype() == model.getString());
		assertTrue(model.getInteger().getPrototype() == model.getInteger());
		
		final ClassType cls = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		
		assertTrue(cls.getPrototype() == cls);
		
		final Iterator<Attribute> iterator = cls.getAttributes().iterator();
		final Attribute attribute1 = iterator.next();
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 273
de/fhdw/wtf/parser/test/TestAttributes.java 2112
	public void testSomeAttributes() throws Exception {
		final IdentifierToken groupIdentifier = IdentifierToken.create("Group", Position.create("", 0 + 1, 0 + 1, 0));
		final IdentifierToken classIdentifier = IdentifierToken.create("Class", Position.create("", 0 + 1, 0 + 1, 0));
		final IdentifierToken attributeIdentifier1 =
				IdentifierToken.create("Attribute1", Position.create("", 0 + 1, 0 + 1, 0));
		final IdentifierToken attributeIdentifier2 =
				IdentifierToken.create("Attribute2", Position.create("", 0 + 1, 0 + 1, 0));
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 898
de/fhdw/wtf/parser/test/TestExceptions.java 1075
		this.stream.add(this.equalToken);
		this.stream.add(myOperation);
		this.stream.add(this.colonToken);
		this.stream.add(this.doubleSquareBracketOpenToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(myParameter);
		this.stream.add(this.colonToken);
		this.stream.add(string);
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.arrowToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.doubleSquareBracketCloseToken);
File Line
de/fhdw/wtf/parser/test/TestGroups.java 150
de/fhdw/wtf/parser/test/TestGroups.java 248
	public void testSimpleGroupInGroupComplete() throws Exception {
		this.stream.add(this.idGroup1Token);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.idGroup2Token);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.squareBracketCloseToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 59
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 115
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 171
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 227
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 283
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 339
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 395
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 227
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 59
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 113
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 170
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 225
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(0, okResult.size());
		assertEquals(1, failResult.size());
		
		final Exception exception = failResult.iterator().next().getError();
		if (exception instanceof AbstractOperationsException) {
File Line
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 445
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 492
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 542
de/fhdw/wtf/walker/tasks/test/TestBaseTypeInheritanceCheck.java 61
de/fhdw/wtf/walker/tasks/test/TestBaseTypeInheritanceCheck.java 119
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 320
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 276
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 322
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 368
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 414
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 552
		AbstractOperationsCheck.create(model, taskmanager);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(1, okResult.size());
		assertEquals(0, failResult.size());
File Line
de/fhdw/wtf/walker/tasks/test/TestBaseTypeInheritanceCheck.java 65
de/fhdw/wtf/walker/tasks/test/TestBaseTypeInheritanceCheck.java 123
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 52
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 179
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 296
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 345
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 394
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 443
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 572
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 324
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(1, okResult.size());
		assertEquals(1, failResult.size());
		
		final Exception exception = failResult.iterator().next().getError();
		if (exception instanceof BaseTypeInheritanceException) {
File Line
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 79
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 143
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 276
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 340
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 406
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 472
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 537
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 603
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 1010
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 90
		doubleAttributenameCheck.addDependency(inheritanceChecker);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(6, okResult.size());
		assertEquals(0, failResult.size());
File Line
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 207
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 91
		doubleAttributenameCheck.addDependency(inheritanceChecker);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(5, okResult.size());
		assertEquals(1, failResult.size());
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 177
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 222
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 363
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 473
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 519
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 558
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 149
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 190
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 334
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 439
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 492
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 537
						+ "Attribute2:{String,Integer};};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final ClassType clss = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		final Iterator<Attribute> attrIterator = clss.getAttributes().iterator();
		final Attribute attr1 = attrIterator.next();
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 385
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 579
				((SumType) ((SumType) attr2.getAttrType()).getPrototype()).getSuperTypes();
		assertEquals(1, supertypesAttr2.size());
		final Iterator<Type> superTypesAttr2Iterator = supertypesAttr2.iterator();
		assertEquals(attr1Type, superTypesAttr2Iterator.next());
		
		assertEquals(0, ((SumType) attr3.getAttrType()).getSuperTypes().size());
		final Collection<Type> supertypesAttr3 =
				((SumType) ((SumType) attr3.getAttrType()).getPrototype()).getSuperTypes();
		assertEquals(1, supertypesAttr3.size());
		final Iterator<Type> superTypesAttr3Iterator = supertypesAttr3.iterator();
		assertEquals(attr1Type, superTypesAttr3Iterator.next());
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 205
de/fhdw/wtf/parser/test/TestExceptions.java 684
		this.stream.add(HyphenToken.create(Position.createDummyPosition()));
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.doubleSquareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		try {
			this.parser.parse();
			fail();
		} catch (final NoValidTokenStreamException e) {
			boolean noArrowException = false;
File Line
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1350
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1521
	public void testThrownSumContainsOneThrownTypeFirstAndOneNormalThrownTypes() throws SumIsAnythingException {
		
		final Token dummyToken = DummyToken.getInstance();
		final Position dummyPosition = DummyToken.getDummyPosition();
		final IdentifierToken a = IdentifierToken.create("A", dummyPosition);
		final IdentifierToken b = IdentifierToken.create("B", dummyPosition);
		
		// Prepare Actual
		final SumType actualSum = SumType.create(dummyToken);
		actualSum.add(ThrownType.create(
				dummyToken,
				TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(a)))));
		actualSum.add(TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(b))));
		
		final ThrownType thrownType = ThrownType.create(DummyToken.getInstance(), actualSum, DummyToken.getInstance());
File Line
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1392
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1599
	public void testThrownSumContainsOneThrownTypeSecondAndOneNormalThrownTypes() throws SumIsAnythingException {
		
		final Token dummyToken = DummyToken.getInstance();
		final Position dummyPosition = DummyToken.getDummyPosition();
		final IdentifierToken a = IdentifierToken.create("A", dummyPosition);
		final IdentifierToken b = IdentifierToken.create("B", dummyPosition);
		
		// Prepare Actual
		final SumType actualSum = SumType.create(dummyToken);
		actualSum.add(TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(a))));
		actualSum.add(ThrownType.create(
				dummyToken,
				TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(b)))));
		
		final ThrownType thrownType = ThrownType.create(DummyToken.getInstance(), actualSum, DummyToken.getInstance());
File Line
de/fhdw/wtf/parser/test/TestClasses.java 171
de/fhdw/wtf/parser/test/TestClasses.java 199
de/fhdw/wtf/parser/test/TestClasses.java 452
de/fhdw/wtf/parser/test/TestClasses.java 482
de/fhdw/wtf/parser/test/TestClasses.java 627
	public void testSimpleClassWithoutSemicolon() {
		this.stream.add(this.group1IdentifierToken);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.classIdentifierToken);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
File Line
de/fhdw/wtf/parser/test/TestClasses.java 262
de/fhdw/wtf/parser/test/TestClasses.java 313
de/fhdw/wtf/parser/test/TestClasses.java 364
de/fhdw/wtf/parser/test/TestClasses.java 415
de/fhdw/wtf/parser/test/TestClasses.java 530
de/fhdw/wtf/parser/test/TestClasses.java 587
		this.stream.add(this.abstractToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		final Vector<GroupElement> groupVector = new Vector<>();
		final Vector<ClassModifier> modifiers = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(this.group1IdentifierToken);
		final Group group = Group.create(groupName, groupVector, this.group1IdentifierToken);
		final Name className = groupName.addName(this.classIdentifierToken);
		modifiers.add(ClassModifierAbstract.create(this.abstractToken));
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 205
de/fhdw/wtf/parser/test/TestExceptions.java 416
de/fhdw/wtf/parser/test/TestExceptions.java 907
		this.stream.add(HyphenToken.create(Position.createDummyPosition()));
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.doubleSquareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		try {
			this.parser.parse();
			fail();
		} catch (final NoValidTokenStreamException e) {
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 629
de/fhdw/wtf/parser/test/TestExceptions.java 1122
		this.stream.add(myClass2);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		try {
			this.parser.parse();
			fail();
		} catch (final NoValidTokenStreamException e) {
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 682
de/fhdw/wtf/parser/test/TestExceptions.java 905
de/fhdw/wtf/parser/test/TestOperations.java 217
de/fhdw/wtf/parser/test/TestOperations.java 383
		this.stream.add(string);
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.arrowToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.doubleSquareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
File Line
de/fhdw/wtf/parser/test/TestGroups.java 187
de/fhdw/wtf/parser/test/TestGroups.java 215
	public void testSimpleGroupInGroup2GroupCloseMissing() {
		this.stream.add(this.idGroup1Token);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.idGroup2Token);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.semicolonToken);
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 201
de/fhdw/wtf/parser/test/TestAttributes.java 281
de/fhdw/wtf/parser/test/TestAttributes.java 2118
				IdentifierToken.create("Attribute", Position.create("", 0 + 1, 0 + 1, 0));
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(superclassIdentifier);
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 753
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 845
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 980
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 1038
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 1079
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 1148
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 741
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 833
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 877
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 949
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 992
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 1062
						+ "D:class=B+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final Iterator<GroupElement> iterator = model.getGroups().iterator().next().getGroupElements().iterator();
		final ClassType clssA = (ClassType) iterator.next();
		final ClassType clssB = (ClassType) iterator.next();
File Line
de/fhdw/wtf/dsl/scanner/test/ScannerTest.java 519
de/fhdw/wtf/dsl/scanner/test/ScannerTest.java 570
				new SimpleScannerInput("MyGroup:group=[MyClass:class={MyOperation:[[()->[String->Integer]!]];};];");
		final VerboseTokenStream output = new VerboseTokenStream(SimpleTokenStream.create());
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		
		final TokenStream stream = SimpleTokenStream.create();
		
		final IdentifierToken myGroupToken = IdentifierToken.create("MyGroup", Position.create("", 1, 1, 0));
		final IdentifierToken myClassToken = IdentifierToken.create("MyClass", Position.create("", 1, 16, 15));
		final IdentifierToken myOperationToken = IdentifierToken.create("MyOperation", Position.create("", 1, 31, 30));
File Line
de/fhdw/wtf/parser/test/TestClasses.java 124
de/fhdw/wtf/parser/test/TestClasses.java 199
de/fhdw/wtf/parser/test/TestClasses.java 250
de/fhdw/wtf/parser/test/TestClasses.java 301
de/fhdw/wtf/parser/test/TestClasses.java 352
de/fhdw/wtf/parser/test/TestClasses.java 403
de/fhdw/wtf/parser/test/TestClasses.java 515
de/fhdw/wtf/parser/test/TestClasses.java 572
	public void testSimpleClass() throws Exception {
		this.stream.add(this.group1IdentifierToken);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.classIdentifierToken);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
File Line
de/fhdw/wtf/parser/test/TestGroups.java 150
de/fhdw/wtf/parser/test/TestGroups.java 187
de/fhdw/wtf/parser/test/TestGroups.java 215
de/fhdw/wtf/parser/test/TestGroups.java 248
	public void testSimpleGroupInGroupComplete() throws Exception {
		this.stream.add(this.idGroup1Token);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.idGroup2Token);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.squareBracketCloseToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 55
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 111
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 167
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 223
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 279
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 335
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 391
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 276
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 322
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 368
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 414
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 552
		AbstractOperationsCheck.create(model, taskmanager);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(0, okResult.size());
File Line
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 445
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 492
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 542
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 55
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 109
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 166
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 221
		AbstractOperationsCheck.create(model, taskmanager);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(1, okResult.size());
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 613
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 685
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 753
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 845
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 886
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 937
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 1038
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 596
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 664
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 741
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 833
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 949
						+ "Attribute3:{Integer,String};}; B:class=A+{}; C:class=A+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final Iterator<GroupElement> iterator = model.getGroups().iterator().next().getGroupElements().iterator();
		
		final ClassType clssA = (ClassType) iterator.next();
		final ClassType clssB = (ClassType) iterator.next();
		final ClassType clssC = (ClassType) iterator.next();
File Line
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 2055
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 2136
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 2197
		final SumType actualSum = SumType.create(dummyToken);
		actualSum.add(ThrownType.create(
				dummyToken,
				TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(b)))));
		actualSum.add(TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(b))));
		actualSum.add(TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(b))));
		actualSum.add(ThrownType.create(
				dummyToken,
				TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(b)))));
		
		final List<Type> standardizeElements = actualSum.standardize().accept(new TypeVisitorReturn<List<Type>>() {
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 102
de/fhdw/wtf/parser/test/TestClasses.java 100
		this.integerIdentifier = IdentifierToken.create("Integer", Position.create("", 0 + 1, 0 + 1, 0));
		this.colonToken = ColonToken.create(Position.create("", 0 + 1, 0 + 1, 0));
		this.groupToken = GroupToken.create(Position.create("", 0 + 1, 0 + 1, 0));
		this.equalToken = EqualToken.create(Position.create("", 0 + 1, 0 + 1, 0));
		this.squareBracketOpenToken = SquareBracketOpenToken.create(Position.create("", 0, 0, 0));
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 186
de/fhdw/wtf/parser/test/TestExceptions.java 241
de/fhdw/wtf/parser/test/TestExceptions.java 290
de/fhdw/wtf/parser/test/TestExceptions.java 340
de/fhdw/wtf/parser/test/TestExceptions.java 398
de/fhdw/wtf/parser/test/TestExceptions.java 453
de/fhdw/wtf/parser/test/TestExceptions.java 508
de/fhdw/wtf/parser/test/TestExceptions.java 558
de/fhdw/wtf/parser/test/TestExceptions.java 609
de/fhdw/wtf/parser/test/TestExceptions.java 666
de/fhdw/wtf/parser/test/TestExceptions.java 784
de/fhdw/wtf/parser/test/TestExceptions.java 839
de/fhdw/wtf/parser/test/TestExceptions.java 941
de/fhdw/wtf/parser/test/TestExceptions.java 981
de/fhdw/wtf/parser/test/TestExceptions.java 1065
de/fhdw/wtf/parser/test/TestExceptions.java 1237
de/fhdw/wtf/parser/test/TestOperations.java 203
de/fhdw/wtf/parser/test/TestOperations.java 278
de/fhdw/wtf/parser/test/TestOperations.java 362
de/fhdw/wtf/parser/test/TestOperations.java 581
de/fhdw/wtf/parser/test/TestOperations.java 670
de/fhdw/wtf/parser/test/TestOperations.java 801
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 229
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 276
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 323
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 433
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 480
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 805
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 197
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 242
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 401
		final Iterator<Attribute> attrIterator = clss.getAttributes().iterator();
		final Attribute attr1 = attrIterator.next();
		final Attribute attr2 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		assertEquals(1, supertypesAttr1.size());
		final Iterator<Type> superTypesAttr1Iterator = supertypesAttr1.iterator();
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr1Iterator.next()));
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 613
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 685
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 886
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 937
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 980
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 1079
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 1148
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 596
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 664
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 877
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 992
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 1062
						+ "Attribute3:{Integer,String};}; B:class=A+{}; C:class=A+{}; Class:class={};];");
		final Model model = this.getModel(input);
		
		assertEquals(0, model.getAnything().getSuperTypes().size());
		assertEquals(0, ((SumType) model.getAnything().getPrototype()).getSuperTypes().size());
		
		final Iterator<GroupElement> iterator = model.getGroups().iterator().next().getGroupElements().iterator();
		
		final ClassType clssA = (ClassType) iterator.next();
		final ClassType clssB = (ClassType) iterator.next();
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 281
de/fhdw/wtf/parser/test/TestAttributes.java 606
de/fhdw/wtf/parser/test/TestAttributes.java 673
de/fhdw/wtf/parser/test/TestAttributes.java 759
de/fhdw/wtf/parser/test/TestAttributes.java 848
de/fhdw/wtf/parser/test/TestAttributes.java 929
de/fhdw/wtf/parser/test/TestAttributes.java 1003
de/fhdw/wtf/parser/test/TestAttributes.java 1080
de/fhdw/wtf/parser/test/TestAttributes.java 1157
de/fhdw/wtf/parser/test/TestAttributes.java 1204
de/fhdw/wtf/parser/test/TestAttributes.java 1293
de/fhdw/wtf/parser/test/TestAttributes.java 1381
de/fhdw/wtf/parser/test/TestAttributes.java 1417
de/fhdw/wtf/parser/test/TestAttributes.java 1494
de/fhdw/wtf/parser/test/TestAttributes.java 1585
de/fhdw/wtf/parser/test/TestAttributes.java 1678
de/fhdw/wtf/parser/test/TestAttributes.java 1772
de/fhdw/wtf/parser/test/TestAttributes.java 2118
de/fhdw/wtf/parser/test/TestAttributes.java 2189
de/fhdw/wtf/parser/test/TestAttributes.java 2268
de/fhdw/wtf/parser/test/TestAttributes.java 2357
de/fhdw/wtf/parser/test/TestAttributes.java 2460
de/fhdw/wtf/parser/test/TestAttributes.java 2550
				IdentifierToken.create("Attribute3", Position.create("", 0 + 1, 0 + 1, 0));
		this.stream.add(groupIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(classIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(attributeIdentifier1);
File Line
de/fhdw/wtf/parser/test/TestClasses.java 149
de/fhdw/wtf/parser/test/TestClasses.java 278
de/fhdw/wtf/parser/test/TestClasses.java 329
de/fhdw/wtf/parser/test/TestClasses.java 380
de/fhdw/wtf/parser/test/TestClasses.java 431
de/fhdw/wtf/parser/test/TestClasses.java 549
de/fhdw/wtf/parser/test/TestClasses.java 606
						new Vector<ClassModifier>(),
						new Vector<Attribute>(),
						new Vector<Type>(),
						new Vector<Operation>(),
						new Vector<Constructor>(),
						this.classIdentifierToken,
						
						new Vector<ClassType>());
		groupVector.add(class1);
		final Model expected = Model.create(this.group1IdentifierToken);
		expected.addGroup(group);
		
		final Model actual = this.parser.parse();
		assertEquals(expected, actual);
		assertEquals(0, this.parser.getExceptions().size());
		
	}
	
	/**
	 * Group:group=[Class:class={}]; .
	 */
	@Test
	public void testSimpleClassWithoutSemicolon() {
File Line
de/fhdw/wtf/walker/tasks/test/TestBaseTypeInheritanceCheck.java 61
de/fhdw/wtf/walker/tasks/test/TestBaseTypeInheritanceCheck.java 119
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 53
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 97
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 142
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 186
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 232
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 277
		baseTypeInheritanceCheck.addDependency(referencer);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(1, okResult.size());
File Line
de/fhdw/wtf/walker/tasks/test/TestBaseTypeInheritanceCheck.java 177
de/fhdw/wtf/walker/tasks/test/TestBaseTypeInheritanceCheck.java 226
de/fhdw/wtf/walker/tasks/test/TestBaseTypeInheritanceCheck.java 276
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 320
		baseTypeInheritanceCheck.addDependency(referencer);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(2, okResult.size());
File Line
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 80
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 151
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 222
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 294
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 366
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 436
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 508
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 571
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 634
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 696
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 759
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 822
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 887
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 949
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 1010
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 1081
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 1143
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 1206
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 91
		overloadingCheck.addDependency(prototypesTask);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(7, okResult.size());
File Line
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 116
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 727
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 768
						+ "Attribute2:(name:String,count:Integer)*;};];");
		final Model model = this.getModel(input);
		
		assertTrue(model.getString().getPrototype() == model.getString());
		assertTrue(model.getInteger().getPrototype() == model.getInteger());
		
		final ClassType cls = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		
		assertTrue(cls.getPrototype() == cls);
		
		final Iterator<Attribute> iterator = cls.getAttributes().iterator();
		final Attribute attribute_1 = iterator.next();
File Line
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 233
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 268
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 301
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 333
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 365
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 394
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 424
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 460
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 497
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 533
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 696
						+ "Attribute2:(name:String, count:Integer); Attribute3:[Integer->String];};];");
		final Model model = this.getModel(input);
		
		assertTrue(model.getString().getPrototype() == model.getString());
		assertTrue(model.getInteger().getPrototype() == model.getInteger());
		
		final ClassType cls = (ClassType) model.getGroups().iterator().next().getGroupElements().iterator().next();
		
		assertTrue(cls.getPrototype() == cls);
		
		final Iterator<Attribute> attributes = cls.getAttributes().iterator();
		final Attribute attribute_1 = attributes.next();
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 186
de/fhdw/wtf/parser/test/TestExceptions.java 290
de/fhdw/wtf/parser/test/TestExceptions.java 340
de/fhdw/wtf/parser/test/TestExceptions.java 398
de/fhdw/wtf/parser/test/TestExceptions.java 453
de/fhdw/wtf/parser/test/TestExceptions.java 508
de/fhdw/wtf/parser/test/TestExceptions.java 558
de/fhdw/wtf/parser/test/TestExceptions.java 609
de/fhdw/wtf/parser/test/TestExceptions.java 666
de/fhdw/wtf/parser/test/TestExceptions.java 784
de/fhdw/wtf/parser/test/TestExceptions.java 1021
de/fhdw/wtf/parser/test/TestExceptions.java 1065
de/fhdw/wtf/parser/test/TestOperations.java 278
de/fhdw/wtf/parser/test/TestOperations.java 581
		final IdentifierToken string = IdentifierToken.create("String", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 241
de/fhdw/wtf/parser/test/TestExceptions.java 839
de/fhdw/wtf/parser/test/TestExceptions.java 889
de/fhdw/wtf/parser/test/TestExceptions.java 941
de/fhdw/wtf/parser/test/TestExceptions.java 981
de/fhdw/wtf/parser/test/TestExceptions.java 1237
de/fhdw/wtf/parser/test/TestOperations.java 203
de/fhdw/wtf/parser/test/TestOperations.java 362
de/fhdw/wtf/parser/test/TestOperations.java 670
de/fhdw/wtf/parser/test/TestOperations.java 801
		final IdentifierToken name = IdentifierToken.create("name", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 523
de/fhdw/wtf/parser/test/TestExceptions.java 1252
		this.stream.add(this.colonToken);
		this.stream.add(string);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
		
		try {
			this.parser.parse();
			fail();
		} catch (final NoValidTokenStreamException e) {
			assertEquals(1, this.parser.getExceptions().size());
			boolean noBracketClose = false;
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 937
de/fhdw/wtf/parser/test/TestExceptions.java 977
de/fhdw/wtf/parser/test/TestExceptions.java 1113
de/fhdw/wtf/parser/test/TestExceptions.java 1152
de/fhdw/wtf/parser/test/TestExceptions.java 1191
	public void testNoCurlyBracketOpenException2() {
		this.stream = SimpleTokenStream.create();
		this.parser = Parser.create(this.stream);
		final IdentifierToken myGroup = IdentifierToken.create("MyGroup", Position.create("", 1, 1, 0));
		final IdentifierToken myClass = IdentifierToken.create("MyClass", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
File Line
de/fhdw/wtf/parser/testWithScanner/TestParserScanner.java 351
de/fhdw/wtf/parser/testWithScanner/TestParserScanner.java 441
		final Operation operation2 = Operation.create("op2", operationModifiers, product, clazz, testTypeProxy, op2);
		operations.add(operation1);
		operations.add(operation2);
		
		modifiers.add(ClassModifierService.create(ServiceToken.create(Position.create("", 1, 1, 0))));
		modifiers.add(ClassModifierTransient.create(TransientToken.create(Position.create("", 1, 1, 0))));
		groupVector.add(clazz);
		final Model expected = Model.create(groupIdentifier);
		expected.addGroup(group);
		assertEquals(expected, model);
	}
	
	/**
	 * group1 : group = [ class1 : class = {op1 : [(param1:Integer, param2:{})->test] abstract; op2 : [(param1:Integer,
	 * param2:{Integer,String})->test] abstract;} service transient;]; .
	 * 
	 * @throws Exception
	 */
	@Test
	public void testSimpleClassOperation5Empty() throws Exception {
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 805
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 288
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 446
		final Iterator<Attribute> attrIterator = clssA.getAttributes().iterator();
		
		final Attribute attr1 = attrIterator.next();
		final Attribute attr2 = attrIterator.next();
		
		assertEquals(0, ((SumType) attr1.getAttrType()).getSuperTypes().size());
		final Type attr1Type = ((SumType) attr1.getAttrType()).getPrototype();
		final Collection<Type> supertypesAttr1 = ((SumType) attr1Type).getSuperTypes();
		assertEquals(1, supertypesAttr1.size());
		final Iterator<Type> superTypesAttr1Iterator = supertypesAttr1.iterator();
File Line
de/fhdw/wtf/walker/tasks/test/TestTypeReferencer.java 863
de/fhdw/wtf/walker/tasks/test/TestTypeReferencer.java 888
de/fhdw/wtf/walker/tasks/test/TestTypeReferencer.java 985
				new SimpleScannerInput("group1:group=[class1:class={" + "attr1:Class2 prior;};];");
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		final TypeReferencerTestReturnValue v = new TypeReferencerTestReturnValue(model);
		
		assertEquals(1, v.getFailResult().size());
		assertEquals(0, v.getOkResult().size());
		assertEquals(1, v.getTypeReferencer().getExceptions().size());
	}
	
	/**
	 * Test the referencing of: group1:group=[class1:class={attr1:group2>Class2 prior;};class2:class={};];
	 * group2:group=[class3:class={};];.
	 * 
	 * @throws Exception
	 *             {@link de.fhdw.wtf.common.exception.parser.NoValidTokenStreamException}, {@link InterruptedException}
	 *             , {@link ExecutionException}.
	 */
	@Test
	public void testNoClassException2() throws Exception {
File Line
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1320
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1362
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1404
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1447
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1491
de/fhdw/wtf/common/ast/type/test/StandardizeSumsTest.java 1861
		actualSum.add(TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(b))));
		
		final ThrownType thrownType = ThrownType.create(DummyToken.getInstance(), actualSum, DummyToken.getInstance());
		
		final Type standardizedType = thrownType.standardize();
		
		// Prepare Expected
		final SumType expectedSum = SumType.create(dummyToken);
		expectedSum.add(ThrownType.create(
				dummyToken,
				TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(a)))));
		expectedSum.add(ThrownType.create(
				dummyToken,
				TypeProxy.create(dummyToken, ByNameState.create(UnqualifiedName.create(b)))));
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 685
de/fhdw/wtf/parser/test/TestAttributes.java 1785
		this.stream.add(this.colonToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(nameIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.stringIdentifier);
		this.stream.add(this.commaToken);
		this.stream.add(countIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.integerIdentifier);
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.asteriskToken);
		this.stream.add(this.semicolonToken);
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 1354
de/fhdw/wtf/parser/test/TestAttributes.java 1466
		product.addElement(countElement);
		
		final MapType map = MapType.create(this.bracketOpenToken, product, integerType);
		
		final Attribute attribute =
				Attribute.create("Attribute", map, new Vector<AttributeModifier>(), attributeIdentifier);
		attributes.add(attribute);
		groupVector.add(classModel);
		final Model expected = Model.create(groupIdentifier);
		expected.addGroup(group);
		
		final Model actual = this.parser.parse();
		assertEquals(expected, actual);
		assertEquals(0, this.parser.getExceptions().size());
	}
	
	/**
	 * Group:group=[Class:class={Attribute:(name:.
	 * 
	 * @throws Exception
	 *             : {@link NoValidTokenStreamException}
	 */
	@Test
	public void testAttributeWithMapOnBeginningOfProduct() throws Exception {
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 1691
de/fhdw/wtf/parser/test/TestAttributes.java 1784
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(this.bracketOpenToken);
		this.stream.add(nameIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.stringIdentifier);
		this.stream.add(this.commaToken);
		this.stream.add(countIdentifier);
		this.stream.add(this.colonToken);
		this.stream.add(this.integerIdentifier);
		this.stream.add(this.bracketCloseToken);
		this.stream.add(this.arrowToken);
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 168
de/fhdw/wtf/parser/test/TestOperations.java 186
		this.abstractToken = AbstractToken.create(Position.create("", 1, 1, 0));
		this.commaToken = CommaToken.create(Position.create("", 1, 1, 0));
		this.doubleSquareBracketCloseToken = DoubleSquareBracketCloseToken.create(Position.create("", 1, 1, 0));
		this.doubleSquareBracketOpenToken = DoubleSquareBracketOpenToken.create(Position.create("", 1, 1, 0));
		this.arrowToken = ArrowToken.create(Position.create("", 1, 1, 0));
	}
	
	/**
	 * MyGroup:group=[MyClass:class={MyOperation:[[(MyParameter:String)-{}]];};];.
	 */
	@Test
	public void testNoArrowException() {
File Line
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 97
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 136
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 223
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 488
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 528
de/fhdw/wtf/walker/tasks/test/TestCyclicInheritanceCheck.java 615
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 459
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 504
		cyclicInheritance.addDependency(referencer);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<OKTaskResult>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<ExceptionalTaskResult>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(2, okResult.size());
File Line
de/fhdw/wtf/walker/tasks/test/TestTypeReferencer.java 1065
de/fhdw/wtf/walker/tasks/test/TestTypeReferencer.java 1134
de/fhdw/wtf/walker/tasks/test/TestTypeReferencer.java 1216
		final SimpleScannerInput input = new SimpleScannerInput("group1:group=[class1:class={attribute:Anything;};];");
		
		final TokenStream output = FilteredTokenStream.create();
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		final Model model = parser.parse();
		final TypeReferencerTestReturnValue v = new TypeReferencerTestReturnValue(model);
		assertEquals(1, v.getOkResult().size());
		assertEquals(0, v.getFailResult().size());
		this.assertOperations.assertAllReferencesByType(model);
		
		final Vector<Attribute> attributes = new Vector<>();
		
		final QualifiedName name =
File Line
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 154
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 228
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 292
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 397
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 497
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 597
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 712
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 808
				Attribute.create("attribute", product, new Vector<AttributeModifier>(), attributeIdentifier);
		attributes.add(attribute);
		
		modifiers.add(ClassModifierService.create(VisitableToken.create(Position.create("", 1, 1, 0))));
		modifiers.add(ClassModifierTransient.create(AbstractToken.create(Position.create("", 1, 1, 0))));
		groupVector.add(clazz);
		final Model expected = Model.create(groupIdentifier);
		expected.addGroup(group);
		assertEquals(expected, model);
	}
	
	/**
	 * group1 : group = [ class1 : class = {attribute : (int1:Integer, str:String) ;} service transient;]; .
	 * 
	 * @throws Exception
	 */
	@Test
	public void testProductSum2() throws Exception {
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 653
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 701
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr2Iterator.next()));
		
		assertEquals(0, ((SumType) attr3.getAttrType()).getSuperTypes().size());
		final Collection<Type> supertypesAttr3 =
				((SumType) ((SumType) attr3.getAttrType()).getPrototype()).getSuperTypes();
		assertEquals(1, supertypesAttr3.size());
		final Iterator<Type> superTypesAttr3Iterator = supertypesAttr3.iterator();
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr3Iterator.next()));
		
		assertEquals(1, model.getInteger().getPrototype().getSuperTypes().size());
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 821
de/fhdw/wtf/parser/test/TestAttributes.java 904
		final ListType list = ListType.create(this.bracketOpenToken, product);
		final ListType list2 = ListType.create(this.bracketOpenToken, list);
		
		final Attribute attribute =
				Attribute.create("Attribute", list2, new Vector<AttributeModifier>(), attributeIdentifier);
		attributes.add(attribute);
		groupVector.add(classModel);
		final Model expected = Model.create(groupIdentifier);
		expected.addGroup(group);
		
		final Model actual = this.parser.parse();
		assertEquals(expected, actual);
		assertEquals(0, this.parser.getExceptions().size());
	}
	
	/**
	 * Group:group=[Class:class={Attribute:{True, False}**;};];.
	 * 
	 * @throws Exception
	 *             : {@link NoValidTokenStreamException}
	 */
	@Test
	public void testAttributeWithMoreListsOnSum() throws Exception {
File Line
de/fhdw/wtf/parser/test/TestAttributes.java 1131
de/fhdw/wtf/parser/test/TestAttributes.java 1558
		final MapType map = MapType.create(this.integerIdentifier, integerType, stringType);
		
		final ListType list = ListType.create(this.bracketOpenToken, map);
		
		final Attribute attribute =
				Attribute.create("Attribute", list, new Vector<AttributeModifier>(), attributeIdentifier);
		attributes.add(attribute);
		groupVector.add(classModel);
		final Model expected = Model.create(groupIdentifier);
		expected.addGroup(group);
		
		final Model actual = this.parser.parse();
		assertEquals(expected, actual);
		assertEquals(0, this.parser.getExceptions().size());
	}
	
	/**
	 * Group:group=[Class:class={Attribute:[Integer->String]*;;];.
	 * 
	 * @throws Exception
	 *             : {@link NoValidTokenStreamException}
	 */
	@Test
	public void testAttributeWithListOfMapButMissingBracketClose() throws Exception {
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 241
de/fhdw/wtf/parser/test/TestExceptions.java 290
de/fhdw/wtf/parser/test/TestExceptions.java 508
de/fhdw/wtf/parser/test/TestExceptions.java 558
de/fhdw/wtf/parser/test/TestExceptions.java 609
de/fhdw/wtf/parser/test/TestExceptions.java 839
de/fhdw/wtf/parser/test/TestExceptions.java 1237
de/fhdw/wtf/parser/test/TestOperations.java 471
		final IdentifierToken name = IdentifierToken.create("name", Position.create("", 1, 1, 0));
		this.stream.add(myGroup);
		this.stream.add(this.colonToken);
		this.stream.add(this.groupToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.squareBracketOpenToken);
		this.stream.add(myClass);
		this.stream.add(this.colonToken);
		this.stream.add(this.classToken);
		this.stream.add(this.equalToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(myAttribute);
File Line
de/fhdw/wtf/parser/test/TestOperations.java 231
de/fhdw/wtf/parser/test/TestOperations.java 309
de/fhdw/wtf/parser/test/TestOperations.java 397
de/fhdw/wtf/parser/test/TestOperations.java 523
de/fhdw/wtf/parser/test/TestOperations.java 611
de/fhdw/wtf/parser/test/TestOperations.java 705
		final Vector<Operation> operations = new Vector<>();
		
		final Name groupName = UnqualifiedName.create(myGroup);
		final Group group = Group.create(groupName, groupVector, myGroup);
		
		final Name className = groupName.addName(myClass);
		
		final ClassType class1 =
				RegularClassType.create(
						className,
						new Vector<ClassModifier>(),
						new Vector<Attribute>(),
						new Vector<Type>(),
						operations,
						new Vector<Constructor>(),
						myClass,
						
						new Vector<ClassType>());
		groupVector.add(class1);
		
		final ProductType product = ProductType.create(this.bracketOpenToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 55
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 111
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 167
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 223
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 279
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 335
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 391
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 445
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 492
de/fhdw/wtf/walker/tasks/test/TestAbstractOperationsCheck.java 542
de/fhdw/wtf/walker/tasks/test/TestBaseTypeInheritanceCheck.java 61
de/fhdw/wtf/walker/tasks/test/TestBaseTypeInheritanceCheck.java 119
de/fhdw/wtf/walker/tasks/test/TestBaseTypeInheritanceCheck.java 177
de/fhdw/wtf/walker/tasks/test/TestBaseTypeInheritanceCheck.java 226
de/fhdw/wtf/walker/tasks/test/TestBaseTypeInheritanceCheck.java 276
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 79
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 143
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 207
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 276
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 340
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 406
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 472
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 537
de/fhdw/wtf/walker/tasks/test/TestDoubleAttributenameCheck.java 603
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 53
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 97
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 142
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 186
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 232
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 277
de/fhdw/wtf/walker/tasks/test/TestInvalidAttributeModifierCheck.java 320
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 80
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 151
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 222
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 294
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 366
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 436
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 508
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 571
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 634
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 696
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 759
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 822
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 887
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 949
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 1010
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 1081
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 1143
de/fhdw/wtf/walker/tasks/test/TestOverloadingCheck.java 1206
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 55
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 109
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 166
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 221
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 276
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 322
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 368
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 414
de/fhdw/wtf/walker/tasks/test/TestProductCheck.java 552
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 80
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 90
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 91
		AbstractOperationsCheck.create(model, taskmanager);
		taskmanager.startAllKnownTasks();
		
		final Collection<OKTaskResult> okResult = new ArrayList<>();
		final Collection<ExceptionalTaskResult> failResult = new ArrayList<>();
		final Collection<TaskResult> results = taskmanager.getResultsAndShutdown();
		for (final TaskResult current : results) {
			current.accept(new TaskResultVisitor() {
				
				@Override
				public void handleOkTaskResult(final OKTaskResult result) {
					okResult.add(result);
				}
				
				@Override
				public void handleExceptionalTaskResult(final ExceptionalTaskResult result) {
					failResult.add(result);
				}
			});
		}
		
		assertEquals(0, okResult.size());
File Line
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 273
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 472
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 542
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 621
				assertEquals(0, model.getConstructorCallDependencies().get(current).size());
				break;
			case "group1>D":
				final Iterator<Type> dIterator = model.getConstructorCallDependencies().get(current).iterator();
				assertEquals("group1>A", dIterator.next().toString());
				assertEquals("group1>B", dIterator.next().toString());
				assertEquals("group1>C", dIterator.next().toString());
				assertEquals(3, model.getConstructorCallDependencies().get(current).size());
				break;
File Line
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 489
de/fhdw/wtf/walker/tasks/test/TestAnalyzeInheritanceTreesTask.java 561
				assertEquals(1, model.getConstructorCallDependencies().get(current).size());
				break;
			case "group1>G":
				final Iterator<Type> gIterator = model.getConstructorCallDependencies().get(current).iterator();
				assertEquals("group1>D", gIterator.next().toString());
				assertEquals("group1>E", gIterator.next().toString());
				assertEquals("group1>F", gIterator.next().toString());
				assertEquals(3, model.getConstructorCallDependencies().get(current).size());
				break;
File Line
de/fhdw/wtf/walker/tasks/test/TestTypeReferencer.java 384
de/fhdw/wtf/walker/tasks/test/TestTypeReferencer.java 560
de/fhdw/wtf/walker/tasks/test/TestTypeReferencer.java 736
						null);
		class2111Attributes.add(class2111Attribute);
		
		final TokenStream output = FilteredTokenStream.create();
		scanner.scan(input, output);
		final Parser parser = Parser.create(output);
		
		final Model result = parser.parse();
		final TypeReferencerTestReturnValue v = new TypeReferencerTestReturnValue(result);
		
		assertEquals(1, v.getFailResult().size());
		assertEquals(1, v.getTypeReferencer().getExceptions().size());
		assertEquals(0, v.getOkResult().size());
	}
	
	/**
	 * Test the referencing of:Group1:group = [Group2:group = [Class1:class={};];]; Group2:group= [Class1:class=
	 * Group1>Class1 + {};Group1:group=[Class1:class= {classa:Group1>Group2>Class1;};Group1:group=[Class1:class =
	 * Group2>Group1>Class1 + {class21:Group2>Group1>Class1;};];];];.
	 * 
	 * @throws Exception
	 *             {@link de.fhdw.wtf.common.exception.parser.NoValidTokenStreamException}, {@link InterruptedException}
	 *             , {@link ExecutionException}.
	 */
	@Test
	public void test2GroupsWithClassesRelativePath() throws Exception {
File Line
de/fhdw/wtf/parser/test/TestConstructors.java 539
de/fhdw/wtf/parser/test/TestConstructors.java 610
de/fhdw/wtf/parser/test/TestConstructors.java 680
de/fhdw/wtf/parser/test/TestConstructors.java 755
		final SimpleScannerInput input = new SimpleScannerInput("Group1:group=[A:class={();op:[[(s:String)->{}]];};];");
		final VerboseTokenStream output = new VerboseTokenStream(SimpleTokenStream.create());
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		
		final IdentifierToken group1IdentifierToken = IdentifierToken.create("Group1", Position.create("", 1, 1, 0));
		final IdentifierToken aIdentifierToken = IdentifierToken.create("A", Position.create("", 1, 1, 0));
		final IdentifierToken sParameterIdentifierToken = IdentifierToken.create("s", Position.create("", 1, 1, 1));
		final IdentifierToken op = IdentifierToken.create("op", Position.create("", 1, 1, 0));
File Line
de/fhdw/wtf/parser/test/TestConstructors.java 971
de/fhdw/wtf/parser/test/TestConstructors.java 1037
		final SimpleScannerInput input = new SimpleScannerInput("Group1:group=[A:class={s:String;();i:Integer;};];");
		final VerboseTokenStream output = new VerboseTokenStream(SimpleTokenStream.create());
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		
		final IdentifierToken group1IdentifierToken = IdentifierToken.create("Group1", Position.create("", 1, 1, 0));
		final IdentifierToken aIdentifierToken = IdentifierToken.create("A", Position.create("", 1, 1, 0));
		final IdentifierToken iParameterIdentifierToken = IdentifierToken.create("i", Position.create("", 1, 1, 1));
		final IdentifierToken nameIdentifierToken = IdentifierToken.create("s", Position.create("", 1, 1, 0));
File Line
de/fhdw/wtf/parser/test/TestConstructors.java 1325
de/fhdw/wtf/parser/test/TestConstructors.java 1419
de/fhdw/wtf/parser/test/TestConstructors.java 1672
				new SimpleScannerInput("Group1:group=[SA:class={};A:class=SA+{();op:[[(s:String)->{}]];s:String;};];");
		final VerboseTokenStream output = new VerboseTokenStream(SimpleTokenStream.create());
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		
		final IdentifierToken group1IdentifierToken = IdentifierToken.create("Group1", Position.create("", 1, 1, 0));
		final IdentifierToken aIdentifierToken = IdentifierToken.create("A", Position.create("", 1, 1, 0));
		final IdentifierToken saIdentifierToken = IdentifierToken.create("SA", Position.create("", 1, 1, 0));
		final IdentifierToken sIdentifierToken = IdentifierToken.create("s", Position.create("", 1, 1, 1));
File Line
de/fhdw/wtf/parser/test/TestConstructors.java 1752
de/fhdw/wtf/parser/test/TestConstructors.java 1866
de/fhdw/wtf/parser/test/TestConstructors.java 1956
						+ "A:class=SA1+SA2+{(i:Integer)=SA1(Integer)+SA2(Integer);};];");
		final VerboseTokenStream output = new VerboseTokenStream(SimpleTokenStream.create());
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final IdentifierToken group1IdentifierToken = IdentifierToken.create("Group1", Position.create("", 1, 1, 0));
		final IdentifierToken aIdentifierToken = IdentifierToken.create("A", Position.create("", 1, 1, 0));
		final IdentifierToken iIdentifierToken = IdentifierToken.create("i", Position.create("", 1, 1, 0));
		final IdentifierToken sa1IdentifierToken = IdentifierToken.create("SA1", Position.create("", 1, 1, 0));
File Line
de/fhdw/wtf/parser/test/TestGetFirstAndLastToken.java 422
de/fhdw/wtf/parser/test/TestGetFirstAndLastToken.java 511
de/fhdw/wtf/parser/test/TestGetFirstAndLastToken.java 723
de/fhdw/wtf/parser/test/TestGetFirstAndLastToken.java 832
		expectedLastToken = ColonToken.create(Position.create("", 0 + 1, 5 + 1, 5));
		assertEquals(expectedLastToken, name.getLastToken());
		
		// Klasse Class
		final Iterator<GroupElement> iterator2 = group.getGroupElements().iterator();
		final GroupElement groupElement = iterator2.next();
		final ClassType class1 = groupElement.accept(new GroupElementReturnVisitor<ClassType>() {
			
			@Override
			public ClassType handle(final Group group) {
				fail();
				return null;
			}
			
			@Override
			public ClassType handle(final ClassType clss) {
				return clss;
			}
		});
		
		expectedFirstToken = IdentifierToken.create("Class", Position.create("", 0 + 1, 13 + 1, 13));
File Line
de/fhdw/wtf/parser/testWithScanner/TestParserScanner.java 123
de/fhdw/wtf/parser/testWithScanner/TestParserScanner.java 187
de/fhdw/wtf/parser/testWithScanner/TestParserScanner.java 268
				Operation.create("op", new Vector<OperationModifier>(), product, clazz, testTypeProxy, op);
		operations.add(operation);
		
		modifiers.add(ClassModifierService.create(ServiceToken.create(Position.create("", 1, 1, 0))));
		modifiers.add(ClassModifierTransient.create(TransientToken.create(Position.create("", 1, 1, 0))));
		groupVector.add(clazz);
		final Model expected = Model.create(groupIdentifier);
		expected.addGroup(group);
		assertEquals(expected, model);
	}
	
	/**
	 * group1 : group = [ class1 : class = {op : [(param:Integer)->test];} service transient;]; .
	 * 
	 * @throws Exception
	 */
	@Test
	public void testSimpleClassOperation2() throws Exception {
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 723
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 637
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 701
		assertEquals(0, supertypesAttr2.size());
		
		assertEquals(0, ((SumType) attr3.getAttrType()).getSuperTypes().size());
		final Collection<Type> supertypesAttr3 =
				((SumType) ((SumType) attr3.getAttrType()).getPrototype()).getSuperTypes();
		assertEquals(1, supertypesAttr3.size());
		final Iterator<Type> superTypesAttr3Iterator = supertypesAttr3.iterator();
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr3Iterator.next()));
		
		assertEquals(1, model.getInteger().getPrototype().getSuperTypes().size());
File Line
de/fhdw/wtf/parser/test/TestConstructors.java 464
de/fhdw/wtf/parser/test/TestConstructors.java 971
de/fhdw/wtf/parser/test/TestConstructors.java 1037
				new SimpleScannerInput("Group1:group=[A:class={()=A(Integer);(i:Integer);};];");
		final VerboseTokenStream output = new VerboseTokenStream(SimpleTokenStream.create());
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		
		final IdentifierToken group1IdentifierToken = IdentifierToken.create("Group1", Position.create("", 1, 1, 0));
		final IdentifierToken aIdentifierToken = IdentifierToken.create("A", Position.create("", 1, 1, 0));
		final IdentifierToken iParameterIdentifierToken = IdentifierToken.create("i", Position.create("", 1, 1, 1));
		
		final Vector<GroupElement> group1Vector = new Vector<>();
File Line
de/fhdw/wtf/parser/test/TestConstructors.java 1752
de/fhdw/wtf/parser/test/TestConstructors.java 1866
de/fhdw/wtf/parser/test/TestConstructors.java 1956
de/fhdw/wtf/parser/test/TestConstructors.java 2021
						+ "A:class=SA1+SA2+{(i:Integer)=SA1(Integer)+SA2(Integer);};];");
		final VerboseTokenStream output = new VerboseTokenStream(SimpleTokenStream.create());
		final Scanner scanner = ModelDslScanner.create();
		scanner.scan(input, output);
		final IdentifierToken group1IdentifierToken = IdentifierToken.create("Group1", Position.create("", 1, 1, 0));
		final IdentifierToken aIdentifierToken = IdentifierToken.create("A", Position.create("", 1, 1, 0));
		final IdentifierToken iIdentifierToken = IdentifierToken.create("i", Position.create("", 1, 1, 0));
		final IdentifierToken sa1IdentifierToken = IdentifierToken.create("SA1", Position.create("", 1, 1, 0));
File Line
de/fhdw/wtf/parser/test/TestExceptions.java 415
de/fhdw/wtf/parser/test/TestOperations.java 218
de/fhdw/wtf/parser/test/TestOperations.java 296
de/fhdw/wtf/parser/test/TestOperations.java 384
		this.stream.add(string);
		this.stream.add(this.arrowToken);
		this.stream.add(this.curlyBracketOpenToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.doubleSquareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.curlyBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.squareBracketCloseToken);
		this.stream.add(this.semicolonToken);
		this.stream.add(this.endToken);
File Line
de/fhdw/wtf/walker/tasks/test/TestSupertypesCleanInheritanceTask.java 192
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 164
de/fhdw/wtf/walker/tasks/test/TestSupertypesFillTask.java 630
		assertEquals(0, supertypesAttr1.size());
		
		assertEquals(0, ((SumType) attr2.getAttrType()).getSuperTypes().size());
		final Collection<Type> supertypesAttr2 =
				((SumType) ((SumType) attr2.getAttrType()).getPrototype()).getSuperTypes();
		assertEquals(1, supertypesAttr2.size());
		final Iterator<Type> superTypesAttr2Iterator = supertypesAttr2.iterator();
		assertEquals(model.getAnything().getPrototype(), HelperUtils.getReferencedType(superTypesAttr2Iterator.next()));
		
		assertEquals(1, model.getInteger().getPrototype().getSuperTypes().size());
File Line
de/fhdw/wtf/parser/test/TestConstructors.java 888
de/fhdw/wtf/parser/test/TestConstructors.java 947
de/fhdw/wtf/parser/test/TestConstructors.java 1556
		attributes.add(Attribute.create("s", stringType, new Vector<AttributeModifier>(), sIdentifierToken));
		
		final ProductType aProduct = ProductType.create(this.bracketOpenToken);
		
		constructors.add(Constructor.create(aProduct, aClass, new Vector<ConstructorReference>(), aIdentifierToken));
		
		final Model expected = Model.create(group1IdentifierToken);
		expected.addGroup(group1);
		
		this.parser = Parser.create(output);
		final Model actual = this.parser.parse();
		
		assertEquals(0, this.parser.getExceptions().size());
		assertEquals(expected, actual);
	}
	
	/**
	 * Group1:group=[A:class={();s:String;};];.
	 * 
	 * @throws Exception
	 *             {@link de.fhdw.wtf.common.exception.parser.NoValidTokenStreamException}
	 */
	@Test
	public void testFirstConstructorThanVariable() throws Exception {
File Line
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 154
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 228
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 292
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 397
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 497
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 597
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 712
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 808
de/fhdw/wtf/parser/testWithScanner/TestTypes.java 900
				Attribute.create("attribute", product, new Vector<AttributeModifier>(), attributeIdentifier);
		attributes.add(attribute);
		
		modifiers.add(ClassModifierService.create(VisitableToken.create(Position.create("", 1, 1, 0))));
		modifiers.add(ClassModifierTransient.create(AbstractToken.create(Position.create("", 1, 1, 0))));
		groupVector.add(clazz);
		final Model expected = Model.create(groupIdentifier);
		expected.addGroup(group);
		assertEquals(expected, model);
	}
File Line
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 614
de/fhdw/wtf/walker/tasks/test/TestPrototypesTask.java 647
						" Group:group=[Class:class={operation1:[[(test1:String, test2:String)->Integer*]]; operation2:[[(test1:String, test2:String)->Integer*]];};];");
		final Model model = this.getModel(input);
		
		assertTrue(model.getString().getPrototype() == model.getString());
		assertTrue(model.getInteger().getPrototype() == model.getInteger());
		
		final Iterator<GroupElement> groupElementIterator =
				model.getGroups().iterator().next().getGroupElements().iterator();
		final ClassType cls = (ClassType) groupElementIterator.next();
		
		assertTrue(cls.getPrototype() == cls);
		
		final Iterator<Operation> operations = cls.getOperations().iterator();