package com.cedricziel.idea.typo3.psi;
import com.cedricziel.idea.typo3.domain.TYPO3ExtensionDefinition;
import com.cedricziel.idea.typo3.domain.factory.ExtensionDefinitionFactory;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.newvfs.impl.VirtualDirectoryImpl;
import com.intellij.psi.PsiDirectory;
public class TYPO3ExtensionUtil {
/**
* Traverses the given directories and returns the first valid
* extension definition that's applicable.
*
* @param directories List of directories to analyze
*/
public static TYPO3ExtensionDefinition findContainingExtension(PsiDirectory[] directories) {
for (PsiDirectory directory : directories) {
VirtualDirectoryImpl virtualFile = (VirtualDirectoryImpl) directory.getVirtualFile();
while (!isExtensionRootDirectory(virtualFile)) {
if (virtualFile.getParent() == null) {
return null;
}
virtualFile = virtualFile.getParent();
}
TYPO3ExtensionDefinition extensionDefinition = ExtensionDefinitionFactory.fromDirectory(virtualFile);
if (extensionDefinition != null) {
return extensionDefinition;
}
}
return null;
}
/**
* Determines if a directory is the top-most directory of an extension.
* It does so by searching the "ext_emconf.php"
*
* @param virtualFile Directory to scan
* @return true if the current directory is a root directory.
*/
private static boolean isExtensionRootDirectory(VirtualDirectoryImpl virtualFile) {
VirtualFile[] immediateChildren = virtualFile.getChildren();
for (VirtualFile file : immediateChildren) {
if (file.getName().equals("ext_emconf.php")) {
return true;
}
}
return false;
}
}