public void startElement(int nameCode, int typeCode, int locationId, int properties) throws XPathException {
        defaultNamespaceStack.push(startTag.getAttribute(defaultNamespaceCode));
        if (emptyStylesheetElement) {
            depthOfHole++;
            return;
        }
        if (depthOfHole == 0) {
            String useWhen;
            int uriCode = getNamePool().getURICode(nameCode);
            if (uriCode == NamespaceConstant.XSLT_CODE) {
                useWhen = startTag.getAttribute(useWhenCode);
            } else {
                useWhen = startTag.getAttribute(xslUseWhenCode);
            }
            if (useWhen != null) {
                try {
                    boolean b = evaluateUseWhen(useWhen, getDocumentLocator().getLineNumber(locationId));
                    if (!b) {
                        int fp = nameCode & NamePool.FP_MASK;
                        if (fp == StandardNames.XSL_STYLESHEET || fp == StandardNames.XSL_TRANSFORM) {
                            emptyStylesheetElement = true;
                        } else {
                            depthOfHole = 1;
                            return;
                        }
                    }
                } catch (XPathException e) {
                    XPathException err = new XPathException("Error in use-when expression. " + e.getMessage());
                    ExpressionLocation loc = new ExpressionLocation();
                    loc.setSystemId(getDocumentLocator().getSystemId(locationId));
                    loc.setLineNumber(getDocumentLocator().getLineNumber(locationId));
                    err.setLocator(loc);
                    err.setErrorCodeQName(e.getErrorCodeQName());
                    try {
                        getPipelineConfiguration().getErrorListener().fatalError(err);
                    } catch (TransformerException tex) {
                        throw XPathException.makeXPathException(tex);
                    }
                    err.setHasBeenReported(true);
                    throw err;
                }
            }
            nextReceiver.startElement(nameCode, typeCode, locationId, properties);
        } else {
            depthOfHole++;
        }
    }