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

edelta.refactorings.lib.EdeltaBadSmellsResolver.edelta Maven / Gradle / Ivy

import java.util.function.Predicate
import org.eclipse.emf.ecore.EClassifier
import org.eclipse.emf.ecore.EPackage
import org.eclipse.emf.ecore.util.EcoreUtil

package edelta.refactorings.lib

use EdeltaRefactorings as refactorings
use EdeltaBadSmellsFinder as finder

/**
 * Extracts superclasses in the presence of duplicate features
 * considering all the classes of the given package.
 * 
 * @param ePackage
 */
def resolveDuplicatedFeatures(EPackage ePackage) {
	finder.findDuplicatedFeatures(ePackage)
		.values
		.forEach[refactorings.extractSuperclass(it)]
}

/**
 * Removes the dead classifiers.
 */
def resolveDeadClassifiers(EPackage ePackage) {
	resolveDeadClassifiers(ePackage, [true])
}

/**
 * Removes the dead classifiers by first checking the passed
 * predicate.
 */
def resolveDeadClassifiers(EPackage ePackage, Predicate shouldRemove) {
	val deadClassifiers = finder.findDeadClassifiers(ePackage)
	deadClassifiers.forEach[
		cl |
		if (shouldRemove.test(cl))
			EcoreUtil.remove(cl)
	]
}

/**
 * Applies redundantContainerToEOpposite to redundant containers
 */
def resolveRedundantContainers(EPackage ePackage) {
	val findRedundantContainers = finder.findRedundantContainers(ePackage)
	findRedundantContainers.forEach[
		makeBidirectional(key, value)
	]
}

/**
 * Applies subclassesToEnum to findClassificationByHierarchy
 */
def resolveClassificationByHierarchy(EPackage ePackage) {
	val findClassificationByHierarchy = finder.findClassificationByHierarchy(ePackage)
	findClassificationByHierarchy.entrySet.forEach[
		refactorings.subclassesToEnum(key.name + "Type", value)
	]
}

def resolveConcreteAbstractMetaclass(EPackage ePackage) {
	finder.findConcreteAbstractMetaclasses(ePackage)
		.forEach[makeAbstract]
}

def resolveAbstractConcreteMetaclass(EPackage ePackage) {
	finder.findAbstractConcreteMetaclasses(ePackage)
		.forEach[makeConcrete]
}

def resolveAbstractSubclassesOfConcreteSuperclasses(EPackage ePackage) {
	finder.findAbstractSubclassesOfConcreteSuperclasses(ePackage)
		.forEach[makeConcrete]
}

def resolveDuplicatedFeaturesInSubclasses(EPackage ePackage) {
	finder.findDuplicatedFeaturesInSubclasses(ePackage)
		.forEach[superClass, duplicates|
			duplicates.forEach[key, values|
				refactorings.pullUpFeatures(superClass, values)
			]
		]
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy