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;
}