package org.maziarz.yiiclipse.completion;
import java.io.File;
import org.eclipse.core.filesystem.EFS;
import org.eclipse.core.filesystem.IFileStore;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.dltk.core.CompletionRequestor;
import org.eclipse.dltk.core.IField;
import org.eclipse.dltk.core.IType;
import org.eclipse.dltk.internal.core.SourceRange;
import org.eclipse.php.core.codeassist.ICompletionContext;
import org.eclipse.php.core.codeassist.ICompletionStrategy;
import org.eclipse.php.core.compiler.PHPFlags;
import org.eclipse.php.internal.core.codeassist.ICompletionReporter;
import org.eclipse.php.internal.core.codeassist.strategies.AbstractCompletionStrategy;
import org.maziarz.yiiclipse.hyperlinks.WorkspacePathHelper;
import org.maziarz.yiiclipse.utils.ASTUtils;
import org.maziarz.yiiclipse.utils.YiiPathResolver;
public class WidgetConfigArrayStrategy extends AbstractCompletionStrategy implements ICompletionStrategy {
private YiiPathResolver pathResolver;
private WorkspacePathHelper pathHelper;
public WidgetConfigArrayStrategy(ICompletionContext context) {
super(context);
}
@Override
public WidgetConfigArrayContext getContext() {
ICompletionContext context = super.getContext();
if (context instanceof WidgetConfigArrayContext) {
return (WidgetConfigArrayContext) context;
}
return null;
}
@Override
public void apply(ICompletionReporter reporter) throws Exception {
WidgetConfigArrayContext ctx = getContext();
if (ctx == null) {
return;
}
//CompletionRequestor requestor = ctx.getCompletionRequestor();
final String prefix = ctx.getPrefix();
SourceRange replaceRange = getReplacementRange(ctx);
String widget = ASTUtils.stripQuotes(ctx.getWidgetAlias());
if (pathResolver == null){
pathHelper = new WorkspacePathHelper();
pathResolver = new YiiPathResolver(new WorkspacePathHelper());
}
IType type = pathHelper.findWidgetType(widget, ctx.getSourceModule());
for (IField field : type.getFields()){
if (PHPFlags.isPublic(field.getFlags())) {
if (field.getElementName().startsWith("$"+prefix)){
reporter.reportKeyword(field.getElementName().replaceFirst("\\$", ""), "", replaceRange);
}
}
}
}
private IFile getIFile(String widgetPath) {
File fileToOpen = new File(widgetPath);
if (fileToOpen.exists() && fileToOpen.isFile()) {
IFileStore fileStore = EFS.getLocalFileSystem().getStore(fileToOpen.toURI());
Object o = fileStore.getAdapter(org.eclipse.dltk.core.IModelElement.class);
Object o2 = fileStore.getAdapter(org.eclipse.ui.editors.text.ILocationProvider.class);
Object o3 = fileStore.getAdapter(org.eclipse.dltk.core.ISourceModule.class);
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
IFile[] files = root.findFilesForLocationURI(fileStore.toURI());
if (files != null && files.length > 0) {
return files[0];
} else {
}
}
return null;
}
}