blob: bbc46df1bdd65eff62d17622082ef814c800f6f7 [file] [log] [blame]
package org.eclipse.emf.henshin.adapters.xtext
import com.google.inject.Inject
import org.eclipse.emf.ecore.EObject
import org.eclipse.xtext.naming.IQualifiedNameProvider
import org.eclipse.xtext.naming.QualifiedName
import org.eclipse.xtext.util.IResourceScopeCache
import org.eclipse.xtext.util.Tuples
import static extension org.eclipse.emf.henshin.adapters.xtext.NamingHelper.*
class HenshinQualifiedNameProvider extends IQualifiedNameProvider.AbstractImpl {
private static val HENSHIN_CACHE_KEY ="HENSHIN_CACHE_KEY"
@Inject
private val IResourceScopeCache cache = IResourceScopeCache.NullImpl.INSTANCE;
override getFullyQualifiedName(EObject obj) {
cache.get(Tuples.pair(obj, HENSHIN_CACHE_KEY), obj.eResource(), [
val name = obj.name
if (name === null) {
null
} else {
val qualifiedName = QualifiedName.create(name)
if (obj.eContainer !== null) {
val parentsQualifiedName = getFullyQualifiedName(obj.eContainer)
if (parentsQualifiedName === null) {
null
} else {
parentsQualifiedName.append(qualifiedName)
}
} else {
qualifiedName
}
}
])
}
}