package com.intellij.lang.javascript.flex.importer;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* @author Maxim.Mossienko
* Date: Oct 20, 2008
* Time: 7:02:22 PM
*/
class AbcDumper extends AbstractDumpProcessor {
private final boolean dumpCode;
public AbcDumper(final boolean _dumpCode) {
dumpCode = _dumpCode;
}
public void dumpStat(@NotNull final String stat) {
sb.append(stat);
}
public void hasError(@NotNull final String error) {
sb.append(error);
}
@Override
protected String appendModifiers(MemberInfo member, String attr) {
attr += (member instanceof MethodInfo && (((MethodInfo)member).flags & Abc.NATIVE) != 0 ? "native ":"");
return attr;
}
public void processMultinameAsPackageName(@NotNull final Multiname name,
@Nullable final String parentName) {
append(name.hasNotEmptyNs() ? (name.getValidNsName(classNameTable) + "::" + name.name) : name.name);
}
public void dumpToplevelAnonymousMethod(final @NotNull Abc abc, final @NotNull MethodInfo m) {
m.dump(abc, "", "", this);
}
public void dumpTopLevelTraits(final Abc abc, final @NotNull Traits t, final String indent) {
sb.append(indent + t.name + "\n");
t.dump(abc, indent, "", this);
t.init.dump(abc, indent, "", this);
}
public boolean doDumpMember(final @NotNull MemberInfo memberInfo) {
return true;
}
public void appendMethodSeparator() {
append("\n");
}
public void appendFieldSeparator() {
append("");
}
public String getAbcInSwfIndent() {
return " ";
}
public void processValue(final Multiname type, final Object value) {
append(" = "+String.valueOf(value instanceof String ? ('"' + value.toString() + '"') : value));
}
public boolean doDumpMetaData(final @NotNull MetaData md) {
return true;
}
public void processParameter(@NotNull String name, @Nullable Multiname type, String parentName, @Nullable Multiname value, boolean rest) {
processMultinameAsPackageName(type, parentName);
}
public boolean doStarTypeDumpInExtends() {
return true;
}
public boolean doStarMetaAttrNameDump() {
return true;
}
public void setProcessingInterface(final boolean anInterface) {
}
protected boolean dumpRestParameter() {
return false;
}
@Override
public void processFunction(MethodInfo methodInfo, boolean referenceNameRequested, Abc abc, String indent, String attr) {
super.processFunction(methodInfo, referenceNameRequested, abc, indent, attr);
append("\t/* disp_id " + methodInfo.id + "*/");
if (!referenceNameRequested) { // !verbose -> anonymouse
append("\n");
if (dumpCode && methodInfo.code != null) {
methodInfo.dumpCode(abc, indent, this);
}
}
}
@Override
public void processVariable(SlotInfo info, String indent, String attr) {
super.processVariable(info, indent, attr);
append("\t/* slot_id " + info.id + " */\n");
}
}