Mercurial > hg > release > icedtea6-1.11
changeset 2638:15ee0af0207b
Merge
author | Andrew John Hughes <ahughes@redhat.com> |
---|---|
date | Wed, 30 Mar 2011 23:14:30 +0100 |
parents | b3627e530d7c (current diff) 44dde878b860 (diff) |
children | bef042dcbb2a |
files | ChangeLog Makefile.am patches/cacao/arm-arch-defines.patch patches/cacao/ignore-unknown-options.patch |
diffstat | 15 files changed, 1252 insertions(+), 69 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Wed Mar 09 23:47:23 2011 +0000 +++ b/ChangeLog Wed Mar 30 23:14:30 2011 +0100 @@ -1,3 +1,161 @@ +2011-03-29 Pavel Tisnovsky <ptisnovs@redhat.com> + + * Makefile.am: Add new patch. + * patches/revert-6885123.patch: + Patch which fixes the behaviour of JavaFileManager + and JavaFileObject classes. This patch also contains + regression test for check if the fix is correct. + +2011-03-29 Andrew John Hughes <ahughes@redhat.com> + + * INSTALL: Update test documentation. + * NEWS: Cleanup. + +2011-03-28 Andrew John Hughes <ahughes@redhat.com> + Patch contributed by: Alexis Ballier <aballier@gentoo.org> + + * Makefile.am: Add patch. + * THANKYOU: List Alexis. + * NEWS: Updated. + * patches/g356743-libpng-1.5.patch: + Patch to build against libpng 1.5. + +2011-03-26 Xerxes Ranby <xerxes@zafena.se> + + JamVM: Handle overflow in getPhysicalMemory(). + * NEWS: Updated. + * Makefile.am + (JAMVM_VERSION): Updated to latest JamVM revision. + (JAMVM_SHA256SUM): Updated. + +2011-03-25 Pavel Tisnovsky <ptisnovs@redhat.com> + + * Makefile.am: Add new patch. + * NEWS: Updated (added info about new fix). + * patches/mark_sun_toolkit_privileged_code.patch: + Patch which fixes the AccessControlException while + working with Color class in a PropertyEditor + +2011-03-24 Omair Majid <omajid@redhat.com> + + * patches/openjdk/6768387-jtable_not_serializable.patch: Fix path in patch + so the test is added to openjdk/test. + +2011-03-24 Omair Majid <omajid@redhat.com> + + S6768387, PR670: REGRESSION: JTable no longer serializable + * NEWS: Add backport. + * Makefile.am (ICEDTEA_PATCHES): Add new patch. + * patches/openjdk/6768387-jtable_not_serializable.patch: New file. + +2011-03-24 Xerxes Ranby <xerxes@zafena.se> + + JamVM: Base default min and max heap size on physical memory. + * NEWS: Updated. + * Makefile.am + (JAMVM_VERSION): Updated to latest JamVM revision. + (JAMVM_SHA256SUM): Updated. + +2011-03-23 Andrew John Hughes <ahughes@redhat.com> + + * hotspot.map: + Bump to hs20 b11. + +2011-03-21 Xerxes Ranby <xerxes@zafena.se> + + JamVM: Fix reflective array access. + * NEWS: Updated. + * Makefile.am + (JAMVM_VERSION): Updated to latest JamVM revision. + (JAMVM_SHA256SUM): Updated. + +2011-03-17 Xerxes Ranby <xerxes@zafena.se> + + CACAO: Update to latest CACAO revision and remove upstreamed pathes. + Update contains the following new CACAO improvements: + Fixes build for newer gcc (at least 4.4) on PPC64, breaks older gcc. + CA123: LD_LIBRARY_PATH and java.library.path. + CA143: don't hang with invalid locale. + CA144: aligned patchers on x86_64. + CA148: support for LCMP bytecode. + CA152: Calling Policy.setPolicy with a new Policy object + has no effect on the DefaultSecurityManager. + CA156: uncaughtExceptionHandler doesn't work with OpenJDK 6 b21. + * NEWS: Updated. + * Makefile.am: Remove upstreamed CACAO patches. + (CACAO_VERSION): Updated to latest CACAO revision. + (CACAO_SHA256SUM): Updated. + * patches/cacao/arm-arch-defines.patch: Deleted. + * patches/cacao/arm-memory-barrier.patch: Deleted. + * patches/cacao/ignore-unknown-options.patch: Deleted. + +2011-03-17 Xerxes Ranby <xerxes@zafena.se> + + JamVM: Update to latest JamVM revision and remove upstreamed pathes. + Update contains the following new JamVM improvements: + Handle O_DELETE in JVM_Open + Minor performance improvement on ARM + First set of changes to support JamVM/OpenJDK on MacOS X + Minor memory leak (missing free) + Handle integer overflow on i386/amd64 + * NEWS: Updated. + * Makefile.am: Remove upstreamed JamVM patches. + (JAMVM_VERSION): Updated to latest JamVM revision. + (JAMVM_SHA256SUM): Updated. + * patches/jamvm/arm-interp_cflags-marm.patch: Deleted. + * patches/jamvm/mips64el.patch: Deleted. + +2011-03-16 Denis Lila <dlila@redhat.com> + + * patches/openjdk/7027667-AAShapePipeRegTest.patch: + Removed comma from the bug tag of the regression test. + +2011-03-16 Denis Lila <dlila@redhat.com> + + * Makefile.am: Add patch. + * patches/openjdk/7019861-AA-regression-fix.patch: + Backport. + * NEWS: + Updated with backport. + +2011-03-16 Denis Lila <dlila@redhat.com> + + * Makefile.am: Add patches. + * patches/openjdk/7027667-AAShapePipeRegTest.patch: + Backport. + * patches/openjdk/7023591-AAShapePipe.patch: + Backport. + * NEWS: + Updated with backports. + +2011-03-16 Pavel Tisnovsky <ptisnovs@redhat.com> + + * Makefile.am: Fixed tests at the end in check-* targets to work + correctly in Dash and various versions of Bash. + +2011-03-13 Xerxes Ranby <xerxes@zafena.se> + Robert Loughter <rob@jamvm.org.uk> + + JamVM: Compile interp using -marm to work on ARM Thumb2 systems. + * Makefile.am: Add new JamVM patch. + * patches/jamvm/arm-interp_cflags-marm.patch: New patch. + +2011-03-11 Xerxes Ranby <xerxes@zafena.se> + + JamVM: mips + * NEWS: Updated. + * Makefile.am: Add new JamVM patch. + (JAMVM_VERSION): Updated to latest JamVM revision. + (JAMVM_SHA256SUM): Updated. + * patches/jamvm/mips64el.patch: New patch. + +2011-03-11 Xerxes Ranby <xerxes@zafena.se> + + CACAO PR157: ARM SMP Assertion thinlock failed. + * NEWS: Updated. + * Makefile.am: Add new CACAO patch. + * patches/cacao/arm-memory-barrier.patch: New patch. + 2011-03-09 Pavel Tisnovsky <ptisnovs@redhat.com> * Makefile.am: Add new patch.
--- a/INSTALL Wed Mar 09 23:47:23 2011 +0000 +++ b/INSTALL Wed Mar 30 23:14:30 2011 +0100 @@ -180,9 +180,12 @@ IcedTea6 includes support for running the test suite included with OpenJDK, using the in-tree copy of JTReg. Invoking 'make check' will -cause the HotSpot, JDK and langtools test suites to be run. The -individual test suites may be run using the check-hotspot, check-jdk -and check-langtools targets respectively. +cause the HotSpot, JDK and langtools test suites to be run. It will +exit with an error code if a regression test fails, so use 'make check +-k' if you want to run all three test suites, regardless of if +failures occur in one. The individual test suites may be run using +the check-hotspot, check-jdk and check-langtools targets respectively, +or by setting jtreg_checks e.g. jtreg_checks="langtools hotspot". The PulseAudio provider =======================
--- a/Makefile.am Wed Mar 09 23:47:23 2011 +0000 +++ b/Makefile.am Wed Mar 30 23:14:30 2011 +0100 @@ -5,14 +5,14 @@ OPENJDK_VERSION = b23 OPENJDK_URL = http://download.java.net/openjdk/jdk6/promoted/$(OPENJDK_VERSION)/ -CACAO_VERSION = 6a5eda011e49 -CACAO_SHA256SUM = 57f3abd73688cb8861875e2f21be9ec8a0c7c234e1e694489e3efa4436e9228c +CACAO_VERSION = c7bf150bfa46 +CACAO_SHA256SUM = 73629f5ac9514afbcf63b6cdf58556e889a5f6a22d4bd70de1dd2816c6500aee CACAO_BASE_URL = http://icedtea.classpath.org/download/drops/cacao CACAO_URL = $(CACAO_BASE_URL)/$(CACAO_VERSION).tar.gz CACAO_SRC_ZIP = cacao-$(CACAO_VERSION).tar.gz -JAMVM_VERSION = 30c4a6b93ffa385833360921bfc613829fb081c9 -JAMVM_SHA256SUM = e77434a7d02d75de7fe44e9e1d7d6a3fd7ddcd5447ddd175fde2a7ccb40f8838 +JAMVM_VERSION = a95ca049d3bb257d730535a5d5ec3f73a943d0aa +JAMVM_SHA256SUM = 18bb5c97c03fb73f70b481440e3e11803448d327c024d4570a338b899693fefd JAMVM_BASE_URL = http://icedtea.classpath.org/download/drops/jamvm JAMVM_URL = $(JAMVM_BASE_URL)/jamvm-$(JAMVM_VERSION).tar.gz JAMVM_SRC_ZIP = jamvm-$(JAMVM_VERSION).tar.gz @@ -326,7 +326,14 @@ patches/openjdk/6934977-MappedByteBuffer.load.patch \ patches/jaxp-serial-version-uid.patch \ patches/jtreg-hotspot-bug-6196102.patch \ - patches/jtreg-double-to-string.patch + patches/jtreg-double-to-string.patch \ + patches/openjdk/7023591-AAShapePipe.patch \ + patches/openjdk/7027667-AAShapePipeRegTest.patch \ + patches/openjdk/7019861-AA-regression-fix.patch \ + patches/openjdk/6768387-jtable_not_serializable.patch \ + patches/mark_sun_toolkit_privileged_code.patch \ + patches/g356743-libpng-1.5.patch \ + patches/revert-6885123.patch if WITH_ALT_HSBUILD ICEDTEA_PATCHES += \ @@ -349,10 +356,8 @@ if BUILD_CACAO ICEDTEA_PATCHES += \ patches/cacao/launcher.patch \ - patches/cacao/arm-arch-defines.patch \ patches/cacao/jsig.patch \ - patches/cacao/memory.patch \ - patches/cacao/ignore-unknown-options.patch + patches/cacao/memory.patch endif if ENABLE_CACAO @@ -2075,7 +2080,7 @@ $(ICEDTEA_JTREG_OPTIONS) \ `pwd`/openjdk/hotspot/test \ | tee test/$@.log - test -z `grep "^Error:\|^FAILED:" test/$@.log` + test -z `grep \"^Error:\|^FAILED:\" test/$@.log` check-langtools: stamps/jtreg.stamp mkdir -p test/langtools/JTwork test/langtools/JTreport @@ -2086,7 +2091,7 @@ $(ICEDTEA_JTREG_OPTIONS) \ `pwd`/openjdk/langtools/test \ | tee test/$@.log - test -z `grep "^Error:\|^FAILED:" test/$@.log` + test -z `grep \"^Error:\|^FAILED:\" test/$@.log` check-jdk: stamps/jtreg.stamp mkdir -p test/jdk/JTwork test/jdk/JTreport @@ -2103,7 +2108,7 @@ $(ICEDTEA_JTREG_OPTIONS) \ `pwd`/openjdk/jdk/test \ | tee test/$@.log - test -z `grep "^Error:\|^FAILED:" test/$@.log` + test -z `grep \"^Error:\|^FAILED:\" test/$@.log` clean-jtreg-reports: rm -rf test/hotspot test/langtools test/jdk
--- a/NEWS Wed Mar 09 23:47:23 2011 +0000 +++ b/NEWS Wed Mar 30 23:14:30 2011 +0100 @@ -5,19 +5,45 @@ RHX - https://bugzilla.redhat.com/show_bug.cgi?id=X DX - http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=X GX - http://bugs.gentoo.org/show_bug.cgi?id=X +CAX - http://server.complang.tuwien.ac.at/cgi-bin/bugzilla/show_bug.cgi?id=X CVE-XXXX-YYYY: http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=XXXX-YYYY New in release 1.11 (2011-XX-XX): * Use HotSpot 20 as the default virtual machine. +* Backports + - S7023591, S7027667: Clipped antialiased rectangles are filled, not drawn. + - S7019861: Last scanline skpped when doing AA. + - S6768387, PR670: REGRESSION: JTable no longer serializable + - Add missing privileged block around access to the sun.awt.nativedebug property. * Bug fixes - - PR637: make check should exit with an error code if any of regression test - failed. Use make check -k if you want to run all three test suites. And it - is now also possible to run individual jtreg testsuite (jdk,langtools and - hotspot) with the jtreg_checks argument: - make check jtreg_checks="langtools hotspot". - If none is provided make check runs all testsuites. + - PR637: make check should exit with an error code if any regression test failed. + - G356743: Support libpng 1.5. +* Allow selection of test suites using the jtreg_checks argument e.g. jtreg_checks="langtools" +* CACAO + - Ignore all unknown options, but report them. + - Fixes build for newer gcc (at least 4.4) on PPC64, breaks older gcc. + - CA123: LD_LIBRARY_PATH and java.library.path. + - CA143: don't hang with invalid locale. + - CA144: aligned patchers on x86_64. + - CA148: support for LCMP bytecode. + - CA152: Calling Policy.setPolicy with a new Policy object has no effect on the DefaultSecurityManager. + - CA156: uncaughtExceptionHandler doesn't work with OpenJDK 6 b21. + - CA157: ARM SMP Assertion thinlock failed. +* JamVM + - Ignore all unknown options. + - Handle overflow in getPhysicalMemory(). + - Base default min and max heap size on physical memory. + - Fix reflective array access. + - Handle O_DELETE in JVM_Open. + - Minor performance improvement on ARM. + - First set of changes to support JamVM/OpenJDK on MacOS X. + - Minor memory leak (missing free). + - Handle integer overflow on i386/amd64. + - On ARM, force interpreter to be built in ARM mode. + - MIPS: 64-bit and interpreter inlining by default. + - Trivial implementation of stubs for MIPS. New in release 1.10 (2011-XX-XX):
--- a/THANKYOU Wed Mar 09 23:47:23 2011 +0000 +++ b/THANKYOU Wed Mar 30 23:14:30 2011 +0100 @@ -4,6 +4,7 @@ patches. If your name does not appear on either list, but should, let us know. Please keep this list in alphabetic order. +Alexis Ballier (aballier@gentoo.org) Alon Bar-Lev (alon.barlev@gmail.com) C. K. Jester-Young (cky944@gmail.com) Torsten Werner (mail.twerner@googlemail.com) \ No newline at end of file
--- a/hotspot.map Wed Mar 09 23:47:23 2011 +0000 +++ b/hotspot.map Wed Mar 30 23:14:30 2011 +0100 @@ -1,2 +1,2 @@ # version url changeset md5sum -hs20 http://hg.openjdk.java.net/hsx/hsx20/master f46354849fb3 2791c8009eefee305538c81328a8dfd2 +hs20 http://hg.openjdk.java.net/hsx/hsx20/master f0f676c5a2c6 369ad745bf697d525d1a00fc09906829
--- a/patches/cacao/arm-arch-defines.patch Wed Mar 09 23:47:23 2011 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ -diff -Nru cacao.orig/cacao/src/vm/jit/arm/md-atomic.hpp cacao/cacao/src/vm/jit/arm/md-atomic.hpp ---- cacao.orig/cacao/src/vm/jit/arm/md-atomic.hpp 2010-05-19 12:14:46.000000000 +0100 -+++ cacao/cacao/src/vm/jit/arm/md-atomic.hpp 2010-06-21 18:35:53.000000000 +0100 -@@ -45,26 +45,7 @@ - */ - inline uint32_t compare_and_swap(volatile uint32_t *p, uint32_t oldval, uint32_t newval) - { -- uint32_t result; -- uint32_t temp; -- -- /* TODO: improve this one! */ -- __asm__ __volatile__ ( -- "1:\t" -- "ldr %0,[%2]\n\t" -- "cmp %0,%4\n\t" -- "bne 2f\n\t" -- "swp %1,%3,[%2]\n\t" -- "cmp %1,%0\n\t" -- "swpne %0,%1,[%2]\n\t" -- "bne 1b\n\t" -- "2:" -- : "=&r" (result), "=&r" (temp) -- : "r" (p), "r" (newval), "r" (oldval) -- : "cc", "memory" -- ); -- -- return result; -+ return __sync_val_compare_and_swap (p, oldval, newval); - } - -
--- a/patches/cacao/ignore-unknown-options.patch Wed Mar 09 23:47:23 2011 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -Index: cacao/cacao/src/vm/vm.cpp -=================================================================== ---- cacao.orig/cacao/src/vm/vm.cpp 2011-03-04 00:20:24.000000000 +0100 -+++ cacao/cacao/src/vm/vm.cpp 2011-03-04 01:12:45.000000000 +0100 -@@ -1239,9 +1239,10 @@ - - #endif - default: -- printf("Unknown option: %s\n", -+ fprintf(stderr,"Unknown option: %s\n", - vm_args->options[opt_index].optionString); -- usage(); -+ opt_index++; -+ /* Ignore */ - } - } -
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/g356743-libpng-1.5.patch Wed Mar 30 23:14:30 2011 +0100 @@ -0,0 +1,26 @@ +--- openjdk.orig/jdk/src/share/native/sun/awt/splashscreen/splashscreen_png.c ++++ openjdk/jdk/src/share/native/sun/awt/splashscreen/splashscreen_png.c +@@ -36,7 +36,7 @@ my_png_read_stream(png_structp png_ptr, + { + png_uint_32 check; + +- SplashStream * stream = (SplashStream*)png_ptr->io_ptr; ++ SplashStream * stream = (SplashStream*)png_get_io_ptr(png_ptr); + check = stream->read(stream, data, length); + if (check != length) + png_error(png_ptr, "Read Error"); +@@ -71,12 +71,11 @@ SplashDecodePng(Splash * splash, png_rw_ + goto done; + } + +- if (setjmp(png_ptr->jmpbuf)) { ++ if (setjmp(png_jmpbuf(png_ptr))) { + goto done; + } + +- png_ptr->io_ptr = io_ptr; +- png_ptr->read_data_fn = read_func; ++ png_set_read_fn(png_ptr, io_ptr, read_func); + + png_set_sig_bytes(png_ptr, SIG_BYTES); /* we already read the 8 signature bytes */ +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/mark_sun_toolkit_privileged_code.patch Wed Mar 30 23:14:30 2011 +0100 @@ -0,0 +1,12 @@ +--- openjdk/jdk/src/share/classes/sun/awt/SunToolkit.orig.java 2011-03-11 10:48:29.000000000 +0100 ++++ openjdk/jdk/src/share/classes/sun/awt/SunToolkit.java 2011-03-11 11:24:33.000000000 +0100 +@@ -65,8 +65,7 @@ + + /* Load debug settings for native code */ + static { +- String nativeDebug = System.getProperty("sun.awt.nativedebug"); +- if ("true".equalsIgnoreCase(nativeDebug)) { ++ if (AccessController.doPrivileged(new GetBooleanAction("sun.awt.nativedebug"))) { + DebugSettings.init(); + } + };
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/openjdk/6768387-jtable_not_serializable.patch Wed Mar 30 23:14:30 2011 +0100 @@ -0,0 +1,106 @@ +# HG changeset patch +# User alexp +# Date 1274805592 -14400 +# Node ID 8d59b361635f12e378b41b44c4b953849de0d9fa +# Parent 1297a41dbb47e58e89f7f639cee933a677998318 +6768387: REGRESSION: JTable no longer serializable +Reviewed-by: rupashka + +diff -r 1297a41dbb47 -r 8d59b361635f src/share/classes/sun/swing/table/DefaultTableCellHeaderRenderer.java +--- openjdk/jdk/src/share/classes/sun/swing/table/DefaultTableCellHeaderRenderer.java Tue May 25 20:30:54 2010 +0400 ++++ openjdk/jdk/src/share/classes/sun/swing/table/DefaultTableCellHeaderRenderer.java Tue May 25 20:39:52 2010 +0400 +@@ -24,6 +24,8 @@ + */ + package sun.swing.table; + ++import sun.swing.DefaultLookup; ++ + import java.awt.Component; + import java.awt.Color; + import java.awt.FontMetrics; +@@ -31,12 +33,11 @@ + import java.awt.Insets; + import java.awt.Point; + import java.awt.Rectangle; ++import java.io.Serializable; + import javax.swing.*; + import javax.swing.plaf.UIResource; + import javax.swing.border.Border; + import javax.swing.table.*; +-import sun.swing.DefaultLookup; +- + + public class DefaultTableCellHeaderRenderer extends DefaultTableCellRenderer + implements UIResource { +@@ -186,7 +187,7 @@ + return new Point(x, y); + } + +- private class EmptyIcon implements Icon { ++ private class EmptyIcon implements Icon, Serializable { + int width = 0; + int height = 0; + public void paintIcon(Component c, Graphics g, int x, int y) {} +diff -r 1297a41dbb47 -r 8d59b361635f test/javax/swing/JTable/6768387/bug6768387.java +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ openjdk/jdk/test/javax/swing/JTable/6768387/bug6768387.java Tue May 25 20:39:52 2010 +0400 +@@ -0,0 +1,59 @@ ++/* ++ * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. ++ * ++ * This code is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ */ ++ ++/* @test ++ @bug 6768387 ++ @summary REGRESSION: JTable no longer serializable ++ @author Alexander Potochkin ++ @run main bug6768387 ++*/ ++ ++import javax.swing.*; ++import javax.swing.table.AbstractTableModel; ++import java.io.*; ++ ++public class bug6768387 { ++ ++ private static void createGui() { ++ JTable table = new JTable(); ++ OutputStream os; ++ ObjectOutputStream out; ++ try { ++ os = new ByteArrayOutputStream(); ++ out = new ObjectOutputStream(os); ++ out.writeObject(table); ++ out.close(); ++ } ++ catch (Exception ex) { ++ throw new RuntimeException(ex); ++ } ++ } ++ ++ public static void main(String[] args) throws Exception { ++ SwingUtilities.invokeAndWait(new Runnable() { ++ public void run() { ++ bug6768387.createGui(); ++ } ++ }); ++ } ++}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/openjdk/7019861-AA-regression-fix.patch Wed Mar 30 23:14:30 2011 +0100 @@ -0,0 +1,502 @@ +# HG changeset patch +# User dlila +# Date 1300223102 14400 +# Node ID 253f3bc64961944b1886a243a662bd929e9ab605 +# Parent fd8b81c558d307a984ad2dcd06b7de092c3f01f5 +7019861: Last scanline is skipped in pisces.Renderer. +Summary: not skipping it anymore. +Reviewed-by: flar + +diff -r fd8b81c558d3 -r 253f3bc64961 src/share/classes/sun/java2d/pisces/Helpers.java +--- openjdk.orig/jdk/src/share/classes/sun/java2d/pisces/Helpers.java Tue Mar 15 15:15:10 2011 -0400 ++++ openjdk/jdk/src/share/classes/sun/java2d/pisces/Helpers.java Tue Mar 15 17:05:02 2011 -0400 +@@ -154,9 +154,6 @@ + // These use a hardcoded factor of 2 for increasing sizes. Perhaps this + // should be provided as an argument. + static float[] widenArray(float[] in, final int cursize, final int numToAdd) { +- if (in == null) { +- return new float[5 * numToAdd]; +- } + if (in.length >= cursize + numToAdd) { + return in; + } +diff -r fd8b81c558d3 -r 253f3bc64961 src/share/classes/sun/java2d/pisces/PiscesTileGenerator.java +--- openjdk.orig/jdk/src/share/classes/sun/java2d/pisces/PiscesTileGenerator.java Tue Mar 15 15:15:10 2011 -0400 ++++ openjdk/jdk/src/share/classes/sun/java2d/pisces/PiscesTileGenerator.java Tue Mar 15 17:05:02 2011 -0400 +@@ -191,8 +191,7 @@ + System.out.println("len = "+runLen); + System.out.print(cache.toString()); + e0.printStackTrace(); +- System.exit(1); +- return; ++ throw e0; + } + + int rx0 = cx; +@@ -215,8 +214,7 @@ + System.out.println("len = "+runLen); + System.out.print(cache.toString()); + e.printStackTrace(); +- System.exit(1); +- return; ++ throw e; + } + } + pos += 2; +@@ -250,4 +248,5 @@ + * No further calls will be made on this instance. + */ + public void dispose() {} +-} +\ No newline at end of file ++} ++ +diff -r fd8b81c558d3 -r 253f3bc64961 src/share/classes/sun/java2d/pisces/Renderer.java +--- openjdk.orig/jdk/src/share/classes/sun/java2d/pisces/Renderer.java Tue Mar 15 15:15:10 2011 -0400 ++++ openjdk/jdk/src/share/classes/sun/java2d/pisces/Renderer.java Tue Mar 15 17:05:02 2011 -0400 +@@ -47,16 +47,16 @@ + + private static final int INIT_CROSSINGS_SIZE = 10; + +- private ScanlineIterator() { ++ // Preconditions: Only subpixel scanlines in the range ++ // (start <= subpixel_y <= end) will be evaluated. No ++ // edge may have a valid (i.e. inside the supplied clip) ++ // crossing that would be generated outside that range. ++ private ScanlineIterator(int start, int end) { + crossings = new int[INIT_CROSSINGS_SIZE]; + edgePtrs = new int[INIT_CROSSINGS_SIZE]; + +- // We don't care if we clip some of the line off with ceil, since +- // no scan line crossings will be eliminated (in fact, the ceil is +- // the y of the first scan line crossing). +- final int minY = getFirstScanLineCrossing(); +- nextY = minY; +- maxY = getScanLineCrossingEnd()-1; ++ nextY = start; ++ maxY = end; + edgeCount = 0; + } + +@@ -148,6 +148,7 @@ + // don't just set NULL to -1, because we want NULL+NEXT to be negative. + private static final int NULL = -SIZEOF_EDGE; + private float[] edges = null; ++ private static final int INIT_NUM_EDGES = 8; + private int[] edgeBuckets = null; + private int[] edgeBucketCounts = null; // 2*newedges + (1 if pruning needed) + private int numEdges; +@@ -156,7 +157,7 @@ + private static final float INC_BND = 8f; + + // each bucket is a linked list. this method adds eptr to the +- // start "bucket"th linked list. ++ // start of the "bucket"th linked list. + private void addEdgeToBucket(final int eptr, final int bucket) { + edges[eptr+NEXT] = edgeBuckets[bucket]; + edgeBuckets[bucket] = eptr; +@@ -168,7 +169,8 @@ + // X0, Y0, D*[X|Y], COUNT; not variables used for computing scanline crossings). + private void quadBreakIntoLinesAndAdd(float x0, float y0, + final Curve c, +- final float x2, final float y2) { ++ final float x2, final float y2) ++ { + final float QUAD_DEC_BND = 32; + final int countlg = 4; + int count = 1 << countlg; +@@ -204,7 +206,8 @@ + // here, but then too many numbers are passed around. + private void curveBreakIntoLinesAndAdd(float x0, float y0, + final Curve c, +- final float x3, final float y3) { ++ final float x3, final float y3) ++ { + final int countlg = 3; + int count = 1 << countlg; + +@@ -259,8 +262,6 @@ + } + } + +- // Preconditions: y2 > y1 and the curve must cross some scanline +- // i.e.: y1 <= y < y2 for some y such that boundsMinY <= y < boundsMaxY + private void addLine(float x1, float y1, float x2, float y2) { + float or = 1; // orientation of the line. 1 if y increases, 0 otherwise. + if (y2 < y1) { +@@ -272,12 +273,11 @@ + x1 = or; + or = 0; + } +- final int firstCrossing = Math.max((int) Math.ceil(y1), boundsMinY); ++ final int firstCrossing = Math.max((int)Math.ceil(y1), boundsMinY); + final int lastCrossing = Math.min((int)Math.ceil(y2), boundsMaxY); + if (firstCrossing >= lastCrossing) { + return; + } +- + if (y1 < edgeMinY) { edgeMinY = y1; } + if (y2 > edgeMaxY) { edgeMaxY = y2; } + +@@ -297,22 +297,10 @@ + edges[ptr+OR] = or; + edges[ptr+CURX] = x1 + (firstCrossing - y1) * slope; + edges[ptr+SLOPE] = slope; +- edges[ptr+YMAX] = y2; ++ edges[ptr+YMAX] = lastCrossing; + final int bucketIdx = firstCrossing - boundsMinY; + addEdgeToBucket(ptr, bucketIdx); +- if (lastCrossing < boundsMaxY) { +- edgeBucketCounts[lastCrossing - boundsMinY] |= 1; +- } +- } +- +- // preconditions: should not be called before the last line has been added +- // to the edge list (even though it will return a correct answer at that +- // point in time, it's not meant to be used that way). +- private int getFirstScanLineCrossing() { +- return Math.max(boundsMinY, (int)Math.ceil(edgeMinY)); +- } +- private int getScanLineCrossingEnd() { +- return Math.min(boundsMaxY, (int)Math.ceil(edgeMaxY)); ++ edgeBucketCounts[lastCrossing - boundsMinY] |= 1; + } + + // END EDGE LIST +@@ -366,9 +354,11 @@ + this.boundsMaxX = (pix_boundsX + pix_boundsWidth) * SUBPIXEL_POSITIONS_X; + this.boundsMaxY = (pix_boundsY + pix_boundsHeight) * SUBPIXEL_POSITIONS_Y; + ++ edges = new float[INIT_NUM_EDGES * SIZEOF_EDGE]; ++ numEdges = 0; + edgeBuckets = new int[boundsMaxY - boundsMinY]; + java.util.Arrays.fill(edgeBuckets, NULL); +- edgeBucketCounts = new int[edgeBuckets.length]; ++ edgeBucketCounts = new int[edgeBuckets.length + 1]; + } + + private float tosubpixx(float pix_x) { +@@ -394,7 +384,7 @@ + y0 = y1; + } + +- Curve c = new Curve(); ++ private Curve c = new Curve(); + @Override public void curveTo(float x1, float y1, + float x2, float y2, + float x3, float y3) +@@ -431,8 +421,8 @@ + throw new InternalError("Renderer does not use a native consumer."); + } + +- private void _endRendering(final int pix_bboxx0, final int pix_bboxy0, +- final int pix_bboxx1, final int pix_bboxy1) ++ private void _endRendering(final int pix_bboxx0, final int pix_bboxx1, ++ int ymin, int ymax) + { + // Mask to determine the relevant bit of the crossing sum + // 0x1 if EVEN_ODD, all bits if NON_ZERO +@@ -455,7 +445,7 @@ + int pix_minX = Integer.MAX_VALUE; + + int y = boundsMinY; // needs to be declared here so we emit the last row properly. +- ScanlineIterator it = this.new ScanlineIterator(); ++ ScanlineIterator it = this.new ScanlineIterator(ymin, ymax); + for ( ; it.hasNext(); ) { + int numCrossings = it.next(); + int[] crossings = it.crossings; +@@ -477,7 +467,7 @@ + int curxo = crossings[i]; + int curx = curxo >> 1; + // to turn {0, 1} into {-1, 1}, multiply by 2 and subtract 1. +- int crorientation = ((curxo & 0x1) << 1) -1; ++ int crorientation = ((curxo & 0x1) << 1) - 1; + if ((sum & mask) != 0) { + int x0 = Math.max(prev, bboxx0); + int x1 = Math.min(curx, bboxx1); +@@ -541,7 +531,7 @@ + } + + this.cache = new PiscesCache(pminX, pminY, pmaxX, pmaxY); +- _endRendering(pminX, pminY, pmaxX, pmaxY); ++ _endRendering(pminX, pmaxX, spminY, spmaxY); + } + + public PiscesCache getCache() { +diff -r fd8b81c558d3 -r 253f3bc64961 src/share/classes/sun/java2d/pisces/Stroker.java +--- openjdk.orig/jdk/src/share/classes/sun/java2d/pisces/Stroker.java Tue Mar 15 15:15:10 2011 -0400 ++++ openjdk/jdk/src/share/classes/sun/java2d/pisces/Stroker.java Tue Mar 15 17:05:02 2011 -0400 +@@ -764,6 +764,11 @@ + private static final int MAX_N_CURVES = 11; + private float[] subdivTs = new float[MAX_N_CURVES - 1]; + ++ // If this class is compiled with ecj, then Hotspot crashes when OSR ++ // compiling this function. See bugs 7004570 and 6675699 ++ // TODO: until those are fixed, we should work around that by ++ // manually inlining this into curveTo and quadTo. ++/******************************* WORKAROUND ********************************** + private void somethingTo(final int type) { + // need these so we can update the state at the end of this method + final float xf = middle[type-2], yf = middle[type-1]; +@@ -866,6 +871,7 @@ + this.cy0 = yf; + this.prev = DRAWING_OP_TO; + } ++****************************** END WORKAROUND *******************************/ + + // finds values of t where the curve in pts should be subdivided in order + // to get good offset curves a distance of w away from the middle curve. +@@ -932,18 +938,168 @@ + middle[2] = x1; middle[3] = y1; + middle[4] = x2; middle[5] = y2; + middle[6] = x3; middle[7] = y3; +- somethingTo(8); +- } + +- @Override public long getNativeConsumer() { +- throw new InternalError("Stroker doesn't use a native consumer"); ++ // inlined version of somethingTo(8); ++ // See the TODO on somethingTo ++ ++ // need these so we can update the state at the end of this method ++ final float xf = middle[6], yf = middle[7]; ++ float dxs = middle[2] - middle[0]; ++ float dys = middle[3] - middle[1]; ++ float dxf = middle[6] - middle[4]; ++ float dyf = middle[7] - middle[5]; ++ ++ boolean p1eqp2 = (dxs == 0f && dys == 0f); ++ boolean p3eqp4 = (dxf == 0f && dyf == 0f); ++ if (p1eqp2) { ++ dxs = middle[4] - middle[0]; ++ dys = middle[5] - middle[1]; ++ if (dxs == 0f && dys == 0f) { ++ dxs = middle[6] - middle[0]; ++ dys = middle[7] - middle[1]; ++ } ++ } ++ if (p3eqp4) { ++ dxf = middle[6] - middle[2]; ++ dyf = middle[7] - middle[3]; ++ if (dxf == 0f && dyf == 0f) { ++ dxf = middle[6] - middle[0]; ++ dyf = middle[7] - middle[1]; ++ } ++ } ++ if (dxs == 0f && dys == 0f) { ++ // this happens iff the "curve" is just a point ++ lineTo(middle[0], middle[1]); ++ return; ++ } ++ ++ // if these vectors are too small, normalize them, to avoid future ++ // precision problems. ++ if (Math.abs(dxs) < 0.1f && Math.abs(dys) < 0.1f) { ++ float len = (float)Math.sqrt(dxs*dxs + dys*dys); ++ dxs /= len; ++ dys /= len; ++ } ++ if (Math.abs(dxf) < 0.1f && Math.abs(dyf) < 0.1f) { ++ float len = (float)Math.sqrt(dxf*dxf + dyf*dyf); ++ dxf /= len; ++ dyf /= len; ++ } ++ ++ computeOffset(dxs, dys, lineWidth2, offset[0]); ++ final float mx = offset[0][0]; ++ final float my = offset[0][1]; ++ drawJoin(cdx, cdy, cx0, cy0, dxs, dys, cmx, cmy, mx, my); ++ ++ int nSplits = findSubdivPoints(middle, subdivTs, 8, lineWidth2); ++ ++ int kind = 0; ++ Iterator<Integer> it = Curve.breakPtsAtTs(middle, 8, subdivTs, nSplits); ++ while(it.hasNext()) { ++ int curCurveOff = it.next(); ++ ++ kind = computeOffsetCubic(middle, curCurveOff, lp, rp); ++ if (kind != 0) { ++ emitLineTo(lp[0], lp[1]); ++ switch(kind) { ++ case 8: ++ emitCurveTo(lp[0], lp[1], lp[2], lp[3], lp[4], lp[5], lp[6], lp[7], false); ++ emitCurveTo(rp[0], rp[1], rp[2], rp[3], rp[4], rp[5], rp[6], rp[7], true); ++ break; ++ case 4: ++ emitLineTo(lp[2], lp[3]); ++ emitLineTo(rp[0], rp[1], true); ++ break; ++ } ++ emitLineTo(rp[kind - 2], rp[kind - 1], true); ++ } ++ } ++ ++ this.cmx = (lp[kind - 2] - rp[kind - 2]) / 2; ++ this.cmy = (lp[kind - 1] - rp[kind - 1]) / 2; ++ this.cdx = dxf; ++ this.cdy = dyf; ++ this.cx0 = xf; ++ this.cy0 = yf; ++ this.prev = DRAWING_OP_TO; + } + + @Override public void quadTo(float x1, float y1, float x2, float y2) { + middle[0] = cx0; middle[1] = cy0; + middle[2] = x1; middle[3] = y1; + middle[4] = x2; middle[5] = y2; +- somethingTo(6); ++ ++ // inlined version of somethingTo(8); ++ // See the TODO on somethingTo ++ ++ // need these so we can update the state at the end of this method ++ final float xf = middle[4], yf = middle[5]; ++ float dxs = middle[2] - middle[0]; ++ float dys = middle[3] - middle[1]; ++ float dxf = middle[4] - middle[2]; ++ float dyf = middle[5] - middle[3]; ++ if ((dxs == 0f && dys == 0f) || (dxf == 0f && dyf == 0f)) { ++ dxs = dxf = middle[4] - middle[0]; ++ dys = dyf = middle[5] - middle[1]; ++ } ++ if (dxs == 0f && dys == 0f) { ++ // this happens iff the "curve" is just a point ++ lineTo(middle[0], middle[1]); ++ return; ++ } ++ // if these vectors are too small, normalize them, to avoid future ++ // precision problems. ++ if (Math.abs(dxs) < 0.1f && Math.abs(dys) < 0.1f) { ++ float len = (float)Math.sqrt(dxs*dxs + dys*dys); ++ dxs /= len; ++ dys /= len; ++ } ++ if (Math.abs(dxf) < 0.1f && Math.abs(dyf) < 0.1f) { ++ float len = (float)Math.sqrt(dxf*dxf + dyf*dyf); ++ dxf /= len; ++ dyf /= len; ++ } ++ ++ computeOffset(dxs, dys, lineWidth2, offset[0]); ++ final float mx = offset[0][0]; ++ final float my = offset[0][1]; ++ drawJoin(cdx, cdy, cx0, cy0, dxs, dys, cmx, cmy, mx, my); ++ ++ int nSplits = findSubdivPoints(middle, subdivTs, 6, lineWidth2); ++ ++ int kind = 0; ++ Iterator<Integer> it = Curve.breakPtsAtTs(middle, 6, subdivTs, nSplits); ++ while(it.hasNext()) { ++ int curCurveOff = it.next(); ++ ++ kind = computeOffsetQuad(middle, curCurveOff, lp, rp); ++ if (kind != 0) { ++ emitLineTo(lp[0], lp[1]); ++ switch(kind) { ++ case 6: ++ emitQuadTo(lp[0], lp[1], lp[2], lp[3], lp[4], lp[5], false); ++ emitQuadTo(rp[0], rp[1], rp[2], rp[3], rp[4], rp[5], true); ++ break; ++ case 4: ++ emitLineTo(lp[2], lp[3]); ++ emitLineTo(rp[0], rp[1], true); ++ break; ++ } ++ emitLineTo(rp[kind - 2], rp[kind - 1], true); ++ } ++ } ++ ++ this.cmx = (lp[kind - 2] - rp[kind - 2]) / 2; ++ this.cmy = (lp[kind - 1] - rp[kind - 1]) / 2; ++ this.cdx = dxf; ++ this.cdy = dyf; ++ this.cx0 = xf; ++ this.cy0 = yf; ++ this.prev = DRAWING_OP_TO; ++ } ++ ++ @Override public long getNativeConsumer() { ++ throw new InternalError("Stroker doesn't use a native consumer"); + } + + // a stack of polynomial curves where each curve shares endpoints with +diff -r fd8b81c558d3 -r 253f3bc64961 test/sun/java2d/pisces/Renderer/Test7019861.java +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ openjdk/jdk/test/sun/java2d/pisces/Renderer/Test7019861.java Tue Mar 15 17:05:02 2011 -0400 +@@ -0,0 +1,76 @@ ++/* ++ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. ++ * ++ * This code is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ */ ++ ++/** ++ * @test ++ * @bug 7019861 ++ * ++ * @summary Verifies that the last scanline isn't skipped when doing ++ * antialiased rendering. ++ * ++ * @run main Test7019861 ++ */ ++ ++import java.awt.BasicStroke; ++import java.awt.Color; ++import java.awt.Graphics2D; ++import java.awt.geom.Path2D; ++import java.awt.image.BufferedImage; ++import java.util.Arrays; ++ ++import static java.awt.RenderingHints.*; ++ ++public class Test7019861 { ++ ++ public static void main(String[] argv) throws Exception { ++ BufferedImage im = getWhiteImage(30, 30); ++ Graphics2D g2 = (Graphics2D)im.getGraphics(); ++ g2.setRenderingHint(KEY_ANTIALIASING, VALUE_ANTIALIAS_ON); ++ g2.setRenderingHint(KEY_STROKE_CONTROL, VALUE_STROKE_PURE); ++ g2.setStroke(new BasicStroke(10, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL)); ++ g2.setBackground(Color.white); ++ g2.setColor(Color.black); ++ ++ Path2D p = getPath(0, 0, 20); ++ g2.draw(p); ++ ++ if (!(new Color(im.getRGB(20, 19))).equals(Color.black)) { ++ throw new Exception("This pixel should be black"); ++ } ++ } ++ ++ private static Path2D getPath(int x, int y, int len) { ++ Path2D p = new Path2D.Double(); ++ p.moveTo(x, y); ++ p.quadTo(x + len, y, x + len, y + len); ++ return p; ++ } ++ ++ private static BufferedImage getWhiteImage(int w, int h) { ++ BufferedImage ret = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); ++ final int[] white = new int[w * h]; ++ Arrays.fill(white, 0xffffff); ++ ret.setRGB(0, 0, w, h, white, 0, w); ++ return ret; ++ } ++}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/openjdk/7023591-AAShapePipe.patch Wed Mar 30 23:14:30 2011 +0100 @@ -0,0 +1,20 @@ +# HG changeset patch +# User prr +# Date 1299282881 28800 +# Node ID f82f0af7de5bb0e41cb957d654e8a1beaeab0008 +# Parent 01dcb496946e514fe5e61504d0bd2516d6a42783 +7023591: Xrender: java2D font demo - text highlighting tab content is black +Reviewed-by: flar + +diff -r 01dcb496946e -r f82f0af7de5b src/share/classes/sun/java2d/pipe/AAShapePipe.java +--- openjdk.orig/jdk/src/share/classes/sun/java2d/pipe/AAShapePipe.java Thu Mar 03 16:06:42 2011 -0800 ++++ openjdk/jdk/src/share/classes/sun/java2d/pipe/AAShapePipe.java Fri Mar 04 15:54:41 2011 -0800 +@@ -109,7 +109,7 @@ + Region clip = sg.getCompClip(); + int abox[] = new int[4]; + AATileGenerator aatg = +- renderengine.getAATileGenerator(x, y, dx1, dy1, dx2, dy2, 0, 0, ++ renderengine.getAATileGenerator(x, y, dx1, dy1, dx2, dy2, lw1, lw2, + clip, abox); + if (aatg == null) { + // Nothing to render
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/openjdk/7027667-AAShapePipeRegTest.patch Wed Mar 30 23:14:30 2011 +0100 @@ -0,0 +1,62 @@ +# HG changeset patch +# User dlila +# Date 1300216510 14400 +# Node ID fd8b81c558d307a984ad2dcd06b7de092c3f01f5 +# Parent 87444344d6169cce2ef7fbbf48582728769a8d85 +7027667: clipped aa rectangles are not drawn properly. +Summary: Already fixed. This is just a regression test for it. +Reviewed-by: prr + +diff -r 87444344d616 -r fd8b81c558d3 test/sun/java2d/pipe/Test7027667.java +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ openjdk/jdk/test/sun/java2d/pipe/Test7027667.java Tue Mar 15 15:15:10 2011 -0400 +@@ -0,0 +1,49 @@ ++/* ++ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. ++ * ++ * This code is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ */ ++ ++/** ++ * @test ++ * @bug 7027667 7023591 ++ * ++ * @summary Verifies that aa clipped rectangles are drawn, not filled. ++ * ++ * @run main Test7027667 ++ */ ++ ++import java.awt.*; ++import java.awt.geom.*; ++import java.awt.image.*; ++import static java.awt.RenderingHints.*; ++ ++public class Test7027667 { ++ public static void main(String[] args) throws Exception { ++ BufferedImage bImg = new BufferedImage(512, 512, BufferedImage.TYPE_INT_RGB); ++ Graphics2D g2d = (Graphics2D) bImg.getGraphics(); ++ g2d.setRenderingHint(KEY_ANTIALIASING, VALUE_ANTIALIAS_ON); ++ g2d.setClip(new Ellipse2D.Double(0, 0, 100, 100)); ++ g2d.drawRect(10, 10, 100, 100); ++ if (new Color(bImg.getRGB(50, 50)).equals(Color.white)) { ++ throw new Exception("Rectangle should be drawn, not filled"); ++ } ++ } ++}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/revert-6885123.patch Wed Mar 30 23:14:30 2011 +0100 @@ -0,0 +1,310 @@ +--- openjdk.old/langtools/src/share/classes/com/sun/tools/javac/file/RegularFileObject.java 2011-02-28 17:07:28.000000000 +0100 ++++ openjdk/langtools/src/share/classes/com/sun/tools/javac/file/RegularFileObject.java 2011-03-25 10:16:13.646180000 +0100 +@@ -78,7 +78,7 @@ + + //@Override + public String getName() { +- return file.getPath(); ++ return this.name; + } + + //@Override +--- /dev/null 1970-01-01 01:00:00.000000000 +0100 ++++ openjdk/jdk/test/javax/tools/JavaFileManager/JavaFileManagerTest.java 2011-03-28 15:51:43.000000000 +0200 +@@ -0,0 +1,119 @@ ++/* ++ * Copyright 2011 Red Hat, 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. ++ */ ++ ++ ++import java.util.*; ++import java.io.*; ++import java.nio.charset.*; ++ ++import javax.tools.*; ++import javax.tools.JavaFileManager.*; ++import javax.tools.JavaFileObject.*; ++ ++public class JavaFileManagerTest { ++ ++ /** ++ * Test data files are stored in a subdirectory named "test_data". ++ */ ++ private static final String TEST_DATA_DIRECTORY = "test_data"; ++ ++ /** ++ * Charset used by JavaFileManager. ++ */ ++ private static final Charset FILE_MANAGER_CHARSET = Charset.forName("US-ASCII"); ++ ++ /** ++ * Locale used by JavaFileManager. ++ */ ++ private static final Locale FILE_MANAGER_LOCALE = (java.util.Locale)null; ++ ++ /** ++ * Location of file objects being tested. ++ */ ++ private static final Location FILE_OBJECTS_LOCATION = javax.tools.StandardLocation.SOURCE_PATH; ++ ++ public static DiagnosticListener<JavaFileObject> listener = new DiagnosticCollector<JavaFileObject>(); ++ ++ private void doTest() throws IOException { ++ StandardJavaFileManager fileManager = getStandardFileManager(); ++ fileManager.setLocation(FILE_OBJECTS_LOCATION, Collections.singleton(getSourceDirPathFile())); ++ ++ checkFileManagerLocation(fileManager.getLocation(FILE_OBJECTS_LOCATION)); ++ checkFileManagerGetName(fileManager); ++ } ++ ++ private StandardJavaFileManager getStandardFileManager() { ++ return ToolProvider.getSystemJavaCompiler().getStandardFileManager( ++ listener, FILE_MANAGER_LOCALE, FILE_MANAGER_CHARSET); ++ } ++ ++ public static File getSourceDirPathFile() { ++ return new File(new File("."), TEST_DATA_DIRECTORY); ++ } ++ ++ /** ++ * Check if there's "./test_data" location included in a locations argument. ++ * @param locations set of locations returned by fileManager.getLocation() ++ */ ++ private void checkFileManagerLocation(Iterable<? extends File> locations) { ++ for (File file : locations) { ++ if (".".equals(file.getParent()) && TEST_DATA_DIRECTORY.equals(file.getName())) { ++ System.out.println("checkFileManagerLocation: ok"); ++ return; ++ } ++ } ++ throw new RuntimeException("fileManager.getLocation() returns wrong locations! " + locations.toString()); ++ } ++ ++ /** ++ * Check if method JavaFileManager.getName() returns correct file name. ++ * @param fileManager ++ * @throws IOException ++ */ ++ private void checkFileManagerGetName(JavaFileManager fileManager) throws IOException { ++ Map<Kind, String> kinds = new HashMap<Kind, String>(); ++ kinds.put(Kind.SOURCE, "Test.java"); ++ kinds.put(Kind.CLASS, "Test.class"); ++ kinds.put(Kind.HTML, "Test.html"); ++ kinds.put(Kind.OTHER, "Test.txt"); ++ for (Map.Entry<Kind, String> kind : kinds.entrySet()) { ++ System.out.println("Testing JavaFileManager for kind " + kind.getKey()); ++ Iterable<JavaFileObject> fileObjects = fileManager.list( ++ FILE_OBJECTS_LOCATION, "", Collections.singleton(kind.getKey()), false); ++ checkIfFileObjectsContainName(fileObjects, kind.getValue()); ++ } ++ } ++ ++ private void checkIfFileObjectsContainName(Iterable<JavaFileObject> fileObjects, String name) { ++ //System.out.println(fileObjects); ++ for (JavaFileObject fileObject : fileObjects) { ++ //System.out.println(fileObject.getName()); ++ if (name.equals(fileObject.getName())) { ++ System.out.println("JavaFileObject.getName(): ok ('" + fileObject.getName() + "')"); ++ return; ++ } ++ } ++ throw new RuntimeException("JavaFileObject.getName() returns wrong name!"); ++ } ++ ++ public static void main(String argv[]) throws IOException { ++ new JavaFileManagerTest().doTest(); ++ } ++ ++} +--- /dev/null 1970-01-01 01:00:00.000000000 +0100 ++++ openjdk/jdk/test/javax/tools/JavaFileManager/JavaFileManagerTest.sh 2011-03-28 15:47:23.000000000 +0200 +@@ -0,0 +1,153 @@ ++#!/bin/sh ++ ++# ++# Copyright 2011 Red Hat, 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. ++ ++# ++# This script is the actual launcher of JavaFileManagerTest.java ++# ++ ++# @test ++# @summary Test that check proper behaviour of JavaFileManager and ++# JavaFileObject classes. ++ ++ ++ ++# check arguments set by JTreg ++function checkArgs() { ++ if [ "${TESTSRC}" = "" ] ++ then ++ echo "TESTSRC not set. Test cannot execute. Failed." ++ exit 1 ++ fi ++ echo "TESTSRC=${TESTSRC}" ++ if [ "${TESTJAVA}" = "" ] ++ then ++ echo "TESTJAVA not set. Test cannot execute. Failed." ++ exit 1 ++ fi ++ echo "TESTJAVA=${TESTJAVA}" ++ if [ "${TESTCLASSES}" = "" ] ++ then ++ echo "TESTCLASSES not set. Test cannot execute. Failed." ++ exit 1 ++ fi ++} ++ ++ ++ ++# print paths to test sources and test classes ++function printPaths() { ++ echo "TESTCLASSES=${TESTCLASSES}" ++ echo "CLASSPATH=${CLASSPATH}" ++} ++ ++ ++ ++# copy of all necessarry files into work directory ++function copyWorkFiles() { ++ cp -r "${TESTSRC}/test_data" "${TESTCLASSES}/" ++ result=$? ++ if [ $result -eq 0 ] ++ then ++ echo "Copy of work files was successful." ++ else ++ echo "copy of work files have failed." ++ exit $result ++ fi ++ ++ cp "${TESTSRC}/JavaFileManagerTest.java" "${TESTCLASSES}" ++ result=$? ++ if [ $result -eq 0 ] ++ then ++ echo "Copy of work files was successful." ++ else ++ echo "copy of work files have failed." ++ exit $result ++ fi ++} ++ ++ ++ ++# compilation of Test class which is stored in test_data subdirectory ++function compileTestClass() { ++ COMPILE="${TESTJAVA}/bin/javac ${TESTCLASSES}/test_data/Test.java" ++ echo ${COMPILE} ++ ${COMPILE} ++ result=$? ++ ++ if [ $result -eq 0 ] ++ then ++ echo "Compilation of the test class was successful." ++ else ++ echo "Compilation of the test class have failed." ++ # Cleanup ++ rm -rf ${TESTCLASSES}/ ++ exit $result ++ fi ++} ++ ++ ++ ++# compilation of the Test itself ++function compileTest() { ++ COMPILE="${TESTJAVA}/bin/javac ${TESTCLASSES}/JavaFileManagerTest.java" ++ echo ${COMPILE} ++ ${COMPILE} ++ result=$? ++ ++ if [ $result -eq 0 ] ++ then ++ echo "Compilation of the test case was successful." ++ else ++ echo "Compilation of the test case failed." ++ # Cleanup ++ rm -rf ${TESTCLASSES}/ ++ exit $result ++ fi ++} ++ ++ ++ ++# run the test ++function runTest() { ++ cd ${TESTCLASSES} ++ RUNCMD="${TESTJAVA}/bin/java JavaFileManagerTest" ++ echo ${RUNCMD} ++ ${RUNCMD} ++ result=$? ++ ++ if [ $result -eq 0 ] ++ then ++ echo "Execution successful" ++ else ++ echo "Execution of the test case failed." ++ fi ++ rm -rf ${TESTCLASSES}/ ++ exit $result ++} ++ ++ ++ ++checkArgs ++printPaths ++copyWorkFiles ++compileTestClass ++compileTest ++runTest ++ +--- /dev/null 1970-01-01 01:00:00.000000000 +0100 ++++ openjdk/jdk/test/javax/tools/JavaFileManager/test_data/Test.html 2011-03-25 18:19:45.000000000 +0100 +@@ -0,0 +1,5 @@ ++<html> ++<body> ++42 ++</body> ++</html> +--- /dev/null 1970-01-01 01:00:00.000000000 +0100 ++++ openjdk/jdk/test/javax/tools/JavaFileManager/test_data/Test.java 2011-03-28 14:53:50.000000000 +0200 +@@ -0,0 +1,5 @@ ++package test_data; ++ ++public class Test { ++ // nothing here ++} +--- /dev/null 1970-01-01 01:00:00.000000000 +0100 ++++ openjdk/jdk/test/javax/tools/JavaFileManager/test_data/Test.txt 2011-03-28 16:15:09.000000000 +0200 +@@ -0,0 +1,2 @@ ++42 ++