/*
* Copyright (C) 2010-2016 JPEXS, All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3.0 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library.
*/
package com.jpexs.decompiler.flash.abc.types;
import com.jpexs.decompiler.flash.abc.ABC;
import com.jpexs.decompiler.flash.abc.avm2.AVM2ConstantPool;
import com.jpexs.decompiler.flash.types.annotations.Internal;
import com.jpexs.decompiler.graph.DottedChain;
/**
*
* @author JPEXS
*/
public class Namespace {
public static final int KIND_NAMESPACE = 8;
public static final int KIND_PRIVATE = 5;
public static final int KIND_PACKAGE = 22;
public static final int KIND_PACKAGE_INTERNAL = 23;
public static final int KIND_PROTECTED = 24;
public static final int KIND_EXPLICIT = 25;
public static final int KIND_STATIC_PROTECTED = 26;
public static final int[] nameSpaceKinds = new int[]{KIND_NAMESPACE, KIND_PRIVATE, KIND_PACKAGE, KIND_PACKAGE_INTERNAL, KIND_PROTECTED, KIND_EXPLICIT, KIND_STATIC_PROTECTED};
public static final String[] nameSpaceKindNames = new String[]{"Namespace", "PrivateNamespace", "PackageNamespace", "PackageInternalNs", "ProtectedNamespace", "ExplicitNamespace", "StaticProtectedNs"};
public static final String[] namePrefixes = new String[]{"", "private", "public", "", "protected", "explicit", "protected"};
public int kind;
public int name_index;
@Internal
public boolean deleted;
public static String kindToStr(int kind) {
for (int i = 0; i < nameSpaceKinds.length; i++) {
if (nameSpaceKinds[i] == kind) {
return nameSpaceKindNames[i];
}
}
return null;
}
public static String kindToPrefix(int kind) {
for (int i = 0; i < nameSpaceKinds.length; i++) {
if (nameSpaceKinds[i] == kind) {
return namePrefixes[i];
}
}
return null;
}
public Namespace() {
}
public Namespace(int kind, int name_index) {
this.kind = kind;
this.name_index = name_index;
}
public String getKindStr() {
String kindStr = "?";
for (int k = 0; k < nameSpaceKinds.length; k++) {
if (nameSpaceKinds[k] == kind) {
kindStr = nameSpaceKindNames[k];
break;
}
}
return kindStr;
}
@Override
public String toString() {
return "Namespace: kind=" + getKindStr() + " name_index=" + name_index;
}
public String toString(AVM2ConstantPool constants) {
return getName(constants).toPrintableString(true);
}
public String getNameWithKind(AVM2ConstantPool constants) {
String kindStr = getKindStr();
String nameStr = constants.getString(name_index);
return kindStr + (nameStr == null || nameStr.isEmpty() ? "" : " " + nameStr);
}
public String getPrefix(ABC abc) {
String kindStr = "?";
for (int k = 0; k < nameSpaceKinds.length; k++) {
if (nameSpaceKinds[k] == kind) {
kindStr = namePrefixes[k];
break;
}
}
return kindStr;
}
public DottedChain getName(AVM2ConstantPool constants) {
if (name_index == 0 || name_index == -1) {
return DottedChain.EMPTY;
}
return constants.getDottedChain(name_index);
}
public boolean hasName(String name, AVM2ConstantPool constants) {
if (name == null && name_index == 0) {
return true;
}
if (name == null) {
return false;
}
if (name.isEmpty() && name_index == 0) {
return true;
}
if (name_index == 0) {
return false;
}
return constants.getString(name_index).equals(name);
}
}