changeset 1315:4433aa195956

Merge from main jdk7u6 OpenJDK repository
author Greg Lewis <glewis@eyesbeyond.com>
date Sun, 12 Aug 2012 15:20:32 -0700
parents 175db04d3444 bcd1d067d525
children aa73b3e3c78b
files .hgtags
diffstat 50 files changed, 2126 insertions(+), 68 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags	Tue Jul 31 23:11:41 2012 -0700
+++ b/.hgtags	Sun Aug 12 15:20:32 2012 -0700
@@ -160,13 +160,42 @@
 a4bf6a1aff54a98e9ff2b3fb53c719f658bec677 jdk7u4-b12
 56eb9150d9ffdb71c47d72871e8ecc98b5f402de jdk7u4-b13
 0e55881c2ee2984048c179d1e031cefb56a36bec jdk7u4-b14
+0bea057f7ce1577e1b0306f2027c057e35394398 jdk7u5-b01
 0bea057f7ce1577e1b0306f2027c057e35394398 jdk7u4-b15
 b05d9de909321f3cd97f066b3614f3117b7c15c4 jdk7u4-b16
 80552e34be80bdd77a0c9dd96d5a87e70542de00 jdk7u4-b17
 c65b573ccae35395053390952b4593e97c6f1c89 jdk7u4-b18
 12cdf04507b4930a6ab36b39dbd972772fc8bd31 jdk7u4-b19
 83b2485f2acb254c5173979452c31bfe7b8f3b94 jdk7u4-b20
+b11f11a79fe7264162dd2733985b6c9645ff0867 jdk7u5-b02
 463face16af6cde12dde0be11b22db63d3eb210e jdk7u4-b30
 a7e6a43c5e3732f539ed0e92701c9011b678c6f1 jdk7u4-b21
 79cee842266bd986a10107988d24d7b4ff5eec25 jdk7u4-b22
 862c6e4b265217ad0d877b409a4bba4348b63c30 jdk7u4-b31
+6cf7f5783c961cf72b1621bf165f5cb39a9397f0 jdk7u5-b04
+0c76aeb6f6fe448d6a149eadd6354a6366dac636 jdk7u5-b05
+14a321b5bf14bd259cc7fd5a0259a5098defe2f1 jdk7u5-b30
+0e55881c2ee2984048c179d1e031cefb56a36bec jdk7u6-b01
+5765d01e226369e44a6afc4431f83a633983bc04 jdk7u6-b02
+039b1ce6c63fa6837233980a13a7bffcf039b360 jdk7u6-b03
+ef568ee2f96f2f91b3ac4b1d1a5291aaa3cfb2e7 jdk7u6-b04
+bbf655c7f3594eda674a1662739a0ac9c78d0047 jdk7u6-b05
+74278b8cdeea86bb6082ea8c19c01b2008cf39a9 jdk7u6-b06
+870ec15296f34e973bc256b7a14a4ce7eaa1af7e jdk7u6-b07
+ed00f61a5de82f63449ea6ad0a17c0ad7177aaf9 jdk7u6-b08
+3e268ea565efb2fd1df1d1b733512c202d83cf4f jdk7u6-b09
+21d2313dfeac8c52a04b837d13958c86346a4b12 jdk7u6-b10
+13d3c624291615593b4299a273085441b1dd2f03 jdk7u6-b11
+f0be10a26af08c33d9afe8fe51df29572d431bac jdk7u6-b12
+fcebf337f5c1d342973573d9c6f758443c8aefcf jdk7u6-b13
+35b2699c6243e9fb33648c2c25e97ec91d0e3553 jdk7u6-b14
+47ae28da508861d77ee6dd408d822acf507b28ec jdk7u6-b15
+5c7763489f4d2727c6d9de11f4114fb8ed839042 jdk7u6-b16
+66c671f28cb2840ceec5b44c44bac073fc0b4256 jdk7u6-b17
+6aa859ef42876c51bb1b1d7fb4db32a916a7dcaa jdk7u6-b18
+474a52eeeafb1feccffda68b96f651e65415c01d jdk7u6-b19
+32acb67a79531daf678577c7ef1bde1867da807d jdk7u6-b20
+a35ca56cf8d09b92511f0cd71208a2ea05c8a338 jdk7u6-b21
+4f3aafa690d1fcb18693fc4085049eeffe4778f7 jdk7u6-b22
+dd3e29d8892fcaba6d76431d5fa9d49e7c088f76 jdk7u6-b23
+6aac89e84fc96d15bb78b13aa71c9e6b73d7237e jdk7u6-b24
--- a/src/share/classes/com/sun/tools/apt/resources/apt_ja.properties	Tue Jul 31 23:11:41 2012 -0700
+++ b/src/share/classes/com/sun/tools/apt/resources/apt_ja.properties	Sun Aug 12 15:20:32 2012 -0700
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
--- a/src/share/classes/com/sun/tools/apt/resources/apt_zh_CN.properties	Tue Jul 31 23:11:41 2012 -0700
+++ b/src/share/classes/com/sun/tools/apt/resources/apt_zh_CN.properties	Sun Aug 12 15:20:32 2012 -0700
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
--- a/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java	Tue Jul 31 23:11:41 2012 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java	Sun Aug 12 15:20:32 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -703,7 +703,8 @@
             }
             HtmlTree navList = new HtmlTree(HtmlTag.UL);
             navList.addStyle(HtmlStyle.navList);
-            navList.addAttr(HtmlAttr.TITLE, "Navigation");
+            navList.addAttr(HtmlAttr.TITLE,
+                            configuration.getText("doclet.Navigation"));
             if (configuration.createoverview) {
                 navList.addContent(getNavLinkContents());
             }
@@ -1986,7 +1987,24 @@
      */
     public void printDocLink(int context, ClassDoc classDoc, MemberDoc doc,
             String label, boolean strong) {
-        print(getDocLink(context, classDoc, doc, label, strong));
+        printDocLink(context, classDoc, doc, label, strong, false);
+    }
+
+    /**
+     * Print the link for the given member.
+     *
+     * @param context the id of the context where the link will be printed.
+     * @param classDoc the classDoc that we should link to.  This is not
+     *                 necessarily equal to doc.containingClass().  We may be
+     *                 inheriting comments.
+     * @param doc the member being linked to.
+     * @param label the label for the link.
+     * @param strong true if the link should be strong.
+     * @param isProperty true if the doc parameter is a JavaFX property.
+     */
+    public void printDocLink(int context, ClassDoc classDoc, MemberDoc doc,
+            String label, boolean strong, boolean isProperty) {
+        print(getDocLink(context, classDoc, doc, label, strong, isProperty));
     }
 
     /**
@@ -2017,13 +2035,31 @@
      */
     public String getDocLink(int context, ClassDoc classDoc, MemberDoc doc,
         String label, boolean strong) {
+        return getDocLink(context, classDoc, doc, label, strong, false);
+    }
+
+        /**
+     * Return the link for the given member.
+     *
+     * @param context the id of the context where the link will be printed.
+     * @param classDoc the classDoc that we should link to.  This is not
+     *                 necessarily equal to doc.containingClass().  We may be
+     *                 inheriting comments.
+     * @param doc the member being linked to.
+     * @param label the label for the link.
+     * @param strong true if the link should be strong.
+     * @param isProperty true if the doc parameter is a JavaFX property.
+     * @return the link for the given member.
+     */
+    public String getDocLink(int context, ClassDoc classDoc, MemberDoc doc,
+        String label, boolean strong, boolean isProperty) {
         if (! (doc.isIncluded() ||
             Util.isLinkable(classDoc, configuration()))) {
             return label;
         } else if (doc instanceof ExecutableMemberDoc) {
             ExecutableMemberDoc emd = (ExecutableMemberDoc)doc;
             return getLink(new LinkInfoImpl(context, classDoc,
-                getAnchor(emd), label, strong));
+                getAnchor(emd, isProperty), label, strong));
         } else if (doc instanceof MemberDoc) {
             return getLink(new LinkInfoImpl(context, classDoc,
                 doc.name(), label, strong));
@@ -2065,6 +2101,13 @@
     }
 
     public String getAnchor(ExecutableMemberDoc emd) {
+        return getAnchor(emd, false);
+    }
+
+    public String getAnchor(ExecutableMemberDoc emd, boolean isProperty) {
+        if (isProperty) {
+            return emd.name();
+        }
         StringBuilder signature = new StringBuilder(emd.signature());
         StringBuilder signatureParsed = new StringBuilder();
         int counter = 0;
@@ -2177,6 +2220,13 @@
                     refMemName += ((ExecutableMemberDoc)refMem).signature();
                 }
             }
+            if (Configuration.getJavafxJavadoc()) {
+                int index;
+                if ((index = refMemName.indexOf("<")) != -1 ) {
+                    refMemName = refMemName.substring(0, index) + ")";
+                }
+            }
+
             text = (isplaintext) ?
                 refMemName : getCode() + Util.escapeHtmlChars(refMemName) + getCodeEnd();
 
--- a/src/share/classes/com/sun/tools/doclets/formats/html/PackageFrameWriter.java	Tue Jul 31 23:11:41 2012 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/PackageFrameWriter.java	Sun Aug 12 15:20:32 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -31,6 +31,7 @@
 import com.sun.tools.doclets.internal.toolkit.util.*;
 import com.sun.tools.doclets.internal.toolkit.*;
 import com.sun.tools.doclets.formats.html.markup.*;
+import com.sun.tools.doclets.internal.toolkit.builders.PackageSummaryBuilder;
 
 /**
  * Class to generate file for each package contents in the left-hand bottom
@@ -160,6 +161,7 @@
      */
     protected void addClassKindListing(ClassDoc[] arr, Content labelContent,
             Content contentTree) {
+        arr = PackageSummaryBuilder.filterOutPrivateClasses(arr);
         if(arr.length > 0) {
             Arrays.sort(arr);
             boolean printedHeader = false;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/PropertyWriterImpl.java	Sun Aug 12 15:20:32 2012 -0700
@@ -0,0 +1,303 @@
+/*
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package com.sun.tools.doclets.formats.html;
+
+import java.io.*;
+
+import com.sun.javadoc.*;
+import com.sun.tools.doclets.formats.html.markup.*;
+import com.sun.tools.doclets.internal.toolkit.*;
+import com.sun.tools.doclets.internal.toolkit.util.*;
+
+/**
+ * Writes property documentation in HTML format.
+ *
+ * @author Robert Field
+ * @author Atul M Dambalkar
+ * @author Jamie Ho (rewrite)
+ * @author Bhavesh Patel (Modified)
+ */
+public class PropertyWriterImpl extends AbstractMemberWriter
+    implements PropertyWriter, MemberSummaryWriter {
+
+    public PropertyWriterImpl(SubWriterHolderWriter writer, ClassDoc classdoc) {
+        super(writer, classdoc);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public Content getMemberSummaryHeader(ClassDoc classDoc,
+            Content memberSummaryTree) {
+        memberSummaryTree.addContent(HtmlConstants.START_OF_PROPERTY_SUMMARY);
+        Content memberTree = writer.getMemberTreeHeader();
+        writer.addSummaryHeader(this, classDoc, memberTree);
+        return memberTree;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public Content getFieldDetailsTreeHeader(ClassDoc classDoc,
+            Content memberDetailsTree) {
+        memberDetailsTree.addContent(HtmlConstants.START_OF_PROPERTY_DETAILS);
+        Content fieldDetailsTree = writer.getMemberTreeHeader();
+        fieldDetailsTree.addContent(writer.getMarkerAnchor("property_detail"));
+        Content heading = HtmlTree.HEADING(HtmlConstants.DETAILS_HEADING,
+                writer.propertyDetailsLabel);
+        fieldDetailsTree.addContent(heading);
+        return fieldDetailsTree;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public Content getFieldDocTreeHeader(MethodDoc field,
+            Content fieldDetailsTree) {
+        fieldDetailsTree.addContent(
+                writer.getMarkerAnchor(field.name()));
+        Content fieldDocTree = writer.getMemberTreeHeader();
+        Content heading = new HtmlTree(HtmlConstants.MEMBER_HEADING);
+        heading.addContent(field.name().substring(0, field.name().lastIndexOf("Property")));
+        fieldDocTree.addContent(heading);
+        return fieldDocTree;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public Content getSignature(MethodDoc field) {
+        return new Comment("property signature");
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void addDeprecated(MethodDoc field, Content fieldDocTree) {
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void addComments(MethodDoc field, Content fieldDocTree) {
+        ClassDoc holder = field.containingClass();
+        if (field.inlineTags().length > 0) {
+            if (holder.equals(classdoc) ||
+                    (! (holder.isPublic() || Util.isLinkable(holder, configuration())))) {
+                writer.addInlineComment(field, fieldDocTree);
+            } else {
+                Content link = new RawHtml(
+                        writer.getDocLink(LinkInfoImpl.CONTEXT_FIELD_DOC_COPY,
+                        holder, field,
+                        holder.isIncluded() ?
+                            holder.typeName() : holder.qualifiedTypeName(),
+                            false));
+                Content codeLink = HtmlTree.CODE(link);
+                Content strong = HtmlTree.STRONG(holder.isClass()?
+                   writer.descfrmClassLabel : writer.descfrmInterfaceLabel);
+                strong.addContent(writer.getSpace());
+                strong.addContent(codeLink);
+                fieldDocTree.addContent(HtmlTree.DIV(HtmlStyle.block, strong));
+                writer.addInlineComment(field, fieldDocTree);
+            }
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void addTags(MethodDoc field, Content fieldDocTree) {
+        writer.addTagsInfo(field, fieldDocTree);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public Content getFieldDetails(Content fieldDetailsTree) {
+        return getMemberTree(fieldDetailsTree);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public Content getFieldDoc(Content fieldDocTree,
+            boolean isLastContent) {
+        return getMemberTree(fieldDocTree, isLastContent);
+    }
+
+    /**
+     * Close the writer.
+     */
+    public void close() throws IOException {
+        writer.close();
+    }
+
+    public int getMemberKind() {
+        return VisibleMemberMap.PROPERTIES;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void addSummaryLabel(Content memberTree) {
+        Content label = HtmlTree.HEADING(HtmlConstants.SUMMARY_HEADING,
+                writer.getResource("doclet.Property_Summary"));
+        memberTree.addContent(label);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getTableSummary() {
+        return configuration().getText("doclet.Member_Table_Summary",
+                configuration().getText("doclet.Property_Summary"),
+                configuration().getText("doclet.properties"));
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getCaption() {
+        return configuration().getText("doclet.Properties");
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String[] getSummaryTableHeader(ProgramElementDoc member) {
+        String[] header = new String[] {
+            configuration().getText("doclet.Type"),
+            configuration().getText("doclet.0_and_1",
+                    configuration().getText("doclet.Property"),
+                    configuration().getText("doclet.Description"))
+        };
+        return header;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void addSummaryAnchor(ClassDoc cd, Content memberTree) {
+        memberTree.addContent(writer.getMarkerAnchor("property_summary"));
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void addInheritedSummaryAnchor(ClassDoc cd, Content inheritedTree) {
+        inheritedTree.addContent(writer.getMarkerAnchor(
+                "properties_inherited_from_class_" + configuration().getClassName(cd)));
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void addInheritedSummaryLabel(ClassDoc cd, Content inheritedTree) {
+        Content classLink = new RawHtml(writer.getPreQualifiedClassLink(
+                LinkInfoImpl.CONTEXT_MEMBER, cd, false));
+        Content label = new StringContent(cd.isClass() ?
+            configuration().getText("doclet.Properties_Inherited_From_Class") :
+            configuration().getText("doclet.Properties_Inherited_From_Interface"));
+        Content labelHeading = HtmlTree.HEADING(HtmlConstants.INHERITED_SUMMARY_HEADING,
+                label);
+        labelHeading.addContent(writer.getSpace());
+        labelHeading.addContent(classLink);
+        inheritedTree.addContent(labelHeading);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    protected void addSummaryLink(int context, ClassDoc cd, ProgramElementDoc member,
+            Content tdSummary) {
+        Content strong = HtmlTree.STRONG(new RawHtml(
+                writer.getDocLink(context,
+                        cd,
+                        (MemberDoc) member,
+                        member.name().substring(0, member.name().lastIndexOf("Property")),
+                        false,
+                        true)));
+
+        Content code = HtmlTree.CODE(strong);
+        tdSummary.addContent(code);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    protected void addInheritedSummaryLink(ClassDoc cd,
+            ProgramElementDoc member, Content linksTree) {
+        linksTree.addContent(new RawHtml(
+                writer.getDocLink(LinkInfoImpl.CONTEXT_MEMBER, cd, (MemberDoc)member,
+                ((member.name().lastIndexOf("Property") != -1) && Configuration.getJavafxJavadoc())
+                        ? member.name().substring(0, member.name().length() - "Property".length())
+                        : member.name(),
+                false, true)));
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    protected void addSummaryType(ProgramElementDoc member, Content tdSummaryType) {
+        MethodDoc method = (MethodDoc)member;
+        addModifierAndType(method, method.returnType(), tdSummaryType);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    protected Content getDeprecatedLink(ProgramElementDoc member) {
+        return writer.getDocLink(LinkInfoImpl.CONTEXT_MEMBER,
+                (MemberDoc) member, ((MethodDoc)member).qualifiedName());
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    protected Content getNavSummaryLink(ClassDoc cd, boolean link) {
+        if (link) {
+            return writer.getHyperLink("", (cd == null)?
+                "property_summary":
+                "properties_inherited_from_class_" +
+                configuration().getClassName(cd),
+                writer.getResource("doclet.navProperty"));
+        } else {
+            return writer.getResource("doclet.navProperty");
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    protected void addNavDetailLink(boolean link, Content liNav) {
+        if (link) {
+            liNav.addContent(writer.getHyperLink("", "property_detail",
+                    writer.getResource("doclet.navProperty")));
+        } else {
+            liNav.addContent(writer.getResource("doclet.navProperty"));
+        }
+    }
+}
--- a/src/share/classes/com/sun/tools/doclets/formats/html/WriterFactoryImpl.java	Tue Jul 31 23:11:41 2012 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/WriterFactoryImpl.java	Sun Aug 12 15:20:32 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -119,6 +119,15 @@
     /**
      * {@inheritDoc}
      */
+    public PropertyWriter getPropertyWriter(ClassWriter classWriter)
+            throws Exception {
+        return new PropertyWriterImpl((SubWriterHolderWriter) classWriter,
+            classWriter.getClassDoc());
+    }
+
+    /**
+     * {@inheritDoc}
+     */
     public  MethodWriter getMethodWriter(ClassWriter classWriter)
             throws Exception {
         return new MethodWriterImpl((SubWriterHolderWriter) classWriter,
@@ -147,6 +156,8 @@
                 return (EnumConstantWriterImpl) getEnumConstantWriter(classWriter);
             case VisibleMemberMap.FIELDS:
                 return (FieldWriterImpl) getFieldWriter(classWriter);
+            case VisibleMemberMap.PROPERTIES:
+                return (PropertyWriterImpl) getPropertyWriter(classWriter);
             case VisibleMemberMap.INNERCLASSES:
                 return new NestedClassWriterImpl((SubWriterHolderWriter)
                     classWriter, classWriter.getClassDoc());
--- a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlConstants.java	Tue Jul 31 23:11:41 2012 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlConstants.java	Sun Aug 12 15:20:32 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -107,6 +107,12 @@
             new Comment("=========== FIELD SUMMARY ===========");
 
     /**
+     * Marker to identify start of properties summary.
+     */
+    public static final Content START_OF_PROPERTY_SUMMARY =
+            new Comment("=========== PROPERTY SUMMARY ===========");
+
+    /**
      * Marker to identify start of method summary.
      */
     public static final Content START_OF_METHOD_SUMMARY =
@@ -131,6 +137,12 @@
             new Comment("============ FIELD DETAIL ===========");
 
     /**
+     * Marker to identify start of property details.
+     */
+    public static final Content START_OF_PROPERTY_DETAILS =
+            new Comment("============ PROPERTY DETAIL ===========");
+
+    /**
      * Marker to identify start of constructor details.
      */
     public static final Content START_OF_CONSTRUCTOR_DETAILS =
--- a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java	Tue Jul 31 23:11:41 2012 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java	Sun Aug 12 15:20:32 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -136,6 +136,8 @@
 
     public final Content fieldDetailsLabel;
 
+    public final Content propertyDetailsLabel;
+
     public final Content constructorDetailsLabel;
 
     public final Content enumConstantsDetailsLabel;
@@ -205,6 +207,7 @@
         methodDetailsLabel = getResource("doclet.Method_Detail");
         annotationTypeDetailsLabel = getResource("doclet.Annotation_Type_Member_Detail");
         fieldDetailsLabel = getResource("doclet.Field_Detail");
+        propertyDetailsLabel = getResource("doclet.Property_Detail");
         constructorDetailsLabel = getResource("doclet.Constructor_Detail");
         enumConstantsDetailsLabel = getResource("doclet.Enum_Constant_Detail");
         specifiedByLabel = getResource("doclet.Specified_By");
--- a/src/share/classes/com/sun/tools/doclets/formats/html/resources/standard.properties	Tue Jul 31 23:11:41 2012 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/resources/standard.properties	Sun Aug 12 15:20:32 2012 -0700
@@ -32,6 +32,7 @@
 doclet.navAnnotationTypeRequiredMember=Required
 doclet.navAnnotationTypeMember=Element
 doclet.navField=Field
+doclet.navProperty=Property
 doclet.navEnum=Enum Constants
 doclet.navConstructor=Constr
 doclet.navMethod=Method
@@ -40,6 +41,7 @@
 doclet.Window_Split_Index={0}-Index
 doclet.Help=Help
 doclet.Skip_navigation_links=Skip navigation links
+doclet.Navigation=Navigation
 doclet.New_Page=NewPage
 doclet.None=None
 doclet.Factory_Method_Detail=Static Factory Method Detail
@@ -189,7 +191,9 @@
 doclet.ClassUse_TypeParameter=Classes in {1} with type parameters of type {0}
 doclet.ClassUse_MethodTypeParameter=Methods in {1} with type parameters of type {0}
 doclet.ClassUse_FieldTypeParameter=Fields in {1} with type parameters of type {0}
+doclet.ClassUse_PropertyTypeParameter=Properties in {1} with type parameters of type {0}
 doclet.ClassUse_FieldAnnotations=Fields in {1} with annotations of type {0}
+doclet.ClassUse_PropertyAnnotations=Properties in {1} with annotations of type {0}
 doclet.ClassUse_MethodAnnotations=Methods in {1} with annotations of type {0}
 doclet.ClassUse_MethodParameterAnnotations=Method parameters in {1} with annotations of type {0}
 doclet.ClassUse_MethodReturnTypeParameter=Methods in {1} that return types with arguments of type {0}
--- a/src/share/classes/com/sun/tools/doclets/formats/html/resources/standard_ja.properties	Tue Jul 31 23:11:41 2012 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/resources/standard_ja.properties	Sun Aug 12 15:20:32 2012 -0700
@@ -32,6 +32,7 @@
 doclet.navAnnotationTypeRequiredMember=\u5FC5\u9808
 doclet.navAnnotationTypeMember=\u8981\u7D20
 doclet.navField=\u30D5\u30A3\u30FC\u30EB\u30C9
+doclet.navProperty=\u30D7\u30ED\u30D1\u30C6\u30A3
 doclet.navEnum=\u5217\u6319\u5B9A\u6570
 doclet.navConstructor=\u30B3\u30F3\u30B9\u30C8\u30E9\u30AF\u30BF
 doclet.navMethod=\u30E1\u30BD\u30C3\u30C9
@@ -40,6 +41,7 @@
 doclet.Window_Split_Index={0}\u306E\u7D22\u5F15
 doclet.Help=\u30D8\u30EB\u30D7
 doclet.Skip_navigation_links=\u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3\u30FB\u30EA\u30F3\u30AF\u3092\u30B9\u30AD\u30C3\u30D7
+doclet.Navigation=\u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3
 doclet.New_Page=NewPage
 doclet.None=\u306A\u3057
 doclet.Factory_Method_Detail=static\u30D5\u30A1\u30AF\u30C8\u30EA\u30FB\u30E1\u30BD\u30C3\u30C9\u306E\u8A73\u7D30
@@ -189,7 +191,9 @@
 doclet.ClassUse_TypeParameter={0}\u578B\u306E\u578B\u30D1\u30E9\u30E1\u30FC\u30BF\u3092\u6301\u3064{1}\u306E\u30AF\u30E9\u30B9
 doclet.ClassUse_MethodTypeParameter={0}\u578B\u306E\u578B\u30D1\u30E9\u30E1\u30FC\u30BF\u3092\u6301\u3064{1}\u306E\u30E1\u30BD\u30C3\u30C9
 doclet.ClassUse_FieldTypeParameter={0}\u578B\u306E\u578B\u30D1\u30E9\u30E1\u30FC\u30BF\u3092\u6301\u3064{1}\u306E\u30D5\u30A3\u30FC\u30EB\u30C9
+doclet.ClassUse_PropertyTypeParameter={0}\u578B\u306E\u578B\u30D1\u30E9\u30E1\u30FC\u30BF\u3092\u6301\u3064{1}\u306E\u30D7\u30ED\u30D1\u30C6\u30A3
 doclet.ClassUse_FieldAnnotations={0}\u578B\u306E\u6CE8\u91C8\u3092\u6301\u3064{1}\u306E\u30D5\u30A3\u30FC\u30EB\u30C9
+doclet.ClassUse_PropertyAnnotations={0}\u578B\u306E\u6CE8\u91C8\u3092\u6301\u3064{1}\u306E\u30D7\u30ED\u30D1\u30C6\u30A3
 doclet.ClassUse_MethodAnnotations={0}\u578B\u306E\u6CE8\u91C8\u3092\u6301\u3064{1}\u306E\u30E1\u30BD\u30C3\u30C9
 doclet.ClassUse_MethodParameterAnnotations={0}\u578B\u306E\u6CE8\u91C8\u3092\u6301\u3064{1}\u306E\u30E1\u30BD\u30C3\u30C9\u30FB\u30D1\u30E9\u30E1\u30FC\u30BF
 doclet.ClassUse_MethodReturnTypeParameter={0}\u578B\u306E\u5F15\u6570\u3092\u6301\u3064\u578B\u3092\u8FD4\u3059{1}\u306E\u30E1\u30BD\u30C3\u30C9
--- a/src/share/classes/com/sun/tools/doclets/formats/html/resources/standard_zh_CN.properties	Tue Jul 31 23:11:41 2012 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/resources/standard_zh_CN.properties	Sun Aug 12 15:20:32 2012 -0700
@@ -32,6 +32,7 @@
 doclet.navAnnotationTypeRequiredMember=\u5FC5\u9700
 doclet.navAnnotationTypeMember=\u5143\u7D20
 doclet.navField=\u5B57\u6BB5
+doclet.navProperty=\u5C5E\u6027
 doclet.navEnum=\u679A\u4E3E\u5E38\u91CF
 doclet.navConstructor=\u6784\u9020\u5668
 doclet.navMethod=\u65B9\u6CD5
@@ -40,6 +41,7 @@
 doclet.Window_Split_Index={0} - \u7D22\u5F15
 doclet.Help=\u5E2E\u52A9
 doclet.Skip_navigation_links=\u8DF3\u8FC7\u5BFC\u822A\u94FE\u63A5
+doclet.Navigation=\u5BFC\u822A
 doclet.New_Page=NewPage
 doclet.None=\u65E0
 doclet.Factory_Method_Detail=\u9759\u6001\u5DE5\u5382\u65B9\u6CD5\u8BE6\u7EC6\u8D44\u6599
@@ -189,7 +191,9 @@
 doclet.ClassUse_TypeParameter=\u7C7B\u578B\u53C2\u6570\u7C7B\u578B\u4E3A{0}\u7684{1}\u4E2D\u7684\u7C7B
 doclet.ClassUse_MethodTypeParameter=\u7C7B\u578B\u53C2\u6570\u7C7B\u578B\u4E3A{0}\u7684{1}\u4E2D\u7684\u65B9\u6CD5
 doclet.ClassUse_FieldTypeParameter=\u7C7B\u578B\u53C2\u6570\u7C7B\u578B\u4E3A{0}\u7684{1}\u4E2D\u7684\u5B57\u6BB5
+doclet.ClassUse_PropertyTypeParameter=\u7C7B\u578B\u53C2\u6570\u7C7B\u578B\u4E3A{0}\u7684{1}\u4E2D\u7684\u5C5E\u6027
 doclet.ClassUse_FieldAnnotations=\u6CE8\u91CA\u7C7B\u578B\u4E3A{0}\u7684{1}\u4E2D\u7684\u5B57\u6BB5
+doclet.ClassUse_PropertyAnnotations=\u6CE8\u91CA\u7C7B\u578B\u4E3A{0}\u7684{1}\u4E2D\u7684\u5C5E\u6027
 doclet.ClassUse_MethodAnnotations=\u6CE8\u91CA\u7C7B\u578B\u4E3A{0}\u7684{1}\u4E2D\u7684\u65B9\u6CD5
 doclet.ClassUse_MethodParameterAnnotations=\u6CE8\u91CA\u7C7B\u578B\u4E3A{0}\u7684{1}\u4E2D\u7684\u65B9\u6CD5\u53C2\u6570
 doclet.ClassUse_MethodReturnTypeParameter=\u8FD4\u56DE\u53D8\u91CF\u7C7B\u578B\u4E3A{0}\u7684\u7C7B\u578B\u7684{1}\u4E2D\u7684\u65B9\u6CD5
--- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/Configuration.java	Tue Jul 31 23:11:41 2012 -0700
+++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/Configuration.java	Sun Aug 12 15:20:32 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -221,6 +221,19 @@
     public final Extern extern = new Extern(this);
 
     /**
+     * Returns true if the user wants to generate JavaFX documentation.
+     */
+    public static boolean getJavafxJavadoc() {
+        return Boolean.getBoolean("javafx.javadoc");
+    }
+
+    /**
+     * Location of doclet properties file.
+     */
+    public static final String DOCLETS_RESOURCE
+            = "com.sun.tools.doclets.internal.toolkit.resources.doclets";
+
+    /**
      * Return the build date for the doclet.
      */
     public abstract String getDocletSpecificBuildDate();
@@ -253,8 +266,7 @@
      */
     public Configuration() {
         message =
-            new MessageRetriever(this,
-            "com.sun.tools.doclets.internal.toolkit.resources.doclets");
+            new MessageRetriever(this, DOCLETS_RESOURCE);
         excludedDocFileDirs = new HashSet<String>();
         excludedQualifiers = new HashSet<String>();
     }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/PropertyWriter.java	Sun Aug 12 15:20:32 2012 -0700
@@ -0,0 +1,118 @@
+/*
+ * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package com.sun.tools.doclets.internal.toolkit;
+
+import java.io.*;
+import com.sun.javadoc.*;
+
+/**
+ * The interface for writing field output.
+ *
+ * This code is not part of an API.
+ * It is implementation that is subject to change.
+ * Do not use it as an API
+ *
+ * @author Jamie Ho
+ * @author Bhavesh Patel (Modified)
+ * @since 1.5
+ */
+
+public interface PropertyWriter {
+
+    /**
+     * Get the field details tree header.
+     *
+     * @param classDoc the class being documented
+     * @param memberDetailsTree the content tree representing member details
+     * @return content tree for the field details header
+     */
+    public Content getFieldDetailsTreeHeader(ClassDoc classDoc,
+            Content memberDetailsTree);
+
+    /**
+     * Get the field documentation tree header.
+     *
+     * @param field the constructor being documented
+     * @param fieldDetailsTree the content tree representing field details
+     * @return content tree for the field documentation header
+     */
+    public Content getFieldDocTreeHeader(MethodDoc field,
+            Content fieldDetailsTree);
+
+    /**
+     * Get the signature for the given field.
+     *
+     * @param field the field being documented
+     * @return content tree for the field signature
+     */
+    public Content getSignature(MethodDoc field);
+
+    /**
+     * Add the deprecated output for the given field.
+     *
+     * @param field the field being documented
+     * @param fieldDocTree content tree to which the deprecated information will be added
+     */
+    public void addDeprecated(MethodDoc field, Content fieldDocTree);
+
+    /**
+     * Add the comments for the given field.
+     *
+     * @param field the field being documented
+     * @param fieldDocTree the content tree to which the comments will be added
+     */
+    public void addComments(MethodDoc field, Content fieldDocTree);
+
+    /**
+     * Add the tags for the given field.
+     *
+     * @param field the field being documented
+     * @param fieldDocTree the content tree to which the tags will be added
+     */
+    public void addTags(MethodDoc field, Content fieldDocTree);
+
+    /**
+     * Get the field details tree.
+     *
+     * @param memberDetailsTree the content tree representing member details
+     * @return content tree for the field details
+     */
+    public Content getFieldDetails(Content memberDetailsTree);
+
+    /**
+     * Get the field documentation.
+     *
+     * @param fieldDocTree the content tree representing field documentation
+     * @param isLastContent true if the content to be added is the last content
+     * @return content tree for the field documentation
+     */
+    public Content getFieldDoc(Content fieldDocTree, boolean isLastContent);
+
+    /**
+     * Close the writer.
+     */
+    public void close() throws IOException;
+}
--- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/WriterFactory.java	Tue Jul 31 23:11:41 2012 -0700
+++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/WriterFactory.java	Sun Aug 12 15:20:32 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -146,6 +146,16 @@
             throws Exception;
 
     /**
+     * Return the property writer for a given class.
+     *
+     * @param classWriter the writer for the class being documented.
+     * @return the property writer for the give class.  Return null if this
+     * writer is not supported by the doclet.
+     */
+    public abstract PropertyWriter getPropertyWriter(ClassWriter classWriter)
+            throws Exception;
+
+    /**
      * Return the constructor writer for a given class.
      *
      * @param classWriter the writer for the class being documented.
--- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/BuilderFactory.java	Tue Jul 31 23:11:41 2012 -0700
+++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/BuilderFactory.java	Sun Aug 12 15:20:32 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -188,6 +188,19 @@
     }
 
     /**
+     * Return an instance of the property builder for the given class.
+     *
+     * @return an instance of the field builder for the given class.
+     */
+    public AbstractBuilder getPropertyBuilder(ClassWriter classWriter) throws Exception {
+        final PropertyWriter propertyWriter =
+                writerFactory.getPropertyWriter(classWriter);
+        return PropertyBuilder.getInstance(configuration,
+                                           classWriter.getClassDoc(),
+                                           propertyWriter);
+    }
+
+    /**
      * Return an instance of the constructor builder for the given class.
      *
      * @return an instance of the constructor builder for the given class.
--- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ClassBuilder.java	Tue Jul 31 23:11:41 2012 -0700
+++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ClassBuilder.java	Sun Aug 12 15:20:32 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -372,6 +372,17 @@
     }
 
     /**
+     * Build the property documentation.
+     *
+     * @param elements the XML elements that specify how a field is documented.
+     */
+    public void buildPropertyDetails(XMLNode node,
+            Content memberDetailsTree) throws Exception {
+        configuration.getBuilderFactory().
+                getPropertyBuilder(writer).buildChildren(node, memberDetailsTree);
+    }
+
+    /**
      * Build the constructor documentation.
      *
      * @param node the XML element that specifies which components to document
--- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MemberSummaryBuilder.java	Tue Jul 31 23:11:41 2012 -0700
+++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MemberSummaryBuilder.java	Sun Aug 12 15:20:32 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,6 +29,7 @@
 import com.sun.tools.doclets.internal.toolkit.util.*;
 import com.sun.tools.doclets.internal.toolkit.*;
 import com.sun.javadoc.*;
+import java.text.MessageFormat;
 
 /**
  * Builds the member summary.
@@ -249,6 +250,17 @@
     }
 
     /**
+     * Build the summary for the fields.
+     */
+    public void buildPropertiesSummary(XMLNode node, Content memberSummaryTree) {
+        MemberSummaryWriter writer =
+                memberSummaryWriters[VisibleMemberMap.PROPERTIES];
+        VisibleMemberMap visibleMemberMap =
+                visibleMemberMaps[VisibleMemberMap.PROPERTIES];
+        addSummary(writer, visibleMemberMap, true, memberSummaryTree);
+    }
+
+    /**
      * Build the summary for the nested classes.
      *
      * @param node the XML element that specifies which components to document
@@ -306,6 +318,11 @@
             Content tableTree = writer.getSummaryTableTree(classDoc);
             for (int i = 0; i < members.size(); i++) {
                 ProgramElementDoc member = members.get(i);
+                final ProgramElementDoc propertyDoc =
+                            visibleMemberMap.getPropertyMemberDoc(member);
+                if (propertyDoc != null) {
+                    processProperty(visibleMemberMap, member, propertyDoc);
+                }
                 Tag[] firstSentenceTags = member.firstSentenceTags();
                 if (member instanceof MethodDoc && firstSentenceTags.length == 0) {
                     //Inherit comments from overriden or implemented method if
@@ -324,6 +341,106 @@
     }
 
     /**
+     * Process the property method, property setter and/or property getter
+     * comment text so that it contains the documentation from
+     * the property field. The method adds the leading sentence,
+     * copied documentation including the defaultValue tag and
+     * the see tags if the appropriate property getter and setter are
+     * available.
+     *
+     * @param visibleMemberMap the members information.
+     * @param member the member which is to be augmented.
+     * @param propertyDoc the original property documentation.
+     */
+    private void processProperty(VisibleMemberMap visibleMemberMap,
+                                 ProgramElementDoc member,
+                                 ProgramElementDoc propertyDoc) {
+        StringBuilder commentTextBuilder = new StringBuilder();
+        final boolean isSetter = isSetter(member);
+        final boolean isGetter = isGetter(member);
+        if (isGetter || isSetter) {
+            //add "[GS]ets the value of the property PROPERTY_NAME."
+            if (isSetter) {
+                commentTextBuilder.append(
+                        MessageFormat.format(
+                                Util.RESOURCE_BUNDLE.getString("doclet.PropertySetterWithName"),
+                                Util.propertyNameFromMethodName(member.name())));
+            }
+            if (isGetter) {
+                commentTextBuilder.append(
+                        MessageFormat.format(
+                                Util.RESOURCE_BUNDLE.getString("doclet.PropertyGetterWithName"),
+                                Util.propertyNameFromMethodName(member.name())));
+            }
+            if (propertyDoc.commentText() != null
+                        && !propertyDoc.commentText().isEmpty()) {
+                commentTextBuilder.append(" \n @propertyDescription ");
+            }
+        }
+        commentTextBuilder.append(propertyDoc.commentText());
+
+        Tag[] tags = propertyDoc.tags("@defaultValue");
+        if (tags != null) {
+            for (Tag tag: tags) {
+                commentTextBuilder.append("\n")
+                                  .append(tag.name())
+                                  .append(" ")
+                                  .append(tag.text());
+            }
+        }
+
+        //add @see tags
+        if (!isGetter && !isSetter) {
+            MethodDoc getter = (MethodDoc) visibleMemberMap.getGetterForProperty(member);
+            MethodDoc setter = (MethodDoc) visibleMemberMap.getSetterForProperty(member);
+
+            if ((null != getter)
+                    && (commentTextBuilder.indexOf("@see #" + getter.name()) == -1)) {
+                commentTextBuilder.append("\n @see #")
+                                  .append(getter.name())
+                                  .append("() ");
+            }
+
+            if ((null != setter)
+                    && (commentTextBuilder.indexOf("@see #" + setter.name()) == -1)) {
+                String typeName = setter.parameters()[0].typeName();
+                // Removal of type parameters and package information.
+                typeName = typeName.split("<")[0];
+                if (typeName.contains(".")) {
+                    typeName = typeName.substring(typeName.lastIndexOf(".") + 1);
+                }
+                commentTextBuilder.append("\n @see #").append(setter.name());
+
+                if (setter.parameters()[0].type().asTypeVariable() == null) {
+                    commentTextBuilder.append("(").append(typeName).append(")");
+                }
+                commentTextBuilder.append(" \n");
+            }
+        }
+        member.setRawCommentText(commentTextBuilder.toString());
+    }
+    /**
+     * Test whether the method is a getter.
+     * @param ped property method documentation. Needs to be either property
+     * method, property getter, or property setter.
+     * @return true if the given documentation belongs to a getter.
+     */
+    private boolean isGetter(ProgramElementDoc ped) {
+        final String pedName = ped.name();
+        return pedName.startsWith("get") || pedName.startsWith("is");
+    }
+
+    /**
+     * Test whether the method is a setter.
+     * @param ped property method documentation. Needs to be either property
+     * method, property getter, or property setter.
+     * @return true if the given documentation belongs to a setter.
+     */
+    private boolean isSetter(ProgramElementDoc ped) {
+        return ped.name().startsWith("set");
+    }
+
+    /**
      * Build the inherited member summary for the given methods.
      *
      * @param writer the writer for this member summary.
--- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/PackageSummaryBuilder.java	Tue Jul 31 23:11:41 2012 -0700
+++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/PackageSummaryBuilder.java	Sun Aug 12 15:20:32 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,10 +25,13 @@
 
 package com.sun.tools.doclets.internal.toolkit.builders;
 
-import java.io.*;
 import com.sun.javadoc.*;
+import com.sun.tools.doclets.internal.toolkit.*;
 import com.sun.tools.doclets.internal.toolkit.util.*;
-import com.sun.tools.doclets.internal.toolkit.*;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * Builds the summary for a given package.
@@ -173,6 +176,7 @@
                         ? packageDoc.interfaces()
                         : configuration.classDocCatalog.interfaces(
                                 Util.getPackageName(packageDoc));
+        interfaces = filterOutPrivateClasses(interfaces);
         if (interfaces.length > 0) {
             packageWriter.addClassesSummary(
                     interfaces,
@@ -202,6 +206,7 @@
                         ? packageDoc.ordinaryClasses()
                         : configuration.classDocCatalog.ordinaryClasses(
                                 Util.getPackageName(packageDoc));
+        classes = filterOutPrivateClasses(classes);
         if (classes.length > 0) {
             packageWriter.addClassesSummary(
                     classes,
@@ -231,6 +236,7 @@
                         ? packageDoc.enums()
                         : configuration.classDocCatalog.enums(
                                 Util.getPackageName(packageDoc));
+        enums = filterOutPrivateClasses(enums);
         if (enums.length > 0) {
             packageWriter.addClassesSummary(
                     enums,
@@ -260,6 +266,7 @@
                         ? packageDoc.exceptions()
                         : configuration.classDocCatalog.exceptions(
                                 Util.getPackageName(packageDoc));
+        exceptions = filterOutPrivateClasses(exceptions);
         if (exceptions.length > 0) {
             packageWriter.addClassesSummary(
                     exceptions,
@@ -289,6 +296,7 @@
                         ? packageDoc.errors()
                         : configuration.classDocCatalog.errors(
                                 Util.getPackageName(packageDoc));
+        errors = filterOutPrivateClasses(errors);
         if (errors.length > 0) {
             packageWriter.addClassesSummary(
                     errors,
@@ -318,6 +326,7 @@
                         ? packageDoc.annotationTypes()
                         : configuration.classDocCatalog.annotationTypes(
                                 Util.getPackageName(packageDoc));
+        annotationTypes = filterOutPrivateClasses(annotationTypes);
         if (annotationTypes.length > 0) {
             packageWriter.addClassesSummary(
                     annotationTypes,
@@ -353,4 +362,25 @@
         }
         packageWriter.addPackageTags(packageContentTree);
     }
+
+    static public ClassDoc[] filterOutPrivateClasses(final ClassDoc[] classes) {
+        if (!Configuration.getJavafxJavadoc()) {
+            return classes;
+        }
+        final List<ClassDoc> filteredOutClasses =
+                new ArrayList<ClassDoc>(classes.length);
+        for (ClassDoc classDoc : classes) {
+            if (classDoc.isPrivate() || classDoc.isPackagePrivate()) {
+                continue;
+            }
+            Tag[] aspTags = classDoc.tags("treatAsPrivate");
+            if (aspTags != null && aspTags.length > 0) {
+                continue;
+            }
+            filteredOutClasses.add(classDoc);
+        }
+
+        return filteredOutClasses.toArray(new ClassDoc[0]);
+    }
+
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/PropertyBuilder.java	Sun Aug 12 15:20:32 2012 -0700
@@ -0,0 +1,227 @@
+/*
+ * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package com.sun.tools.doclets.internal.toolkit.builders;
+
+import java.util.*;
+import com.sun.tools.doclets.internal.toolkit.util.*;
+import com.sun.tools.doclets.internal.toolkit.*;
+import com.sun.javadoc.*;
+
+/**
+ * Builds documentation for a field.
+ *
+ * This code is not part of an API.
+ * It is implementation that is subject to change.
+ * Do not use it as an API
+ *
+ * @author Jamie Ho
+ * @author Bhavesh Patel (Modified)
+ * @since 1.5
+ */
+public class PropertyBuilder extends AbstractMemberBuilder {
+
+    /**
+     * The class whose fields are being documented.
+     */
+    private ClassDoc classDoc;
+
+    /**
+     * The visible fields for the given class.
+     */
+    private VisibleMemberMap visibleMemberMap;
+
+    /**
+     * The writer to output the field documentation.
+     */
+    private PropertyWriter writer;
+
+    /**
+     * The list of fields being documented.
+     */
+    private List<ProgramElementDoc> fields;
+
+    /**
+     * The index of the current field that is being documented at this point
+     * in time.
+     */
+    private int currentFieldIndex;
+
+    /**
+     * Construct a new FieldBuilder.
+     *
+     * @param configuration the current configuration of the
+     *                      doclet.
+     */
+    private PropertyBuilder(Configuration configuration) {
+        super(configuration);
+    }
+
+    /**
+     * Construct a new FieldBuilder.
+     *
+     * @param configuration the current configuration of the doclet.
+     * @param classDoc the class whoses members are being documented.
+     * @param writer the doclet specific writer.
+     */
+    public static PropertyBuilder getInstance(
+            Configuration configuration,
+            ClassDoc classDoc,
+            PropertyWriter writer) {
+        PropertyBuilder builder = new PropertyBuilder(configuration);
+        builder.classDoc = classDoc;
+        builder.writer = writer;
+        builder.visibleMemberMap =
+                new VisibleMemberMap(
+                classDoc,
+                VisibleMemberMap.PROPERTIES,
+                configuration.nodeprecated);
+        builder.fields = new ArrayList<ProgramElementDoc>(
+                              builder.visibleMemberMap.getMembersFor(classDoc));
+        if (configuration.getMemberComparator() != null) {
+            Collections.sort(
+                    builder.fields,
+                    configuration.getMemberComparator());
+        }
+        return builder;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getName() {
+        return "PropertyDetails";
+    }
+
+    /**
+     * Returns a list of fields that will be documented for the given class.
+     * This information can be used for doclet specific documentation
+     * generation.
+     *
+     * @param classDoc the {@link ClassDoc} we want to check.
+     * @return a list of fields that will be documented.
+     */
+    public List<ProgramElementDoc> members(ClassDoc classDoc) {
+        return visibleMemberMap.getMembersFor(classDoc);
+    }
+
+    /**
+     * Returns the visible member map for the fields of this class.
+     *
+     * @return the visible member map for the fields of this class.
+     */
+    public VisibleMemberMap getVisibleMemberMap() {
+        return visibleMemberMap;
+    }
+
+    /**
+     * summaryOrder.size()
+     */
+    public boolean hasMembersToDocument() {
+        return fields.size() > 0;
+    }
+
+    /**
+     * Build the field documentation.
+     *
+     * @param node the XML element that specifies which components to document
+     * @param memberDetailsTree the content tree to which the documentation will be added
+     */
+    public void buildPropertyDoc(XMLNode node, Content memberDetailsTree) {
+        if (writer == null) {
+            return;
+        }
+        int size = fields.size();
+        if (size > 0) {
+            Content fieldDetailsTree = writer.getFieldDetailsTreeHeader(
+                    classDoc, memberDetailsTree);
+            for (currentFieldIndex = 0; currentFieldIndex < size;
+                    currentFieldIndex++) {
+                Content fieldDocTree = writer.getFieldDocTreeHeader(
+                        (MethodDoc) fields.get(currentFieldIndex),
+                        fieldDetailsTree);
+                buildChildren(node, fieldDocTree);
+                fieldDetailsTree.addContent(writer.getFieldDoc(
+                        fieldDocTree, (currentFieldIndex == size - 1)));
+            }
+            memberDetailsTree.addContent(
+                    writer.getFieldDetails(fieldDetailsTree));
+        }
+    }
+
+    /**
+     * Build the signature.
+     *
+     * @param node the XML element that specifies which components to document
+     * @param fieldDocTree the content tree to which the documentation will be added
+     */
+    public void buildSignature(XMLNode node, Content fieldDocTree) {
+        fieldDocTree.addContent(
+                writer.getSignature((MethodDoc) fields.get(currentFieldIndex)));
+    }
+
+    /**
+     * Build the deprecation information.
+     *
+     * @param node the XML element that specifies which components to document
+     * @param fieldDocTree the content tree to which the documentation will be added
+     */
+    public void buildDeprecationInfo(XMLNode node, Content fieldDocTree) {
+        writer.addDeprecated(
+                (MethodDoc) fields.get(currentFieldIndex), fieldDocTree);
+    }
+
+    /**
+     * Build the comments for the field.  Do nothing if
+     * {@link Configuration#nocomment} is set to true.
+     *
+     * @param node the XML element that specifies which components to document
+     * @param fieldDocTree the content tree to which the documentation will be added
+     */
+    public void buildPropertyComments(XMLNode node, Content fieldDocTree) {
+        if (!configuration.nocomment) {
+            writer.addComments((MethodDoc) fields.get(currentFieldIndex), fieldDocTree);
+        }
+    }
+
+    /**
+     * Build the tag information.
+     *
+     * @param node the XML element that specifies which components to document
+     * @param fieldDocTree the content tree to which the documentation will be added
+     */
+    public void buildTagInfo(XMLNode node, Content fieldDocTree) {
+        writer.addTags((MethodDoc) fields.get(currentFieldIndex), fieldDocTree);
+    }
+
+    /**
+     * Return the field writer for this builder.
+     *
+     * @return the field writer for this builder.
+     */
+    public PropertyWriter getWriter() {
+        return writer;
+    }
+}
--- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclet.xml	Tue Jul 31 23:11:41 2012 -0700
+++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclet.xml	Sun Aug 12 15:20:32 2012 -0700
@@ -1,7 +1,7 @@
 <?xml version='1.0' encoding='utf-8'?>
 
 <!--
- Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 
  This code is free software; you can redistribute it and/or modify it
@@ -91,6 +91,7 @@
             <ClassTagInfo/>
         </ClassInfo>
         <MemberSummary>
+            <PropertiesSummary/>
             <NestedClassesSummary/>
             <EnumConstantsSummary/>
             <FieldsSummary/>
@@ -106,6 +107,12 @@
                     <TagInfo/>
                 </EnumConstant>
             </EnumConstantsDetails>
+            <PropertyDetails>
+                <PropertyDoc>
+                    <PropertyComments/>
+                    <TagInfo/>
+                </PropertyDoc>
+            </PropertyDetails>
             <FieldDetails>
                 <FieldDoc>
                     <Signature/>
--- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets.properties	Tue Jul 31 23:11:41 2012 -0700
+++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets.properties	Sun Aug 12 15:20:32 2012 -0700
@@ -6,6 +6,7 @@
 doclet.Serialized_Form=Serialized Form
 doclet.Serialized_Form_methods=Serialization Methods
 doclet.Serialized_Form_fields=Serialized Fields
+doclet.Serialized_Form_properties=Serialized Properties
 doclet.Serialized_Form_class=Serialization Overview
 doclet.Class_0_implements_serializable=Class {0} implements Serializable
 doclet.Class_0_extends_implements_serializable=Class {0} extends {1} implements Serializable
@@ -39,6 +40,12 @@
 doclet.Error_taglet_not_registered=Error - Exception {0} thrown while trying to register Taglet {1}...
 doclet.Error_invalid_custom_tag_argument=Error - {0} is an invalid argument to the -tag option...
 doclet.Author=Author:
+doclet.DefaultValue=Default value:
+doclet.PropertyDescription=Property description:
+doclet.PropertyGetter=Gets the value of the property
+doclet.PropertySetter=Sets the value of the property
+doclet.PropertyGetterWithName=Gets the value of the property {0}.
+doclet.PropertySetterWithName=Sets the value of the property {0}.
 doclet.Default=Default:
 doclet.Parameters=Parameters:
 doclet.TypeParameters=Type Parameters:
@@ -60,6 +67,7 @@
 doclet.noInheritedDoc=@inheritDoc used but {0} does not override or implement any method.
 doclet.malformed_html_link_tag=<a> tag is malformed:\n"{0}"
 doclet.tag_misuse=Tag {0} cannot be used in {1} documentation.  It can only be used in the following types of documentation: {2}.
+doclet.javafx_tag_misuse=Tags @propertyGetter, @propertySetter and @propertyDescription can only be used in JavaFX properties getters and setters.
 doclet.Package_Summary=Package Summary
 doclet.Interface_Summary=Interface Summary
 doclet.Annotation_Types_Summary=Annotation Types Summary
@@ -71,6 +79,7 @@
 doclet.Annotation_Type_Optional_Member_Summary=Optional Element Summary
 doclet.Annotation_Type_Required_Member_Summary=Required Element Summary
 doclet.Field_Summary=Field Summary
+doclet.Property_Summary=Property Summary
 doclet.Enum_Constant_Summary=Enum Constant Summary
 doclet.Constructor_Summary=Constructor Summary
 doclet.Method_Summary=Method Summary
@@ -117,12 +126,15 @@
 doclet.Methods_Inherited_From_Interface=Methods inherited from interface
 doclet.Fields_Inherited_From_Class=Fields inherited from class
 doclet.Fields_Inherited_From_Interface=Fields inherited from interface
+doclet.Properties_Inherited_From_Class=Properties inherited from class
+doclet.Properties_Inherited_From_Interface=Properties inherited from interface
 doclet.Serializable=Serializable
 doclet.Externalizable=Externalizable
 doclet.Annotation_Type_Member_Detail=Element Detail
 doclet.Enum_Constant_Detail=Enum Constant Detail
 doclet.Constants_Summary=Constant Field Values
 doclet.Field_Detail=Field Detail
+doclet.Property_Detail=Property Detail
 doclet.Method_Detail=Method Detail
 doclet.Constructor_Detail=Constructor Detail
 doclet.Deprecated=Deprecated.
@@ -137,6 +149,8 @@
 doclet.Member_Table_Summary={0} table, listing {1}, and an explanation
 doclet.fields=fields
 doclet.Fields=Fields
+doclet.properties=properties
+doclet.Properties=Properties
 doclet.constructors=constructors
 doclet.Constructors=Constructors
 doclet.methods=methods
@@ -154,6 +168,7 @@
 doclet.Modifier=Modifier
 doclet.Type=Type
 doclet.Field=Field
+doclet.Property=Property
 doclet.Constructor=Constructor
 doclet.Method=Method
 doclet.Annotation_Type_Optional_Member=Optional Element
--- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets_ja.properties	Tue Jul 31 23:11:41 2012 -0700
+++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets_ja.properties	Sun Aug 12 15:20:32 2012 -0700
@@ -6,6 +6,7 @@
 doclet.Serialized_Form=\u76F4\u5217\u5316\u3055\u308C\u305F\u5F62\u5F0F
 doclet.Serialized_Form_methods=\u76F4\u5217\u5316\u30E1\u30BD\u30C3\u30C9
 doclet.Serialized_Form_fields=\u76F4\u5217\u5316\u3055\u308C\u305F\u30D5\u30A3\u30FC\u30EB\u30C9
+doclet.Serialized_Form_properties=\u76F4\u5217\u5316\u3055\u308C\u305F\u30D7\u30ED\u30D1\u30C6\u30A3
 doclet.Serialized_Form_class=\u76F4\u5217\u5316\u306E\u6982\u8981
 doclet.Class_0_implements_serializable=Class {0} implements Serializable
 doclet.Class_0_extends_implements_serializable=Class {0} extends {1} implements Serializable
@@ -37,6 +38,12 @@
 doclet.Error_taglet_not_registered=\u30A8\u30E9\u30FC - \u30BF\u30B0\u30EC\u30C3\u30C8{1}\u3092\u767B\u9332\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u308B\u3068\u304D\u306B\u3001\u4F8B\u5916{0}\u304C\u30B9\u30ED\u30FC\u3055\u308C\u307E\u3057\u305F...
 doclet.Error_invalid_custom_tag_argument=\u30A8\u30E9\u30FC - {0}\u306F-tag\u30AA\u30D7\u30B7\u30E7\u30F3\u306B\u5BFE\u3057\u3066\u7121\u52B9\u306A\u5F15\u6570\u3067\u3059...
 doclet.Author=\u4F5C\u6210\u8005:
+doclet.DefaultValue=\u30C7\u30D5\u30A9\u30EB\u30C8\u5024:
+doclet.PropertyDescription=\u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u8AAC\u660E:
+doclet.PropertyGetter=\u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u5024\u3092\u53D6\u5F97\u3057\u307E\u3059
+doclet.PropertySetter=\u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u5024\u3092\u8A2D\u5B9A\u3057\u307E\u3059
+doclet.PropertyGetterWithName=\u30D7\u30ED\u30D1\u30C6\u30A3{0}\u306E\u5024\u3092\u53D6\u5F97\u3057\u307E\u3059\u3002
+doclet.PropertySetterWithName=\u30D7\u30ED\u30D1\u30C6\u30A3{0}\u306E\u5024\u3092\u8A2D\u5B9A\u3057\u307E\u3059\u3002
 doclet.Default=\u30C7\u30D5\u30A9\u30EB\u30C8:
 doclet.Parameters=\u30D1\u30E9\u30E1\u30FC\u30BF:
 doclet.TypeParameters=\u578B\u30D1\u30E9\u30E1\u30FC\u30BF:
@@ -58,6 +65,7 @@
 doclet.noInheritedDoc=@inheritDoc\u304C\u4F7F\u7528\u3055\u308C\u3066\u3044\u307E\u3059\u304C\u3001{0}\u306F\u3069\u306E\u30E1\u30BD\u30C3\u30C9\u3082\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u307E\u305F\u306F\u5B9F\u88C5\u3057\u3066\u3044\u307E\u305B\u3093\u3002
 doclet.malformed_html_link_tag=<a> \u30BF\u30B0\u306E\u5F62\u5F0F\u304C\u4E0D\u6B63:\n"{0}"
 doclet.tag_misuse={0}\u30BF\u30B0\u306F{1}\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u5185\u3067\u306F\u4F7F\u7528\u3067\u304D\u307E\u305B\u3093\u3002\u4F7F\u7528\u3067\u304D\u308B\u306E\u306F\u6B21\u306E\u30BF\u30A4\u30D7\u306E\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u5185\u306E\u307F\u3067\u3059: {2}\u3002
+doclet.javafx_tag_misuse=\u30BF\u30B0@propertyGetter\u3001@propertySetter\u304A\u3088\u3073@propertyDescription\u306F\u3001JavaFX\u306E\u30D7\u30ED\u30D1\u30C6\u30A3getter\u3068setter\u306E\u307F\u3067\u4F7F\u7528\u3067\u304D\u307E\u3059\u3002
 doclet.Package_Summary=\u30D1\u30C3\u30B1\u30FC\u30B8\u306E\u6982\u8981
 doclet.Interface_Summary=\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u306E\u6982\u8981
 doclet.Annotation_Types_Summary=\u6CE8\u91C8\u578B\u306E\u6982\u8981
@@ -69,6 +77,7 @@
 doclet.Annotation_Type_Optional_Member_Summary=\u4EFB\u610F\u8981\u7D20\u306E\u6982\u8981
 doclet.Annotation_Type_Required_Member_Summary=\u5FC5\u9808\u8981\u7D20\u306E\u6982\u8981
 doclet.Field_Summary=\u30D5\u30A3\u30FC\u30EB\u30C9\u306E\u6982\u8981
+doclet.Property_Summary=\u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u6982\u8981
 doclet.Enum_Constant_Summary=\u5217\u6319\u578B\u5B9A\u6570\u306E\u6982\u8981
 doclet.Constructor_Summary=\u30B3\u30F3\u30B9\u30C8\u30E9\u30AF\u30BF\u306E\u6982\u8981
 doclet.Method_Summary=\u30E1\u30BD\u30C3\u30C9\u306E\u6982\u8981
@@ -115,12 +124,15 @@
 doclet.Methods_Inherited_From_Interface=\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u304B\u3089\u7D99\u627F\u3055\u308C\u305F\u30E1\u30BD\u30C3\u30C9
 doclet.Fields_Inherited_From_Class=\u30AF\u30E9\u30B9\u304B\u3089\u7D99\u627F\u3055\u308C\u305F\u30D5\u30A3\u30FC\u30EB\u30C9
 doclet.Fields_Inherited_From_Interface=\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u304B\u3089\u7D99\u627F\u3055\u308C\u305F\u30D5\u30A3\u30FC\u30EB\u30C9
+doclet.Properties_Inherited_From_Class=\u30AF\u30E9\u30B9\u304B\u3089\u7D99\u627F\u3055\u308C\u305F\u30D7\u30ED\u30D1\u30C6\u30A3
+doclet.Properties_Inherited_From_Interface=\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u304B\u3089\u7D99\u627F\u3055\u308C\u305F\u30D7\u30ED\u30D1\u30C6\u30A3
 doclet.Serializable=\u76F4\u5217\u5316\u53EF\u80FD
 doclet.Externalizable=\u5916\u90E8\u5316\u53EF\u80FD
 doclet.Annotation_Type_Member_Detail=\u8981\u7D20\u306E\u8A73\u7D30
 doclet.Enum_Constant_Detail=\u5217\u6319\u578B\u5B9A\u6570\u306E\u8A73\u7D30
 doclet.Constants_Summary=\u5B9A\u6570\u30D5\u30A3\u30FC\u30EB\u30C9\u5024
 doclet.Field_Detail=\u30D5\u30A3\u30FC\u30EB\u30C9\u306E\u8A73\u7D30
+doclet.Property_Detail=\u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u8A73\u7D30
 doclet.Method_Detail=\u30E1\u30BD\u30C3\u30C9\u306E\u8A73\u7D30
 doclet.Constructor_Detail=\u30B3\u30F3\u30B9\u30C8\u30E9\u30AF\u30BF\u306E\u8A73\u7D30
 doclet.Deprecated=\u63A8\u5968\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002
@@ -135,6 +147,8 @@
 doclet.Member_Table_Summary={0}\u8868\u3001{1}\u306E\u30EA\u30B9\u30C8\u304A\u3088\u3073\u8AAC\u660E
 doclet.fields=\u30D5\u30A3\u30FC\u30EB\u30C9
 doclet.Fields=\u30D5\u30A3\u30FC\u30EB\u30C9
+doclet.properties=\u30D7\u30ED\u30D1\u30C6\u30A3
+doclet.Properties=\u30D7\u30ED\u30D1\u30C6\u30A3
 doclet.constructors=\u30B3\u30F3\u30B9\u30C8\u30E9\u30AF\u30BF
 doclet.Constructors=\u30B3\u30F3\u30B9\u30C8\u30E9\u30AF\u30BF
 doclet.methods=\u30E1\u30BD\u30C3\u30C9
@@ -152,6 +166,7 @@
 doclet.Modifier=\u4FEE\u98FE\u5B50
 doclet.Type=\u30BF\u30A4\u30D7
 doclet.Field=\u30D5\u30A3\u30FC\u30EB\u30C9
+doclet.Property=\u30D7\u30ED\u30D1\u30C6\u30A3
 doclet.Constructor=\u30B3\u30F3\u30B9\u30C8\u30E9\u30AF\u30BF
 doclet.Method=\u30E1\u30BD\u30C3\u30C9
 doclet.Annotation_Type_Optional_Member=\u4EFB\u610F\u8981\u7D20
--- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets_zh_CN.properties	Tue Jul 31 23:11:41 2012 -0700
+++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets_zh_CN.properties	Sun Aug 12 15:20:32 2012 -0700
@@ -6,6 +6,7 @@
 doclet.Serialized_Form=\u5E8F\u5217\u5316\u8868\u683C
 doclet.Serialized_Form_methods=\u5E8F\u5217\u5316\u65B9\u6CD5
 doclet.Serialized_Form_fields=\u5E8F\u5217\u5316\u5B57\u6BB5
+doclet.Serialized_Form_properties=\u5E8F\u5217\u5316\u5C5E\u6027
 doclet.Serialized_Form_class=\u5E8F\u5217\u5316\u6982\u89C8
 doclet.Class_0_implements_serializable=\u7C7B{0}\u5B9E\u73B0\u53EF\u5E8F\u5217\u5316
 doclet.Class_0_extends_implements_serializable=\u7C7B{0}\u6269\u5C55{1}\u5B9E\u73B0\u53EF\u5E8F\u5217\u5316
@@ -37,6 +38,12 @@
 doclet.Error_taglet_not_registered=\u9519\u8BEF - \u5C1D\u8BD5\u6CE8\u518C Taglet {1}\u65F6\u629B\u51FA\u5F02\u5E38\u9519\u8BEF{0}...
 doclet.Error_invalid_custom_tag_argument=\u9519\u8BEF - \u5BF9\u4E8E -tag \u9009\u9879, {0}\u662F\u65E0\u6548\u53C2\u6570...
 doclet.Author=\u4F5C\u8005:
+doclet.DefaultValue=\u9ED8\u8BA4\u503C:
+doclet.PropertyDescription=\u5C5E\u6027\u8BF4\u660E:
+doclet.PropertyGetter=\u83B7\u53D6\u5C5E\u6027\u7684\u503C
+doclet.PropertySetter=\u8BBE\u7F6E\u5C5E\u6027\u7684\u503C
+doclet.PropertyGetterWithName=\u83B7\u53D6\u5C5E\u6027{0}\u7684\u503C\u3002
+doclet.PropertySetterWithName=\u8BBE\u7F6E\u5C5E\u6027{0}\u7684\u503C\u3002
 doclet.Default=\u9ED8\u8BA4\u503C:
 doclet.Parameters=\u53C2\u6570:
 doclet.TypeParameters=\u7C7B\u578B\u53C2\u6570:
@@ -58,6 +65,7 @@
 doclet.noInheritedDoc=\u4F7F\u7528\u4E86 @inheritDoc, \u4F46{0}\u672A\u8986\u76D6\u6216\u5B9E\u73B0\u4EFB\u4F55\u65B9\u6CD5\u3002
 doclet.malformed_html_link_tag=<a> \u6807\u8BB0\u683C\u5F0F\u9519\u8BEF: \n"{0}"
 doclet.tag_misuse=\u4E0D\u80FD\u5728{1}\u6587\u6863\u4E2D\u4F7F\u7528\u6807\u8BB0{0}\u3002\u53EA\u80FD\u5728\u4EE5\u4E0B\u7C7B\u578B\u7684\u6587\u6863\u4E2D\u4F7F\u7528\u8BE5\u6807\u8BB0: {2}\u3002
+doclet.javafx_tag_misuse=\u6807\u8BB0 @propertyGetter, @propertySetter \u548C @propertyDescription \u53EA\u80FD\u5728 JavaFX \u5C5E\u6027 getter \u548C setter \u4E2D\u4F7F\u7528\u3002
 doclet.Package_Summary=\u7A0B\u5E8F\u5305\u6982\u8981
 doclet.Interface_Summary=\u63A5\u53E3\u6982\u8981
 doclet.Annotation_Types_Summary=\u6CE8\u91CA\u7C7B\u578B\u6982\u8981
@@ -69,6 +77,7 @@
 doclet.Annotation_Type_Optional_Member_Summary=\u53EF\u9009\u5143\u7D20\u6982\u8981
 doclet.Annotation_Type_Required_Member_Summary=\u5FC5\u9700\u5143\u7D20\u6982\u8981
 doclet.Field_Summary=\u5B57\u6BB5\u6982\u8981
+doclet.Property_Summary=\u5C5E\u6027\u6982\u8981
 doclet.Enum_Constant_Summary=\u679A\u4E3E\u5E38\u91CF\u6982\u8981
 doclet.Constructor_Summary=\u6784\u9020\u5668\u6982\u8981
 doclet.Method_Summary=\u65B9\u6CD5\u6982\u8981
@@ -115,12 +124,15 @@
 doclet.Methods_Inherited_From_Interface=\u4ECE\u63A5\u53E3\u7EE7\u627F\u7684\u65B9\u6CD5
 doclet.Fields_Inherited_From_Class=\u4ECE\u7C7B\u7EE7\u627F\u7684\u5B57\u6BB5
 doclet.Fields_Inherited_From_Interface=\u4ECE\u63A5\u53E3\u7EE7\u627F\u7684\u5B57\u6BB5
+doclet.Properties_Inherited_From_Class=\u4ECE\u7C7B\u7EE7\u627F\u7684\u5C5E\u6027
+doclet.Properties_Inherited_From_Interface=\u4ECE\u63A5\u53E3\u7EE7\u627F\u7684\u5C5E\u6027
 doclet.Serializable=\u53EF\u5E8F\u5217\u5316
 doclet.Externalizable=\u53EF\u5916\u90E8\u5316
 doclet.Annotation_Type_Member_Detail=\u5143\u7D20\u8BE6\u7EC6\u8D44\u6599
 doclet.Enum_Constant_Detail=\u679A\u4E3E\u5E38\u91CF\u8BE6\u7EC6\u8D44\u6599
 doclet.Constants_Summary=\u5E38\u91CF\u5B57\u6BB5\u503C
 doclet.Field_Detail=\u5B57\u6BB5\u8BE6\u7EC6\u8D44\u6599
+doclet.Property_Detail=\u5C5E\u6027\u8BE6\u7EC6\u4FE1\u606F
 doclet.Method_Detail=\u65B9\u6CD5\u8BE6\u7EC6\u8D44\u6599
 doclet.Constructor_Detail=\u6784\u9020\u5668\u8BE6\u7EC6\u8D44\u6599
 doclet.Deprecated=\u5DF2\u8FC7\u65F6\u3002
@@ -135,6 +147,8 @@
 doclet.Member_Table_Summary={0}\u8868, \u5217\u8868{1}\u548C\u89E3\u91CA
 doclet.fields=\u5B57\u6BB5
 doclet.Fields=\u5B57\u6BB5
+doclet.properties=\u5C5E\u6027
+doclet.Properties=\u5C5E\u6027
 doclet.constructors=\u6784\u9020\u5668
 doclet.Constructors=\u6784\u9020\u5668
 doclet.methods=\u65B9\u6CD5
@@ -152,6 +166,7 @@
 doclet.Modifier=\u9650\u5B9A\u7B26
 doclet.Type=\u7C7B\u578B
 doclet.Field=\u5B57\u6BB5
+doclet.Property=\u5C5E\u6027
 doclet.Constructor=\u6784\u9020\u5668
 doclet.Method=\u65B9\u6CD5
 doclet.Annotation_Type_Optional_Member=\u53EF\u9009\u5143\u7D20
@@ -167,4 +182,4 @@
 #Documentation for Enums
 doclet.enum_values_doc=\n\u6309\u7167\u58F0\u660E\u8BE5\u679A\u4E3E\u7C7B\u578B\u7684\u5E38\u91CF\u7684\u987A\u5E8F, \u8FD4\u56DE\n\u5305\u542B\u8FD9\u4E9B\u5E38\u91CF\u7684\u6570\u7EC4\u3002\u8BE5\u65B9\u6CD5\u53EF\u7528\u4E8E\u8FED\u4EE3\n\u5E38\u91CF, \u5982\u4E0B\u6240\u793A:\n<pre>\nfor ({0} c : {0}.values())\n&nbsp;   System.out.println(c);\n</pre>\n@\u6309\u7167\u58F0\u660E\u8BE5\u679A\u4E3E\u7C7B\u578B\u7684\u5E38\u91CF\u7684\u987A\u5E8F, \u8FD4\u56DE\n\u5305\u542B\u8FD9\u4E9B\u5E38\u91CF\u7684\u6570\u7EC4
 
-doclet.enum_valueof_doc=\n\u8FD4\u56DE\u5E26\u6709\u6307\u5B9A\u540D\u79F0\u7684\u8BE5\u7C7B\u578B\u7684\u679A\u4E3E\u5E38\u91CF\u3002\n\u5B57\u7B26\u4E32\u5FC5\u987B\u4E0E\u7528\u4E8E\u58F0\u660E\u8BE5\u7C7B\u578B\u7684\u679A\u4E3E\u5E38\u91CF\u7684\n\u6807\u8BC6\u7B26<i>\u5B8C\u5168</i>\u5339\u914D\u3002(\u4E0D\u5141\u8BB8\u6709\u591A\u4F59\n\u7684\u7A7A\u683C\u5B57\u7B26\u3002)\n\n@param name \u8981\u8FD4\u56DE\u7684\u679A\u4E3E\u5E38\u91CF\u7684\u540D\u79F0\u3002\n@return \u8FD4\u56DE\u5E26\u6709\u6307\u5B9A\u540D\u79F0\u7684\u679A\u4E3E\u5E38\u91CF\n@throws \u5982\u679C\u8BE5\u679A\u4E3E\u7C7B\u578B\u6CA1\u6709\u5E26\u6709\u6307\u5B9A\u540D\u79F0\u7684\u5E38\u91CF, \n\u5219\u629B\u51FA IllegalArgumentException\n@throws \u5982\u679C\u53C2\u6570\u4E3A\u7A7A\u503C, \u5219\u629B\u51FA NullPointerException
+doclet.enum_valueof_doc=\n\u8FD4\u56DE\u5E26\u6709\u6307\u5B9A\u540D\u79F0\u7684\u8BE5\u7C7B\u578B\u7684\u679A\u4E3E\u5E38\u91CF\u3002\n\u5B57\u7B26\u4E32\u5FC5\u987B\u4E0E\u7528\u4E8E\u58F0\u660E\u8BE5\u7C7B\u578B\u7684\u679A\u4E3E\u5E38\u91CF\u7684\n\u6807\u8BC6\u7B26<i>\u5B8C\u5168</i>\u5339\u914D\u3002(\u4E0D\u5141\u8BB8\u6709\u591A\u4F59\n\u7684\u7A7A\u683C\u5B57\u7B26\u3002)\n\n@param name \u8981\u8FD4\u56DE\u7684\u679A\u4E3E\u5E38\u91CF\u7684\u540D\u79F0\u3002\n@\u8FD4\u56DE\u5E26\u6709\u6307\u5B9A\u540D\u79F0\u7684\u679A\u4E3E\u5E38\u91CF\n@\u5982\u679C\u8BE5\u679A\u4E3E\u7C7B\u578B\u6CA1\u6709\u5E26\u6709\u6307\u5B9A\u540D\u79F0\u7684\u5E38\u91CF, \n\u5219\u629B\u51FA IllegalArgumentException\n@\u5982\u679C\u53C2\u6570\u4E3A\u7A7A\u503C, \u5219\u629B\u51FA NullPointerException
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/taglets/BasePropertyTaglet.java	Sun Aug 12 15:20:32 2012 -0700
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package com.sun.tools.doclets.internal.toolkit.taglets;
+
+import com.sun.javadoc.Tag;
+
+/**
+ * An abstract class that implements the {@link Taglet} interface and
+ * serves as a base for JavaFX property getter and setter taglets.
+ *
+ * This code is not part of an API.
+ * It is implementation that is subject to change.
+ * Do not use it as an API
+ *
+ */
+public abstract class BasePropertyTaglet extends BaseTaglet {
+
+    public BasePropertyTaglet() {
+    }
+
+    /**
+     * This method returns the text to be put in the resulting javadoc before
+     * the property name.
+     *
+     * @param tagletWriter the taglet writer for output
+     * @return the string to be put in the resulting javadoc.
+     */
+    abstract String getText(TagletWriter tagletWriter);
+
+    /**
+     * Given the <code>Tag</code> representation of this custom
+     * tag, return its string representation, which is output
+     * to the generated page.
+     * @param tag the <code>Tag</code> representation of this custom tag.
+     * @param tagletWriter the taglet writer for output.
+     * @return the TagletOutput representation of this <code>Tag</code>.
+     */
+    public TagletOutput getTagletOutput(Tag tag, TagletWriter tagletWriter) {
+        TagletOutput tagletOutput = tagletWriter.getOutputInstance();
+        StringBuilder output = new StringBuilder("<P>");
+        output.append(getText(tagletWriter));
+        output.append(" <CODE>");
+        output.append(tag.text());
+        output.append("</CODE>.</P>");
+        tagletOutput.setOutput(output.toString());
+        return tagletOutput;
+    }
+
+    /**
+     * Will return false because this tag may
+     * only appear in Methods.
+     * @return false since this is not a method.
+     */
+    public boolean inConstructor() {
+        return false;
+    }
+
+    /**
+     * Will return false because this tag may
+     * only appear in Methods.
+     * @return false since this is not a method.
+     */
+    public boolean inOverview() {
+        return false;
+    }
+
+    /**
+     * Will return false because this tag may
+     * only appear in Methods.
+     * @return false since this is not a method.
+     */
+    public boolean inPackage() {
+        return false;
+    }
+
+    /**
+     * Will return false because this tag may
+     * only appear in Methods.
+     * @return false since this is not a method.
+     */
+    public boolean inType() {
+        return false;
+    }
+
+    /**
+     * Will return false because this tag is not inline.
+     * @return false since this is not an inline tag.
+     */
+    public boolean isInlineTag() {
+        return false;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/taglets/ExpertTaglet.java	Sun Aug 12 15:20:32 2012 -0700
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2006, 2012 Oracle and/or its affiliates. All rights reserved.
+ * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+package com.sun.tools.doclets.internal.toolkit.taglets;
+
+import java.util.Map;
+import com.sun.tools.doclets.Taglet;
+import com.sun.javadoc.Tag;
+
+public class ExpertTaglet implements Taglet {
+
+    private static final String NAME = "expert";
+    private static final String START_TAG = "<sub id=\"expert\">";
+    private static final String END_TAG = "</sub>";
+
+    public boolean inField() {
+        return true;
+    }
+
+    public boolean inConstructor() {
+        return true;
+    }
+
+    public boolean inMethod() {
+        return true;
+    }
+
+    public boolean inOverview() {
+        return true;
+    }
+
+    public boolean inPackage() {
+        return true;
+    }
+
+    public boolean inType() {
+        return true;
+    }
+
+    public boolean isInlineTag() {
+        return false;
+    }
+
+    public String getName() {
+        return NAME;
+    }
+
+    public static void register(Map<String, Taglet> map) {
+        map.remove(NAME);
+        map.put(NAME, new ExpertTaglet());
+    }
+
+    public String toString(Tag tag) {
+        return (tag.text() == null || tag.text().length() == 0) ? null :
+            START_TAG + LiteralTaglet.textToString(tag.text()) + END_TAG;
+    }
+
+
+    public String toString(Tag[] tags) {
+        if (tags == null || tags.length == 0) return null;
+
+        StringBuffer sb = new StringBuffer(START_TAG);
+
+        for(Tag t:tags) {
+            sb.append(LiteralTaglet.textToString(t.text()));
+        }
+        sb.append(END_TAG);
+        return sb.toString();
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/taglets/PropertyGetterTaglet.java	Sun Aug 12 15:20:32 2012 -0700
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package com.sun.tools.doclets.internal.toolkit.taglets;
+
+/**
+ * A taglet that adds the initial line of documentation to the JavaFX
+ * property getters.
+ *
+ * This code is not part of an API.
+ * It is implementation that is subject to change.
+ * Do not use it as an API
+ */
+public class PropertyGetterTaglet extends BasePropertyTaglet {
+
+    /**
+     * Construct a new PropertyGetterTaglet.
+     */
+    public PropertyGetterTaglet () {
+        name = "propertyGetter";
+    }
+
+    @Override
+    String getText(TagletWriter tagletWriter) {
+        return tagletWriter.configuration().getText("doclet.PropertyGetter");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/taglets/PropertySetterTaglet.java	Sun Aug 12 15:20:32 2012 -0700
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package com.sun.tools.doclets.internal.toolkit.taglets;
+
+import com.sun.javadoc.*;
+
+/**
+ * A taglet that adds the initial line of documentation to the JavaFX
+ * property setters.
+ *
+ * This code is not part of an API.
+ * It is implementation that is subject to change.
+ * Do not use it as an API
+ */
+public class PropertySetterTaglet extends BasePropertyTaglet {
+
+    /**
+     * Construct a new PropertyGetterTaglet.
+     */
+    public PropertySetterTaglet () {
+        name = "propertySetter";
+    }
+
+    @Override
+    String getText(TagletWriter tagletWriter) {
+        return tagletWriter.configuration().getText("doclet.PropertySetter");
+    }
+}
--- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/taglets/TagletManager.java	Tue Jul 31 23:11:41 2012 -0700
+++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/taglets/TagletManager.java	Sun Aug 12 15:20:32 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -663,7 +663,16 @@
             customTags.put((temp = new SimpleTaglet("author", message.getText("doclet.Author"),
                 SimpleTaglet.PACKAGE + SimpleTaglet.TYPE + SimpleTaglet.OVERVIEW)).getName(), temp);
         }
-        customTags.put((temp = new SimpleTaglet("serialData", message.getText("doclet.SerialData"),
+        customTags.put((temp = new PropertyGetterTaglet()).getName(), temp);
+        customTags.put((temp = new PropertySetterTaglet()).getName(), temp);
+        customTags.put((temp = new SimpleTaglet("propertyDescription",
+                                  message.getText("doclet.PropertyDescription"),
+            SimpleTaglet.FIELD + SimpleTaglet.METHOD)).getName(), temp);
+        customTags.put((temp = new SimpleTaglet("defaultValue",
+                                  message.getText("doclet.DefaultValue"),
+            SimpleTaglet.FIELD + SimpleTaglet.METHOD)).getName(), temp);
+        customTags.put((temp = new SimpleTaglet("serialData",
+                                  message.getText("doclet.SerialData"),
             SimpleTaglet.EXCLUDED)).getName(), temp);
         customTags.put((temp = new SimpleTaglet("factory", message.getText("doclet.Factory"),
             SimpleTaglet.METHOD)).getName(), temp);
@@ -676,6 +685,9 @@
             temp);
         customTags.put((temp = new LegacyTaglet(new CodeTaglet())).getName(),
             temp);
+        customTags.put((temp = new SimpleTaglet("treatAsPrivate", null ,
+                SimpleTaglet.FIELD + SimpleTaglet.METHOD + SimpleTaglet.TYPE)).getName(), temp);
+        customTags.put((temp = new LegacyTaglet(new ExpertTaglet())).getName(), temp);
 
         //Keep track of the names of standard tags for error
         //checking purposes.
@@ -686,6 +698,10 @@
         standardTags.add("since");
         standardTags.add("version");
         standardTags.add("author");
+        standardTags.add("propertyGetter");
+        standardTags.add("propertySetter");
+        standardTags.add("propertyDescription");
+        standardTags.add("defaultValue");
         standardTags.add("see");
         standardTags.add("deprecated");
         standardTags.add("link");
@@ -699,6 +715,8 @@
         standardTags.add("Text");
         standardTags.add("literal");
         standardTags.add("code");
+        standardTags.add("treatAsPrivate");
+        standardTags.add("expert");
     }
 
     /**
--- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/taglets/TagletWriter.java	Tue Jul 31 23:11:41 2012 -0700
+++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/taglets/TagletWriter.java	Sun Aug 12 15:20:32 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -171,6 +171,7 @@
         tagletManager.checkTags(doc, doc.inlineTags(), true);
         TagletOutput currentOutput = null;
         for (int i = 0; i < taglets.length; i++) {
+            currentOutput = null;
             if (doc instanceof ClassDoc && taglets[i] instanceof ParamTaglet) {
                 //The type parameters are documented in a special section away
                 //from the tag info, so skip here.
--- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/ClassTree.java	Tue Jul 31 23:11:41 2012 -0700
+++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/ClassTree.java	Sun Aug 12 15:20:32 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -130,6 +130,16 @@
                     Util.isDeprecated(classes[i].containingPackage()))) {
                 continue;
             }
+
+            if (classes[i].tags("treatAsPrivate").length > 0) {
+                continue;
+            }
+
+            if (Configuration.getJavafxJavadoc()
+                    && (classes[i].isPackagePrivate() || classes[i].isPrivate())) {
+                continue;
+            }
+
             if (classes[i].isEnum()) {
                 processType(classes[i], configuration, baseEnums, subEnums);
             } else if (classes[i].isClass()) {
--- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/IndexBuilder.java	Tue Jul 31 23:11:41 2012 -0700
+++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/IndexBuilder.java	Sun Aug 12 15:20:32 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -207,6 +207,25 @@
      * Should this doc element be added to the index map?
      */
     protected boolean shouldAddToIndexMap(Doc element) {
+        if (Configuration.getJavafxJavadoc()) {
+            if (element.tags("treatAsPrivate").length > 0) {
+                return false;
+            }
+            if (element instanceof ProgramElementDoc) {
+                ProgramElementDoc elementCasted = (ProgramElementDoc) element;
+                if (elementCasted.isPackagePrivate() || elementCasted.isPrivate()) {
+                    return false;
+                }
+            }
+
+            if (element instanceof ClassDoc) {
+                ClassDoc elementCasted = (ClassDoc) element;
+                if (elementCasted.isPackagePrivate() || elementCasted.isPrivate()) {
+                    return false;
+                }
+            }
+        }
+
         if (element instanceof PackageDoc)
             // Do not add to index map if -nodeprecated option is set and the
             // package is marked as deprecated.
--- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Util.java	Tue Jul 31 23:11:41 2012 -0700
+++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Util.java	Sun Aug 12 15:20:32 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -56,6 +56,12 @@
     public static final String RESOURCESDIR = "resources";
 
     /**
+     * Resource bundle corresponding to the doclets.properties file.
+     */
+    public static final ResourceBundle RESOURCE_BUNDLE =
+                    ResourceBundle.getBundle(Configuration.DOCLETS_RESOURCE);
+
+    /**
      * Return array of class members whose documentation is to be generated.
      * If the member is deprecated do not include such a member in the
      * returned array.
@@ -878,4 +884,24 @@
         }
         return false;
     }
+
+    /**
+     * A convenience method to get property name from the name of the
+     * getter or setter method.
+     * @param name name of the getter or setter method.
+     * @return the name of the property of the given setter of getter.
+     */
+    public static String propertyNameFromMethodName(String name) {
+        String propertyName = null;
+        if (name.startsWith("get") || name.startsWith("set")) {
+            propertyName = name.substring(3);
+        } else if (name.startsWith("is")) {
+            propertyName = name.substring(2);
+        }
+        if ((propertyName == null) || propertyName.isEmpty()){
+            return "";
+        }
+        return propertyName.substring(0, 1).toLowerCase()
+                + propertyName.substring(1);
+   }
 }
--- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/VisibleMemberMap.java	Tue Jul 31 23:11:41 2012 -0700
+++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/VisibleMemberMap.java	Sun Aug 12 15:20:32 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,6 +28,7 @@
 import com.sun.javadoc.*;
 import com.sun.tools.doclets.internal.toolkit.*;
 import java.util.*;
+import java.util.regex.Pattern;
 
 /**
  * A data structure that encapsulates the visible members of a particular
@@ -54,11 +55,12 @@
     public static final int METHODS         = 4;
     public static final int ANNOTATION_TYPE_MEMBER_OPTIONAL = 5;
     public static final int ANNOTATION_TYPE_MEMBER_REQUIRED = 6;
+    public static final int PROPERTIES      = 7;
 
     /**
      * The total number of member types is {@value}.
      */
-    public static final int NUM_MEMBER_TYPES = 7;
+    public static final int NUM_MEMBER_TYPES = 8;
 
     public static final String STARTLEVEL = "start";
 
@@ -95,6 +97,13 @@
      */
     private final boolean nodepr;
 
+    private static final Map<ClassDoc, ProgramElementDoc[]> propertiesCache =
+            new HashMap<ClassDoc, ProgramElementDoc[]>();
+    private static final Map<ProgramElementDoc, ProgramElementDoc> classPropertiesMap =
+            new HashMap<ProgramElementDoc, ProgramElementDoc>();
+    private static final Map<ProgramElementDoc, GetterSetter> getterSetterMap =
+            new HashMap<ProgramElementDoc, GetterSetter>();
+
     /**
      * Construct a VisibleMemberMap of the given type for the given
      * class.  If nodepr is true, exclude the deprecated members from
@@ -122,6 +131,33 @@
     }
 
     /**
+     * Returns the property field documentation belonging to the given member.
+     * @param ped the member for which the property documentation is needed.
+     * @return the property field documentation, null if there is none.
+     */
+    public ProgramElementDoc getPropertyMemberDoc(ProgramElementDoc ped) {
+        return classPropertiesMap.get(ped);
+    }
+
+    /**
+     * Returns the getter documentation belonging to the given property method.
+     * @param propertyMethod the method for which the getter is needed.
+     * @return the getter documentation, null if there is none.
+     */
+    public ProgramElementDoc getGetterForProperty(ProgramElementDoc propertyMethod) {
+        return getterSetterMap.get(propertyMethod).getGetter();
+    }
+
+    /**
+     * Returns the setter documentation belonging to the given property method.
+     * @param propertyMethod the method for which the setter is needed.
+     * @return the setter documentation, null if there is none.
+     */
+    public ProgramElementDoc getSetterForProperty(ProgramElementDoc propertyMethod) {
+        return getterSetterMap.get(propertyMethod).getSetter();
+    }
+
+    /**
      * Return the package private members inherited by the class.  Only return
      * if parent is package private and not documented.
      *
@@ -330,10 +366,11 @@
             List<ProgramElementDoc> incllist = new ArrayList<ProgramElementDoc>();
             for (int i = 0; i < cdmembers.size(); i++) {
                 ProgramElementDoc pgmelem = cdmembers.get(i);
-                if (!found(members, pgmelem) &&
-                    memberIsVisible(pgmelem) &&
-                    !isOverridden(pgmelem, level)) {
-                    incllist.add(pgmelem);
+                if (!found(members, pgmelem)
+                    && memberIsVisible(pgmelem)
+                    && !isOverridden(pgmelem, level)
+                    && !isTreatedAsPrivate(pgmelem)) {
+                        incllist.add(pgmelem);
                 }
             }
             if (incllist.size() > 0) {
@@ -343,6 +380,20 @@
             fillMemberLevelMap(getClassMembers(fromClass, false), level);
         }
 
+        private boolean isTreatedAsPrivate(ProgramElementDoc pgmelem) {
+            if (!Configuration.getJavafxJavadoc()) {
+                return false;
+            }
+
+            if (pgmelem.isPrivate() || pgmelem.isPackagePrivate()) {
+                return true;
+            }
+
+            Tag[] aspTags = pgmelem.tags("@treatAsPrivate");
+            boolean result = (aspTags != null) && (aspTags.length > 0);
+            return result;
+        }
+
         /**
          * Is given doc item visible in given classdoc in terms fo inheritance?
          * The given doc item is visible in the given classdoc if it is public
@@ -404,6 +455,10 @@
                     break;
                 case METHODS:
                     members = cd.methods(filter);
+                    checkOnPropertiesTags((MethodDoc[])members);
+                    break;
+                case PROPERTIES:
+                    members = properties(cd, filter);
                     break;
                 default:
                     members = new ProgramElementDoc[0];
@@ -470,6 +525,198 @@
             }
             return false;
         }
+
+        private ProgramElementDoc[] properties(final ClassDoc cd, final boolean filter) {
+            final MethodDoc[] allMethods = cd.methods(filter);
+            final FieldDoc[] allFields = cd.fields();
+
+            if (propertiesCache.containsKey(cd)) {
+                return propertiesCache.get(cd);
+            }
+
+            final List<MethodDoc> result = new ArrayList<MethodDoc>();
+
+            for (final MethodDoc propertyMethod : allMethods) {
+
+                if (!isPropertyMethod(propertyMethod)) {
+                    continue;
+                }
+
+                final MethodDoc getter = getterForField(allMethods, propertyMethod);
+                final MethodDoc setter = setterForField(allMethods, propertyMethod);
+                final FieldDoc field = fieldForProperty(allFields, propertyMethod);
+
+                addToPropertiesMap(setter, getter, propertyMethod, field);
+                getterSetterMap.put(propertyMethod, new GetterSetter(getter, setter));
+                result.add(propertyMethod);
+            }
+            final ProgramElementDoc[] resultAray =
+                    result.toArray(new ProgramElementDoc[result.size()]);
+            propertiesCache.put(cd, resultAray);
+            return resultAray;
+        }
+
+        private void addToPropertiesMap(MethodDoc setter,
+                                        MethodDoc getter,
+                                        MethodDoc propertyMethod,
+                                        FieldDoc field) {
+            if ((field == null)
+                    || (field.getRawCommentText() == null)
+                    || field.getRawCommentText().length() == 0) {
+                addToPropertiesMap(setter, propertyMethod);
+                addToPropertiesMap(getter, propertyMethod);
+            } else {
+                addToPropertiesMap(getter, field);
+                addToPropertiesMap(setter, field);
+                addToPropertiesMap(propertyMethod, field);
+            }
+        }
+
+        private void addToPropertiesMap(ProgramElementDoc propertyMethod,
+                                        ProgramElementDoc commentSource) {
+            if (null == propertyMethod || null == commentSource) {
+                return;
+            }
+            final String methodRawCommentText = propertyMethod.getRawCommentText();
+            if (null == methodRawCommentText || 0 == methodRawCommentText.length()) {
+                classPropertiesMap.put(propertyMethod, commentSource);
+            }
+        }
+
+        private MethodDoc getterForField(MethodDoc[] methods,
+                                         MethodDoc propertyMethod) {
+            final String propertyMethodName = propertyMethod.name();
+            final String fieldName =
+                    propertyMethodName.substring(0,
+                            propertyMethodName.lastIndexOf("Property"));
+            final String fieldNameUppercased =
+                    "" + Character.toUpperCase(fieldName.charAt(0))
+                                            + fieldName.substring(1);
+            final String getterName;
+            final String fieldTypeName = propertyMethod.returnType().toString();
+            if ("boolean".equals(fieldTypeName)
+                    || fieldTypeName.endsWith("BooleanProperty")) {
+                getterName = "is" + fieldNameUppercased;
+            } else {
+                getterName = "get" + fieldNameUppercased;
+            }
+
+            for (MethodDoc methodDoc : methods) {
+                if (getterName.equals(methodDoc.name())) {
+                    if (0 == methodDoc.parameters().length
+                            && (methodDoc.isPublic() || methodDoc.isProtected())) {
+                        return methodDoc;
+                    }
+                }
+            }
+            return null;
+        }
+
+        private MethodDoc setterForField(MethodDoc[] methods,
+                                         MethodDoc propertyMethod) {
+            final String propertyMethodName = propertyMethod.name();
+            final String fieldName =
+                    propertyMethodName.substring(0,
+                            propertyMethodName.lastIndexOf("Property"));
+            final String fieldNameUppercased =
+                    "" + Character.toUpperCase(fieldName.charAt(0))
+                                             + fieldName.substring(1);
+            final String setter = "set" + fieldNameUppercased;
+
+            for (MethodDoc methodDoc : methods) {
+                if (setter.equals(methodDoc.name())) {
+                    if (1 == methodDoc.parameters().length
+                            && "void".equals(methodDoc.returnType().simpleTypeName())
+                            && (methodDoc.isPublic() || methodDoc.isProtected())) {
+                        return methodDoc;
+                    }
+                }
+            }
+            return null;
+        }
+
+        private FieldDoc fieldForProperty(FieldDoc[] fields, MethodDoc property) {
+
+            for (FieldDoc field : fields) {
+                final String fieldName = field.name();
+                final String propertyName = fieldName + "Property";
+                if (propertyName.equals(property.name())) {
+                    return field;
+                }
+            }
+            return null;
+        }
+
+        // properties aren't named setA* or getA*
+        private final Pattern pattern = Pattern.compile("[sg]et\\p{Upper}.*");
+        private boolean isPropertyMethod(MethodDoc method) {
+            if (!method.name().endsWith("Property")) {
+                return false;
+            }
+
+            if (! memberIsVisible(method)) {
+                return false;
+            }
+
+            if (pattern.matcher(method.name()).matches()) {
+                return false;
+            }
+
+            return 0 == method.parameters().length
+                    && !"void".equals(method.returnType().simpleTypeName());
+        }
+
+        private void checkOnPropertiesTags(MethodDoc[] members) {
+            for (MethodDoc methodDoc: members) {
+                for (Tag tag: methodDoc.tags()) {
+                    String tagName = tag.name();
+                    if (tagName.equals("@propertySetter")
+                            || tagName.equals("@propertyGetter")
+                            || tagName.equals("@propertyDescription")) {
+                        if (!isPropertyGetterOrSetter(members, methodDoc)) {
+                            System.out.println(methodDoc.containingClass().qualifiedName()
+                                    +  ": "
+                                    + Util.RESOURCE_BUNDLE.getString("doclet.javafx_tag_misuse"));
+                        }
+                        break;
+                    }
+                }
+            }
+        }
+
+        private boolean isPropertyGetterOrSetter(MethodDoc[] members,
+                                                 MethodDoc methodDoc) {
+            boolean found = false;
+            String propertyName = Util.propertyNameFromMethodName(methodDoc.name());
+            if (!propertyName.isEmpty()) {
+                String propertyMethodName = propertyName + "Property";
+                for (MethodDoc member: members) {
+                    if (member.name().equals(propertyMethodName)) {
+                        found = true;
+                        break;
+                    }
+                }
+            }
+            return found;
+        }
+    }
+
+    private class GetterSetter {
+        private final ProgramElementDoc getter;
+        private final ProgramElementDoc setter;
+
+        public GetterSetter(ProgramElementDoc getter, ProgramElementDoc setter) {
+            this.getter = getter;
+            this.setter = setter;
+        }
+
+        public ProgramElementDoc getGetter() {
+            return getter;
+        }
+
+        public ProgramElementDoc getSetter() {
+            return setter;
+        }
     }
 
     /**
@@ -478,7 +725,11 @@
      * @return true if this map has no visible members.
      */
     public boolean noVisibleMembers() {
-        return noVisibleMembers;
+        if (Configuration.getJavafxJavadoc()) {
+            return false;
+        } else {
+            return noVisibleMembers;
+        }
     }
 
     private ClassMember getClassMember(MethodDoc member) {
--- a/src/share/classes/com/sun/tools/javac/code/Symbol.java	Tue Jul 31 23:11:41 2012 -0700
+++ b/src/share/classes/com/sun/tools/javac/code/Symbol.java	Sun Aug 12 15:20:32 2012 -0700
@@ -1235,7 +1235,7 @@
             // if origin is derived from a raw type, we might have missed
             // an implementation because we do not know enough about instantiations.
             // in this case continue with the supertype as origin.
-            if (types.isDerivedRaw(origin.type))
+            if (types.isDerivedRaw(origin.type) && !origin.isInterface())
                 return implementation(types.supertype(origin.type).tsym, types, checkResult);
             else
                 return null;
--- a/src/share/classes/com/sun/tools/javac/comp/Check.java	Tue Jul 31 23:11:41 2012 -0700
+++ b/src/share/classes/com/sun/tools/javac/comp/Check.java	Sun Aug 12 15:20:32 2012 -0700
@@ -522,16 +522,16 @@
      *  @param a             The type that should be bounded by bs.
      *  @param bs            The bound.
      */
-    private boolean checkExtends(Type a, TypeVar bs) {
+    private boolean checkExtends(Type a, Type bound) {
          if (a.isUnbound()) {
              return true;
          } else if (a.tag != WILDCARD) {
              a = types.upperBound(a);
-             return types.isSubtype(a, bs.bound);
+             return types.isSubtype(a, bound);
          } else if (a.isExtendsBound()) {
-             return types.isCastable(bs.getUpperBound(), types.upperBound(a), Warner.noWarnings);
+             return types.isCastable(bound, types.upperBound(a), Warner.noWarnings);
          } else if (a.isSuperBound()) {
-             return !types.notSoftSubtype(types.lowerBound(a), bs.getUpperBound());
+             return !types.notSoftSubtype(types.lowerBound(a), bound);
          }
          return true;
      }
@@ -773,18 +773,16 @@
             List<Type> actuals = type.allparams();
             List<Type> args = type.getTypeArguments();
             List<Type> forms = type.tsym.type.getTypeArguments();
-            ListBuffer<Type> tvars_buf = new ListBuffer<Type>();
+            ListBuffer<Type> bounds_buf = new ListBuffer<Type>();
 
             // For matching pairs of actual argument types `a' and
             // formal type parameters with declared bound `b' ...
             while (args.nonEmpty() && forms.nonEmpty()) {
                 // exact type arguments needs to know their
                 // bounds (for upper and lower bound
-                // calculations).  So we create new TypeVars with
-                // bounds substed with actuals.
-                tvars_buf.append(types.substBound(((TypeVar)forms.head),
-                                                  formals,
-                                                  actuals));
+                // calculations).  So we create new bounds where
+                // type-parameters are replaced with actuals argument types.
+                bounds_buf.append(types.subst(forms.head.getUpperBound(), formals, actuals));
                 args = args.tail;
                 forms = forms.tail;
             }
@@ -801,32 +799,30 @@
             }
 
             args = type.getTypeArguments();
-            List<Type> tvars = tvars_buf.toList();
+            List<Type> bounds = bounds_buf.toList();
 
-            while (args.nonEmpty() && tvars.nonEmpty()) {
-                Type actual = types.subst(args.head,
-                    type.tsym.type.getTypeArguments(),
-                    tvars_buf.toList());
+            while (args.nonEmpty() && bounds.nonEmpty()) {
+                Type actual = args.head;
                 if (!isTypeArgErroneous(actual) &&
-                        !tvars.head.getUpperBound().isErroneous() &&
-                        !checkExtends(actual, (TypeVar)tvars.head)) {
+                        !bounds.head.isErroneous() &&
+                        !checkExtends(actual, bounds.head)) {
                     return args.head;
                 }
                 args = args.tail;
-                tvars = tvars.tail;
+                bounds = bounds.tail;
             }
 
             args = type.getTypeArguments();
-            tvars = tvars_buf.toList();
+            bounds = bounds_buf.toList();
 
             for (Type arg : types.capture(type).getTypeArguments()) {
                 if (arg.tag == TYPEVAR &&
                         arg.getUpperBound().isErroneous() &&
-                        !tvars.head.getUpperBound().isErroneous() &&
+                        !bounds.head.isErroneous() &&
                         !isTypeArgErroneous(args.head)) {
                     return args.head;
                 }
-                tvars = tvars.tail;
+                bounds = bounds.tail;
                 args = args.tail;
             }
 
--- a/src/share/classes/com/sun/tools/javac/comp/MemberEnter.java	Tue Jul 31 23:11:41 2012 -0700
+++ b/src/share/classes/com/sun/tools/javac/comp/MemberEnter.java	Sun Aug 12 15:20:32 2012 -0700
@@ -246,7 +246,7 @@
                                    final Name name,
                                    final Env<AttrContext> env) {
         if (tsym.kind != TYP) {
-            log.error(pos, "static.imp.only.classes.and.interfaces");
+            log.error(DiagnosticFlag.RECOVERABLE, pos, "static.imp.only.classes.and.interfaces");
             return;
         }
 
--- a/src/share/classes/com/sun/tools/javac/comp/Resolve.java	Tue Jul 31 23:11:41 2012 -0700
+++ b/src/share/classes/com/sun/tools/javac/comp/Resolve.java	Sun Aug 12 15:20:32 2012 -0700
@@ -1807,9 +1807,10 @@
  *  ResolveError classes, indicating error situations when accessing symbols
  ****************************************************************************/
 
-    public void logAccessError(Env<AttrContext> env, JCTree tree, Type type) {
-        AccessError error = new AccessError(env, type.getEnclosingType(), type.tsym);
-        logResolveError(error, tree.pos(), type.getEnclosingType().tsym, type.getEnclosingType(), null, null, null);
+    //used by TransTypes when checking target type of synthetic cast
+    public void logAccessErrorInternal(Env<AttrContext> env, JCTree tree, Type type) {
+        AccessError error = new AccessError(env, env.enclClass.type, type.tsym);
+        logResolveError(error, tree.pos(), env.enclClass.sym, env.enclClass.type, null, null, null);
     }
     //where
     private void logResolveError(ResolveError error,
--- a/src/share/classes/com/sun/tools/javac/comp/TransTypes.java	Tue Jul 31 23:11:41 2012 -0700
+++ b/src/share/classes/com/sun/tools/javac/comp/TransTypes.java	Sun Aug 12 15:20:32 2012 -0700
@@ -107,7 +107,7 @@
         make.at(tree.pos);
         if (!types.isSameType(tree.type, target)) {
             if (!resolve.isAccessible(env, target.tsym))
-                resolve.logAccessError(env, tree, target);
+                resolve.logAccessErrorInternal(env, tree, target);
             tree = make.TypeCast(make.Type(target), tree).setType(target);
         }
         make.pos = oldpos;
--- a/src/share/classes/com/sun/tools/javac/file/ZipFileIndex.java	Tue Jul 31 23:11:41 2012 -0700
+++ b/src/share/classes/com/sun/tools/javac/file/ZipFileIndex.java	Sun Aug 12 15:20:32 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -36,6 +36,7 @@
 import java.util.Arrays;
 import java.util.Calendar;
 import java.util.Collections;
+import java.util.LinkedHashMap;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -284,7 +285,7 @@
         try {
             checkIndex();
             if (allDirs == Collections.EMPTY_SET) {
-                allDirs = new HashSet<RelativeDirectory>(directories.keySet());
+                allDirs = new java.util.LinkedHashSet<RelativeDirectory>(directories.keySet());
             }
 
             return allDirs;
@@ -572,7 +573,7 @@
 
             // Add each of the files
             if (entryCount > 0) {
-                directories = new HashMap<RelativeDirectory, DirectoryEntry>();
+                directories = new LinkedHashMap<RelativeDirectory, DirectoryEntry>();
                 ArrayList<Entry> entryList = new ArrayList<Entry>();
                 int pos = 2;
                 for (int i = 0; i < entryCount; i++) {
@@ -867,7 +868,7 @@
                 if (zipFile.lastModified() != fileStamp) {
                     ret = false;
                 } else {
-                    directories = new HashMap<RelativeDirectory, DirectoryEntry>();
+                    directories = new LinkedHashMap<RelativeDirectory, DirectoryEntry>();
                     int numDirs = raf.readInt();
                     for (int nDirs = 0; nDirs < numDirs; nDirs++) {
                         int dirNameBytesLen = raf.readInt();
--- a/src/share/classes/com/sun/tools/javah/resources/l10n_ja.properties	Tue Jul 31 23:11:41 2012 -0700
+++ b/src/share/classes/com/sun/tools/javah/resources/l10n_ja.properties	Sun Aug 12 15:20:32 2012 -0700
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
--- a/src/share/classes/com/sun/tools/javah/resources/l10n_zh_CN.properties	Tue Jul 31 23:11:41 2012 -0700
+++ b/src/share/classes/com/sun/tools/javah/resources/l10n_zh_CN.properties	Sun Aug 12 15:20:32 2012 -0700
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/com/sun/javadoc/testJavaFX/C.java	Sun Aug 12 15:20:32 2012 -0700
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * @expert Expert tag text
+ */
+
+public class C {
+
+    /**
+     * @propertySetter Property
+     * @propertyDescription PropertyDescription
+     */
+    public void CC() {}
+
+    /**
+     * @propertyGetter Property
+     * @expert Expert tag text
+     *
+     */
+    public void B() {}
+
+    /**
+     * Method A documentation
+     * @treatAsPrivate
+     */
+    public void A() {}
+
+    /**
+     * Field i
+     * @defaultValue 1.0
+     */
+    public int i;
+
+
+    /**
+     * Defines the direction/speed at which the {@code Timeline} is expected to
+     * be played.
+     * @defaultValue 11
+     */
+    private DoubleProperty rate;
+
+    public final void setRate(double value) {}
+
+    public final double getRate() {}
+
+    public final DoubleProperty rateProperty() {}
+
+    private BooleanProperty paused;
+
+    public final void setPaused(boolean value) {}
+
+    public final double isPaused() {}
+
+    /**
+     * Defines if paused
+     * @defaultValue false
+     */
+    public final BooleanProperty pausedProperty() {}
+
+    class DoubleProperty {}
+
+    class BooleanProperty {}
+
+    public final BooleanProperty setTestMethodProperty() {}
+
+    private class Inner {
+        private BooleanProperty testMethodProperty() {}
+
+        /**
+         * Defines the direction/speed at which the {@code Timeline} is expected to
+         * be played.
+         * @defaultValue 11
+         */
+        private DoubleProperty rate;
+
+        public final void setRate(double value) {}
+
+        public final double getRate() {}
+
+        public final DoubleProperty rateProperty() {}
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/com/sun/javadoc/testJavaFX/D.java	Sun Aug 12 15:20:32 2012 -0700
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * @expert Expert tag text
+ */
+
+public class D extends C {}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/com/sun/javadoc/testJavaFX/TestJavaFX.java	Sun Aug 12 15:20:32 2012 -0700
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 7112427
+ * @summary Test of the JavaFX doclet features.
+ * @author jvalenta
+ * @library ../lib/
+ * @build JavadocTester TestJavaFX
+ * @run main TestJavaFX
+ */
+
+public class TestJavaFX extends JavadocTester {
+
+    private static final String BUG_ID = "7112427";
+
+    private static final String[][] TEST =
+        new String[][] {
+            {"./" + BUG_ID + "/C.html",
+                "<dt><span class=\"strong\">See Also:</span></dt><dd><a href=\"C.html#getRate()\"><code>getRate()</code></a>, " + NL +
+                "<a href=\"C.html#setRate(double)\"><code>setRate(double)</code></a></dd>"},
+            {"./" + BUG_ID + "/C.html",
+                "<pre>public final&nbsp;void&nbsp;setRate(double&nbsp;value)</pre>" + NL +
+                "<div class=\"block\">Sets the value of the property rate.</div>" + NL +
+                "<dl><dt><span class=\"strong\">Property description:</span></dt>" },
+            {"./" + BUG_ID + "/C.html",
+                "<pre>public final&nbsp;double&nbsp;getRate()</pre>" + NL +
+                "<div class=\"block\">Gets the value of the property rate.</div>" + NL +
+                "<dl><dt><span class=\"strong\">Property description:</span></dt>" },
+            {"./" + BUG_ID + "/C.html",
+                "<td class=\"colLast\"><code><strong><a href=\"C.html#rateProperty\">rate</a></strong></code>" + NL +
+                "<div class=\"block\">Defines the direction/speed at which the <code>Timeline</code> is expected to"},
+            {"./" + BUG_ID + "/C.html",
+                "<sub id=\"expert\">Expert tag text</sub>"},
+            {"./" + BUG_ID + "/C.html",
+                "<span class=\"strong\">Default value:</span>"},
+            {"./" + BUG_ID + "/C.html",
+                "<P>Sets the value of the property <CODE>Property</CODE>"},
+            {"./" + BUG_ID + "/C.html",
+                "<P>Gets the value of the property <CODE>Property</CODE>"},
+            {"./" + BUG_ID + "/C.html",
+                "<span class=\"strong\">Property description:</span>"},
+            {"./" + BUG_ID + "/C.html",
+                "<td class=\"colLast\"><code><strong><a href=\"C.html#setTestMethodProperty()\">setTestMethodProperty</a></strong>()</code>&nbsp;</td>" },
+            {"./" + BUG_ID + "/C.html",
+                "<h4>isPaused</h4>" + NL +
+                "<pre>public final&nbsp;double&nbsp;isPaused()</pre>" + NL +
+                "<div class=\"block\">Gets the value of the property paused.</div>" },
+            {"./" + BUG_ID + "/D.html",
+                "<h3>Properties inherited from class&nbsp;<a href=\"C.html\" title=\"class in &lt;Unnamed&gt;\">C</a></h3>" + NL +
+                "<code><a href=\"C.html#pausedProperty\">paused</a>, <a href=\"C.html#rateProperty\">rate</a></code></li>" },
+        };
+    private static final String[][] NO_TEST =
+        new String[][] {
+            {"./" + BUG_ID + "/C.html",
+                "A()"},
+        };
+
+
+    private static final String[] ARGS = new String[] {
+        "-d", BUG_ID, "-sourcepath", SRC_DIR, "-private",
+        SRC_DIR + FS + "C.java", SRC_DIR + FS + "D.java"
+    };
+
+    /**
+     * The entry point of the test.
+     * @param args the array of command line arguments.
+     */
+    public static void main(String[] args) {
+        System.setProperty("javafx.javadoc", "true");
+        TestJavaFX tester = new TestJavaFX();
+        run(tester, ARGS, TEST, NO_TEST);
+        tester.printSummary();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getBugId() {
+        return BUG_ID;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getBugName() {
+        return getClass().getName();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/tools/javac/T7159016.java	Sun Aug 12 15:20:32 2012 -0700
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 7159016
+ * @summary Static import of member in processor-generated class fails in JDK 7
+ * @library lib
+ * @build JavacTestingAbstractProcessor
+ * @run main T7159016
+ * @author Jesse Glick
+ */
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.Collections;
+import java.util.Set;
+import javax.annotation.processing.AbstractProcessor;
+import javax.annotation.processing.RoundEnvironment;
+import javax.annotation.processing.SupportedAnnotationTypes;
+import javax.annotation.processing.SupportedSourceVersion;
+import javax.lang.model.SourceVersion;
+import javax.lang.model.element.TypeElement;
+import javax.tools.Diagnostic;
+import javax.tools.JavaCompiler;
+import javax.tools.ToolProvider;
+
+public class T7159016 {
+    public static void main(String[] args) throws Exception {
+        File src = new File("C.java");
+        Writer w = new FileWriter(src);
+        try {
+            w.write("import static p.Generated.m;\nclass C { {m(); } }\n");
+            w.flush();
+        } finally {
+            w.close();
+        }
+        JavaCompiler jc = ToolProvider.getSystemJavaCompiler();
+        JavaCompiler.CompilationTask task = jc.getTask(null, null, null, null, null,
+                                                       jc.getStandardFileManager(null, null, null).getJavaFileObjects(src));
+        task.setProcessors(Collections.singleton(new Proc()));
+        if (!task.call()) {
+            throw new Error("Test failed");
+        }
+    }
+
+    private static class Proc extends JavacTestingAbstractProcessor {
+        int written;
+        @Override public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
+            if (roundEnv.processingOver() || written++ > 0) {
+                return false;
+            }
+            messager.printMessage(Diagnostic.Kind.NOTE, "writing Generated.java");
+            try {
+                Writer w = processingEnv.getFiler().createSourceFile("p.Generated").openWriter();
+                try {
+                    w.write("package p; public class Generated { public static void m() { } }");
+                } finally {
+                    w.close();
+                }
+            } catch (IOException x) {
+                messager.printMessage(Diagnostic.Kind.ERROR, x.toString());
+            }
+            return true;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/tools/javac/generics/7151070/T7151070.java	Sun Aug 12 15:20:32 2012 -0700
@@ -0,0 +1,25 @@
+/*
+ * @test /nodynamiccopyright/
+ * @bug     7151070
+ * @summary NullPointerException in Resolve.isAccessible
+ * @compile/fail/ref=T7151070.out -XDrawDiagnostics T7151070.java
+ */
+
+class T7151070a {
+    private static class PrivateCls { }
+    public static class PublicCls extends PrivateCls { }
+
+    public void m(PrivateCls p) { }
+}
+
+class T7151070b {
+    public void test(Test<T7151070a.PublicCls> obj, T7151070a outer) {
+        outer.m(obj.get());
+    }
+
+    public static class Test<T> {
+        public T get() {
+            return null;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/tools/javac/generics/7151070/T7151070.out	Sun Aug 12 15:20:32 2012 -0700
@@ -0,0 +1,2 @@
+T7151070.java:17:24: compiler.err.report.access: T7151070a.PrivateCls, private, T7151070a
+1 error
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/tools/javac/generics/rawOverride/T7148556.java	Sun Aug 12 15:20:32 2012 -0700
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 7148556
+ * @summary Implementing a generic interface causes a public clone() to become inaccessible
+ * @compile T7148556.java
+ */
+
+class T7148556 {
+
+    interface A extends Cloneable {
+       public Object clone();
+    }
+
+    interface B extends A, java.util.List { }
+
+    void test(B b) {
+        b.clone();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/tools/javac/generics/typevars/T7148242.java	Sun Aug 12 15:20:32 2012 -0700
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug     7148242
+ * @summary Regression: valid code rejected during generic type well-formedness check
+ * @compile T7148242.java
+ */
+class T7148242 {
+   static abstract class A<K, V, I extends Pair<K, V>, I2 extends Pair<V, K>> {
+      abstract A<V, K, I2, I> test();
+   }
+   static class Pair<K, V> { }
+}