All Downloads are FREE. Search and download functionalities are using the official Maven repository.

spoon.template.ExtensionTemplate Maven / Gradle / Ivy

Go to download

Spoon is a tool for meta-programming, analysis and transformation of Java programs.

There is a newer version: 11.1.1-beta-14
Show newest version
/*
 * SPDX-License-Identifier: (MIT OR CECILL-C)
 *
 * Copyright (C) 2006-2023 INRIA and contributors
 *
 * Spoon is available either under the terms of the MIT License (see LICENSE-MIT.txt) or the Cecill-C License (see LICENSE-CECILL-C.txt). You as the user are entitled to choose the terms under which to adopt Spoon.
 */
package spoon.template;

import java.util.ArrayList;

import spoon.reflect.declaration.CtClass;
import spoon.reflect.declaration.CtType;
import spoon.reflect.declaration.CtTypeMember;
import spoon.reflect.reference.CtTypeReference;

/**
 * Inserts all the methods, fields, constructors, initialization blocks (if
 * target is a class), inner types, and super interfaces (except
 * {@link Template}) from a given template by substituting all the template
 * parameters by their values. Members annotated with
 * {@link spoon.template.Local} or {@link Parameter} are not inserted.
 */
public class ExtensionTemplate extends AbstractTemplate> {
	@Override
	public CtType apply(CtType target) {
		CtClass> templateType = Substitution.getTemplateCtClass(target.getFactory(), this);
		CtType generated = TemplateBuilder.createTemplateBuilder(templateType, templateType, this)
		.setAddGeneratedBy(isAddGeneratedBy())
		.substituteSingle(target, CtType.class);
		for (CtTypeReference iface : new ArrayList<>(generated.getSuperInterfaces())) {
			iface.delete();
			target.addSuperInterface(iface);
		}
		for (CtTypeMember tm : new ArrayList<>(generated.getTypeMembers())) {
			tm.delete();
			target.addTypeMember(tm);
		}
		return target;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy