package com.jetbrains.actionscript.profiler.livetable; import com.intellij.lang.javascript.psi.resolve.JSResolveUtil; import com.jetbrains.actionscript.profiler.base.FilePathProducer; import com.jetbrains.actionscript.profiler.base.FrameInfoProducer; import com.jetbrains.actionscript.profiler.base.QNameProducer; import com.jetbrains.actionscript.profiler.sampler.FrameInfo; import org.jetbrains.annotations.Nullable; import javax.swing.tree.DefaultMutableTreeNode; /** * @author: Fedor.Korotkov */ public class SizeInfoNode extends DefaultMutableTreeNode implements FrameInfoProducer, FilePathProducer, QNameProducer { private final @Nullable FrameInfo frameInfo; private final @Nullable String packageName; private final JSResolveUtil.GenericSignature signature; private long size; private int count; public SizeInfoNode(String qName, @Nullable FrameInfo frameInfo, long size, int count) { JSResolveUtil.GenericSignature signatureCandidate = JSResolveUtil.extractGenericSignature(qName); if (signatureCandidate == null) { signatureCandidate = new JSResolveUtil.GenericSignature(qName, null); } signature = signatureCandidate; final int packageSeparatorIndex = signature.elementType.lastIndexOf('.'); packageName = packageSeparatorIndex == -1 ? null : signature.elementType.substring(0, packageSeparatorIndex); this.frameInfo = frameInfo; this.size = size; this.count = count; setUserObject(qName); } @Nullable public FrameInfo getFrameInfo() { return frameInfo; } public long getSize() { return size; } public int getCount() { return count; } public void incSize(long size) { this.size += size; ++count; } public void decSize(long size) { this.size -= size; --count; } public boolean isMethod() { return getFrameInfo() != null; } @Override public String getFilePath() { if (frameInfo != null) { return frameInfo.getFilePath(); } return null; } @Override public String getQName() { if (frameInfo != null) { return frameInfo.getQName(); } if (packageName != null) { return packageName + "." + signature.elementType; } return signature.elementType; } public String getClassName() { if (signature.genericType == null) { return signature.elementType; } return signature.elementType + ".<" + signature.genericType + ">"; } @Nullable public String getPackageName() { return packageName; } }