package com.intellij.flex.uiDesigner.css;
import com.intellij.flex.uiDesigner.AssetCounter;
import com.intellij.flex.uiDesigner.InjectionUtil;
import com.intellij.flex.uiDesigner.InvalidPropertyException;
import com.intellij.flex.uiDesigner.ProblemsHolder;
import com.intellij.flex.uiDesigner.io.StringRegistry;
import com.intellij.flex.uiDesigner.mxml.AmfExtendedTypes;
import com.intellij.flex.uiDesigner.mxml.ProjectComponentReferenceCounter;
import com.intellij.javascript.flex.css.FlexStyleIndexInfo;
import com.intellij.lang.javascript.psi.ecmal4.JSClass;
import com.intellij.psi.css.CssString;
public class LocalCssWriter extends CssWriter {
private final ProjectComponentReferenceCounter projectComponentReferenceCounter;
public LocalCssWriter(StringRegistry.StringWriter stringWriter, ProblemsHolder problemsHolder,
ProjectComponentReferenceCounter projectComponentReferenceCounter, AssetCounter assetCounter) {
super(stringWriter, problemsHolder, assetCounter);
this.projectComponentReferenceCounter = projectComponentReferenceCounter;
}
@Override
protected void writeClassReference(JSClass jsClass, FlexStyleIndexInfo info, CssString cssString) throws InvalidPropertyException {
final int projectComponentFactoryId;
if (info != null && info.getAttributeName().equals("skinClass")) {
projectComponentFactoryId = InjectionUtil.getProjectComponentFactoryId(jsClass, projectComponentReferenceCounter);
}
else if (InjectionUtil.isProjectComponent(jsClass)) {
throw new InvalidPropertyException(cssString, "class.reference.in.css.support.only.skin.class", jsClass.getQualifiedName());
}
else {
projectComponentFactoryId = -1;
}
if (projectComponentFactoryId == -1) {
super.writeClassReference(jsClass, info, cssString);
}
else {
propertyOut.write(AmfExtendedTypes.DOCUMENT_FACTORY_REFERENCE);
propertyOut.writeUInt29(projectComponentFactoryId);
}
}
}