/*******************************************************************************
* Copyright (c) 2005, 2012 eBay Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
*******************************************************************************/
package org.eclipse.vjet.eclipse.codeassist.keywords;
import java.util.List;
import org.eclipse.vjet.dsf.jst.IJstType;
import org.eclipse.vjet.dsf.jstojava.translator.robust.completion.JstCompletion;
import org.eclipse.vjet.eclipse.codeassist.CodeassistUtils;
import org.eclipse.vjet.vjo.tool.typespace.TypeSpaceMgr;
import org.eclipse.dltk.mod.compiler.env.ISourceModule;
import org.eclipse.dltk.mod.core.CompletionProposal;
import org.eclipse.dltk.mod.core.IMember;
import org.eclipse.dltk.mod.core.IMethod;
import org.eclipse.dltk.mod.core.IType;
public class StaticMemberAccessHandler extends MethodCompletionHandler {
private IJstType jstType;
private String typeName;
@Override
protected TypeMembersRequestor createTypeMemberRequestor(
JstCompletion completion, String token, IType type) {
CompletionContext.setStaticContext(true);
TypeMembersRequestor requestor;
requestor = new TypeMembersRequestor(token, false, type, completion) {
@Override
protected boolean accept(IMember member, int flags) {
String name = member.getDeclaringType().getElementName();
boolean accept = super.accept(member, flags)
&& (getTypeName().equals(name) || name
.equals(TypeSpaceMgr.GLOBAL));
// FIXME: Why instanceOf isn't static property of Global Object?
return accept
&& (isStatic(flags) || member.getElementName()
.equalsIgnoreCase("instanceOf"));
}
};
return requestor;
}
@Override
protected void addLocalVarProposals(IMethod method, String token,
List<CompletionProposal> list, int position) {
// TODO don't add local vars to this.vjo
}
public IJstType getJstType() {
return jstType;
}
public String getTypeName() {
return typeName;
}
public void setJstType(IJstType jstType) {
this.jstType = jstType;
}
public void setTypeName(String typeName) {
this.typeName = typeName;
}
@Override
protected IType getType(ISourceModule module) {
IType type = null;
if (jstType != null) {
String nullPackagePrefix = "null.";
String typeName = jstType.getName();
if (typeName.startsWith(nullPackagePrefix)) {
typeName = typeName.substring(nullPackagePrefix.length());
}
type = CodeassistUtils.findResourceType(module, typeName);
if (type == null) { // add by Jack, to make sure, w
type = super.getType(module);
}
} else {
type = super.getType(module);
}
return type;
}
}