![JAR search and dependency download from the Maven repository](/logo.png)
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