InterfaceGenerator { @SuppressWarnings("unchecked") public void generateMethodTemplateParams(AST ast, Operation operation, MethodDeclaration md) { TemplateSignature templateSignature = operation .getOwnedTemplateSignature(); if (templateSignature != null) { EList<TemplateParameter> templateParameters = templateSignature .getParameters(); for (TemplateParameter templateParameter : templateParameters) { Classifier classifier = (Classifier) templateParameter .getOwnedParameteredElement(); String typeName = classifier.getLabel(); TypeParameter typeParameter = ast.newTypeParameter(); typeParameter.setName(ast.newSimpleName(typeName)); md.typeParameters().add(typeParameter); } } }  CompilationUnit generateInterface(Classifier clazz,
			String sourceDirectoryPackageName); @SuppressWarnings("unchecked") void generatePackageJavadoc(AST ast,
			PackageDeclaration packageDeclaration, String... comment); void generateGettersSetters(Classifier clazz, AST ast,
			TypeDeclaration td); MethodDeclaration generateGetterMethod(AST ast,
			AbstractTypeDeclaration td, Property property, String umlTypeName,
			String umlQualifiedTypeName); MethodDeclaration generateGetterMethod(AST ast,
			AbstractTypeDeclaration td, Property property, String umlTypeName,
			String umlQualifiedTypeName, String sourceDirectoryPackageName); @SuppressWarnings("unchecked") void generateSetterMethod(AST ast, AbstractTypeDeclaration td,
			Property property, String umlTypeName, String umlQualifiedTypeName); void generateAssociationEndUpperCardinalityMultiples(AST ast,
			AbstractTypeDeclaration td, Property property,
			MethodDeclaration mdGetter, String umlTypeName,
			String umlQualifiedTypeName); void generateAssociationEndUpperCardinalityMultiples(AST ast,
			AbstractTypeDeclaration td, Operation operation,
			MethodDeclaration mdGetter, String umlTypeName,
			String umlQualifiedTypeName); void generateAssociationEndUpperCardinalityMultiples(AST ast,
			AbstractTypeDeclaration td, Parameter parameter,
			MethodDeclaration md, String umlTypeName,
			String umlQualifiedTypeName, String umlPropertyName); void generateGetterSetterJavadoc(AST ast, Property property,
			MethodDeclaration methodDeclaration); @SuppressWarnings("unchecked") TypeDeclaration generateClass(Classifier clazz, AST ast,
			CompilationUnit cu); void generateClassJavadoc(Classifier clazz, AST ast,
			AbstractTypeDeclaration td); @SuppressWarnings("unchecked") void generateClassTemplateParams(Classifier clazz, AST ast,
			TypeDeclaration td); void generatePackage(Classifier clazz, AST ast, CompilationUnit cu); void generateMethods(Classifier clazz, AST ast, TypeDeclaration td); @SuppressWarnings("unchecked") void generateMethodTemplateParams(AST ast, Operation operation,
			MethodDeclaration md); void generateMethodJavadoc(AST ast, Operation operation,
			MethodDeclaration md); void generateMethodParams(AST ast, TypeDeclaration td,
			Operation operation, MethodDeclaration md);  }
@SuppressWarnings("unchecked") @Test public void testGenerateMethodTemplateParams() { AST ast = AST.newAST(AST.JLS3); ast.newCompilationUnit(); TypeDeclaration td = ast.newTypeDeclaration(); td.setInterface(true); Modifier modifier = ast .newModifier(Modifier.ModifierKeyword.PUBLIC_KEYWORD); td.modifiers().add(modifier); td.setName(ast.newSimpleName("Company")); MethodDeclaration md = ast.newMethodDeclaration(); md.setName(ast.newSimpleName("calculateAge")); Operation operation = mock(Operation.class, Answers.RETURNS_DEEP_STUBS.get()); EList<TemplateParameter> templateParams = mock(EList.class, Answers.RETURNS_DEEP_STUBS.get()); Iterator<TemplateParameter> templateParamIterator = mock(Iterator.class); TemplateSignature templateSignature = mock(TemplateSignature.class, Answers.RETURNS_DEEP_STUBS.get()); TemplateParameter templateParameter = mock(TemplateParameter.class, Answers.RETURNS_DEEP_STUBS.get()); Classifier classifier = mock(Classifier.class); when(operation.getOwnedTemplateSignature()).thenReturn( templateSignature); when(templateSignature.getParameters()).thenReturn(templateParams); when(templateParams.iterator()).thenReturn(templateParamIterator); when(templateParamIterator.hasNext()).thenReturn(true, false); when(templateParamIterator.next()).thenReturn(templateParameter); when(templateParameter.getOwnedParameteredElement()).thenReturn( classifier); when(classifier.getLabel()).thenReturn("T"); interfaceGenerator.generateMethodTemplateParams(ast, operation, md); assertEquals("<T>void calculateAge();\n", md.toString()); }