private Element processSeeTag()

in modules/compiler/src/java/flex2/compiler/asdoc/TopLevelClassesGenerator.java [1699:1961]


    private Element processSeeTag(String fullName, String seeStr)
    {
        String labelStr = "";
        String hrefStr = "";
        String invalidHrefStr = null;

        seeStr = asDocUtil.normalizeString(seeStr);
        if (seeStr.length() == 0)
        {
            if (verbose)
            {
                System.out.println("ERROR: Empty @see string in " + fullName);
            }

            Element link = outputObject.createElement("link");
            link.setAttribute("href", "");
            Element linkText = outputObject.createElement("linktext");
            link.appendChild(linkText);
            return link;
        }

        int spaceIndex = seeStr.indexOf(" ");

        if (seeStr.indexOf("\"") == 0)
        {
            labelStr = seeStr.replaceAll("^[\"]|[\"]$", "");
        }
        else
        {
            if (spaceIndex != -1)
            {
                hrefStr = seeStr.substring(0, spaceIndex);
                labelStr = seeStr.substring(spaceIndex + 1);
            }
            else
            {
                hrefStr = seeStr;
                labelStr = seeStr;
            }

            if (hrefStr.indexOf("http://") == -1 && hrefStr.indexOf(".html") == -1)
            {
                int poundLoc = hrefStr.indexOf("#");

                hrefStr = hrefStr.replaceAll("event:", "event!");
                hrefStr = hrefStr.replaceAll("style:", "style!");
                hrefStr = hrefStr.replaceAll("effect:", "effect!");
                hrefStr = hrefStr.replaceAll("skinstate:", "skinstate!");
                hrefStr = hrefStr.replaceAll("skinpart:", "skinpart!");

                int lastDot = hrefStr.lastIndexOf(".");

                if (lastDot != -1)
                {
                    hrefStr = hrefStr.substring(0, lastDot) + ":" + hrefStr.substring(lastDot + 1);
                }

                int colonLoc = hrefStr.indexOf(":");
                String packageNameStr = "";
                String className = "";

                boolean isValidLink = true;

                if (poundLoc != -1)
                {
                    QualifiedNameInfo qualifiedName = (fullName.indexOf("/") == -1 ? asDocUtil.decomposeFullClassName(fullName) : decomposeFullMethodOrFieldName(fullName));

                    String memberName = hrefStr.substring(poundLoc + 1);

                    // colonLoc should be greater that poundLoc to avoid string index exception 
                    // for cases like @see MystrViewerControl#newTraversal(model: IModel) 
                    if (colonLoc != -1 && colonLoc < poundLoc)
                    {
                        packageNameStr = hrefStr.substring(0, colonLoc);
                        className = hrefStr.substring(colonLoc + 1, poundLoc);
                        // start check if packageNameStr + classNameStr is
                        // really a class or a package
                        if (classTable.get(hrefStr.substring(0, poundLoc)) == null)
                        {
                            String fullNameStr = packageNameStr + "." + className;
                            fullNameStr = fullNameStr.replaceAll(":", ".");

                            if (fullNameStr.endsWith("."))
                            {
                                fullNameStr = fullNameStr.substring(0, fullNameStr.length() - 1);
                            }

                            if (packageContentsTable.get(fullNameStr) != null)
                            {
                                packageNameStr = fullNameStr;
                                className = "";
                            }
                            else
                            {
                                isValidLink = false;
                            }
                        }
                    }
                    else
                    {
                        className = hrefStr.substring(0, poundLoc);
                        if (className.equals(""))
                        {
                            if (qualifiedName.getClassNames().size() != 0)
                            {
                                className = (String)qualifiedName.getClassNames().get(qualifiedName.getClassNames().size() - 1);
                            }
                        }

                        if (packageNameStr.equals("") && classTable.get(className) == null)
                        {
                            packageNameStr = qualifiedName.getPackageName();
                        }

                        String fullNameStr = "";

                        if (!packageNameStr.equals(""))
                        {
                            fullNameStr = packageNameStr + ":";
                        }

                        if (!className.equals(""))
                        {
                            fullNameStr = fullNameStr + className;
                        }

                        if (classTable.get(fullNameStr) == null && !className.equals("global"))
                        {
                            isValidLink = false;
                        }
                    }

                    if (isValidLink)
                    {
                        if (!packageNameStr.equals(""))
                        {
                            hrefStr = packageNameStr + ".xml#" + className + "/" + memberName;
                        }
                        else
                        {
                            hrefStr = "#" + className + "/" + memberName;
                        }
                    }
                    else
                    {
                        hrefStr = "";

                        if (!packageNameStr.equals(""))
                        {
                            invalidHrefStr = packageNameStr + ".xml#" + className + "/" + memberName;
                        }
                        else
                        {
                            invalidHrefStr = "#" + className + "/" + memberName;
                        }
                    }
                }
                else
                {
                    QualifiedNameInfo qualifiedName = asDocUtil.decomposeFullClassName(fullName);

                    if (colonLoc != -1)
                    {
                        packageNameStr = hrefStr.substring(0, colonLoc);
                        className = hrefStr.substring(colonLoc + 1);
                    }
                    else
                    {
                        className = hrefStr;
                    }

                    if (className.equals(""))
                    {
                        if (qualifiedName.getClassNames().size() != 0)
                        {
                            className = (String)qualifiedName.getClassNames().get(qualifiedName.getClassNames().size() - 1);
                        }
                    }

                    if (packageNameStr.equals("") && classTable.get(className) == null)
                    {
                        packageNameStr = qualifiedName.getPackageName();
                    }

                    String fullNameStr = "";

                    if (!packageNameStr.equals(""))
                    {
                        fullNameStr = packageNameStr + ":";
                    }

                    fullNameStr = fullNameStr + className;

                    if (classTable.get(fullNameStr) == null)
                    {
                        String temp = fullNameStr.replaceAll(":", ".");
                        if (packageContentsTable.get(temp) != null)
                        {
                            hrefStr = temp + ".xml";
                        }
                        else
                        {
                            hrefStr = "";
                            invalidHrefStr = temp + ".xml";
                        }
                    }
                    else if (!packageNameStr.equals(""))
                    {
                        hrefStr = packageNameStr + ".xml#" + className;
                    }
                    else
                    {
                        hrefStr = "#" + className;
                    }
                }

                hrefStr = hrefStr.replaceAll("event!", "event:");
                hrefStr = hrefStr.replaceAll("style!", "style:");
                hrefStr = hrefStr.replaceAll("effect!", "effect:");
                hrefStr = hrefStr.replaceAll("skinstate!", "skinstate:");
                hrefStr = hrefStr.replaceAll("skinpart!", "skinpart:");

                if (invalidHrefStr != null)
                {
                    invalidHrefStr = invalidHrefStr.replaceAll("event!", "event:");
                    invalidHrefStr = invalidHrefStr.replaceAll("style!", "style:");
                    invalidHrefStr = invalidHrefStr.replaceAll("effect!", "effect:");
                    invalidHrefStr = invalidHrefStr.replaceAll("skinstate!", "skinstate:");
                    invalidHrefStr = invalidHrefStr.replaceAll("skinpart!", "skinpart:");
                }

                if (labelStr.indexOf("#") == 0)
                {
                    labelStr = labelStr.replaceAll("#", "");
                }
                else
                {
                    labelStr = labelStr.replaceAll("#", ".");
                }

                labelStr = labelStr.replaceAll("event:", "");
                labelStr = labelStr.replaceAll("style:", "");
                labelStr = labelStr.replaceAll("effect:", "");
                labelStr = labelStr.replaceAll("skinstate:", "");
                labelStr = labelStr.replaceAll("skinpart:", "");
                labelStr = labelStr.replaceAll("global\\.", "");
            }
        }

        Element link = outputObject.createElement("link");
        link.setAttribute("href", hrefStr);

        if (invalidHrefStr != null)
        {
            link.setAttribute("invalidHref", invalidHrefStr);
        }

        Element linkText = outputObject.createElement("linktext");
        linkText.setTextContent(labelStr);

        link.appendChild(linkText);
        return link;
    }