# HG changeset patch # User lana # Date 1265702716 28800 # Node ID 0d8932a7627efcbcbbf561cff119b50b9ebd4f10 # Parent d15d1cfb440bc8dcc938d061589faf6f02d18990# Parent 4f7de5eeeac72fce41f3c74bc9a6dd21beb34756 Merge diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/java/beans/DefaultPersistenceDelegate.java --- a/jdk/src/share/classes/java/beans/DefaultPersistenceDelegate.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/java/beans/DefaultPersistenceDelegate.java Tue Feb 09 00:05:16 2010 -0800 @@ -1,5 +1,5 @@ /* - * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2000-2010 Sun Microsystems, Inc. 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,8 @@ * @param out The code output stream. * @return An expression whose value is oldInstance. * + * @throws NullPointerException if {@code out} is {@code null} + * * @see #DefaultPersistenceDelegate(String[]) */ protected Expression instantiate(Object oldInstance, Encoder out) { @@ -367,6 +369,8 @@ * @param newInstance The instance that is to be modified. * @param out The stream to which any initialization statements should be written. * + * @throws NullPointerException if {@code out} is {@code null} + * * @see java.beans.Introspector#getBeanInfo * @see java.beans.PropertyDescriptor */ diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/java/beans/Encoder.java --- a/jdk/src/share/classes/java/beans/Encoder.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/java/beans/Encoder.java Tue Feb 09 00:05:16 2010 -0800 @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2000-2010 Sun Microsystems, Inc. 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 @@ -112,54 +112,82 @@ /** * Returns the persistence delegate for the given type. - * The persistence delegate is calculated - * by applying the following of rules in order: - * + * } + * * - * @param type The type of the object. - * @return The persistence delegate for this type of object. + * @param type the class of the objects + * @return the persistence delegate for the given type * * @see #setPersistenceDelegate * @see java.beans.Introspector#getBeanInfo @@ -176,21 +204,18 @@ } /** - * Sets the persistence delegate associated with this type to - * persistenceDelegate. + * Associates the specified persistence delegate with the given type. * - * @param type The class of objects that persistenceDelegate applies to. - * @param persistenceDelegate The persistence delegate for instances of type. + * @param type the class of objects that the specified persistence delegate applies to + * @param delegate the persistence delegate for instances of the given type * * @see #getPersistenceDelegate * @see java.beans.Introspector#getBeanInfo * @see java.beans.BeanInfo#getBeanDescriptor */ - public void setPersistenceDelegate(Class type, - PersistenceDelegate persistenceDelegate) - { + public void setPersistenceDelegate(Class type, PersistenceDelegate delegate) { synchronized (this.finder) { - this.finder.register(type, persistenceDelegate); + this.finder.register(type, delegate); } } diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/java/beans/Expression.java --- a/jdk/src/share/classes/java/beans/Expression.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/java/beans/Expression.java Tue Feb 09 00:05:16 2010 -0800 @@ -1,5 +1,5 @@ /* - * Copyright 2000-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2000-2010 Sun Microsystems, Inc. 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 @@ -51,12 +51,19 @@ private Object value = unbound; /** - * Creates a new Statement object with a target, - * methodName and arguments as per the parameters. + * Creates a new {@link Expression} object + * for the specified target object to invoke the method + * specified by the name and by the array of arguments. + *

+ * The {@code target} and the {@code methodName} values should not be {@code null}. + * Otherwise an attempt to execute this {@code Expression} + * will result in a {@code NullPointerException}. + * If the {@code arguments} value is {@code null}, + * an empty array is used as the value of the {@code arguments} property. * - * @param target The target of this expression. - * @param methodName The methodName of this expression. - * @param arguments The arguments of this expression. If null then an empty array will be used. + * @param target the target object of this expression + * @param methodName the name of the method to invoke on the specified target + * @param arguments the array of arguments to invoke the specified method * * @see #getValue */ @@ -66,16 +73,23 @@ } /** - * Creates a new Expression object for a method - * that returns a result. The result will never be calculated - * however, since this constructor uses the value - * parameter to set the value property by calling the - * setValue method. + * Creates a new {@link Expression} object with the specified value + * for the specified target object to invoke the method + * specified by the name and by the array of arguments. + * The {@code value} value is used as the value of the {@code value} property, + * so the {@link #getValue} method will return it + * without executing this {@code Expression}. + *

+ * The {@code target} and the {@code methodName} values should not be {@code null}. + * Otherwise an attempt to execute this {@code Expression} + * will result in a {@code NullPointerException}. + * If the {@code arguments} value is {@code null}, + * an empty array is used as the value of the {@code arguments} property. * - * @param value The value of this expression. - * @param target The target of this expression. - * @param methodName The methodName of this expression. - * @param arguments The arguments of this expression. If null then an empty array will be used. + * @param value the value of this expression + * @param target the target object of this expression + * @param methodName the name of the method to invoke on the specified target + * @param arguments the array of arguments to invoke the specified method * * @see #setValue */ diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/java/beans/Introspector.java --- a/jdk/src/share/classes/java/beans/Introspector.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/java/beans/Introspector.java Tue Feb 09 00:05:16 2010 -0800 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2010 Sun Microsystems, Inc. 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,8 @@ import com.sun.beans.finder.BeanInfoFinder; import com.sun.beans.finder.ClassFinder; +import java.lang.ref.Reference; +import java.lang.ref.SoftReference; import java.lang.reflect.Method; import java.lang.reflect.Modifier; @@ -39,6 +41,7 @@ import java.util.EventListener; import java.util.List; import java.util.TreeMap; +import java.util.WeakHashMap; import sun.awt.AppContext; import sun.reflect.misc.ReflectUtil; @@ -155,11 +158,11 @@ return (new Introspector(beanClass, null, USE_ALL_BEANINFO)).getBeanInfo(); } synchronized (BEANINFO_CACHE) { - WeakCache, BeanInfo> beanInfoCache = - (WeakCache, BeanInfo>) AppContext.getAppContext().get(BEANINFO_CACHE); + Map, BeanInfo> beanInfoCache = + (Map, BeanInfo>) AppContext.getAppContext().get(BEANINFO_CACHE); if (beanInfoCache == null) { - beanInfoCache = new WeakCache, BeanInfo>(); + beanInfoCache = new WeakHashMap, BeanInfo>(); AppContext.getAppContext().put(BEANINFO_CACHE, beanInfoCache); } BeanInfo beanInfo = beanInfoCache.get(beanClass); @@ -341,7 +344,7 @@ public static void flushCaches() { synchronized (BEANINFO_CACHE) { - WeakCache beanInfoCache = (WeakCache) AppContext.getAppContext().get(BEANINFO_CACHE); + Map beanInfoCache = (Map) AppContext.getAppContext().get(BEANINFO_CACHE); if (beanInfoCache != null) { beanInfoCache.clear(); } @@ -369,7 +372,7 @@ throw new NullPointerException(); } synchronized (BEANINFO_CACHE) { - WeakCache beanInfoCache = (WeakCache) AppContext.getAppContext().get(BEANINFO_CACHE); + Map beanInfoCache = (Map) AppContext.getAppContext().get(BEANINFO_CACHE); if (beanInfoCache != null) { beanInfoCache.put(clz, null); } @@ -1458,7 +1461,7 @@ private PropertyDescriptor[] properties; private int defaultProperty; private MethodDescriptor[] methods; - private BeanInfo targetBeanInfo; + private final Reference targetBeanInfoRef; public GenericBeanInfo(BeanDescriptor beanDescriptor, EventSetDescriptor[] events, int defaultEvent, @@ -1470,7 +1473,7 @@ this.properties = properties; this.defaultProperty = defaultProperty; this.methods = methods; - this.targetBeanInfo = targetBeanInfo; + this.targetBeanInfoRef = new SoftReference(targetBeanInfo); } /** @@ -1509,7 +1512,7 @@ methods[i] = new MethodDescriptor(old.methods[i]); } } - targetBeanInfo = old.targetBeanInfo; + this.targetBeanInfoRef = old.targetBeanInfoRef; } public PropertyDescriptor[] getPropertyDescriptors() { @@ -1537,6 +1540,7 @@ } public java.awt.Image getIcon(int iconKind) { + BeanInfo targetBeanInfo = this.targetBeanInfoRef.get(); if (targetBeanInfo != null) { return targetBeanInfo.getIcon(iconKind); } diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/java/beans/PersistenceDelegate.java --- a/jdk/src/share/classes/java/beans/PersistenceDelegate.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/java/beans/PersistenceDelegate.java Tue Feb 09 00:05:16 2010 -0800 @@ -1,5 +1,5 @@ /* - * Copyright 2000-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2000-2010 Sun Microsystems, Inc. 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 @@ -105,6 +105,8 @@ * * @param oldInstance The instance that will be created by this expression. * @param out The stream to which this expression will be written. + * + * @throws NullPointerException if {@code out} is {@code null} */ public void writeObject(Object oldInstance, Encoder out) { Object newInstance = out.get(oldInstance); @@ -158,6 +160,8 @@ * @param oldInstance The instance that will be created by this expression. * @param out The stream to which this expression will be written. * @return An expression whose value is oldInstance. + * + * @throws NullPointerException if {@code out} is {@code null} */ protected abstract Expression instantiate(Object oldInstance, Encoder out); @@ -196,6 +200,8 @@ * @param oldInstance The instance to be copied. * @param newInstance The instance that is to be modified. * @param out The stream to which any initialization statements should be written. + * + * @throws NullPointerException if {@code out} is {@code null} */ protected void initialize(Class type, Object oldInstance, Object newInstance, diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/java/beans/Statement.java --- a/jdk/src/share/classes/java/beans/Statement.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/java/beans/Statement.java Tue Feb 09 00:05:16 2010 -0800 @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2000-2010 Sun Microsystems, Inc. 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 @@ -69,13 +69,19 @@ ClassLoader loader; /** - * Creates a new Statement object with a target, - * methodName and arguments as per the parameters. + * Creates a new {@link Statement} object + * for the specified target object to invoke the method + * specified by the name and by the array of arguments. + *

+ * The {@code target} and the {@code methodName} values should not be {@code null}. + * Otherwise an attempt to execute this {@code Expression} + * will result in a {@code NullPointerException}. + * If the {@code arguments} value is {@code null}, + * an empty array is used as the value of the {@code arguments} property. * - * @param target The target of this statement. - * @param methodName The methodName of this statement. - * @param arguments The arguments of this statement. If null then an empty array will be used. - * + * @param target the target object of this statement + * @param methodName the name of the method to invoke on the specified target + * @param arguments the array of arguments to invoke the specified method */ @ConstructorProperties({"target", "methodName", "arguments"}) public Statement(Object target, String methodName, Object[] arguments) { @@ -85,27 +91,36 @@ } /** - * Returns the target of this statement. + * Returns the target object of this statement. + * If this method returns {@code null}, + * the {@link #execute} method + * throws a {@code NullPointerException}. * - * @return The target of this statement. + * @return the target object of this statement */ public Object getTarget() { return target; } /** - * Returns the name of the method. + * Returns the name of the method to invoke. + * If this method returns {@code null}, + * the {@link #execute} method + * throws a {@code NullPointerException}. * - * @return The name of the method. + * @return the name of the method */ public String getMethodName() { return methodName; } /** - * Returns the arguments of this statement. + * Returns the arguments for the method to invoke. + * The number of arguments and their types + * must match the method being called. + * {@code null} can be used as a synonym of an empty array. * - * @return the arguments of this statement. + * @return the array of arguments */ public Object[] getArguments() { return arguments; @@ -154,6 +169,9 @@ } Object[] arguments = getArguments(); + if (arguments == null) { + arguments = emptyArray; + } // Class.forName() won't load classes outside // of core from a class inside core. Special // case this method. @@ -285,7 +303,9 @@ Object target = getTarget(); String methodName = getMethodName(); Object[] arguments = getArguments(); - + if (arguments == null) { + arguments = emptyArray; + } StringBuffer result = new StringBuffer(instanceName(target) + "." + methodName + "("); int n = arguments.length; for(int i = 0; i < n; i++) { diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/java/text/CollationElementIterator.java --- a/jdk/src/share/classes/java/text/CollationElementIterator.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/java/text/CollationElementIterator.java Tue Feb 09 00:05:16 2010 -0800 @@ -232,7 +232,7 @@ buffer = makeReorderedBuffer(consonant, value, buffer, true); value = buffer[0]; expIndex = 1; - } else { + } else if (consonant != NormalizerBase.DONE) { text.previous(); } } @@ -242,7 +242,7 @@ buffer = makeReorderedBuffer(consonant, value, buffer, true); value = buffer[0]; expIndex = 1; - } else { + } else if (consonant != NormalizerBase.DONE) { text.previous(); } } diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/java/text/RuleBasedBreakIterator.java --- a/jdk/src/share/classes/java/text/RuleBasedBreakIterator.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/java/text/RuleBasedBreakIterator.java Tue Feb 09 00:05:16 2010 -0800 @@ -621,6 +621,8 @@ return handleNext(); } + private int cachedLastKnownBreak = BreakIterator.DONE; + /** * Advances the iterator backwards, to the last boundary preceding this one. * @return The position of the last boundary position preceding this one. @@ -638,8 +640,16 @@ // the current position), but not necessarily the last one before // where we started int start = current(); - getPrevious(); - int lastResult = handlePrevious(); + int lastResult = cachedLastKnownBreak; + if (lastResult >= start || lastResult <= BreakIterator.DONE) { + getPrevious(); + lastResult = handlePrevious(); + } else { + //it might be better to check if handlePrevious() give us closer + //safe value but handlePrevious() is slow too + //So, this has to be done carefully + text.setIndex(lastResult); + } int result = lastResult; // iterate forward from the known break position until we pass our @@ -653,6 +663,7 @@ // set the current iteration position to be the last break position // before where we started, and then return that value text.setIndex(lastResult); + cachedLastKnownBreak = lastResult; return lastResult; } @@ -757,7 +768,8 @@ // then we can just use next() to get our return value text.setIndex(offset); if (offset == text.getBeginIndex()) { - return handleNext(); + cachedLastKnownBreak = handleNext(); + return cachedLastKnownBreak; } // otherwise, we have to sync up first. Use handlePrevious() to back @@ -767,10 +779,19 @@ // position at or before our starting position. Advance forward // from here until we've passed the starting position. The position // we stop on will be the first break position after the specified one. - int result = handlePrevious(); + int result = cachedLastKnownBreak; + if (result >= offset || result <= BreakIterator.DONE) { + result = handlePrevious(); + } else { + //it might be better to check if handlePrevious() give us closer + //safe value but handlePrevious() is slow too + //So, this has to be done carefully + text.setIndex(result); + } while (result != BreakIterator.DONE && result <= offset) { result = handleNext(); } + cachedLastKnownBreak = result; return result; } @@ -865,6 +886,8 @@ text = new SafeCharIterator(newText); } text.first(); + + cachedLastKnownBreak = BreakIterator.DONE; } diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/java/util/Date.java --- a/jdk/src/share/classes/java/util/Date.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/java/util/Date.java Tue Feb 09 00:05:16 2010 -0800 @@ -953,7 +953,7 @@ * without affecting its internal state. */ static final long getMillisOf(Date date) { - if (date.cdate == null) { + if (date.cdate == null || date.cdate.isNormalized()) { return date.fastTime; } BaseCalendar.Date d = (BaseCalendar.Date) date.cdate.clone(); diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/MultiUIDefaults.java --- a/jdk/src/share/classes/javax/swing/MultiUIDefaults.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/MultiUIDefaults.java Tue Feb 09 00:05:16 2010 -0800 @@ -27,6 +27,7 @@ import java.util.Enumeration; import java.util.HashSet; +import java.util.Iterator; import java.util.Locale; import java.util.Map.Entry; import java.util.Set; @@ -89,11 +90,7 @@ @Override public int size() { - int n = super.size(); - for (UIDefaults table : tables) { - n += (table != null) ? table.size() : 0; - } - return n; + return entrySet().size(); } @Override @@ -104,40 +101,26 @@ @Override public Enumeration keys() { - Enumeration[] enums = new Enumeration[1 + tables.length]; - enums[0] = super.keys(); - for(int i = 0; i < tables.length; i++) { - UIDefaults table = tables[i]; - if (table != null) { - enums[i + 1] = table.keys(); - } - } - return new MultiUIDefaultsEnumerator(enums); + return new MultiUIDefaultsEnumerator( + MultiUIDefaultsEnumerator.Type.KEYS, entrySet()); } @Override public Enumeration elements() { - Enumeration[] enums = new Enumeration[1 + tables.length]; - enums[0] = super.elements(); - for(int i = 0; i < tables.length; i++) { - UIDefaults table = tables[i]; - if (table != null) { - enums[i + 1] = table.elements(); - } - } - return new MultiUIDefaultsEnumerator(enums); + return new MultiUIDefaultsEnumerator( + MultiUIDefaultsEnumerator.Type.ELEMENTS, entrySet()); } @Override public Set> entrySet() { Set> set = new HashSet>(); - if (tables == null) return set; - for (UIDefaults table : tables) { - if (table != null) { - set.addAll(table.entrySet()); + for (int i = tables.length - 1; i >= 0; i--) { + if (tables[i] != null) { + set.addAll(tables[i].entrySet()); } } + set.addAll(super.entrySet()); return set; } @@ -152,50 +135,46 @@ private static class MultiUIDefaultsEnumerator implements Enumeration { - Enumeration[] enums; - int n = 0; + public static enum Type { KEYS, ELEMENTS }; + private Iterator> iterator; + private Type type; - MultiUIDefaultsEnumerator(Enumeration[] enums) { - this.enums = enums; + MultiUIDefaultsEnumerator(Type type, Set> entries) { + this.type = type; + this.iterator = entries.iterator(); } public boolean hasMoreElements() { - for(int i = n; i < enums.length; i++) { - Enumeration e = enums[i]; - if ((e != null) && (e.hasMoreElements())) { - return true; - } - } - return false; + return iterator.hasNext(); } public Object nextElement() { - for(; n < enums.length; n++) { - Enumeration e = enums[n]; - if ((e != null) && (e.hasMoreElements())) { - return e.nextElement(); - } + switch (type) { + case KEYS: return iterator.next().getKey(); + case ELEMENTS: return iterator.next().getValue(); + default: return null; } - return null; } } @Override public Object remove(Object key) { - Object value = super.remove(key); - if (value != null) { - return value; + Object value = null; + for (int i = tables.length - 1; i >= 0; i--) { + if (tables[i] != null) { + Object v = tables[i].remove(key); + if (v != null) { + value = v; + } + } + } + Object v = super.remove(key); + if (v != null) { + value = v; } - for (UIDefaults table : tables) { - value = (table != null) ? table.remove(key) : null; - if (value != null) { - return value; - } - } - - return null; + return value; } @Override diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/plaf/nimbus/Defaults.template --- a/jdk/src/share/classes/javax/swing/plaf/nimbus/Defaults.template Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/plaf/nimbus/Defaults.template Tue Feb 09 00:05:16 2010 -0800 @@ -90,6 +90,10 @@ */ private Map registeredRegions = new HashMap(); + + private Map> overridesCache = + new WeakHashMap>(); + /** * Our fallback style to avoid NPEs if the proper style cannot be found in * this class. Not sure if relying on DefaultSynthStyle is the best choice. @@ -251,7 +255,11 @@ } //return the style, if found, or the default style if not found - return foundStyle == null ? defaultStyle : foundStyle.getStyle(comp); + return foundStyle == null ? defaultStyle : foundStyle.getStyle(comp, r); + } + + public void clearOverridesCache(JComponent c) { + overridesCache.remove(c); } /* @@ -457,15 +465,6 @@ * Cached shared style. */ private NimbusStyle style; - /** - * A weakly referenced hash map such that if the reference JComponent - * key is garbage collected then the entry is removed from the map. - * This cache exists so that when a JComponent has nimbus overrides - * in its client map, a unique style will be created and returned - * for that JComponent instance, always. In such a situation each - * JComponent instance must have its own instance of NimbusStyle. - */ - private WeakHashMap> overridesCache; /** * Create a new LazyStyle. @@ -513,17 +512,21 @@ * Gets the style. Creates it if necessary. * @return the style */ - SynthStyle getStyle(JComponent c) { + SynthStyle getStyle(JComponent c, Region r) { // if the component has overrides, it gets its own unique style // instead of the shared style. if (c.getClientProperty("Nimbus.Overrides") != null) { - if (overridesCache == null) - overridesCache = new WeakHashMap>(); - WeakReference ref = overridesCache.get(c); - NimbusStyle s = ref == null ? null : ref.get(); + Map map = overridesCache.get(c); + SynthStyle s = null; + if (map == null) { + map = new HashMap(); + overridesCache.put(c, map); + } else { + s = map.get(r); + } if (s == null) { s = new NimbusStyle(prefix, c); - overridesCache.put(c, new WeakReference(s)); + map.put(r, s); } return s; } diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/plaf/nimbus/NimbusLookAndFeel.java --- a/jdk/src/share/classes/javax/swing/plaf/nimbus/NimbusLookAndFeel.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/plaf/nimbus/NimbusLookAndFeel.java Tue Feb 09 00:05:16 2010 -0800 @@ -280,11 +280,15 @@ protected boolean shouldUpdateStyleOnEvent(PropertyChangeEvent ev) { String eName = ev.getPropertyName(); - // Always update when overrides or size variant change - if ("Nimbus.Overrides" == eName || + // These properties affect style cached inside NimbusDefaults (6860433) + if ("name" == eName || + "ancestor" == eName || + "Nimbus.Overrides" == eName || "Nimbus.Overrides.InheritDefaults" == eName || "JComponent.sizeVariant" == eName) { + JComponent c = (JComponent) ev.getSource(); + defaults.clearOverridesCache(c); return true; } diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/plaf/synth/SynthButtonUI.java --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthButtonUI.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthButtonUI.java Tue Feb 09 00:05:16 2010 -0800 @@ -237,7 +237,16 @@ // ******************************** /** - * @inheritDoc + * Notifies this UI delegate to repaint the specified component. + * This method paints the component background, then calls + * the {@link #paint(SynthContext,Graphics)} method. + * + *

In general, this method does not need to be overridden by subclasses. + * All Look and Feel rendering code should reside in the {@code paint} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void update(Graphics g, JComponent c) { @@ -250,7 +259,13 @@ } /** - * @inheritDoc + * Paints the specified component according to the Look and Feel. + *

This method is not used by Synth Look and Feel. + * Painting is handled by the {@link #paint(SynthContext,Graphics)} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void paint(Graphics g, JComponent c) { @@ -264,7 +279,8 @@ * Paints the specified component. * * @param context context for the component being painted - * @param g {@code Graphics} object used for painting + * @param g the {@code Graphics} object used for painting + * @see #update(Graphics,JComponent) */ protected void paint(SynthContext context, Graphics g) { AbstractButton b = (AbstractButton)context.getComponent(); diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/plaf/synth/SynthColorChooserUI.java --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthColorChooserUI.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthColorChooserUI.java Tue Feb 09 00:05:16 2010 -0800 @@ -137,7 +137,16 @@ } /** - * @inheritDoc + * Notifies this UI delegate to repaint the specified component. + * This method paints the component background, then calls + * the {@link #paint(SynthContext,Graphics)} method. + * + *

In general, this method does not need to be overridden by subclasses. + * All Look and Feel rendering code should reside in the {@code paint} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void update(Graphics g, JComponent c) { @@ -151,7 +160,13 @@ } /** - * @inheritDoc + * Paints the specified component according to the Look and Feel. + *

This method is not used by Synth Look and Feel. + * Painting is handled by the {@link #paint(SynthContext,Graphics)} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void paint(Graphics g, JComponent c) { @@ -166,7 +181,8 @@ * This implementation does not perform any actions. * * @param context context for the component being painted - * @param g {@code Graphics} object used for painting + * @param g the {@code Graphics} object used for painting + * @see #update(Graphics,JComponent) */ protected void paint(SynthContext context, Graphics g) { } diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/plaf/synth/SynthComboBoxUI.java --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthComboBoxUI.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthComboBoxUI.java Tue Feb 09 00:05:16 2010 -0800 @@ -305,7 +305,16 @@ // begin ComponentUI Implementation /** - * @inheritDoc + * Notifies this UI delegate to repaint the specified component. + * This method paints the component background, then calls + * the {@link #paint(SynthContext,Graphics)} method. + * + *

In general, this method does not need to be overridden by subclasses. + * All Look and Feel rendering code should reside in the {@code paint} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void update(Graphics g, JComponent c) { @@ -319,7 +328,13 @@ } /** - * @inheritDoc + * Paints the specified component according to the Look and Feel. + *

This method is not used by Synth Look and Feel. + * Painting is handled by the {@link #paint(SynthContext,Graphics)} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void paint(Graphics g, JComponent c) { @@ -333,7 +348,8 @@ * Paints the specified component. * * @param context context for the component being painted - * @param g {@code Graphics} object used for painting + * @param g the {@code Graphics} object used for painting + * @see #update(Graphics,JComponent) */ protected void paint(SynthContext context, Graphics g) { hasFocus = comboBox.hasFocus(); diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/plaf/synth/SynthDesktopIconUI.java --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthDesktopIconUI.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthDesktopIconUI.java Tue Feb 09 00:05:16 2010 -0800 @@ -152,7 +152,16 @@ } /** - * @inheritDoc + * Notifies this UI delegate to repaint the specified component. + * This method paints the component background, then calls + * the {@link #paint(SynthContext,Graphics)} method. + * + *

In general, this method does not need to be overridden by subclasses. + * All Look and Feel rendering code should reside in the {@code paint} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void update(Graphics g, JComponent c) { @@ -166,7 +175,13 @@ } /** - * @inheritDoc + * Paints the specified component according to the Look and Feel. + *

This method is not used by Synth Look and Feel. + * Painting is handled by the {@link #paint(SynthContext,Graphics)} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void paint(Graphics g, JComponent c) { @@ -180,7 +195,8 @@ * Paints the specified component. This implementation does nothing. * * @param context context for the component being painted - * @param g {@code Graphics} object used for painting + * @param g the {@code Graphics} object used for painting + * @see #update(Graphics,JComponent) */ protected void paint(SynthContext context, Graphics g) { } diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/plaf/synth/SynthDesktopPaneUI.java --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthDesktopPaneUI.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthDesktopPaneUI.java Tue Feb 09 00:05:16 2010 -0800 @@ -439,7 +439,16 @@ } /** - * @inheritDoc + * Notifies this UI delegate to repaint the specified component. + * This method paints the component background, then calls + * the {@link #paint(SynthContext,Graphics)} method. + * + *

In general, this method does not need to be overridden by subclasses. + * All Look and Feel rendering code should reside in the {@code paint} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void update(Graphics g, JComponent c) { @@ -453,7 +462,13 @@ } /** - * @inheritDoc + * Paints the specified component according to the Look and Feel. + *

This method is not used by Synth Look and Feel. + * Painting is handled by the {@link #paint(SynthContext,Graphics)} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void paint(Graphics g, JComponent c) { @@ -467,7 +482,8 @@ * Paints the specified component. This implementation does nothing. * * @param context context for the component being painted - * @param g {@code Graphics} object used for painting + * @param g the {@code Graphics} object used for painting + * @see #update(Graphics,JComponent) */ protected void paint(SynthContext context, Graphics g) { } diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/plaf/synth/SynthEditorPaneUI.java --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthEditorPaneUI.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthEditorPaneUI.java Tue Feb 09 00:05:16 2010 -0800 @@ -148,7 +148,16 @@ } /** - * @inheritDoc + * Notifies this UI delegate to repaint the specified component. + * This method paints the component background, then calls + * the {@link #paint(SynthContext,Graphics)} method. + * + *

In general, this method does not need to be overridden by subclasses. + * All Look and Feel rendering code should reside in the {@code paint} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void update(Graphics g, JComponent c) { @@ -164,7 +173,8 @@ * Paints the specified component. * * @param context context for the component being painted - * @param g {@code Graphics} object used for painting + * @param g the {@code Graphics} object used for painting + * @see #update(Graphics,JComponent) */ protected void paint(SynthContext context, Graphics g) { super.paint(g, getComponent()); diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/plaf/synth/SynthInternalFrameUI.java --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthInternalFrameUI.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthInternalFrameUI.java Tue Feb 09 00:05:16 2010 -0800 @@ -194,7 +194,16 @@ } /** - * @inheritDoc + * Notifies this UI delegate to repaint the specified component. + * This method paints the component background, then calls + * the {@link #paint(SynthContext,Graphics)} method. + * + *

In general, this method does not need to be overridden by subclasses. + * All Look and Feel rendering code should reside in the {@code paint} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void update(Graphics g, JComponent c) { @@ -208,7 +217,13 @@ } /** - * @inheritDoc + * Paints the specified component according to the Look and Feel. + *

This method is not used by Synth Look and Feel. + * Painting is handled by the {@link #paint(SynthContext,Graphics)} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void paint(Graphics g, JComponent c) { @@ -222,7 +237,8 @@ * Paints the specified component. This implementation does nothing. * * @param context context for the component being painted - * @param g {@code Graphics} object used for painting + * @param g the {@code Graphics} object used for painting + * @see #update(Graphics,JComponent) */ protected void paint(SynthContext context, Graphics g) { } diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/plaf/synth/SynthLabelUI.java --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthLabelUI.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthLabelUI.java Tue Feb 09 00:05:16 2010 -0800 @@ -156,12 +156,16 @@ } /** - * Notifies this UI delegate that it's time to paint the specified - * component. This method is invoked by JComponent - * when the specified component is being painted. - */ - /** - * @inheritDoc + * Notifies this UI delegate to repaint the specified component. + * This method paints the component background, then calls + * the {@link #paint(SynthContext,Graphics)} method. + * + *

In general, this method does not need to be overridden by subclasses. + * All Look and Feel rendering code should reside in the {@code paint} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void update(Graphics g, JComponent c) { @@ -175,7 +179,13 @@ } /** - * @inheritDoc + * Paints the specified component according to the Look and Feel. + *

This method is not used by Synth Look and Feel. + * Painting is handled by the {@link #paint(SynthContext,Graphics)} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void paint(Graphics g, JComponent c) { @@ -189,7 +199,8 @@ * Paints the specified component. * * @param context context for the component being painted - * @param g {@code Graphics} object used for painting + * @param g the {@code Graphics} object used for painting + * @see #update(Graphics,JComponent) */ protected void paint(SynthContext context, Graphics g) { JLabel label = (JLabel)context.getComponent(); diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/plaf/synth/SynthListUI.java --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthListUI.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthListUI.java Tue Feb 09 00:05:16 2010 -0800 @@ -57,7 +57,16 @@ } /** - * @inheritDoc + * Notifies this UI delegate to repaint the specified component. + * This method paints the component background, then calls + * the {@link #paint} method. + * + *

In general, this method does not need to be overridden by subclasses. + * All Look and Feel rendering code should reside in the {@code paint} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint */ @Override public void update(Graphics g, JComponent c) { diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuBarUI.java --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuBarUI.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuBarUI.java Tue Feb 09 00:05:16 2010 -0800 @@ -125,7 +125,16 @@ } /** - * @inheritDoc + * Notifies this UI delegate to repaint the specified component. + * This method paints the component background, then calls + * the {@link #paint(SynthContext,Graphics)} method. + * + *

In general, this method does not need to be overridden by subclasses. + * All Look and Feel rendering code should reside in the {@code paint} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void update(Graphics g, JComponent c) { @@ -139,7 +148,13 @@ } /** - * @inheritDoc + * Paints the specified component according to the Look and Feel. + *

This method is not used by Synth Look and Feel. + * Painting is handled by the {@link #paint(SynthContext,Graphics)} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void paint(Graphics g, JComponent c) { @@ -153,7 +168,8 @@ * Paints the specified component. This implementation does nothing. * * @param context context for the component being painted - * @param g {@code Graphics} object used for painting + * @param g the {@code Graphics} object used for painting + * @see #update(Graphics,JComponent) */ protected void paint(SynthContext context, Graphics g) { } diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuItemUI.java --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuItemUI.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuItemUI.java Tue Feb 09 00:05:16 2010 -0800 @@ -227,7 +227,16 @@ /** - * @inheritDoc + * Notifies this UI delegate to repaint the specified component. + * This method paints the component background, then calls + * the {@link #paint(SynthContext,Graphics)} method. + * + *

In general, this method does not need to be overridden by subclasses. + * All Look and Feel rendering code should reside in the {@code paint} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void update(Graphics g, JComponent c) { @@ -240,7 +249,13 @@ } /** - * @inheritDoc + * Paints the specified component according to the Look and Feel. + *

This method is not used by Synth Look and Feel. + * Painting is handled by the {@link #paint(SynthContext,Graphics)} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void paint(Graphics g, JComponent c) { @@ -254,7 +269,8 @@ * Paints the specified component. * * @param context context for the component being painted - * @param g {@code Graphics} object used for painting + * @param g the {@code Graphics} object used for painting + * @see #update(Graphics,JComponent) */ protected void paint(SynthContext context, Graphics g) { SynthContext accContext = getContext(menuItem, diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuUI.java --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuUI.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuUI.java Tue Feb 09 00:05:16 2010 -0800 @@ -227,7 +227,16 @@ } /** - * @inheritDoc + * Notifies this UI delegate to repaint the specified component. + * This method paints the component background, then calls + * the {@link #paint(SynthContext,Graphics)} method. + * + *

In general, this method does not need to be overridden by subclasses. + * All Look and Feel rendering code should reside in the {@code paint} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void update(Graphics g, JComponent c) { @@ -241,7 +250,13 @@ } /** - * @inheritDoc + * Paints the specified component according to the Look and Feel. + *

This method is not used by Synth Look and Feel. + * Painting is handled by the {@link #paint(SynthContext,Graphics)} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void paint(Graphics g, JComponent c) { @@ -255,7 +270,8 @@ * Paints the specified component. This implementation does nothing. * * @param context context for the component being painted - * @param g {@code Graphics} object used for painting + * @param g the {@code Graphics} object used for painting + * @see #update(Graphics,JComponent) */ protected void paint(SynthContext context, Graphics g) { SynthContext accContext = getContext(menuItem, diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/plaf/synth/SynthOptionPaneUI.java --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthOptionPaneUI.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthOptionPaneUI.java Tue Feb 09 00:05:16 2010 -0800 @@ -149,7 +149,16 @@ } /** - * @inheritDoc + * Notifies this UI delegate to repaint the specified component. + * This method paints the component background, then calls + * the {@link #paint(SynthContext,Graphics)} method. + * + *

In general, this method does not need to be overridden by subclasses. + * All Look and Feel rendering code should reside in the {@code paint} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void update(Graphics g, JComponent c) { @@ -163,7 +172,13 @@ } /** - * @inheritDoc + * Paints the specified component according to the Look and Feel. + *

This method is not used by Synth Look and Feel. + * Painting is handled by the {@link #paint(SynthContext,Graphics)} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void paint(Graphics g, JComponent c) { @@ -177,7 +192,8 @@ * Paints the specified component. This implementation does nothing. * * @param context context for the component being painted - * @param g {@code Graphics} object used for painting + * @param g the {@code Graphics} object used for painting + * @see #update(Graphics,JComponent) */ protected void paint(SynthContext context, Graphics g) { } diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/plaf/synth/SynthPanelUI.java --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthPanelUI.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthPanelUI.java Tue Feb 09 00:05:16 2010 -0800 @@ -136,7 +136,16 @@ } /** - * @inheritDoc + * Notifies this UI delegate to repaint the specified component. + * This method paints the component background, then calls + * the {@link #paint(SynthContext,Graphics)} method. + * + *

In general, this method does not need to be overridden by subclasses. + * All Look and Feel rendering code should reside in the {@code paint} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void update(Graphics g, JComponent c) { @@ -150,7 +159,13 @@ } /** - * @inheritDoc + * Paints the specified component according to the Look and Feel. + *

This method is not used by Synth Look and Feel. + * Painting is handled by the {@link #paint(SynthContext,Graphics)} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void paint(Graphics g, JComponent c) { @@ -164,7 +179,8 @@ * Paints the specified component. This implementation does nothing. * * @param context context for the component being painted - * @param g {@code Graphics} object used for painting + * @param g the {@code Graphics} object used for painting + * @see #update(Graphics,JComponent) */ protected void paint(SynthContext context, Graphics g) { // do actual painting diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/plaf/synth/SynthPopupMenuUI.java --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthPopupMenuUI.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthPopupMenuUI.java Tue Feb 09 00:05:16 2010 -0800 @@ -132,7 +132,16 @@ } /** - * @inheritDoc + * Notifies this UI delegate to repaint the specified component. + * This method paints the component background, then calls + * the {@link #paint(SynthContext,Graphics)} method. + * + *

In general, this method does not need to be overridden by subclasses. + * All Look and Feel rendering code should reside in the {@code paint} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void update(Graphics g, JComponent c) { @@ -146,7 +155,13 @@ } /** - * @inheritDoc + * Paints the specified component according to the Look and Feel. + *

This method is not used by Synth Look and Feel. + * Painting is handled by the {@link #paint(SynthContext,Graphics)} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void paint(Graphics g, JComponent c) { @@ -160,7 +175,8 @@ * Paints the specified component. This implementation does nothing. * * @param context context for the component being painted - * @param g {@code Graphics} object used for painting + * @param g the {@code Graphics} object used for painting + * @see #update(Graphics,JComponent) */ protected void paint(SynthContext context, Graphics g) { } diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/plaf/synth/SynthProgressBarUI.java --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthProgressBarUI.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthProgressBarUI.java Tue Feb 09 00:05:16 2010 -0800 @@ -193,7 +193,16 @@ } /** - * @inheritDoc + * Notifies this UI delegate to repaint the specified component. + * This method paints the component background, then calls + * the {@link #paint(SynthContext,Graphics)} method. + * + *

In general, this method does not need to be overridden by subclasses. + * All Look and Feel rendering code should reside in the {@code paint} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void update(Graphics g, JComponent c) { @@ -208,7 +217,13 @@ } /** - * @inheritDoc + * Paints the specified component according to the Look and Feel. + *

This method is not used by Synth Look and Feel. + * Painting is handled by the {@link #paint(SynthContext,Graphics)} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void paint(Graphics g, JComponent c) { @@ -222,7 +237,8 @@ * Paints the specified component. * * @param context context for the component being painted - * @param g {@code Graphics} object used for painting + * @param g the {@code Graphics} object used for painting + * @see #update(Graphics,JComponent) */ protected void paint(SynthContext context, Graphics g) { JProgressBar pBar = (JProgressBar)context.getComponent(); diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/plaf/synth/SynthRootPaneUI.java --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthRootPaneUI.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthRootPaneUI.java Tue Feb 09 00:05:16 2010 -0800 @@ -102,7 +102,16 @@ } /** - * @inheritDoc + * Notifies this UI delegate to repaint the specified component. + * This method paints the component background, then calls + * the {@link #paint(SynthContext,Graphics)} method. + * + *

In general, this method does not need to be overridden by subclasses. + * All Look and Feel rendering code should reside in the {@code paint} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void update(Graphics g, JComponent c) { @@ -116,7 +125,13 @@ } /** - * @inheritDoc + * Paints the specified component according to the Look and Feel. + *

This method is not used by Synth Look and Feel. + * Painting is handled by the {@link #paint(SynthContext,Graphics)} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void paint(Graphics g, JComponent c) { @@ -130,7 +145,8 @@ * Paints the specified component. This implementation does nothing. * * @param context context for the component being painted - * @param g {@code Graphics} object used for painting + * @param g the {@code Graphics} object used for painting + * @see #update(Graphics,JComponent) */ protected void paint(SynthContext context, Graphics g) { } diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/plaf/synth/SynthScrollBarUI.java --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthScrollBarUI.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthScrollBarUI.java Tue Feb 09 00:05:16 2010 -0800 @@ -222,7 +222,16 @@ } /** - * @inheritDoc + * Notifies this UI delegate to repaint the specified component. + * This method paints the component background, then calls + * the {@link #paint(SynthContext,Graphics)} method. + * + *

In general, this method does not need to be overridden by subclasses. + * All Look and Feel rendering code should reside in the {@code paint} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void update(Graphics g, JComponent c) { @@ -237,7 +246,13 @@ } /** - * @inheritDoc + * Paints the specified component according to the Look and Feel. + *

This method is not used by Synth Look and Feel. + * Painting is handled by the {@link #paint(SynthContext,Graphics)} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void paint(Graphics g, JComponent c) { @@ -251,7 +266,8 @@ * Paints the specified component. * * @param context context for the component being painted - * @param g {@code Graphics} object used for painting + * @param g the {@code Graphics} object used for painting + * @see #update(Graphics,JComponent) */ protected void paint(SynthContext context, Graphics g) { SynthContext subcontext = getContext(scrollbar, diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/plaf/synth/SynthScrollPaneUI.java --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthScrollPaneUI.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthScrollPaneUI.java Tue Feb 09 00:05:16 2010 -0800 @@ -64,7 +64,16 @@ } /** - * @inheritDoc + * Notifies this UI delegate to repaint the specified component. + * This method paints the component background, then calls + * the {@link #paint(SynthContext,Graphics)} method. + * + *

In general, this method does not need to be overridden by subclasses. + * All Look and Feel rendering code should reside in the {@code paint} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void update(Graphics g, JComponent c) { @@ -78,7 +87,13 @@ } /** - * @inheritDoc + * Paints the specified component according to the Look and Feel. + *

This method is not used by Synth Look and Feel. + * Painting is handled by the {@link #paint(SynthContext,Graphics)} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void paint(Graphics g, JComponent c) { @@ -92,7 +107,8 @@ * Paints the specified component. * * @param context context for the component being painted - * @param g {@code Graphics} object used for painting + * @param g the {@code Graphics} object used for painting + * @see #update(Graphics,JComponent) */ protected void paint(SynthContext context, Graphics g) { Border vpBorder = scrollpane.getViewportBorder(); diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/plaf/synth/SynthSeparatorUI.java --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthSeparatorUI.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthSeparatorUI.java Tue Feb 09 00:05:16 2010 -0800 @@ -135,7 +135,16 @@ } /** - * @inheritDoc + * Notifies this UI delegate to repaint the specified component. + * This method paints the component background, then calls + * the {@link #paint(SynthContext,Graphics)} method. + * + *

In general, this method does not need to be overridden by subclasses. + * All Look and Feel rendering code should reside in the {@code paint} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void update(Graphics g, JComponent c) { @@ -151,7 +160,13 @@ } /** - * @inheritDoc + * Paints the specified component according to the Look and Feel. + *

This method is not used by Synth Look and Feel. + * Painting is handled by the {@link #paint(SynthContext,Graphics)} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void paint(Graphics g, JComponent c) { @@ -165,7 +180,8 @@ * Paints the specified component. * * @param context context for the component being painted - * @param g {@code Graphics} object used for painting + * @param g the {@code Graphics} object used for painting + * @see #update(Graphics,JComponent) */ protected void paint(SynthContext context, Graphics g) { JSeparator separator = (JSeparator)context.getComponent(); diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/plaf/synth/SynthSliderUI.java --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthSliderUI.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthSliderUI.java Tue Feb 09 00:05:16 2010 -0800 @@ -788,7 +788,16 @@ } /** - * @inheritDoc + * Notifies this UI delegate to repaint the specified component. + * This method paints the component background, then calls + * the {@link #paint(SynthContext,Graphics)} method. + * + *

In general, this method does not need to be overridden by subclasses. + * All Look and Feel rendering code should reside in the {@code paint} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void update(Graphics g, JComponent c) { @@ -802,7 +811,13 @@ } /** - * @inheritDoc + * Paints the specified component according to the Look and Feel. + *

This method is not used by Synth Look and Feel. + * Painting is handled by the {@link #paint(SynthContext,Graphics)} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void paint(Graphics g, JComponent c) { @@ -815,7 +830,8 @@ * Paints the specified component. * * @param context context for the component being painted - * @param g {@code Graphics} object used for painting + * @param g the {@code Graphics} object used for painting + * @see #update(Graphics,JComponent) */ protected void paint(SynthContext context, Graphics g) { recalculateIfInsetsChanged(); diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/plaf/synth/SynthSpinnerUI.java --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthSpinnerUI.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthSpinnerUI.java Tue Feb 09 00:05:16 2010 -0800 @@ -283,7 +283,16 @@ } /** - * @inheritDoc + * Notifies this UI delegate to repaint the specified component. + * This method paints the component background, then calls + * the {@link #paint(SynthContext,Graphics)} method. + * + *

In general, this method does not need to be overridden by subclasses. + * All Look and Feel rendering code should reside in the {@code paint} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void update(Graphics g, JComponent c) { @@ -298,7 +307,13 @@ /** - * @inheritDoc + * Paints the specified component according to the Look and Feel. + *

This method is not used by Synth Look and Feel. + * Painting is handled by the {@link #paint(SynthContext,Graphics)} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void paint(Graphics g, JComponent c) { @@ -312,7 +327,8 @@ * Paints the specified component. This implementation does nothing. * * @param context context for the component being painted - * @param g {@code Graphics} object used for painting + * @param g the {@code Graphics} object used for painting + * @see #update(Graphics,JComponent) */ protected void paint(SynthContext context, Graphics g) { } diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/plaf/synth/SynthSplitPaneUI.java --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthSplitPaneUI.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthSplitPaneUI.java Tue Feb 09 00:05:16 2010 -0800 @@ -269,7 +269,16 @@ } /** - * @inheritDoc + * Notifies this UI delegate to repaint the specified component. + * This method paints the component background, then calls + * the {@link #paint(SynthContext,Graphics)} method. + * + *

In general, this method does not need to be overridden by subclasses. + * All Look and Feel rendering code should reside in the {@code paint} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void update(Graphics g, JComponent c) { @@ -283,7 +292,13 @@ } /** - * @inheritDoc + * Paints the specified component according to the Look and Feel. + *

This method is not used by Synth Look and Feel. + * Painting is handled by the {@link #paint(SynthContext,Graphics)} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void paint(Graphics g, JComponent c) { @@ -297,7 +312,8 @@ * Paints the specified component. This implementation does nothing. * * @param context context for the component being painted - * @param g {@code Graphics} object used for painting + * @param g the {@code Graphics} object used for painting + * @see #update(Graphics,JComponent) */ protected void paint(SynthContext context, Graphics g) { // This is done to update package private variables in diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/plaf/synth/SynthTabbedPaneUI.java --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTabbedPaneUI.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTabbedPaneUI.java Tue Feb 09 00:05:16 2010 -0800 @@ -92,8 +92,8 @@ private SynthStyle tabAreaStyle; private SynthStyle tabContentStyle; - private Rectangle textRect; - private Rectangle iconRect; + private Rectangle textRect = new Rectangle(); + private Rectangle iconRect = new Rectangle(); private Rectangle tabAreaBounds = new Rectangle(); @@ -115,11 +115,6 @@ return new SynthTabbedPaneUI(); } - private SynthTabbedPaneUI() { - textRect = new Rectangle(); - iconRect = new Rectangle(); - } - private boolean scrollableTabLayoutEnabled() { return (tabPane.getTabLayoutPolicy() == JTabbedPane.SCROLL_TAB_LAYOUT); } @@ -362,7 +357,16 @@ } /** - * @inheritDoc + * Notifies this UI delegate to repaint the specified component. + * This method paints the component background, then calls + * the {@link #paint(SynthContext,Graphics)} method. + * + *

In general, this method does not need to be overridden by subclasses. + * All Look and Feel rendering code should reside in the {@code paint} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void update(Graphics g, JComponent c) { @@ -409,7 +413,13 @@ } /** - * @inheritDoc + * Paints the specified component according to the Look and Feel. + *

This method is not used by Synth Look and Feel. + * Painting is handled by the {@link #paint(SynthContext,Graphics)} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void paint(Graphics g, JComponent c) { @@ -423,7 +433,8 @@ * Paints the specified component. * * @param context context for the component being painted - * @param g {@code Graphics} object used for painting + * @param g the {@code Graphics} object used for painting + * @see #update(Graphics,JComponent) */ protected void paint(SynthContext context, Graphics g) { int selectedIndex = tabPane.getSelectedIndex(); diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/plaf/synth/SynthTableHeaderUI.java --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTableHeaderUI.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTableHeaderUI.java Tue Feb 09 00:05:16 2010 -0800 @@ -123,7 +123,16 @@ } /** - * @inheritDoc + * Notifies this UI delegate to repaint the specified component. + * This method paints the component background, then calls + * the {@link #paint(SynthContext,Graphics)} method. + * + *

In general, this method does not need to be overridden by subclasses. + * All Look and Feel rendering code should reside in the {@code paint} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void update(Graphics g, JComponent c) { @@ -137,7 +146,13 @@ } /** - * @inheritDoc + * Paints the specified component according to the Look and Feel. + *

This method is not used by Synth Look and Feel. + * Painting is handled by the {@link #paint(SynthContext,Graphics)} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void paint(Graphics g, JComponent c) { @@ -151,7 +166,8 @@ * Paints the specified component. * * @param context context for the component being painted - * @param g {@code Graphics} object used for painting + * @param g the {@code Graphics} object used for painting + * @see #update(Graphics,JComponent) */ protected void paint(SynthContext context, Graphics g) { super.paint(g, context.getComponent()); diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/plaf/synth/SynthTableUI.java --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTableUI.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTableUI.java Tue Feb 09 00:05:16 2010 -0800 @@ -256,7 +256,16 @@ // /** - * @inheritDoc + * Notifies this UI delegate to repaint the specified component. + * This method paints the component background, then calls + * the {@link #paint(SynthContext,Graphics)} method. + * + *

In general, this method does not need to be overridden by subclasses. + * All Look and Feel rendering code should reside in the {@code paint} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void update(Graphics g, JComponent c) { @@ -279,7 +288,13 @@ } /** - * @inheritDoc + * Paints the specified component according to the Look and Feel. + *

This method is not used by Synth Look and Feel. + * Painting is handled by the {@link #paint(SynthContext,Graphics)} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void paint(Graphics g, JComponent c) { @@ -293,7 +308,8 @@ * Paints the specified component. * * @param context context for the component being painted - * @param g {@code Graphics} object used for painting + * @param g the {@code Graphics} object used for painting + * @see #update(Graphics,JComponent) */ protected void paint(SynthContext context, Graphics g) { Rectangle clip = g.getClipBounds(); diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/plaf/synth/SynthTextAreaUI.java --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextAreaUI.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextAreaUI.java Tue Feb 09 00:05:16 2010 -0800 @@ -123,7 +123,16 @@ } /** - * @inheritDoc + * Notifies this UI delegate to repaint the specified component. + * This method paints the component background, then calls + * the {@link #paint(SynthContext,Graphics)} method. + * + *

In general, this method does not need to be overridden by subclasses. + * All Look and Feel rendering code should reside in the {@code paint} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void update(Graphics g, JComponent c) { @@ -140,7 +149,8 @@ * Paints the specified component. * * @param context context for the component being painted - * @param g {@code Graphics} object used for painting + * @param g the {@code Graphics} object used for painting + * @see #update(Graphics,JComponent) */ protected void paint(SynthContext context, Graphics g) { super.paint(g, getComponent()); diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/plaf/synth/SynthTextFieldUI.java --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextFieldUI.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextFieldUI.java Tue Feb 09 00:05:16 2010 -0800 @@ -161,7 +161,16 @@ } /** - * @inheritDoc + * Notifies this UI delegate to repaint the specified component. + * This method paints the component background, then calls + * the {@link #paint(SynthContext,Graphics)} method. + * + *

In general, this method does not need to be overridden by subclasses. + * All Look and Feel rendering code should reside in the {@code paint} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void update(Graphics g, JComponent c) { @@ -182,7 +191,8 @@ * model to potentially be updated asynchronously. * * @param context context for the component being painted - * @param g {@code Graphics} object used for painting + * @param g the {@code Graphics} object used for painting + * @see #update(Graphics,JComponent) */ protected void paint(SynthContext context, Graphics g) { super.paint(g, getComponent()); diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/plaf/synth/SynthToolBarUI.java --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthToolBarUI.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthToolBarUI.java Tue Feb 09 00:05:16 2010 -0800 @@ -198,7 +198,16 @@ } /** - * @inheritDoc + * Notifies this UI delegate to repaint the specified component. + * This method paints the component background, then calls + * the {@link #paint(SynthContext,Graphics)} method. + * + *

In general, this method does not need to be overridden by subclasses. + * All Look and Feel rendering code should reside in the {@code paint} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void update(Graphics g, JComponent c) { @@ -213,7 +222,13 @@ } /** - * @inheritDoc + * Paints the specified component according to the Look and Feel. + *

This method is not used by Synth Look and Feel. + * Painting is handled by the {@link #paint(SynthContext,Graphics)} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void paint(Graphics g, JComponent c) { @@ -258,7 +273,8 @@ * Paints the toolbar. * * @param context context for the component being painted - * @param g {@code Graphics} object used for painting + * @param g the {@code Graphics} object used for painting + * @see #update(Graphics,JComponent) */ protected void paint(SynthContext context, Graphics g) { if (handleIcon != null && toolBar.isFloatable()) { diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/plaf/synth/SynthToolTipUI.java --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthToolTipUI.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthToolTipUI.java Tue Feb 09 00:05:16 2010 -0800 @@ -121,7 +121,16 @@ } /** - * @inheritDoc + * Notifies this UI delegate to repaint the specified component. + * This method paints the component background, then calls + * the {@link #paint(SynthContext,Graphics)} method. + * + *

In general, this method does not need to be overridden by subclasses. + * All Look and Feel rendering code should reside in the {@code paint} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void update(Graphics g, JComponent c) { @@ -144,7 +153,13 @@ } /** - * @inheritDoc + * Paints the specified component according to the Look and Feel. + *

This method is not used by Synth Look and Feel. + * Painting is handled by the {@link #paint(SynthContext,Graphics)} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void paint(Graphics g, JComponent c) { @@ -158,7 +173,8 @@ * Paints the specified component. * * @param context context for the component being painted - * @param g {@code Graphics} object used for painting + * @param g the {@code Graphics} object used for painting + * @see #update(Graphics,JComponent) */ protected void paint(SynthContext context, Graphics g) { JToolTip tip = (JToolTip)context.getComponent(); diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/plaf/synth/SynthTreeUI.java --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTreeUI.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTreeUI.java Tue Feb 09 00:05:16 2010 -0800 @@ -250,7 +250,16 @@ } /** - * @inheritDoc + * Notifies this UI delegate to repaint the specified component. + * This method paints the component background, then calls + * the {@link #paint(SynthContext,Graphics)} method. + * + *

In general, this method does not need to be overridden by subclasses. + * All Look and Feel rendering code should reside in the {@code paint} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void update(Graphics g, JComponent c) { @@ -273,7 +282,13 @@ } /** - * @inheritDoc + * Paints the specified component according to the Look and Feel. + *

This method is not used by Synth Look and Feel. + * Painting is handled by the {@link #paint(SynthContext,Graphics)} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void paint(Graphics g, JComponent c) { @@ -287,7 +302,8 @@ * Paints the specified component. * * @param context context for the component being painted - * @param g {@code Graphics} object used for painting + * @param g the {@code Graphics} object used for painting + * @see #update(Graphics,JComponent) */ protected void paint(SynthContext context, Graphics g) { paintContext = context; diff -r d15d1cfb440b -r 0d8932a7627e jdk/src/share/classes/javax/swing/plaf/synth/SynthViewportUI.java --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthViewportUI.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthViewportUI.java Tue Feb 09 00:05:16 2010 -0800 @@ -150,7 +150,16 @@ } /** - * @inheritDoc + * Notifies this UI delegate to repaint the specified component. + * This method paints the component background, then calls + * the {@link #paint(SynthContext,Graphics)} method. + * + *

In general, this method does not need to be overridden by subclasses. + * All Look and Feel rendering code should reside in the {@code paint} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void update(Graphics g, JComponent c) { @@ -174,7 +183,13 @@ } /** - * @inheritDoc + * Paints the specified component according to the Look and Feel. + *

This method is not used by Synth Look and Feel. + * Painting is handled by the {@link #paint(SynthContext,Graphics)} method. + * + * @param g the {@code Graphics} object used for painting + * @param c the component being painted + * @see #paint(SynthContext,Graphics) */ @Override public void paint(Graphics g, JComponent c) { @@ -188,7 +203,8 @@ * Paints the specified component. This implementation does nothing. * * @param context context for the component being painted - * @param g {@code Graphics} object used for painting + * @param g the {@code Graphics} object used for painting + * @see #update(Graphics,JComponent) */ protected void paint(SynthContext context, Graphics g) { } diff -r d15d1cfb440b -r 0d8932a7627e jdk/test/java/beans/Introspector/6380849/TestBeanInfo.java --- a/jdk/test/java/beans/Introspector/6380849/TestBeanInfo.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/test/java/beans/Introspector/6380849/TestBeanInfo.java Tue Feb 09 00:05:16 2010 -0800 @@ -1,5 +1,5 @@ /** - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2010 Sun Microsystems, Inc. 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 @@ -38,6 +38,7 @@ import java.beans.BeanInfo; import java.beans.Introspector; +import java.lang.ref.Reference; import java.lang.reflect.Field; import sun.awt.SunToolkit; @@ -61,9 +62,10 @@ try { actual = Introspector.getBeanInfo(type); type = actual.getClass(); - Field field = type.getDeclaredField("targetBeanInfo"); // NON-NLS: field name + Field field = type.getDeclaredField("targetBeanInfoRef"); // NON-NLS: field name field.setAccessible(true); - actual = (BeanInfo) field.get(actual); + Reference ref = (Reference) field.get(actual); + actual = (BeanInfo) ref.get(); } catch (Exception exception) { throw new Error("unexpected error", exception); diff -r d15d1cfb440b -r 0d8932a7627e jdk/test/java/beans/Introspector/Test5102804.java --- a/jdk/test/java/beans/Introspector/Test5102804.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/test/java/beans/Introspector/Test5102804.java Tue Feb 09 00:05:16 2010 -0800 @@ -1,5 +1,5 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2010 Sun Microsystems, Inc. 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 @@ -24,9 +24,9 @@ /* * @test * @bug 5102804 - * @ignore This test is not predictable with regards to GC * @summary Tests memory leak * @author Sergey Malenkov + * @run main/othervm -ms16m -mx16m Test5102804 */ import java.beans.BeanInfo; diff -r d15d1cfb440b -r 0d8932a7627e jdk/test/java/beans/XMLEncoder/Test4646747.java --- a/jdk/test/java/beans/XMLEncoder/Test4646747.java Tue Feb 09 00:02:38 2010 -0800 +++ b/jdk/test/java/beans/XMLEncoder/Test4646747.java Tue Feb 09 00:05:16 2010 -0800 @@ -1,5 +1,5 @@ /* - * Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2004-2010 Sun Microsystems, Inc. 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 @@ -26,6 +26,7 @@ * @bug 4646747 * @summary Tests that persistence delegate is correct after memory stress * @author Mark Davidson + * @run main/othervm -ms16m -mx16m Test4646747 */ import java.beans.DefaultPersistenceDelegate; @@ -41,11 +42,14 @@ encoder.setPersistenceDelegate(Test4646747.class, new MyPersistenceDelegate()); // WARNING: This can eat up a lot of memory Object[] obs = new Object[10000]; - for (int i = 0; i < obs.length; i++) { - obs[i] = new int[1000]; + while (obs != null) { + try { + obs = new Object[obs.length + obs.length / 3]; + } + catch (OutOfMemoryError error) { + obs = null; + } } - System.gc(); - System.gc(); PersistenceDelegate pd = encoder.getPersistenceDelegate(Test4646747.class); if (!(pd instanceof MyPersistenceDelegate)) throw new Error("persistence delegate has been lost"); diff -r d15d1cfb440b -r 0d8932a7627e jdk/test/java/text/Collator/Bug5047314.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/text/Collator/Bug5047314.java Tue Feb 09 00:05:16 2010 -0800 @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2009 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * @test + * @bug 5047314 + * @summary verify that compare() and getCollationKey() don't go into an infinite loop for unfinished Thai/Lao text. + * @run main/timeout=60 Bug5047314 + */ +import java.text.Collator; +import java.util.Locale; + +public class Bug5047314 { + + private static Collator colLao = Collator.getInstance(new Locale("lo")); + private static Collator colThai = Collator.getInstance(new Locale("th")); + + private static String[] textLao = { + "\u0ec0", "\u0ec1", "\u0ec2", "\u0ec3", "\u0ec4" + }; + private static String[] textThai = { + "\u0e40", "\u0e41", "\u0e42", "\u0e43", "\u0e44" + }; + + public static void main(String[] args) { + testLao1(); + testLao2(); + testThai1(); + testThai2(); + } + + private static void testLao1() { + System.out.print("Test(Lao 1) .... "); + for (int i = 0; i < textLao.length; i++) { + colLao.compare(textLao[i], textLao[i]); + } + System.out.println("Passed."); + } + + private static void testLao2() { + System.out.print("Test(Lao 2) .... "); + for (int i = 0; i < textLao.length; i++) { + colLao.compare(textLao[i], textLao[i]); + } + System.out.println("Passed."); + } + + private static void testThai1() { + System.out.print("Test(Thai 1) .... "); + for (int i = 0; i < textThai.length; i++) { + colThai.compare(textThai[i], textThai[i]); + } + System.out.println("Passed."); + } + + private static void testThai2() { + System.out.print("Test(Thai 2) .... "); + for (int i = 0; i < textThai.length; i++) { + colThai.getCollationKey(textThai[i]); + } + System.out.println("Passed."); + } + +} diff -r d15d1cfb440b -r 0d8932a7627e jdk/test/java/util/TimeZone/TimeZoneDatePermissionCheck.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/util/TimeZone/TimeZoneDatePermissionCheck.java Tue Feb 09 00:05:16 2010 -0800 @@ -0,0 +1,42 @@ +/* Testcase for PR381 Stackoverflow error with security manager, signed jars + * and -Djava.security.debug set. + * Copyright (c) 2009, Red Hat Inc. + * 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. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +import java.util.Date; + +/** + * Test class. Create a test keystore and dummy cert, create a jar file to + * sign with the test class in it. Sign it run it with the security manager + * on, plus accesscontroller debugging, will go into infinite recursion + * trying to get enough permissions for printing Date of failing + * certificate, unless fix is applied. + */ +public class TimeZoneDatePermissionCheck +{ + public static void main(String[] args) + { + System.out.println(new Date()); + } +} diff -r d15d1cfb440b -r 0d8932a7627e jdk/test/java/util/TimeZone/TimeZoneDatePermissionCheck.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/util/TimeZone/TimeZoneDatePermissionCheck.sh Tue Feb 09 00:05:16 2010 -0800 @@ -0,0 +1,58 @@ +# Testcase for PR381 Stackoverflow error with security manager, signed jars +# and -Djava.security.debug set. +# +# Copyright (c) 2009, Red Hat Inc. +# +# This code is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# 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 for more details. +# +# 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. +# +# @test +# @bug 6584033 +# @summary Stackoverflow error with security manager, signed jars and debug. +# @build TimeZoneDatePermissionCheck +# @run shell TimeZoneDatePermissionCheck.sh + +# Set default if not run under jtreg from test dir itself +if [ "${TESTCLASSES}" = "" ] ; then + TESTCLASSES="." +fi +if [ "${TESTJAVA}" = "" ] ; then + TESTJAVA=/usr +fi + +# create a test keystore and dummy cert +rm -f ${TESTCLASSES}/timezonedatetest.store +${TESTJAVA}/bin/keytool -genkeypair -alias testcert \ + -keystore ${TESTCLASSES}/timezonedatetest.store \ + -storepass testpass -validity 360 \ + -dname "cn=Mark Wildebeest, ou=FreeSoft, o=Red Hat, c=NL" \ + -keypass testpass + +# create a jar file to sign with the test class in it. +rm -f ${TESTCLASSES}/timezonedatetest.jar +${TESTJAVA}/bin/jar cf \ + ${TESTCLASSES}/timezonedatetest.jar \ + -C ${TESTCLASSES} TimeZoneDatePermissionCheck.class + +# sign it +${TESTJAVA}/bin/jarsigner \ + -keystore ${TESTCLASSES}/timezonedatetest.store \ + -storepass testpass ${TESTCLASSES}/timezonedatetest.jar testcert + +# run it with the security manager on, plus accesscontroller debugging +# will go into infinite recursion trying to get enough permissions for +# printing Date of failing certificate unless fix is applied. +${TESTJAVA}/bin/java -Djava.security.manager \ + -Djava.security.debug=access,failure,policy \ + -cp ${TESTCLASSES}/timezonedatetest.jar TimeZoneDatePermissionCheck diff -r d15d1cfb440b -r 0d8932a7627e jdk/test/javax/swing/MultiUIDefaults/4300666/bug4300666.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/javax/swing/MultiUIDefaults/4300666/bug4300666.html Tue Feb 09 00:05:16 2010 -0800 @@ -0,0 +1,28 @@ + + + + + + + diff -r d15d1cfb440b -r 0d8932a7627e jdk/test/javax/swing/MultiUIDefaults/4300666/bug4300666.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/javax/swing/MultiUIDefaults/4300666/bug4300666.java Tue Feb 09 00:05:16 2010 -0800 @@ -0,0 +1,40 @@ +/* + * Copyright 2007 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* @test + @bug 4300666 + @summary Printing UIDefaults throws NoSuchElementExcept + @author Andrey Pikalev + @run applet bug4300666.html +*/ + +import javax.swing.*; + + +public class bug4300666 extends JApplet { + + public void init() { + UIDefaults d = UIManager.getDefaults(); + d.toString(); + } +} diff -r d15d1cfb440b -r 0d8932a7627e jdk/test/javax/swing/MultiUIDefaults/4331767/bug4331767.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/javax/swing/MultiUIDefaults/4331767/bug4331767.java Tue Feb 09 00:05:16 2010 -0800 @@ -0,0 +1,94 @@ +/* + * Copyright 2007 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* @test + @bug 4331767 + @summary Tests that custom implementation of UIDefaults.getUIError() is + called when an UI error occurs + @author Peter Zhelezniakov + @run main bug4331767 +*/ +import javax.swing.*; +import javax.swing.plaf.metal.MetalLookAndFeel; +import java.util.Locale; + +public class bug4331767 +{ + private static boolean passed = false; + + public static void main(String[] argv) { + try { + UIManager.setLookAndFeel(new BrokenLookAndFeel()); + } catch (Exception e) { + throw new Error("Failed to set BrokenLookAndFeel, cannot test", e); + } + + // This should call BrokenUIDefaults.getUIError() + new JButton(); + + if (!passed) { + throw new RuntimeException("Failed: Custom getUIError() not called"); + } + } + + static class BrokenUIDefaults extends UIDefaults { + UIDefaults defaults; + + public BrokenUIDefaults(UIDefaults def) { + defaults = def; + } + + public Object get(Object key) { + if ("ButtonUI".equals(key)) { + System.err.println("[II] Called BrokenUIDefaults.get(Object)"); + return "a nonexistent class"; + } + return defaults.get(key); + } + + public Object get(Object key, Locale l) { + if ("ButtonUI".equals(key)) { + System.err.println("[II] Called BrokenUIDefaults.get(Object, Locale)"); + return "a nonexistent class"; + } + return defaults.get(key, l); + } + + protected void getUIError(String msg) { + System.err.println("[II] BrokenUIDefaults.getUIError() called, test passes"); + passed = true; + } + } + + static class BrokenLookAndFeel extends MetalLookAndFeel { + UIDefaults defaults; + + public BrokenLookAndFeel() { + defaults = new BrokenUIDefaults(super.getDefaults()); + } + + public UIDefaults getDefaults() { + return defaults; + } + } +} diff -r d15d1cfb440b -r 0d8932a7627e jdk/test/javax/swing/MultiUIDefaults/Test6860438.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/javax/swing/MultiUIDefaults/Test6860438.java Tue Feb 09 00:05:16 2010 -0800 @@ -0,0 +1,98 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* @test + @bug 6860438 + @summary Tests various MultiUIDefaults methods + @author Peter Zhelezniakov + @run main Test6860438 +*/ + +import java.util.Enumeration; +import java.util.Map.Entry; +import java.util.Set; +import javax.swing.UIManager; + +public class Test6860438 +{ + static final String KEY = "Test6860438.key"; + static final String VALUE = "Test6860438.value"; + + void check(Object key, Object value, boolean present, int size) { + check(UIManager.get(key) == value, "UIManager.get()"); + check(UIManager.getDefaults().size() == size, "MultiUIDefaults.size()"); + + checkEnumeration(UIManager.getDefaults().keys(), + key, present, "MultiUIDefaults.keys()"); + checkEnumeration(UIManager.getDefaults().elements(), + value, present, "MultiUIDefaults.elements()"); + + // check MultiUIDefaults.entrySet() + boolean found = false; + Set> entries = UIManager.getDefaults().entrySet(); + for (Entry e: entries) { + if (e.getKey() == key) { + check(e.getValue() == value, "MultiUIDefaults.entrySet()"); + found = true; + } + } + check(found == present, "MultiUIDefaults.entrySet()"); + } + + void checkEnumeration(Enumeration e, Object elem, + boolean present, String error) { + boolean found = false; + while (e.hasMoreElements()) { + if (e.nextElement() == elem) { + found = true; + } + } + check(found == present, error); + } + + void check(boolean condition, String methodName) { + if (! condition) { + throw new RuntimeException(methodName + " failed"); + } + } + + void test() { + int size = UIManager.getDefaults().size(); + + // create a new value, size increases + UIManager.getLookAndFeelDefaults().put(KEY, VALUE); + check(KEY, VALUE, true, size + 1); + + // override the value, size remains the same + UIManager.put(KEY, VALUE); + check(KEY, VALUE, true, size + 1); + + // remove the value, size decreases + UIManager.getDefaults().remove(KEY); + check(KEY, null, false, size); + } + + public static void main(String[] args) { + new Test6860438().test(); + } +} diff -r d15d1cfb440b -r 0d8932a7627e jdk/test/javax/swing/plaf/nimbus/ColorCustomizationTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/javax/swing/plaf/nimbus/ColorCustomizationTest.java Tue Feb 09 00:05:16 2010 -0800 @@ -0,0 +1,165 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* @test + @bug 6860433 + @summary Tests variuos techniques of Nimbus color customization + @author Peter Zhelezniakov + @run main ColorCustomizationTest +*/ + +import javax.swing.JLabel; +import javax.swing.SwingUtilities; +import javax.swing.UIDefaults; +import javax.swing.UIManager; +import java.awt.Color; +import java.awt.Graphics; +import java.awt.image.BufferedImage; +import javax.swing.UnsupportedLookAndFeelException; +import javax.swing.plaf.ColorUIResource; +import javax.swing.plaf.nimbus.NimbusLookAndFeel; +import javax.swing.plaf.synth.Region; + +public class ColorCustomizationTest +{ + final static int WIDTH = 200; + final static int HEIGHT = 100; + + static NimbusLookAndFeel nimbus; + + final JLabel label; + final Graphics g; + + ColorCustomizationTest() { + label = new JLabel(); + label.setSize(200, 100); + + g = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_ARGB).getGraphics(); + } + + public static void main(String[] args) throws Exception { + nimbus = new NimbusLookAndFeel(); + try { + UIManager.setLookAndFeel(nimbus); + } catch (UnsupportedLookAndFeelException e) { + throw new Error("Unable to set Nimbus LAF"); + } + SwingUtilities.invokeAndWait(new Runnable() { + @Override public void run() { + new ColorCustomizationTest().test(); + } + }); + } + + void check(Color c) { + SwingUtilities.updateComponentTreeUI(label); + label.paint(g); + if (label.getBackground().getRGB() != c.getRGB()) { + System.err.println("Color mismatch!"); + System.err.println(" found: " + label.getBackground()); + System.err.println(" expected: " + c); + throw new RuntimeException("Test failed"); + } + } + + void test() { + testOverrides(); + testInheritance(); + testNames(); + testBaseColor(); + } + + void testOverrides() { + Color defaultColor = label.getBackground(); + + // override default background + UIDefaults defs = new UIDefaults(); + defs.put("Label.background", new ColorUIResource(Color.RED)); + label.putClientProperty("Nimbus.Overrides", defs); + check(Color.RED); + + // change overriding color + defs = new UIDefaults(); + defs.put("Label.background", new ColorUIResource(Color.GREEN)); + label.putClientProperty("Nimbus.Overrides", defs); + check(Color.GREEN); + + // remove override + label.putClientProperty("Nimbus.Overrides", null); + check(defaultColor); + } + + void testInheritance() { + Color defaultColor = label.getBackground(); + + // more specific setting is in global defaults + UIManager.put("Label[Enabled].background", new ColorUIResource(Color.RED)); + + // less specific one is in overrides + UIDefaults defs = new UIDefaults(); + defs.put("Label.background", new ColorUIResource(Color.GREEN)); + + // global wins + label.putClientProperty("Nimbus.Overrides", defs); + check(Color.RED); + + // now override wins + label.putClientProperty("Nimbus.Overrides.InheritDefaults", false); + check(Color.GREEN); + + // global is back + label.putClientProperty("Nimbus.Overrides.InheritDefaults", true); + check(Color.RED); + + // back to default color + UIManager.put("Label[Enabled].background", null); + label.putClientProperty("Nimbus.Overrides.InheritDefaults", false); + label.putClientProperty("Nimbus.Overrides", null); + check(defaultColor); + } + + void testNames() { + Color defaultColor = label.getBackground(); + + UIManager.put("\"BlueLabel\"[Enabled].background", + new ColorUIResource(Color.BLUE)); + UIManager.put("\"RedLabel\"[Enabled].background", + new ColorUIResource(Color.RED)); + nimbus.register(Region.LABEL, "\"BlueLabel\""); + nimbus.register(Region.LABEL, "\"RedLabel\""); + + label.setName("BlueLabel"); + check(Color.BLUE); + label.setName("RedLabel"); + check(Color.RED); + + // remove name, color goes back to default + label.setName(null); + check(defaultColor); + } + + void testBaseColor() { + UIManager.put("control", Color.GREEN); + check(Color.GREEN); + } +}