From 99efc13e49c3c42efc1912714dcd17b3cdd0fd10 Mon Sep 17 00:00:00 2001 From: Yong Jeffrey Huang Date: Thu, 21 Jan 2010 22:05:31 -0800 Subject: [PATCH 01/91] 6916787: Ukrainian currency name needs to be fixed Reviewed-by: yhuang, peytoia --- .../classes/sun/util/resources/CurrencyNames_uk_UA.properties | 2 +- jdk/test/sun/text/resources/LocaleData | 4 ++-- jdk/test/sun/text/resources/LocaleDataTest.java | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/jdk/src/share/classes/sun/util/resources/CurrencyNames_uk_UA.properties b/jdk/src/share/classes/sun/util/resources/CurrencyNames_uk_UA.properties index f83822dd221..372b5cfb318 100644 --- a/jdk/src/share/classes/sun/util/resources/CurrencyNames_uk_UA.properties +++ b/jdk/src/share/classes/sun/util/resources/CurrencyNames_uk_UA.properties @@ -35,4 +35,4 @@ # This notice and attribution to Taligent may not be removed. # Taligent is a registered trademark of Taligent, Inc. -UAH=\u0433\u0440\u043b. +UAH=\u0433\u0440\u043d. diff --git a/jdk/test/sun/text/resources/LocaleData b/jdk/test/sun/text/resources/LocaleData index e662c356117..5fba9272410 100644 --- a/jdk/test/sun/text/resources/LocaleData +++ b/jdk/test/sun/text/resources/LocaleData @@ -673,8 +673,8 @@ FormatData/es_VE/NumberElements/0=, FormatData/es_VE/NumberElements/1=. FormatData/es_VE/NumberElements/2=; -# bug #4099810, 4290801, 6868106 -CurrencyNames/uk_UA/UAH=\u0433\u0440\u043b. +# bug #4099810, 4290801, 6868106, 6916787 +CurrencyNames/uk_UA/UAH=\u0433\u0440\u043d. FormatData/uk_UA/NumberPatterns/0=#,##0.###;-#,##0.### # FormatData/uk_UA/NumberPatterns/1=#,##0.## '\u0433\u0440\u0432.';-#,##0.## '\u0433\u0440\u0432.' # Changed; see bug 4122840 FormatData/uk_UA/NumberPatterns/2=#,##0% diff --git a/jdk/test/sun/text/resources/LocaleDataTest.java b/jdk/test/sun/text/resources/LocaleDataTest.java index 308c3d6b64f..f04d29435cb 100644 --- a/jdk/test/sun/text/resources/LocaleDataTest.java +++ b/jdk/test/sun/text/resources/LocaleDataTest.java @@ -32,7 +32,7 @@ * 6414459 6455680 6498742 6558863 6488119 6547501 6497154 6558856 6481177 * 6379214 6485516 6486607 4225362 4494727 6533691 6531591 6531593 6570259 * 6509039 6609737 6610748 6645271 6507067 6873931 6450945 6645268 6646611 - * 6645405 6650730 6910489 6573250 6870908 6585666 6716626 6914413 + * 6645405 6650730 6910489 6573250 6870908 6585666 6716626 6914413 6916787 * @summary Verify locale data * */ From 30885d636b6b1ca3f1448699b12584fce398d9af Mon Sep 17 00:00:00 2001 From: Yong Jeffrey Huang Date: Wed, 27 Jan 2010 23:19:28 -0800 Subject: [PATCH 02/91] 6919624: minimalDaysInFirstWeek ressource for hungarian is wrong Reviewed-by: yhuang, peytoia --- .../classes/sun/util/resources/CalendarData_hu.properties | 2 +- jdk/test/sun/text/resources/LocaleData | 3 +++ jdk/test/sun/text/resources/LocaleDataTest.java | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/jdk/src/share/classes/sun/util/resources/CalendarData_hu.properties b/jdk/src/share/classes/sun/util/resources/CalendarData_hu.properties index 2f1b22e844b..6ff507325e5 100644 --- a/jdk/src/share/classes/sun/util/resources/CalendarData_hu.properties +++ b/jdk/src/share/classes/sun/util/resources/CalendarData_hu.properties @@ -37,4 +37,4 @@ firstDayOfWeek=2 -minimalDaysInFirstWeek=1 +minimalDaysInFirstWeek=4 diff --git a/jdk/test/sun/text/resources/LocaleData b/jdk/test/sun/text/resources/LocaleData index 5fba9272410..bf609d108b7 100644 --- a/jdk/test/sun/text/resources/LocaleData +++ b/jdk/test/sun/text/resources/LocaleData @@ -6098,3 +6098,6 @@ LocaleNames/nl/YE=Jemen LocaleNames/nl/YT=Mayotte LocaleNames/nl/ZA=Zuid-Afrika LocaleNames/nl/ZM=Zambia + +# bug 6919624 +CalendarData/hu/minimalDaysInFirstWeek=4 diff --git a/jdk/test/sun/text/resources/LocaleDataTest.java b/jdk/test/sun/text/resources/LocaleDataTest.java index f04d29435cb..a1d88d1b5fb 100644 --- a/jdk/test/sun/text/resources/LocaleDataTest.java +++ b/jdk/test/sun/text/resources/LocaleDataTest.java @@ -33,6 +33,7 @@ * 6379214 6485516 6486607 4225362 4494727 6533691 6531591 6531593 6570259 * 6509039 6609737 6610748 6645271 6507067 6873931 6450945 6645268 6646611 * 6645405 6650730 6910489 6573250 6870908 6585666 6716626 6914413 6916787 + * 6919624 * @summary Verify locale data * */ From 97617dd2f3d3225a54892af33237a7495a063989 Mon Sep 17 00:00:00 2001 From: Yong Jeffrey Huang Date: Thu, 11 Feb 2010 20:59:09 -0800 Subject: [PATCH 03/91] 6776102: sun/util/resources/TimeZone/Bug6317929.java test failed against 6u12b01 and passed against 6u11b03 Reviewed-by: yhuang, peytoia --- jdk/test/sun/util/resources/TimeZone/Bug6317929.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jdk/test/sun/util/resources/TimeZone/Bug6317929.java b/jdk/test/sun/util/resources/TimeZone/Bug6317929.java index b4d88d1828b..feb46d72d96 100644 --- a/jdk/test/sun/util/resources/TimeZone/Bug6317929.java +++ b/jdk/test/sun/util/resources/TimeZone/Bug6317929.java @@ -180,11 +180,11 @@ public class Bug6317929 { "(\ub274 \uc0ac\uc6b0\uc2a4 \uc6e8\uc77c\uc988)\""); tzLocale = locales2Test[7]; if (!Currie.getDisplayName(false, TimeZone.LONG, tzLocale).equals - ("Eastern Standard Time (Nya Sydwales)")) + ("Eastern, normaltid (Nya Sydwales)")) throw new RuntimeException("\n" + tzLocale + ": LONG, " + "non-daylight saving name for " + "Australia/Currie should be " + - "\"Eastern Standard Time " + + "\"Eastern, normaltid " + "(Nya Sydwales)\""); tzLocale = locales2Test[8]; if (!Currie.getDisplayName(false, TimeZone.LONG, tzLocale).equals From 67c094c4c71ae52439c32a131a81f8b971b08694 Mon Sep 17 00:00:00 2001 From: Tom Rodriguez Date: Thu, 18 Mar 2010 14:31:41 -0700 Subject: [PATCH 04/91] 6926979: should simplify catch_inline_exception Reviewed-by: twisti --- hotspot/src/share/vm/opto/doCall.cpp | 62 +++++------------------ hotspot/src/share/vm/opto/parse.hpp | 3 -- hotspot/src/share/vm/opto/parse1.cpp | 64 ------------------------ hotspot/src/share/vm/runtime/globals.hpp | 4 -- 4 files changed, 13 insertions(+), 120 deletions(-) diff --git a/hotspot/src/share/vm/opto/doCall.cpp b/hotspot/src/share/vm/opto/doCall.cpp index 2f3f734fd45..9100139e6d0 100644 --- a/hotspot/src/share/vm/opto/doCall.cpp +++ b/hotspot/src/share/vm/opto/doCall.cpp @@ -714,8 +714,6 @@ void Parse::catch_inline_exceptions(SafePointNode* ex_map) { // iterate through all entries sequentially for (;!handlers.is_done(); handlers.next()) { - // Do nothing if turned off - if( !DeutschShiffmanExceptions ) break; ciExceptionHandler* handler = handlers.handler(); if (handler->is_rethrow()) { @@ -741,46 +739,26 @@ void Parse::catch_inline_exceptions(SafePointNode* ex_map) { return; // No more handling to be done here! } - // %%% The following logic replicates make_from_klass_unique. - // TO DO: Replace by a subroutine call. Then generalize - // the type check, as noted in the next "%%%" comment. - + // Get the handler's klass ciInstanceKlass* klass = handler->catch_klass(); - if (UseUniqueSubclasses) { - // (We use make_from_klass because it respects UseUniqueSubclasses.) - const TypeOopPtr* tp = TypeOopPtr::make_from_klass(klass); - klass = tp->klass()->as_instance_klass(); + + if (!klass->is_loaded()) { // klass is not loaded? + // fall through into catch_call_exceptions which will emit a + // handler with an uncommon trap. + break; } - // Get the handler's klass - if (!klass->is_loaded()) // klass is not loaded? - break; // Must call Rethrow! if (klass->is_interface()) // should not happen, but... break; // bail out - // See if the loaded exception klass has no subtypes - if (klass->has_subklass()) - break; // Cannot easily do precise test ==> Rethrow - // %%% Now that subclass checking is very fast, we need to rewrite - // this section and remove the option "DeutschShiffmanExceptions". - // The exception processing chain should be a normal typecase pattern, - // with a bailout to the interpreter only in the case of unloaded - // classes. (The bailout should mark the method non-entrant.) - // This rewrite should be placed in GraphKit::, not Parse::. - - // Add a dependence; if any subclass added we need to recompile - // %%% should use stronger assert_unique_concrete_subtype instead - if (!klass->is_final()) { - C->dependencies()->assert_leaf_type(klass); - } - - // Implement precise test + // Check the type of the exception against the catch type const TypeKlassPtr *tk = TypeKlassPtr::make(klass); Node* con = _gvn.makecon(tk); - Node* cmp = _gvn.transform( new (C, 3) CmpPNode(ex_klass_node, con) ); - Node* bol = _gvn.transform( new (C, 2) BoolNode(cmp, BoolTest::ne) ); - { BuildCutout unless(this, bol, PROB_LIKELY(0.7f)); - const TypeInstPtr* tinst = TypeInstPtr::make_exact(TypePtr::NotNull, klass); + Node* not_subtype_ctrl = gen_subtype_check(ex_klass_node, con); + if (!stopped()) { + PreserveJVMState pjvms(this); + const TypeInstPtr* tinst = TypeOopPtr::make_from_klass_unique(klass)->cast_to_ptr_type(TypePtr::NotNull)->is_instptr(); + assert(klass->has_subklass() || tinst->klass_is_exact(), "lost exactness"); Node* ex_oop = _gvn.transform(new (C, 2) CheckCastPPNode(control(), ex_node, tinst)); push_ex_oop(ex_oop); // Push exception oop for handler #ifndef PRODUCT @@ -792,6 +770,7 @@ void Parse::catch_inline_exceptions(SafePointNode* ex_map) { #endif merge_exception(handler_bci); } + set_control(not_subtype_ctrl); // Come here if exception does not match handler. // Carry on with more handler checks. @@ -800,21 +779,6 @@ void Parse::catch_inline_exceptions(SafePointNode* ex_map) { assert(!stopped(), "you should return if you finish the chain"); - if (remaining == 1) { - // Further checks do not matter. - } - - if (can_rerun_bytecode()) { - // Do not push_ex_oop here! - // Re-executing the bytecode will reproduce the throwing condition. - bool must_throw = true; - uncommon_trap(Deoptimization::Reason_unhandled, - Deoptimization::Action_none, - (ciKlass*)NULL, (const char*)NULL, // default args - must_throw); - return; - } - // Oops, need to call into the VM to resolve the klasses at runtime. // Note: This call must not deoptimize, since it is not a real at this bci! kill_dead_locals(); diff --git a/hotspot/src/share/vm/opto/parse.hpp b/hotspot/src/share/vm/opto/parse.hpp index d48b21971b7..3a8131bf454 100644 --- a/hotspot/src/share/vm/opto/parse.hpp +++ b/hotspot/src/share/vm/opto/parse.hpp @@ -551,9 +551,6 @@ class Parse : public GraphKit { // Also handles exceptions for individual bytecodes. void catch_inline_exceptions(SafePointNode* ex_map); - // Bytecode classifier, helps decide to use uncommon_trap vs. rethrow_C. - bool can_rerun_bytecode(); - // Merge the given map into correct exceptional exit state. // Assumes that there is no applicable local handler. void throw_to_exit(SafePointNode* ex_map); diff --git a/hotspot/src/share/vm/opto/parse1.cpp b/hotspot/src/share/vm/opto/parse1.cpp index 5543292ef30..579f4d0cd6c 100644 --- a/hotspot/src/share/vm/opto/parse1.cpp +++ b/hotspot/src/share/vm/opto/parse1.cpp @@ -798,67 +798,6 @@ void Compile::rethrow_exceptions(JVMState* jvms) { initial_gvn()->transform_no_reclaim(exit); } -bool Parse::can_rerun_bytecode() { - switch (bc()) { - case Bytecodes::_ldc: - case Bytecodes::_ldc_w: - case Bytecodes::_ldc2_w: - case Bytecodes::_getfield: - case Bytecodes::_putfield: - case Bytecodes::_getstatic: - case Bytecodes::_putstatic: - case Bytecodes::_arraylength: - case Bytecodes::_baload: - case Bytecodes::_caload: - case Bytecodes::_iaload: - case Bytecodes::_saload: - case Bytecodes::_faload: - case Bytecodes::_aaload: - case Bytecodes::_laload: - case Bytecodes::_daload: - case Bytecodes::_bastore: - case Bytecodes::_castore: - case Bytecodes::_iastore: - case Bytecodes::_sastore: - case Bytecodes::_fastore: - case Bytecodes::_aastore: - case Bytecodes::_lastore: - case Bytecodes::_dastore: - case Bytecodes::_irem: - case Bytecodes::_idiv: - case Bytecodes::_lrem: - case Bytecodes::_ldiv: - case Bytecodes::_frem: - case Bytecodes::_fdiv: - case Bytecodes::_drem: - case Bytecodes::_ddiv: - case Bytecodes::_checkcast: - case Bytecodes::_instanceof: - case Bytecodes::_anewarray: - case Bytecodes::_newarray: - case Bytecodes::_multianewarray: - case Bytecodes::_new: - case Bytecodes::_monitorenter: // can re-run initial null check, only - case Bytecodes::_return: - return true; - break; - - // Don't rerun athrow since it's part of the exception path. - case Bytecodes::_athrow: - case Bytecodes::_invokestatic: - case Bytecodes::_invokedynamic: - case Bytecodes::_invokespecial: - case Bytecodes::_invokevirtual: - case Bytecodes::_invokeinterface: - return false; - break; - - default: - assert(false, "unexpected bytecode produced an exception"); - return true; - } -} - //---------------------------do_exceptions------------------------------------- // Process exceptions arising from the current bytecode. // Send caught exceptions to the proper handler within this method. @@ -872,9 +811,6 @@ void Parse::do_exceptions() { return; } - // Make sure we can classify this bytecode if we need to. - debug_only(can_rerun_bytecode()); - PreserveJVMState pjvms(this, false); SafePointNode* ex_map; diff --git a/hotspot/src/share/vm/runtime/globals.hpp b/hotspot/src/share/vm/runtime/globals.hpp index 4baf31700ba..e9c5d3ade3a 100644 --- a/hotspot/src/share/vm/runtime/globals.hpp +++ b/hotspot/src/share/vm/runtime/globals.hpp @@ -2494,10 +2494,6 @@ class CommandLineFlags { notproduct(bool, TraceSpilling, false, \ "Trace spilling") \ \ - develop(bool, DeutschShiffmanExceptions, true, \ - "Fast check to find exception handler for precisely typed " \ - "exceptions") \ - \ product(bool, SplitIfBlocks, true, \ "Clone compares and control flow through merge points to fold " \ "some branches") \ From e76823e70bb1fb296519e3dd2b1e53547cffc45c Mon Sep 17 00:00:00 2001 From: Gary Benson Date: Tue, 30 Mar 2010 00:57:55 -0700 Subject: [PATCH 05/91] 6939180: Zero locking fix When Zero is running with Shark enabled threads can be left with their _do_not_unlock_if_synchronized flag incorrectly set. Reviewed-by: twisti --- hotspot/src/cpu/zero/vm/cppInterpreter_zero.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/hotspot/src/cpu/zero/vm/cppInterpreter_zero.cpp b/hotspot/src/cpu/zero/vm/cppInterpreter_zero.cpp index 4f94d8851c4..47a305cdf5c 100644 --- a/hotspot/src/cpu/zero/vm/cppInterpreter_zero.cpp +++ b/hotspot/src/cpu/zero/vm/cppInterpreter_zero.cpp @@ -206,7 +206,6 @@ void CppInterpreter::native_entry(methodOop method, intptr_t UNUSED, TRAPS) { // Update the invocation counter if ((UseCompiler || CountCompiledCalls) && !method->is_synchronized()) { - thread->set_do_not_unlock(); InvocationCounter *counter = method->invocation_counter(); counter->increment(); if (counter->reached_InvocationLimit()) { @@ -215,7 +214,6 @@ void CppInterpreter::native_entry(methodOop method, intptr_t UNUSED, TRAPS) { if (HAS_PENDING_EXCEPTION) goto unwind_and_return; } - thread->clr_do_not_unlock(); } // Lock if necessary From 972acdab816f00cd4f38e1e8d829888329cd8295 Mon Sep 17 00:00:00 2001 From: Antonios Printezis Date: Tue, 30 Mar 2010 15:36:55 -0400 Subject: [PATCH 06/91] 6937160: G1: should observe GCTimeRatio Remove the G1GCPercent parameter, that specifies the desired GC overhead percentage in G1, and observe the GCTimeRatio parameter instead. Reviewed-by: jmasa, johnc --- .../vm/gc_implementation/g1/g1CollectorPolicy.cpp | 11 +++++++++-- .../vm/gc_implementation/g1/g1CollectorPolicy.hpp | 2 ++ .../src/share/vm/gc_implementation/g1/g1_globals.hpp | 3 --- hotspot/src/share/vm/runtime/arguments.cpp | 10 ++++++++++ 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp index 32d707a281e..287324609fb 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp @@ -198,7 +198,9 @@ G1CollectorPolicy::G1CollectorPolicy() : _recorded_survivor_regions(0), _recorded_survivor_head(NULL), _recorded_survivor_tail(NULL), - _survivors_age_table(true) + _survivors_age_table(true), + + _gc_overhead_perc(0.0) { // Set up the region size and associated fields. Given that the @@ -275,6 +277,11 @@ G1CollectorPolicy::G1CollectorPolicy() : // calculate_young_list_target_config during initialization _max_survivor_regions = G1FixedSurvivorSpaceSize / HeapRegion::GrainBytes; + assert(GCTimeRatio > 0, + "we should have set it to a default value set_g1_gc_flags() " + "if a user set it to 0"); + _gc_overhead_perc = 100.0 * (1.0 / (1.0 + GCTimeRatio)); + initialize_all(); } @@ -2288,7 +2295,7 @@ G1CollectorPolicy::conservative_avg_survival_fraction_work(double avg, } size_t G1CollectorPolicy::expansion_amount() { - if ((int)(recent_avg_pause_time_ratio() * 100.0) > G1GCPercent) { + if ((recent_avg_pause_time_ratio() * 100.0) > _gc_overhead_perc) { // We will double the existing space, or take // G1ExpandByPercentOfAvailable % of the available expansion // space, whichever is smaller, bounded below by a minimum diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp index 2b9eb83f074..2be5ba9cf7b 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp @@ -215,6 +215,8 @@ protected: SurvRateGroup* _survivor_surv_rate_group; // add here any more surv rate groups + double _gc_overhead_perc; + bool during_marking() { return _during_marking; } diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp index d2363ad6705..a72268a6ef2 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp @@ -40,9 +40,6 @@ develop(bool, G1Gen, true, \ "If true, it will enable the generational G1") \ \ - develop(intx, G1GCPercent, 10, \ - "The desired percent time spent on GC") \ - \ develop(intx, G1PolicyVerbose, 0, \ "The verbosity level on G1 policy decisions") \ \ diff --git a/hotspot/src/share/vm/runtime/arguments.cpp b/hotspot/src/share/vm/runtime/arguments.cpp index e5f2862a8e4..7984761451c 100644 --- a/hotspot/src/share/vm/runtime/arguments.cpp +++ b/hotspot/src/share/vm/runtime/arguments.cpp @@ -1353,6 +1353,16 @@ void Arguments::set_g1_gc_flags() { MarkStackSize / K, MarkStackSizeMax / K); tty->print_cr("ConcGCThreads: %u", ConcGCThreads); } + + if (FLAG_IS_DEFAULT(GCTimeRatio) || GCTimeRatio == 0) { + // In G1, we want the default GC overhead goal to be higher than + // say in PS. So we set it here to 10%. Otherwise the heap might + // be expanded more aggressively than we would like it to. In + // fact, even 10% seems to not be high enough in some cases + // (especially small GC stress tests that the main thing they do + // is allocation). We might consider increase it further. + FLAG_SET_DEFAULT(GCTimeRatio, 9); + } } void Arguments::set_heap_size() { From f5197d0d363be3c934b8eeb8acb4d9884f59aabc Mon Sep 17 00:00:00 2001 From: Jon Masamitsu Date: Tue, 13 Apr 2010 13:52:10 -0700 Subject: [PATCH 07/91] 6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit Ensure a full GC that clears SoftReferences before throwing an out-of-memory Reviewed-by: ysr, jcoomes --- .../cmsCollectorPolicy.hpp | 5 +- .../concurrentMarkSweepGeneration.cpp | 71 +++----- .../concurrentMarkSweepGeneration.hpp | 6 +- .../gc_implementation/g1/g1CollectedHeap.cpp | 17 +- .../vm/gc_implementation/g1/g1MarkSweep.cpp | 9 +- .../includeDB_gc_parallelScavenge | 8 +- .../vm/gc_implementation/includeDB_gc_serial | 3 +- .../parNew/parNewGeneration.cpp | 6 +- .../parallelScavenge/parallelScavengeHeap.cpp | 104 ++++++------ .../parallelScavenge/parallelScavengeHeap.hpp | 9 +- .../parallelScavenge/psAdaptiveSizePolicy.cpp | 116 +++----------- .../parallelScavenge/psAdaptiveSizePolicy.hpp | 6 +- .../psGCAdaptivePolicyCounters.cpp | 12 +- .../psGCAdaptivePolicyCounters.hpp | 14 +- .../parallelScavenge/psMarkSweep.cpp | 54 +++---- .../parallelScavenge/psParallelCompact.cpp | 52 +++--- .../parallelScavenge/psScavenge.cpp | 45 +++--- .../shared/adaptiveSizePolicy.cpp | 151 +++++++++++++++++- .../shared/adaptiveSizePolicy.hpp | 49 +++--- .../shared/vmGCOperations.hpp | 15 +- .../share/vm/gc_interface/collectedHeap.hpp | 6 +- .../src/share/vm/memory/collectorPolicy.cpp | 63 +++++--- .../src/share/vm/memory/collectorPolicy.hpp | 56 +++++-- .../src/share/vm/memory/defNewGeneration.cpp | 6 +- .../src/share/vm/memory/genCollectedHeap.cpp | 14 +- hotspot/src/share/vm/memory/genMarkSweep.cpp | 10 +- 26 files changed, 543 insertions(+), 364 deletions(-) diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.hpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.hpp index 1fe98442b60..3f3e187ceff 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.hpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2007-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 @@ -32,11 +32,10 @@ class ConcurrentMarkSweepPolicy : public TwoGenerationCollectorPolicy { ConcurrentMarkSweepPolicy* as_concurrent_mark_sweep_policy() { return this; } void initialize_gc_policy_counters(); -#if 1 + virtual void initialize_size_policy(size_t init_eden_size, size_t init_promo_size, size_t init_survivor_size); -#endif // Returns true if the incremental mode is enabled. virtual bool has_soft_ended_eden(); diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp index 9ed32074822..e96bbae4306 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2001-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2001-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 @@ -1815,8 +1815,19 @@ NOT_PRODUCT( do_compaction_work(clear_all_soft_refs); // Has the GC time limit been exceeded? - check_gc_time_limit(); - + DefNewGeneration* young_gen = _young_gen->as_DefNewGeneration(); + size_t max_eden_size = young_gen->max_capacity() - + young_gen->to()->capacity() - + young_gen->from()->capacity(); + GenCollectedHeap* gch = GenCollectedHeap::heap(); + GCCause::Cause gc_cause = gch->gc_cause(); + size_policy()->check_gc_overhead_limit(_young_gen->used(), + young_gen->eden()->used(), + _cmsGen->max_capacity(), + max_eden_size, + full, + gc_cause, + gch->collector_policy()); } else { do_mark_sweep_work(clear_all_soft_refs, first_state, should_start_over); @@ -1828,55 +1839,6 @@ NOT_PRODUCT( return; } -void CMSCollector::check_gc_time_limit() { - - // Ignore explicit GC's. Exiting here does not set the flag and - // does not reset the count. Updating of the averages for system - // GC's is still controlled by UseAdaptiveSizePolicyWithSystemGC. - GCCause::Cause gc_cause = GenCollectedHeap::heap()->gc_cause(); - if (GCCause::is_user_requested_gc(gc_cause) || - GCCause::is_serviceability_requested_gc(gc_cause)) { - return; - } - - // Calculate the fraction of the CMS generation was freed during - // the last collection. - // Only consider the STW compacting cost for now. - // - // Note that the gc time limit test only works for the collections - // of the young gen + tenured gen and not for collections of the - // permanent gen. That is because the calculation of the space - // freed by the collection is the free space in the young gen + - // tenured gen. - - double fraction_free = - ((double)_cmsGen->free())/((double)_cmsGen->max_capacity()); - if ((100.0 * size_policy()->compacting_gc_cost()) > - ((double) GCTimeLimit) && - ((fraction_free * 100) < GCHeapFreeLimit)) { - size_policy()->inc_gc_time_limit_count(); - if (UseGCOverheadLimit && - (size_policy()->gc_time_limit_count() > - AdaptiveSizePolicyGCTimeLimitThreshold)) { - size_policy()->set_gc_time_limit_exceeded(true); - // Avoid consecutive OOM due to the gc time limit by resetting - // the counter. - size_policy()->reset_gc_time_limit_count(); - if (PrintGCDetails) { - gclog_or_tty->print_cr(" GC is exceeding overhead limit " - "of %d%%", GCTimeLimit); - } - } else { - if (PrintGCDetails) { - gclog_or_tty->print_cr(" GC would exceed overhead limit " - "of %d%%", GCTimeLimit); - } - } - } else { - size_policy()->reset_gc_time_limit_count(); - } -} - // Resize the perm generation and the tenured generation // after obtaining the free list locks for the // two generations. @@ -6182,6 +6144,11 @@ void CMSCollector::reset(bool asynch) { } curAddr = chunk.end(); } + // A successful mostly concurrent collection has been done. + // Because only the full (i.e., concurrent mode failure) collections + // are being measured for gc overhead limits, clean the "near" flag + // and count. + sp->reset_gc_overhead_limit_count(); _collectorState = Idling; } else { // already have the lock diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp index 18164a58b4e..5536b7f00bd 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp @@ -1,5 +1,5 @@ /* - * Copyright 2001-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2001-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 @@ -570,10 +570,6 @@ class CMSCollector: public CHeapObj { ConcurrentMarkSweepPolicy* _collector_policy; ConcurrentMarkSweepPolicy* collector_policy() { return _collector_policy; } - // Check whether the gc time limit has been - // exceeded and set the size policy flag - // appropriately. - void check_gc_time_limit(); // XXX Move these to CMSStats ??? FIX ME !!! elapsedTimer _inter_sweep_timer; // time between sweeps elapsedTimer _intra_sweep_timer; // time _in_ sweeps diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp index 1734fe0bafc..b46616fcd06 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2001-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2001-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 @@ -920,13 +920,19 @@ void G1CollectedHeap::do_collection(bool full, bool clear_all_soft_refs, assert(SafepointSynchronize::is_at_safepoint(), "should be at safepoint"); assert(Thread::current() == VMThread::vm_thread(), "should be in vm thread"); + const bool do_clear_all_soft_refs = clear_all_soft_refs || + collector_policy()->should_clear_all_soft_refs(); + + ClearedAllSoftRefs casr(do_clear_all_soft_refs, collector_policy()); + { IsGCActiveMark x; // Timing gclog_or_tty->date_stamp(PrintGC && PrintGCDateStamps); TraceCPUTime tcpu(PrintGCDetails, true, gclog_or_tty); - TraceTime t(full ? "Full GC (System.gc())" : "Full GC", PrintGC, true, gclog_or_tty); + TraceTime t(full ? "Full GC (System.gc())" : "Full GC", + PrintGC, true, gclog_or_tty); TraceMemoryManagerStats tms(true /* fullGC */); @@ -985,12 +991,12 @@ void G1CollectedHeap::do_collection(bool full, bool clear_all_soft_refs, ReferenceProcessorIsAliveMutator rp_is_alive_null(ref_processor(), NULL); ref_processor()->enable_discovery(); - ref_processor()->setup_policy(clear_all_soft_refs); + ref_processor()->setup_policy(do_clear_all_soft_refs); // Do collection work { HandleMark hm; // Discard invalid handles created during gc - G1MarkSweep::invoke_at_safepoint(ref_processor(), clear_all_soft_refs); + G1MarkSweep::invoke_at_safepoint(ref_processor(), do_clear_all_soft_refs); } // Because freeing humongous regions may have added some unclean // regions, it is necessary to tear down again before rebuilding. @@ -1208,6 +1214,9 @@ G1CollectedHeap::satisfy_failed_allocation(size_t word_size) { return result; } + assert(!collector_policy()->should_clear_all_soft_refs(), + "Flag should have been handled and cleared prior to this point"); + // What else? We might try synchronous finalization later. If the total // space available is large enough for the allocation, then a more // complete compaction phase than we've tried so far might be diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp index a874bcac557..af54d584da9 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2001-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2001-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 @@ -31,6 +31,12 @@ void G1MarkSweep::invoke_at_safepoint(ReferenceProcessor* rp, bool clear_all_softrefs) { assert(SafepointSynchronize::is_at_safepoint(), "must be at a safepoint"); + SharedHeap* sh = SharedHeap::heap(); +#ifdef ASSERT + if (sh->collector_policy()->should_clear_all_soft_refs()) { + assert(clear_all_softrefs, "Policy should have been checked earler"); + } +#endif // hook up weak ref data so it can be used during Mark-Sweep assert(GenMarkSweep::ref_processor() == NULL, "no stomping"); assert(rp != NULL, "should be non-NULL"); @@ -44,7 +50,6 @@ void G1MarkSweep::invoke_at_safepoint(ReferenceProcessor* rp, // Increment the invocation count for the permanent generation, since it is // implicitly collected whenever we do a full mark sweep collection. - SharedHeap* sh = SharedHeap::heap(); sh->perm_gen()->stat_record()->invocations++; bool marked_for_unloading = false; diff --git a/hotspot/src/share/vm/gc_implementation/includeDB_gc_parallelScavenge b/hotspot/src/share/vm/gc_implementation/includeDB_gc_parallelScavenge index e787c2a5a6d..ef2fa4285d0 100644 --- a/hotspot/src/share/vm/gc_implementation/includeDB_gc_parallelScavenge +++ b/hotspot/src/share/vm/gc_implementation/includeDB_gc_parallelScavenge @@ -1,5 +1,5 @@ // -// Copyright 2001-2009 Sun Microsystems, Inc. All Rights Reserved. +// Copyright 2001-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 @@ -161,8 +161,10 @@ parMarkBitMap.cpp psParallelCompact.hpp parMarkBitMap.hpp bitMap.inline.hpp parMarkBitMap.hpp psVirtualspace.hpp +psAdaptiveSizePolicy.cpp collectorPolicy.hpp psAdaptiveSizePolicy.cpp gcPolicyCounters.hpp psAdaptiveSizePolicy.cpp gcCause.hpp +psAdaptiveSizePolicy.cpp generationSizer.hpp psAdaptiveSizePolicy.cpp psAdaptiveSizePolicy.hpp psAdaptiveSizePolicy.cpp psGCAdaptivePolicyCounters.hpp psAdaptiveSizePolicy.cpp psScavenge.hpp @@ -215,6 +217,7 @@ psMarkSweep.cpp events.hpp psMarkSweep.cpp fprofiler.hpp psMarkSweep.cpp gcCause.hpp psMarkSweep.cpp gcLocker.inline.hpp +psMarkSweep.cpp generationSizer.hpp psMarkSweep.cpp isGCActiveMark.hpp psMarkSweep.cpp oop.inline.hpp psMarkSweep.cpp memoryService.hpp @@ -256,6 +259,7 @@ psParallelCompact.cpp fprofiler.hpp psParallelCompact.cpp gcCause.hpp psParallelCompact.cpp gcLocker.inline.hpp psParallelCompact.cpp gcTaskManager.hpp +psParallelCompact.cpp generationSizer.hpp psParallelCompact.cpp isGCActiveMark.hpp psParallelCompact.cpp management.hpp psParallelCompact.cpp memoryService.hpp @@ -344,10 +348,12 @@ psPromotionLAB.hpp objectStartArray.hpp psScavenge.cpp psAdaptiveSizePolicy.hpp psScavenge.cpp biasedLocking.hpp psScavenge.cpp cardTableExtension.hpp +psScavenge.cpp collectorPolicy.hpp psScavenge.cpp fprofiler.hpp psScavenge.cpp gcCause.hpp psScavenge.cpp gcLocker.inline.hpp psScavenge.cpp gcTaskManager.hpp +psScavenge.cpp generationSizer.hpp psScavenge.cpp handles.inline.hpp psScavenge.cpp isGCActiveMark.hpp psScavenge.cpp oop.inline.hpp diff --git a/hotspot/src/share/vm/gc_implementation/includeDB_gc_serial b/hotspot/src/share/vm/gc_implementation/includeDB_gc_serial index 60e41874d43..e48bae597c9 100644 --- a/hotspot/src/share/vm/gc_implementation/includeDB_gc_serial +++ b/hotspot/src/share/vm/gc_implementation/includeDB_gc_serial @@ -1,5 +1,5 @@ // -// Copyright (c) 2007 Sun Microsystems, Inc. All Rights Reserved. +// Copyright 2007-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,7 @@ adaptiveSizePolicy.hpp allocation.hpp adaptiveSizePolicy.hpp universe.hpp adaptiveSizePolicy.cpp adaptiveSizePolicy.hpp +adaptiveSizePolicy.cpp collectorPolicy.hpp adaptiveSizePolicy.cpp gcCause.hpp adaptiveSizePolicy.cpp ostream.hpp adaptiveSizePolicy.cpp timer.hpp diff --git a/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp b/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp index 07f759c9457..5db3494cdbe 100644 --- a/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp +++ b/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2001-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2001-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 @@ -892,6 +892,10 @@ void ParNewGeneration::collect(bool full, } swap_spaces(); + // A successful scavenge should restart the GC time limit count which is + // for full GC's. + size_policy->reset_gc_overhead_limit_count(); + assert(to()->is_empty(), "to space should be empty now"); } else { assert(HandlePromotionFailure, diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp index 9fe57121f14..68c16464869 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2001-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2001-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 @@ -54,15 +54,16 @@ jint ParallelScavengeHeap::initialize() { CollectedHeap::pre_initialize(); // Cannot be initialized until after the flags are parsed - GenerationSizer flag_parser; + // GenerationSizer flag_parser; + _collector_policy = new GenerationSizer(); - size_t yg_min_size = flag_parser.min_young_gen_size(); - size_t yg_max_size = flag_parser.max_young_gen_size(); - size_t og_min_size = flag_parser.min_old_gen_size(); - size_t og_max_size = flag_parser.max_old_gen_size(); + size_t yg_min_size = _collector_policy->min_young_gen_size(); + size_t yg_max_size = _collector_policy->max_young_gen_size(); + size_t og_min_size = _collector_policy->min_old_gen_size(); + size_t og_max_size = _collector_policy->max_old_gen_size(); // Why isn't there a min_perm_gen_size()? - size_t pg_min_size = flag_parser.perm_gen_size(); - size_t pg_max_size = flag_parser.max_perm_gen_size(); + size_t pg_min_size = _collector_policy->perm_gen_size(); + size_t pg_max_size = _collector_policy->max_perm_gen_size(); trace_gen_sizes("ps heap raw", pg_min_size, pg_max_size, @@ -89,12 +90,14 @@ jint ParallelScavengeHeap::initialize() { // move to the common code. yg_min_size = align_size_up(yg_min_size, yg_align); yg_max_size = align_size_up(yg_max_size, yg_align); - size_t yg_cur_size = align_size_up(flag_parser.young_gen_size(), yg_align); + size_t yg_cur_size = + align_size_up(_collector_policy->young_gen_size(), yg_align); yg_cur_size = MAX2(yg_cur_size, yg_min_size); og_min_size = align_size_up(og_min_size, og_align); og_max_size = align_size_up(og_max_size, og_align); - size_t og_cur_size = align_size_up(flag_parser.old_gen_size(), og_align); + size_t og_cur_size = + align_size_up(_collector_policy->old_gen_size(), og_align); og_cur_size = MAX2(og_cur_size, og_min_size); pg_min_size = align_size_up(pg_min_size, pg_align); @@ -355,6 +358,11 @@ HeapWord* ParallelScavengeHeap::mem_allocate( assert(Thread::current() != (Thread*)VMThread::vm_thread(), "should not be in vm thread"); assert(!Heap_lock->owned_by_self(), "this thread should not own the Heap_lock"); + // In general gc_overhead_limit_was_exceeded should be false so + // set it so here and reset it to true only if the gc time + // limit is being exceeded as checked below. + *gc_overhead_limit_was_exceeded = false; + HeapWord* result = young_gen()->allocate(size, is_tlab); uint loop_count = 0; @@ -428,24 +436,6 @@ HeapWord* ParallelScavengeHeap::mem_allocate( if (result == NULL) { - // Exit the loop if if the gc time limit has been exceeded. - // The allocation must have failed above (result must be NULL), - // and the most recent collection must have exceeded the - // gc time limit. Exit the loop so that an out-of-memory - // will be thrown (returning a NULL will do that), but - // clear gc_time_limit_exceeded so that the next collection - // will succeeded if the applications decides to handle the - // out-of-memory and tries to go on. - *gc_overhead_limit_was_exceeded = size_policy()->gc_time_limit_exceeded(); - if (size_policy()->gc_time_limit_exceeded()) { - size_policy()->set_gc_time_limit_exceeded(false); - if (PrintGCDetails && Verbose) { - gclog_or_tty->print_cr("ParallelScavengeHeap::mem_allocate: " - "return NULL because gc_time_limit_exceeded is set"); - } - return NULL; - } - // Generate a VM operation VM_ParallelGCFailedAllocation op(size, is_tlab, gc_count); VMThread::execute(&op); @@ -463,16 +453,34 @@ HeapWord* ParallelScavengeHeap::mem_allocate( assert(op.result() == NULL, "must be NULL if gc_locked() is true"); continue; // retry and/or stall as necessary } - // If a NULL result is being returned, an out-of-memory - // will be thrown now. Clear the gc_time_limit_exceeded - // flag to avoid the following situation. - // gc_time_limit_exceeded is set during a collection - // the collection fails to return enough space and an OOM is thrown - // the next GC is skipped because the gc_time_limit_exceeded - // flag is set and another OOM is thrown - if (op.result() == NULL) { - size_policy()->set_gc_time_limit_exceeded(false); + + // Exit the loop if the gc time limit has been exceeded. + // The allocation must have failed above ("result" guarding + // this path is NULL) and the most recent collection has exceeded the + // gc overhead limit (although enough may have been collected to + // satisfy the allocation). Exit the loop so that an out-of-memory + // will be thrown (return a NULL ignoring the contents of + // op.result()), + // but clear gc_overhead_limit_exceeded so that the next collection + // starts with a clean slate (i.e., forgets about previous overhead + // excesses). Fill op.result() with a filler object so that the + // heap remains parsable. + const bool limit_exceeded = size_policy()->gc_overhead_limit_exceeded(); + const bool softrefs_clear = collector_policy()->all_soft_refs_clear(); + assert(!limit_exceeded || softrefs_clear, "Should have been cleared"); + if (limit_exceeded && softrefs_clear) { + *gc_overhead_limit_was_exceeded = true; + size_policy()->set_gc_overhead_limit_exceeded(false); + if (PrintGCDetails && Verbose) { + gclog_or_tty->print_cr("ParallelScavengeHeap::mem_allocate: " + "return NULL because gc_overhead_limit_exceeded is set"); + } + if (op.result() != NULL) { + CollectedHeap::fill_with_object(op.result(), size); + } + return NULL; } + return op.result(); } } @@ -613,14 +621,15 @@ HeapWord* ParallelScavengeHeap::permanent_mem_allocate(size_t size) { // and the most recent collection must have exceeded the // gc time limit. Exit the loop so that an out-of-memory // will be thrown (returning a NULL will do that), but - // clear gc_time_limit_exceeded so that the next collection + // clear gc_overhead_limit_exceeded so that the next collection // will succeeded if the applications decides to handle the // out-of-memory and tries to go on. - if (size_policy()->gc_time_limit_exceeded()) { - size_policy()->set_gc_time_limit_exceeded(false); + const bool limit_exceeded = size_policy()->gc_overhead_limit_exceeded(); + if (limit_exceeded) { + size_policy()->set_gc_overhead_limit_exceeded(false); if (PrintGCDetails && Verbose) { - gclog_or_tty->print_cr("ParallelScavengeHeap::permanent_mem_allocate: " - "return NULL because gc_time_limit_exceeded is set"); + gclog_or_tty->print_cr("ParallelScavengeHeap::permanent_mem_allocate:" + " return NULL because gc_overhead_limit_exceeded is set"); } assert(result == NULL, "Allocation did not fail"); return NULL; @@ -643,14 +652,15 @@ HeapWord* ParallelScavengeHeap::permanent_mem_allocate(size_t size) { continue; // retry and/or stall as necessary } // If a NULL results is being returned, an out-of-memory - // will be thrown now. Clear the gc_time_limit_exceeded + // will be thrown now. Clear the gc_overhead_limit_exceeded // flag to avoid the following situation. - // gc_time_limit_exceeded is set during a collection + // gc_overhead_limit_exceeded is set during a collection // the collection fails to return enough space and an OOM is thrown - // the next GC is skipped because the gc_time_limit_exceeded - // flag is set and another OOM is thrown + // a subsequent GC prematurely throws an out-of-memory because + // the gc_overhead_limit_exceeded counts did not start + // again from 0. if (op.result() == NULL) { - size_policy()->set_gc_time_limit_exceeded(false); + size_policy()->reset_gc_overhead_limit_count(); } return op.result(); } diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.hpp index 46fdcc53348..381a4fab34b 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.hpp @@ -1,5 +1,5 @@ /* - * Copyright 2001-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2001-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 @@ -25,6 +25,8 @@ class AdjoiningGenerations; class GCTaskManager; class PSAdaptiveSizePolicy; +class GenerationSizer; +class CollectorPolicy; class ParallelScavengeHeap : public CollectedHeap { friend class VMStructs; @@ -43,6 +45,8 @@ class ParallelScavengeHeap : public CollectedHeap { size_t _young_gen_alignment; size_t _old_gen_alignment; + GenerationSizer* _collector_policy; + inline size_t set_alignment(size_t& var, size_t val); // Collection of generations that are adjacent in the @@ -72,6 +76,9 @@ class ParallelScavengeHeap : public CollectedHeap { return CollectedHeap::ParallelScavengeHeap; } +CollectorPolicy* collector_policy() const { return (CollectorPolicy*) _collector_policy; } + // GenerationSizer* collector_policy() const { return _collector_policy; } + static PSYoungGen* young_gen() { return _young_gen; } static PSOldGen* old_gen() { return _old_gen; } static PSPermGen* perm_gen() { return _perm_gen; } diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.cpp index 44629831ffe..4061fd8234f 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2002-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2002-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 @@ -184,18 +184,19 @@ void PSAdaptiveSizePolicy::clear_generation_free_space_flags() { set_change_young_gen_for_maj_pauses(0); } - // If this is not a full GC, only test and modify the young generation. -void PSAdaptiveSizePolicy::compute_generation_free_space(size_t young_live, - size_t eden_live, - size_t old_live, - size_t perm_live, - size_t cur_eden, - size_t max_old_gen_size, - size_t max_eden_size, - bool is_full_gc, - GCCause::Cause gc_cause) { +void PSAdaptiveSizePolicy::compute_generation_free_space( + size_t young_live, + size_t eden_live, + size_t old_live, + size_t perm_live, + size_t cur_eden, + size_t max_old_gen_size, + size_t max_eden_size, + bool is_full_gc, + GCCause::Cause gc_cause, + CollectorPolicy* collector_policy) { // Update statistics // Time statistics are updated as we go, update footprint stats here @@ -380,91 +381,16 @@ void PSAdaptiveSizePolicy::compute_generation_free_space(size_t young_live, // Is too much time being spent in GC? // Is the heap trying to grow beyond it's limits? - const size_t free_in_old_gen = (size_t)(max_old_gen_size - avg_old_live()->average()); + const size_t free_in_old_gen = + (size_t)(max_old_gen_size - avg_old_live()->average()); if (desired_promo_size > free_in_old_gen && desired_eden_size > eden_limit) { - - // eden_limit is the upper limit on the size of eden based on - // the maximum size of the young generation and the sizes - // of the survivor space. - // The question being asked is whether the gc costs are high - // and the space being recovered by a collection is low. - // free_in_young_gen is the free space in the young generation - // after a collection and promo_live is the free space in the old - // generation after a collection. - // - // Use the minimum of the current value of the live in the - // young gen or the average of the live in the young gen. - // If the current value drops quickly, that should be taken - // into account (i.e., don't trigger if the amount of free - // space has suddenly jumped up). If the current is much - // higher than the average, use the average since it represents - // the longer term behavor. - const size_t live_in_eden = MIN2(eden_live, (size_t) avg_eden_live()->average()); - const size_t free_in_eden = eden_limit > live_in_eden ? - eden_limit - live_in_eden : 0; - const size_t total_free_limit = free_in_old_gen + free_in_eden; - const size_t total_mem = max_old_gen_size + max_eden_size; - const double mem_free_limit = total_mem * (GCHeapFreeLimit/100.0); - if (PrintAdaptiveSizePolicy && (Verbose || - (total_free_limit < (size_t) mem_free_limit))) { - gclog_or_tty->print_cr( - "PSAdaptiveSizePolicy::compute_generation_free_space limits:" - " promo_limit: " SIZE_FORMAT - " eden_limit: " SIZE_FORMAT - " total_free_limit: " SIZE_FORMAT - " max_old_gen_size: " SIZE_FORMAT - " max_eden_size: " SIZE_FORMAT - " mem_free_limit: " SIZE_FORMAT, - promo_limit, eden_limit, total_free_limit, - max_old_gen_size, max_eden_size, - (size_t) mem_free_limit); - } - - if (is_full_gc) { - if (gc_cost() > gc_cost_limit && - total_free_limit < (size_t) mem_free_limit) { - // Collections, on average, are taking too much time, and - // gc_cost() > gc_cost_limit - // we have too little space available after a full gc. - // total_free_limit < mem_free_limit - // where - // total_free_limit is the free space available in - // both generations - // total_mem is the total space available for allocation - // in both generations (survivor spaces are not included - // just as they are not included in eden_limit). - // mem_free_limit is a fraction of total_mem judged to be an - // acceptable amount that is still unused. - // The heap can ask for the value of this variable when deciding - // whether to thrown an OutOfMemory error. - // Note that the gc time limit test only works for the collections - // of the young gen + tenured gen and not for collections of the - // permanent gen. That is because the calculation of the space - // freed by the collection is the free space in the young gen + - // tenured gen. - // Ignore explicit GC's. Ignoring explicit GC's at this level - // is the equivalent of the GC did not happen as far as the - // overhead calculation is concerted (i.e., the flag is not set - // and the count is not affected). Also the average will not - // have been updated unless UseAdaptiveSizePolicyWithSystemGC is on. - if (!GCCause::is_user_requested_gc(gc_cause) && - !GCCause::is_serviceability_requested_gc(gc_cause)) { - inc_gc_time_limit_count(); - if (UseGCOverheadLimit && - (gc_time_limit_count() > AdaptiveSizePolicyGCTimeLimitThreshold)){ - // All conditions have been met for throwing an out-of-memory - _gc_time_limit_exceeded = true; - // Avoid consecutive OOM due to the gc time limit by resetting - // the counter. - reset_gc_time_limit_count(); - } - _print_gc_time_limit_would_be_exceeded = true; - } - } else { - // Did not exceed overhead limits - reset_gc_time_limit_count(); - } - } + check_gc_overhead_limit(young_live, + eden_live, + max_old_gen_size, + max_eden_size, + is_full_gc, + gc_cause, + collector_policy); } diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp index d6e002e3d9e..b2ab7474da1 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp @@ -1,5 +1,5 @@ /* - * Copyright 2002-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2002-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 @@ -45,6 +45,7 @@ // Forward decls class elapsedTimer; +class GenerationSizer; class PSAdaptiveSizePolicy : public AdaptiveSizePolicy { friend class PSGCAdaptivePolicyCounters; @@ -340,7 +341,8 @@ class PSAdaptiveSizePolicy : public AdaptiveSizePolicy { size_t max_old_gen_size, size_t max_eden_size, bool is_full_gc, - GCCause::Cause gc_cause); + GCCause::Cause gc_cause, + CollectorPolicy* collector_policy); // Calculates new survivor space size; returns a new tenuring threshold // value. Stores new survivor size in _survivor_size. diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psGCAdaptivePolicyCounters.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psGCAdaptivePolicyCounters.cpp index 26345dbc924..c887379333d 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psGCAdaptivePolicyCounters.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psGCAdaptivePolicyCounters.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2003-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -117,11 +117,13 @@ PSGCAdaptivePolicyCounters::PSGCAdaptivePolicyCounters(const char* name_arg, PerfData::U_Bytes, (jlong) ps_size_policy()->avg_base_footprint()->average(), CHECK); cname = PerfDataManager::counter_name(name_space(), "gcTimeLimitExceeded"); - _gc_time_limit_exceeded = PerfDataManager::create_variable(SUN_GC, cname, - PerfData::U_Events, ps_size_policy()->gc_time_limit_exceeded(), CHECK); + _gc_overhead_limit_exceeded_counter = + PerfDataManager::create_variable(SUN_GC, cname, + PerfData::U_Events, ps_size_policy()->gc_overhead_limit_exceeded(), CHECK); cname = PerfDataManager::counter_name(name_space(), "liveAtLastFullGc"); - _live_at_last_full_gc = PerfDataManager::create_variable(SUN_GC, cname, + _live_at_last_full_gc_counter = + PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Bytes, ps_size_policy()->live_at_last_full_gc(), CHECK); cname = PerfDataManager::counter_name(name_space(), "majorPauseOldSlope"); @@ -189,6 +191,8 @@ void PSGCAdaptivePolicyCounters::update_counters_from_policy() { update_minor_pause_old_slope(); update_major_pause_young_slope(); update_minor_collection_slope_counter(); + update_gc_overhead_limit_exceeded_counter(); + update_live_at_last_full_gc_counter(); } } diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psGCAdaptivePolicyCounters.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psGCAdaptivePolicyCounters.hpp index 60b89a51c08..a7270371ab4 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psGCAdaptivePolicyCounters.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psGCAdaptivePolicyCounters.hpp @@ -1,5 +1,5 @@ /* - * Copyright 2003-2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -44,8 +44,8 @@ class PSGCAdaptivePolicyCounters : public GCAdaptivePolicyCounters { PerfVariable* _live_space; PerfVariable* _free_space; PerfVariable* _avg_base_footprint; - PerfVariable* _gc_time_limit_exceeded; - PerfVariable* _live_at_last_full_gc; + PerfVariable* _gc_overhead_limit_exceeded_counter; + PerfVariable* _live_at_last_full_gc_counter; PerfVariable* _old_capacity; PerfVariable* _boundary_moved; @@ -169,6 +169,14 @@ class PSGCAdaptivePolicyCounters : public GCAdaptivePolicyCounters { (jlong)(ps_size_policy()->major_pause_young_slope() * 1000) ); } + inline void update_gc_overhead_limit_exceeded_counter() { + _gc_overhead_limit_exceeded_counter->set_value( + (jlong) ps_size_policy()->gc_overhead_limit_exceeded()); + } + inline void update_live_at_last_full_gc_counter() { + _live_at_last_full_gc_counter->set_value( + (jlong)(ps_size_policy()->live_at_last_full_gc())); + } inline void update_scavenge_skipped(int cause) { _scavenge_skipped->set_value(cause); diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp index fcf6eb6ed90..88774e525ed 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2001-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2001-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 @@ -46,6 +46,12 @@ void PSMarkSweep::initialize() { // // Note that this method should only be called from the vm_thread while // at a safepoint! +// +// Note that the all_soft_refs_clear flag in the collector policy +// may be true because this method can be called without intervening +// activity. For example when the heap space is tight and full measure +// are being taken to free space. + void PSMarkSweep::invoke(bool maximum_heap_compaction) { assert(SafepointSynchronize::is_at_safepoint(), "should be at safepoint"); assert(Thread::current() == (Thread*)VMThread::vm_thread(), "should be in vm thread"); @@ -54,24 +60,18 @@ void PSMarkSweep::invoke(bool maximum_heap_compaction) { ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap(); GCCause::Cause gc_cause = heap->gc_cause(); PSAdaptiveSizePolicy* policy = heap->size_policy(); + IsGCActiveMark mark; - // Before each allocation/collection attempt, find out from the - // policy object if GCs are, on the whole, taking too long. If so, - // bail out without attempting a collection. The exceptions are - // for explicitly requested GC's. - if (!policy->gc_time_limit_exceeded() || - GCCause::is_user_requested_gc(gc_cause) || - GCCause::is_serviceability_requested_gc(gc_cause)) { - IsGCActiveMark mark; - - if (ScavengeBeforeFullGC) { - PSScavenge::invoke_no_policy(); - } - - int count = (maximum_heap_compaction)?1:MarkSweepAlwaysCompactCount; - IntFlagSetting flag_setting(MarkSweepAlwaysCompactCount, count); - PSMarkSweep::invoke_no_policy(maximum_heap_compaction); + if (ScavengeBeforeFullGC) { + PSScavenge::invoke_no_policy(); } + + const bool clear_all_soft_refs = + heap->collector_policy()->should_clear_all_soft_refs(); + + int count = (maximum_heap_compaction)?1:MarkSweepAlwaysCompactCount; + IntFlagSetting flag_setting(MarkSweepAlwaysCompactCount, count); + PSMarkSweep::invoke_no_policy(clear_all_soft_refs || maximum_heap_compaction); } // This method contains no policy. You should probably @@ -89,6 +89,10 @@ void PSMarkSweep::invoke_no_policy(bool clear_all_softrefs) { assert(heap->kind() == CollectedHeap::ParallelScavengeHeap, "Sanity"); PSAdaptiveSizePolicy* size_policy = heap->size_policy(); + // The scope of casr should end after code that can change + // CollectorPolicy::_should_clear_all_soft_refs. + ClearedAllSoftRefs casr(clear_all_softrefs, heap->collector_policy()); + PSYoungGen* young_gen = heap->young_gen(); PSOldGen* old_gen = heap->old_gen(); PSPermGen* perm_gen = heap->perm_gen(); @@ -275,7 +279,8 @@ void PSMarkSweep::invoke_no_policy(bool clear_all_softrefs) { old_gen->max_gen_size(), max_eden_size, true /* full gc*/, - gc_cause); + gc_cause, + heap->collector_policy()); heap->resize_old_gen(size_policy->calculated_old_free_size_in_bytes()); @@ -326,19 +331,6 @@ void PSMarkSweep::invoke_no_policy(bool clear_all_softrefs) { // Track memory usage and detect low memory MemoryService::track_memory_usage(); heap->update_counters(); - - if (PrintGCDetails) { - if (size_policy->print_gc_time_limit_would_be_exceeded()) { - if (size_policy->gc_time_limit_exceeded()) { - gclog_or_tty->print_cr(" GC time is exceeding GCTimeLimit " - "of %d%%", GCTimeLimit); - } else { - gclog_or_tty->print_cr(" GC time would exceed GCTimeLimit " - "of %d%%", GCTimeLimit); - } - } - size_policy->set_print_gc_time_limit_would_be_exceeded(false); - } } if (VerifyAfterGC && heap->total_collections() >= VerifyGCStartAt) { diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp index e7a973deb23..d3eba4d3bb4 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2005-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 @@ -1923,31 +1923,32 @@ void PSParallelCompact::summary_phase(ParCompactionManager* cm, // // Note that this method should only be called from the vm_thread while at a // safepoint. +// +// Note that the all_soft_refs_clear flag in the collector policy +// may be true because this method can be called without intervening +// activity. For example when the heap space is tight and full measure +// are being taken to free space. void PSParallelCompact::invoke(bool maximum_heap_compaction) { assert(SafepointSynchronize::is_at_safepoint(), "should be at safepoint"); assert(Thread::current() == (Thread*)VMThread::vm_thread(), "should be in vm thread"); + ParallelScavengeHeap* heap = gc_heap(); GCCause::Cause gc_cause = heap->gc_cause(); assert(!heap->is_gc_active(), "not reentrant"); PSAdaptiveSizePolicy* policy = heap->size_policy(); + IsGCActiveMark mark; - // Before each allocation/collection attempt, find out from the - // policy object if GCs are, on the whole, taking too long. If so, - // bail out without attempting a collection. The exceptions are - // for explicitly requested GC's. - if (!policy->gc_time_limit_exceeded() || - GCCause::is_user_requested_gc(gc_cause) || - GCCause::is_serviceability_requested_gc(gc_cause)) { - IsGCActiveMark mark; - - if (ScavengeBeforeFullGC) { - PSScavenge::invoke_no_policy(); - } - - PSParallelCompact::invoke_no_policy(maximum_heap_compaction); + if (ScavengeBeforeFullGC) { + PSScavenge::invoke_no_policy(); } + + const bool clear_all_soft_refs = + heap->collector_policy()->should_clear_all_soft_refs(); + + PSParallelCompact::invoke_no_policy(clear_all_soft_refs || + maximum_heap_compaction); } bool ParallelCompactData::region_contains(size_t region_index, HeapWord* addr) { @@ -1976,6 +1977,11 @@ void PSParallelCompact::invoke_no_policy(bool maximum_heap_compaction) { PSPermGen* perm_gen = heap->perm_gen(); PSAdaptiveSizePolicy* size_policy = heap->size_policy(); + // The scope of casr should end after code that can change + // CollectorPolicy::_should_clear_all_soft_refs. + ClearedAllSoftRefs casr(maximum_heap_compaction, + heap->collector_policy()); + if (ZapUnusedHeapArea) { // Save information needed to minimize mangling heap->record_gen_tops_before_GC(); @@ -2109,7 +2115,8 @@ void PSParallelCompact::invoke_no_policy(bool maximum_heap_compaction) { old_gen->max_gen_size(), max_eden_size, true /* full gc*/, - gc_cause); + gc_cause, + heap->collector_policy()); heap->resize_old_gen( size_policy->calculated_old_free_size_in_bytes()); @@ -2157,19 +2164,6 @@ void PSParallelCompact::invoke_no_policy(bool maximum_heap_compaction) { // Track memory usage and detect low memory MemoryService::track_memory_usage(); heap->update_counters(); - - if (PrintGCDetails) { - if (size_policy->print_gc_time_limit_would_be_exceeded()) { - if (size_policy->gc_time_limit_exceeded()) { - gclog_or_tty->print_cr(" GC time is exceeding GCTimeLimit " - "of %d%%", GCTimeLimit); - } else { - gclog_or_tty->print_cr(" GC time would exceed GCTimeLimit " - "of %d%%", GCTimeLimit); - } - } - size_policy->set_print_gc_time_limit_would_be_exceeded(false); - } } if (VerifyAfterGC && heap->total_collections() >= VerifyGCStartAt) { diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp index e25ef657358..5240da0a029 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2002-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2002-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 @@ -187,8 +187,7 @@ void PSRefProcTaskExecutor::execute(EnqueueTask& task) // // Note that this method should only be called from the vm_thread while // at a safepoint! -void PSScavenge::invoke() -{ +void PSScavenge::invoke() { assert(SafepointSynchronize::is_at_safepoint(), "should be at safepoint"); assert(Thread::current() == (Thread*)VMThread::vm_thread(), "should be in vm thread"); assert(!Universe::heap()->is_gc_active(), "not reentrant"); @@ -197,29 +196,25 @@ void PSScavenge::invoke() assert(heap->kind() == CollectedHeap::ParallelScavengeHeap, "Sanity"); PSAdaptiveSizePolicy* policy = heap->size_policy(); + IsGCActiveMark mark; - // Before each allocation/collection attempt, find out from the - // policy object if GCs are, on the whole, taking too long. If so, - // bail out without attempting a collection. - if (!policy->gc_time_limit_exceeded()) { - IsGCActiveMark mark; + bool scavenge_was_done = PSScavenge::invoke_no_policy(); - bool scavenge_was_done = PSScavenge::invoke_no_policy(); - - PSGCAdaptivePolicyCounters* counters = heap->gc_policy_counters(); + PSGCAdaptivePolicyCounters* counters = heap->gc_policy_counters(); + if (UsePerfData) + counters->update_full_follows_scavenge(0); + if (!scavenge_was_done || + policy->should_full_GC(heap->old_gen()->free_in_bytes())) { if (UsePerfData) - counters->update_full_follows_scavenge(0); - if (!scavenge_was_done || - policy->should_full_GC(heap->old_gen()->free_in_bytes())) { - if (UsePerfData) - counters->update_full_follows_scavenge(full_follows_scavenge); + counters->update_full_follows_scavenge(full_follows_scavenge); + GCCauseSetter gccs(heap, GCCause::_adaptive_size_policy); + CollectorPolicy* cp = heap->collector_policy(); + const bool clear_all_softrefs = cp->should_clear_all_soft_refs(); - GCCauseSetter gccs(heap, GCCause::_adaptive_size_policy); - if (UseParallelOldGC) { - PSParallelCompact::invoke_no_policy(false); - } else { - PSMarkSweep::invoke_no_policy(false); - } + if (UseParallelOldGC) { + PSParallelCompact::invoke_no_policy(clear_all_softrefs); + } else { + PSMarkSweep::invoke_no_policy(clear_all_softrefs); } } } @@ -447,6 +442,9 @@ bool PSScavenge::invoke_no_policy() { size_t promoted = old_gen->used_in_bytes() - old_gen_used_before; size_policy->update_averages(_survivor_overflow, survived, promoted); + // A successful scavenge should restart the GC time limit count which is + // for full GC's. + size_policy->reset_gc_overhead_limit_count(); if (UseAdaptiveSizePolicy) { // Calculate the new survivor size and tenuring threshold @@ -523,7 +521,8 @@ bool PSScavenge::invoke_no_policy() { old_gen->max_gen_size(), max_eden_size, false /* full gc*/, - gc_cause); + gc_cause, + heap->collector_policy()); } // Resize the young generation at every collection diff --git a/hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.cpp b/hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.cpp index acaa33818a4..f88d5bb02b4 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2004-2006 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 @@ -44,13 +44,15 @@ AdaptiveSizePolicy::AdaptiveSizePolicy(size_t init_eden_size, _survivor_size(init_survivor_size), _gc_pause_goal_sec(gc_pause_goal_sec), _throughput_goal(1.0 - double(1.0 / (1.0 + (double) gc_cost_ratio))), - _gc_time_limit_exceeded(false), - _print_gc_time_limit_would_be_exceeded(false), - _gc_time_limit_count(0), + _gc_overhead_limit_exceeded(false), + _print_gc_overhead_limit_would_be_exceeded(false), + _gc_overhead_limit_count(0), _latest_minor_mutator_interval_seconds(0), _threshold_tolerance_percent(1.0 + ThresholdTolerance/100.0), _young_gen_change_for_minor_throughput(0), _old_gen_change_for_major_throughput(0) { + assert(AdaptiveSizePolicyGCTimeLimitThreshold > 0, + "No opportunity to clear SoftReferences before GC overhead limit"); _avg_minor_pause = new AdaptivePaddedAverage(AdaptiveTimeWeight, PausePadding); _avg_minor_interval = new AdaptiveWeightedAverage(AdaptiveTimeWeight); @@ -278,6 +280,147 @@ void AdaptiveSizePolicy::clear_generation_free_space_flags() { set_decide_at_full_gc(0); } +void AdaptiveSizePolicy::check_gc_overhead_limit( + size_t young_live, + size_t eden_live, + size_t max_old_gen_size, + size_t max_eden_size, + bool is_full_gc, + GCCause::Cause gc_cause, + CollectorPolicy* collector_policy) { + + // Ignore explicit GC's. Exiting here does not set the flag and + // does not reset the count. Updating of the averages for system + // GC's is still controlled by UseAdaptiveSizePolicyWithSystemGC. + if (GCCause::is_user_requested_gc(gc_cause) || + GCCause::is_serviceability_requested_gc(gc_cause)) { + return; + } + // eden_limit is the upper limit on the size of eden based on + // the maximum size of the young generation and the sizes + // of the survivor space. + // The question being asked is whether the gc costs are high + // and the space being recovered by a collection is low. + // free_in_young_gen is the free space in the young generation + // after a collection and promo_live is the free space in the old + // generation after a collection. + // + // Use the minimum of the current value of the live in the + // young gen or the average of the live in the young gen. + // If the current value drops quickly, that should be taken + // into account (i.e., don't trigger if the amount of free + // space has suddenly jumped up). If the current is much + // higher than the average, use the average since it represents + // the longer term behavor. + const size_t live_in_eden = + MIN2(eden_live, (size_t) avg_eden_live()->average()); + const size_t free_in_eden = max_eden_size > live_in_eden ? + max_eden_size - live_in_eden : 0; + const size_t free_in_old_gen = (size_t)(max_old_gen_size - avg_old_live()->average()); + const size_t total_free_limit = free_in_old_gen + free_in_eden; + const size_t total_mem = max_old_gen_size + max_eden_size; + const double mem_free_limit = total_mem * (GCHeapFreeLimit/100.0); + const double mem_free_old_limit = max_old_gen_size * (GCHeapFreeLimit/100.0); + const double mem_free_eden_limit = max_eden_size * (GCHeapFreeLimit/100.0); + const double gc_cost_limit = GCTimeLimit/100.0; + size_t promo_limit = (size_t)(max_old_gen_size - avg_old_live()->average()); + // But don't force a promo size below the current promo size. Otherwise, + // the promo size will shrink for no good reason. + promo_limit = MAX2(promo_limit, _promo_size); + + + if (PrintAdaptiveSizePolicy && (Verbose || + (free_in_old_gen < (size_t) mem_free_old_limit && + free_in_eden < (size_t) mem_free_eden_limit))) { + gclog_or_tty->print_cr( + "PSAdaptiveSizePolicy::compute_generation_free_space limits:" + " promo_limit: " SIZE_FORMAT + " max_eden_size: " SIZE_FORMAT + " total_free_limit: " SIZE_FORMAT + " max_old_gen_size: " SIZE_FORMAT + " max_eden_size: " SIZE_FORMAT + " mem_free_limit: " SIZE_FORMAT, + promo_limit, max_eden_size, total_free_limit, + max_old_gen_size, max_eden_size, + (size_t) mem_free_limit); + } + + bool print_gc_overhead_limit_would_be_exceeded = false; + if (is_full_gc) { + if (gc_cost() > gc_cost_limit && + free_in_old_gen < (size_t) mem_free_old_limit && + free_in_eden < (size_t) mem_free_eden_limit) { + // Collections, on average, are taking too much time, and + // gc_cost() > gc_cost_limit + // we have too little space available after a full gc. + // total_free_limit < mem_free_limit + // where + // total_free_limit is the free space available in + // both generations + // total_mem is the total space available for allocation + // in both generations (survivor spaces are not included + // just as they are not included in eden_limit). + // mem_free_limit is a fraction of total_mem judged to be an + // acceptable amount that is still unused. + // The heap can ask for the value of this variable when deciding + // whether to thrown an OutOfMemory error. + // Note that the gc time limit test only works for the collections + // of the young gen + tenured gen and not for collections of the + // permanent gen. That is because the calculation of the space + // freed by the collection is the free space in the young gen + + // tenured gen. + // At this point the GC overhead limit is being exceeded. + inc_gc_overhead_limit_count(); + if (UseGCOverheadLimit) { + if (gc_overhead_limit_count() >= + AdaptiveSizePolicyGCTimeLimitThreshold){ + // All conditions have been met for throwing an out-of-memory + set_gc_overhead_limit_exceeded(true); + // Avoid consecutive OOM due to the gc time limit by resetting + // the counter. + reset_gc_overhead_limit_count(); + } else { + // The required consecutive collections which exceed the + // GC time limit may or may not have been reached. We + // are approaching that condition and so as not to + // throw an out-of-memory before all SoftRef's have been + // cleared, set _should_clear_all_soft_refs in CollectorPolicy. + // The clearing will be done on the next GC. + bool near_limit = gc_overhead_limit_near(); + if (near_limit) { + collector_policy->set_should_clear_all_soft_refs(true); + if (PrintGCDetails && Verbose) { + gclog_or_tty->print_cr(" Nearing GC overhead limit, " + "will be clearing all SoftReference"); + } + } + } + } + // Set this even when the overhead limit will not + // cause an out-of-memory. Diagnostic message indicating + // that the overhead limit is being exceeded is sometimes + // printed. + print_gc_overhead_limit_would_be_exceeded = true; + + } else { + // Did not exceed overhead limits + reset_gc_overhead_limit_count(); + } + } + + if (UseGCOverheadLimit && PrintGCDetails && Verbose) { + if (gc_overhead_limit_exceeded()) { + gclog_or_tty->print_cr(" GC is exceeding overhead limit " + "of %d%%", GCTimeLimit); + reset_gc_overhead_limit_count(); + } else if (print_gc_overhead_limit_would_be_exceeded) { + assert(gc_overhead_limit_count() > 0, "Should not be printing"); + gclog_or_tty->print_cr(" GC would exceed overhead limit " + "of %d%% %d consecutive time(s)", + GCTimeLimit, gc_overhead_limit_count()); + } + } +} // Printing bool AdaptiveSizePolicy::print_adaptive_size_policy_on(outputStream* st) const { diff --git a/hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.hpp b/hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.hpp index d07dcf1a388..933d95c2437 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.hpp @@ -1,5 +1,5 @@ /* - * Copyright 2004-2006 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 @@ -27,6 +27,7 @@ // Forward decls class elapsedTimer; +class CollectorPolicy; class AdaptiveSizePolicy : public CHeapObj { friend class GCAdaptivePolicyCounters; @@ -75,13 +76,16 @@ class AdaptiveSizePolicy : public CHeapObj { // This is a hint for the heap: we've detected that gc times // are taking longer than GCTimeLimit allows. - bool _gc_time_limit_exceeded; - // Use for diagnostics only. If UseGCTimeLimit is false, + bool _gc_overhead_limit_exceeded; + // Use for diagnostics only. If UseGCOverheadLimit is false, // this variable is still set. - bool _print_gc_time_limit_would_be_exceeded; + bool _print_gc_overhead_limit_would_be_exceeded; // Count of consecutive GC that have exceeded the // GC time limit criterion. - uint _gc_time_limit_count; + uint _gc_overhead_limit_count; + // This flag signals that GCTimeLimit is being exceeded + // but may not have done so for the required number of consequetive + // collections. // Minor collection timers used to determine both // pause and interval times for collections. @@ -406,22 +410,21 @@ class AdaptiveSizePolicy : public CHeapObj { // Most heaps will choose to throw an OutOfMemoryError when // this occurs but it is up to the heap to request this information // of the policy - bool gc_time_limit_exceeded() { - return _gc_time_limit_exceeded; + bool gc_overhead_limit_exceeded() { + return _gc_overhead_limit_exceeded; } - void set_gc_time_limit_exceeded(bool v) { - _gc_time_limit_exceeded = v; - } - bool print_gc_time_limit_would_be_exceeded() { - return _print_gc_time_limit_would_be_exceeded; - } - void set_print_gc_time_limit_would_be_exceeded(bool v) { - _print_gc_time_limit_would_be_exceeded = v; + void set_gc_overhead_limit_exceeded(bool v) { + _gc_overhead_limit_exceeded = v; } - uint gc_time_limit_count() { return _gc_time_limit_count; } - void reset_gc_time_limit_count() { _gc_time_limit_count = 0; } - void inc_gc_time_limit_count() { _gc_time_limit_count++; } + // Tests conditions indicate the GC overhead limit is being approached. + bool gc_overhead_limit_near() { + return gc_overhead_limit_count() >= + (AdaptiveSizePolicyGCTimeLimitThreshold - 1); + } + uint gc_overhead_limit_count() { return _gc_overhead_limit_count; } + void reset_gc_overhead_limit_count() { _gc_overhead_limit_count = 0; } + void inc_gc_overhead_limit_count() { _gc_overhead_limit_count++; } // accessors for flags recording the decisions to resize the // generations to meet the pause goal. @@ -436,6 +439,16 @@ class AdaptiveSizePolicy : public CHeapObj { int decide_at_full_gc() { return _decide_at_full_gc; } void set_decide_at_full_gc(int v) { _decide_at_full_gc = v; } + // Check the conditions for an out-of-memory due to excessive GC time. + // Set _gc_overhead_limit_exceeded if all the conditions have been met. + void check_gc_overhead_limit(size_t young_live, + size_t eden_live, + size_t max_old_gen_size, + size_t max_eden_size, + bool is_full_gc, + GCCause::Cause gc_cause, + CollectorPolicy* collector_policy); + // Printing support virtual bool print_adaptive_size_policy_on(outputStream* st) const; bool print_adaptive_size_policy_on(outputStream* st, int diff --git a/hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.hpp b/hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.hpp index 6ff704fdf18..4aa5c633ae7 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.hpp @@ -1,5 +1,5 @@ /* - * Copyright 2005-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2005-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 @@ -89,8 +89,19 @@ class VM_GC_Operation: public VM_Operation { if (full) { _full_gc_count_before = full_gc_count_before; } + // In ParallelScavengeHeap::mem_allocate() collections can be + // executed within a loop and _all_soft_refs_clear can be set + // true after they have been cleared by a collection and another + // collection started so that _all_soft_refs_clear can be true + // when this collection is started. Don't assert that + // _all_soft_refs_clear have to be false here even though + // mutators have run. Soft refs will be cleared again in this + // collection. + } + ~VM_GC_Operation() { + CollectedHeap* ch = Universe::heap(); + ch->collector_policy()->set_all_soft_refs_clear(false); } - ~VM_GC_Operation() {} // Acquire the reference synchronization lock virtual bool doit_prologue(); diff --git a/hotspot/src/share/vm/gc_interface/collectedHeap.hpp b/hotspot/src/share/vm/gc_interface/collectedHeap.hpp index 2bc210a4717..5bebe7e93a7 100644 --- a/hotspot/src/share/vm/gc_interface/collectedHeap.hpp +++ b/hotspot/src/share/vm/gc_interface/collectedHeap.hpp @@ -1,5 +1,5 @@ /* - * Copyright 2001-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2001-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 @@ -31,6 +31,7 @@ class BarrierSet; class ThreadClosure; class AdaptiveSizePolicy; class Thread; +class CollectorPolicy; // // CollectedHeap @@ -506,6 +507,9 @@ class CollectedHeap : public CHeapObj { // Return the AdaptiveSizePolicy for the heap. virtual AdaptiveSizePolicy* size_policy() = 0; + // Return the CollectorPolicy for the heap + virtual CollectorPolicy* collector_policy() const = 0; + // Iterate over all the ref-containing fields of all objects, calling // "cl.do_oop" on each. This includes objects in permanent memory. virtual void oop_iterate(OopClosure* cl) = 0; diff --git a/hotspot/src/share/vm/memory/collectorPolicy.cpp b/hotspot/src/share/vm/memory/collectorPolicy.cpp index ebb886fbad8..b903ab29843 100644 --- a/hotspot/src/share/vm/memory/collectorPolicy.cpp +++ b/hotspot/src/share/vm/memory/collectorPolicy.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2001-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2001-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,6 +112,11 @@ void CollectorPolicy::initialize_perm_generation(PermGen::Name pgnm) { } } +bool CollectorPolicy::use_should_clear_all_soft_refs(bool v) { + bool result = _should_clear_all_soft_refs; + set_should_clear_all_soft_refs(false); + return result; +} GenRemSet* CollectorPolicy::create_rem_set(MemRegion whole_heap, int max_covered_regions) { @@ -126,6 +131,17 @@ GenRemSet* CollectorPolicy::create_rem_set(MemRegion whole_heap, } } +void CollectorPolicy::cleared_all_soft_refs() { + // If near gc overhear limit, continue to clear SoftRefs. SoftRefs may + // have been cleared in the last collection but if the gc overhear + // limit continues to be near, SoftRefs should still be cleared. + if (size_policy() != NULL) { + _should_clear_all_soft_refs = size_policy()->gc_overhead_limit_near(); + } + _all_soft_refs_clear = true; +} + + // GenCollectorPolicy methods. size_t GenCollectorPolicy::scale_by_NewRatio_aligned(size_t base_size) { @@ -489,6 +505,12 @@ HeapWord* GenCollectorPolicy::mem_allocate_work(size_t size, debug_only(gch->check_for_valid_allocation_state()); assert(gch->no_gc_in_progress(), "Allocation during gc not allowed"); + + // In general gc_overhead_limit_was_exceeded should be false so + // set it so here and reset it to true only if the gc time + // limit is being exceeded as checked below. + *gc_overhead_limit_was_exceeded = false; + HeapWord* result = NULL; // Loop until the allocation is satisified, @@ -524,12 +546,6 @@ HeapWord* GenCollectorPolicy::mem_allocate_work(size_t size, return result; } - // There are NULL's returned for different circumstances below. - // In general gc_overhead_limit_was_exceeded should be false so - // set it so here and reset it to true only if the gc time - // limit is being exceeded as checked below. - *gc_overhead_limit_was_exceeded = false; - if (GC_locker::is_active_and_needs_gc()) { if (is_tlab) { return NULL; // Caller will retry allocating individual object @@ -568,18 +584,6 @@ HeapWord* GenCollectorPolicy::mem_allocate_work(size_t size, gc_count_before = Universe::heap()->total_collections(); } - // Allocation has failed and a collection is about - // to be done. If the gc time limit was exceeded the - // last time a collection was done, return NULL so - // that an out-of-memory will be thrown. Clear - // gc_time_limit_exceeded so that subsequent attempts - // at a collection will be made. - if (size_policy()->gc_time_limit_exceeded()) { - *gc_overhead_limit_was_exceeded = true; - size_policy()->set_gc_time_limit_exceeded(false); - return NULL; - } - VM_GenCollectForAllocation op(size, is_tlab, gc_count_before); @@ -590,6 +594,24 @@ HeapWord* GenCollectorPolicy::mem_allocate_work(size_t size, assert(result == NULL, "must be NULL if gc_locked() is true"); continue; // retry and/or stall as necessary } + + // Allocation has failed and a collection + // has been done. If the gc time limit was exceeded the + // this time, return NULL so that an out-of-memory + // will be thrown. Clear gc_overhead_limit_exceeded + // so that the overhead exceeded does not persist. + + const bool limit_exceeded = size_policy()->gc_overhead_limit_exceeded(); + const bool softrefs_clear = all_soft_refs_clear(); + assert(!limit_exceeded || softrefs_clear, "Should have been cleared"); + if (limit_exceeded && softrefs_clear) { + *gc_overhead_limit_was_exceeded = true; + size_policy()->set_gc_overhead_limit_exceeded(false); + if (op.result() != NULL) { + CollectedHeap::fill_with_object(op.result(), size); + } + return NULL; + } assert(result == NULL || gch->is_in_reserved(result), "result not in heap"); return result; @@ -688,6 +710,9 @@ HeapWord* GenCollectorPolicy::satisfy_failed_allocation(size_t size, return result; } + assert(!should_clear_all_soft_refs(), + "Flag should have been handled and cleared prior to this point"); + // What else? We might try synchronous finalization later. If the total // space available is large enough for the allocation, then a more // complete compaction phase than we've tried so far might be diff --git a/hotspot/src/share/vm/memory/collectorPolicy.hpp b/hotspot/src/share/vm/memory/collectorPolicy.hpp index 2bc7d45524d..96d32840179 100644 --- a/hotspot/src/share/vm/memory/collectorPolicy.hpp +++ b/hotspot/src/share/vm/memory/collectorPolicy.hpp @@ -1,5 +1,5 @@ /* - * Copyright 2001-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2001-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,12 +69,28 @@ class CollectorPolicy : public CHeapObj { size_t _min_alignment; size_t _max_alignment; + // The sizing of the heap are controlled by a sizing policy. + AdaptiveSizePolicy* _size_policy; + + // Set to true when policy wants soft refs cleared. + // Reset to false by gc after it clears all soft refs. + bool _should_clear_all_soft_refs; + // Set to true by the GC if the just-completed gc cleared all + // softrefs. This is set to true whenever a gc clears all softrefs, and + // set to false each time gc returns to the mutator. For example, in the + // ParallelScavengeHeap case the latter would be done toward the end of + // mem_allocate() where it returns op.result() + bool _all_soft_refs_clear; + CollectorPolicy() : _min_alignment(1), _max_alignment(1), _initial_heap_byte_size(0), _max_heap_byte_size(0), - _min_heap_byte_size(0) + _min_heap_byte_size(0), + _size_policy(NULL), + _should_clear_all_soft_refs(false), + _all_soft_refs_clear(false) {} public: @@ -98,6 +114,19 @@ class CollectorPolicy : public CHeapObj { G1CollectorPolicyKind }; + AdaptiveSizePolicy* size_policy() { return _size_policy; } + bool should_clear_all_soft_refs() { return _should_clear_all_soft_refs; } + void set_should_clear_all_soft_refs(bool v) { _should_clear_all_soft_refs = v; } + // Returns the current value of _should_clear_all_soft_refs. + // _should_clear_all_soft_refs is set to false as a side effect. + bool use_should_clear_all_soft_refs(bool v); + bool all_soft_refs_clear() { return _all_soft_refs_clear; } + void set_all_soft_refs_clear(bool v) { _all_soft_refs_clear = v; } + + // Called by the GC after Soft Refs have been cleared to indicate + // that the request in _should_clear_all_soft_refs has been fulfilled. + void cleared_all_soft_refs(); + // Identification methods. virtual GenCollectorPolicy* as_generation_policy() { return NULL; } virtual TwoGenerationCollectorPolicy* as_two_generation_policy() { return NULL; } @@ -165,6 +194,22 @@ class CollectorPolicy : public CHeapObj { }; +class ClearedAllSoftRefs : public StackObj { + bool _clear_all_soft_refs; + CollectorPolicy* _collector_policy; + public: + ClearedAllSoftRefs(bool clear_all_soft_refs, + CollectorPolicy* collector_policy) : + _clear_all_soft_refs(clear_all_soft_refs), + _collector_policy(collector_policy) {} + + ~ClearedAllSoftRefs() { + if (_clear_all_soft_refs) { + _collector_policy->cleared_all_soft_refs(); + } + } +}; + class GenCollectorPolicy : public CollectorPolicy { protected: size_t _min_gen0_size; @@ -173,10 +218,6 @@ class GenCollectorPolicy : public CollectorPolicy { GenerationSpec **_generations; - // The sizing of the different generations in the heap are controlled - // by a sizing policy. - AdaptiveSizePolicy* _size_policy; - // Return true if an allocation should be attempted in the older // generation if it fails in the younger generation. Return // false, otherwise. @@ -236,14 +277,11 @@ class GenCollectorPolicy : public CollectorPolicy { virtual size_t large_typearray_limit(); // Adaptive size policy - AdaptiveSizePolicy* size_policy() { return _size_policy; } virtual void initialize_size_policy(size_t init_eden_size, size_t init_promo_size, size_t init_survivor_size); - }; - // All of hotspot's current collectors are subtypes of this // class. Currently, these collectors all use the same gen[0], // but have different gen[1] types. If we add another subtype diff --git a/hotspot/src/share/vm/memory/defNewGeneration.cpp b/hotspot/src/share/vm/memory/defNewGeneration.cpp index 875cf00817b..be3b75352cf 100644 --- a/hotspot/src/share/vm/memory/defNewGeneration.cpp +++ b/hotspot/src/share/vm/memory/defNewGeneration.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2001-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2001-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 @@ -594,6 +594,10 @@ void DefNewGeneration::collect(bool full, _tenuring_threshold = age_table()->compute_tenuring_threshold(to()->capacity()/HeapWordSize); + // A successful scavenge should restart the GC time limit count which is + // for full GC's. + AdaptiveSizePolicy* size_policy = gch->gen_policy()->size_policy(); + size_policy->reset_gc_overhead_limit_count(); if (PrintGC && !PrintGCDetails) { gch->print_heap_change(gch_prev_used); } diff --git a/hotspot/src/share/vm/memory/genCollectedHeap.cpp b/hotspot/src/share/vm/memory/genCollectedHeap.cpp index f85fe142156..a0549f27c71 100644 --- a/hotspot/src/share/vm/memory/genCollectedHeap.cpp +++ b/hotspot/src/share/vm/memory/genCollectedHeap.cpp @@ -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 @@ -428,7 +428,8 @@ void GenCollectedHeap::do_collection(bool full, assert(my_thread->is_VM_thread() || my_thread->is_ConcurrentGC_thread(), "incorrect thread type capability"); - assert(Heap_lock->is_locked(), "the requesting thread should have the Heap_lock"); + assert(Heap_lock->is_locked(), + "the requesting thread should have the Heap_lock"); guarantee(!is_gc_active(), "collection is not reentrant"); assert(max_level < n_gens(), "sanity check"); @@ -436,6 +437,11 @@ void GenCollectedHeap::do_collection(bool full, return; // GC is disabled (e.g. JNI GetXXXCritical operation) } + const bool do_clear_all_soft_refs = clear_all_soft_refs || + collector_policy()->should_clear_all_soft_refs(); + + ClearedAllSoftRefs casr(do_clear_all_soft_refs, collector_policy()); + const size_t perm_prev_used = perm_gen()->used(); if (PrintHeapAtGC) { @@ -560,11 +566,11 @@ void GenCollectedHeap::do_collection(bool full, if (rp->discovery_is_atomic()) { rp->verify_no_references_recorded(); rp->enable_discovery(); - rp->setup_policy(clear_all_soft_refs); + rp->setup_policy(do_clear_all_soft_refs); } else { // collect() below will enable discovery as appropriate } - _gens[i]->collect(full, clear_all_soft_refs, size, is_tlab); + _gens[i]->collect(full, do_clear_all_soft_refs, size, is_tlab); if (!rp->enqueuing_is_done()) { rp->enqueue_discovered_references(); } else { diff --git a/hotspot/src/share/vm/memory/genMarkSweep.cpp b/hotspot/src/share/vm/memory/genMarkSweep.cpp index 290141c4ff7..88c2ca0e636 100644 --- a/hotspot/src/share/vm/memory/genMarkSweep.cpp +++ b/hotspot/src/share/vm/memory/genMarkSweep.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2001-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2001-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,13 @@ void GenMarkSweep::invoke_at_safepoint(int level, ReferenceProcessor* rp, bool clear_all_softrefs) { assert(SafepointSynchronize::is_at_safepoint(), "must be at a safepoint"); + GenCollectedHeap* gch = GenCollectedHeap::heap(); +#ifdef ASSERT + if (gch->collector_policy()->should_clear_all_soft_refs()) { + assert(clear_all_softrefs, "Policy should have been checked earlier"); + } +#endif + // hook up weak ref data so it can be used during Mark-Sweep assert(ref_processor() == NULL, "no stomping"); assert(rp != NULL, "should be non-NULL"); @@ -44,7 +51,6 @@ void GenMarkSweep::invoke_at_safepoint(int level, ReferenceProcessor* rp, // Increment the invocation count for the permanent generation, since it is // implicitly collected whenever we do a full mark sweep collection. - GenCollectedHeap* gch = GenCollectedHeap::heap(); gch->perm_gen()->stat_record()->invocations++; // Capture heap size before collection for printing. From 9b4fc8fc235e11a577c6ac7578ab6cfe5251014f Mon Sep 17 00:00:00 2001 From: Antonios Printezis Date: Tue, 30 Mar 2010 15:43:03 -0400 Subject: [PATCH 08/91] 6937142: G1: improvements to debugging output (S-M) Various fixes to the G1 debugging output. Reviewed-by: johnc, iveresov --- .../gc_implementation/g1/concurrentMark.cpp | 138 +++++++++--------- .../gc_implementation/g1/concurrentMark.hpp | 23 ++- .../gc_implementation/g1/g1CollectedHeap.cpp | 9 +- .../g1/g1CollectorPolicy.cpp | 9 +- .../vm/gc_implementation/g1/heapRegion.cpp | 42 ++++-- 5 files changed, 133 insertions(+), 88 deletions(-) diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp index fd7595d3525..d26f47c248f 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp @@ -767,7 +767,8 @@ void ConcurrentMark::checkpointRootsInitialPre() { _has_aborted = false; if (G1PrintReachableAtInitialMark) { - print_reachable(true, "before"); + print_reachable("at-cycle-start", + true /* use_prev_marking */, true /* all */); } // Initialise marking structures. This has to be done in a STW phase. @@ -1979,19 +1980,21 @@ void ConcurrentMark::checkpointRootsFinalWork() { #ifndef PRODUCT -class ReachablePrinterOopClosure: public OopClosure { +class PrintReachableOopClosure: public OopClosure { private: G1CollectedHeap* _g1h; CMBitMapRO* _bitmap; outputStream* _out; bool _use_prev_marking; + bool _all; public: - ReachablePrinterOopClosure(CMBitMapRO* bitmap, - outputStream* out, - bool use_prev_marking) : + PrintReachableOopClosure(CMBitMapRO* bitmap, + outputStream* out, + bool use_prev_marking, + bool all) : _g1h(G1CollectedHeap::heap()), - _bitmap(bitmap), _out(out), _use_prev_marking(use_prev_marking) { } + _bitmap(bitmap), _out(out), _use_prev_marking(use_prev_marking), _all(all) { } void do_oop(narrowOop* p) { do_oop_work(p); } void do_oop( oop* p) { do_oop_work(p); } @@ -2001,9 +2004,11 @@ public: const char* str = NULL; const char* str2 = ""; - if (!_g1h->is_in_g1_reserved(obj)) - str = "outside G1 reserved"; - else { + if (obj == NULL) { + str = ""; + } else if (!_g1h->is_in_g1_reserved(obj)) { + str = " O"; + } else { HeapRegion* hr = _g1h->heap_region_containing(obj); guarantee(hr != NULL, "invariant"); bool over_tams = false; @@ -2012,74 +2017,67 @@ public: } else { over_tams = hr->obj_allocated_since_next_marking(obj); } + bool marked = _bitmap->isMarked((HeapWord*) obj); if (over_tams) { - str = "over TAMS"; - if (_bitmap->isMarked((HeapWord*) obj)) { + str = " >"; + if (marked) { str2 = " AND MARKED"; } - } else if (_bitmap->isMarked((HeapWord*) obj)) { - str = "marked"; + } else if (marked) { + str = " M"; } else { - str = "#### NOT MARKED ####"; + str = " NOT"; } } - _out->print_cr(" "PTR_FORMAT" contains "PTR_FORMAT" %s%s", + _out->print_cr(" "PTR_FORMAT": "PTR_FORMAT"%s%s", p, (void*) obj, str, str2); } }; -class ReachablePrinterClosure: public BitMapClosure { +class PrintReachableObjectClosure : public ObjectClosure { private: CMBitMapRO* _bitmap; outputStream* _out; bool _use_prev_marking; + bool _all; + HeapRegion* _hr; public: - ReachablePrinterClosure(CMBitMapRO* bitmap, - outputStream* out, - bool use_prev_marking) : - _bitmap(bitmap), _out(out), _use_prev_marking(use_prev_marking) { } - - bool do_bit(size_t offset) { - HeapWord* addr = _bitmap->offsetToHeapWord(offset); - ReachablePrinterOopClosure oopCl(_bitmap, _out, _use_prev_marking); - - _out->print_cr(" obj "PTR_FORMAT", offset %10d (marked)", addr, offset); - oop(addr)->oop_iterate(&oopCl); - _out->print_cr(""); - - return true; - } -}; - -class ObjInRegionReachablePrinterClosure : public ObjectClosure { -private: - CMBitMapRO* _bitmap; - outputStream* _out; - bool _use_prev_marking; - -public: - ObjInRegionReachablePrinterClosure(CMBitMapRO* bitmap, - outputStream* out, - bool use_prev_marking) : - _bitmap(bitmap), _out(out), _use_prev_marking(use_prev_marking) { } + PrintReachableObjectClosure(CMBitMapRO* bitmap, + outputStream* out, + bool use_prev_marking, + bool all, + HeapRegion* hr) : + _bitmap(bitmap), _out(out), + _use_prev_marking(use_prev_marking), _all(all), _hr(hr) { } void do_object(oop o) { - ReachablePrinterOopClosure oopCl(_bitmap, _out, _use_prev_marking); + bool over_tams; + if (_use_prev_marking) { + over_tams = _hr->obj_allocated_since_prev_marking(o); + } else { + over_tams = _hr->obj_allocated_since_next_marking(o); + } + bool marked = _bitmap->isMarked((HeapWord*) o); + bool print_it = _all || over_tams || marked; - _out->print_cr(" obj "PTR_FORMAT" (over TAMS)", (void*) o); - o->oop_iterate(&oopCl); - _out->print_cr(""); + if (print_it) { + _out->print_cr(" "PTR_FORMAT"%s", + o, (over_tams) ? " >" : (marked) ? " M" : ""); + PrintReachableOopClosure oopCl(_bitmap, _out, _use_prev_marking, _all); + o->oop_iterate(&oopCl); + } } }; -class RegionReachablePrinterClosure : public HeapRegionClosure { +class PrintReachableRegionClosure : public HeapRegionClosure { private: CMBitMapRO* _bitmap; outputStream* _out; bool _use_prev_marking; + bool _all; public: bool doHeapRegion(HeapRegion* hr) { @@ -2094,22 +2092,35 @@ public: } _out->print_cr("** ["PTR_FORMAT", "PTR_FORMAT"] top: "PTR_FORMAT" " "TAMS: "PTR_FORMAT, b, e, t, p); - _out->print_cr(""); + _out->cr(); - ObjInRegionReachablePrinterClosure ocl(_bitmap, _out, _use_prev_marking); - hr->object_iterate_mem_careful(MemRegion(p, t), &ocl); + HeapWord* from = b; + HeapWord* to = t; + + if (to > from) { + _out->print_cr("Objects in ["PTR_FORMAT", "PTR_FORMAT"]", from, to); + _out->cr(); + PrintReachableObjectClosure ocl(_bitmap, _out, + _use_prev_marking, _all, hr); + hr->object_iterate_mem_careful(MemRegion(from, to), &ocl); + _out->cr(); + } return false; } - RegionReachablePrinterClosure(CMBitMapRO* bitmap, - outputStream* out, - bool use_prev_marking) : - _bitmap(bitmap), _out(out), _use_prev_marking(use_prev_marking) { } + PrintReachableRegionClosure(CMBitMapRO* bitmap, + outputStream* out, + bool use_prev_marking, + bool all) : + _bitmap(bitmap), _out(out), _use_prev_marking(use_prev_marking), _all(all) { } }; -void ConcurrentMark::print_reachable(bool use_prev_marking, const char* str) { - gclog_or_tty->print_cr("== Doing reachable object dump... "); +void ConcurrentMark::print_reachable(const char* str, + bool use_prev_marking, + bool all) { + gclog_or_tty->cr(); + gclog_or_tty->print_cr("== Doing heap dump... "); if (G1PrintReachableBaseFile == NULL) { gclog_or_tty->print_cr(" #### error: no base file defined"); @@ -2144,19 +2155,14 @@ void ConcurrentMark::print_reachable(bool use_prev_marking, const char* str) { out->print_cr("-- USING %s", (use_prev_marking) ? "PTAMS" : "NTAMS"); out->cr(); - RegionReachablePrinterClosure rcl(bitmap, out, use_prev_marking); - out->print_cr("--- ITERATING OVER REGIONS WITH TAMS < TOP"); + out->print_cr("--- ITERATING OVER REGIONS"); out->cr(); + PrintReachableRegionClosure rcl(bitmap, out, use_prev_marking, all); _g1h->heap_region_iterate(&rcl); out->cr(); - ReachablePrinterClosure cl(bitmap, out, use_prev_marking); - out->print_cr("--- ITERATING OVER MARKED OBJECTS ON THE BITMAP"); - out->cr(); - bitmap->iterate(&cl); - out->cr(); - gclog_or_tty->print_cr(" done"); + gclog_or_tty->flush(); } #endif // PRODUCT diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp index 3326b2693f1..28f8c2a7e8a 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp @@ -652,11 +652,24 @@ public: // we do nothing. void markAndGrayObjectIfNecessary(oop p); - // This iterates over the marking bitmap (either prev or next) and - // prints out all objects that are marked on the bitmap and indicates - // whether what they point to is also marked or not. It also iterates - // the objects over TAMS (either prev or next). - void print_reachable(bool use_prev_marking, const char* str); + // It iterates over the heap and for each object it comes across it + // will dump the contents of its reference fields, as well as + // liveness information for the object and its referents. The dump + // will be written to a file with the following name: + // G1PrintReachableBaseFile + "." + str. use_prev_marking decides + // whether the prev (use_prev_marking == true) or next + // (use_prev_marking == false) marking information will be used to + // determine the liveness of each object / referent. If all is true, + // all objects in the heap will be dumped, otherwise only the live + // ones. In the dump the following symbols / abbreviations are used: + // M : an explicitly live object (its bitmap bit is set) + // > : an implicitly live object (over tams) + // O : an object outside the G1 heap (typically: in the perm gen) + // NOT : a reference field whose referent is not live + // AND MARKED : indicates that an object is both explicitly and + // implicitly live (it should be one or the other, not both) + void print_reachable(const char* str, + bool use_prev_marking, bool all) PRODUCT_RETURN; // Clear the next marking bitmap (will be called concurrently). void clearNextBitmap(); diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp index b46616fcd06..1b56eae5245 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp @@ -2397,8 +2397,8 @@ void G1CollectedHeap::verify(bool allow_dirty, print_on(gclog_or_tty, true /* extended */); gclog_or_tty->print_cr(""); if (VerifyDuringGC && G1VerifyDuringGCPrintReachable) { - concurrent_mark()->print_reachable(use_prev_marking, - "failed-verification"); + concurrent_mark()->print_reachable("at-verification-failure", + use_prev_marking, false /* all */); } gclog_or_tty->flush(); } @@ -3118,6 +3118,11 @@ void G1CollectedHeap::get_gc_alloc_regions() { } else { // the region was retained from the last collection ++_gc_alloc_region_counts[ap]; + if (G1PrintHeapRegions) { + gclog_or_tty->print_cr("new alloc region %d:["PTR_FORMAT", "PTR_FORMAT"], " + "top "PTR_FORMAT, + alloc_region->hrs_index(), alloc_region->bottom(), alloc_region->end(), alloc_region->top()); + } } if (alloc_region != NULL) { diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp index a6429a73808..19e22d78b73 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp @@ -2942,10 +2942,11 @@ record_concurrent_mark_cleanup_end(size_t freed_bytes, void G1CollectorPolicy:: add_to_collection_set(HeapRegion* hr) { if (G1PrintHeapRegions) { - gclog_or_tty->print_cr("added region to cset %d:["PTR_FORMAT", "PTR_FORMAT"], " - "top "PTR_FORMAT", young %s", - hr->hrs_index(), hr->bottom(), hr->end(), - hr->top(), (hr->is_young()) ? "YES" : "NO"); + gclog_or_tty->print_cr("added region to cset " + "%d:["PTR_FORMAT", "PTR_FORMAT"], " + "top "PTR_FORMAT", %s", + hr->hrs_index(), hr->bottom(), hr->end(), + hr->top(), hr->is_young() ? "YOUNG" : "NOT_YOUNG"); } if (_g1->mark_in_progress()) diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp b/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp index 8afaee40a85..2fa9f702aa9 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp @@ -75,6 +75,16 @@ public: virtual void do_oop(narrowOop* p) { do_oop_work(p); } virtual void do_oop( oop* p) { do_oop_work(p); } + void print_object(outputStream* out, oop obj) { +#ifdef PRODUCT + klassOop k = obj->klass(); + const char* class_name = instanceKlass::cast(k)->external_name(); + out->print_cr("class name %s", class_name); +#else // PRODUCT + obj->print_on(out); +#endif // PRODUCT + } + template void do_oop_work(T* p) { assert(_containing_obj != NULL, "Precondition"); assert(!_g1h->is_obj_dead_cond(_containing_obj, _use_prev_marking), @@ -90,21 +100,29 @@ public: gclog_or_tty->print_cr("----------"); } if (!_g1h->is_in_closed_subset(obj)) { + HeapRegion* from = _g1h->heap_region_containing((HeapWord*)p); gclog_or_tty->print_cr("Field "PTR_FORMAT - " of live obj "PTR_FORMAT - " points to obj "PTR_FORMAT - " not in the heap.", - p, (void*) _containing_obj, (void*) obj); + " of live obj "PTR_FORMAT" in region " + "["PTR_FORMAT", "PTR_FORMAT")", + p, (void*) _containing_obj, + from->bottom(), from->end()); + print_object(gclog_or_tty, _containing_obj); + gclog_or_tty->print_cr("points to obj "PTR_FORMAT" not in the heap", + (void*) obj); } else { + HeapRegion* from = _g1h->heap_region_containing((HeapWord*)p); + HeapRegion* to = _g1h->heap_region_containing((HeapWord*)obj); gclog_or_tty->print_cr("Field "PTR_FORMAT - " of live obj "PTR_FORMAT - " points to dead obj "PTR_FORMAT".", - p, (void*) _containing_obj, (void*) obj); + " of live obj "PTR_FORMAT" in region " + "["PTR_FORMAT", "PTR_FORMAT")", + p, (void*) _containing_obj, + from->bottom(), from->end()); + print_object(gclog_or_tty, _containing_obj); + gclog_or_tty->print_cr("points to dead obj "PTR_FORMAT" in region " + "["PTR_FORMAT", "PTR_FORMAT")", + (void*) obj, to->bottom(), to->end()); + print_object(gclog_or_tty, obj); } - gclog_or_tty->print_cr("Live obj:"); - _containing_obj->print_on(gclog_or_tty); - gclog_or_tty->print_cr("Bad referent:"); - obj->print_on(gclog_or_tty); gclog_or_tty->print_cr("----------"); _failures = true; failed = true; @@ -723,6 +741,8 @@ void HeapRegion::print_on(outputStream* st) const { else st->print(" "); st->print(" %5d", _gc_time_stamp); + st->print(" PTAMS "PTR_FORMAT" NTAMS "PTR_FORMAT, + prev_top_at_mark_start(), next_top_at_mark_start()); G1OffsetTableContigSpace::print_on(st); } From 8dbf2b80207b93d4749ad51218ffc84f1a77380a Mon Sep 17 00:00:00 2001 From: Gary Benson Date: Wed, 31 Mar 2010 08:03:33 -0700 Subject: [PATCH 09/91] 6939731: JSR 292 Zero build fix after 6934494 The changes of 6934494 have broken the Zero build. Reviewed-by: twisti --- hotspot/src/cpu/zero/vm/methodHandles_zero.cpp | 10 ++++++++-- hotspot/src/cpu/zero/vm/stubRoutines_zero.hpp | 6 +++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/hotspot/src/cpu/zero/vm/methodHandles_zero.cpp b/hotspot/src/cpu/zero/vm/methodHandles_zero.cpp index 1fba6011651..e1344ea005f 100644 --- a/hotspot/src/cpu/zero/vm/methodHandles_zero.cpp +++ b/hotspot/src/cpu/zero/vm/methodHandles_zero.cpp @@ -1,6 +1,6 @@ /* * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. - * Copyright 2009 Red Hat, Inc. + * Copyright 2009, 2010 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 @@ -23,4 +23,10 @@ * */ -// This file is intentionally empty +#include "incls/_precompiled.incl" +#include "incls/_methodHandles_zero.cpp.incl" + +void MethodHandles::generate_method_handle_stub(MacroAssembler* masm, + MethodHandles::EntryKind ek) { + ShouldNotCallThis(); +} diff --git a/hotspot/src/cpu/zero/vm/stubRoutines_zero.hpp b/hotspot/src/cpu/zero/vm/stubRoutines_zero.hpp index 31cff0eddef..628d617b7bf 100644 --- a/hotspot/src/cpu/zero/vm/stubRoutines_zero.hpp +++ b/hotspot/src/cpu/zero/vm/stubRoutines_zero.hpp @@ -1,6 +1,6 @@ /* * Copyright 2003-2005 Sun Microsystems, Inc. All Rights Reserved. - * Copyright 2007, 2008, 2009 Red Hat, Inc. + * Copyright 2007, 2008, 2009, 2010 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 @@ -41,6 +41,10 @@ code_size2 = 0 // if these are too small. Simply increase }; // them if that happens. + enum method_handles_platform_dependent_constants { + method_handles_adapters_code_size = 0 + }; + #ifdef IA32 class x86 { friend class VMStructs; From 8a72fb502e346f3a6ae20136acfcb22ee4225329 Mon Sep 17 00:00:00 2001 From: Edward Nevill Date: Wed, 31 Mar 2010 11:54:03 -0700 Subject: [PATCH 10/91] 6939845: zero needs fallback path in C++ interpreter for platform dependent fast bytecodes Reviewed-by: never --- .../src/share/vm/interpreter/bytecodeInterpreter.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp b/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp index 1f0adb487ed..a8400339093 100644 --- a/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp +++ b/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp @@ -2328,6 +2328,17 @@ run: } DEFAULT: +#ifdef ZERO + // Some zero configurations use the C++ interpreter as a + // fallback interpreter and have support for platform + // specific fast bytecodes which aren't supported here, so + // redispatch to the equivalent non-fast bytecode when they + // are encountered. + if (Bytecodes::is_defined((Bytecodes::Code)opcode)) { + opcode = (jubyte)Bytecodes::java_code((Bytecodes::Code)opcode); + goto opcode_switch; + } +#endif fatal2("\t*** Unimplemented opcode: %d = %s\n", opcode, Bytecodes::name((Bytecodes::Code)opcode)); goto finish; From 47cda47c42c0b6e52fb6b0dbd6c8f1ace6fb0f9e Mon Sep 17 00:00:00 2001 From: Coleen Phillimore Date: Wed, 31 Mar 2010 16:51:18 -0700 Subject: [PATCH 11/91] 6938627: Make temporary directory use property java.io.tmpdir when specified Get java.io.tmpdir property in os::get_temp_directory() and call this instead of harcoding "/tmp". Don't assume trailing file_separator either. Reviewed-by: dholmes, kamg --- .../src/os/linux/vm/attachListener_linux.cpp | 8 ++-- hotspot/src/os/linux/vm/os_linux.cpp | 8 +++- hotspot/src/os/linux/vm/perfMemory_linux.cpp | 7 ++-- .../os/solaris/vm/attachListener_solaris.cpp | 8 ++-- hotspot/src/os/solaris/vm/os_solaris.cpp | 14 ++----- .../src/os/solaris/vm/perfMemory_solaris.cpp | 7 ++-- hotspot/src/os/windows/vm/os_windows.cpp | 19 +++++---- .../src/os/windows/vm/perfMemory_windows.cpp | 7 ++-- .../src/share/vm/compiler/compileBroker.cpp | 11 +++-- hotspot/src/share/vm/utilities/ostream.cpp | 41 ++++++++++++++----- hotspot/src/share/vm/utilities/vmError.cpp | 4 +- 11 files changed, 83 insertions(+), 51 deletions(-) diff --git a/hotspot/src/os/linux/vm/attachListener_linux.cpp b/hotspot/src/os/linux/vm/attachListener_linux.cpp index f40ac8e8491..93a85678688 100644 --- a/hotspot/src/os/linux/vm/attachListener_linux.cpp +++ b/hotspot/src/os/linux/vm/attachListener_linux.cpp @@ -192,7 +192,8 @@ int LinuxAttachListener::init() { res = ::bind(listener, (struct sockaddr*)&addr, sizeof(addr)); } if (res == -1) { - sprintf(path, "%s/.java_pid%d", os::get_temp_directory(), os::current_process_id()); + snprintf(path, PATH_MAX+1, "%s/.java_pid%d", + os::get_temp_directory(), os::current_process_id()); strcpy(addr.sun_path, path); ::unlink(path); res = ::bind(listener, (struct sockaddr*)&addr, sizeof(addr)); @@ -460,13 +461,14 @@ bool AttachListener::is_init_trigger() { if (init_at_startup() || is_initialized()) { return false; // initialized at startup or already initialized } - char fn[32]; + char fn[128]; sprintf(fn, ".attach_pid%d", os::current_process_id()); int ret; struct stat64 st; RESTARTABLE(::stat64(fn, &st), ret); if (ret == -1) { - sprintf(fn, "/tmp/.attach_pid%d", os::current_process_id()); + snprintf(fn, sizeof(fn), "%s/.attach_pid%d", + os::get_temp_directory(), os::current_process_id()); RESTARTABLE(::stat64(fn, &st), ret); } if (ret == 0) { diff --git a/hotspot/src/os/linux/vm/os_linux.cpp b/hotspot/src/os/linux/vm/os_linux.cpp index dec664574de..d38f3866c72 100644 --- a/hotspot/src/os/linux/vm/os_linux.cpp +++ b/hotspot/src/os/linux/vm/os_linux.cpp @@ -1522,7 +1522,10 @@ int os::current_process_id() { const char* os::dll_file_extension() { return ".so"; } -const char* os::get_temp_directory() { return "/tmp/"; } +const char* os::get_temp_directory() { + const char *prop = Arguments::get_property("java.io.tmpdir"); + return prop == NULL ? "/tmp" : prop; +} static bool file_exists(const char* filename) { struct stat statbuf; @@ -2305,7 +2308,8 @@ void linux_wrap_code(char* base, size_t size) { char buf[40]; int num = Atomic::add(1, &cnt); - sprintf(buf, "/tmp/hs-vm-%d-%d", os::current_process_id(), num); + snprintf(buf, sizeof(buf), "%s/hs-vm-%d-%d", + os::get_temp_directory(), os::current_process_id(), num); unlink(buf); int fd = open(buf, O_CREAT | O_RDWR, S_IRWXU); diff --git a/hotspot/src/os/linux/vm/perfMemory_linux.cpp b/hotspot/src/os/linux/vm/perfMemory_linux.cpp index 38165056267..31d275c26d8 100644 --- a/hotspot/src/os/linux/vm/perfMemory_linux.cpp +++ b/hotspot/src/os/linux/vm/perfMemory_linux.cpp @@ -145,11 +145,11 @@ static char* get_user_tmp_dir(const char* user) { const char* tmpdir = os::get_temp_directory(); const char* perfdir = PERFDATA_NAME; - size_t nbytes = strlen(tmpdir) + strlen(perfdir) + strlen(user) + 2; + size_t nbytes = strlen(tmpdir) + strlen(perfdir) + strlen(user) + 3; char* dirname = NEW_C_HEAP_ARRAY(char, nbytes); // construct the path name to user specific tmp directory - snprintf(dirname, nbytes, "%s%s_%s", tmpdir, perfdir, user); + snprintf(dirname, nbytes, "%s/%s_%s", tmpdir, perfdir, user); return dirname; } @@ -331,8 +331,9 @@ static char* get_user_name_slow(int vmid, TRAPS) { } char* usrdir_name = NEW_C_HEAP_ARRAY(char, - strlen(tmpdirname) + strlen(dentry->d_name) + 1); + strlen(tmpdirname) + strlen(dentry->d_name) + 2); strcpy(usrdir_name, tmpdirname); + strcat(usrdir_name, "/"); strcat(usrdir_name, dentry->d_name); DIR* subdirp = os::opendir(usrdir_name); diff --git a/hotspot/src/os/solaris/vm/attachListener_solaris.cpp b/hotspot/src/os/solaris/vm/attachListener_solaris.cpp index 61c31e27f21..c3f73da353c 100644 --- a/hotspot/src/os/solaris/vm/attachListener_solaris.cpp +++ b/hotspot/src/os/solaris/vm/attachListener_solaris.cpp @@ -375,7 +375,8 @@ int SolarisAttachListener::create_door() { return -1; } - sprintf(door_path, "%s/.java_pid%d", os::get_temp_directory(), os::current_process_id()); + snprintf(door_path, sizeof(door_path), "%s/.java_pid%d", + os::get_temp_directory(), os::current_process_id()); RESTARTABLE(::creat(door_path, S_IRUSR | S_IWUSR), fd); if (fd == -1) { @@ -591,13 +592,14 @@ bool AttachListener::is_init_trigger() { if (init_at_startup() || is_initialized()) { return false; // initialized at startup or already initialized } - char fn[32]; + char fn[128]; sprintf(fn, ".attach_pid%d", os::current_process_id()); int ret; struct stat64 st; RESTARTABLE(::stat64(fn, &st), ret); if (ret == -1) { - sprintf(fn, "/tmp/.attach_pid%d", os::current_process_id()); + snprintf(fn, sizeof(fn), "%s/.attach_pid%d", + os::get_temp_directory(), os::current_process_id()); RESTARTABLE(::stat64(fn, &st), ret); } if (ret == 0) { diff --git a/hotspot/src/os/solaris/vm/os_solaris.cpp b/hotspot/src/os/solaris/vm/os_solaris.cpp index db56befcb67..a137234854c 100644 --- a/hotspot/src/os/solaris/vm/os_solaris.cpp +++ b/hotspot/src/os/solaris/vm/os_solaris.cpp @@ -676,15 +676,6 @@ bool os::have_special_privileges() { } -static char* get_property(char* name, char* buffer, int buffer_size) { - if (os::getenv(name, buffer, buffer_size)) { - return buffer; - } - static char empty[] = ""; - return empty; -} - - void os::init_system_properties_values() { char arch[12]; sysinfo(SI_ARCHITECTURE, arch, sizeof(arch)); @@ -1826,7 +1817,10 @@ void os::set_error_file(const char *logfile) {} const char* os::dll_file_extension() { return ".so"; } -const char* os::get_temp_directory() { return "/tmp/"; } +const char* os::get_temp_directory() { + const char *prop = Arguments::get_property("java.io.tmpdir"); + return prop == NULL ? "/tmp" : prop; +} static bool file_exists(const char* filename) { struct stat statbuf; diff --git a/hotspot/src/os/solaris/vm/perfMemory_solaris.cpp b/hotspot/src/os/solaris/vm/perfMemory_solaris.cpp index 459ef573a90..ee565d03a18 100644 --- a/hotspot/src/os/solaris/vm/perfMemory_solaris.cpp +++ b/hotspot/src/os/solaris/vm/perfMemory_solaris.cpp @@ -147,11 +147,11 @@ static char* get_user_tmp_dir(const char* user) { const char* tmpdir = os::get_temp_directory(); const char* perfdir = PERFDATA_NAME; - size_t nbytes = strlen(tmpdir) + strlen(perfdir) + strlen(user) + 2; + size_t nbytes = strlen(tmpdir) + strlen(perfdir) + strlen(user) + 3; char* dirname = NEW_C_HEAP_ARRAY(char, nbytes); // construct the path name to user specific tmp directory - snprintf(dirname, nbytes, "%s%s_%s", tmpdir, perfdir, user); + snprintf(dirname, nbytes, "%s/%s_%s", tmpdir, perfdir, user); return dirname; } @@ -322,8 +322,9 @@ static char* get_user_name_slow(int vmid, TRAPS) { } char* usrdir_name = NEW_C_HEAP_ARRAY(char, - strlen(tmpdirname) + strlen(dentry->d_name) + 1); + strlen(tmpdirname) + strlen(dentry->d_name) + 2); strcpy(usrdir_name, tmpdirname); + strcat(usrdir_name, "/"); strcat(usrdir_name, dentry->d_name); DIR* subdirp = os::opendir(usrdir_name); diff --git a/hotspot/src/os/windows/vm/os_windows.cpp b/hotspot/src/os/windows/vm/os_windows.cpp index 217d2c38fb7..3763e504e2e 100644 --- a/hotspot/src/os/windows/vm/os_windows.cpp +++ b/hotspot/src/os/windows/vm/os_windows.cpp @@ -998,15 +998,16 @@ os::closedir(DIR *dirp) const char* os::dll_file_extension() { return ".dll"; } -const char * os::get_temp_directory() -{ - static char path_buf[MAX_PATH]; - if (GetTempPath(MAX_PATH, path_buf)>0) - return path_buf; - else{ - path_buf[0]='\0'; - return path_buf; - } +const char* os::get_temp_directory() { + const char *prop = Arguments::get_property("java.io.tmpdir"); + if (prop != 0) return prop; + static char path_buf[MAX_PATH]; + if (GetTempPath(MAX_PATH, path_buf)>0) + return path_buf; + else{ + path_buf[0]='\0'; + return path_buf; + } } static bool file_exists(const char* filename) { diff --git a/hotspot/src/os/windows/vm/perfMemory_windows.cpp b/hotspot/src/os/windows/vm/perfMemory_windows.cpp index 95063df2eb0..f4b41d7e7a8 100644 --- a/hotspot/src/os/windows/vm/perfMemory_windows.cpp +++ b/hotspot/src/os/windows/vm/perfMemory_windows.cpp @@ -149,11 +149,11 @@ static char* get_user_tmp_dir(const char* user) { const char* tmpdir = os::get_temp_directory(); const char* perfdir = PERFDATA_NAME; - size_t nbytes = strlen(tmpdir) + strlen(perfdir) + strlen(user) + 2; + size_t nbytes = strlen(tmpdir) + strlen(perfdir) + strlen(user) + 3; char* dirname = NEW_C_HEAP_ARRAY(char, nbytes); // construct the path name to user specific tmp directory - _snprintf(dirname, nbytes, "%s%s_%s", tmpdir, perfdir, user); + _snprintf(dirname, nbytes, "%s\\%s_%s", tmpdir, perfdir, user); return dirname; } @@ -318,8 +318,9 @@ static char* get_user_name_slow(int vmid) { } char* usrdir_name = NEW_C_HEAP_ARRAY(char, - strlen(tmpdirname) + strlen(dentry->d_name) + 1); + strlen(tmpdirname) + strlen(dentry->d_name) + 2); strcpy(usrdir_name, tmpdirname); + strcat(usrdir_name, "\\"); strcat(usrdir_name, dentry->d_name); DIR* subdirp = os::opendir(usrdir_name); diff --git a/hotspot/src/share/vm/compiler/compileBroker.cpp b/hotspot/src/share/vm/compiler/compileBroker.cpp index 6e519ec14a4..f3a0514d12d 100644 --- a/hotspot/src/share/vm/compiler/compileBroker.cpp +++ b/hotspot/src/share/vm/compiler/compileBroker.cpp @@ -1414,9 +1414,14 @@ void CompileBroker::init_compiler_thread_log() { intx thread_id = os::current_thread_id(); for (int try_temp_dir = 1; try_temp_dir >= 0; try_temp_dir--) { const char* dir = (try_temp_dir ? os::get_temp_directory() : NULL); - if (dir == NULL) dir = ""; - sprintf(fileBuf, "%shs_c" UINTX_FORMAT "_pid%u.log", - dir, thread_id, os::current_process_id()); + if (dir == NULL) { + jio_snprintf(fileBuf, sizeof(fileBuf), "hs_c" UINTX_FORMAT "_pid%u.log", + thread_id, os::current_process_id()); + } else { + jio_snprintf(fileBuf, sizeof(fileBuf), + "%s%shs_c" UINTX_FORMAT "_pid%u.log", dir, + os::file_separator(), thread_id, os::current_process_id()); + } fp = fopen(fileBuf, "at"); if (fp != NULL) { file = NEW_C_HEAP_ARRAY(char, strlen(fileBuf)+1); diff --git a/hotspot/src/share/vm/utilities/ostream.cpp b/hotspot/src/share/vm/utilities/ostream.cpp index 60bc65e4eaf..16f37d59aa8 100644 --- a/hotspot/src/share/vm/utilities/ostream.cpp +++ b/hotspot/src/share/vm/utilities/ostream.cpp @@ -363,7 +363,7 @@ bool defaultStream::has_log_file() { return _log_file != NULL; } -static const char* make_log_name(const char* log_name, const char* force_directory, char* buf) { +static const char* make_log_name(const char* log_name, const char* force_directory) { const char* basename = log_name; char file_sep = os::file_separator()[0]; const char* cp; @@ -374,6 +374,27 @@ static const char* make_log_name(const char* log_name, const char* force_directo } const char* nametail = log_name; + // Compute buffer length + size_t buffer_length; + if (force_directory != NULL) { + buffer_length = strlen(force_directory) + strlen(os::file_separator()) + + strlen(basename) + 1; + } else { + buffer_length = strlen(log_name) + 1; + } + + const char* star = strchr(basename, '*'); + int star_pos = (star == NULL) ? -1 : (star - nametail); + + char pid[32]; + if (star_pos >= 0) { + jio_snprintf(pid, sizeof(pid), "%u", os::current_process_id()); + buffer_length += strlen(pid); + } + + // Create big enough buffer. + char *buf = NEW_C_HEAP_ARRAY(char, buffer_length); + strcpy(buf, ""); if (force_directory != NULL) { strcat(buf, force_directory); @@ -381,14 +402,11 @@ static const char* make_log_name(const char* log_name, const char* force_directo nametail = basename; // completely skip directory prefix } - const char* star = strchr(basename, '*'); - int star_pos = (star == NULL) ? -1 : (star - nametail); - if (star_pos >= 0) { // convert foo*bar.log to foo123bar.log int buf_pos = (int) strlen(buf); strncpy(&buf[buf_pos], nametail, star_pos); - sprintf(&buf[buf_pos + star_pos], "%u", os::current_process_id()); + strcpy(&buf[buf_pos + star_pos], pid); nametail += star_pos + 1; // skip prefix and star } @@ -399,20 +417,23 @@ static const char* make_log_name(const char* log_name, const char* force_directo void defaultStream::init_log() { // %%% Need a MutexLocker? const char* log_name = LogFile != NULL ? LogFile : "hotspot.log"; - char buf[O_BUFLEN*2]; - const char* try_name = make_log_name(log_name, NULL, buf); + const char* try_name = make_log_name(log_name, NULL); fileStream* file = new(ResourceObj::C_HEAP) fileStream(try_name); if (!file->is_open()) { // Try again to open the file. char warnbuf[O_BUFLEN*2]; - sprintf(warnbuf, "Warning: Cannot open log file: %s\n", try_name); + jio_snprintf(warnbuf, sizeof(warnbuf), + "Warning: Cannot open log file: %s\n", try_name); // Note: This feature is for maintainer use only. No need for L10N. jio_print(warnbuf); - try_name = make_log_name("hs_pid*.log", os::get_temp_directory(), buf); - sprintf(warnbuf, "Warning: Forcing option -XX:LogFile=%s\n", try_name); + FREE_C_HEAP_ARRAY(char, try_name); + try_name = make_log_name("hs_pid*.log", os::get_temp_directory()); + jio_snprintf(warnbuf, sizeof(warnbuf), + "Warning: Forcing option -XX:LogFile=%s\n", try_name); jio_print(warnbuf); delete file; file = new(ResourceObj::C_HEAP) fileStream(try_name); + FREE_C_HEAP_ARRAY(char, try_name); } if (file->is_open()) { _log_file = file; diff --git a/hotspot/src/share/vm/utilities/vmError.cpp b/hotspot/src/share/vm/utilities/vmError.cpp index b758d8e9fa5..81ab6830204 100644 --- a/hotspot/src/share/vm/utilities/vmError.cpp +++ b/hotspot/src/share/vm/utilities/vmError.cpp @@ -807,8 +807,8 @@ void VMError::report_and_die() { if (fd == -1) { // try temp directory const char * tmpdir = os::get_temp_directory(); - jio_snprintf(buffer, sizeof(buffer), "%shs_err_pid%u.log", - (tmpdir ? tmpdir : ""), os::current_process_id()); + jio_snprintf(buffer, sizeof(buffer), "%s%shs_err_pid%u.log", + tmpdir, os::file_separator(), os::current_process_id()); fd = open(buffer, O_WRONLY | O_CREAT | O_TRUNC, 0666); } From 7a9a8771312638301690dbf97ef34f5865c35846 Mon Sep 17 00:00:00 2001 From: Tom Rodriguez Date: Thu, 1 Apr 2010 16:06:57 -0700 Subject: [PATCH 12/91] 6936709: AsyncGetCallTrace doesn't handle inexact stack walking properly Reviewed-by: kvn --- hotspot/src/share/vm/prims/forte.cpp | 71 +++++++++++++++------------- 1 file changed, 37 insertions(+), 34 deletions(-) diff --git a/hotspot/src/share/vm/prims/forte.cpp b/hotspot/src/share/vm/prims/forte.cpp index 146bb854993..4b0596c1fe3 100644 --- a/hotspot/src/share/vm/prims/forte.cpp +++ b/hotspot/src/share/vm/prims/forte.cpp @@ -55,12 +55,11 @@ class vframeStreamForte : public vframeStreamCommon { }; -static void is_decipherable_compiled_frame(frame* fr, RegisterMap* map, - bool* is_compiled_p, bool* is_walkable_p); +static bool is_decipherable_compiled_frame(JavaThread* thread, frame* fr, nmethod* nm); static bool is_decipherable_interpreted_frame(JavaThread* thread, - frame* fr, - methodOop* method_p, - int* bci_p); + frame* fr, + methodOop* method_p, + int* bci_p); @@ -122,41 +121,43 @@ void vframeStreamForte::forte_next() { // Determine if 'fr' is a decipherable compiled frame. We are already // assured that fr is for a java nmethod. -static bool is_decipherable_compiled_frame(frame* fr) { - - assert(fr->cb() != NULL && fr->cb()->is_nmethod(), "invariant"); - nmethod* nm = (nmethod*) fr->cb(); +static bool is_decipherable_compiled_frame(JavaThread* thread, frame* fr, nmethod* nm) { assert(nm->is_java_method(), "invariant"); - // First try and find an exact PcDesc - - PcDesc* pc_desc = nm->pc_desc_at(fr->pc()); - - // Did we find a useful PcDesc? - if (pc_desc != NULL && - pc_desc->scope_decode_offset() == DebugInformationRecorder::serialized_null) { - - address probe_pc = fr->pc() + 1; - pc_desc = nm->pc_desc_near(probe_pc); - - // Now do we have a useful PcDesc? + if (thread->has_last_Java_frame() && thread->last_Java_pc() == fr->pc()) { + // We're stopped at a call into the JVM so look for a PcDesc with + // the actual pc reported by the frame. + PcDesc* pc_desc = nm->pc_desc_at(fr->pc()); + // Did we find a useful PcDesc? if (pc_desc != NULL && - pc_desc->scope_decode_offset() == DebugInformationRecorder::serialized_null) { - // No debug information available for this pc - // vframeStream would explode if we try and walk the frames. - return false; + pc_desc->scope_decode_offset() != DebugInformationRecorder::serialized_null) { + return true; } - - // This PcDesc is useful however we must adjust the frame's pc - // so that the vframeStream lookups will use this same pc - - fr->set_pc(pc_desc->real_pc(nm)); } + // We're at some random pc in the nmethod so search for the PcDesc + // whose pc is greater than the current PC. It's done this way + // because the extra PcDescs that are recorded for improved debug + // info record the end of the region covered by the ScopeDesc + // instead of the beginning. + PcDesc* pc_desc = nm->pc_desc_near(fr->pc() + 1); + + // Now do we have a useful PcDesc? + if (pc_desc == NULL || + pc_desc->scope_decode_offset() == DebugInformationRecorder::serialized_null) { + // No debug information available for this pc + // vframeStream would explode if we try and walk the frames. + return false; + } + + // This PcDesc is useful however we must adjust the frame's pc + // so that the vframeStream lookups will use this same pc + fr->set_pc(pc_desc->real_pc(nm)); return true; } + // Determine if 'fr' is a walkable interpreted frame. Returns false // if it is not. *method_p, and *bci_p are not set when false is // returned. *method_p is non-NULL if frame was executing a Java @@ -166,9 +167,9 @@ static bool is_decipherable_compiled_frame(frame* fr) { // even if a valid BCI cannot be found. static bool is_decipherable_interpreted_frame(JavaThread* thread, - frame* fr, - methodOop* method_p, - int* bci_p) { + frame* fr, + methodOop* method_p, + int* bci_p) { assert(fr->is_interpreted_frame(), "just checking"); // top frame is an interpreted frame @@ -323,13 +324,15 @@ static bool find_initial_Java_frame(JavaThread* thread, // have a PCDesc that can get us a bci however we did find // a method - if (!is_decipherable_compiled_frame(&candidate)) { + if (!is_decipherable_compiled_frame(thread, &candidate, nm)) { return false; } // is_decipherable_compiled_frame may modify candidate's pc *initial_frame_p = candidate; + assert(nm->pc_desc_at(candidate.pc()) != NULL, "if it's decipherable then pc must be valid"); + return true; } From 9545c0521e39f742fc605e2ecd2fd9501fb13c16 Mon Sep 17 00:00:00 2001 From: Antonios Printezis Date: Fri, 2 Apr 2010 12:10:08 -0400 Subject: [PATCH 13/91] 6677708: G1: re-enable parallel RSet updating and scanning Enable parallel RSet updating and scanning. Reviewed-by: iveresov, jmasa --- hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp index a72268a6ef2..fca2f43c883 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp @@ -267,11 +267,11 @@ product(uintx, G1HeapRegionSize, 0, \ "Size of the G1 regions.") \ \ - experimental(bool, G1UseParallelRSetUpdating, false, \ + experimental(bool, G1UseParallelRSetUpdating, true, \ "Enables the parallelization of remembered set updating " \ "during evacuation pauses") \ \ - experimental(bool, G1UseParallelRSetScanning, false, \ + experimental(bool, G1UseParallelRSetScanning, true, \ "Enables the parallelization of remembered set scanning " \ "during evacuation pauses") \ \ From 8e1f408216640d2006679f30be724bbb44fb350d Mon Sep 17 00:00:00 2001 From: Vladimir Kozlov Date: Fri, 2 Apr 2010 11:55:00 -0700 Subject: [PATCH 14/91] 6939804: ciConstant::print() prints incorrect bool value Fix typo. Reviewed-by: never --- hotspot/src/share/vm/ci/ciConstant.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hotspot/src/share/vm/ci/ciConstant.cpp b/hotspot/src/share/vm/ci/ciConstant.cpp index cd3ac2b0c39..fc8ec50041c 100644 --- a/hotspot/src/share/vm/ci/ciConstant.cpp +++ b/hotspot/src/share/vm/ci/ciConstant.cpp @@ -36,7 +36,7 @@ void ciConstant::print() { basictype_to_str(basic_type())); switch (basic_type()) { case T_BOOLEAN: - tty->print("%s", bool_to_str(_value._int == 0)); + tty->print("%s", bool_to_str(_value._int != 0)); break; case T_CHAR: case T_BYTE: From 2e3363d109074456eef44ff729108b1565ae194f Mon Sep 17 00:00:00 2001 From: Antonios Printezis Date: Mon, 5 Apr 2010 12:19:22 -0400 Subject: [PATCH 15/91] 6940310: G1: MT-unsafe calls to CM::region_stack_push() / CM::region_stack_pop() Calling the methods region_stack_push() and region_stack_pop() concurrent is not MT-safe. The assumption is that we will only call region_stack_push() during a GC pause and region_stack_pop() during marking. Unfortunately, we also call region_stack_push() during marking which seems to be introducing subtle marking failures. This change introduces lock-based methods for pushing / popping to be called during marking. Reviewed-by: iveresov, johnc --- .../gc_implementation/g1/concurrentMark.cpp | 46 +++++++++++++++++-- .../gc_implementation/g1/concurrentMark.hpp | 42 ++++++++++++++++- hotspot/src/share/vm/runtime/mutexLocker.cpp | 2 + hotspot/src/share/vm/runtime/mutexLocker.hpp | 1 + 4 files changed, 87 insertions(+), 4 deletions(-) diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp index 6a3d4b19cbd..5da6faf8933 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp @@ -297,6 +297,11 @@ void CMRegionStack::push(MemRegion mr) { } } +// Currently we do not call this at all. Normally we would call it +// during the concurrent marking / remark phases but we now call +// the lock-based version instead. But we might want to resurrect this +// code in the future. So, we'll leave it here commented out. +#if 0 MemRegion CMRegionStack::pop() { while (true) { // Otherwise... @@ -321,6 +326,41 @@ MemRegion CMRegionStack::pop() { // Otherwise, we need to try again. } } +#endif // 0 + +void CMRegionStack::push_with_lock(MemRegion mr) { + assert(mr.word_size() > 0, "Precondition"); + MutexLockerEx x(CMRegionStack_lock, Mutex::_no_safepoint_check_flag); + + if (isFull()) { + _overflow = true; + return; + } + + _base[_index] = mr; + _index += 1; +} + +MemRegion CMRegionStack::pop_with_lock() { + MutexLockerEx x(CMRegionStack_lock, Mutex::_no_safepoint_check_flag); + + while (true) { + if (_index == 0) { + return MemRegion(); + } + _index -= 1; + + MemRegion mr = _base[_index]; + if (mr.start() != NULL) { + assert(mr.end() != NULL, "invariant"); + assert(mr.word_size() > 0, "invariant"); + return mr; + } else { + // that entry was invalidated... let's skip it + assert(mr.end() == NULL, "invariant"); + } + } +} bool CMRegionStack::invalidate_entries_into_cset() { bool result = false; @@ -3363,7 +3403,7 @@ void CMTask::drain_region_stack(BitMapClosure* bc) { gclog_or_tty->print_cr("[%d] draining region stack, size = %d", _task_id, _cm->region_stack_size()); - MemRegion mr = _cm->region_stack_pop(); + MemRegion mr = _cm->region_stack_pop_with_lock(); // it returns MemRegion() if the pop fails statsOnly(if (mr.start() != NULL) ++_region_stack_pops ); @@ -3384,7 +3424,7 @@ void CMTask::drain_region_stack(BitMapClosure* bc) { if (has_aborted()) mr = MemRegion(); else { - mr = _cm->region_stack_pop(); + mr = _cm->region_stack_pop_with_lock(); // it returns MemRegion() if the pop fails statsOnly(if (mr.start() != NULL) ++_region_stack_pops ); } @@ -3417,7 +3457,7 @@ void CMTask::drain_region_stack(BitMapClosure* bc) { } // Now push the part of the region we didn't scan on the // region stack to make sure a task scans it later. - _cm->region_stack_push(newRegion); + _cm->region_stack_push_with_lock(newRegion); } // break from while mr = MemRegion(); diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp index f2b9d56ec95..3326b2693f1 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp @@ -252,9 +252,19 @@ public: // with other "push" operations (no pops). void push(MemRegion mr); +#if 0 + // This is currently not used. See the comment in the .cpp file. + // Lock-free; assumes that it will only be called in parallel // with other "pop" operations (no pushes). MemRegion pop(); +#endif // 0 + + // These two are the implementations that use a lock. They can be + // called concurrently with each other but they should not be called + // concurrently with the lock-free versions (push() / pop()). + void push_with_lock(MemRegion mr); + MemRegion pop_with_lock(); bool isEmpty() { return _index == 0; } bool isFull() { return _index == _capacity; } @@ -540,6 +550,10 @@ public: // Manipulation of the region stack bool region_stack_push(MemRegion mr) { + // Currently we only call the lock-free version during evacuation + // pauses. + assert(SafepointSynchronize::is_at_safepoint(), "world should be stopped"); + _regionStack.push(mr); if (_regionStack.overflow()) { set_has_overflown(); @@ -547,7 +561,33 @@ public: } return true; } - MemRegion region_stack_pop() { return _regionStack.pop(); } +#if 0 + // Currently this is not used. See the comment in the .cpp file. + MemRegion region_stack_pop() { return _regionStack.pop(); } +#endif // 0 + + bool region_stack_push_with_lock(MemRegion mr) { + // Currently we only call the lock-based version during either + // concurrent marking or remark. + assert(!SafepointSynchronize::is_at_safepoint() || !concurrent(), + "if we are at a safepoint it should be the remark safepoint"); + + _regionStack.push_with_lock(mr); + if (_regionStack.overflow()) { + set_has_overflown(); + return false; + } + return true; + } + MemRegion region_stack_pop_with_lock() { + // Currently we only call the lock-based version during either + // concurrent marking or remark. + assert(!SafepointSynchronize::is_at_safepoint() || !concurrent(), + "if we are at a safepoint it should be the remark safepoint"); + + return _regionStack.pop_with_lock(); + } + int region_stack_size() { return _regionStack.size(); } bool region_stack_overflow() { return _regionStack.overflow(); } bool region_stack_empty() { return _regionStack.isEmpty(); } diff --git a/hotspot/src/share/vm/runtime/mutexLocker.cpp b/hotspot/src/share/vm/runtime/mutexLocker.cpp index 3b21a2094f5..019dbb4524b 100644 --- a/hotspot/src/share/vm/runtime/mutexLocker.cpp +++ b/hotspot/src/share/vm/runtime/mutexLocker.cpp @@ -70,6 +70,7 @@ Monitor* FullGCCount_lock = NULL; Monitor* CMark_lock = NULL; Monitor* ZF_mon = NULL; Monitor* Cleanup_mon = NULL; +Mutex* CMRegionStack_lock = NULL; Mutex* SATB_Q_FL_lock = NULL; Monitor* SATB_Q_CBL_mon = NULL; Mutex* Shared_SATB_Q_lock = NULL; @@ -167,6 +168,7 @@ void mutex_init() { def(CMark_lock , Monitor, nonleaf, true ); // coordinate concurrent mark thread def(ZF_mon , Monitor, leaf, true ); def(Cleanup_mon , Monitor, nonleaf, true ); + def(CMRegionStack_lock , Mutex, leaf, true ); def(SATB_Q_FL_lock , Mutex , special, true ); def(SATB_Q_CBL_mon , Monitor, nonleaf, true ); def(Shared_SATB_Q_lock , Mutex, nonleaf, true ); diff --git a/hotspot/src/share/vm/runtime/mutexLocker.hpp b/hotspot/src/share/vm/runtime/mutexLocker.hpp index 80d626a8031..7243596be92 100644 --- a/hotspot/src/share/vm/runtime/mutexLocker.hpp +++ b/hotspot/src/share/vm/runtime/mutexLocker.hpp @@ -63,6 +63,7 @@ extern Monitor* FullGCCount_lock; // in support of "concurrent" f extern Monitor* CMark_lock; // used for concurrent mark thread coordination extern Monitor* ZF_mon; // used for G1 conc zero-fill. extern Monitor* Cleanup_mon; // used for G1 conc cleanup. +extern Mutex* CMRegionStack_lock; // used for protecting accesses to the CM region stack extern Mutex* SATB_Q_FL_lock; // Protects SATB Q // buffer free list. extern Monitor* SATB_Q_CBL_mon; // Protects SATB Q From f90547c0b97abbab5ad904c03dd230254332cd35 Mon Sep 17 00:00:00 2001 From: Christian Thalinger Date: Tue, 6 Apr 2010 13:39:52 +0200 Subject: [PATCH 16/91] 6940520: CodeCache::scavenge_root_nmethods_do must fix oop relocations ScavengeRootsInCode can lead to unfixed code-embedded oops. Reviewed-by: kvn, never --- hotspot/src/share/vm/code/codeCache.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/hotspot/src/share/vm/code/codeCache.cpp b/hotspot/src/share/vm/code/codeCache.cpp index 65ee62241fe..b7b1e285bc8 100644 --- a/hotspot/src/share/vm/code/codeCache.cpp +++ b/hotspot/src/share/vm/code/codeCache.cpp @@ -1,5 +1,5 @@ /* - * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-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 @@ -284,9 +284,11 @@ void CodeCache::scavenge_root_nmethods_do(CodeBlobClosure* f) { cur->print_on(tty, is_live ? "scavenge root" : "dead scavenge root"); tty->cr(); } #endif //PRODUCT - if (is_live) + if (is_live) { // Perform cur->oops_do(f), maybe just once per nmethod. f->do_code_blob(cur); + cur->fix_oop_relocations(); + } } // Check for stray marks. From 719e7f0926a006370d5116a104297b9b5c4d567c Mon Sep 17 00:00:00 2001 From: Antonios Printezis Date: Tue, 6 Apr 2010 10:59:45 -0400 Subject: [PATCH 17/91] 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.") Make sure that two marking cycles do not overlap, i.e., a new one can only start after the concurrent marking thread finishes all its work. In the fix I piggy-back a couple of minor extra fixes: some general code reformatting for consistency (only around the code I modified), the removal of a field (G1CollectorPolicy::_should_initiate_conc_mark) which doesn't seem to be used at all (it's only set but never read), as well as moving the "is GC locker active" test earlier into the G1 pause / Full GC and using a more appropriate method for it. Reviewed-by: johnc, jmasa, jcoomes, ysr --- .../gc_implementation/g1/concurrentMark.cpp | 56 +++++++++---- .../g1/concurrentMarkThread.hpp | 28 +++++-- .../gc_implementation/g1/g1CollectedHeap.cpp | 31 ++++--- .../g1/g1CollectorPolicy.cpp | 84 ++++++++++++++++--- .../g1/g1CollectorPolicy.hpp | 46 ++++++++-- 5 files changed, 186 insertions(+), 59 deletions(-) diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp index 5da6faf8933..fd7595d3525 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp @@ -708,24 +708,46 @@ ConcurrentMark::~ConcurrentMark() { // void ConcurrentMark::clearNextBitmap() { - guarantee(!G1CollectedHeap::heap()->mark_in_progress(), "Precondition."); + G1CollectedHeap* g1h = G1CollectedHeap::heap(); + G1CollectorPolicy* g1p = g1h->g1_policy(); - // clear the mark bitmap (no grey objects to start with). - // We need to do this in chunks and offer to yield in between - // each chunk. - HeapWord* start = _nextMarkBitMap->startWord(); - HeapWord* end = _nextMarkBitMap->endWord(); - HeapWord* cur = start; - size_t chunkSize = M; - while (cur < end) { - HeapWord* next = cur + chunkSize; - if (next > end) - next = end; - MemRegion mr(cur,next); - _nextMarkBitMap->clearRange(mr); - cur = next; - do_yield_check(); - } + // Make sure that the concurrent mark thread looks to still be in + // the current cycle. + guarantee(cmThread()->during_cycle(), "invariant"); + + // We are finishing up the current cycle by clearing the next + // marking bitmap and getting it ready for the next cycle. During + // this time no other cycle can start. So, let's make sure that this + // is the case. + guarantee(!g1h->mark_in_progress(), "invariant"); + + // clear the mark bitmap (no grey objects to start with). + // We need to do this in chunks and offer to yield in between + // each chunk. + HeapWord* start = _nextMarkBitMap->startWord(); + HeapWord* end = _nextMarkBitMap->endWord(); + HeapWord* cur = start; + size_t chunkSize = M; + while (cur < end) { + HeapWord* next = cur + chunkSize; + if (next > end) + next = end; + MemRegion mr(cur,next); + _nextMarkBitMap->clearRange(mr); + cur = next; + do_yield_check(); + + // Repeat the asserts from above. We'll do them as asserts here to + // minimize their overhead on the product. However, we'll have + // them as guarantees at the beginning / end of the bitmap + // clearing to get some checking in the product. + assert(cmThread()->during_cycle(), "invariant"); + assert(!g1h->mark_in_progress(), "invariant"); + } + + // Repeat the asserts from above. + guarantee(cmThread()->during_cycle(), "invariant"); + guarantee(!g1h->mark_in_progress(), "invariant"); } class NoteStartOfMarkHRClosure: public HeapRegionClosure { diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMarkThread.hpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentMarkThread.hpp index 77f8f35753f..41be68bf05f 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMarkThread.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMarkThread.hpp @@ -42,8 +42,8 @@ class ConcurrentMarkThread: public ConcurrentGCThread { private: ConcurrentMark* _cm; - bool _started; - bool _in_progress; + volatile bool _started; + volatile bool _in_progress; void sleepBeforeNextCycle(); @@ -67,15 +67,25 @@ class ConcurrentMarkThread: public ConcurrentGCThread { // Counting virtual time so far. double vtime_count_accum() { return _vtime_count_accum; } - ConcurrentMark* cm() { return _cm; } + ConcurrentMark* cm() { return _cm; } - void set_started() { _started = true; } - void clear_started() { _started = false; } - bool started() { return _started; } + void set_started() { _started = true; } + void clear_started() { _started = false; } + bool started() { return _started; } - void set_in_progress() { _in_progress = true; } - void clear_in_progress() { _in_progress = false; } - bool in_progress() { return _in_progress; } + void set_in_progress() { _in_progress = true; } + void clear_in_progress() { _in_progress = false; } + bool in_progress() { return _in_progress; } + + // This flag returns true from the moment a marking cycle is + // initiated (during the initial-mark pause when started() is set) + // to the moment when the cycle completes (just after the next + // marking bitmap has been cleared and in_progress() is + // cleared). While this flag is true we will not start another cycle + // so that cycles do not overlap. We cannot use just in_progress() + // as the CM thread might take some time to wake up before noticing + // that started() is set and set in_progress(). + bool during_cycle() { return started() || in_progress(); } // Yield for GC void yield(); diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp index 8c77e5af0a1..73d269895d4 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp @@ -902,6 +902,10 @@ public: void G1CollectedHeap::do_collection(bool full, bool clear_all_soft_refs, size_t word_size) { + if (GC_locker::check_active_before_gc()) { + return; // GC is disabled (e.g. JNI GetXXXCritical operation) + } + ResourceMark rm; if (PrintHeapAtGC) { @@ -916,10 +920,6 @@ void G1CollectedHeap::do_collection(bool full, bool clear_all_soft_refs, assert(SafepointSynchronize::is_at_safepoint(), "should be at safepoint"); assert(Thread::current() == VMThread::vm_thread(), "should be in vm thread"); - if (GC_locker::is_active()) { - return; // GC is disabled (e.g. JNI GetXXXCritical operation) - } - { IsGCActiveMark x; @@ -2658,6 +2658,10 @@ struct PrepareForRSScanningClosure : public HeapRegionClosure { void G1CollectedHeap::do_collection_pause_at_safepoint() { + if (GC_locker::check_active_before_gc()) { + return; // GC is disabled (e.g. JNI GetXXXCritical operation) + } + if (PrintHeapAtGC) { Universe::print_heap_before_gc(); } @@ -2665,6 +2669,11 @@ G1CollectedHeap::do_collection_pause_at_safepoint() { { ResourceMark rm; + // This call will decide whether this pause is an initial-mark + // pause. If it is, during_initial_mark_pause() will return true + // for the duration of this pause. + g1_policy()->decide_on_conc_mark_initiation(); + char verbose_str[128]; sprintf(verbose_str, "GC pause "); if (g1_policy()->in_young_gc_mode()) { @@ -2673,7 +2682,7 @@ G1CollectedHeap::do_collection_pause_at_safepoint() { else strcat(verbose_str, "(partial)"); } - if (g1_policy()->should_initiate_conc_mark()) + if (g1_policy()->during_initial_mark_pause()) strcat(verbose_str, " (initial-mark)"); // if PrintGCDetails is on, we'll print long statistics information @@ -2697,10 +2706,6 @@ G1CollectedHeap::do_collection_pause_at_safepoint() { "young list should be well formed"); } - if (GC_locker::is_active()) { - return; // GC is disabled (e.g. JNI GetXXXCritical operation) - } - bool abandoned = false; { // Call to jvmpi::post_class_unload_events must occur outside of active GC IsGCActiveMark x; @@ -2756,7 +2761,7 @@ G1CollectedHeap::do_collection_pause_at_safepoint() { _young_list->print(); #endif // SCAN_ONLY_VERBOSE - if (g1_policy()->should_initiate_conc_mark()) { + if (g1_policy()->during_initial_mark_pause()) { concurrent_mark()->checkpointRootsInitialPre(); } save_marks(); @@ -2858,7 +2863,7 @@ G1CollectedHeap::do_collection_pause_at_safepoint() { } if (g1_policy()->in_young_gc_mode() && - g1_policy()->should_initiate_conc_mark()) { + g1_policy()->during_initial_mark_pause()) { concurrent_mark()->checkpointRootsInitialPost(); set_marking_started(); // CAUTION: after the doConcurrentMark() call below, @@ -3977,7 +3982,7 @@ public: OopsInHeapRegionClosure *scan_perm_cl; OopsInHeapRegionClosure *scan_so_cl; - if (_g1h->g1_policy()->should_initiate_conc_mark()) { + if (_g1h->g1_policy()->during_initial_mark_pause()) { scan_root_cl = &scan_mark_root_cl; scan_perm_cl = &scan_mark_perm_cl; scan_so_cl = &scan_mark_heap_rs_cl; @@ -4140,7 +4145,7 @@ G1CollectedHeap::scan_scan_only_set(OopsInHeapRegionClosure* oc, FilterAndMarkInHeapRegionAndIntoCSClosure scan_and_mark(this, &boc, concurrent_mark()); OopsInHeapRegionClosure *foc; - if (g1_policy()->should_initiate_conc_mark()) + if (g1_policy()->during_initial_mark_pause()) foc = &scan_and_mark; else foc = &scan_only; diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp index 287324609fb..a6429a73808 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp @@ -178,8 +178,8 @@ G1CollectorPolicy::G1CollectorPolicy() : // so the hack is to do the cast QQQ FIXME _pauses_btwn_concurrent_mark((size_t)G1PausesBtwnConcMark), _n_marks_since_last_pause(0), - _conc_mark_initiated(false), - _should_initiate_conc_mark(false), + _initiate_conc_mark_if_possible(false), + _during_initial_mark_pause(false), _should_revert_to_full_young_gcs(false), _last_full_young_gc(false), @@ -793,7 +793,7 @@ void G1CollectorPolicy::calculate_young_list_target_config(size_t rs_lengths) { elapsed_time_ms, calculations, full_young_gcs() ? "full" : "partial", - should_initiate_conc_mark() ? " i-m" : "", + during_initial_mark_pause() ? " i-m" : "", _in_marking_window, _in_marking_window_im); #endif // TRACE_CALC_YOUNG_CONFIG @@ -1040,7 +1040,8 @@ void G1CollectorPolicy::record_full_collection_end() { set_full_young_gcs(true); _last_full_young_gc = false; _should_revert_to_full_young_gcs = false; - _should_initiate_conc_mark = false; + clear_initiate_conc_mark_if_possible(); + clear_during_initial_mark_pause(); _known_garbage_bytes = 0; _known_garbage_ratio = 0.0; _in_marking_window = false; @@ -1186,7 +1187,8 @@ void G1CollectorPolicy::record_concurrent_mark_init_start() { void G1CollectorPolicy::record_concurrent_mark_init_end_pre(double mark_init_elapsed_time_ms) { _during_marking = true; - _should_initiate_conc_mark = false; + assert(!initiate_conc_mark_if_possible(), "we should have cleared it by now"); + clear_during_initial_mark_pause(); _cur_mark_stop_world_time_ms = mark_init_elapsed_time_ms; } @@ -1257,7 +1259,6 @@ void G1CollectorPolicy::record_concurrent_mark_cleanup_end_work2() { } _n_pauses_at_mark_end = _n_pauses; _n_marks_since_last_pause++; - _conc_mark_initiated = false; } void @@ -1453,17 +1454,24 @@ void G1CollectorPolicy::record_collection_pause_end(bool abandoned) { #endif // PRODUCT if (in_young_gc_mode()) { - last_pause_included_initial_mark = _should_initiate_conc_mark; + last_pause_included_initial_mark = during_initial_mark_pause(); if (last_pause_included_initial_mark) record_concurrent_mark_init_end_pre(0.0); size_t min_used_targ = (_g1->capacity() / 100) * InitiatingHeapOccupancyPercent; - if (cur_used_bytes > min_used_targ) { - if (cur_used_bytes <= _prev_collection_pause_used_at_end_bytes) { - } else if (!_g1->mark_in_progress() && !_last_full_young_gc) { - _should_initiate_conc_mark = true; + + if (!_g1->mark_in_progress() && !_last_full_young_gc) { + assert(!last_pause_included_initial_mark, "invariant"); + if (cur_used_bytes > min_used_targ && + cur_used_bytes > _prev_collection_pause_used_at_end_bytes) { + assert(!during_initial_mark_pause(), "we should not see this here"); + + // Note: this might have already been set, if during the last + // pause we decided to start a cycle but at the beginning of + // this pause we decided to postpone it. That's OK. + set_initiate_conc_mark_if_possible(); } } @@ -1754,7 +1762,7 @@ void G1CollectorPolicy::record_collection_pause_end(bool abandoned) { bool new_in_marking_window = _in_marking_window; bool new_in_marking_window_im = false; - if (_should_initiate_conc_mark) { + if (during_initial_mark_pause()) { new_in_marking_window = true; new_in_marking_window_im = true; } @@ -2173,7 +2181,13 @@ void G1CollectorPolicy::check_if_region_is_too_expensive(double if (predicted_time_ms > _expensive_region_limit_ms) { if (!in_young_gc_mode()) { set_full_young_gcs(true); - _should_initiate_conc_mark = true; + // We might want to do something different here. However, + // right now we don't support the non-generational G1 mode + // (and in fact we are planning to remove the associated code, + // see CR 6814390). So, let's leave it as is and this will be + // removed some time in the future + ShouldNotReachHere(); + set_during_initial_mark_pause(); } else // no point in doing another partial one _should_revert_to_full_young_gcs = true; @@ -2696,6 +2710,50 @@ bool G1CollectorPolicy_BestRegionsFirst::assertMarkedBytesDataOK() { } #endif +void +G1CollectorPolicy::decide_on_conc_mark_initiation() { + // We are about to decide on whether this pause will be an + // initial-mark pause. + + // First, during_initial_mark_pause() should not be already set. We + // will set it here if we have to. However, it should be cleared by + // the end of the pause (it's only set for the duration of an + // initial-mark pause). + assert(!during_initial_mark_pause(), "pre-condition"); + + if (initiate_conc_mark_if_possible()) { + // We had noticed on a previous pause that the heap occupancy has + // gone over the initiating threshold and we should start a + // concurrent marking cycle. So we might initiate one. + + bool during_cycle = _g1->concurrent_mark()->cmThread()->during_cycle(); + if (!during_cycle) { + // The concurrent marking thread is not "during a cycle", i.e., + // it has completed the last one. So we can go ahead and + // initiate a new cycle. + + set_during_initial_mark_pause(); + + // And we can now clear initiate_conc_mark_if_possible() as + // we've already acted on it. + clear_initiate_conc_mark_if_possible(); + } else { + // The concurrent marking thread is still finishing up the + // previous cycle. If we start one right now the two cycles + // overlap. In particular, the concurrent marking thread might + // be in the process of clearing the next marking bitmap (which + // we will use for the next cycle if we start one). Starting a + // cycle now will be bad given that parts of the marking + // information might get cleared by the marking thread. And we + // cannot wait for the marking thread to finish the cycle as it + // periodically yields while clearing the next marking bitmap + // and, if it's in a yield point, it's waiting for us to + // finish. So, at this point we will not start a cycle and we'll + // let the concurrent marking thread complete the last one. + } + } +} + void G1CollectorPolicy_BestRegionsFirst:: record_collection_pause_start(double start_time_sec, size_t start_used) { diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp index 2be5ba9cf7b..e346ea6c593 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp @@ -724,11 +724,31 @@ protected: size_t _n_marks_since_last_pause; - // True iff CM has been initiated. - bool _conc_mark_initiated; + // At the end of a pause we check the heap occupancy and we decide + // whether we will start a marking cycle during the next pause. If + // we decide that we want to do that, we will set this parameter to + // true. So, this parameter will stay true between the end of a + // pause and the beginning of a subsequent pause (not necessarily + // the next one, see the comments on the next field) when we decide + // that we will indeed start a marking cycle and do the initial-mark + // work. + volatile bool _initiate_conc_mark_if_possible; + + // If initiate_conc_mark_if_possible() is set at the beginning of a + // pause, it is a suggestion that the pause should start a marking + // cycle by doing the initial-mark work. However, it is possible + // that the concurrent marking thread is still finishing up the + // previous marking cycle (e.g., clearing the next marking + // bitmap). If that is the case we cannot start a new cycle and + // we'll have to wait for the concurrent marking thread to finish + // what it is doing. In this case we will postpone the marking cycle + // initiation decision for the next pause. When we eventually decide + // to start a cycle, we will set _during_initial_mark_pause which + // will stay true until the end of the initial-mark pause and it's + // the condition that indicates that a pause is doing the + // initial-mark work. + volatile bool _during_initial_mark_pause; - // True iff CM should be initiated - bool _should_initiate_conc_mark; bool _should_revert_to_full_young_gcs; bool _last_full_young_gc; @@ -981,9 +1001,21 @@ public: // Add "hr" to the CS. void add_to_collection_set(HeapRegion* hr); - bool should_initiate_conc_mark() { return _should_initiate_conc_mark; } - void set_should_initiate_conc_mark() { _should_initiate_conc_mark = true; } - void unset_should_initiate_conc_mark(){ _should_initiate_conc_mark = false; } + bool initiate_conc_mark_if_possible() { return _initiate_conc_mark_if_possible; } + void set_initiate_conc_mark_if_possible() { _initiate_conc_mark_if_possible = true; } + void clear_initiate_conc_mark_if_possible() { _initiate_conc_mark_if_possible = false; } + + bool during_initial_mark_pause() { return _during_initial_mark_pause; } + void set_during_initial_mark_pause() { _during_initial_mark_pause = true; } + void clear_during_initial_mark_pause(){ _during_initial_mark_pause = false; } + + // This is called at the very beginning of an evacuation pause (it + // has to be the first thing that the pause does). If + // initiate_conc_mark_if_possible() is true, and the concurrent + // marking thread has completed its work during the previous cycle, + // it will set during_initial_mark_pause() to so that the pause does + // the initial-mark work and start a marking cycle. + void decide_on_conc_mark_initiation(); // If an expansion would be appropriate, because recent GC overhead had // exceeded the desired limit, return an amount to expand by. From 429cea33bae877ac64916277e673f2fa841472f1 Mon Sep 17 00:00:00 2001 From: Vladimir Kozlov Date: Tue, 6 Apr 2010 15:18:10 -0700 Subject: [PATCH 18/91] 6940677: Use 64 bytes chunk copy for arraycopy on Sparc For large arrays we should use 64 bytes chunks copy. Reviewed-by: twisti --- .../src/cpu/sparc/vm/stubGenerator_sparc.cpp | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/hotspot/src/cpu/sparc/vm/stubGenerator_sparc.cpp b/hotspot/src/cpu/sparc/vm/stubGenerator_sparc.cpp index 091bc570d4c..9945c09b613 100644 --- a/hotspot/src/cpu/sparc/vm/stubGenerator_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/stubGenerator_sparc.cpp @@ -2000,6 +2000,27 @@ class StubGenerator: public StubCodeGenerator { // to: O1 // count: O2 treated as signed // + // count -= 2; + // if ( count >= 0 ) { // >= 2 elements + // if ( count > 6) { // >= 8 elements + // count -= 6; // original count - 8 + // do { + // copy_8_elements; + // count -= 8; + // } while ( count >= 0 ); + // count += 6; + // } + // if ( count >= 0 ) { // >= 2 elements + // do { + // copy_2_elements; + // } while ( (count=count-2) >= 0 ); + // } + // } + // count += 2; + // if ( count != 0 ) { // 1 element left + // copy_1_element; + // } + // void generate_disjoint_long_copy_core(bool aligned) { Label L_copy_8_bytes, L_copy_16_bytes, L_exit; const Register from = O0; // source array address @@ -2012,6 +2033,38 @@ class StubGenerator: public StubCodeGenerator { __ mov(G0, offset0); // offset from start of arrays (0) __ brx(Assembler::negative, false, Assembler::pn, L_copy_8_bytes ); __ delayed()->add(offset0, 8, offset8); + + // Copy by 64 bytes chunks + Label L_copy_64_bytes; + const Register from64 = O3; // source address + const Register to64 = G3; // destination address + __ subcc(count, 6, O3); + __ brx(Assembler::negative, false, Assembler::pt, L_copy_16_bytes ); + __ delayed()->mov(to, to64); + // Now we can use O4(offset0), O5(offset8) as temps + __ mov(O3, count); + __ mov(from, from64); + + __ align(16); + __ BIND(L_copy_64_bytes); + for( int off = 0; off < 64; off += 16 ) { + __ ldx(from64, off+0, O4); + __ ldx(from64, off+8, O5); + __ stx(O4, to64, off+0); + __ stx(O5, to64, off+8); + } + __ deccc(count, 8); + __ inc(from64, 64); + __ brx(Assembler::greaterEqual, false, Assembler::pt, L_copy_64_bytes); + __ delayed()->inc(to64, 64); + + // Restore O4(offset0), O5(offset8) + __ sub(from64, from, offset0); + __ inccc(count, 6); + __ brx(Assembler::negative, false, Assembler::pn, L_copy_8_bytes ); + __ delayed()->add(offset0, 8, offset8); + + // Copy by 16 bytes chunks __ align(16); __ BIND(L_copy_16_bytes); __ ldx(from, offset0, O3); @@ -2023,6 +2076,7 @@ class StubGenerator: public StubCodeGenerator { __ brx(Assembler::greaterEqual, false, Assembler::pt, L_copy_16_bytes); __ delayed()->inc(offset8, 16); + // Copy last 8 bytes __ BIND(L_copy_8_bytes); __ inccc(count, 2); __ brx(Assembler::zero, true, Assembler::pn, L_exit ); From 5f8098a4023ca058a0fb51d35313729ffc9a716e Mon Sep 17 00:00:00 2001 From: Vladimir Kozlov Date: Wed, 7 Apr 2010 09:37:47 -0700 Subject: [PATCH 19/91] 6940701: Don't align loops in stubs for Niagara sparc Don't align loops in stubs for Niagara sparc since NOPs are expensive. Reviewed-by: twisti, never --- .../cpu/sparc/vm/c1_LIRAssembler_sparc.cpp | 2 +- hotspot/src/cpu/sparc/vm/c2_globals_sparc.hpp | 3 -- hotspot/src/cpu/sparc/vm/globals_sparc.hpp | 3 ++ .../src/cpu/sparc/vm/stubGenerator_sparc.cpp | 28 +++++++++---------- hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp | 6 ++-- hotspot/src/cpu/x86/vm/c2_globals_x86.hpp | 1 - hotspot/src/cpu/x86/vm/globals_x86.hpp | 1 + .../src/cpu/x86/vm/stubGenerator_x86_32.cpp | 12 ++++---- .../src/cpu/x86/vm/stubGenerator_x86_64.cpp | 9 +++--- hotspot/src/share/vm/opto/c2_globals.hpp | 3 -- hotspot/src/share/vm/runtime/globals.hpp | 3 ++ 11 files changed, 35 insertions(+), 36 deletions(-) diff --git a/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp b/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp index 3fe53ae890f..d6ee6af13c7 100644 --- a/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp @@ -2849,7 +2849,7 @@ void LIR_Assembler::emit_profile_call(LIR_OpProfileCall* op) { void LIR_Assembler::align_backward_branch_target() { - __ align(16); + __ align(OptoLoopAlignment); } diff --git a/hotspot/src/cpu/sparc/vm/c2_globals_sparc.hpp b/hotspot/src/cpu/sparc/vm/c2_globals_sparc.hpp index 2df4dbd8ede..7b6dd47dabd 100644 --- a/hotspot/src/cpu/sparc/vm/c2_globals_sparc.hpp +++ b/hotspot/src/cpu/sparc/vm/c2_globals_sparc.hpp @@ -60,9 +60,6 @@ define_pd_global(intx, FreqInlineSize, 175); define_pd_global(intx, INTPRESSURE, 48); // large register set define_pd_global(intx, InteriorEntryAlignment, 16); // = CodeEntryAlignment define_pd_global(intx, NewSizeThreadIncrease, ScaleForWordSize(4*K)); -// The default setting 16/16 seems to work best. -// (For _228_jack 16/16 is 2% better than 4/4, 16/4, 32/32, 32/16, or 16/32.) -define_pd_global(intx, OptoLoopAlignment, 16); // = 4*wordSize define_pd_global(intx, RegisterCostAreaRatio, 12000); define_pd_global(bool, UseTLAB, true); define_pd_global(bool, ResizeTLAB, true); diff --git a/hotspot/src/cpu/sparc/vm/globals_sparc.hpp b/hotspot/src/cpu/sparc/vm/globals_sparc.hpp index e115ef2a9e0..af08f879f35 100644 --- a/hotspot/src/cpu/sparc/vm/globals_sparc.hpp +++ b/hotspot/src/cpu/sparc/vm/globals_sparc.hpp @@ -40,6 +40,9 @@ define_pd_global(bool, ImplicitNullChecks, true); // Generate code for define_pd_global(bool, UncommonNullCast, true); // Uncommon-trap NULLs past to check cast define_pd_global(intx, CodeEntryAlignment, 32); +// The default setting 16/16 seems to work best. +// (For _228_jack 16/16 is 2% better than 4/4, 16/4, 32/32, 32/16, or 16/32.) +define_pd_global(intx, OptoLoopAlignment, 16); // = 4*wordSize define_pd_global(intx, InlineFrequencyCount, 50); // we can use more inlining on the SPARC define_pd_global(intx, InlineSmallCode, 1500); #ifdef _LP64 diff --git a/hotspot/src/cpu/sparc/vm/stubGenerator_sparc.cpp b/hotspot/src/cpu/sparc/vm/stubGenerator_sparc.cpp index 9945c09b613..2fed8cd83b5 100644 --- a/hotspot/src/cpu/sparc/vm/stubGenerator_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/stubGenerator_sparc.cpp @@ -1148,7 +1148,7 @@ class StubGenerator: public StubCodeGenerator { __ andn(from, 7, from); // Align address __ ldx(from, 0, O3); __ inc(from, 8); - __ align(16); + __ align(OptoLoopAlignment); __ BIND(L_loop); __ ldx(from, 0, O4); __ deccc(count, count_dec); // Can we do next iteration after this one? @@ -1220,7 +1220,7 @@ class StubGenerator: public StubCodeGenerator { // __ andn(end_from, 7, end_from); // Align address __ ldx(end_from, 0, O3); - __ align(16); + __ align(OptoLoopAlignment); __ BIND(L_loop); __ ldx(end_from, -8, O4); __ deccc(count, count_dec); // Can we do next iteration after this one? @@ -1349,7 +1349,7 @@ class StubGenerator: public StubCodeGenerator { __ BIND(L_copy_byte); __ br_zero(Assembler::zero, false, Assembler::pt, count, L_exit); __ delayed()->nop(); - __ align(16); + __ align(OptoLoopAlignment); __ BIND(L_copy_byte_loop); __ ldub(from, offset, O3); __ deccc(count); @@ -1445,7 +1445,7 @@ class StubGenerator: public StubCodeGenerator { L_aligned_copy, L_copy_byte); } // copy 4 elements (16 bytes) at a time - __ align(16); + __ align(OptoLoopAlignment); __ BIND(L_aligned_copy); __ dec(end_from, 16); __ ldx(end_from, 8, O3); @@ -1461,7 +1461,7 @@ class StubGenerator: public StubCodeGenerator { __ BIND(L_copy_byte); __ br_zero(Assembler::zero, false, Assembler::pt, count, L_exit); __ delayed()->nop(); - __ align(16); + __ align(OptoLoopAlignment); __ BIND(L_copy_byte_loop); __ dec(end_from); __ dec(end_to); @@ -1577,7 +1577,7 @@ class StubGenerator: public StubCodeGenerator { __ BIND(L_copy_2_bytes); __ br_zero(Assembler::zero, false, Assembler::pt, count, L_exit); __ delayed()->nop(); - __ align(16); + __ align(OptoLoopAlignment); __ BIND(L_copy_2_bytes_loop); __ lduh(from, offset, O3); __ deccc(count); @@ -1684,7 +1684,7 @@ class StubGenerator: public StubCodeGenerator { L_aligned_copy, L_copy_2_bytes); } // copy 4 elements (16 bytes) at a time - __ align(16); + __ align(OptoLoopAlignment); __ BIND(L_aligned_copy); __ dec(end_from, 16); __ ldx(end_from, 8, O3); @@ -1781,7 +1781,7 @@ class StubGenerator: public StubCodeGenerator { // copy with shift 4 elements (16 bytes) at a time __ dec(count, 4); // The cmp at the beginning guaranty count >= 4 - __ align(16); + __ align(OptoLoopAlignment); __ BIND(L_copy_16_bytes); __ ldx(from, 4, O4); __ deccc(count, 4); // Can we do next iteration after this one? @@ -1907,7 +1907,7 @@ class StubGenerator: public StubCodeGenerator { // to form 2 aligned 8-bytes chunks to store. // __ ldx(end_from, -4, O3); - __ align(16); + __ align(OptoLoopAlignment); __ BIND(L_copy_16_bytes); __ ldx(end_from, -12, O4); __ deccc(count, 4); @@ -1929,7 +1929,7 @@ class StubGenerator: public StubCodeGenerator { __ delayed()->inc(count, 4); // copy 4 elements (16 bytes) at a time - __ align(16); + __ align(OptoLoopAlignment); __ BIND(L_aligned_copy); __ dec(end_from, 16); __ ldx(end_from, 8, O3); @@ -2045,7 +2045,7 @@ class StubGenerator: public StubCodeGenerator { __ mov(O3, count); __ mov(from, from64); - __ align(16); + __ align(OptoLoopAlignment); __ BIND(L_copy_64_bytes); for( int off = 0; off < 64; off += 16 ) { __ ldx(from64, off+0, O4); @@ -2065,7 +2065,7 @@ class StubGenerator: public StubCodeGenerator { __ delayed()->add(offset0, 8, offset8); // Copy by 16 bytes chunks - __ align(16); + __ align(OptoLoopAlignment); __ BIND(L_copy_16_bytes); __ ldx(from, offset0, O3); __ ldx(from, offset8, G3); @@ -2139,7 +2139,7 @@ class StubGenerator: public StubCodeGenerator { __ brx(Assembler::lessEqual, false, Assembler::pn, L_copy_8_bytes ); __ delayed()->sllx(count, LogBytesPerLong, offset8); __ sub(offset8, 8, offset0); - __ align(16); + __ align(OptoLoopAlignment); __ BIND(L_copy_16_bytes); __ ldx(from, offset8, O2); __ ldx(from, offset0, O3); @@ -2405,7 +2405,7 @@ class StubGenerator: public StubCodeGenerator { // (O5 = 0; ; O5 += wordSize) --- offset from src, dest arrays // (O2 = len; O2 != 0; O2--) --- number of oops *remaining* // G3, G4, G5 --- current oop, oop.klass, oop.klass.super - __ align(16); + __ align(OptoLoopAlignment); __ BIND(store_element); __ deccc(G1_remain); // decrement the count diff --git a/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp b/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp index 17666c0a7fc..fb0cfdc5ea0 100644 --- a/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp @@ -86,14 +86,14 @@ void VM_Version::initialize() { if (FLAG_IS_DEFAULT(InteriorEntryAlignment)) { FLAG_SET_DEFAULT(InteriorEntryAlignment, 4); } - if (FLAG_IS_DEFAULT(OptoLoopAlignment)) { - FLAG_SET_DEFAULT(OptoLoopAlignment, 4); - } if (is_niagara1_plus() && FLAG_IS_DEFAULT(AllocatePrefetchDistance)) { // Use smaller prefetch distance on N2 FLAG_SET_DEFAULT(AllocatePrefetchDistance, 256); } #endif + if (FLAG_IS_DEFAULT(OptoLoopAlignment)) { + FLAG_SET_DEFAULT(OptoLoopAlignment, 4); + } } // Use hardware population count instruction if available. diff --git a/hotspot/src/cpu/x86/vm/c2_globals_x86.hpp b/hotspot/src/cpu/x86/vm/c2_globals_x86.hpp index b299e5a5480..e15d7e378e7 100644 --- a/hotspot/src/cpu/x86/vm/c2_globals_x86.hpp +++ b/hotspot/src/cpu/x86/vm/c2_globals_x86.hpp @@ -80,7 +80,6 @@ define_pd_global(intx, CodeCacheExpansionSize, 32*K); // Ergonomics related flags define_pd_global(uint64_t,MaxRAM, 4ULL*G); #endif // AMD64 -define_pd_global(intx, OptoLoopAlignment, 16); define_pd_global(intx, RegisterCostAreaRatio, 16000); // Peephole and CISC spilling both break the graph, and so makes the diff --git a/hotspot/src/cpu/x86/vm/globals_x86.hpp b/hotspot/src/cpu/x86/vm/globals_x86.hpp index 764e7ef284a..bf59b3f3654 100644 --- a/hotspot/src/cpu/x86/vm/globals_x86.hpp +++ b/hotspot/src/cpu/x86/vm/globals_x86.hpp @@ -45,6 +45,7 @@ define_pd_global(intx, CodeEntryAlignment, 32); #else define_pd_global(intx, CodeEntryAlignment, 16); #endif // COMPILER2 +define_pd_global(intx, OptoLoopAlignment, 16); define_pd_global(intx, InlineFrequencyCount, 100); define_pd_global(intx, InlineSmallCode, 1000); diff --git a/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp b/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp index 1d971931940..68872420f31 100644 --- a/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp +++ b/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp @@ -812,7 +812,7 @@ class StubGenerator: public StubCodeGenerator { Label L_copy_64_bytes_loop, L_copy_64_bytes, L_copy_8_bytes, L_exit; // Copy 64-byte chunks __ jmpb(L_copy_64_bytes); - __ align(16); + __ align(OptoLoopAlignment); __ BIND(L_copy_64_bytes_loop); if(UseUnalignedLoadStores) { @@ -874,7 +874,7 @@ class StubGenerator: public StubCodeGenerator { Label L_copy_64_bytes_loop, L_copy_64_bytes, L_copy_8_bytes, L_exit; // Copy 64-byte chunks __ jmpb(L_copy_64_bytes); - __ align(16); + __ align(OptoLoopAlignment); __ BIND(L_copy_64_bytes_loop); __ movq(mmx0, Address(from, 0)); __ movq(mmx1, Address(from, 8)); @@ -1144,7 +1144,7 @@ class StubGenerator: public StubCodeGenerator { __ movl(Address(to, count, sf, 0), rdx); __ jmpb(L_copy_8_bytes); - __ align(16); + __ align(OptoLoopAlignment); // Move 8 bytes __ BIND(L_copy_8_bytes_loop); if (UseXMMForArrayCopy) { @@ -1235,7 +1235,7 @@ class StubGenerator: public StubCodeGenerator { } } else { __ jmpb(L_copy_8_bytes); - __ align(16); + __ align(OptoLoopAlignment); __ BIND(L_copy_8_bytes_loop); __ fild_d(Address(from, 0)); __ fistp_d(Address(from, to_from, Address::times_1)); @@ -1282,7 +1282,7 @@ class StubGenerator: public StubCodeGenerator { __ jmpb(L_copy_8_bytes); - __ align(16); + __ align(OptoLoopAlignment); __ BIND(L_copy_8_bytes_loop); if (VM_Version::supports_mmx()) { if (UseXMMForArrayCopy) { @@ -1454,7 +1454,7 @@ class StubGenerator: public StubCodeGenerator { // Loop control: // for (count = -count; count != 0; count++) // Base pointers src, dst are biased by 8*count,to last element. - __ align(16); + __ align(OptoLoopAlignment); __ BIND(L_store_element); __ movptr(to_element_addr, elem); // store the oop diff --git a/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp b/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp index 5417eb160cb..121cfd67381 100644 --- a/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp +++ b/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp @@ -871,9 +871,8 @@ class StubGenerator: public StubCodeGenerator { } address generate_fp_mask(const char *stub_name, int64_t mask) { + __ align(CodeEntryAlignment); StubCodeMark mark(this, "StubRoutines", stub_name); - - __ align(16); address start = __ pc(); __ emit_data64( mask, relocInfo::none ); @@ -1268,7 +1267,7 @@ class StubGenerator: public StubCodeGenerator { Label& L_copy_32_bytes, Label& L_copy_8_bytes) { DEBUG_ONLY(__ stop("enter at entry label, not here")); Label L_loop; - __ align(16); + __ align(OptoLoopAlignment); __ BIND(L_loop); if(UseUnalignedLoadStores) { __ movdqu(xmm0, Address(end_from, qword_count, Address::times_8, -24)); @@ -1309,7 +1308,7 @@ class StubGenerator: public StubCodeGenerator { Label& L_copy_32_bytes, Label& L_copy_8_bytes) { DEBUG_ONLY(__ stop("enter at entry label, not here")); Label L_loop; - __ align(16); + __ align(OptoLoopAlignment); __ BIND(L_loop); if(UseUnalignedLoadStores) { __ movdqu(xmm0, Address(from, qword_count, Address::times_8, 16)); @@ -2229,7 +2228,7 @@ class StubGenerator: public StubCodeGenerator { // Loop control: // for (count = -count; count != 0; count++) // Base pointers src, dst are biased by 8*(count-1),to last element. - __ align(16); + __ align(OptoLoopAlignment); __ BIND(L_store_element); __ store_heap_oop(to_element_addr, rax_oop); // store the oop diff --git a/hotspot/src/share/vm/opto/c2_globals.hpp b/hotspot/src/share/vm/opto/c2_globals.hpp index fd3256ade33..1efd03f841f 100644 --- a/hotspot/src/share/vm/opto/c2_globals.hpp +++ b/hotspot/src/share/vm/opto/c2_globals.hpp @@ -52,9 +52,6 @@ "Code alignment for interior entry points " \ "in generated code (in bytes)") \ \ - product_pd(intx, OptoLoopAlignment, \ - "Align inner loops to zero relative to this modulus") \ - \ product(intx, MaxLoopPad, (OptoLoopAlignment-1), \ "Align a loop if padding size in bytes is less or equal to this value") \ \ diff --git a/hotspot/src/share/vm/runtime/globals.hpp b/hotspot/src/share/vm/runtime/globals.hpp index 80d84d05b7b..f30389541ed 100644 --- a/hotspot/src/share/vm/runtime/globals.hpp +++ b/hotspot/src/share/vm/runtime/globals.hpp @@ -3110,6 +3110,9 @@ class CommandLineFlags { develop_pd(intx, CodeEntryAlignment, \ "Code entry alignment for generated code (in bytes)") \ \ + product_pd(intx, OptoLoopAlignment, \ + "Align inner loops to zero relative to this modulus") \ + \ product_pd(uintx, InitialCodeCacheSize, \ "Initial code cache size (in bytes)") \ \ From 629d139cac4a32ee4e296e5d586658f69ed026bf Mon Sep 17 00:00:00 2001 From: Vladimir Kozlov Date: Wed, 7 Apr 2010 10:35:56 -0700 Subject: [PATCH 20/91] 6940733: allocate non static oop fields in super and sub classes together Use FieldsAllocationStyle=2 to allocate non static oop fields in super and sub classes together Reviewed-by: twisti --- .../share/vm/classfile/classFileParser.cpp | 23 +++++++++++++++++-- hotspot/src/share/vm/runtime/globals.hpp | 3 ++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/hotspot/src/share/vm/classfile/classFileParser.cpp b/hotspot/src/share/vm/classfile/classFileParser.cpp index 8671af37de6..23ec4746bcc 100644 --- a/hotspot/src/share/vm/classfile/classFileParser.cpp +++ b/hotspot/src/share/vm/classfile/classFileParser.cpp @@ -2956,8 +2956,8 @@ instanceKlassHandle ClassFileParser::parseClassFile(symbolHandle name, #endif bool compact_fields = CompactFields; int allocation_style = FieldsAllocationStyle; - if( allocation_style < 0 || allocation_style > 1 ) { // Out of range? - assert(false, "0 <= FieldsAllocationStyle <= 1"); + if( allocation_style < 0 || allocation_style > 2 ) { // Out of range? + assert(false, "0 <= FieldsAllocationStyle <= 2"); allocation_style = 1; // Optimistic } @@ -2993,6 +2993,25 @@ instanceKlassHandle ClassFileParser::parseClassFile(symbolHandle name, } else if( allocation_style == 1 ) { // Fields order: longs/doubles, ints, shorts/chars, bytes, oops next_nonstatic_double_offset = next_nonstatic_field_offset; + } else if( allocation_style == 2 ) { + // Fields allocation: oops fields in super and sub classes are together. + if( nonstatic_field_size > 0 && super_klass() != NULL && + super_klass->nonstatic_oop_map_size() > 0 ) { + int map_size = super_klass->nonstatic_oop_map_size(); + OopMapBlock* first_map = super_klass->start_of_nonstatic_oop_maps(); + OopMapBlock* last_map = first_map + map_size - 1; + int next_offset = last_map->offset() + (last_map->count() * heapOopSize); + if (next_offset == next_nonstatic_field_offset) { + allocation_style = 0; // allocate oops first + next_nonstatic_oop_offset = next_nonstatic_field_offset; + next_nonstatic_double_offset = next_nonstatic_oop_offset + + (nonstatic_oop_count * heapOopSize); + } + } + if( allocation_style == 2 ) { + allocation_style = 1; // allocate oops last + next_nonstatic_double_offset = next_nonstatic_field_offset; + } } else { ShouldNotReachHere(); } diff --git a/hotspot/src/share/vm/runtime/globals.hpp b/hotspot/src/share/vm/runtime/globals.hpp index f30389541ed..b4991f62dd1 100644 --- a/hotspot/src/share/vm/runtime/globals.hpp +++ b/hotspot/src/share/vm/runtime/globals.hpp @@ -1052,7 +1052,8 @@ class CommandLineFlags { "Use SSE2 MOVDQU instruction for Arraycopy") \ \ product(intx, FieldsAllocationStyle, 1, \ - "0 - type based with oops first, 1 - with oops last") \ + "0 - type based with oops first, 1 - with oops last, " \ + "2 - oops in super and sub classes are together") \ \ product(bool, CompactFields, true, \ "Allocate nonstatic fields in gaps between previous fields") \ From b98560aa1019871a0fb94b793d827f437ac878d5 Mon Sep 17 00:00:00 2001 From: John Cuthbertson Date: Wed, 7 Apr 2010 11:43:53 -0700 Subject: [PATCH 21/91] 6940894: G1: assert(new_obj != 0 || ... "should be forwarded") for compaction tests Humongous regions may contain multiple objects as a result of being retained as to-space from a previous GC and then re-used as to-space after being tagged as humongous. These changes include a check that causes retained to-space regions that are now tagged as humongous to be disregarded and a new to-space region allocated. Reviewed-by: tonyp, iveresov --- .../gc_implementation/g1/g1CollectedHeap.cpp | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp index 73d269895d4..1734fe0bafc 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp @@ -2942,6 +2942,9 @@ void G1CollectedHeap::set_gc_alloc_region(int purpose, HeapRegion* r) { // the same region assert(r == NULL || !r->is_gc_alloc_region(), "shouldn't already be a GC alloc region"); + assert(r == NULL || !r->isHumongous(), + "humongous regions shouldn't be used as GC alloc regions"); + HeapWord* original_top = NULL; if (r != NULL) original_top = r->top(); @@ -3084,12 +3087,17 @@ void G1CollectedHeap::get_gc_alloc_regions() { if (alloc_region->in_collection_set() || alloc_region->top() == alloc_region->end() || - alloc_region->top() == alloc_region->bottom()) { - // we will discard the current GC alloc region if it's in the - // collection set (it can happen!), if it's already full (no - // point in using it), or if it's empty (this means that it - // was emptied during a cleanup and it should be on the free - // list now). + alloc_region->top() == alloc_region->bottom() || + alloc_region->isHumongous()) { + // we will discard the current GC alloc region if + // * it's in the collection set (it can happen!), + // * it's already full (no point in using it), + // * it's empty (this means that it was emptied during + // a cleanup and it should be on the free list now), or + // * it's humongous (this means that it was emptied + // during a cleanup and was added to the free list, but + // has been subseqently used to allocate a humongous + // object that may be less than the region size). alloc_region = NULL; } From f6934fd3b7229dd779556680ea0cdee2f3627360 Mon Sep 17 00:00:00 2001 From: Vladimir Kozlov Date: Wed, 7 Apr 2010 12:39:27 -0700 Subject: [PATCH 22/91] 6940726: Use BIS instruction for allocation prefetch on Sparc Use BIS instruction for allocation prefetch on Sparc Reviewed-by: twisti --- hotspot/src/cpu/sparc/vm/sparc.ad | 21 ++++++++++ hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp | 16 ++++++-- .../vm/memory/threadLocalAllocBuffer.hpp | 17 +++++++- hotspot/src/share/vm/opto/macro.cpp | 41 ++++++++++++++++++- hotspot/src/share/vm/opto/memnode.hpp | 2 +- hotspot/src/share/vm/runtime/globals.hpp | 3 +- 6 files changed, 93 insertions(+), 7 deletions(-) diff --git a/hotspot/src/cpu/sparc/vm/sparc.ad b/hotspot/src/cpu/sparc/vm/sparc.ad index 0243793479a..7f495a9569f 100644 --- a/hotspot/src/cpu/sparc/vm/sparc.ad +++ b/hotspot/src/cpu/sparc/vm/sparc.ad @@ -471,6 +471,9 @@ extern bool can_branch_register( Node *bol, Node *cmp ); source %{ #define __ _masm. +// Block initializing store +#define ASI_BLK_INIT_QUAD_LDD_P 0xE2 + // tertiary op of a LoadP or StoreP encoding #define REGP_OP true @@ -6147,6 +6150,7 @@ instruct prefetchr( memory mem ) %{ %} instruct prefetchw( memory mem ) %{ + predicate(AllocatePrefetchStyle != 3 ); match( PrefetchWrite mem ); ins_cost(MEMORY_REF_COST); @@ -6156,6 +6160,23 @@ instruct prefetchw( memory mem ) %{ ins_pipe(iload_mem); %} +// Use BIS instruction to prefetch. +instruct prefetchw_bis( memory mem ) %{ + predicate(AllocatePrefetchStyle == 3); + match( PrefetchWrite mem ); + ins_cost(MEMORY_REF_COST); + + format %{ "STXA G0,$mem\t! // Block initializing store" %} + ins_encode %{ + Register base = as_Register($mem$$base); + int disp = $mem$$disp; + if (disp != 0) { + __ add(base, AllocatePrefetchStepSize, base); + } + __ stxa(G0, base, G0, ASI_BLK_INIT_QUAD_LDD_P); + %} + ins_pipe(istore_mem_reg); +%} //----------Store Instructions------------------------------------------------- // Store Byte diff --git a/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp b/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp index fb0cfdc5ea0..9458c1c012f 100644 --- a/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp @@ -86,9 +86,19 @@ void VM_Version::initialize() { if (FLAG_IS_DEFAULT(InteriorEntryAlignment)) { FLAG_SET_DEFAULT(InteriorEntryAlignment, 4); } - if (is_niagara1_plus() && FLAG_IS_DEFAULT(AllocatePrefetchDistance)) { - // Use smaller prefetch distance on N2 - FLAG_SET_DEFAULT(AllocatePrefetchDistance, 256); + if (is_niagara1_plus()) { + if (AllocatePrefetchStyle > 0 && FLAG_IS_DEFAULT(AllocatePrefetchStyle)) { + // Use BIS instruction for allocation prefetch. + FLAG_SET_DEFAULT(AllocatePrefetchStyle, 3); + if (FLAG_IS_DEFAULT(AllocatePrefetchDistance)) { + // Use smaller prefetch distance on N2 with BIS + FLAG_SET_DEFAULT(AllocatePrefetchDistance, 64); + } + } + if (AllocatePrefetchStyle != 3 && FLAG_IS_DEFAULT(AllocatePrefetchDistance)) { + // Use different prefetch distance without BIS + FLAG_SET_DEFAULT(AllocatePrefetchDistance, 256); + } } #endif if (FLAG_IS_DEFAULT(OptoLoopAlignment)) { diff --git a/hotspot/src/share/vm/memory/threadLocalAllocBuffer.hpp b/hotspot/src/share/vm/memory/threadLocalAllocBuffer.hpp index 8007cb497a5..0b903ffa5a9 100644 --- a/hotspot/src/share/vm/memory/threadLocalAllocBuffer.hpp +++ b/hotspot/src/share/vm/memory/threadLocalAllocBuffer.hpp @@ -111,7 +111,22 @@ public: // Allocate size HeapWords. The memory is NOT initialized to zero. inline HeapWord* allocate(size_t size); - static size_t alignment_reserve() { return align_object_size(typeArrayOopDesc::header_size(T_INT)); } + + // Reserve space at the end of TLAB + static size_t end_reserve() { + int reserve_size = typeArrayOopDesc::header_size(T_INT); + if (AllocatePrefetchStyle == 3) { + // BIS is used to prefetch - we need a space for it. + // +1 for rounding up to next cache line +1 to be safe + int lines = AllocatePrefetchLines + 2; + int step_size = AllocatePrefetchStepSize; + int distance = AllocatePrefetchDistance; + int prefetch_end = (distance + step_size*lines)/(int)HeapWordSize; + reserve_size = MAX2(reserve_size, prefetch_end); + } + return reserve_size; + } + static size_t alignment_reserve() { return align_object_size(end_reserve()); } static size_t alignment_reserve_in_bytes() { return alignment_reserve() * HeapWordSize; } // Return tlab size or remaining space in eden such that the diff --git a/hotspot/src/share/vm/opto/macro.cpp b/hotspot/src/share/vm/opto/macro.cpp index 2fdc335b918..32046b07ad7 100644 --- a/hotspot/src/share/vm/opto/macro.cpp +++ b/hotspot/src/share/vm/opto/macro.cpp @@ -1487,11 +1487,11 @@ Node* PhaseMacroExpand::prefetch_allocation(Node* i_o, Node*& needgc_false, Node*& contended_phi_rawmem, Node* old_eden_top, Node* new_eden_top, Node* length) { + enum { fall_in_path = 1, pf_path = 2 }; if( UseTLAB && AllocatePrefetchStyle == 2 ) { // Generate prefetch allocation with watermark check. // As an allocation hits the watermark, we will prefetch starting // at a "distance" away from watermark. - enum { fall_in_path = 1, pf_path = 2 }; Node *pf_region = new (C, 3) RegionNode(3); Node *pf_phi_rawmem = new (C, 3) PhiNode( pf_region, Type::MEMORY, @@ -1570,6 +1570,45 @@ Node* PhaseMacroExpand::prefetch_allocation(Node* i_o, Node*& needgc_false, needgc_false = pf_region; contended_phi_rawmem = pf_phi_rawmem; i_o = pf_phi_abio; + } else if( UseTLAB && AllocatePrefetchStyle == 3 ) { + // Insert a prefetch for each allocation only on the fast-path + Node *pf_region = new (C, 3) RegionNode(3); + Node *pf_phi_rawmem = new (C, 3) PhiNode( pf_region, Type::MEMORY, + TypeRawPtr::BOTTOM ); + + // Generate several prefetch instructions only for arrays. + uint lines = (length != NULL) ? AllocatePrefetchLines : 1; + uint step_size = AllocatePrefetchStepSize; + uint distance = AllocatePrefetchDistance; + + // Next cache address. + Node *cache_adr = new (C, 4) AddPNode(old_eden_top, old_eden_top, + _igvn.MakeConX(distance)); + transform_later(cache_adr); + cache_adr = new (C, 2) CastP2XNode(needgc_false, cache_adr); + transform_later(cache_adr); + Node* mask = _igvn.MakeConX(~(intptr_t)(step_size-1)); + cache_adr = new (C, 3) AndXNode(cache_adr, mask); + transform_later(cache_adr); + cache_adr = new (C, 2) CastX2PNode(cache_adr); + transform_later(cache_adr); + + // Prefetch + Node *prefetch = new (C, 3) PrefetchWriteNode( contended_phi_rawmem, cache_adr ); + prefetch->set_req(0, needgc_false); + transform_later(prefetch); + contended_phi_rawmem = prefetch; + Node *prefetch_adr; + distance = step_size; + for ( uint i = 1; i < lines; i++ ) { + prefetch_adr = new (C, 4) AddPNode( cache_adr, cache_adr, + _igvn.MakeConX(distance) ); + transform_later(prefetch_adr); + prefetch = new (C, 3) PrefetchWriteNode( contended_phi_rawmem, prefetch_adr ); + transform_later(prefetch); + distance += step_size; + contended_phi_rawmem = prefetch; + } } else if( AllocatePrefetchStyle > 0 ) { // Insert a prefetch for each allocation only on the fast-path Node *prefetch_adr; diff --git a/hotspot/src/share/vm/opto/memnode.hpp b/hotspot/src/share/vm/opto/memnode.hpp index 918a8353310..86ee853b5ae 100644 --- a/hotspot/src/share/vm/opto/memnode.hpp +++ b/hotspot/src/share/vm/opto/memnode.hpp @@ -1244,5 +1244,5 @@ public: virtual int Opcode() const; virtual uint ideal_reg() const { return NotAMachineReg; } virtual uint match_edge(uint idx) const { return idx==2; } - virtual const Type *bottom_type() const { return Type::ABIO; } + virtual const Type *bottom_type() const { return ( AllocatePrefetchStyle == 3 ) ? Type::MEMORY : Type::ABIO; } }; diff --git a/hotspot/src/share/vm/runtime/globals.hpp b/hotspot/src/share/vm/runtime/globals.hpp index b4991f62dd1..861d89cb699 100644 --- a/hotspot/src/share/vm/runtime/globals.hpp +++ b/hotspot/src/share/vm/runtime/globals.hpp @@ -2708,7 +2708,8 @@ class CommandLineFlags { product(intx, AllocatePrefetchStyle, 1, \ "0 = no prefetch, " \ "1 = prefetch instructions for each allocation, " \ - "2 = use TLAB watermark to gate allocation prefetch") \ + "2 = use TLAB watermark to gate allocation prefetch, " \ + "3 = use BIS instruction on Sparc for allocation prefetch") \ \ product(intx, AllocatePrefetchDistance, -1, \ "Distance to prefetch ahead of allocation pointer") \ From a0d85f3139ef2497330ee09c26ed9793e7014d0a Mon Sep 17 00:00:00 2001 From: Valerie Peng Date: Wed, 7 Apr 2010 17:20:11 -0700 Subject: [PATCH 23/91] 6918573: sun.security.pkcs11.P11RSACipher.finalize() is a scalability blocker Removed the finalize() methods and use PhantomReference in Session to do auto clean up. Reviewed-by: wetmore --- .../sun/security/pkcs11/P11Cipher.java | 15 +--- .../sun/security/pkcs11/P11Digest.java | 14 +--- .../classes/sun/security/pkcs11/P11Key.java | 23 +++--- .../classes/sun/security/pkcs11/P11Mac.java | 14 +--- .../sun/security/pkcs11/P11RSACipher.java | 14 +--- .../sun/security/pkcs11/P11Signature.java | 13 ---- .../classes/sun/security/pkcs11/Session.java | 78 ++++++++++++++++++- .../sun/security/pkcs11/SessionManager.java | 66 +++++++--------- 8 files changed, 122 insertions(+), 115 deletions(-) diff --git a/jdk/src/share/classes/sun/security/pkcs11/P11Cipher.java b/jdk/src/share/classes/sun/security/pkcs11/P11Cipher.java index f5da56bec64..ab3eb96dfb8 100644 --- a/jdk/src/share/classes/sun/security/pkcs11/P11Cipher.java +++ b/jdk/src/share/classes/sun/security/pkcs11/P11Cipher.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -192,7 +192,6 @@ final class P11Cipher extends CipherSpi { // should not happen throw new ProviderException(nspe); } - session = token.getOpSession(); } protected void engineSetMode(String mode) throws NoSuchAlgorithmException { @@ -847,18 +846,6 @@ final class P11Cipher extends CipherSpi { return n; } - @Override - protected void finalize() throws Throwable { - try { - if ((session != null) && token.isValid()) { - cancelOperation(); - session = token.releaseSession(session); - } - } finally { - super.finalize(); - } - } - private final void bufferInputBytes(byte[] in, int inOfs, int len) { System.arraycopy(in, inOfs, padBuffer, padBufferLen, len); padBufferLen += len; diff --git a/jdk/src/share/classes/sun/security/pkcs11/P11Digest.java b/jdk/src/share/classes/sun/security/pkcs11/P11Digest.java index e9e6964fd47..fb4629c852d 100644 --- a/jdk/src/share/classes/sun/security/pkcs11/P11Digest.java +++ b/jdk/src/share/classes/sun/security/pkcs11/P11Digest.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -308,16 +308,4 @@ final class P11Digest extends MessageDigestSpi { throw new ProviderException("update() failed", e); } } - - protected void finalize() throws Throwable { - try { - if ((session != null) && token.isValid()) { - cancelOperation(); - session = token.releaseSession(session); - } - } finally { - super.finalize(); - } - } - } diff --git a/jdk/src/share/classes/sun/security/pkcs11/P11Key.java b/jdk/src/share/classes/sun/security/pkcs11/P11Key.java index b3704299713..1b26f1e3e70 100644 --- a/jdk/src/share/classes/sun/security/pkcs11/P11Key.java +++ b/jdk/src/share/classes/sun/security/pkcs11/P11Key.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -85,7 +85,7 @@ abstract class P11Key implements Key { // flags indicating whether the key is a token object, sensitive, extractable final boolean tokenObject, sensitive, extractable; - // weak reference notification clean up for session keys + // phantom reference notification clean up for session keys private final SessionKeyRef sessionKeyRef; P11Key(String type, Session session, long keyID, String algorithm, @@ -1051,7 +1051,12 @@ abstract class P11Key implements Key { } } -final class SessionKeyRef extends WeakReference +/* + * NOTE: Must use PhantomReference here and not WeakReference + * otherwise the key maybe cleared before other objects which + * still use these keys during finalization such as SSLSocket. + */ +final class SessionKeyRef extends PhantomReference implements Comparable { private static ReferenceQueue refQueue = new ReferenceQueue(); @@ -1062,14 +1067,11 @@ final class SessionKeyRef extends WeakReference return refQueue; } - static final private int MAX_ITERATIONS = 2; - private static void drainRefQueueBounded() { - int iterations = 0; - while (iterations < MAX_ITERATIONS) { + while (true) { SessionKeyRef next = (SessionKeyRef) refQueue.poll(); - if (next != null) next.dispose(); - ++iterations; + if (next == null) break; + next.dispose(); } } @@ -1087,7 +1089,7 @@ final class SessionKeyRef extends WeakReference drainRefQueueBounded(); } - void dispose() { + private void dispose() { refList.remove(this); if (session.token.isValid()) { Session newSession = null; @@ -1097,6 +1099,7 @@ final class SessionKeyRef extends WeakReference } catch (PKCS11Exception e) { // ignore } finally { + this.clear(); session.token.releaseSession(newSession); session.removeObject(); } diff --git a/jdk/src/share/classes/sun/security/pkcs11/P11Mac.java b/jdk/src/share/classes/sun/security/pkcs11/P11Mac.java index ae37d696d93..deeb1631606 100644 --- a/jdk/src/share/classes/sun/security/pkcs11/P11Mac.java +++ b/jdk/src/share/classes/sun/security/pkcs11/P11Mac.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -263,16 +263,4 @@ final class P11Mac extends MacSpi { throw new ProviderException("update() failed", e); } } - - protected void finalize() throws Throwable { - try { - if ((session != null) && token.isValid()) { - cancelOperation(); - session = token.releaseSession(session); - } - } finally { - super.finalize(); - } - } - } diff --git a/jdk/src/share/classes/sun/security/pkcs11/P11RSACipher.java b/jdk/src/share/classes/sun/security/pkcs11/P11RSACipher.java index c3709ad5b13..f7b7aaf4b92 100644 --- a/jdk/src/share/classes/sun/security/pkcs11/P11RSACipher.java +++ b/jdk/src/share/classes/sun/security/pkcs11/P11RSACipher.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -485,18 +485,6 @@ final class P11RSACipher extends CipherSpi { int n = P11KeyFactory.convertKey(token, key, algorithm).keyLength(); return n; } - - protected void finalize() throws Throwable { - try { - if ((session != null) && token.isValid()) { - cancelOperation(); - session = token.releaseSession(session); - } - } finally { - super.finalize(); - } - } - } final class ConstructKeys { diff --git a/jdk/src/share/classes/sun/security/pkcs11/P11Signature.java b/jdk/src/share/classes/sun/security/pkcs11/P11Signature.java index b7c7f5f0e7c..c16c2459300 100644 --- a/jdk/src/share/classes/sun/security/pkcs11/P11Signature.java +++ b/jdk/src/share/classes/sun/security/pkcs11/P11Signature.java @@ -226,7 +226,6 @@ final class P11Signature extends SignatureSpi { this.buffer = buffer; this.digestOID = digestOID; this.md = md; - session = token.getOpSession(); } private void ensureInitialized() { @@ -732,16 +731,4 @@ final class P11Signature extends SignatureSpi { throws InvalidParameterException { throw new UnsupportedOperationException("getParameter() not supported"); } - - protected void finalize() throws Throwable { - try { - if ((session != null) && token.isValid()) { - cancelOperation(); - session = token.releaseSession(session); - } - } finally { - super.finalize(); - } - } - } diff --git a/jdk/src/share/classes/sun/security/pkcs11/Session.java b/jdk/src/share/classes/sun/security/pkcs11/Session.java index 64e216bf38d..c5dd04455aa 100644 --- a/jdk/src/share/classes/sun/security/pkcs11/Session.java +++ b/jdk/src/share/classes/sun/security/pkcs11/Session.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -25,6 +25,7 @@ package sun.security.pkcs11; +import java.lang.ref.*; import java.util.*; import java.util.concurrent.atomic.AtomicInteger; @@ -59,11 +60,14 @@ final class Session implements Comparable { // this could lead to idle sessions being closed early, but that is harmless private long lastAccess; + private final SessionRef sessionRef; + Session(Token token, long id) { this.token = token; this.id = id; createdObjects = new AtomicInteger(); id(); + sessionRef = new SessionRef(this, id, token); } public int compareTo(Session other) { @@ -108,4 +112,76 @@ final class Session implements Comparable { return createdObjects.get() != 0; } + void close() { + if (hasObjects()) { + throw new ProviderException( + "Internal error: close session with active objects"); + } + sessionRef.dispose(); + } +} + +/* + * NOTE: Use PhantomReference here and not WeakReference + * otherwise the sessions maybe closed before other objects + * which are still being finalized. + */ +final class SessionRef extends PhantomReference + implements Comparable { + + private static ReferenceQueue refQueue = + new ReferenceQueue(); + + private static Set refList = + Collections.synchronizedSortedSet(new TreeSet()); + + static ReferenceQueue referenceQueue() { + return refQueue; + } + + static int totalCount() { + return refList.size(); + } + + private static void drainRefQueueBounded() { + while (true) { + SessionRef next = (SessionRef) refQueue.poll(); + if (next == null) break; + next.dispose(); + } + } + + // handle to the native session + private long id; + private Token token; + + SessionRef(Session session, long id, Token token) { + super(session, refQueue); + this.id = id; + this.token = token; + refList.add(this); + // TBD: run at some interval and not every time? + drainRefQueueBounded(); + } + + void dispose() { + refList.remove(this); + try { + token.p11.C_CloseSession(id); + } catch (PKCS11Exception e1) { + // ignore + } catch (ProviderException e2) { + // ignore + } finally { + this.clear(); + } + } + + public int compareTo(SessionRef other) { + if (this.id == other.id) { + return 0; + } else { + return (this.id < other.id) ? -1 : 1; + } + } } diff --git a/jdk/src/share/classes/sun/security/pkcs11/SessionManager.java b/jdk/src/share/classes/sun/security/pkcs11/SessionManager.java index caf18ffc076..aed0264dd2d 100644 --- a/jdk/src/share/classes/sun/security/pkcs11/SessionManager.java +++ b/jdk/src/share/classes/sun/security/pkcs11/SessionManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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,10 +51,12 @@ import static sun.security.pkcs11.wrapper.PKCS11Constants.*; * number of such sessions low. Note that we occasionally want to explicitly * close a session, see P11Signature. * - * NOTE that all sessions obtained from this class MUST be returned using - * either releaseSession() or closeSession() using a finally block or a - * finalizer where appropriate. Otherwise, they will be "lost", i.e. there - * will be a resource leak eventually leading to exhaustion. + * NOTE that sessions obtained from this class SHOULD be returned using + * either releaseSession() or closeSession() using a finally block when + * not needed anymore. Otherwise, they will be left for cleanup via the + * PhantomReference mechanism when GC kicks in, but it's best not to rely + * on that since GC may not run timely enough since the native PKCS11 library + * is also consuming memory. * * Note that sessions are automatically closed when they are not used for a * period of time, see Session. @@ -74,9 +76,6 @@ final class SessionManager { // maximum number of sessions to open with this token private final int maxSessions; - // total number of active sessions - private int activeSessions; - // pool of available object sessions private final Pool objSessions; @@ -116,6 +115,11 @@ final class SessionManager { return (maxSessions <= DEFAULT_MAX_SESSIONS); } + // returns the total number of active sessions + int totalSessionCount() { + return SessionRef.totalCount(); + } + synchronized Session getObjSession() throws PKCS11Exception { Session session = objSessions.poll(); if (session != null) { @@ -136,7 +140,8 @@ final class SessionManager { } // create a new session rather than re-using an obj session // that avoids potential expensive cancels() for Signatures & RSACipher - if (activeSessions < maxSessions) { + if (maxSessions == Integer.MAX_VALUE || + totalSessionCount() < maxSessions) { session = openSession(); return ensureValid(session); } @@ -159,14 +164,10 @@ final class SessionManager { if (debug != null) { String location = new Exception().getStackTrace()[2].toString(); System.out.println("Killing session (" + location + ") active: " - + activeSessions); - } - try { - closeSession(session); - return null; - } catch (PKCS11Exception e) { - throw new ProviderException(e); + + totalSessionCount()); } + closeSession(session); + return null; } synchronized Session releaseSession(Session session) { @@ -187,7 +188,8 @@ final class SessionManager { return; } if (debug != null) { - System.out.println("Demoting session, active: " + activeSessions); + System.out.println("Demoting session, active: " + + totalSessionCount()); } boolean present = objSessions.remove(session); if (present == false) { @@ -199,16 +201,17 @@ final class SessionManager { } private Session openSession() throws PKCS11Exception { - if (activeSessions >= maxSessions) { + if ((maxSessions != Integer.MAX_VALUE) && + (totalSessionCount() >= maxSessions)) { throw new ProviderException("No more sessions available"); } long id = token.p11.C_OpenSession (token.provider.slotID, openSessionFlags, null, null); Session session = new Session(token, id); - activeSessions++; if (debug != null) { - if (activeSessions > maxActiveSessions) { - maxActiveSessions = activeSessions; + int currTotal = totalSessionCount(); + if (currTotal > maxActiveSessions) { + maxActiveSessions = currTotal; if (maxActiveSessions % 10 == 0) { System.out.println("Open sessions: " + maxActiveSessions); } @@ -217,13 +220,8 @@ final class SessionManager { return session; } - private void closeSession(Session session) throws PKCS11Exception { - if (session.hasObjects()) { - throw new ProviderException - ("Internal error: close session with active objects"); - } - token.p11.C_CloseSession(session.id()); - activeSessions--; + private void closeSession(Session session) { + session.close(); } private static final class Pool { @@ -267,28 +265,20 @@ final class SessionManager { } Collections.sort(pool); int i = 0; - PKCS11Exception exc = null; while (i < n - 1) { // always keep at least 1 session open oldestSession = pool.get(i); if (oldestSession.isLive(time)) { break; } i++; - try { - mgr.closeSession(oldestSession); - } catch (PKCS11Exception e) { - exc = e; - } + mgr.closeSession(oldestSession); } if (debug != null) { System.out.println("Closing " + i + " idle sessions, active: " - + mgr.activeSessions); + + mgr.totalSessionCount()); } List subList = pool.subList(0, i); subList.clear(); - if (exc != null) { - throw new ProviderException(exc); - } } } From 4d0664b4273005e80e322323437339c7bed1481f Mon Sep 17 00:00:00 2001 From: Christian Thalinger Date: Thu, 8 Apr 2010 10:55:40 +0200 Subject: [PATCH 24/91] 6941529: SharedRuntime::raw_exception_handler_for_return_address must reset thread MethodHandle flag During testing a bug was hit when an exception returned to the interpreter and the SP was wrong. Reviewed-by: kvn, never --- hotspot/src/cpu/x86/vm/c1_Runtime1_x86.cpp | 2 +- hotspot/src/cpu/x86/vm/runtime_x86_32.cpp | 4 ++-- hotspot/src/cpu/x86/vm/sharedRuntime_x86_64.cpp | 4 ++-- hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp | 2 +- hotspot/src/share/vm/opto/runtime.cpp | 2 +- hotspot/src/share/vm/runtime/sharedRuntime.cpp | 7 +++++-- hotspot/src/share/vm/runtime/thread.hpp | 8 ++++---- 7 files changed, 16 insertions(+), 13 deletions(-) diff --git a/hotspot/src/cpu/x86/vm/c1_Runtime1_x86.cpp b/hotspot/src/cpu/x86/vm/c1_Runtime1_x86.cpp index e3bf6fdae54..ff3e506acf5 100644 --- a/hotspot/src/cpu/x86/vm/c1_Runtime1_x86.cpp +++ b/hotspot/src/cpu/x86/vm/c1_Runtime1_x86.cpp @@ -781,7 +781,7 @@ void Runtime1::generate_unwind_exception(StubAssembler *sasm) { // Restore SP from BP if the exception PC is a MethodHandle call site. NOT_LP64(__ get_thread(thread);) - __ cmpl(Address(thread, JavaThread::is_method_handle_exception_offset()), 0); + __ cmpl(Address(thread, JavaThread::is_method_handle_return_offset()), 0); __ cmovptr(Assembler::notEqual, rsp, rbp); // continue at exception handler (return address removed) diff --git a/hotspot/src/cpu/x86/vm/runtime_x86_32.cpp b/hotspot/src/cpu/x86/vm/runtime_x86_32.cpp index 428d239d494..3c220d7f62c 100644 --- a/hotspot/src/cpu/x86/vm/runtime_x86_32.cpp +++ b/hotspot/src/cpu/x86/vm/runtime_x86_32.cpp @@ -115,8 +115,8 @@ void OptoRuntime::generate_exception_blob() { // rax: exception handler for given - // Restore SP from BP if the exception PC is a MethodHandle call. - __ cmpl(Address(rcx, JavaThread::is_method_handle_exception_offset()), 0); + // Restore SP from BP if the exception PC is a MethodHandle call site. + __ cmpl(Address(rcx, JavaThread::is_method_handle_return_offset()), 0); __ cmovptr(Assembler::notEqual, rsp, rbp); // We have a handler in rax, (could be deopt blob) diff --git a/hotspot/src/cpu/x86/vm/sharedRuntime_x86_64.cpp b/hotspot/src/cpu/x86/vm/sharedRuntime_x86_64.cpp index e09b91d387d..9fa01e4bdef 100644 --- a/hotspot/src/cpu/x86/vm/sharedRuntime_x86_64.cpp +++ b/hotspot/src/cpu/x86/vm/sharedRuntime_x86_64.cpp @@ -3328,8 +3328,8 @@ void OptoRuntime::generate_exception_blob() { // rax: exception handler - // Restore SP from BP if the exception PC is a MethodHandle call. - __ cmpl(Address(r15_thread, JavaThread::is_method_handle_exception_offset()), 0); + // Restore SP from BP if the exception PC is a MethodHandle call site. + __ cmpl(Address(r15_thread, JavaThread::is_method_handle_return_offset()), 0); __ cmovptr(Assembler::notEqual, rsp, rbp); // We have a handler in rax (could be deopt blob). diff --git a/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp b/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp index 68872420f31..ccb8bf0a5b1 100644 --- a/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp +++ b/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp @@ -430,7 +430,7 @@ class StubGenerator: public StubCodeGenerator { __ verify_oop(exception_oop); // Restore SP from BP if the exception PC is a MethodHandle call site. - __ cmpl(Address(thread, JavaThread::is_method_handle_exception_offset()), 0); + __ cmpl(Address(thread, JavaThread::is_method_handle_return_offset()), 0); __ cmovptr(Assembler::notEqual, rsp, rbp); // continue at exception handler (return address removed) diff --git a/hotspot/src/share/vm/opto/runtime.cpp b/hotspot/src/share/vm/opto/runtime.cpp index d293f05114a..c87d654c1b3 100644 --- a/hotspot/src/share/vm/opto/runtime.cpp +++ b/hotspot/src/share/vm/opto/runtime.cpp @@ -865,7 +865,7 @@ JRT_ENTRY_NO_ASYNC(address, OptoRuntime::handle_exception_C_helper(JavaThread* t thread->set_exception_stack_size(0); // Check if the exception PC is a MethodHandle call site. - thread->set_is_method_handle_exception(nm->is_method_handle_return(pc)); + thread->set_is_method_handle_return(nm->is_method_handle_return(pc)); } // Restore correct return pc. Was saved above. diff --git a/hotspot/src/share/vm/runtime/sharedRuntime.cpp b/hotspot/src/share/vm/runtime/sharedRuntime.cpp index d09579b7709..b2c5c43c1b3 100644 --- a/hotspot/src/share/vm/runtime/sharedRuntime.cpp +++ b/hotspot/src/share/vm/runtime/sharedRuntime.cpp @@ -259,13 +259,16 @@ JRT_END address SharedRuntime::raw_exception_handler_for_return_address(JavaThread* thread, address return_address) { assert(frame::verify_return_pc(return_address), "must be a return pc"); + // Reset MethodHandle flag. + thread->set_is_method_handle_return(false); + // the fastest case first CodeBlob* blob = CodeCache::find_blob(return_address); if (blob != NULL && blob->is_nmethod()) { nmethod* code = (nmethod*)blob; assert(code != NULL, "nmethod must be present"); // Check if the return address is a MethodHandle call site. - thread->set_is_method_handle_exception(code->is_method_handle_return(return_address)); + thread->set_is_method_handle_return(code->is_method_handle_return(return_address)); // native nmethods don't have exception handlers assert(!code->is_native_method(), "no exception handler"); assert(code->header_begin() != code->exception_begin(), "no exception handler"); @@ -292,7 +295,7 @@ address SharedRuntime::raw_exception_handler_for_return_address(JavaThread* thre nmethod* code = (nmethod*)blob; assert(code != NULL, "nmethod must be present"); // Check if the return address is a MethodHandle call site. - thread->set_is_method_handle_exception(code->is_method_handle_return(return_address)); + thread->set_is_method_handle_return(code->is_method_handle_return(return_address)); assert(code->header_begin() != code->exception_begin(), "no exception handler"); return code->exception_begin(); } diff --git a/hotspot/src/share/vm/runtime/thread.hpp b/hotspot/src/share/vm/runtime/thread.hpp index 49112fe23b7..8e65698cd0e 100644 --- a/hotspot/src/share/vm/runtime/thread.hpp +++ b/hotspot/src/share/vm/runtime/thread.hpp @@ -772,7 +772,7 @@ class JavaThread: public Thread { volatile address _exception_pc; // PC where exception happened volatile address _exception_handler_pc; // PC for handler of exception volatile int _exception_stack_size; // Size of frame where exception happened - volatile int _is_method_handle_exception; // True if the current exception PC is at a MethodHandle call. + volatile int _is_method_handle_return; // true (== 1) if the current exception PC is a MethodHandle call site. // support for compilation bool _is_compiling; // is true if a compilation is active inthis thread (one compilation per thread possible) @@ -1108,13 +1108,13 @@ class JavaThread: public Thread { int exception_stack_size() const { return _exception_stack_size; } address exception_pc() const { return _exception_pc; } address exception_handler_pc() const { return _exception_handler_pc; } - int is_method_handle_exception() const { return _is_method_handle_exception; } + bool is_method_handle_return() const { return _is_method_handle_return == 1; } void set_exception_oop(oop o) { _exception_oop = o; } void set_exception_pc(address a) { _exception_pc = a; } void set_exception_handler_pc(address a) { _exception_handler_pc = a; } void set_exception_stack_size(int size) { _exception_stack_size = size; } - void set_is_method_handle_exception(int value) { _is_method_handle_exception = value; } + void set_is_method_handle_return(bool value) { _is_method_handle_return = value ? 1 : 0; } // Stack overflow support inline size_t stack_available(address cur_sp); @@ -1188,7 +1188,7 @@ class JavaThread: public Thread { static ByteSize exception_pc_offset() { return byte_offset_of(JavaThread, _exception_pc ); } static ByteSize exception_handler_pc_offset() { return byte_offset_of(JavaThread, _exception_handler_pc); } static ByteSize exception_stack_size_offset() { return byte_offset_of(JavaThread, _exception_stack_size); } - static ByteSize is_method_handle_exception_offset() { return byte_offset_of(JavaThread, _is_method_handle_exception); } + static ByteSize is_method_handle_return_offset() { return byte_offset_of(JavaThread, _is_method_handle_return); } static ByteSize stack_guard_state_offset() { return byte_offset_of(JavaThread, _stack_guard_state ); } static ByteSize suspend_flags_offset() { return byte_offset_of(JavaThread, _suspend_flags ); } From fc76d07b409facaa30f4fb863d7e8cef3b6adaa9 Mon Sep 17 00:00:00 2001 From: Igor Veresov Date: Thu, 8 Apr 2010 12:13:07 -0700 Subject: [PATCH 25/91] 6942223: c1 64 bit fixes This fixes lir_cmp_l2i on x64 and sparc 64bit, and the debug info generation. Reviewed-by: never --- .../cpu/sparc/vm/c1_LIRAssembler_sparc.cpp | 4 ++++ hotspot/src/cpu/x86/vm/assembler_x86.cpp | 7 +++++++ .../src/cpu/x86/vm/c1_LIRAssembler_x86.cpp | 21 +++++++------------ hotspot/src/share/vm/c1/c1_LinearScan.cpp | 11 +++++++++- 4 files changed, 29 insertions(+), 14 deletions(-) diff --git a/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp b/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp index d6ee6af13c7..af970215024 100644 --- a/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp @@ -1728,9 +1728,13 @@ void LIR_Assembler::comp_fl2i(LIR_Code code, LIR_Opr left, LIR_Opr right, LIR_Op ShouldNotReachHere(); } } else if (code == lir_cmp_l2i) { +#ifdef _LP64 + __ lcmp(left->as_register_lo(), right->as_register_lo(), dst->as_register()); +#else __ lcmp(left->as_register_hi(), left->as_register_lo(), right->as_register_hi(), right->as_register_lo(), dst->as_register()); +#endif } else { ShouldNotReachHere(); } diff --git a/hotspot/src/cpu/x86/vm/assembler_x86.cpp b/hotspot/src/cpu/x86/vm/assembler_x86.cpp index f85c0c49a66..72086baee03 100644 --- a/hotspot/src/cpu/x86/vm/assembler_x86.cpp +++ b/hotspot/src/cpu/x86/vm/assembler_x86.cpp @@ -3365,6 +3365,13 @@ void Assembler::shrdl(Register dst, Register src) { #else // LP64 +void Assembler::set_byte_if_not_zero(Register dst) { + int enc = prefix_and_encode(dst->encoding(), true); + emit_byte(0x0F); + emit_byte(0x95); + emit_byte(0xE0 | enc); +} + // 64bit only pieces of the assembler // This should only be used by 64bit instructions that can use rip-relative // it cannot be used by instructions that want an immediate value. diff --git a/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp b/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp index 987a9de7d33..d88ce13e2c4 100644 --- a/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp +++ b/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp @@ -2690,19 +2690,14 @@ void LIR_Assembler::comp_fl2i(LIR_Code code, LIR_Opr left, LIR_Opr right, LIR_Op } else { assert(code == lir_cmp_l2i, "check"); #ifdef _LP64 - Register dest = dst->as_register(); - __ xorptr(dest, dest); - Label high, done; - __ cmpptr(left->as_register_lo(), right->as_register_lo()); - __ jcc(Assembler::equal, done); - __ jcc(Assembler::greater, high); - __ decrement(dest); - __ jmp(done); - __ bind(high); - __ increment(dest); - - __ bind(done); - + Label done; + Register dest = dst->as_register(); + __ cmpptr(left->as_register_lo(), right->as_register_lo()); + __ movl(dest, -1); + __ jccb(Assembler::less, done); + __ set_byte_if_not_zero(dest); + __ movzbl(dest, dest); + __ bind(done); #else __ lcmp2int(left->as_register_hi(), left->as_register_lo(), diff --git a/hotspot/src/share/vm/c1/c1_LinearScan.cpp b/hotspot/src/share/vm/c1/c1_LinearScan.cpp index 1012e3c7d6e..8460c65997e 100644 --- a/hotspot/src/share/vm/c1/c1_LinearScan.cpp +++ b/hotspot/src/share/vm/c1/c1_LinearScan.cpp @@ -2608,12 +2608,17 @@ int LinearScan::append_scope_value_for_operand(LIR_Opr opr, GrowableArrayis_double_xmm()) { assert(opr->fpu_regnrLo() == opr->fpu_regnrHi(), "assumed in calculation"); VMReg rname_first = opr->as_xmm_double_reg()->as_VMReg(); +# ifdef _LP64 + first = new LocationValue(Location::new_reg_loc(Location::dbl, rname_first)); + second = &_int_0_scope_value; +# else first = new LocationValue(Location::new_reg_loc(Location::normal, rname_first)); // %%% This is probably a waste but we'll keep things as they were for now if (true) { VMReg rname_second = rname_first->next(); second = new LocationValue(Location::new_reg_loc(Location::normal, rname_second)); } +# endif #endif } else if (opr->is_double_fpu()) { @@ -2639,13 +2644,17 @@ int LinearScan::append_scope_value_for_operand(LIR_Opr opr, GrowableArrayfpu_regname(opr->fpu_regnrHi()); - +#ifdef _LP64 + first = new LocationValue(Location::new_reg_loc(Location::dbl, rname_first)); + second = &_int_0_scope_value; +#else first = new LocationValue(Location::new_reg_loc(Location::normal, rname_first)); // %%% This is probably a waste but we'll keep things as they were for now if (true) { VMReg rname_second = rname_first->next(); second = new LocationValue(Location::new_reg_loc(Location::normal, rname_second)); } +#endif } else { ShouldNotReachHere(); From 5794ed41e6cce580d62c64f8db4a68a3b4b70221 Mon Sep 17 00:00:00 2001 From: Sean Mullan Date: Fri, 9 Apr 2010 07:21:46 -0700 Subject: [PATCH 26/91] 6909281: 6u19 b99(pit):Error loading first applet in browser session( both FF && IE, windows ): NPE is thrown Fix for 6633872 causes NPE due to uninitialised ProtectionDomain class Reviewed-by: andrew --- jdk/src/share/classes/sun/misc/SharedSecrets.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/jdk/src/share/classes/sun/misc/SharedSecrets.java b/jdk/src/share/classes/sun/misc/SharedSecrets.java index 7ebbe46e712..c9f50728860 100644 --- a/jdk/src/share/classes/sun/misc/SharedSecrets.java +++ b/jdk/src/share/classes/sun/misc/SharedSecrets.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2002-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,7 @@ import java.util.jar.JarFile; import java.io.Console; import java.io.File; import java.io.FileDescriptor; +import java.security.ProtectionDomain; /** A repository of "shared secrets", which are a mechanism for calling implementation-private methods in another package without @@ -121,6 +122,8 @@ public class SharedSecrets { public static JavaSecurityProtectionDomainAccess getJavaSecurityProtectionDomainAccess() { + if (javaSecurityProtectionDomainAccess == null) + unsafe.ensureClassInitialized(ProtectionDomain.class); return javaSecurityProtectionDomainAccess; } } From 36657229559f0cdb3c4a4d430587163999a6f2b1 Mon Sep 17 00:00:00 2001 From: Jonathan Gibbons Date: Fri, 9 Apr 2010 15:39:39 -0700 Subject: [PATCH 27/91] 6942649: add hidden option to identify location and version of javac classes Reviewed-by: darcy --- .../com/sun/tools/javac/main/Main.java | 43 ++++++++++++++ langtools/test/tools/javac/T6942649.java | 59 +++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 langtools/test/tools/javac/T6942649.java diff --git a/langtools/src/share/classes/com/sun/tools/javac/main/Main.java b/langtools/src/share/classes/com/sun/tools/javac/main/Main.java index 57b0219e7c3..562db51be0c 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/main/Main.java +++ b/langtools/src/share/classes/com/sun/tools/javac/main/Main.java @@ -28,6 +28,9 @@ package com.sun.tools.javac.main; import java.io.File; import java.io.IOException; import java.io.PrintWriter; +import java.net.URL; +import java.security.DigestInputStream; +import java.security.MessageDigest; import java.util.MissingResourceException; import com.sun.tools.javac.code.Source; @@ -281,6 +284,15 @@ public class Main { if (target.hasInvokedynamic()) { options.put("invokedynamic", "invokedynamic"); } + + // handle this here so it works even if no other options given + String showClass = options.get("showClass"); + if (showClass != null) { + if (showClass.equals("showClass")) // no value given for option + showClass = "com.sun.tools.javac.Main"; + showClass(showClass); + } + return filenames.toList(); } // where @@ -488,6 +500,37 @@ public class Main { ex.getCause().printStackTrace(); } + /** Display the location and checksum of a class. */ + void showClass(String className) { + out.println("javac: show class: " + className); + URL url = getClass().getResource('/' + className.replace('.', '/') + ".class"); + if (url == null) + out.println(" class not found"); + else { + out.println(" " + url); + try { + final String algorithm = "MD5"; + byte[] digest; + MessageDigest md = MessageDigest.getInstance(algorithm); + DigestInputStream in = new DigestInputStream(url.openStream(), md); + try { + byte[] buf = new byte[8192]; + int n; + do { n = in.read(buf); } while (n > 0); + digest = md.digest(); + } finally { + in.close(); + } + StringBuilder sb = new StringBuilder(); + for (byte b: digest) + sb.append(String.format("%02x", b)); + out.println(" " + algorithm + " checksum: " + sb); + } catch (Exception e) { + out.println(" cannot compute digest: " + e); + } + } + } + private JavaFileManager fileManager; /* ************************************************************************ diff --git a/langtools/test/tools/javac/T6942649.java b/langtools/test/tools/javac/T6942649.java new file mode 100644 index 00000000000..941ad90d050 --- /dev/null +++ b/langtools/test/tools/javac/T6942649.java @@ -0,0 +1,59 @@ +/* + * 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 + * 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 6942649 + * @summary add hidden option to identify location and version of javac classes + */ + +import java.io.*; + +public class T6942649 { + public static void main(String... args) throws Exception { + new T6942649().run(); + } + + void run() throws Exception { + test("-XDshowClass", "com.sun.tools.javac.Main"); + test("-XDshowClass=com.sun.tools.javac.util.Log", "com.sun.tools.javac.util.Log"); + } + + void test(String opt, String clazz) throws Exception { + System.err.println("test " + opt); + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + int rc = com.sun.tools.javac.Main.compile(new String[] { opt }, pw); + pw.close(); + String out = sw.toString(); + System.err.println("javac rc=" + rc + "\n" + out); + if (!out.contains(clazz)) + throw new Exception("class name not found in output"); + int lastDot = clazz.lastIndexOf("."); + if (!out.contains(clazz.substring(lastDot + 1) + ".class")) + throw new Exception("location of class not found in output"); + if (!out.contains("MD5 checksum: ")) + throw new Exception("checksum not found in output"); + } +} From 52e1e32cdbbf14560c22925795da642d950273ae Mon Sep 17 00:00:00 2001 From: Xue-Lei Andrew Fan Date: Sat, 10 Apr 2010 09:13:12 +0800 Subject: [PATCH 28/91] 6941936: Broken pipe error of test case DNSIdentities.java Reviewed-by: chegar --- .../HttpsURLConnection/DNSIdentities.java | 33 +++++++--- .../https/HttpsURLConnection/HttpsPost.java | 63 ++++++++++++------- .../IPAddressDNSIdentities.java | 23 +++++-- .../IPAddressIPIdentities.java | 25 ++++++-- .../HttpsURLConnection/IPIdentities.java | 25 ++++++-- .../https/HttpsURLConnection/Identities.java | 25 ++++++-- .../https/HttpsURLConnection/Redirect.java | 60 +++++++++++------- 7 files changed, 177 insertions(+), 77 deletions(-) diff --git a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/DNSIdentities.java b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/DNSIdentities.java index d8cdb2ea2c9..eddbd29e190 100644 --- a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/DNSIdentities.java +++ b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/DNSIdentities.java @@ -623,6 +623,11 @@ public class DNSIdentities { */ volatile static boolean serverReady = false; + /* + * Is the connection ready to close? + */ + volatile static boolean closeReady = false; + /* * Turn on SSL debugging? */ @@ -670,11 +675,14 @@ public class DNSIdentities { out.print("Testing\r\n"); out.flush(); } finally { - // close the socket - Thread.sleep(2000); - System.out.println("Server closing socket"); - sslSocket.close(); - serverReady = false; + // close the socket + while (!closeReady) { + Thread.sleep(50); + } + + System.out.println("Server closing socket"); + sslSocket.close(); + serverReady = false; } } @@ -704,12 +712,17 @@ public class DNSIdentities { URL url = new URL("https://localhost:" + serverPort+"/"); System.out.println("url is "+url.toString()); - http = (HttpsURLConnection)url.openConnection(); + try { + http = (HttpsURLConnection)url.openConnection(); - int respCode = http.getResponseCode(); - System.out.println("respCode = "+respCode); - - http.disconnect(); + int respCode = http.getResponseCode(); + System.out.println("respCode = "+respCode); + } finally { + if (http != null) { + http.disconnect(); + } + closeReady = true; + } } /* diff --git a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/HttpsPost.java b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/HttpsPost.java index 33ebfda5805..0e55c60eeab 100644 --- a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/HttpsPost.java +++ b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/HttpsPost.java @@ -60,6 +60,11 @@ public class HttpsPost { */ volatile static boolean serverReady = false; + /* + * Is the connection ready to close? + */ + volatile static boolean closeReady = false; + /* * Turn on SSL debugging? */ @@ -98,25 +103,34 @@ public class HttpsPost { serverReady = true; SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept(); - InputStream sslIS = sslSocket.getInputStream(); - OutputStream sslOS = sslSocket.getOutputStream(); - BufferedReader br = new BufferedReader(new InputStreamReader(sslIS)); - PrintStream ps = new PrintStream(sslOS); - // process HTTP POST request from client - System.out.println("status line: "+br.readLine()); - String msg = null; - while ((msg = br.readLine()) != null && msg.length() > 0); + try { + InputStream sslIS = sslSocket.getInputStream(); + OutputStream sslOS = sslSocket.getOutputStream(); + BufferedReader br = + new BufferedReader(new InputStreamReader(sslIS)); + PrintStream ps = new PrintStream(sslOS); - msg = br.readLine(); - if (msg.equals(postMsg)) { - ps.println("HTTP/1.1 200 OK\n\n"); - } else { - ps.println("HTTP/1.1 500 Not OK\n\n"); + // process HTTP POST request from client + System.out.println("status line: "+br.readLine()); + String msg = null; + while ((msg = br.readLine()) != null && msg.length() > 0); + + msg = br.readLine(); + if (msg.equals(postMsg)) { + ps.println("HTTP/1.1 200 OK\n\n"); + } else { + ps.println("HTTP/1.1 500 Not OK\n\n"); + } + ps.flush(); + + // close the socket + while (!closeReady) { + Thread.sleep(50); + } + } finally { + sslSocket.close(); + sslServerSocket.close(); } - ps.flush(); - Thread.sleep(2000); - sslSocket.close(); - sslServerSocket.close(); } /* @@ -144,12 +158,17 @@ public class HttpsPost { http.setRequestMethod("POST"); PrintStream ps = new PrintStream(http.getOutputStream()); - ps.println(postMsg); - ps.flush(); - if (http.getResponseCode() != 200) { - throw new RuntimeException("test Failed"); + try { + ps.println(postMsg); + ps.flush(); + if (http.getResponseCode() != 200) { + throw new RuntimeException("test Failed"); + } + } finally { + ps.close(); + http.disconnect(); + closeReady = true; } - ps.close(); } static class NameVerifier implements HostnameVerifier { diff --git a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/IPAddressDNSIdentities.java b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/IPAddressDNSIdentities.java index c4d48cc1080..4cc3a0f0554 100644 --- a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/IPAddressDNSIdentities.java +++ b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/IPAddressDNSIdentities.java @@ -623,6 +623,11 @@ public class IPAddressDNSIdentities { */ volatile static boolean serverReady = false; + /* + * Is the connection ready to close? + */ + volatile static boolean closeReady = false; + /* * Turn on SSL debugging? */ @@ -670,11 +675,14 @@ public class IPAddressDNSIdentities { out.print("Testing\r\n"); out.flush(); } finally { - // close the socket - Thread.sleep(2000); - System.out.println("Server closing socket"); - sslSocket.close(); - serverReady = false; + // close the socket + while (!closeReady) { + Thread.sleep(50); + } + + System.out.println("Server closing socket"); + sslSocket.close(); + serverReady = false; } } @@ -716,7 +724,10 @@ public class IPAddressDNSIdentities { // no subject alternative names matching IP address 127.0.0.1 found // that's the expected exception, ignore it. } finally { - http.disconnect(); + if (http != null) { + http.disconnect(); + } + closeReady = true; } } diff --git a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/IPAddressIPIdentities.java b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/IPAddressIPIdentities.java index 4bafaf24b51..d30efd81ebf 100644 --- a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/IPAddressIPIdentities.java +++ b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/IPAddressIPIdentities.java @@ -624,6 +624,11 @@ public class IPAddressIPIdentities { */ volatile static boolean serverReady = false; + /* + * Is the connection ready to close? + */ + volatile static boolean closeReady = false; + /* * Turn on SSL debugging? */ @@ -672,7 +677,10 @@ public class IPAddressIPIdentities { out.flush(); } finally { // close the socket - Thread.sleep(2000); + while (!closeReady) { + Thread.sleep(50); + } + System.out.println("Server closing socket"); sslSocket.close(); serverReady = false; @@ -705,12 +713,17 @@ public class IPAddressIPIdentities { URL url = new URL("https://127.0.0.1:" + serverPort+"/"); System.out.println("url is "+url.toString()); - http = (HttpsURLConnection)url.openConnection(); + try { + http = (HttpsURLConnection)url.openConnection(); - int respCode = http.getResponseCode(); - System.out.println("respCode = "+respCode); - - http.disconnect(); + int respCode = http.getResponseCode(); + System.out.println("respCode = "+respCode); + } finally { + if (http != null) { + http.disconnect(); + } + closeReady = true; + } } /* diff --git a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/IPIdentities.java b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/IPIdentities.java index 7e1d48fdfb1..10dc8d8301a 100644 --- a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/IPIdentities.java +++ b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/IPIdentities.java @@ -624,6 +624,11 @@ public class IPIdentities { */ volatile static boolean serverReady = false; + /* + * Is the connection ready to close? + */ + volatile static boolean closeReady = false; + /* * Turn on SSL debugging? */ @@ -672,7 +677,10 @@ public class IPIdentities { out.flush(); } finally { // close the socket - Thread.sleep(2000); + while (!closeReady) { + Thread.sleep(50); + } + System.out.println("Server closing socket"); sslSocket.close(); serverReady = false; @@ -705,12 +713,17 @@ public class IPIdentities { URL url = new URL("https://localhost:" + serverPort+"/"); System.out.println("url is "+url.toString()); - http = (HttpsURLConnection)url.openConnection(); + try { + http = (HttpsURLConnection)url.openConnection(); - int respCode = http.getResponseCode(); - System.out.println("respCode = "+respCode); - - http.disconnect(); + int respCode = http.getResponseCode(); + System.out.println("respCode = "+respCode); + } finally { + if (http != null) { + http.disconnect(); + } + closeReady = true; + } } /* diff --git a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/Identities.java b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/Identities.java index 0bde45f909d..79224b0ac70 100644 --- a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/Identities.java +++ b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/Identities.java @@ -623,6 +623,11 @@ public class Identities { */ volatile static boolean serverReady = false; + /* + * Is the connection ready to close? + */ + volatile static boolean closeReady = false; + /* * Turn on SSL debugging? */ @@ -671,7 +676,10 @@ public class Identities { out.flush(); } finally { // close the socket - Thread.sleep(2000); + while (!closeReady) { + Thread.sleep(50); + } + System.out.println("Server closing socket"); sslSocket.close(); serverReady = false; @@ -704,12 +712,17 @@ public class Identities { URL url = new URL("https://localhost:" + serverPort+"/"); System.out.println("url is "+url.toString()); - http = (HttpsURLConnection)url.openConnection(); + try { + http = (HttpsURLConnection)url.openConnection(); - int respCode = http.getResponseCode(); - System.out.println("respCode = "+respCode); - - http.disconnect(); + int respCode = http.getResponseCode(); + System.out.println("respCode = "+respCode); + } finally { + if (http != null) { + http.disconnect(); + } + closeReady = true; + } } /* diff --git a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/Redirect.java b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/Redirect.java index 838647ab76a..9321820f755 100644 --- a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/Redirect.java +++ b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/Redirect.java @@ -60,6 +60,11 @@ public class Redirect { */ volatile static boolean serverReady = false; + /* + * Is the connection ready to close? + */ + volatile static boolean closeReady = false; + /* * Turn on SSL debugging? */ @@ -98,24 +103,33 @@ public class Redirect { serverReady = true; SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept(); - InputStream sslIS = sslSocket.getInputStream(); - OutputStream sslOS = sslSocket.getOutputStream(); - BufferedReader br = new BufferedReader(new InputStreamReader(sslIS)); - PrintStream ps = new PrintStream(sslOS); - // process HTTP POST request from client - System.out.println("status line: "+br.readLine()); + try { + InputStream sslIS = sslSocket.getInputStream(); + OutputStream sslOS = sslSocket.getOutputStream(); + BufferedReader br = + new BufferedReader(new InputStreamReader(sslIS)); + PrintStream ps = new PrintStream(sslOS); - ps.println("HTTP/1.1 307 Redirect"); - ps.println("Location: https://localhost:"+serverPort+"/index.html\n\n"); - ps.flush(); - sslSocket = (SSLSocket) sslServerSocket.accept(); - sslOS = sslSocket.getOutputStream(); - ps = new PrintStream(sslOS); - ps.println("HTTP/1.1 200 Redirect succeeded\n\n"); - ps.flush(); - Thread.sleep(2000); - sslSocket.close(); - sslServerSocket.close(); + // process HTTP POST request from client + System.out.println("status line: "+br.readLine()); + + ps.println("HTTP/1.1 307 Redirect"); + ps.println("Location: https://localhost:" + serverPort + + "/index.html\n\n"); + ps.flush(); + sslSocket = (SSLSocket) sslServerSocket.accept(); + sslOS = sslSocket.getOutputStream(); + ps = new PrintStream(sslOS); + ps.println("HTTP/1.1 200 Redirect succeeded\n\n"); + ps.flush(); + } finally { + // close the socket + while (!closeReady) { + Thread.sleep(50); + } + sslSocket.close(); + sslServerSocket.close(); + } } /* @@ -139,10 +153,14 @@ public class Redirect { HttpsURLConnection.setDefaultHostnameVerifier( new NameVerifier()); HttpsURLConnection http = (HttpsURLConnection)url.openConnection(); - - System.out.println("response header: "+http.getHeaderField(0)); - if (http.getResponseCode() != 200) { - throw new RuntimeException("test Failed"); + try { + System.out.println("response header: "+http.getHeaderField(0)); + if (http.getResponseCode() != 200) { + throw new RuntimeException("test Failed"); + } + } finally { + http.disconnect(); + closeReady = true; } } From 144741e52c758e063a65c2888541a7ddc9ebb069 Mon Sep 17 00:00:00 2001 From: Yong Jeffrey Huang Date: Sun, 11 Apr 2010 23:21:23 -0700 Subject: [PATCH 29/91] 6875904: Java 7 message synchronization 1 Reviewed-by: ogino, faryad --- jdk/make/sun/launcher/Makefile | 2 +- .../rowset/RowSetResourceBundle_de.properties | 35 ++++++----- .../rowset/RowSetResourceBundle_es.properties | 39 +++++++----- .../rowset/RowSetResourceBundle_fr.properties | 59 +++++++++-------- .../rowset/RowSetResourceBundle_it.properties | 37 ++++++----- .../rowset/RowSetResourceBundle_ja.properties | 35 ++++++----- .../rowset/RowSetResourceBundle_ko.properties | 41 ++++++------ .../rowset/RowSetResourceBundle_sv.properties | 33 +++++----- .../RowSetResourceBundle_zh_CN.properties | 38 +++++------ .../RowSetResourceBundle_zh_TW.properties | 38 +++++------ .../plaf/basic/resources/basic_de.properties | 33 +++++----- .../plaf/basic/resources/basic_es.properties | 35 +++++------ .../plaf/basic/resources/basic_fr.properties | 29 +++++---- .../plaf/basic/resources/basic_it.properties | 39 ++++++------ .../plaf/basic/resources/basic_ja.properties | 41 ++++++------ .../plaf/basic/resources/basic_ko.properties | 41 ++++++------ .../plaf/basic/resources/basic_sv.properties | 41 ++++++------ .../basic/resources/basic_zh_CN.properties | 37 ++++++----- .../basic/resources/basic_zh_TW.properties | 37 ++++++----- .../launcher/resources/launcher_de.properties | 47 ++++++++++++++ .../launcher/resources/launcher_es.properties | 47 ++++++++++++++ .../launcher/resources/launcher_fr.properties | 47 ++++++++++++++ .../launcher/resources/launcher_it.properties | 47 ++++++++++++++ .../launcher/resources/launcher_ja.properties | 47 ++++++++++++++ .../launcher/resources/launcher_ko.properties | 47 ++++++++++++++ .../launcher/resources/launcher_sv.properties | 47 ++++++++++++++ .../resources/launcher_zh_CN.properties | 47 ++++++++++++++ .../resources/launcher_zh_TW.properties | 47 ++++++++++++++ .../management/resources/agent_de.properties | 7 +++ .../management/resources/agent_es.properties | 7 +++ .../management/resources/agent_fr.properties | 7 +++ .../management/resources/agent_it.properties | 7 +++ .../management/resources/agent_ja.properties | 9 ++- .../management/resources/agent_ko.properties | 7 +++ .../management/resources/agent_sv.properties | 7 +++ .../resources/agent_zh_CN.properties | 9 ++- .../resources/agent_zh_TW.properties | 7 +++ .../security/tools/JarSignerResources_ja.java | 53 ++++++++++++---- .../tools/JarSignerResources_zh_CN.java | 63 ++++++++++++++----- .../sun/security/util/AuthResources_de.java | 44 ++++++------- .../sun/security/util/AuthResources_es.java | 44 ++++++------- .../sun/security/util/AuthResources_fr.java | 44 ++++++------- .../sun/security/util/AuthResources_it.java | 45 +++++++------ .../sun/security/util/AuthResources_ja.java | 8 +-- .../sun/security/util/AuthResources_ko.java | 6 +- .../sun/security/util/AuthResources_sv.java | 47 +++++++------- .../security/util/AuthResources_zh_CN.java | 6 +- .../security/util/AuthResources_zh_TW.java | 6 +- .../resources/JConsoleResources_ja.java | 37 ++++++----- .../resources/JConsoleResources_zh_CN.java | 45 +++++++------ 50 files changed, 1102 insertions(+), 526 deletions(-) create mode 100644 jdk/src/share/classes/sun/launcher/resources/launcher_de.properties create mode 100644 jdk/src/share/classes/sun/launcher/resources/launcher_es.properties create mode 100644 jdk/src/share/classes/sun/launcher/resources/launcher_fr.properties create mode 100644 jdk/src/share/classes/sun/launcher/resources/launcher_it.properties create mode 100644 jdk/src/share/classes/sun/launcher/resources/launcher_ja.properties create mode 100644 jdk/src/share/classes/sun/launcher/resources/launcher_ko.properties create mode 100644 jdk/src/share/classes/sun/launcher/resources/launcher_sv.properties create mode 100644 jdk/src/share/classes/sun/launcher/resources/launcher_zh_CN.properties create mode 100644 jdk/src/share/classes/sun/launcher/resources/launcher_zh_TW.properties diff --git a/jdk/make/sun/launcher/Makefile b/jdk/make/sun/launcher/Makefile index 32b2ec7aa1b..2cc011aff04 100644 --- a/jdk/make/sun/launcher/Makefile +++ b/jdk/make/sun/launcher/Makefile @@ -38,7 +38,7 @@ AUTO_FILES_JAVA_DIRS = sun/launcher # Resources # LOCALE_SET_DEFINITION = jre -NEW_RESOURCE_BUNDLES_COMPILED_PROPERTIES = $(PKGDIR)/resources/launcher.properties +RESOURCE_BUNDLES_COMPILED_PROPERTIES = $(PKGDIR)/resources/launcher.properties # # Rules diff --git a/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_de.properties b/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_de.properties index d464b48d1c0..94c22ba0c17 100644 --- a/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_de.properties +++ b/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_de.properties @@ -1,5 +1,5 @@ # -# Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. +# Copyright 2005-2006 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 @@ -41,7 +41,7 @@ cachedrowsetimpl.intfail = getInt bei Wert ( {0} ) in Spalte {1} fehlgeschlagen cachedrowsetimpl.longfail = getLong bei Wert ( {0} ) in Spalte {1} fehlgeschlagen cachedrowsetimpl.floatfail = getFloat bei Wert ( {0} ) in Spalte {1} fehlgeschlagen cachedrowsetimpl.doublefail = getDouble bei Wert ( {0} ) in Spalte {1} fehlgeschlagen -cachedrowsetimpl.dtypemismt = Keine Datentyp\u00fcbereinstimmung +cachedrowsetimpl.dtypemismt = Keine Datentyp\u00fcbereinstimmung cachedrowsetimpl.datefail = getDate bei Wert ( {0} ) in Spalte {1} fehlgeschlagen; keine Konvertierung m\u00f6glich cachedrowsetimpl.timefail = getTime bei Wert ( {0} ) in Spalte {1} fehlgeschlagen; keine Konvertierung m\u00f6glich cachedrowsetimpl.posupdate = Positionierte Aktualisierungen werden nicht unterst\u00fctzt @@ -71,11 +71,13 @@ cachedrowsetimpl.unsetmatch1 = Spaltenname als Argument f\u00fcr unsetMatchColum cachedrowsetimpl.unsetmatch2 = Spalten-ID als Argument f\u00fcr unsetMatchColumn verwenden cachedrowsetimpl.numrows = Zeilenanzahl ist kleiner als Null oder kleiner als Abrufgr\u00f6\u00dfe cachedrowsetimpl.startpos = Startposition darf keinen Negativwert aufweisen -cachedrowsetimpl.nextpage = Daten m\u00fcssen vor dem Abrufen ausgef\u00fcllt werden +cachedrowsetimpl.nextpage = Daten m\u00fcssen vor dem Abrufen ausgef\u00fcllt werden cachedrowsetimpl.pagesize = Seitengr\u00f6\u00dfe darf nicht kleiner als Null sein cachedrowsetimpl.pagesize1 = Seitengr\u00f6\u00dfe darf nicht gr\u00f6\u00dfer als maxRows sein cachedrowsetimpl.fwdonly = ResultSet kann nur vorw\u00e4rts gerichtet sein cachedrowsetimpl.type = Typ : {0} +cachedrowsetimpl.opnotysupp = Vorgang noch nicht unterst\u00fctzt +cachedrowsetimpl.featnotsupp = Funktion nicht unterst\u00fctzt # WebRowSetImpl exceptions webrowsetimpl.nullhash = Instanz WebRowSetImpl konnte nicht instanziiert werden. Hash-Tabelle mit Nullwert f\u00fcr Konstruktor angegeben @@ -83,7 +85,7 @@ webrowsetimpl.invalidwr = Ung\u00fcltiger Schreiber webrowsetimpl.invalidrd = Ung\u00fcltiger Leser #FilteredRowSetImpl exceptions -filteredrowsetimpl.relative = relative: Ung\u00fcltiger Cursorvorgang +filteredrowsetimpl.relative = relative: Ung\u00fcltiger Cursorvorgang filteredrowsetimpl.absolute = absolute: Ung\u00fcltiger Cursorvorgang filteredrowsetimpl.notallowed = Kein zul\u00e4ssiger Wert im Filter @@ -95,6 +97,7 @@ joinrowsetimpl.notdefined = Kein definierter Verkn\u00fcpfungstyp joinrowsetimpl.notsupported = Verkn\u00fcpfungstyp wird nicht unterst\u00fctzt joinrowsetimpl.initerror = Initialisierungsfehler bei JoinRowSet joinrowsetimpl.genericerr = Generischer Anfangsfehler bei joinrowset +joinrowsetimpl.emptyrowset = Leeres Rowset kann nicht zu JoinRowSet hinzugef\u00fcgt werden #JdbcRowSetImpl exceptions jdbcrowsetimpl.invalstate = Ung\u00fcltiger Status @@ -108,22 +111,28 @@ jdbcrowsetimpl.unsetmatch = Spalten ohne definierten Wert entsprechen nicht Spal jdbcrowsetimpl.usecolname = Spaltenname als Argument f\u00fcr unsetMatchColumn verwenden jdbcrowsetimpl.usecolid = Spalten-ID als Argument f\u00fcr unsetMatchColumn verwenden jdbcrowsetimpl.resnotupd = ResultSet kann nicht aktualisiert werden +jdbcrowsetimpl.opnotysupp = Vorgang noch nicht unterst\u00fctzt +jdbcrowsetimpl.featnotsupp = Funktion nicht unterst\u00fctzt #CachedRowSetReader exceptions crsreader.connect = (JNDI) Verbindung nicht m\u00f6glich crsreader.paramtype = Parametertyp konnte nicht abgeleitet werden +crsreader.connecterr = Interner Fehler im RowSetReader: keine Verbindung oder kein Befehl +crsreader.datedetected = Datum gefunden +crsreader.caldetected = Kalender gefunden #CachedRowSetWriter exceptions crswriter.connect = Verbindung konnte nicht hergestellt werden crswriter.tname = writeData kann Tabellennamen nicht feststellen crswriter.params1 = Wert f\u00fcr params1: {0} crswriter.params2 = Wert f\u00fcr params2: {0} +crswriter.conflictsno = Konflikte w\u00e4hrend der Synchronisation #InsertRow exceptions insertrow.novalue = Es wurde kein Wert eingef\u00fcgt #SyncResolverImpl exceptions -syncrsimpl.indexval = Indexwert liegt au\u00dferhalb des Bereichs +syncrsimpl.indexval = Indexwert liegt au\u00dferhalb des Bereichs syncrsimpl.noconflict = Kein Konflikt bei dieser Spalte syncrsimpl.syncnotpos = Keine Synchronisation m\u00f6glich syncrsimpl.valtores = Aufzul\u00f6sender Wert befindet sich entweder in der Datenbank oder in cachedrowset @@ -132,31 +141,27 @@ syncrsimpl.valtores = Aufzul\u00f6sender Wert befindet sich entweder in der Date wrsxmlreader.invalidcp = Ende von RowSet wurde erreicht. Ung\u00fcltige Cursorposition wrsxmlreader.readxml = readXML: {0} wrsxmlreader.parseerr = ** Parsing-Fehler -wrsxmlreader.line = , Zeile -wrsxmlreader.uri = , uri #WebRowSetXmlWriter exceptions wrsxmlwriter.ioex = IOException: {0} -wrsxmlwriter.sqlex = SQLException: {0} +wrsxmlwriter.sqlex = SQLException: {0} wrsxmlwriter.failedwrite = Schreiben des Werts fehlgeschlagen wsrxmlwriter.notproper = Kein zul\u00e4ssiger Typ -#XmlReaderContentHandle exceptions -xmlrch.errmap = Fehler beim Definieren der Zuordnung: {0} -xmlrch.errmetadata = Fehler beim Definieren der Metadaten: {0} +#XmlReaderContentHandler exceptions +xmlrch.errmap = Fehler beim Definieren der Zuordnung: {0} +xmlrch.errmetadata = Fehler beim Definieren der Metadaten: {0} xmlrch.errinsert = Fehler beim Einf\u00fcgen der Werte: {0} xmlrch.errconstr = Fehler beim Erstellen der Zeile: {0} xmlrch.errdel = Fehler beim L\u00f6schen der Zeile: {0} xmlrch.errinsert = Fehler beim Erstellen der Einf\u00fcgezeile: {0} xmlrch.errinsdel = Fehler beim Erstellen der Einf\u00fcge- oder L\u00f6schzeile: {0} xmlrch.errupdate = Fehler beim Erstellen der Aktualisierungszeile: {0} -xmlrch errupdrow = Fehler beim Aktualisieren der Zeile: {0} +xmlrch.errupdrow = Fehler beim Aktualisieren der Zeile : {0} xmlrch.chars = Zeichen: xmlrch.badvalue = Fehlerhafter Wert; Eigenschaft darf nicht Null sein. xmlrch.badvalue1 = Fehlerhafter Wert; Metadaten d\u00fcrfen nicht Null sein. -xmlrch.warning = ** Warnung -xmlrch.line = , Zeile -xmlrch.uri = , uri +xmlrch.warning = ** Warnung #RIOptimisticProvider Exceptions riop.locking = Sperren der Klassifizierung wird nicht unterst\u00fctzt diff --git a/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_es.properties b/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_es.properties index ef464cb0d24..02b52ecb028 100644 --- a/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_es.properties +++ b/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_es.properties @@ -1,5 +1,5 @@ # -# Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. +# Copyright 2005-2006 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 @@ -32,7 +32,7 @@ cachedrowsetimpl.accfailed = Fallo de acceptChanges cachedrowsetimpl.invalidcp = Posici\u00f3n de cursor no v\u00e1lida cachedrowsetimpl.illegalop = Operaci\u00f3n no permitida en fila no insertada cachedrowsetimpl.clonefail = Fallo en la clonaci\u00f3n: {0} -cachedrowsetimpl.invalidcol = \u00cdndice de columna no v\u00e1lido +cachedrowsetimpl.invalidcol = \u00cdndice de columnas no v\u00e1lido cachedrowsetimpl.invalcolnm = Nombre de columna no v\u00e1lido cachedrowsetimpl.boolfail = Fallo de getBoolen en valor ( {0} ) de columna {1} cachedrowsetimpl.bytefail = Fallo de getByte en valor ( {0} ) de columna {1} @@ -41,7 +41,7 @@ cachedrowsetimpl.intfail = Fallo de getInt en valor ( {0} ) de columna {1} cachedrowsetimpl.longfail = Fallo de getLong en valor ( {0} ) de columna {1} cachedrowsetimpl.floatfail = Fallo de getFloat en valor ( {0} ) de columna {1} cachedrowsetimpl.doublefail = Fallo de getDouble en valor ( {0} ) de columna {1} -cachedrowsetimpl.dtypemismt = Discordancia entre tipos de datos +cachedrowsetimpl.dtypemismt = Discordancia entre tipos de datos cachedrowsetimpl.datefail = Fallo de getDate en valor ( {0} ) de columna {1} no es posible convertir cachedrowsetimpl.timefail = Fallo de getTime en valor ( {0} ) de columna {1} no es posible convertir cachedrowsetimpl.posupdate = Actualizaciones posicionadas incompatibles @@ -71,11 +71,13 @@ cachedrowsetimpl.unsetmatch1 = Usar nombre de columna como argumento en unsetMat cachedrowsetimpl.unsetmatch2 = Usar ID de columna como argumento en unsetMatchColumn cachedrowsetimpl.numrows = El n\u00famero de filas es menor que cero o menor que el tama\u00f1o obtenido cachedrowsetimpl.startpos = La posici\u00f3n de inicio no puede ser negativa -cachedrowsetimpl.nextpage = Rellenar datos antes de realizar llamada +cachedrowsetimpl.nextpage = Rellenar datos antes de realizar llamada cachedrowsetimpl.pagesize = El tama\u00f1o de p\u00e1gina no puede ser menor que cero cachedrowsetimpl.pagesize1 = El tama\u00f1o de p\u00e1gina no puede ser mayor que maxRows cachedrowsetimpl.fwdonly = ResultSet s\u00f3lo se reenv\u00eda cachedrowsetimpl.type = El tipo es: {0} +cachedrowsetimpl.opnotysupp = Operaci\u00f3n a\u00fan no admitida +cachedrowsetimpl.featnotsupp = Funci\u00f3n no admitida # WebRowSetImpl exceptions webrowsetimpl.nullhash = La instancia WebRowSetImpl no se puede crear. Hashtable nula proporcionada al constructor @@ -83,7 +85,7 @@ webrowsetimpl.invalidwr = Escritor no v\u00e1lido webrowsetimpl.invalidrd = Lector no v\u00e1lido #FilteredRowSetImpl exceptions -filteredrowsetimpl.relative = relative: Operaci\u00f3n de cursor no v\u00e1lida +filteredrowsetimpl.relative = relative: Operaci\u00f3n de cursor no v\u00e1lida filteredrowsetimpl.absolute = absolute: Operaci\u00f3n de cursor no v\u00e1lida filteredrowsetimpl.notallowed = El filtro no admite este valor @@ -95,6 +97,7 @@ joinrowsetimpl.notdefined = No es un tipo de uni\u00f3n definido joinrowsetimpl.notsupported = Este tipo de uni\u00f3n no es compatible joinrowsetimpl.initerror = Error de inicio de JoinRowSet joinrowsetimpl.genericerr = Error de Genric joinrowset intial +joinrowsetimpl.emptyrowset = No se puede a\u00f1adir un rowset vac\u00edo a este JoinRowSet #JdbcRowSetImpl exceptions jdbcrowsetimpl.invalstate = Estado no v\u00e1lido @@ -108,22 +111,28 @@ jdbcrowsetimpl.unsetmatch = Las columnas que se est\u00e1n desconfigurando no so jdbcrowsetimpl.usecolname = Usar nombre de columna como argumento en unsetMatchColumn jdbcrowsetimpl.usecolid = Usar ID de columna como argumento en unsetMatchColumn jdbcrowsetimpl.resnotupd = ResultSet no se puede actualizar +jdbcrowsetimpl.opnotysupp = Operaci\u00f3n a\u00fan no admitida +jdbcrowsetimpl.featnotsupp = Funci\u00f3n no admitida #CachedRowSetReader exceptions crsreader.connect = (JNDI) No se puede conectar crsreader.paramtype = No se puede deducir tipo de par\u00e1metro +crsreader.connecterr = Error interno en RowSetReader: no hay conexi\u00f3n ni comando +crsreader.datedetected = Fecha detectada +crsreader.caldetected = Calendario detectado #CachedRowSetWriter exceptions crswriter.connect = No se puede obtener una conexi\u00f3n crswriter.tname = writeData no puede determinar el nombre de tabla crswriter.params1 = Valor de params1: {0} crswriter.params2 = Valor de params2: {0} +crswriter.conflictsno = conflictos en la sincronizaci\u00f3n #InsertRow exceptions insertrow.novalue = No se ha insertado ning\u00fan valor #SyncResolverImpl exceptions -syncrsimpl.indexval = El valor de \u00edndice est\u00e1 fuera del intervalo +syncrsimpl.indexval = El valor de \u00edndice est\u00e1 fuera del intervalo syncrsimpl.noconflict = Esta columna no est\u00e1 en conflicto syncrsimpl.syncnotpos = No se puede sincronizar syncrsimpl.valtores = El valor que se debe definir puede estar en la base de datos o en cachedrowset @@ -132,31 +141,27 @@ syncrsimpl.valtores = El valor que se debe definir puede estar en la base de dat wrsxmlreader.invalidcp = Se ha llegado al final de RowSet. Posici\u00f3n de cursor no v\u00e1lida wrsxmlreader.readxml = readXML: {0} wrsxmlreader.parseerr = ** Error de an\u00e1lisis -wrsxmlreader.line = , l\u00ednea -wrsxmlreader.uri = , uri #WebRowSetXmlWriter exceptions wrsxmlwriter.ioex = IOException: {0} -wrsxmlwriter.sqlex = SQLException: {0} +wrsxmlwriter.sqlex = SQLException: {0} wrsxmlwriter.failedwrite = No se pudo escribir valor wsrxmlwriter.notproper = Tipo incorrecto -#XmlReaderContentHandle exceptions -xmlrch.errmap = Error al configurar la asignaci\u00f3n: {0} -xmlrch.errmetadata = Error al configurar metadatos: {0} -xmlrch.errinsert = Error al insertar valores: {0} +#XmlReaderContentHandler exceptions +xmlrch.errmap = Error al configurar la asignaci\u00f3n: {0} +xmlrch.errmetadata = Error al configurar metadatos: {0} +xmlrch.errinsert = Error al insertar los valores: {0} xmlrch.errconstr = Error al construir fila: {0} xmlrch.errdel = Error al borrar fila: {0} xmlrch.errinsert = Error al construir insertar fila: {0} xmlrch.errinsdel = Error al construir insertar o suprimir fila: {0} xmlrch.errupdate = Error al construir actualizar fila: {0} -xmlrch errupdrow = Error al actualizar fila: {0} +xmlrch.errupdrow = Error al actualizar la fila: {0} xmlrch.chars = caracteres: xmlrch.badvalue = Valor incorrecto; la propiedad no puede ser nula xmlrch.badvalue1 = Valor incorrecto; los metadatos no pueden ser nulos -xmlrch.warning = ** Advertencia -xmlrch.line = , l\u00ednea -xmlrch.uri = , uri +xmlrch.warning = ** Advertencia #RIOptimisticProvider Exceptions riop.locking = No se permite bloquear la clasificaci\u00f3n diff --git a/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_fr.properties b/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_fr.properties index 316bc8505ae..04b7ce2510a 100644 --- a/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_fr.properties +++ b/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_fr.properties @@ -1,5 +1,5 @@ # -# Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. +# Copyright 2005-2006 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 @@ -31,7 +31,7 @@ cachedrowsetimpl.invalidop = Op\u00e9ration non valide lors de l'insertion de li cachedrowsetimpl.accfailed = \u00c9chec de acceptChanges cachedrowsetimpl.invalidcp = Position du curseur non valide cachedrowsetimpl.illegalop = Op\u00e9ration non autoris\u00e9e sur ligne non ins\u00e9r\u00e9e -cachedrowsetimpl.clonefail = \u00c9chec du clonage : +cachedrowsetimpl.clonefail = \u00c9chec du clonage : {0} cachedrowsetimpl.invalidcol = Index de colonne non valide cachedrowsetimpl.invalcolnm = Nom de colonne non valide cachedrowsetimpl.boolfail = \u00c9chec de getBoolen pour la valeur ({0}) de la colonne {1} @@ -41,11 +41,11 @@ cachedrowsetimpl.intfail = \u00c9chec de getInt pour la valeur ({0}) de la colon cachedrowsetimpl.longfail = \u00c9chec de getLong pour la valeur ({0}) de la colonne {1} cachedrowsetimpl.floatfail = \u00c9chec de getFloat pour la valeur ({0}) de la colonne {1} cachedrowsetimpl.doublefail = \u00c9chec de getDouble pour la valeur ({0}) de la colonne {1} -cachedrowsetimpl.dtypemismt = Le type de donn\u00e9es ne correspond pas +cachedrowsetimpl.dtypemismt = Le type de donn\u00e9es ne correspond pas cachedrowsetimpl.datefail = \u00c9chec de getDate pour la valeur ({0}) de la colonne {1} - Aucune conversion possible cachedrowsetimpl.timefail = \u00c9chec de getDate pour la valeur ({0}) de la colonne {1} - Aucune conversion possible cachedrowsetimpl.posupdate = Mises \u00e0 jour choisies non prises en charge -cachedrowsetimpl.unableins = Instanciation impossible : +cachedrowsetimpl.unableins = Instanciation impossible : {0} cachedrowsetimpl.beforefirst = beforeFirst : op\u00e9ration de curseur non valide cachedrowsetimpl.first = First : op\u00e9ration de curseur non valide cachedrowsetimpl.last = last : TYPE_FORWARD_ONLY @@ -75,7 +75,9 @@ cachedrowsetimpl.nextpage = Entrez les donn\u00e9es avant l'appel cachedrowsetimpl.pagesize = La taille de la page ne peut pas \u00eatre n\u00e9gative cachedrowsetimpl.pagesize1 = La taille de la page ne peut pas \u00eatre sup\u00e9rieure \u00e0 maxRows cachedrowsetimpl.fwdonly = ResultSet est en avant seulement -cachedrowsetimpl.type = Le type est : +cachedrowsetimpl.type = Le type est : {0} +cachedrowsetimpl.opnotysupp = Op\u00e9ration encore non prise en charge +cachedrowsetimpl.featnotsupp = Fonction non prise en charge # WebRowSetImpl exceptions webrowsetimpl.nullhash = Impossible de cr\u00e9er une instance de WebRowSetImpl. Table de hachage null fournie au constructeur @@ -83,7 +85,7 @@ webrowsetimpl.invalidwr = G\u00e9n\u00e9rateur non valide webrowsetimpl.invalidrd = Lecteur non valide #FilteredRowSetImpl exceptions -filteredrowsetimpl.relative = relative : op\u00e9ration de curseur non valide +filteredrowsetimpl.relative = relative : op\u00e9ration de curseur non valide filteredrowsetimpl.absolute = absolute : op\u00e9ration de curseur non valide filteredrowsetimpl.notallowed = Cette valeur n'est pas autoris\u00e9e via le filtre @@ -95,6 +97,7 @@ joinrowsetimpl.notdefined = Ce n'est pas un type de jointure d\u00e9fini joinrowsetimpl.notsupported = Ce type de jointure n'est pas pris en charge joinrowsetimpl.initerror = Erreur d'initialisation de JoinRowSet joinrowsetimpl.genericerr = Erreur initiale g\u00e9n\u00e9rique de JoinRowSet +joinrowsetimpl.emptyrowset = Impossible d'ajouter un ensemble de lignes vide \u00e0 ce JoinRowSet #JdbcRowSetImpl exceptions jdbcrowsetimpl.invalstate = \u00c9tat non valide @@ -108,55 +111,57 @@ jdbcrowsetimpl.unsetmatch = Les colonnes non d\u00e9finies ne sont pas les m\u00 jdbcrowsetimpl.usecolname = Utilisez le nom de la colonne en argument de unsetMatchColumn jdbcrowsetimpl.usecolid = Utilisez l'ID de la colonne en argument de unsetMatchColumn jdbcrowsetimpl.resnotupd = La mise \u00e0 jour de ResultSet est interdite +jdbcrowsetimpl.opnotysupp = Op\u00e9ration encore non prise en charge +jdbcrowsetimpl.featnotsupp = Fonction non prise en charge #CachedRowSetReader exceptions crsreader.connect = Impossible de connecter (JNDI) crsreader.paramtype = Impossible de d\u00e9duire le type de param\u00e8tre +crsreader.connecterr = Erreur interne dans RowSetReader\u00a0: aucune connexion ou commande +crsreader.datedetected = Date d\u00e9tect\u00e9e +crsreader.caldetected = Calendrier d\u00e9tect\u00e9 #CachedRowSetWriter exceptions crswriter.connect = Impossible d'obtenir la connexion crswriter.tname = writeData ne peut pas d\u00e9terminer le nom du tableau -crswriter.params1 = Valeur de params1 : -crswriter.params2 = Valeur de params2 : +crswriter.params1 = Valeur de params1 : {0} +crswriter.params2 = Valeur de params2 : {0} +crswriter.conflictsno = Conflits au cours de la synchronisation #InsertRow exceptions insertrow.novalue = Aucune valeur n'a \u00e9t\u00e9 ins\u00e9r\u00e9e #SyncResolverImpl exceptions -syncrsimpl.indexval = Valeur d'index hors plage +syncrsimpl.indexval = Valeur d'index hors plage syncrsimpl.noconflict = Cette colonne n'est pas en conflit syncrsimpl.syncnotpos = La synchronisation est impossible syncrsimpl.valtores = La valeur \u00e0 r\u00e9soudre peut \u00eatre soit dans la base de donn\u00e9es soit dans CachedrowSet #WebRowSetXmlReader exception wrsxmlreader.invalidcp = Fin de RowSet atteinte. Position de curseur non valide -wrsxmlreader.readxml = readXML : +wrsxmlreader.readxml = readXML : {0} wrsxmlreader.parseerr = ** Erreur d'analyse -wrsxmlreader.line = , ligne -wrsxmlreader.uri = , uri #WebRowSetXmlWriter exceptions -wrsxmlwriter.ioex = IOException : -wrsxmlwriter.sqlex = SQLException : +wrsxmlwriter.ioex = IOException : {0} +wrsxmlwriter.sqlex = SQLException : {0} wrsxmlwriter.failedwrite = \u00c9chec d'\u00e9criture de la valeur wsrxmlwriter.notproper = N'est pas un type correct -#XmlReaderContentHandle exceptions -xmlrch.errmap = Erreur lors de la d\u00e9finition de Map : -xmlrch.errmetadata = Erreur lors de la d\u00e9finition des m\u00e9tadonn\u00e9es : -xmlrch.errinsert = Erreur lors de l'insertion des valeurs : -xmlrch.errconstr = Erreur lors de la construction de la ligne : -xmlrch.errdel = Erreur lors de la suppression de la ligne : -xmlrch.errinsert = Erreur lors de la construction de la ligne \u00e0 ins\u00e9rer : -xmlrch.errinsdel = Erreur lors de la construction de la ligne insdel : -xmlrch.errupdate = Erreur lors de la construction de la ligne \u00e0 mettre \u00e0 jour : -xmlrch errupdrow = Erreur lors de la mise \u00e0 jour de la ligne : +#XmlReaderContentHandler exceptions +xmlrch.errmap = Erreur lors de la d\u00e9finition de Map : {0} +xmlrch.errmetadata = Erreur lors de la d\u00e9finition des m\u00e9tadonn\u00e9es : {0} +xmlrch.errinsert = Erreur lors de l''insertion des valeurs : {0} +xmlrch.errconstr = Erreur lors de la construction de la ligne : {0} +xmlrch.errdel = Erreur lors de la suppression de la ligne : {0} +xmlrch.errinsert = Erreur lors de la construction de la ligne \u00e0 ins\u00e9rer : {0} +xmlrch.errinsdel = Erreur lors de la construction de la ligne insdel : {0} +xmlrch.errupdate = Erreur lors de la construction de la ligne \u00e0 mettre \u00e0 jour : {0} +xmlrch.errupdrow = Erreur lors de la mise \u00e0 jour de la ligne\u00a0: {0} xmlrch.chars = caract\u00e8res : xmlrch.badvalue = Valeur incorrecte ; null impossible pour cette propri\u00e9t\u00e9 xmlrch.badvalue1 = Valeur incorrecte ; null impossible pour ces m\u00e9tadonn\u00e9es -xmlrch.warning = ** Avertissement -xmlrch.line = , ligne -xmlrch.uri = , uri +xmlrch.warning = ** Avertissement #RIOptimisticProvider Exceptions riop.locking = Le verrouillage de la classification n'est pas pris en charge diff --git a/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_it.properties b/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_it.properties index 0f0ee8ab620..619c0cc34f6 100644 --- a/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_it.properties +++ b/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_it.properties @@ -1,5 +1,5 @@ # -# Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. +# Copyright 2005-2006 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 @@ -41,7 +41,7 @@ cachedrowsetimpl.intfail = getInt non riuscito per il valore ( {0} ) nella colon cachedrowsetimpl.longfail = getLong non riuscito per il valore ( {0} ) nella colonna {1} cachedrowsetimpl.floatfail = getFloat non riuscito per il valore ( {0} ) nella colonna {1} cachedrowsetimpl.doublefail = getDouble non riuscito per il valore ( {0} ) nella colonna {1} -cachedrowsetimpl.dtypemismt = Mancata corrispondenza dei tipi di dati +cachedrowsetimpl.dtypemismt = Mancata corrispondenza dei tipi di dati cachedrowsetimpl.datefail = getDate non riuscito per il valore ( {0} ) nella colonna {1}. Nessuna conversione disponibile. cachedrowsetimpl.timefail = getTime non riuscito per il valore ( {0} ) nella colonna {1}. Nessuna conversione disponibile. cachedrowsetimpl.posupdate = Aggiornamenti posizionati non supportati @@ -76,6 +76,8 @@ cachedrowsetimpl.pagesize = La dimensione della pagina non pu\u00f2 essere infer cachedrowsetimpl.pagesize1 = La dimensione della pagina non pu\u00f2 essere superiore a maxRows cachedrowsetimpl.fwdonly = ResultSet \u00e8 a solo inoltro cachedrowsetimpl.type = Il tipo \u00e8: {0} +cachedrowsetimpl.opnotysupp = Operazione non ancora supportata +cachedrowsetimpl.featnotsupp = Funzionalit\u00e0 non supportata # WebRowSetImpl exceptions webrowsetimpl.nullhash = Impossibile istanziare l'istanza WebRowSetImpl. Tabella hash nulla fornita al costruttore @@ -83,7 +85,7 @@ webrowsetimpl.invalidwr = Autore non valido webrowsetimpl.invalidrd = Lettore non valido #FilteredRowSetImpl exceptions -filteredrowsetimpl.relative = relative: operazione cursore non valida +filteredrowsetimpl.relative = relative: operazione cursore non valida filteredrowsetimpl.absolute = absolute: operazione cursore non valida filteredrowsetimpl.notallowed = Questo valore non \u00e8 consentito nel filtro @@ -95,6 +97,7 @@ joinrowsetimpl.notdefined = Non \u00e8 un tipo di unione definito joinrowsetimpl.notsupported = Questo tipo di unione non \u00e8 supportato joinrowsetimpl.initerror = Errore di inizializzazione di JoinRowSet joinrowsetimpl.genericerr = Errore iniziale di joinrowset generico +joinrowsetimpl.emptyrowset = Impossibile aggiungere un rowset al JoinRowSet corrente #JdbcRowSetImpl exceptions jdbcrowsetimpl.invalstate = Stato non valido @@ -108,22 +111,28 @@ jdbcrowsetimpl.unsetmatch = Le colonne rimosse non coincidono con le colonne imp jdbcrowsetimpl.usecolname = Utilizzare il nome di colonna come argomento per unsetMatchColumn jdbcrowsetimpl.usecolid = Utilizzare l'ID di colonna come argomento per unsetMatchColumn jdbcrowsetimpl.resnotupd = ResultSet non \u00e8 aggiornabile +jdbcrowsetimpl.opnotysupp = Operazione non ancora supportata +jdbcrowsetimpl.featnotsupp = Funzionalit\u00e0 non supportata #CachedRowSetReader exceptions crsreader.connect = (JNDI) Impossibile stabilire una connessione crsreader.paramtype = Impossibile dedurre il tipo di parametro +crsreader.connecterr = Errore interno in RowSetReader: nessuna connessione o comando disponibile +crsreader.datedetected = Data rilevata +crsreader.caldetected = Calendario rilevato #CachedRowSetWriter exceptions crswriter.connect = Impossibile stabilire una connessione crswriter.tname = writeData non riesce a determinare il nome di tabella crswriter.params1 = Valore dei parametri 1: {0} crswriter.params2 = Valore dei parametri 2: {0} +crswriter.conflictsno = conflitti durante la sincronizzazione #InsertRow exceptions insertrow.novalue = Non \u00e8 stato inserito alcun valore #SyncResolverImpl exceptions -syncrsimpl.indexval = Il valore di indice non rientra nell'intervallo +syncrsimpl.indexval = Il valore di indice non rientra nell'intervallo syncrsimpl.noconflict = Questa colonna non \u00e8 in conflitto syncrsimpl.syncnotpos = Impossibile eseguire la sincronizzazione syncrsimpl.valtores = Il valore da risolvere pu\u00f2 essere nel database o in cachedrowset @@ -132,31 +141,27 @@ syncrsimpl.valtores = Il valore da risolvere pu\u00f2 essere nel database o in c wrsxmlreader.invalidcp = Raggiunta la fine di RowSet. Posizione cursore non valida wrsxmlreader.readxml = readXML: {0} wrsxmlreader.parseerr = ** Errore di analisi -wrsxmlreader.line = , linea -wrsxmlreader.uri = , uri #WebRowSetXmlWriter exceptions wrsxmlwriter.ioex = IOException: {0} -wrsxmlwriter.sqlex = SQLException: {0} +wrsxmlwriter.sqlex = SQLException: {0} wrsxmlwriter.failedwrite = Impossibile scrivere il valore wsrxmlwriter.notproper = Non un tipo corretto -#XmlReaderContentHandle exceptions -xmlrch.errmap = Errore durante l'impostazione della mappa: {0} -xmlrch.errmetadata = Errore durante l'impostazione dei metadati: {0} -xmlrch.errinsert = Errore durante l'inserimento dei valori: {0} +#XmlReaderContentHandler exceptions +xmlrch.errmap = Errore durante l''impostazione della mappa: {0} +xmlrch.errmetadata = Errore durante l'impostazione dei metadati: {0} +xmlrch.errinsert = Errore durante l''inserimento dei valori: {0} xmlrch.errconstr = Errore durante la costruzione della riga: {0} -xmlrch.errdel = Errore durante l'eliminazione della riga: {0} +xmlrch.errdel = Errore durante l''eliminazione della riga: {0} xmlrch.errinsert = Errore durante la costruzione della riga di inserimento: {0} xmlrch.errinsdel = Errore durante la costruzione della riga insdel: {0} xmlrch.errupdate = Errore durante la costruzione della riga di aggiornamento: {0} -xmlrch errupdrow = Errore durante l'aggiornamento della riga: {0} +xmlrch.errupdrow = Errore durante l''aggiornamento della riga: {0} xmlrch.chars = caratteri: xmlrch.badvalue = valore non valido; propriet\u00e0 non annullabile xmlrch.badvalue1 = valore non valido; metadati non annullabili -xmlrch.warning = ** Avviso -xmlrch.line = , linea -xmlrch.uri = , uri +xmlrch.warning = ** Avviso #RIOptimisticProvider Exceptions riop.locking = La classificazione di blocco non \u00e8 supportata diff --git a/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_ja.properties b/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_ja.properties index 5e40077edba..26a2e59863e 100644 --- a/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_ja.properties +++ b/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_ja.properties @@ -41,7 +41,7 @@ cachedrowsetimpl.intfail = \u5217 {1} \u306e\u5024 ( {0} ) \u3067 getInt \u304c\ cachedrowsetimpl.longfail = \u5217 {1} \u306e\u5024 ( {0} ) \u3067 getLong \u304c\u5931\u6557\u3057\u307e\u3057\u305f\u3002 cachedrowsetimpl.floatfail = \u5217 {1} \u306e\u5024 ( {0} ) \u3067 getFloat \u304c\u5931\u6557\u3057\u307e\u3057\u305f\u3002 cachedrowsetimpl.doublefail = \u5217 {1} \u306e\u5024 ( {0} ) \u3067 getDouble \u304c\u5931\u6557\u3057\u307e\u3057\u305f\u3002 -cachedrowsetimpl.dtypemismt = \u30c7\u30fc\u30bf\u578b\u306e\u30df\u30b9\u30de\u30c3\u30c1 +cachedrowsetimpl.dtypemismt = \u30c7\u30fc\u30bf\u578b\u306e\u30df\u30b9\u30de\u30c3\u30c1 cachedrowsetimpl.datefail = \u5217 {1} \u306e\u5024 ( {0} ) \u3067 getDate \u304c\u5931\u6557\u3002\u5909\u63db\u3067\u304d\u307e\u305b\u3093\u3002 cachedrowsetimpl.timefail = \u5217 {1} \u306e\u5024 ( {0} ) \u3067 getTime \u304c\u5931\u6557\u3002\u5909\u63db\u3067\u304d\u307e\u305b\u3093\u3002 cachedrowsetimpl.posupdate = \u4f4d\u7f6e\u6c7a\u3081\u3055\u308c\u305f\u66f4\u65b0\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u307e\u305b\u3093\u3002 @@ -71,11 +71,13 @@ cachedrowsetimpl.unsetmatch1 = unsetMatchColumn \u3078\u306e\u5f15\u6570\u3068\u cachedrowsetimpl.unsetmatch2 = unsetMatchColumn \u3078\u306e\u5f15\u6570\u3068\u3057\u3066\u5217 ID \u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002 cachedrowsetimpl.numrows = \u884c\u6570\u304c\u30bc\u30ed\u307e\u305f\u306f\u30d5\u30a7\u30c3\u30c1\u30b5\u30a4\u30ba\u3088\u308a\u5c0f\u3055\u3044\u3067\u3059\u3002 cachedrowsetimpl.startpos = \u958b\u59cb\u4f4d\u7f6e\u306f\u8ca0\u3067\u306f\u306a\u308a\u307e\u305b\u3093\u3002 -cachedrowsetimpl.nextpage = \u547c\u3073\u51fa\u3057\u524d\u306b\u30c7\u30fc\u30bf\u3092\u751f\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +cachedrowsetimpl.nextpage = \u547c\u3073\u51fa\u3057\u524d\u306b\u30c7\u30fc\u30bf\u3092\u751f\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002 cachedrowsetimpl.pagesize = \u30da\u30fc\u30b8\u30b5\u30a4\u30ba\u306f\u30bc\u30ed\u3088\u308a\u5c0f\u3055\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093\u3002 cachedrowsetimpl.pagesize1 = \u30da\u30fc\u30b8\u30b5\u30a4\u30ba\u306f maxRows \u3088\u308a\u5927\u304d\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093\u3002 cachedrowsetimpl.fwdonly = ResultSet \u306f\u9806\u65b9\u5411\u306e\u307f\u3067\u3059\u3002 cachedrowsetimpl.type = \u578b : {0} +cachedrowsetimpl.opnotysupp = \u3053\u306e\u64cd\u4f5c\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 +cachedrowsetimpl.featnotsupp = \u3053\u306e\u6a5f\u80fd\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 # WebRowSetImpl exceptions webrowsetimpl.nullhash = WebRowSetImpl \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3067\u304d\u307e\u305b\u3093\u3002\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u306b null \u306e Hashtable \u304c\u4f7f\u7528\u3055\u308c\u307e\u3057\u305f\u3002 @@ -83,7 +85,7 @@ webrowsetimpl.invalidwr = \u7121\u52b9\u306a\u30e9\u30a4\u30bf\u30fc webrowsetimpl.invalidrd = \u7121\u52b9\u306a\u30ea\u30fc\u30c0\u30fc #FilteredRowSetImpl exceptions -filteredrowsetimpl.relative = relative : \u7121\u52b9\u306a\u30ab\u30fc\u30bd\u30eb\u64cd\u4f5c +filteredrowsetimpl.relative = relative : \u7121\u52b9\u306a\u30ab\u30fc\u30bd\u30eb\u64cd\u4f5c filteredrowsetimpl.absolute = absolute : \u7121\u52b9\u306a\u30ab\u30fc\u30bd\u30eb\u64cd\u4f5c filteredrowsetimpl.notallowed = \u3053\u306e\u5024\u306f\u30d5\u30a3\u30eb\u30bf\u3067\u8a31\u5bb9\u3055\u308c\u307e\u305b\u3093\u3002 @@ -95,6 +97,7 @@ joinrowsetimpl.notdefined = \u5b9a\u7fa9\u3055\u308c\u305f\u7d50\u5408\u306e\u57 joinrowsetimpl.notsupported = \u3053\u306e\u578b\u306e\u7d50\u5408\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 joinrowsetimpl.initerror = JoinRowSet \u521d\u671f\u5316\u30a8\u30e9\u30fc joinrowsetimpl.genericerr = \u6c4e\u7528 joinrowset \u306e\u521d\u671f\u30a8\u30e9\u30fc +joinrowsetimpl.emptyrowset = \u3053\u306e JoinRowSet \u306b\u306f\u7a7a\u306e\u884c\u30bb\u30c3\u30c8\u3092\u8ffd\u52a0\u3067\u304d\u307e\u305b\u3093\u3002 #JdbcRowSetImpl exceptions jdbcrowsetimpl.invalstate = \u7121\u52b9\u306a\u72b6\u614b @@ -108,22 +111,28 @@ jdbcrowsetimpl.unsetmatch = \u8a2d\u5b9a\u89e3\u9664\u3055\u308c\u3066\u3044\u30 jdbcrowsetimpl.usecolname = unsetMatchColumn \u3078\u306e\u5f15\u6570\u3068\u3057\u3066\u5217\u540d\u3092\u4f7f\u7528\u3066\u304f\u3060\u3055\u3044\u3002 jdbcrowsetimpl.usecolid = unsetMatchColumn \u3078\u306e\u5f15\u6570\u3068\u3057\u3066\u5217 ID \u3092\u4f7f\u7528\u3066\u304f\u3060\u3055\u3044\u3002 jdbcrowsetimpl.resnotupd = ResultSet \u306f\u66f4\u65b0\u3067\u304d\u307e\u305b\u3093\u3002 +jdbcrowsetimpl.opnotysupp = \u3053\u306e\u64cd\u4f5c\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 +jdbcrowsetimpl.featnotsupp = \u3053\u306e\u6a5f\u80fd\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 #CachedRowSetReader exceptions crsreader.connect = (JNDI) \u63a5\u7d9a\u3067\u304d\u307e\u305b\u3093\u3002 crsreader.paramtype = \u30d1\u30e9\u30e1\u30fc\u30bf\u578b\u3092\u63a8\u5b9a\u3067\u304d\u307e\u305b\u3093\u3002 +crsreader.connecterr = RowSetReader \u306e\u5185\u90e8\u30a8\u30e9\u30fc: \u5207\u65ad\u3055\u308c\u3066\u3044\u308b\u304b\u307e\u305f\u306f\u30b3\u30de\u30f3\u30c9\u304c\u5b58\u5728\u3057\u307e\u305b\u3093\u3002 +crsreader.datedetected = \u65e5\u4ed8\u3092\u691c\u51fa\u3057\u307e\u3057\u305f\u3002 +crsreader.caldetected = \u30ab\u30ec\u30f3\u30c0\u3092\u691c\u51fa\u3057\u307e\u3057\u305f\u3002 #CachedRowSetWriter exceptions crswriter.connect = \u63a5\u7d9a\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3002 crswriter.tname = writeData \u304c\u8868\u540d\u3092\u5224\u5b9a\u3067\u304d\u307e\u305b\u3093\u3002 crswriter.params1 = params1 \u306e\u5024 : {0} crswriter.params2 = params2 \u306e\u5024 : {0} +crswriter.conflictsno = \u540c\u671f\u4e2d\u306b\u885d\u7a81\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 #InsertRow exceptions insertrow.novalue = \u5024\u306f\u633f\u5165\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 #SyncResolverImpl exceptions -syncrsimpl.indexval = \u7bc4\u56f2\u5916\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u5024 +syncrsimpl.indexval = \u7bc4\u56f2\u5916\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u5024 syncrsimpl.noconflict = \u3053\u306e\u5217\u306f\u7af6\u5408\u3057\u3066\u3044\u307e\u305b\u3093\u3002 syncrsimpl.syncnotpos = \u540c\u671f\u3067\u304d\u307e\u305b\u3093\u3002 syncrsimpl.valtores = \u89e3\u6c7a\u3055\u308c\u308b\u5024\u306f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b cachedrowset \u306b\u3042\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 @@ -132,31 +141,27 @@ syncrsimpl.valtores = \u89e3\u6c7a\u3055\u308c\u308b\u5024\u306f\u30c7\u30fc\u30 wrsxmlreader.invalidcp = RowSet \u306e\u6700\u5f8c\u306b\u5230\u9054\u3057\u307e\u3057\u305f\u3002\u7121\u52b9\u306a\u30ab\u30fc\u30bd\u30eb\u4f4d\u7f6e wrsxmlreader.readxml = readXML : {0} wrsxmlreader.parseerr = ** \u69cb\u6587\u89e3\u6790\u30a8\u30e9\u30fc -wrsxmlreader.line = , \u884c -wrsxmlreader.uri = , uri #WebRowSetXmlWriter exceptions wrsxmlwriter.ioex = IOException : {0} -wrsxmlwriter.sqlex = SQLException : {0} +wrsxmlwriter.sqlex = SQLException : {0} wrsxmlwriter.failedwrite = \u5024\u306e\u66f8\u304d\u8fbc\u307f\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002 wsrxmlwriter.notproper = \u9069\u5207\u306a\u578b\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 -#XmlReaderContentHandle exceptions -xmlrch.errmap = Map \u8a2d\u5b9a\u30a8\u30e9\u30fc : {0} -xmlrch.errmetadata = \u30e1\u30bf\u30c7\u30fc\u30bf\u8a2d\u5b9a\u30a8\u30e9\u30fc : {0} +#XmlReaderContentHandler exceptions +xmlrch.errmap = Map \u8a2d\u5b9a\u30a8\u30e9\u30fc : {0} +xmlrch.errmetadata = \u30e1\u30bf\u30c7\u30fc\u30bf\u8a2d\u5b9a\u30a8\u30e9\u30fc : {0} xmlrch.errinsert = \u5024\u306e\u633f\u5165\u30a8\u30e9\u30fc : {0} xmlrch.errconstr = \u884c\u306e\u751f\u6210\u30a8\u30e9\u30fc : {0} xmlrch.errdel = \u884c\u306e\u524a\u9664\u30a8\u30e9\u30fc : {0} xmlrch.errinsert = \u633f\u5165\u884c\u306e\u751f\u6210\u30a8\u30e9\u30fc : {0} xmlrch.errinsdel = insdel \u884c\u306e\u751f\u6210\u30a8\u30e9\u30fc : {0} xmlrch.errupdate = \u66f4\u65b0\u884c\u306e\u751f\u6210\u30a8\u30e9\u30fc : {0} -xmlrch errupdrow = \u884c\u306e\u66f4\u65b0\u30a8\u30e9\u30fc : {0} +xmlrch.errupdrow = \u884c\u306e\u66f4\u65b0\u30a8\u30e9\u30fc: {0} xmlrch.chars = \u6587\u5b57 : -xmlrch.badvalue = \u4e0d\u6b63\u306a\u5024 ; null \u306b\u3067\u304d\u306a\u3044\u30d7\u30ed\u30d1\u30c6\u30a3 +xmlrch.badvalue = \u4e0d\u6b63\u306a\u5024 ; null \u306b\u3067\u304d\u306a\u3044\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc xmlrch.badvalue1 = \u4e0d\u6b63\u306a\u5024 ; null \u306b\u3067\u304d\u306a\u3044\u30e1\u30bf\u30c7\u30fc\u30bf -xmlrch.warning = ** \u8b66\u544a -xmlrch.line = , \u884c -xmlrch.uri = , uri +xmlrch.warning = ** \u8b66\u544a #RIOptimisticProvider Exceptions riop.locking = \u30ed\u30c3\u30af\u306e\u5206\u985e\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 diff --git a/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_ko.properties b/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_ko.properties index d1d27f06360..d01f56eb5d5 100644 --- a/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_ko.properties +++ b/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_ko.properties @@ -1,5 +1,5 @@ # -# Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. +# Copyright 2005-2006 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 @@ -41,7 +41,7 @@ cachedrowsetimpl.intfail = \uc5f4 {1}\uc758 \uac12({0})\uc5d0\uc11c getInt\uac00 cachedrowsetimpl.longfail = \uc5f4 {1}\uc758 \uac12({0})\uc5d0\uc11c getLong\uc774 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4. cachedrowsetimpl.floatfail = \uc5f4 {1}\uc758 \uac12({0})\uc5d0\uc11c getFloat\uac00 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4. cachedrowsetimpl.doublefail = \uc5f4 {1}\uc758 \uac12({0})\uc5d0\uc11c getDouble\uc774 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4. -cachedrowsetimpl.dtypemismt = \ub370\uc774\ud130 \uc720\ud615\uc774 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. +cachedrowsetimpl.dtypemismt = \ub370\uc774\ud130 \uc720\ud615\uc774 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. cachedrowsetimpl.datefail = \uc5f4 {1}\uc758 \uac12({0})\uc5d0\uc11c getDate\uac00 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4. \ubcc0\ud658\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. cachedrowsetimpl.timefail = \uc5f4 {1}\uc758 \uac12({0})\uc5d0\uc11c getLong\uc774 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4. \ubcc0\ud658\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. cachedrowsetimpl.posupdate = \uc704\uce58 \uc9c0\uc815 \uc5c5\ub370\uc774\ud2b8\ub97c \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. @@ -71,11 +71,13 @@ cachedrowsetimpl.unsetmatch1 = \uc5f4 \uc774\ub984\uc744 unsetMatchColumn\uc758 cachedrowsetimpl.unsetmatch2 = \uc5f4 ID\ub97c unsetMatchColumn\uc758 \uc778\uc218\ub85c \uc0ac\uc6a9\ud558\uc2ed\uc2dc\uc624. cachedrowsetimpl.numrows = \ud589 \uac1c\uc218\uac00 0\ubcf4\ub2e4 \uc791\uac70\ub098 \ubc18\uc785 \ud06c\uae30\ubcf4\ub2e4 \uc791\uc2b5\ub2c8\ub2e4. cachedrowsetimpl.startpos = \uc2dc\uc791 \uc704\uce58\ub294 \uc74c\uc218\uc77c \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. -cachedrowsetimpl.nextpage = \ud638\ucd9c\ud558\uae30 \uc804\uc5d0 \ub370\uc774\ud130\ub97c \ucc44\uc6b0\uc2ed\uc2dc\uc624. +cachedrowsetimpl.nextpage = \ud638\ucd9c\ud558\uae30 \uc804\uc5d0 \ub370\uc774\ud130\ub97c \ucc44\uc6b0\uc2ed\uc2dc\uc624. cachedrowsetimpl.pagesize = \ud398\uc774\uc9c0 \ud06c\uae30\ub294 0\ubcf4\ub2e4 \uc791\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. cachedrowsetimpl.pagesize1 = \ud398\uc774\uc9c0 \ud06c\uae30\ub294 maxRows\ubcf4\ub2e4 \ud074 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. cachedrowsetimpl.fwdonly = ResultSet\ub294 \uc804\ub2ec \uc804\uc6a9\uc785\ub2c8\ub2e4. cachedrowsetimpl.type = \uc720\ud615: {0} +cachedrowsetimpl.opnotysupp = \uc791\uc5c5\uc774 \uc544\uc9c1 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. +cachedrowsetimpl.featnotsupp = \uae30\ub2a5\uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. # WebRowSetImpl exceptions webrowsetimpl.nullhash = WebRowSetImpl \uc778\uc2a4\ud134\uc2a4\ub97c \uc778\uc2a4\ud134\uc2a4\ud654\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uad6c\uc131\uc790\uc5d0 \ub110 Hashtable\uc774 \uc81c\uacf5\ub418\uc5c8\uc2b5\ub2c8\ub2e4. @@ -83,7 +85,7 @@ webrowsetimpl.invalidwr = \uc798\ubabb\ub41c \uae30\ub85d\uae30\uc785\ub2c8\ub2e webrowsetimpl.invalidrd = \uc798\ubabb\ub41c \ud310\ub3c5\uae30\uc785\ub2c8\ub2e4. #FilteredRowSetImpl exceptions -filteredrowsetimpl.relative = \uc0c1\ub300: \uc798\ubabb\ub41c \ucee4\uc11c \uc791\uc5c5\uc785\ub2c8\ub2e4. +filteredrowsetimpl.relative = \uc0c1\ub300: \uc798\ubabb\ub41c \ucee4\uc11c \uc791\uc5c5\uc785\ub2c8\ub2e4. filteredrowsetimpl.absolute = \uc808\ub300: \uc798\ubabb\ub41c \ucee4\uc11c \uc791\uc5c5\uc785\ub2c8\ub2e4. filteredrowsetimpl.notallowed = \uc774 \uac12\uc740 \ud544\ud130\ub97c \ud1b5\uacfc\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. @@ -95,6 +97,7 @@ joinrowsetimpl.notdefined = \uc815\uc758\ub41c \uacb0\ud569 \uc720\ud615\uc774 \ joinrowsetimpl.notsupported = \uc774 \uacb0\ud569 \uc720\ud615\uc740 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. joinrowsetimpl.initerror = JoinRowSet \ucd08\uae30\ud654 \uc624\ub958 joinrowsetimpl.genericerr = \uc77c\ubc18 joinrowset \ucd08\uae30 \uc624\ub958 +joinrowsetimpl.emptyrowset = \uc774 JoinRowSet\uc5d0 \ube48 rowset\uc744 \ucd94\uac00\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. #JdbcRowSetImpl exceptions jdbcrowsetimpl.invalstate = \uc798\ubabb\ub41c \uc0c1\ud0dc\uc785\ub2c8\ub2e4. @@ -108,22 +111,28 @@ jdbcrowsetimpl.unsetmatch = \uc124\uc815 \ud574\uc81c\ud560 \uc5f4\uc774 \uc124\ jdbcrowsetimpl.usecolname = \uc5f4 \uc774\ub984\uc744 unsetMatchColumn\uc758 \uc778\uc218\ub85c \uc0ac\uc6a9\ud558\uc2ed\uc2dc\uc624. jdbcrowsetimpl.usecolid = \uc5f4 ID\ub97c unsetMatchColumn\uc758 \uc778\uc218\ub85c \uc0ac\uc6a9\ud558\uc2ed\uc2dc\uc624. jdbcrowsetimpl.resnotupd = ResultSet\uc740 \uc5c5\ub370\uc774\ud2b8\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +jdbcrowsetimpl.opnotysupp = \uc791\uc5c5\uc774 \uc544\uc9c1 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. +jdbcrowsetimpl.featnotsupp = \uae30\ub2a5\uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. #CachedRowSetReader exceptions crsreader.connect = (JNDI) \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. crsreader.paramtype = \ub9e4\uac1c \ubcc0\uc218 \uc720\ud615\uc744 \ucd94\ub860\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +crsreader.connecterr = RowSetReader \ub0b4\ubd80 \uc624\ub958: \uc5f0\uacb0 \ub610\ub294 \uba85\ub839\uc774 \uc5c6\uc2b5\ub2c8\ub2e4. +crsreader.datedetected = \ub0a0\uc9dc\uac00 \uac10\uc9c0\ub418\uc5c8\uc2b5\ub2c8\ub2e4. +crsreader.caldetected = \ub2ec\ub825\uc774 \uac10\uc9c0\ub418\uc5c8\uc2b5\ub2c8\ub2e4. #CachedRowSetWriter exceptions crswriter.connect = \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. crswriter.tname = writeData\uc5d0\uc11c \ud14c\uc774\ube14 \uc774\ub984\uc744 \ud655\uc778\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. -crswriter.params1 = params1\uc758 \uac12: {0} -crswriter.params2 = params2\uc758 \uac12: {0} +crswriter.params1 = params1\uc758 \uac12: {0} +crswriter.params2 = params2\uc758 \uac12: {0} +crswriter.conflictsno = \ub3d9\uae30\ud654\ud558\ub294 \ub3d9\uc548 \ucda9\ub3cc\ud569\ub2c8\ub2e4. #InsertRow exceptions insertrow.novalue = \uac12\uc774 \uc0bd\uc785\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. #SyncResolverImpl exceptions -syncrsimpl.indexval = \uc0c9\uc778 \uac12\uc774 \ubc94\uc704\ub97c \ubc97\uc5b4\ub0ac\uc2b5\ub2c8\ub2e4. +syncrsimpl.indexval = \uc0c9\uc778 \uac12\uc774 \ubc94\uc704\ub97c \ubc97\uc5b4\ub0ac\uc2b5\ub2c8\ub2e4. syncrsimpl.noconflict = \uc774 \uc5f4\uc740 \ucda9\ub3cc\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. syncrsimpl.syncnotpos = \ub3d9\uae30\ud654\ub97c \ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. syncrsimpl.valtores = \ud655\uc778\ud560 \uac12\uc774 \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub098 cachedrowset\uc5d0 \uc788\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. @@ -132,31 +141,27 @@ syncrsimpl.valtores = \ud655\uc778\ud560 \uac12\uc774 \ub370\uc774\ud130\ubca0\u wrsxmlreader.invalidcp = RowSet\uc758 \ub05d\uc5d0 \ub3c4\ub2ec\ud588\uc2b5\ub2c8\ub2e4. \uc798\ubabb\ub41c \ucee4\uc11c \uc704\uce58\uc785\ub2c8\ub2e4. wrsxmlreader.readxml = readXML: {0} wrsxmlreader.parseerr = ** \uad6c\ubb38 \ubd84\uc11d \uc624\ub958 -wrsxmlreader.line = , \uc904 -wrsxmlreader.uri = , uri #WebRowSetXmlWriter exceptions wrsxmlwriter.ioex = IOException: {0} -wrsxmlwriter.sqlex = SQLException: {0} +wrsxmlwriter.sqlex = SQLException: {0} wrsxmlwriter.failedwrite = \uac12\uc744 \uc4f0\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. wsrxmlwriter.notproper = \uc62c\ubc14\ub978 \uc720\ud615\uc774 \uc544\ub2d9\ub2c8\ub2e4. -#XmlReaderContentHandle exceptions -xmlrch.errmap = \ub9e4\ud551\uc744 \uc124\uc815\ud558\ub294 \uc911 \uc624\ub958 \ubc1c\uc0dd: {0} -xmlrch.errmetadata = \uba54\ud0c0\ub370\uc774\ud130\ub97c \uc124\uc815\ud558\ub294 \uc911 \uc624\ub958 \ubc1c\uc0dd: {0} -xmlrch.errinsert = \uac12\uc744 \uc0bd\uc785\ud558\ub294 \uc911 \uc624\ub958 \ubc1c\uc0dd: {0} +#XmlReaderContentHandler exceptions +xmlrch.errmap = \ub9e4\ud551\uc744 \uc124\uc815\ud558\ub294 \uc911 \uc624\ub958 \ubc1c\uc0dd: {0} +xmlrch.errmetadata = \uba54\ud0c0\ub370\uc774\ud130\ub97c \uc124\uc815\ud558\ub294 \uc911 \uc624\ub958 \ubc1c\uc0dd: {0} +xmlrch.errinsert = \ub2e4\uc74c \uac12\uc744 \uc0bd\uc785\ud558\ub294 \uc911 \uc624\ub958 \ubc1c\uc0dd : {0} xmlrch.errconstr = \ud589\uc744 \ub9cc\ub4dc\ub294 \uc911 \uc624\ub958 \ubc1c\uc0dd: {0} xmlrch.errdel = \ud589\uc744 \uc81c\uac70\ud558\ub294 \uc911 \uc624\ub958 \ubc1c\uc0dd: {0} xmlrch.errinsert = insert \ud589\uc744 \ub9cc\ub4dc\ub294 \uc911 \uc624\ub958 \ubc1c\uc0dd: {0} xmlrch.errinsdel = insdel \ud589\uc744 \ub9cc\ub4dc\ub294 \uc911 \uc624\ub958 \ubc1c\uc0dd: {0} xmlrch.errupdate = update \ud589\uc744 \ub9cc\ub4dc\ub294 \uc911 \uc624\ub958 \ubc1c\uc0dd: {0} -xmlrch errupdrow = \ud589\uc744 \uc5c5\ub370\uc774\ud2b8\ud558\ub294 \uc911 \uc624\ub958 \ubc1c\uc0dd: {0} +xmlrch.errupdrow = \ud589 \uc5c5\ub370\uc774\ud2b8 \uc624\ub958: {0} xmlrch.chars = \ubb38\uc790: xmlrch.badvalue = \uc798\ubabb\ub41c \uac12; \ub110\uc77c \uc218 \uc5c6\ub294 \ub4f1\ub85d \uc815\ubcf4 xmlrch.badvalue1 = \uc798\ubabb\ub41c \uac12; \ub110\uc77c \uc218 \uc5c6\ub294 \uba54\ud0c0\ub370\uc774\ud130 -xmlrch.warning = ** \uacbd\uace0 -xmlrch.line = , \uc904 -xmlrch.uri = , uri +xmlrch.warning = ** \uacbd\uace0 #RIOptimisticProvider Exceptions riop.locking = \ub4f1\uae09 \uc7a0\uae08\uc744 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. diff --git a/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_sv.properties b/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_sv.properties index a2e68620caf..addc4aa77d3 100644 --- a/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_sv.properties +++ b/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_sv.properties @@ -1,5 +1,5 @@ # -# Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. +# Copyright 2005-2006 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 @@ -41,7 +41,7 @@ cachedrowsetimpl.intfail = getInt misslyckades f\u00f6r v\u00e4rdet ({0}) i kolu cachedrowsetimpl.longfail = getLong misslyckades f\u00f6r v\u00e4rdet ({0}) i kolumnen {1} cachedrowsetimpl.floatfail = getFloat misslyckades f\u00f6r v\u00e4rdet ({0}) i kolumnen {1} cachedrowsetimpl.doublefail = getDouble misslyckades f\u00f6r v\u00e4rdet ({0}) i kolumnen {1} -cachedrowsetimpl.dtypemismt = Inkompatibel datatyp +cachedrowsetimpl.dtypemismt = Inkompatibel datatyp cachedrowsetimpl.datefail = getDate misslyckades f\u00f6r v\u00e4rdet ({0}) i kolumnen {1}, ingen konvertering tillg\u00e4nglig cachedrowsetimpl.timefail = getTime misslyckades f\u00f6r v\u00e4rdet ({0}) i kolumnen {1}, ingen konvertering tillg\u00e4nglig cachedrowsetimpl.posupdate = Det finns inte st\u00f6d f\u00f6r positionerad uppdatering @@ -71,11 +71,13 @@ cachedrowsetimpl.unsetmatch1 = Anv\u00e4nd kolumnnamn som argument f\u00f6r unse cachedrowsetimpl.unsetmatch2 = Anv\u00e4nd kolumnn-id som argument f\u00f6r unsetMatchColumn cachedrowsetimpl.numrows = Antalet rader understiger noll eller \u00e4r mindre \u00e4n h\u00e4mtningsstorleken cachedrowsetimpl.startpos = Startpositionen f\u00e5r inte vara negativ -cachedrowsetimpl.nextpage = Fyll i data innan anrop +cachedrowsetimpl.nextpage = Fyll i data innan anrop cachedrowsetimpl.pagesize = Sidstorleken f\u00e5r inte understiga noll cachedrowsetimpl.pagesize1 = Sidstorleken f\u00e5r inte \u00f6verstiga maxRows cachedrowsetimpl.fwdonly = ResultSet kan endast g\u00e5 fram\u00e5t cachedrowsetimpl.type = Typ: {0} +cachedrowsetimpl.opnotysupp = Det finns \u00e4nnu inte st\u00f6d f\u00f6r \u00e5tg\u00e4rden +cachedrowsetimpl.featnotsupp = Funktionen st\u00f6ds inte # WebRowSetImpl exceptions webrowsetimpl.nullhash = Det g\u00e5r inte att skapa instansen WebRowSetImpl. Tom hashtabell skickades till konstrukt\u00f6r. @@ -95,6 +97,7 @@ joinrowsetimpl.notdefined = Detta \u00e4r inte n\u00e5gon definierad kopplingsty joinrowsetimpl.notsupported = Det finns inget st\u00f6d f\u00f6r denna kopplingstyp joinrowsetimpl.initerror = Initieringsfel f\u00f6r JoinRowSet joinrowsetimpl.genericerr = Allm\u00e4nt initieringsfel f\u00f6r JoinRowSet +joinrowsetimpl.emptyrowset = Det g\u00e5r inte att l\u00e4gga till tom rowset i denna JoinRowSet #JdbcRowSetImpl exceptions jdbcrowsetimpl.invalstate = Ogiltig status @@ -108,22 +111,28 @@ jdbcrowsetimpl.unsetmatch = Kolumnerna som \u00e5terst\u00e4lls \u00e4r inte sam jdbcrowsetimpl.usecolname = Anv\u00e4nd kolumnnamn som argument f\u00f6r unsetMatchColumn jdbcrowsetimpl.usecolid = Anv\u00e4nd kolumnn-id som argument f\u00f6r unsetMatchColumn jdbcrowsetimpl.resnotupd = ResultSet \u00e4r inte uppdateringsbart +jdbcrowsetimpl.opnotysupp = Det finns \u00e4nnu inte st\u00f6d f\u00f6r \u00e5tg\u00e4rden +jdbcrowsetimpl.featnotsupp = Funktionen st\u00f6ds inte #CachedRowSetReader exceptions crsreader.connect = (JNDI) kan inte anslutas crsreader.paramtype = Det g\u00e5r inte att fastst\u00e4lla parametertypen +crsreader.connecterr = Internfel i RowSetReader: ingen anslutning eller inget kommando +crsreader.datedetected = Ett datum uppt\u00e4cktes +crsreader.caldetected = En kalender uppt\u00e4cktes #CachedRowSetWriter exceptions crswriter.connect = Det g\u00e5r inte att uppr\u00e4tta n\u00e5gon anslutning crswriter.tname = writeData kan inte fastst\u00e4lla tabellnamnet crswriter.params1 = Parameterv\u00e4rde1: {0} crswriter.params2 = Parameterv\u00e4rde2: {0} +crswriter.conflictsno = konflikter uppstod vid synkronisering #InsertRow exceptions insertrow.novalue = Inget v\u00e4rde har infogats #SyncResolverImpl exceptions -syncrsimpl.indexval = Indexv\u00e4rdet ligger utanf\u00f6r intervallet +syncrsimpl.indexval = Indexv\u00e4rdet ligger utanf\u00f6r intervallet syncrsimpl.noconflict = Denna kolumn st\u00e5r inte i konflikt syncrsimpl.syncnotpos = Synkronisering \u00e4r inte m\u00f6jlig syncrsimpl.valtores = V\u00e4rdet som ska analyseras kan antingen finnas i databasen eller i cachedrowset @@ -132,31 +141,27 @@ syncrsimpl.valtores = V\u00e4rdet som ska analyseras kan antingen finnas i datab wrsxmlreader.invalidcp = Slutet p\u00e5 RowSet har n\u00e5tts. Mark\u00f6rpositionen \u00e4r ogiltig. wrsxmlreader.readxml = readXML: {0} wrsxmlreader.parseerr = ** Tolkningsfel -wrsxmlreader.line = , rad -wrsxmlreader.uri = , URI #WebRowSetXmlWriter exceptions wrsxmlwriter.ioex = IOException: {0} -wrsxmlwriter.sqlex = SQLException: {0} +wrsxmlwriter.sqlex = SQLException: {0} wrsxmlwriter.failedwrite = Det gick inte att skriva v\u00e4rdet wsrxmlwriter.notproper = Ingen riktig typ -#XmlReaderContentHandle exceptions -xmlrch.errmap = Ett fel uppstod vid inst\u00e4llningen av f\u00f6ljande bild: {0} -xmlrch.errmetadata = Ett fel uppstod vid inst\u00e4llningen av f\u00f6ljande metadata: {0} +#XmlReaderContentHandler exceptions +xmlrch.errmap = Ett fel uppstod vid inst\u00e4llningen av f\u00f6ljande bild: {0} +xmlrch.errmetadata = Ett fel uppstod vid inst\u00e4llningen av f\u00f6ljande metadata: {0} xmlrch.errinsert = Ett fel uppstod n\u00e4r f\u00f6ljande v\u00e4rden skulle infogas: {0} xmlrch.errconstr = Ett fel uppstod n\u00e4r f\u00f6ljande rad skulle skapas: {0} xmlrch.errdel = Ett fel uppstod n\u00e4r f\u00f6ljande rad skulle raderas: {0} xmlrch.errinsert = Ett fel uppstod n\u00e4r f\u00f6ljande infogningsrad skulle skapas: {0} xmlrch.errinsdel = Ett fel uppstod n\u00e4r raden insdel skulle skapas: {0} xmlrch.errupdate = Ett fel uppstod n\u00e4r f\u00f6ljande uppdateringsrad skulle skapas: {0} -xmlrch errupdrow = Ett fel uppstod n\u00e4r f\u00f6ljande rad skulle uppdateras: {0} +xmlrch.errupdrow = Det gick inte att uppdatera raden: {0} xmlrch.chars = tecken: xmlrch.badvalue = Felaktigt v\u00e4rde; egenskapen kan inte ha ett tomt v\u00e4rde xmlrch.badvalue1 = Felaktigt v\u00e4rde; metadatan kan inte ha ett tomt v\u00e4rde -xmlrch.warning = ** Varning! -xmlrch.line = , rad -xmlrch.uri = , URI +xmlrch.warning = ** Varning! #RIOptimisticProvider Exceptions riop.locking = Det finns inte st\u00f6d f\u00f6r denna l\u00e5sningsklassifikation diff --git a/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_zh_CN.properties b/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_zh_CN.properties index 01258eaf627..efd8c981932 100644 --- a/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_zh_CN.properties +++ b/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_zh_CN.properties @@ -1,5 +1,5 @@ # -# Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. +# Copyright 2005-2006 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 @@ -41,7 +41,7 @@ cachedrowsetimpl.intfail = \u5bf9\u5217 {1} \u4e2d\u7684\u503c ({0}) \u6267\u884 cachedrowsetimpl.longfail = \u5bf9\u5217 {1} \u4e2d\u7684\u503c ({0}) \u6267\u884c getLong \u5931\u8d25 cachedrowsetimpl.floatfail = \u5bf9\u5217 {1} \u4e2d\u7684\u503c ({0}) \u6267\u884c getFloat \u5931\u8d25 cachedrowsetimpl.doublefail = \u5bf9\u5217 {1} \u4e2d\u7684\u503c ({0}) \u6267\u884c getDouble \u5931\u8d25 -cachedrowsetimpl.dtypemismt = \u6570\u636e\u7c7b\u578b\u4e0d\u5339\u914d +cachedrowsetimpl.dtypemismt = \u6570\u636e\u7c7b\u578b\u4e0d\u5339\u914d cachedrowsetimpl.datefail = \u5bf9\u5217 {1} \u4e2d\u7684\u503c ({0}) \u6267\u884c getDate \u5931\u8d25\uff0c\u65e0\u53ef\u7528\u8f6c\u6362 cachedrowsetimpl.timefail = \u5bf9\u5217 {1} \u4e2d\u7684\u503c ({0}) \u6267\u884c getTime \u5931\u8d25\uff0c\u65e0\u53ef\u7528\u8f6c\u6362 cachedrowsetimpl.posupdate = \u4e0d\u652f\u6301\u5b9a\u4f4d\u66f4\u65b0 @@ -71,11 +71,13 @@ cachedrowsetimpl.unsetmatch1 = \u4f7f\u7528\u5217\u540d\u4f5c\u4e3a unsetMatchCo cachedrowsetimpl.unsetmatch2 = \u4f7f\u7528\u5217 ID \u4f5c\u4e3a unsetMatchColumn \u7684\u53c2\u6570 cachedrowsetimpl.numrows = \u884c\u6570\u5c0f\u4e8e\u96f6\u6216\u5c0f\u4e8e\u8981\u63d0\u53d6\u7684\u884c\u6570 cachedrowsetimpl.startpos = \u8d77\u59cb\u4f4d\u7f6e\u4e0d\u80fd\u4e3a\u8d1f\u6570 -cachedrowsetimpl.nextpage = \u5728\u8c03\u7528\u4e4b\u524d\u5148\u586b\u5145\u6570\u636e +cachedrowsetimpl.nextpage = \u5728\u8c03\u7528\u4e4b\u524d\u5148\u586b\u5145\u6570\u636e cachedrowsetimpl.pagesize = \u9875\u9762\u5927\u5c0f\u4e0d\u80fd\u5c0f\u4e8e\u96f6 cachedrowsetimpl.pagesize1 = \u9875\u9762\u5927\u5c0f\u4e0d\u80fd\u5927\u4e8e maxRows cachedrowsetimpl.fwdonly = ResultSet \u7684\u7c7b\u578b\u4e3a\u4ec5\u5411\u524d\u7c7b\u578b cachedrowsetimpl.type = \u7c7b\u578b\u4e3a: {0} +cachedrowsetimpl.opnotysupp = \u5c1a\u4e0d\u652f\u6301\u64cd\u4f5c +cachedrowsetimpl.featnotsupp = \u4e0d\u652f\u6301\u529f\u80fd # WebRowSetImpl exceptions webrowsetimpl.nullhash = \u65e0\u6cd5\u5b9e\u4f8b\u5316 WebRowSetImpl \u5b9e\u4f8b\u3002\u63d0\u4f9b\u7ed9\u6784\u9020\u51fd\u6570\u7684 Hashtable \u4e3a Null @@ -83,7 +85,7 @@ webrowsetimpl.invalidwr = \u7f16\u5199\u5668\u65e0\u6548 webrowsetimpl.invalidrd = \u8bfb\u53d6\u5668\u65e0\u6548 #FilteredRowSetImpl exceptions -filteredrowsetimpl.relative = relative: \u5149\u6807\u64cd\u4f5c\u65e0\u6548 +filteredrowsetimpl.relative = relative: \u5149\u6807\u64cd\u4f5c\u65e0\u6548 filteredrowsetimpl.absolute = absolute: \u5149\u6807\u64cd\u4f5c\u65e0\u6548 filteredrowsetimpl.notallowed = \u4e0d\u5141\u8bb8\u6b64\u503c\u901a\u8fc7\u8fc7\u6ee4\u5668 @@ -95,6 +97,7 @@ joinrowsetimpl.notdefined = \u8fd9\u4e0d\u662f\u5b9a\u4e49\u7684\u8fde\u63a5\u7c joinrowsetimpl.notsupported = \u4e0d\u652f\u6301\u6b64\u8fde\u63a5\u7c7b\u578b joinrowsetimpl.initerror = JoinRowSet \u521d\u59cb\u5316\u9519\u8bef joinrowsetimpl.genericerr = \u4e00\u822c JoinRowSet \u521d\u59cb\u5316\u9519\u8bef +joinrowsetimpl.emptyrowset = \u65e0\u6cd5\u5c06\u7a7a\u7684 rowset \u6dfb\u52a0\u5230\u6b64 JoinRowSet #JdbcRowSetImpl exceptions jdbcrowsetimpl.invalstate = \u72b6\u6001\u65e0\u6548 @@ -108,22 +111,28 @@ jdbcrowsetimpl.unsetmatch = \u8981\u590d\u539f\u7684\u5217\u4e0e\u8bbe\u7f6e\u76 jdbcrowsetimpl.usecolname = \u4f7f\u7528\u5217\u540d\u4f5c\u4e3a unsetMatchColumn \u7684\u53c2\u6570 jdbcrowsetimpl.usecolid = \u4f7f\u7528\u5217 ID \u4f5c\u4e3a unsetMatchColumn \u7684\u53c2\u6570 jdbcrowsetimpl.resnotupd = ResultSet \u4e0d\u53ef\u66f4\u65b0 +jdbcrowsetimpl.opnotysupp = \u5c1a\u4e0d\u652f\u6301\u64cd\u4f5c +jdbcrowsetimpl.featnotsupp = \u4e0d\u652f\u6301\u529f\u80fd #CachedRowSetReader exceptions crsreader.connect = (JNDI) \u65e0\u6cd5\u8fde\u63a5 crsreader.paramtype = \u65e0\u6cd5\u63a8\u65ad\u53c2\u6570\u7c7b\u578b +crsreader.connecterr = RowSetReader \u53d1\u751f\u5185\u90e8\u9519\u8bef\uff1a\u6ca1\u6709\u8fde\u63a5\u6216\u547d\u4ee4 +crsreader.datedetected = \u68c0\u6d4b\u5230\u65e5\u671f +crsreader.caldetected = \u68c0\u6d4b\u5230\u65e5\u5386 #CachedRowSetWriter exceptions crswriter.connect = \u65e0\u6cd5\u8fdb\u884c\u8fde\u63a5 crswriter.tname = writeData \u65e0\u6cd5\u786e\u5b9a\u8868\u540d crswriter.params1 = params1 \u7684\u503c: {0} crswriter.params2 = params2 \u7684\u503c: {0} +crswriter.conflictsno = \u540c\u6b65\u65f6\u53d1\u751f\u51b2\u7a81 #InsertRow exceptions insertrow.novalue = \u5c1a\u672a\u63d2\u5165\u4efb\u4f55\u503c #SyncResolverImpl exceptions -syncrsimpl.indexval = \u7d22\u5f15\u503c\u8d85\u51fa\u8303\u56f4 +syncrsimpl.indexval = \u7d22\u5f15\u503c\u8d85\u51fa\u8303\u56f4 syncrsimpl.noconflict = \u6b64\u5217\u4e0d\u51b2\u7a81 syncrsimpl.syncnotpos = \u4e0d\u80fd\u540c\u6b65 syncrsimpl.valtores = \u8981\u89e3\u6790\u7684\u503c\u53ef\u4ee5\u5728\u6570\u636e\u5e93\u4e2d\uff0c\u4e5f\u53ef\u4ee5\u5728 CachedRowSet \u4e2d @@ -132,37 +141,30 @@ syncrsimpl.valtores = \u8981\u89e3\u6790\u7684\u503c\u53ef\u4ee5\u5728\u6570\u63 wrsxmlreader.invalidcp = \u5df2\u5230\u8fbe RowSet \u7684\u7ed3\u5c3e\u3002\u5149\u6807\u4f4d\u7f6e\u65e0\u6548 wrsxmlreader.readxml = readXML: {0} wrsxmlreader.parseerr = ** \u8bed\u6cd5\u89e3\u6790\u9519\u8bef -wrsxmlreader.line = \uff0c\u884c -wrsxmlreader.uri = \uff0curi #WebRowSetXmlWriter exceptions wrsxmlwriter.ioex = IOException: {0} -wrsxmlwriter.sqlex = SQLException: {0} +wrsxmlwriter.sqlex = SQLException: {0} wrsxmlwriter.failedwrite = \u65e0\u6cd5\u5199\u5165\u503c wsrxmlwriter.notproper = \u7c7b\u578b\u4e0d\u6b63\u786e -#XmlReaderContentHandle exceptions -xmlrch.errmap = \u8bbe\u7f6e\u6620\u5c04\u65f6\u51fa\u9519: {0} -xmlrch.errmetadata = \u8bbe\u7f6e\u5143\u6570\u636e\u65f6\u51fa\u9519: {0} +#XmlReaderContentHandler exceptions +xmlrch.errmap = \u8bbe\u7f6e\u6620\u5c04\u65f6\u51fa\u9519: {0} +xmlrch.errmetadata = \u8bbe\u7f6e\u5143\u6570\u636e\u65f6\u51fa\u9519: {0} xmlrch.errinsert = \u63d2\u5165\u503c\u65f6\u51fa\u9519: {0} xmlrch.errconstr = \u6784\u9020\u884c\u65f6\u51fa\u9519: {0} xmlrch.errdel = \u5220\u9664\u884c\u65f6\u51fa\u9519: {0} xmlrch.errinsert = \u6784\u9020\u63d2\u5165\u884c\u65f6\u51fa\u9519: {0} xmlrch.errinsdel = \u6784\u9020 insdel \u884c\u65f6\u51fa\u9519: {0} xmlrch.errupdate = \u6784\u9020\u66f4\u65b0\u884c\u65f6\u51fa\u9519: {0} -xmlrch errupdrow = \u66f4\u65b0\u884c\u65f6\u51fa\u9519: {0} +xmlrch.errupdrow = \u66f4\u65b0\u884c\u65f6\u51fa\u9519\uff1a{0} xmlrch.chars = \u5b57\u7b26: xmlrch.badvalue = \u503c\u9519\u8bef\uff1b\u5c5e\u6027\u4e0d\u53ef\u4e3a Null xmlrch.badvalue1 = \u503c\u9519\u8bef\uff1b\u5143\u6570\u636e\u4e0d\u53ef\u4e3a Null -xmlrch.warning = ** \u8b66\u544a -xmlrch.line = \uff0c\u884c -xmlrch.uri = \uff0curi +xmlrch.warning = ** \u8b66\u544a #RIOptimisticProvider Exceptions riop.locking = \u4e0d\u652f\u6301\u9501\u5b9a\u5206\u7c7b #RIXMLProvider exceptions rixml.unsupp = \u4e0d\u652f\u6301 RIXMLProvider - - - diff --git a/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_zh_TW.properties b/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_zh_TW.properties index dcb342f4257..0355fefac89 100644 --- a/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_zh_TW.properties +++ b/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_zh_TW.properties @@ -1,5 +1,5 @@ # -# Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. +# Copyright 2005-2006 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 @@ -41,7 +41,7 @@ cachedrowsetimpl.intfail = \u5c0d\u6b04 {1} \u4e2d\u7684\u503c ( {0} ) \u57f7\u8 cachedrowsetimpl.longfail = \u5c0d\u6b04 {1} \u4e2d\u7684\u503c ( {0} ) \u57f7\u884c getLong \u5931\u6557 cachedrowsetimpl.floatfail = \u5c0d\u6b04 {1} \u4e2d\u7684\u503c ( {0} ) \u57f7\u884c getFloat \u5931\u6557 cachedrowsetimpl.doublefail = \u5c0d\u6b04 {1} \u4e2d\u7684\u503c ( {0} ) \u57f7\u884c getDouble \u5931\u6557 -cachedrowsetimpl.dtypemismt = \u8cc7\u6599\u985e\u578b\u4e0d\u5339\u914d +cachedrowsetimpl.dtypemismt = \u8cc7\u6599\u985e\u578b\u4e0d\u5339\u914d cachedrowsetimpl.datefail = \u5c0d\u6b04 {1} \u4e2d\u7684\u503c ( {0} ) \u57f7\u884c getDate \u5931\u6557\uff0c\u672a\u9032\u884c\u8f49\u63db cachedrowsetimpl.timefail = \u5c0d\u6b04 {1} \u4e2d\u7684\u503c ( {0} ) \u57f7\u884c getTime \u5931\u6557\uff0c\u672a\u9032\u884c\u8f49\u63db cachedrowsetimpl.posupdate = \u4e0d\u652f\u63f4\u5b9a\u4f4d\u7684\u66f4\u65b0 @@ -71,11 +71,13 @@ cachedrowsetimpl.unsetmatch1 = \u4f7f\u7528\u6b04\u540d\u505a\u70ba unsetMatchCo cachedrowsetimpl.unsetmatch2 = \u4f7f\u7528\u6b04 ID \u505a\u70ba unsetMatchColumn \u7684\u5f15\u6578 cachedrowsetimpl.numrows = \u5217\u6578\u5c0f\u65bc\u96f6\u6216\u5c0f\u65bc\u64f7\u53d6\u5927\u5c0f cachedrowsetimpl.startpos = \u8d77\u59cb\u4f4d\u7f6e\u4e0d\u80fd\u70ba\u8ca0 -cachedrowsetimpl.nextpage = \u5728\u547c\u53eb\u4e4b\u524d\u690d\u5165\u8cc7\u6599 +cachedrowsetimpl.nextpage = \u5728\u547c\u53eb\u4e4b\u524d\u690d\u5165\u8cc7\u6599 cachedrowsetimpl.pagesize = \u9801\u9762\u5927\u5c0f\u4e0d\u80fd\u5c0f\u65bc\u96f6 cachedrowsetimpl.pagesize1 = \u9801\u9762\u5927\u5c0f\u4e0d\u80fd\u5927\u65bc maxRows cachedrowsetimpl.fwdonly = ResultSet \u53ea\u80fd\u5411\u524d\u9032\u884c cachedrowsetimpl.type = \u985e\u578b\u662f\uff1a{0} +cachedrowsetimpl.opnotysupp = \u5c1a\u672a\u652f\u63f4\u6b64\u4f5c\u696d +cachedrowsetimpl.featnotsupp = \u4e0d\u652f\u63f4\u6b64\u529f\u80fd # WebRowSetImpl exceptions webrowsetimpl.nullhash = \u7121\u6cd5\u5275\u8a2d WebRowSetImpl \u5be6\u4f8b\u3002\u70ba\u5efa\u69cb\u5b50\u63d0\u4f9b\u7684 Hashtable \u70ba\u7a7a @@ -83,7 +85,7 @@ webrowsetimpl.invalidwr = \u5beb\u5165\u5668\u7121\u6548 webrowsetimpl.invalidrd = \u8b80\u53d6\u5668\u7121\u6548 #FilteredRowSetImpl exceptions -filteredrowsetimpl.relative = relative\uff1a\u6e38\u6a19\u4f5c\u696d\u7121\u6548 +filteredrowsetimpl.relative = relative\uff1a\u6e38\u6a19\u4f5c\u696d\u7121\u6548 filteredrowsetimpl.absolute = absolute\uff1a\u6e38\u6a19\u4f5c\u696d\u7121\u6548 filteredrowsetimpl.notallowed = \u4e0d\u5141\u8a31\u6b64\u503c\u901a\u904e\u904e\u6ffe\u5668 @@ -95,6 +97,7 @@ joinrowsetimpl.notdefined = \u9019\u4e0d\u662f\u9023\u7d50\u7684\u5df2\u5b9a\u7f joinrowsetimpl.notsupported = \u4e0d\u652f\u63f4\u6b64\u985e\u9023\u7d50 joinrowsetimpl.initerror = JoinRowSet \u521d\u59cb\u5316\u932f\u8aa4 joinrowsetimpl.genericerr = \u5e38\u898f\u7684 joinrowset \u521d\u59cb\u5316\u932f\u8aa4 +joinrowsetimpl.emptyrowset = \u4e0d\u53ef\u5c07\u7a7a\u767d\u7684 rowset \u589e\u52a0\u81f3\u6b64 JoinRowSet #JdbcRowSetImpl exceptions jdbcrowsetimpl.invalstate = \u72c0\u614b\u7121\u6548 @@ -108,22 +111,28 @@ jdbcrowsetimpl.unsetmatch = \u672a\u8a2d\u5b9a\u7684\u6b04\u548c\u8a2d\u5b9a\u76 jdbcrowsetimpl.usecolname = \u4f7f\u7528\u6b04\u540d\u505a\u70ba unsetMatchColumn \u7684\u5f15\u6578 jdbcrowsetimpl.usecolid = \u4f7f\u7528\u6b04 ID \u505a\u70ba unsetMatchColumn \u7684\u5f15\u6578 jdbcrowsetimpl.resnotupd = ResultSet \u4e0d\u53ef\u66f4\u65b0 +jdbcrowsetimpl.opnotysupp = \u5c1a\u672a\u652f\u63f4\u6b64\u4f5c\u696d +jdbcrowsetimpl.featnotsupp = \u4e0d\u652f\u63f4\u6b64\u529f\u80fd #CachedRowSetReader exceptions crsreader.connect = (JNDI) \u7121\u6cd5\u9023\u7dda crsreader.paramtype = \u7121\u6cd5\u63a8\u65b7\u53c3\u6578\u985e\u578b +crsreader.connecterr = RowSetReader \u767c\u751f\u5167\u90e8\u932f\u8aa4\uff1a\u6c92\u6709\u9023\u7dda\u6216\u6307\u4ee4 +crsreader.datedetected = \u5075\u6e2c\u5230\u65e5\u671f +crsreader.caldetected = \u5075\u6e2c\u5230\u884c\u4e8b\u66c6 #CachedRowSetWriter exceptions crswriter.connect = \u7121\u6cd5\u5efa\u7acb\u9023\u7dda crswriter.tname = writeData \u4e0d\u80fd\u6c7a\u5b9a\u8868\u540d\u7a31 -crswriter.params1 = params1 \u7684\u503c\uff1a{0} -crswriter.params2 = params2 \u7684\u503c\uff1a{0} +crswriter.params1 = params1 \u7684\u503c\uff1a{0} +crswriter.params2 = params2 \u7684\u503c\uff1a{0} +crswriter.conflictsno = \u540c\u6b65\u5316\u6642\u767c\u751f\u885d\u7a81 #InsertRow exceptions insertrow.novalue = \u5c1a\u672a\u63d2\u5165\u503c #SyncResolverImpl exceptions -syncrsimpl.indexval = \u7d22\u5f15\u503c\u8d85\u51fa\u7bc4\u570d +syncrsimpl.indexval = \u7d22\u5f15\u503c\u8d85\u51fa\u7bc4\u570d syncrsimpl.noconflict = \u6b64\u6b04\u4e0d\u885d\u7a81 syncrsimpl.syncnotpos = \u4e0d\u53ef\u80fd\u540c\u6b65\u5316 syncrsimpl.valtores = \u8981\u89e3\u6790\u7684\u503c\u53ef\u4f4d\u65bc\u8cc7\u6599\u5eab\u6216 cachedrowset \u4e2d @@ -132,8 +141,6 @@ syncrsimpl.valtores = \u8981\u89e3\u6790\u7684\u503c\u53ef\u4f4d\u65bc\u8cc7\u65 wrsxmlreader.invalidcp = \u5df2\u5230\u9054 RowSet \u672b\u5c3e\u3002\u6e38\u6a19\u4f4d\u7f6e\u7121\u6548 wrsxmlreader.readxml = readXML\uff1a{0} wrsxmlreader.parseerr = ** \u5256\u6790\u932f\u8aa4 -wrsxmlreader.line = , \u884c -wrsxmlreader.uri = , uri #WebRowSetXmlWriter exceptions wrsxmlwriter.ioex = IOException\uff1a{0} @@ -141,28 +148,23 @@ wrsxmlwriter.sqlex = SQLException\uff1a{0} wrsxmlwriter.failedwrite = \u5beb\u5165\u503c\u5931\u6557 wsrxmlwriter.notproper = \u4e0d\u662f\u6b63\u78ba\u985e\u578b -#XmlReaderContentHandle exceptions +#XmlReaderContentHandler exceptions xmlrch.errmap = \u8a2d\u5b9a\u5c0d\u6620\u6642\u767c\u751f\u932f\u8aa4\uff1a{0} xmlrch.errmetadata = \u8a2d\u5b9a\u5143\u8cc7\u6599\u6642\u767c\u751f\u932f\u8aa4\uff1a{0} -xmlrch.errinsert = \u63d2\u5165\u503c\u6642\u767c\u751f\u932f\u8aa4\uff1a{0} +xmlrch.errinsert = \u63d2\u5165\u503c\u6642\u767c\u751f\u932f\u8aa4: {0} xmlrch.errconstr = \u5efa\u69cb\u5217\u6642\u767c\u751f\u932f\u8aa4\uff1a{0} xmlrch.errdel = \u522a\u9664\u5217\u6642\u767c\u751f\u932f\u8aa4\uff1a{0} xmlrch.errinsert = \u5efa\u69cb\u63d2\u5165\u5217\u6642\u767c\u751f\u932f\u8aa4\uff1a{0} xmlrch.errinsdel = \u5efa\u69cb insdel \u5217\u6642\u767c\u751f\u932f\u8aa4\uff1a{0} xmlrch.errupdate = \u5efa\u69cb\u66f4\u65b0\u5217\u6642\u767c\u751f\u932f\u8aa4\uff1a{0} -xmlrch errupdrow = \u66f4\u65b0\u5217\u6642\u767c\u751f\u932f\u8aa4\uff1a{0} +xmlrch.errupdrow = \u66f4\u65b0\u5217\u6642\u767c\u751f\u932f\u8aa4: {0} xmlrch.chars = \u5b57\u5143\uff1a xmlrch.badvalue = \u932f\u8aa4\u7684\u503c\uff1b\u7279\u6027\u4e0d\u80fd\u70ba\u7a7a xmlrch.badvalue1 = \u932f\u8aa4\u7684\u503c\uff1b\u5143\u8cc7\u6599\u4e0d\u80fd\u70ba\u7a7a -xmlrch.warning = ** \u8b66\u544a -xmlrch.line = , \u884c -xmlrch.uri = , uri +xmlrch.warning = ** \u8b66\u544a #RIOptimisticProvider Exceptions riop.locking = \u4e0d\u652f\u63f4\u9396\u5b9a\u5206\u985e #RIXMLProvider exceptions rixml.unsupp = RIXMLProvider \u4e0d\u652f\u63f4 - - - diff --git a/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_de.properties b/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_de.properties index b3455977738..bab2c4296a6 100644 --- a/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_de.properties +++ b/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_de.properties @@ -49,12 +49,11 @@ FileChooser.fileDescriptionText=Allgemeine Datei FileChooser.directoryDescriptionText=Verzeichnis FileChooser.newFolderErrorText=Fehler beim Erstellen eines neuen Ordners FileChooser.newFolderErrorSeparator= : -FileChooser.newFolderParentDoesntExistTitleText=Unable to create folder -FileChooser.newFolderParentDoesntExistText=Unable to create the folder.\n\nThe system cannot find the path specified. -FileChooser.renameErrorTitleText=Error Renaming File or Folder -FileChooser.renameErrorText=Cannot rename {0} -FileChooser.renameErrorFileExistsText=Cannot rename {0}: A file with the name you specified already exists. \ - Specify a different file name. +FileChooser.newFolderParentDoesntExistTitleText=Ordner kann nicht erstellt werden +FileChooser.newFolderParentDoesntExistText=Der Ordner kann nicht erstellt werden.\n\nDas System kann den angegebenen Pfad nicht finden. +FileChooser.renameErrorTitleText=Fehler beim Umbenennen der Datei oder des Ordners +FileChooser.renameErrorText={0} kann nicht umbenannt werden +FileChooser.renameErrorFileExistsText={0} kann nicht umbenannt werden: Es ist bereits eine Datei mit diesem Namen vorhanden. Geben Sie einen anderen Dateinamen an. FileChooser.acceptAllFileFilterText=Alle Dateien FileChooser.cancelButtonText=Abbrechen FileChooser.cancelButtonMnemonic=65 @@ -108,16 +107,16 @@ ColorChooser.swatchesRecentText=Aktuell: # xxxDisplayedMnemonicIndex. ColorChooser.hsvNameText=HSV ColorChooser.hsvMnemonic=72 -ColorChooser.hsvHueText=Hue -ColorChooser.hsvSaturationText=Saturation -ColorChooser.hsvValueText=Value -ColorChooser.hsvTransparencyText=Transparency +ColorChooser.hsvHueText=Farbton +ColorChooser.hsvSaturationText=S\u00e4ttigung +ColorChooser.hsvValueText=Wert +ColorChooser.hsvTransparencyText=Transparenz ColorChooser.hslNameText=HSL ColorChooser.hslMnemonic=76 -ColorChooser.hslHueText=Hue -ColorChooser.hslSaturationText=Saturation -ColorChooser.hslLightnessText=Lightness -ColorChooser.hslTransparencyText=Transparency +ColorChooser.hslHueText=Farbton +ColorChooser.hslSaturationText=S\u00e4ttigung +ColorChooser.hslLightnessText=Helligkeit +ColorChooser.hslTransparencyText=Transparenz ColorChooser.rgbNameText=RGB ColorChooser.rgbMnemonic=71 ColorChooser.rgbRedText=Rot @@ -127,14 +126,14 @@ ColorChooser.rgbGreenMnemonic=78 ColorChooser.rgbBlueText=Blau ColorChooser.rgbBlueMnemonic=66 ColorChooser.rgbAlphaText=Alpha -ColorChooser.rgbHexCodeText=Color Code +ColorChooser.rgbHexCodeText=Farbcode ColorChooser.rgbHexCodeMnemonic=67 ColorChooser.cmykNameText=CMYK ColorChooser.cmykMnemonic=77 ColorChooser.cmykCyanText=Cyan ColorChooser.cmykMagentaText=Magenta -ColorChooser.cmykYellowText=Yellow -ColorChooser.cmykBlackText=Black +ColorChooser.cmykYellowText=Gelb +ColorChooser.cmykBlackText=Schwarz ColorChooser.cmykAlphaText=Alpha ############ OPTION PANE STRINGS ############# diff --git a/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_es.properties b/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_es.properties index 75877dd6560..abc99fadb07 100644 --- a/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_es.properties +++ b/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_es.properties @@ -49,12 +49,11 @@ FileChooser.fileDescriptionText=Archivo gen\u00e9rico FileChooser.directoryDescriptionText=Directorio FileChooser.newFolderErrorText=Error al crear una nueva carpeta FileChooser.newFolderErrorSeparator= : -FileChooser.newFolderParentDoesntExistTitleText=Unable to create folder -FileChooser.newFolderParentDoesntExistText=Unable to create the folder.\n\nThe system cannot find the path specified. -FileChooser.renameErrorTitleText=Error Renaming File or Folder -FileChooser.renameErrorText=Cannot rename {0} -FileChooser.renameErrorFileExistsText=Cannot rename {0}: A file with the name you specified already exists. \ - Specify a different file name. +FileChooser.newFolderParentDoesntExistTitleText=No se ha podido crear la carpeta +FileChooser.newFolderParentDoesntExistText=No se ha podido crear la carpeta.\n\nEl sistema no puede encontrar la ruta especificada. +FileChooser.renameErrorTitleText=Error al cambiar de nombre el archivo o la carpeta +FileChooser.renameErrorText=No se puede cambiar de nombre {0} +FileChooser.renameErrorFileExistsText=No se puede cambiar de nombre {0}: Ya existe un archivo con el nombre que ha especificado. Especifique otro nombre de archivo. FileChooser.acceptAllFileFilterText=Todos los archivos FileChooser.cancelButtonText=Cancelar FileChooser.cancelButtonMnemonic=67 @@ -108,16 +107,16 @@ ColorChooser.swatchesRecentText=Reciente: # xxxDisplayedMnemonicIndex. ColorChooser.hsvNameText=HSV ColorChooser.hsvMnemonic=72 -ColorChooser.hsvHueText=Hue -ColorChooser.hsvSaturationText=Saturation -ColorChooser.hsvValueText=Value -ColorChooser.hsvTransparencyText=Transparency +ColorChooser.hsvHueText=Matriz +ColorChooser.hsvSaturationText=Saturaci\u00f3n +ColorChooser.hsvValueText=Valor +ColorChooser.hsvTransparencyText=Transparencia ColorChooser.hslNameText=HSL ColorChooser.hslMnemonic=76 -ColorChooser.hslHueText=Hue -ColorChooser.hslSaturationText=Saturation -ColorChooser.hslLightnessText=Lightness -ColorChooser.hslTransparencyText=Transparency +ColorChooser.hslHueText=Matriz +ColorChooser.hslSaturationText=Saturaci\u00f3n +ColorChooser.hslLightnessText=Brillo +ColorChooser.hslTransparencyText=Transparencia ColorChooser.rgbNameText=RGB ColorChooser.rgbMnemonic=71 ColorChooser.rgbRedText=Rojo @@ -127,14 +126,14 @@ ColorChooser.rgbGreenMnemonic=86 ColorChooser.rgbBlueText=Azul ColorChooser.rgbBlueMnemonic=76 ColorChooser.rgbAlphaText=Alpha -ColorChooser.rgbHexCodeText=Color Code +ColorChooser.rgbHexCodeText=C\u00f3digo de color ColorChooser.rgbHexCodeMnemonic=67 ColorChooser.cmykNameText=CMYK ColorChooser.cmykMnemonic=77 -ColorChooser.cmykCyanText=Cyan +ColorChooser.cmykCyanText=Cian ColorChooser.cmykMagentaText=Magenta -ColorChooser.cmykYellowText=Yellow -ColorChooser.cmykBlackText=Black +ColorChooser.cmykYellowText=Amarillo +ColorChooser.cmykBlackText=Negro ColorChooser.cmykAlphaText=Alpha ############ OPTION PANE STRINGS ############# diff --git a/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_fr.properties b/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_fr.properties index 333a1a82fa1..e2085390876 100644 --- a/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_fr.properties +++ b/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_fr.properties @@ -49,12 +49,11 @@ FileChooser.fileDescriptionText=Fichier g\u00e9n\u00e9rique FileChooser.directoryDescriptionText=R\u00e9pertoire FileChooser.newFolderErrorText=Erreur lors de la cr\u00e9ation du nouveau dossier FileChooser.newFolderErrorSeparator= : -FileChooser.newFolderParentDoesntExistTitleText=Unable to create folder -FileChooser.newFolderParentDoesntExistText=Unable to create the folder.\n\nThe system cannot find the path specified. -FileChooser.renameErrorTitleText=Error Renaming File or Folder -FileChooser.renameErrorText=Cannot rename {0} -FileChooser.renameErrorFileExistsText=Cannot rename {0}: A file with the name you specified already exists. \ - Specify a different file name. +FileChooser.newFolderParentDoesntExistTitleText=Impossible de cr\u00e9er le dossier +FileChooser.newFolderParentDoesntExistText=Impossible de cr\u00e9er le dossier.\n\nLe syst\u00e8me ne trouve pas le chemin sp\u00e9cifi\u00e9. +FileChooser.renameErrorTitleText=Erreur lors de la modification du nom du fichier ou du dossier +FileChooser.renameErrorText=Impossible de renommer {0} +FileChooser.renameErrorFileExistsText=Impossible de renommer {0}\u00a0: un fichier portant ce nom existe d\u00e9j\u00e0. Choisissez un nom diff\u00e9rent. FileChooser.acceptAllFileFilterText=Tous les fichiers FileChooser.cancelButtonText=Annuler FileChooser.cancelButtonMnemonic=65 @@ -108,16 +107,16 @@ ColorChooser.swatchesRecentText=Dernier : # xxxDisplayedMnemonicIndex. ColorChooser.hsvNameText=HSV ColorChooser.hsvMnemonic=72 -ColorChooser.hsvHueText=Hue +ColorChooser.hsvHueText=Teinte ColorChooser.hsvSaturationText=Saturation -ColorChooser.hsvValueText=Value -ColorChooser.hsvTransparencyText=Transparency +ColorChooser.hsvValueText=Valeur +ColorChooser.hsvTransparencyText=Transparence ColorChooser.hslNameText=HSL ColorChooser.hslMnemonic=76 -ColorChooser.hslHueText=Hue +ColorChooser.hslHueText=Teinte ColorChooser.hslSaturationText=Saturation -ColorChooser.hslLightnessText=Lightness -ColorChooser.hslTransparencyText=Transparency +ColorChooser.hslLightnessText=Clart\u00e9 +ColorChooser.hslTransparencyText=Transparence ColorChooser.rgbNameText=RVB ColorChooser.rgbMnemonic=86 ColorChooser.rgbRedText=Rouge @@ -127,14 +126,14 @@ ColorChooser.rgbGreenMnemonic=84 ColorChooser.rgbBlueText=Bleu ColorChooser.rgbBlueMnemonic=66 ColorChooser.rgbAlphaText=Alpha -ColorChooser.rgbHexCodeText=Color Code +ColorChooser.rgbHexCodeText=Code couleur ColorChooser.rgbHexCodeMnemonic=67 ColorChooser.cmykNameText=CMYK ColorChooser.cmykMnemonic=77 ColorChooser.cmykCyanText=Cyan ColorChooser.cmykMagentaText=Magenta -ColorChooser.cmykYellowText=Yellow -ColorChooser.cmykBlackText=Black +ColorChooser.cmykYellowText=Jaune +ColorChooser.cmykBlackText=Noir ColorChooser.cmykAlphaText=Alpha ############ OPTION PANE STRINGS ############# diff --git a/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_it.properties b/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_it.properties index 7bc69dbcf5e..92b4e643974 100644 --- a/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_it.properties +++ b/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_it.properties @@ -49,12 +49,11 @@ FileChooser.fileDescriptionText=File generico FileChooser.directoryDescriptionText=Directory FileChooser.newFolderErrorText=Errore durante la creazione della nuova cartella FileChooser.newFolderErrorSeparator= : -FileChooser.newFolderParentDoesntExistTitleText=Unable to create folder -FileChooser.newFolderParentDoesntExistText=Unable to create the folder.\n\nThe system cannot find the path specified. -FileChooser.renameErrorTitleText=Error Renaming File or Folder -FileChooser.renameErrorText=Cannot rename {0} -FileChooser.renameErrorFileExistsText=Cannot rename {0}: A file with the name you specified already exists. \ - Specify a different file name. +FileChooser.newFolderParentDoesntExistTitleText=Impossibile creare la cartella +FileChooser.newFolderParentDoesntExistText=Impossibile creare la cartella.\n\nPercorso specificato non trovato nel sistema. +FileChooser.renameErrorTitleText=Errore di ridenominazione del file o della cartella +FileChooser.renameErrorText=Impossibile rinominare {0} +FileChooser.renameErrorFileExistsText=Impossibile rinominare {0}: esiste gi\u00e0 un file con il nome specificato. Specificare un nome file alternativo. FileChooser.acceptAllFileFilterText=Tutti i file FileChooser.cancelButtonText=Annulla FileChooser.cancelButtonMnemonic=65 @@ -108,16 +107,16 @@ ColorChooser.swatchesRecentText=Recenti: # xxxDisplayedMnemonicIndex. ColorChooser.hsvNameText=HSV ColorChooser.hsvMnemonic=72 -ColorChooser.hsvHueText=Hue -ColorChooser.hsvSaturationText=Saturation -ColorChooser.hsvValueText=Value -ColorChooser.hsvTransparencyText=Transparency +ColorChooser.hsvHueText=Tonalit\u00e0 +ColorChooser.hsvSaturationText=Saturazione +ColorChooser.hsvValueText=Valore +ColorChooser.hsvTransparencyText=Trasparenza ColorChooser.hslNameText=HSL ColorChooser.hslMnemonic=76 -ColorChooser.hslHueText=Hue -ColorChooser.hslSaturationText=Saturation -ColorChooser.hslLightnessText=Lightness -ColorChooser.hslTransparencyText=Transparency +ColorChooser.hslHueText=Tonalit\u00e0 +ColorChooser.hslSaturationText=Saturazione +ColorChooser.hslLightnessText=Luminosit\u00e0 +ColorChooser.hslTransparencyText=Trasparenza ColorChooser.rgbNameText=RGB ColorChooser.rgbMnemonic=71 ColorChooser.rgbRedText=Rosso @@ -126,16 +125,16 @@ ColorChooser.rgbGreenText=Verde ColorChooser.rgbGreenMnemonic=69 ColorChooser.rgbBlueText=Blu ColorChooser.rgbBlueMnemonic=66 -ColorChooser.rgbAlphaText=Alpha -ColorChooser.rgbHexCodeText=Color Code +ColorChooser.rgbAlphaText=Alfa +ColorChooser.rgbHexCodeText=Codice colore ColorChooser.rgbHexCodeMnemonic=67 ColorChooser.cmykNameText=CMYK ColorChooser.cmykMnemonic=77 -ColorChooser.cmykCyanText=Cyan +ColorChooser.cmykCyanText=Ciano ColorChooser.cmykMagentaText=Magenta -ColorChooser.cmykYellowText=Yellow -ColorChooser.cmykBlackText=Black -ColorChooser.cmykAlphaText=Alpha +ColorChooser.cmykYellowText=Giallo +ColorChooser.cmykBlackText=Nero +ColorChooser.cmykAlphaText=Alfa ############ OPTION PANE STRINGS ############# # Mnemonic keys correspond to KeyEvent.VK_XXX constant diff --git a/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_ja.properties b/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_ja.properties index 5603e9aa1bc..521800da170 100644 --- a/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_ja.properties +++ b/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_ja.properties @@ -49,12 +49,11 @@ FileChooser.fileDescriptionText=\u6c4e\u7528\u30d5\u30a1\u30a4\u30eb FileChooser.directoryDescriptionText=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea FileChooser.newFolderErrorText=\u65b0\u898f\u30d5\u30a9\u30eb\u30c0\u306e\u4f5c\u6210\u306b\u5931\u6557 FileChooser.newFolderErrorSeparator= : -FileChooser.newFolderParentDoesntExistTitleText=Unable to create folder -FileChooser.newFolderParentDoesntExistText=Unable to create the folder.\n\nThe system cannot find the path specified. -FileChooser.renameErrorTitleText=Error Renaming File or Folder -FileChooser.renameErrorText=Cannot rename {0} -FileChooser.renameErrorFileExistsText=Cannot rename {0}: A file with the name you specified already exists. \ - Specify a different file name. +FileChooser.newFolderParentDoesntExistTitleText=\u30d5\u30a9\u30eb\u30c0\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093 +FileChooser.newFolderParentDoesntExistText=\u30d5\u30a9\u30eb\u30c0\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3002\n\n\u6307\u5b9a\u3055\u308c\u305f\u30d1\u30b9\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002 +FileChooser.renameErrorTitleText=\u30d5\u30a1\u30a4\u30eb\u307e\u305f\u306f\u30d5\u30a9\u30eb\u30c0\u306e\u540d\u524d\u5909\u66f4\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002 +FileChooser.renameErrorText={0} \u306e\u540d\u524d\u3092\u5909\u66f4\u3067\u304d\u307e\u305b\u3093\u3002 +FileChooser.renameErrorFileExistsText={0} \u306e\u540d\u524d\u3092\u5909\u66f4\u3067\u304d\u307e\u305b\u3093: \u6307\u5b9a\u3055\u308c\u305f\u540d\u524d\u306e\u30d5\u30a1\u30a4\u30eb\u304c\u3059\u3067\u306b\u5b58\u5728\u3057\u3066\u3044\u307e\u3059\u3002\u5225\u306e\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002 FileChooser.acceptAllFileFilterText=\u3059\u3079\u3066\u306e\u30d5\u30a1\u30a4\u30eb FileChooser.cancelButtonText=\u53d6\u6d88\u3057 FileChooser.cancelButtonMnemonic=67 @@ -108,16 +107,16 @@ ColorChooser.swatchesRecentText=\u6700\u65b0: # xxxDisplayedMnemonicIndex. ColorChooser.hsvNameText=HSV ColorChooser.hsvMnemonic=72 -ColorChooser.hsvHueText=Hue -ColorChooser.hsvSaturationText=Saturation -ColorChooser.hsvValueText=Value -ColorChooser.hsvTransparencyText=Transparency +ColorChooser.hsvHueText=\u8272\u5408\u3044 +ColorChooser.hsvSaturationText=\u5f69\u5ea6 +ColorChooser.hsvValueText=\u5024 +ColorChooser.hsvTransparencyText=\u900f\u660e\u5ea6 ColorChooser.hslNameText=HSL ColorChooser.hslMnemonic=76 -ColorChooser.hslHueText=Hue -ColorChooser.hslSaturationText=Saturation -ColorChooser.hslLightnessText=Lightness -ColorChooser.hslTransparencyText=Transparency +ColorChooser.hslHueText=\u8272\u5408\u3044 +ColorChooser.hslSaturationText=\u5f69\u5ea6 +ColorChooser.hslLightnessText=\u660e\u5ea6 +ColorChooser.hslTransparencyText=\u900f\u660e\u5ea6 ColorChooser.rgbNameText=RGB ColorChooser.rgbMnemonic=71 ColorChooser.rgbRedText=\u8d64(D) @@ -126,16 +125,16 @@ ColorChooser.rgbGreenText=\u7dd1(N) ColorChooser.rgbGreenMnemonic=78 ColorChooser.rgbBlueText=\u9752(B) ColorChooser.rgbBlueMnemonic=66 -ColorChooser.rgbAlphaText=Alpha -ColorChooser.rgbHexCodeText=Color Code +ColorChooser.rgbAlphaText=\u30a2\u30eb\u30d5\u30a1 +ColorChooser.rgbHexCodeText=\u8272\u30b3\u30fc\u30c9 ColorChooser.rgbHexCodeMnemonic=67 ColorChooser.cmykNameText=CMYK ColorChooser.cmykMnemonic=77 -ColorChooser.cmykCyanText=Cyan -ColorChooser.cmykMagentaText=Magenta -ColorChooser.cmykYellowText=Yellow -ColorChooser.cmykBlackText=Black -ColorChooser.cmykAlphaText=Alpha +ColorChooser.cmykCyanText=\u30b7\u30a2\u30f3 +ColorChooser.cmykMagentaText=\u30de\u30bc\u30f3\u30c0 +ColorChooser.cmykYellowText=\u9ec4 +ColorChooser.cmykBlackText=\u9ed2 +ColorChooser.cmykAlphaText=\u30a2\u30eb\u30d5\u30a1 ############ OPTION PANE STRINGS ############# # Mnemonic keys correspond to KeyEvent.VK_XXX constant diff --git a/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_ko.properties b/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_ko.properties index f3866d01f31..1ceea1a1576 100644 --- a/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_ko.properties +++ b/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_ko.properties @@ -49,12 +49,11 @@ FileChooser.fileDescriptionText=\uc77c\ubc18 \ud30c\uc77c FileChooser.directoryDescriptionText=\ub514\ub809\ud1a0\ub9ac FileChooser.newFolderErrorText=\uc0c8 \ud3f4\ub354 \uc791\uc131 \uc624\ub958 FileChooser.newFolderErrorSeparator= : -FileChooser.newFolderParentDoesntExistTitleText=Unable to create folder -FileChooser.newFolderParentDoesntExistText=Unable to create the folder.\n\nThe system cannot find the path specified. -FileChooser.renameErrorTitleText=Error Renaming File or Folder -FileChooser.renameErrorText=Cannot rename {0} -FileChooser.renameErrorFileExistsText=Cannot rename {0}: A file with the name you specified already exists. \ - Specify a different file name. +FileChooser.newFolderParentDoesntExistTitleText=\ud3f4\ub354\ub97c \ub9cc\ub4e4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +FileChooser.newFolderParentDoesntExistText=\ud3f4\ub354\ub97c \ub9cc\ub4e4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.\n\n\uc2dc\uc2a4\ud15c\uc5d0\uc11c \uc9c0\uc815\ud55c \uacbd\ub85c\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +FileChooser.renameErrorTitleText=\ud30c\uc77c \ub610\ub294 \ud3f4\ub354 \uc774\ub984 \ubc14\uafb8\uae30 \uc624\ub958 +FileChooser.renameErrorText={0}\uc758 \uc774\ub984\uc744 \ubc14\uafc0 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +FileChooser.renameErrorFileExistsText={0}\uc758 \uc774\ub984\uc744 \ubc14\uafc0 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc9c0\uc815\ud55c \uc774\ub984\uc758 \ud30c\uc77c\uc774 \uc774\ubbf8 \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\ub978 \ud30c\uc77c \uc774\ub984\uc744 \uc9c0\uc815\ud558\uc2ed\uc2dc\uc624. FileChooser.acceptAllFileFilterText=\ubaa8\ub4e0 \ud30c\uc77c FileChooser.cancelButtonText=\ucde8\uc18c FileChooser.cancelButtonMnemonic=67 @@ -108,16 +107,16 @@ ColorChooser.swatchesRecentText=\ucd5c\uadfc \ubaa9\ub85d: # xxxDisplayedMnemonicIndex. ColorChooser.hsvNameText=HSV ColorChooser.hsvMnemonic=72 -ColorChooser.hsvHueText=Hue -ColorChooser.hsvSaturationText=Saturation -ColorChooser.hsvValueText=Value -ColorChooser.hsvTransparencyText=Transparency +ColorChooser.hsvHueText=\uc0c9\uc0c1 +ColorChooser.hsvSaturationText=\ucc44\ub3c4 +ColorChooser.hsvValueText=\uac12 +ColorChooser.hsvTransparencyText=\ud22c\uba85\ub3c4 ColorChooser.hslNameText=HSL ColorChooser.hslMnemonic=76 -ColorChooser.hslHueText=Hue -ColorChooser.hslSaturationText=Saturation -ColorChooser.hslLightnessText=Lightness -ColorChooser.hslTransparencyText=Transparency +ColorChooser.hslHueText=\uc0c9\uc0c1 +ColorChooser.hslSaturationText=\ucc44\ub3c4 +ColorChooser.hslLightnessText=\ubc1d\uae30 +ColorChooser.hslTransparencyText=\ud22c\uba85\ub3c4 ColorChooser.rgbNameText=RGB ColorChooser.rgbMnemonic=71 ColorChooser.rgbRedText=\ube68\uac04\uc0c9(D) @@ -126,16 +125,16 @@ ColorChooser.rgbGreenText=\ub179\uc0c9(N) ColorChooser.rgbGreenMnemonic=78 ColorChooser.rgbBlueText=\ud30c\ub780\uc0c9(B) ColorChooser.rgbBlueMnemonic=66 -ColorChooser.rgbAlphaText=Alpha -ColorChooser.rgbHexCodeText=Color Code +ColorChooser.rgbAlphaText=\uc54c\ud30c +ColorChooser.rgbHexCodeText=\uceec\ub7ec \ucf54\ub4dc ColorChooser.rgbHexCodeMnemonic=67 ColorChooser.cmykNameText=CMYK ColorChooser.cmykMnemonic=77 -ColorChooser.cmykCyanText=Cyan -ColorChooser.cmykMagentaText=Magenta -ColorChooser.cmykYellowText=Yellow -ColorChooser.cmykBlackText=Black -ColorChooser.cmykAlphaText=Alpha +ColorChooser.cmykCyanText=\uccad\ub85d\uc0c9 +ColorChooser.cmykMagentaText=\uc790\ud64d\uc0c9 +ColorChooser.cmykYellowText=\ub178\ub780\uc0c9 +ColorChooser.cmykBlackText=\ud751\uc0c9 +ColorChooser.cmykAlphaText=\uc54c\ud30c ############ OPTION PANE STRINGS ############# # Mnemonic keys correspond to KeyEvent.VK_XXX constant diff --git a/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_sv.properties b/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_sv.properties index 17ef3b2be26..01e9b9bc5f8 100644 --- a/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_sv.properties +++ b/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_sv.properties @@ -49,12 +49,11 @@ FileChooser.fileDescriptionText=Generisk fil FileChooser.directoryDescriptionText=Katalog FileChooser.newFolderErrorText=Fel d\u00e5 ny mapp skapades FileChooser.newFolderErrorSeparator= : -FileChooser.newFolderParentDoesntExistTitleText=Unable to create folder -FileChooser.newFolderParentDoesntExistText=Unable to create the folder.\n\nThe system cannot find the path specified. -FileChooser.renameErrorTitleText=Error Renaming File or Folder -FileChooser.renameErrorText=Cannot rename {0} -FileChooser.renameErrorFileExistsText=Cannot rename {0}: A file with the name you specified already exists. \ - Specify a different file name. +FileChooser.newFolderParentDoesntExistTitleText=Det gick inte att skapa mappen +FileChooser.newFolderParentDoesntExistText=Det gick inte att skapa mappen.\n\nSystemet hittade inte den angivna s\u00f6kv\u00e4gen. +FileChooser.renameErrorTitleText=Det gick inte att byta namn p\u00e5 filen eller mappen +FileChooser.renameErrorText=Det gick inte byta namn p\u00e5 {0} +FileChooser.renameErrorFileExistsText=Det gick inte byta namn p\u00e5 {0}: Det finns redan en fil med det namnet. Ge den ett annat namn. FileChooser.acceptAllFileFilterText=Alla filer FileChooser.cancelButtonText=Avbryt FileChooser.cancelButtonMnemonic=65 @@ -106,18 +105,18 @@ ColorChooser.swatchesRecentText=Tidigare: # constant, and an index into the text to render the mnemonic as. The # mnemonic is xxxMnemonic and the index of the character to underline is # xxxDisplayedMnemonicIndex. -ColorChooser.hsvNameText=HSV +ColorChooser.hsvNameText=NMI ColorChooser.hsvMnemonic=72 -ColorChooser.hsvHueText=Hue -ColorChooser.hsvSaturationText=Saturation -ColorChooser.hsvValueText=Value -ColorChooser.hsvTransparencyText=Transparency +ColorChooser.hsvHueText=Nyans +ColorChooser.hsvSaturationText=M\u00e4ttnad +ColorChooser.hsvValueText=V\u00e4rde +ColorChooser.hsvTransparencyText=Genomskinlighet ColorChooser.hslNameText=HSL ColorChooser.hslMnemonic=76 -ColorChooser.hslHueText=Hue -ColorChooser.hslSaturationText=Saturation -ColorChooser.hslLightnessText=Lightness -ColorChooser.hslTransparencyText=Transparency +ColorChooser.hslHueText=Nyans +ColorChooser.hslSaturationText=M\u00e4ttnad +ColorChooser.hslLightnessText=Ljusstyrka +ColorChooser.hslTransparencyText=Genomskinlighet ColorChooser.rgbNameText=RGB ColorChooser.rgbMnemonic=71 ColorChooser.rgbRedText=R\u00f6d @@ -126,16 +125,16 @@ ColorChooser.rgbGreenText=Gr\u00f6n ColorChooser.rgbGreenMnemonic=71 ColorChooser.rgbBlueText=Bl\u00e5 ColorChooser.rgbBlueMnemonic=66 -ColorChooser.rgbAlphaText=Alpha -ColorChooser.rgbHexCodeText=Color Code +ColorChooser.rgbAlphaText=Alfa +ColorChooser.rgbHexCodeText=F\u00e4rgkod ColorChooser.rgbHexCodeMnemonic=67 ColorChooser.cmykNameText=CMYK ColorChooser.cmykMnemonic=77 -ColorChooser.cmykCyanText=Cyan +ColorChooser.cmykCyanText=Cyanbl\u00e5 ColorChooser.cmykMagentaText=Magenta -ColorChooser.cmykYellowText=Yellow -ColorChooser.cmykBlackText=Black -ColorChooser.cmykAlphaText=Alpha +ColorChooser.cmykYellowText=Gul +ColorChooser.cmykBlackText=Svart +ColorChooser.cmykAlphaText=Alfa ############ OPTION PANE STRINGS ############# # Mnemonic keys correspond to KeyEvent.VK_XXX constant diff --git a/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_zh_CN.properties b/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_zh_CN.properties index b030c20a944..ccd16042b19 100644 --- a/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_zh_CN.properties +++ b/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_zh_CN.properties @@ -49,12 +49,11 @@ FileChooser.fileDescriptionText=\u666e\u901a\u7684\u6587\u4ef6 FileChooser.directoryDescriptionText=\u76ee\u5f55 FileChooser.newFolderErrorText=\u521b\u5efa\u65b0\u7684\u6587\u4ef6\u5939\u65f6\u53d1\u751f\u9519\u8bef FileChooser.newFolderErrorSeparator= : -FileChooser.newFolderParentDoesntExistTitleText=Unable to create folder -FileChooser.newFolderParentDoesntExistText=Unable to create the folder.\n\nThe system cannot find the path specified. -FileChooser.renameErrorTitleText=Error Renaming File or Folder -FileChooser.renameErrorText=Cannot rename {0} -FileChooser.renameErrorFileExistsText=Cannot rename {0}: A file with the name you specified already exists. \ - Specify a different file name. +FileChooser.newFolderParentDoesntExistTitleText=\u65e0\u6cd5\u521b\u5efa\u6587\u4ef6\u5939 +FileChooser.newFolderParentDoesntExistText=\u65e0\u6cd5\u521b\u5efa\u6587\u4ef6\u5939\u3002\n\n\u7cfb\u7edf\u65e0\u6cd5\u627e\u5230\u6307\u5b9a\u7684\u8def\u5f84\u3002 +FileChooser.renameErrorTitleText=\u91cd\u547d\u540d\u6587\u4ef6\u6216\u6587\u4ef6\u5939\u65f6\u51fa\u9519 +FileChooser.renameErrorText=\u65e0\u6cd5\u91cd\u547d\u540d {0} +FileChooser.renameErrorFileExistsText=\u65e0\u6cd5\u91cd\u547d\u540d {0}\uff1a\u5df2\u5b58\u5728\u5177\u6709\u6307\u5b9a\u540d\u79f0\u7684\u6587\u4ef6\u3002\u8bf7\u6307\u5b9a\u53e6\u4e00\u6587\u4ef6\u540d\u3002 FileChooser.acceptAllFileFilterText=\u6240\u6709\u6587\u4ef6 FileChooser.cancelButtonText=\u53d6\u6d88 FileChooser.cancelButtonMnemonic=67 @@ -108,16 +107,16 @@ ColorChooser.swatchesRecentText=\u6700\u8fd1: # xxxDisplayedMnemonicIndex. ColorChooser.hsvNameText=HSV ColorChooser.hsvMnemonic=72 -ColorChooser.hsvHueText=Hue -ColorChooser.hsvSaturationText=Saturation -ColorChooser.hsvValueText=Value -ColorChooser.hsvTransparencyText=Transparency +ColorChooser.hsvHueText=\u8272\u8c03 +ColorChooser.hsvSaturationText=\u9971\u548c +ColorChooser.hsvValueText=\u503c +ColorChooser.hsvTransparencyText=\u900f\u660e ColorChooser.hslNameText=HSL ColorChooser.hslMnemonic=76 -ColorChooser.hslHueText=Hue -ColorChooser.hslSaturationText=Saturation -ColorChooser.hslLightnessText=Lightness -ColorChooser.hslTransparencyText=Transparency +ColorChooser.hslHueText=\u8272\u8c03 +ColorChooser.hslSaturationText=\u9971\u548c +ColorChooser.hslLightnessText=\u4eae\u5ea6 +ColorChooser.hslTransparencyText=\u900f\u660e ColorChooser.rgbNameText=RGB ColorChooser.rgbMnemonic=71 ColorChooser.rgbRedText=\u7ea2 @@ -127,14 +126,14 @@ ColorChooser.rgbGreenMnemonic=78 ColorChooser.rgbBlueText=\u84dd ColorChooser.rgbBlueMnemonic=66 ColorChooser.rgbAlphaText=Alpha -ColorChooser.rgbHexCodeText=Color Code +ColorChooser.rgbHexCodeText=\u989c\u8272\u4ee3\u7801 ColorChooser.rgbHexCodeMnemonic=67 ColorChooser.cmykNameText=CMYK ColorChooser.cmykMnemonic=77 -ColorChooser.cmykCyanText=Cyan -ColorChooser.cmykMagentaText=Magenta -ColorChooser.cmykYellowText=Yellow -ColorChooser.cmykBlackText=Black +ColorChooser.cmykCyanText=\u9752\u8272 +ColorChooser.cmykMagentaText=\u54c1\u7ea2\u8272 +ColorChooser.cmykYellowText=\u9ec4\u8272 +ColorChooser.cmykBlackText=\u9ed1\u8272 ColorChooser.cmykAlphaText=Alpha ############ OPTION PANE STRINGS ############# diff --git a/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_zh_TW.properties b/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_zh_TW.properties index 47f99f0dcc9..38188218ee3 100644 --- a/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_zh_TW.properties +++ b/jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_zh_TW.properties @@ -49,12 +49,11 @@ FileChooser.fileDescriptionText=\u4e00\u822c\u6a94\u6848 FileChooser.directoryDescriptionText=\u76ee\u9304 FileChooser.newFolderErrorText=\u5efa\u7acb\u65b0\u6a94\u6848\u593e\u6642\u767c\u751f\u932f\u8aa4 FileChooser.newFolderErrorSeparator= : -FileChooser.newFolderParentDoesntExistTitleText=Unable to create folder -FileChooser.newFolderParentDoesntExistText=Unable to create the folder.\n\nThe system cannot find the path specified. -FileChooser.renameErrorTitleText=Error Renaming File or Folder -FileChooser.renameErrorText=Cannot rename {0} -FileChooser.renameErrorFileExistsText=Cannot rename {0}: A file with the name you specified already exists. \ - Specify a different file name. +FileChooser.newFolderParentDoesntExistTitleText=\u7121\u6cd5\u5efa\u7acb\u8cc7\u6599\u593e +FileChooser.newFolderParentDoesntExistText=\u7121\u6cd5\u5efa\u7acb\u8cc7\u6599\u593e\u3002\n\n\u7cfb\u7d71\u627e\u4e0d\u5230\u6240\u6307\u5b9a\u7684\u8def\u5f91\u3002 +FileChooser.renameErrorTitleText=\u91cd\u65b0\u547d\u540d\u6a94\u6848\u6216\u8cc7\u6599\u593e\u6642\u767c\u751f\u932f\u8aa4 +FileChooser.renameErrorText=\u7121\u6cd5\u91cd\u65b0\u547d\u540d {0} +FileChooser.renameErrorFileExistsText=\u7121\u6cd5\u91cd\u65b0\u547d\u540d {0}\uff1a\u60a8\u6307\u5b9a\u4e4b\u540d\u7a31\u7684\u6a94\u6848\u5df2\u5b58\u5728\u3002\u6307\u5b9a\u4e0d\u540c\u7684\u6a94\u6848\u540d\u7a31\u3002 FileChooser.acceptAllFileFilterText=\u6240\u6709\u6a94\u6848 FileChooser.cancelButtonText=\u53d6\u6d88 FileChooser.cancelButtonMnemonic=67 @@ -108,16 +107,16 @@ ColorChooser.swatchesRecentText=\u6700\u65b0\u9078\u64c7: # xxxDisplayedMnemonicIndex. ColorChooser.hsvNameText=HSV ColorChooser.hsvMnemonic=72 -ColorChooser.hsvHueText=Hue -ColorChooser.hsvSaturationText=Saturation -ColorChooser.hsvValueText=Value -ColorChooser.hsvTransparencyText=Transparency +ColorChooser.hsvHueText=\u8272\u8abf +ColorChooser.hsvSaturationText=\u98fd\u548c\u5ea6 +ColorChooser.hsvValueText=\u503c +ColorChooser.hsvTransparencyText=\u900f\u660e\u5ea6 ColorChooser.hslNameText=HSL ColorChooser.hslMnemonic=76 -ColorChooser.hslHueText=Hue -ColorChooser.hslSaturationText=Saturation -ColorChooser.hslLightnessText=Lightness -ColorChooser.hslTransparencyText=Transparency +ColorChooser.hslHueText=\u8272\u8abf +ColorChooser.hslSaturationText=\u98fd\u548c\u5ea6 +ColorChooser.hslLightnessText=\u4eae\u5ea6 +ColorChooser.hslTransparencyText=\u900f\u660e\u5ea6 ColorChooser.rgbNameText=RGB ColorChooser.rgbMnemonic=71 ColorChooser.rgbRedText=\u7d05\u8272(D) @@ -127,14 +126,14 @@ ColorChooser.rgbGreenMnemonic=78 ColorChooser.rgbBlueText=\u85cd\u8272(B) ColorChooser.rgbBlueMnemonic=66 ColorChooser.rgbAlphaText=Alpha -ColorChooser.rgbHexCodeText=Color Code +ColorChooser.rgbHexCodeText=\u8272\u78bc ColorChooser.rgbHexCodeMnemonic=67 ColorChooser.cmykNameText=CMYK ColorChooser.cmykMnemonic=77 -ColorChooser.cmykCyanText=Cyan -ColorChooser.cmykMagentaText=Magenta -ColorChooser.cmykYellowText=Yellow -ColorChooser.cmykBlackText=Black +ColorChooser.cmykCyanText=\u85cd\u7da0\u8272 +ColorChooser.cmykMagentaText=\u7d2b\u7d05\u8272 +ColorChooser.cmykYellowText=\u9ec3\u8272 +ColorChooser.cmykBlackText=\u9ed1\u8272 ColorChooser.cmykAlphaText=Alpha ############ OPTION PANE STRINGS ############# diff --git a/jdk/src/share/classes/sun/launcher/resources/launcher_de.properties b/jdk/src/share/classes/sun/launcher/resources/launcher_de.properties new file mode 100644 index 00000000000..3c37a2fd612 --- /dev/null +++ b/jdk/src/share/classes/sun/launcher/resources/launcher_de.properties @@ -0,0 +1,47 @@ +# +# Copyright 2007-2008 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. 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. +# + +# Translators please note do not translate the options themselves +java.launcher.opt.header = Verwendung: {0} [-options] class [args...]\n\ (um eine Klasse auszuf\u00fchren)\n oder {0} [-options] -jar jarfile [args...]\n\ (um eine Jar-Datei auszuf\u00fchren)\nwobei zu den Optionen folgende geh\u00f6ren:\n + +java.launcher.opt.datamodel =\ -d{0}\t zur Verwendung eines {0}-Bit-Datenmodells, falls verf\u00fcgbar\n +java.launcher.opt.vmselect =\ {0}\t zur Auswahl von "{1}" VM\n +java.launcher.opt.hotspot =\ {0}\t ist ein Synonym f\u00fcr "{1}" VM [deprecated]\n + +java.launcher.ergo.message1 =\ Standard-VM ist {0}, +java.launcher.ergo.message2 =\ da Sie auf einem Server-Class-Computer ausf\u00fchren.\n + +# Translators please note do not translate the options themselves +java.launcher.opt.footer =\ -cp \n\ -classpath \n\ A {0} getrennte Liste von Verzeichnissen, JAR-Archiven,\n\ und ZIP-Archiven f\u00fcr die Suche nach Klassendateien .\n\ -D=\n\ Systemeigenschaft festlegen\n\ -verbose[:class|gc|jni]\n\ ausf\u00fchrliche Ausgabe aktivieren\n\ -version Produktversion drucken und beenden\n\ -version:\n\ angegebene Version zum Ausf\u00fchren erforderlich \n\ -showversion Produktversion drucken und fortfahren\n\ -jre-restrict-search | -jre-no-restrict-search\n\ private JREs der Benutzer in Versionssuche ein-/ausschlie\u00dfen\n\ -? -help diese Hilfemeldung drucken\n\ -X Hilfe zu nicht standardm\u00e4\u00dfigen Optionen drucken\n\ -ea[:...|:]\n\ -enableassertions[:...|:]\n\ Assertions mit spezifizierter Granularit\u00e4t aktivieren\n\ -da[:...|:]\n\ -disableassertions[:...|:]\n\ Assertions mit spezifizierter Granularit\u00e4t deaktivieren\n\ -esa | --enablesystemassertions\n\ System-Assertions aktivieren\n\ -dsa | --disablesystemassertions\n\ System-Assertions deaktivieren\n\ -agentlib:[=]\n\ systemeigene Agent-Bibliothek laden , z.B. -agentlib:hprof\n\ siehe auch, -agentlib:jdwp=help und -agentlib:hprof=help\n\ -agentpath:[=]\n\ systemeigene Agent-Bibliothek \u00fcber vollst\u00e4ndigen Pfadnamen laden\n\ -javaagent:[=]\n\ Java Programmierungs-Sprachagenten laden, siehe java.lang.instrument\n\ -splash:\n\ Eingangsbildschirm mit spezifiziertem Bild anzeigen\nWeitere Informationen finden Sie unter http://java.sun.com/javase/reference. + +# Translators please note do not translate the options themselves +java.launcher.X.usage=\ -Xmixed gemischte Ausf\u00fchrung des Modus (Standard)\n\ -Xint nur interpretierte Ausf\u00fchrung des Modus\n\ -Xbootclasspath:\n\ Suchpfad f\u00fcr Bootstrap-Klassen und Ressourcen einrichten\n\ -Xbootclasspath/a:\n\ an das Ende des Bootstrap-Klassenpfads anh\u00e4ngen\n\ -Xbootclasspath/p:\n\ an den Beginn des Bootstrap-Klassenpfads anh\u00e4ngen\n\ -Xnoclassgc Klassen-Speicherbereinigung deaktivieren\n\ -Xincgc inkrementelle Speicherbereinigung aktivieren\n\ -Xloggc: GC-Status f\u00fcr eine Datei mit Zeitstempeln einrichten\n\ -Xbatch Hintergrund-Kompilation deaktivieren\n\ -Xms anf\u00e4ngliche Java Heap-Gr\u00f6\u00dfe einstellen\n\ -Xmx maximale Java Heap-Gr\u00f6\u00dfe einstellen\n\ -Xss Gr\u00f6\u00dfe des Java Thread-Stack einstellen\n\ -Xprof CPU-Profildaten ausgeben\n\ -Xfuture genaueste Pr\u00fcfungen aktivieren und zuk\u00fcnftige Standards absehen\n\ -Xrs Verwendung von OS-Signalen durch Java/VM reduzieren (siehe Dokumentation)\n\ -Xcheck:jni zus\u00e4tzliche Pr\u00fcfungen f\u00fcr JNI- Funktionen ausf\u00fchren\n\ -Xshare:off Nicht versuchen, freigegebene Klassendaten zu verwenden\n\ -Xshare:auto Freigegebene Klassendaten verwenden, wenn m\u00f6glich (Standard)\n\ -Xshare:on Nutzung freigegebener Daten ist erforderlich, ansonsten schl\u00e4gt der Vorgang fehl.\n\nDie -X-Optionen sind kein Standard und k\u00f6nnen \u00c4nderungen unterliegen.\n + +java.launcher.cls.error1=Fehler: Hauptklasse {0} wurde nicht gefunden +java.launcher.cls.error2=Fehler: Hauptmethode in Klasse {1} ist nicht {0}. Definieren Sie die folgende Hauptmethode:\n\ public static void main(String[] args) +java.launcher.cls.error3=Fehler: Hauptmethode muss einen Wert des Typs void in Klasse {0} anzeigen.\nDefinieren Sie die folgende Hauptmethode:\n\ public static void main(String[] args) +java.launcher.cls.error4=Fehler: Hauptmethode in Klasse {0} nicht gefunden. Definieren Sie die folgende Hauptmethode:\n\ public static void main(String[] args) + + diff --git a/jdk/src/share/classes/sun/launcher/resources/launcher_es.properties b/jdk/src/share/classes/sun/launcher/resources/launcher_es.properties new file mode 100644 index 00000000000..074c09fd4bc --- /dev/null +++ b/jdk/src/share/classes/sun/launcher/resources/launcher_es.properties @@ -0,0 +1,47 @@ +# +# Copyright 2007-2008 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. 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. +# + +# Translators please note do not translate the options themselves +java.launcher.opt.header = Uso: {0} [-options] class [args...]\n\ (para ejecutar una clase)\n o {0} [-options] -jar jarfile [args...]\n\ (para ejecutar un archivo jar)\nlas opciones pueden ser:\n + +java.launcher.opt.datamodel =\ -d{0}\t usar un modelo de datos de {0}-bits si est\u00e1 disponible\n +java.launcher.opt.vmselect =\ {0}\t para seleccionar "{1}" VM\n +java.launcher.opt.hotspot =\ {0}\t es un sin\u00f3nimo para la m\u00e1quina virtual "{1}" [deprecated]\n + +java.launcher.ergo.message1 =\ La m\u00e1quina virtual predeterminada es {0} +java.launcher.ergo.message2 =\ porque est\u00e1 trabajando en una m\u00e1quina de clase servidor.\n + +# Translators please note do not translate the options themselves +java.launcher.opt.footer =\ -cp \n\ -classpath \n\ Una {0} lista de directorios, archivos JAR,\n\ y archivos ZIP en los que buscar los archivos de clase.\n\ -D=\n\ establecer una propiedad de sistema\n\ -verbose[:class|gc|jni]\n\ permitir la salida detallada\n\ -version imprimir versi\u00f3n del producto y salir\n\ -version:\n\ solicitar la versi\u00f3n especificada para ejecutar\n\ -showversion imprimir versi\u00f3n del producto y continuar\n\ -jre-restrict-search | -jre-no-restrict-search\n\ incluir/excluir JRE privados del usuario en la b\u00fasqueda de la versi\u00f3n\n\ -? -help imprimir este mensaje de ayuda\n\ -X imprimir ayuda en las opciones no est\u00e1ndar\n\ -ea[:...|:]\n\ -enableassertions[:...|:]\n\ permitir afirmaciones con granularidad especificada\n\ -da[:...|:]\n\ -disableassertions[:...|:]\n\ desactivar afirmaciones con granularidad especificada\n\ -esa | -enablesystemassertions\n\ permitir afirmaciones del sistema\n\ -dsa | -disablesystemassertions\n\ desactivar afirmaciones del sistema\n\ -agentlib:[=]\n\ cargar biblioteca de agente nativo, por ejemplo -agentlib:hprof\n\ consulte tambi\u00e9n, -agentlib:jdwp=help y -agentlib:hprof=help\n\ -agentpath:[=]\n\ cargar biblioteca de agente nativo por ruta completa\n\ -javaagent:[=]\n\ cargar agente del lenguaje de programaci\u00f3n Java, consulte java.lang.instrument\n\ -splash:\n\ mostrar pantalla de bienvenida con imagen especificada\nConsulte http://java.sun.com/javase/reference para m\u00e1s informaci\u00f3n. + +# Translators please note do not translate the options themselves +java.launcher.X.usage=\ -Xmixed modo mixto de ejecuci\u00f3n (predeterminado)\n\ -Xint s\u00f3lo modo de ejecuci\u00f3n interpretado\n\ -Xbootclasspath:\n\ definir ruta de b\u00fasqueda para clases y recursos de la rutina de carga\n\ -Xbootclasspath/a:\n\ a\u00f1adir al final de la ruta de clase de la rutina de carga\n\ -Xbootclasspath/p:\n\ a\u00f1adir al principio de la ruta de clase de la rutina de carga\n\ -Xnoclassgc desactivar recolecci\u00f3n de residuos de clase\n\ -Xincgc permitir recolecci\u00f3n de residuos incremental\n\ -Xloggc: registrar estado de GC en un archivo con marcas de tiempo\n\ -Xbatch desactivar recopilaci\u00f3n de fondos\n\ -Xms definir tama\u00f1o del mont\u00f3n de Java inicial\n\ -Xmx definir tama\u00f1o m\u00e1ximo del mont\u00f3n de Java\n\ -Xss definir tama\u00f1o de la pila del subproceso de java\n\ -Xprof salida de datos del perfil de la cpu\n\ -Xfuture permitir comprobaciones m\u00e1s estrictas para los procesos predeterminados futuros\n\ -Xrs reducir el uso de se\u00f1ales del SO por parte de Java o la m\u00e1quina virtual (consulte la documentaci\u00f3n)\n\ -Xcheck:jni realizar comprobaciones adicionales para las funciones de JNI\n\ -Xshare:off no intentar utilizar datos de clase compartidos\n\ -Xshare:auto utilizar datos de clase compartidos siempre que sea posible (predeterminado)\n\ -Xshare:on solicitar el uso obligatorio de datos de clase compartidos.\n\nLas opciones "-X" no son est\u00e1ndar y pueden sufrir modificaciones sin previo aviso.\n + +java.launcher.cls.error1=Error: no se pudo encontrar la clase principal {0} +java.launcher.cls.error2=Error: el m\u00e9todo principal no es {0} en la clase {1}, defina el m\u00e9todo principal como:\n\ public static void main(String[] args) +java.launcher.cls.error3=Error: el m\u00e9todo principal debe volver a ser un valor de tipo vac\u00edo en la clase {0}, defina \nel m\u00e9todo principal como:\n\ public static void main(String[] args) +java.launcher.cls.error4=Error: m\u00e9todo principal no encontrado en la clase {0}, defina el m\u00e9todo principal como:\n\ public static void main(String[] args) + + diff --git a/jdk/src/share/classes/sun/launcher/resources/launcher_fr.properties b/jdk/src/share/classes/sun/launcher/resources/launcher_fr.properties new file mode 100644 index 00000000000..ea927d9a814 --- /dev/null +++ b/jdk/src/share/classes/sun/launcher/resources/launcher_fr.properties @@ -0,0 +1,47 @@ +# +# Copyright 2007-2008 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. 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. +# + +# Translators please note do not translate the options themselves +java.launcher.opt.header = Utilisation\u00a0: {0} [-options] class [args...]\n\ (pour ex\u00e9cuter une classe)\n ou {0} [-options] -jar jarfile [args...]\n\ (pour ex\u00e9cuter un fichier jar)\no\u00f9 les options sont\u00a0:\n + +java.launcher.opt.datamodel =\ -d{0}\t utiliser un mod\u00e8le de donn\u00e9es {0}\u00a0bits, le cas \u00e9ch\u00e9ant\n +java.launcher.opt.vmselect =\ {0}\t s\u00e9lectionner la machine virtuelle "{1}"\n +java.launcher.opt.hotspot =\ {0}\t est un synonyme de la machine virtuelle "{1}" [\u00e0 \u00e9viter]\n + +java.launcher.ergo.message1 =\ La machine virtuelle par d\u00e9faut est {0} +java.launcher.ergo.message2 =\ car vous utilisez une machine de type serveur.\n + +# Translators please note do not translate the options themselves +java.launcher.opt.footer =\ -cp \n\ -classpath \n\ Une liste s\u00e9par\u00e9e {0} de r\u00e9pertoires, archives JAR\n\ et archives ZIP dans laquelle rechercher des fichiers de classe.\n\ -D=\n\ d\u00e9finir une propri\u00e9t\u00e9 syst\u00e8me\n\ -verbose[:class|gc|jni]\n\ activer une sortie d\u00e9taill\u00e9ee\n\ -version imprimer la version du produit et quitter\n\ -version:\n\ utiliser la version sp\u00e9cifi\u00e9e pour l''ex\u00e9cution\n\ -showversion imprimer la version du produit et continuer\n\ -jre-restrict-search | -jre-no-restrict-search\n\ inclure/exclure les JRE priv\u00e9s d''utilisateur dans la recherche de version\n\ -? -help imprimer ce message d''aide\n\ -X imprimer l''aide relative aux options non standard\n\ -ea[:...|:]\n\ -enableassertions[:...|:]\n\ activer les assertions avec la granularit\u00e9 sp\u00e9cifi\u00e9e\n\ -da[:...|:]\n\ -disableassertions[:...|:]\n\ d\u00e9sactiver les assertions avec la granularit\u00e9 sp\u00e9cifi\u00e9e\n\ -esa | -enablesystemassertions\n\ activer les assertions syst\u00e8me\n\ -dsa | -disablesystemassertions\n\ d\u00e9sactiver les assertions syst\u00e8me\n\ -agentlib:[=]\n\ charger la biblioth\u00e8que d''agents natifs, par exemple -agentlib:hprof\n\ voir \u00e9galement, -agentlib:jdwp=help et -agentlib:hprof=help\n\ -agentpath:[=]\n\ charger la biblioth\u00e8que d''agents natifs en indiquant le chemin complet\n\ -javaagent:[=]\n\ charger l''agent de langage de programmation Java, voir java.lang.instrument\n\ -splash:\n\ afficher l''\u00e9cran de bienvenue avec l''image sp\u00e9cifi\u00e9e\nPour plus de d\u00e9tails, reportez-vous \u00e0 la page http://java.sun.com/javase/reference. + +# Translators please note do not translate the options themselves +java.launcher.X.usage=\ -Xmixed ex\u00e9cution du mode compil\u00e9 (par d\u00e9faut)\n\ -Xint ex\u00e9cution du mode interpr\u00e9t\u00e9 uniquement\n\ -Xbootclasspath:\n\ d\u00e9finir le chemin de recherche pour les classes et ressources bootstrap\n\ -Xbootclasspath/a:\n\ ajouter \u00e0 la fin du chemin de la classe bootstrap\n\ -Xbootclasspath/p:\n\ ajouter au d\u00e9but du chemin de la classe bootstrap\n\ -Xnoclassgc d\u00e9sactiver la collection d''informations parasites sur la classe\n\ -Xincgc activer la collection incr\u00e9mentielle d''informations parasites\n\ -Xloggc: enregistrer le statut GC dans un fichier horodat\u00e9\n\ -Xbatch d\u00e9sactiver la compilation d''arri\u00e8re-plans\n\ -Xms d\u00e9finir la taille initiale des tas Java\n\ -Xmx d\u00e9finir la taille maximale des tas Java\n\ -Xss d\u00e9finir la taille des piles de fil Java\n\ -Xprof \u00e9mettre des donn\u00e9es de profilage d''UC\n\ -Xfuture activer des contr\u00f4les plus stricts, en anticipant les erreurs futures\n\ -Xrs r\u00e9duire l''utilisation des signaux d''OS par Java/la machine virtuelle (reportez-vous \u00e0 la documentation)\n\ -Xcheck:jni effectuer des contr\u00f4les suppl\u00e9mentaires pour les fonctions JNI\n\ -Xshare:off ne pas tenter d''utiliser les donn\u00e9es de classe partag\u00e9es\n\ -Xshare:auto utiliser les donn\u00e9es de classe partag\u00e9es si possible (par d\u00e9faut)\n\ -Xshare:on forcer l''utilisation de donn\u00e9es de classe partag\u00e9es, sinon \u00e9chec.\n\nLes options\u00a0X ne sont pas standard et sont sujettes \u00e0 modification sans pr\u00e9avis.\n + +java.launcher.cls.error1=Erreur\u00a0: Impossible de trouver la classe {0} principale +java.launcher.cls.error2=Erreur\u00a0: La m\u00e9thode principale n''est pas {0} dans la classe {1}. Veuillez d\u00e9finir la m\u00e9thode principale comme\u00a0:\n\ public static void main(String[] args) +java.launcher.cls.error3=Erreur\u00a0: La m\u00e9thode principale doit renvoyer une valeur de type null dans la classe \{0\. Veuillez \nd\u00e9finir la m\u00e9thode principale comme\u00a0:\n\ public static void main(String[] args) +java.launcher.cls.error4=Erreur\u00a0: M\u00e9thode principale introuvable dans la classe {0}. Veuillez d\u00e9finir la m\u00e9thode principale comme\u00a0:\n\ public static void main(String[] args) + + diff --git a/jdk/src/share/classes/sun/launcher/resources/launcher_it.properties b/jdk/src/share/classes/sun/launcher/resources/launcher_it.properties new file mode 100644 index 00000000000..94043d0ebbc --- /dev/null +++ b/jdk/src/share/classes/sun/launcher/resources/launcher_it.properties @@ -0,0 +1,47 @@ +# +# Copyright 2007-2008 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. 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. +# + +# Translators please note do not translate the options themselves +java.launcher.opt.header = Utilizzo: {0} [-opzioni] class [argom...]\n\ (per eseguire una classe)\n o {0} [-opzioni] -jar jarfile [argom...]\n\ (per eseguire un file jar)\ndove le opzioni includono:\n + +java.launcher.opt.datamodel =\ -d{0}\t utilizzo di un modello di dati a {0} bit, se disponibile\n +java.launcher.opt.vmselect =\ {0}\t per selezionare la macchina virtuale "{1}"\n +java.launcher.opt.hotspot =\ {0}\t \u00e8 sinonimo della macchina virtuale "{1}" [obsoleta]\n + +java.launcher.ergo.message1 =\ La macchina virtuale predefinita \u00e8 {0} +java.launcher.ergo.message2 =\ perch\u00e9 l'esecuzione avviene su una macchina di classe server.\n + +# Translators please note do not translate the options themselves +java.launcher.opt.footer =\ -cp \n\ -classpath \n\ Elenco separato da {0} di directory, archivi JAR\n\ e archivi ZIP in cui cercare i file di classe.\n\ -D=\n\ imposta una propriet\u00e0 di sistema\n\ -verbose[:class|gc|jni]\n\ attiva l''output dettagliato\n\ -version stampa la versione del prodotto ed esce\n\ -version:\n\ richiede la versione specificata per l''esecuzione\n\ -showversion stampa la versione del prodotto e procede\n\ -jre-restrict-search | -jre-no-restrict-search\n\ consente di includere/escludere JRE privati dell''utente nella ricerca della versione\n\ -? -help stampa il presente messaggio della Guida\n\ -X stampa la Guida delle opzioni non standard\n\ -ea[:...|:]\n\ -enableassertions[:...|:]\n\ attiva le asserzioni con la granularit\u00e0 specificata\n\ -da[:...|:]\n\ -disableassertions[:...|:]\n\ disattiva le asserzioni con la granularit\u00e0 specificata\n\ -esa | -enablesystemassertions\n\ attiva le asserzioni di sistema\n\ -dsa | -disablesystemassertions\n\ disattiva le asserzioni di sistema\n\ -agentlib:[=]\n\ carica la libreria agente nativa , ad es. -agentlib:hprof\n\ vedere anche, -agentlib:jdwp=help e -agentlib:hprof=help\n\ -agentpath:[=]\n\ carica la libreria agente nativa in base al percorso completo\n\ -javaagent:[=]\n\ carica l''agente del linguaggio di programmazione Java, vedere java.lang.instrument\n\ -splash:\n\ mostra la schermata iniziale con l''immagine specificata\nPer ulteriori informazioni, visitare http://java.sun.com/javase/reference. + +# Translators please note do not translate the options themselves +java.launcher.X.usage=\ -Xmixed esecuzione in modalit\u00e0 mista (predefinita)\n\ -Xint solo esecuzione in modalit\u00e0 interpretata\n\ -Xbootclasspath:\n\ imposta il percorso di ricerca per classi e risorse di bootstrap\n\ -Xbootclasspath/a:\n\ accoda alla fine del percorso della classe di bootstrap\n\ -Xbootclasspath/p:\n\ antepone al percorso della classe di bootsrap\n\ -Xnoclassgc disattiva Garbage Collection per la classe\n\ -Xincgc attiva Garbage Collection incrementale\n\ -Xloggc: registra lo stato GC in un file con timestamp\n\ -Xbatch disattiva la compilazione in background\n\ -Xms imposta la dimensione heap Java iniziale\n\ -Xmx imposta la dimensione heap Java massima\n\ -Xss imposta la dimensione dello stack del thread Java\n\ -Xprof dati di profilo della CPU di output\n\ -Xfuture attiva verifiche pi\u00f9 dettagliate, anticipa le impostazioni predefinite future\n\ -Xrs riduce l''uso di segnali OS da parte di Java o della macchina virtuale (vedere la documentazione)\n\ -Xcheck:jni esegue verifiche aggiuntive per le funzioni JNI\n\ -Xshare:off esclude l''utilizzo di dati classe condivisi\n\ -Xshare:auto imposta l''utilizzo di dati classe condivisi ogni volta che \u00e8 possibile (impostazione predefinita)\n\ -Xshare:on richiede l''utilizzo di dati classe condivisi, in caso contrario origina un errore.\n\nLe opzioni -X sono non standard e soggette a modifiche senza preavviso.\n + +java.launcher.cls.error1=Errore: Classe principale {0} non trovata. +java.launcher.cls.error2=Errore: Il metodo principale non \u00e8 {0} nella classe {1}. Definire il nuovo metodo come:\n\ public static void main(String[] args) +java.launcher.cls.error3=Errore: Il metodo principale deve restituire un valore di tipo void nella classe {0}. \nDefinire il nuovo metodo come:\n\ public static void main(String[] args) +java.launcher.cls.error4=Errore: Metodo principale non trovato nella classe {0}. Definire il metodo principale come:\n\ public static void main(String[] args) + + diff --git a/jdk/src/share/classes/sun/launcher/resources/launcher_ja.properties b/jdk/src/share/classes/sun/launcher/resources/launcher_ja.properties new file mode 100644 index 00000000000..4d6676adbcb --- /dev/null +++ b/jdk/src/share/classes/sun/launcher/resources/launcher_ja.properties @@ -0,0 +1,47 @@ +# +# Copyright 2007-2008 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. 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. +# + +# Translators please note do not translate the options themselves +java.launcher.opt.header = \u4f7f\u7528\u6cd5: {0} [-options] class [args...]\n\ (\u30af\u30e9\u30b9\u3092\u5b9f\u884c\u3059\u308b)\n \u307e\u305f\u306f {0} [-options] -jar jarfile [args...]\n\ (jar \u30d5\u30a1\u30a4\u30eb\u3092\u5b9f\u884c\u3059\u308b)\n\u30aa\u30d7\u30b7\u30e7\u30f3\u306b\u306f\u4ee5\u4e0b\u306e\u3082\u306e\u304c\u3042\u308a\u307e\u3059:\n + +java.launcher.opt.datamodel =\ -d{0}\t {0}-bit \u30c7\u30fc\u30bf\u30e2\u30c7\u30eb\u3092\u4f7f\u7528 (\u53ef\u80fd\u306a\u5834\u5408)\n +java.launcher.opt.vmselect =\ {0}\t "{1}" VM \u3092\u9078\u629e\n +java.launcher.opt.hotspot =\ {0}\t "{1}" VM \u306e\u540c\u7fa9\u8a9e\u3067\u3059 [\u975e\u63a8\u5968]\n + +java.launcher.ergo.message1 =\ \u30c7\u30d5\u30a9\u30eb\u30c8 VM \u306f {0} \u3067\u3059 +java.launcher.ergo.message2 =\ \u7406\u7531\u306f\u3001\u30b5\u30fc\u30d0\u30fc\u30af\u30e9\u30b9\u306e\u30de\u30b7\u30f3\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u304b\u3089\u3067\u3059\u3002\n + +# Translators please note do not translate the options themselves +java.launcher.opt.footer =\ -cp <\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304a\u3088\u3073 ZIP/JAR \u30d5\u30a1\u30a4\u30eb\u306e\u30af\u30e9\u30b9\u691c\u7d22\u30d1\u30b9>\n\ -classpath <\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304a\u3088\u3073 ZIP/JAR \u30d5\u30a1\u30a4\u30eb\u306e\u30af\u30e9\u30b9\u691c\u7d22\u30d1\u30b9>\n\ \u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22\u3059\u308b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3001JAR \u30a2\u30fc\u30ab\u30a4\u30d6\u3001\n\ \u304a\u3088\u3073 ZIP \u30a2\u30fc\u30ab\u30a4\u30d6\u306e {0} \u3067\u5206\u5272\u3055\u308c\u305f\u30ea\u30b9\u30c8\u3002\n\ -D=\n\ \u30b7\u30b9\u30c6\u30e0\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc\u306e\u8a2d\u5b9a\n\ -verbose[:class|gc|jni]\n\ \u8a73\u7d30\u51fa\u529b\u306e\u6709\u52b9\u5316\n\ -version \u88fd\u54c1\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u5370\u5237\u3057\u3066\u7d42\u4e86\n\ -version:\n\ \u5b9f\u884c\u306b\u5fc5\u8981\u306a\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u8981\u6c42\n\ -showversion \u88fd\u54c1\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u5370\u5237\u3057\u3066\u7d99\u7d9a\n\ -jre-restrict-search | -jre-no-restrict-search\n\ \u30d0\u30fc\u30b8\u30e7\u30f3\u691c\u7d22\u306b\u30e6\u30fc\u30b6\u30fc\u306e\u975e\u516c\u958b JRE \u3092\u542b\u3081\u308b\u304b\u9664\u5916\u3059\u308b\u304b\u3092\u5207\u308a\u66ff\u3048\u308b\n\ -? -help \u3053\u306e\u30d8\u30eb\u30d7\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u5370\u5237\n\ -X \u975e\u6a19\u6e96\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u30d8\u30eb\u30d7\u3092\u5370\u5237\n\ -ea[:...|:]\n\ -enableassertions[:...|:]\n\ \u6307\u5b9a\u3057\u305f\u7c92\u5ea6\u3067\u30a2\u30b5\u30fc\u30b7\u30e7\u30f3\u3092\u6709\u52b9\u5316\n\ -da[:...|:]\n\ -disableassertions[:...|:]\n\ \u6307\u5b9a\u3057\u305f\u7c92\u5ea6\u3067\u30a2\u30b5\u30fc\u30b7\u30e7\u30f3\u3092\u7121\u52b9\u5316\n\ -esa | -enablesystemassertions\n\ \u30b7\u30b9\u30c6\u30e0\u30a2\u30b5\u30fc\u30b7\u30e7\u30f3\u3092\u6709\u52b9\u5316\n\ -dsa | -disablesystemassertions\n\ \u30b7\u30b9\u30c6\u30e0\u30a2\u30b5\u30fc\u30b7\u30e7\u30f3\u3092\u7121\u52b9\u5316\n\ -agentlib:[=]\n\ \u30cd\u30a4\u30c6\u30a3\u30d6\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u30e9\u30a4\u30d6\u30e9\u30ea (\u4f8b: -agentlib:hprof) \u3092\u30ed\u30fc\u30c9\n\ \u95a2\u9023\u9805\u76ee\u3001 -agentlib:jdwp=help and -agentlib:hprof=help\n\ -agentpath:[=]\n\ \u5b8c\u5168\u306a\u30d1\u30b9\u540d\u3067\u30cd\u30a4\u30c6\u30a3\u30d6\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u30ed\u30fc\u30c9\n\ -javaagent:[=]\n\ Java \u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u30ed\u30fc\u30c9\u3002java.lang.instrument \u3092\u53c2\u7167\n\ -splash:\n\ \u6307\u5b9a\u3057\u305f\u753b\u50cf\u306e\u30b9\u30d7\u30e9\u30c3\u30b7\u30e5\u753b\u9762\u3092\u8868\u793a\n\u8a73\u7d30\u306f http://java.sun.com/javase/reference \u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 + +# Translators please note do not translate the options themselves +java.launcher.X.usage=\ -Xmixed \u6df7\u5408\u30e2\u30fc\u30c9\u3067\u306e\u5b9f\u884c (\u30c7\u30d5\u30a9\u30eb\u30c8)\n\ -Xint \u30a4\u30f3\u30bf\u30fc\u30d7\u30ea\u30bf\u30e2\u30fc\u30c9\u3067\u306e\u307f\u5b9f\u884c\n\ -Xbootclasspath:\n\ \u30d6\u30fc\u30c8\u30b9\u30c8\u30e9\u30c3\u30d7\u30af\u30e9\u30b9\u304a\u3088\u3073\u30ea\u30bd\u30fc\u30b9\u306e\u691c\u7d22\u30d1\u30b9\u3092\u8a2d\u5b9a\n\ -Xbootclasspath/a:\n\ \u30d6\u30fc\u30c8\u30b9\u30c8\u30e9\u30c3\u30d7\u30af\u30e9\u30b9\u306e\u30d1\u30b9\u306e\u672b\u5c3e\u306b\u8ffd\u52a0\n\ -Xbootclasspath/p:\n\ \u30d6\u30fc\u30c8\u30b9\u30c8\u30e9\u30c3\u30d7\u30af\u30e9\u30b9\u306e\u30d1\u30b9\u306e\u5192\u982d\u306b\u8ffd\u52a0\n\ -Xnoclassgc \u30af\u30e9\u30b9\u30ac\u30fc\u30d9\u30fc\u30b8\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u3092\u7121\u52b9\u5316\n\ -Xincgc \u5897\u5206\u30ac\u30fc\u30d9\u30fc\u30b8\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u3092\u7121\u52b9\u5316\n\ -Xloggc: \u30d5\u30a1\u30a4\u30eb\u306e GC \u30b9\u30c6\u30fc\u30bf\u30b9\u3092\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u4ed8\u304d\u3067\u8a18\u9332\n\ -Xbatch \u30d0\u30c3\u30af\u30b0\u30e9\u30a6\u30f3\u30c9\u30b3\u30f3\u30d1\u30a4\u30eb\u3092\u7121\u52b9\u5316\n\ -Xms \u521d\u671f Java \u30d2\u30fc\u30d7\u30b5\u30a4\u30ba\u3092\u8a2d\u5b9a\n\ -Xmx \u6700\u5927 Java \u30d2\u30fc\u30d7\u30b5\u30a4\u30ba\u3092\u8a2d\u5b9a\n\ -Xss Java \u30b9\u30ec\u30c3\u30c9\u30b9\u30bf\u30c3\u30af\u30b5\u30a4\u30ba\u3092\u8a2d\u5b9a\n\ -Xprof CPU \u30d7\u30ed\u30d5\u30a1\u30a4\u30ea\u30f3\u30b0\u30c7\u30fc\u30bf\u3092\u51fa\u529b\n\ -Xfuture \u4eca\u5f8c\u30c7\u30d5\u30a9\u30eb\u30c8\u3068\u3059\u308b\u6700\u3082\u53b3\u683c\u306a\u30c1\u30a7\u30c3\u30af\u3092\u6709\u52b9\u5316\n\ -Xrs Java/VM \u306e OS \u30b7\u30b0\u30ca\u30eb\u4f7f\u7528\u3092\u524a\u6e1b (\u30de\u30cb\u30e5\u30a2\u30eb\u3092\u53c2\u7167)\n\ -Xcheck:jni JNI \u95a2\u6570\u306e\u8ffd\u52a0\u30c1\u30a7\u30c3\u30af\u3092\u5b9f\u884c\n\ -Xshare:off \u5171\u6709\u30af\u30e9\u30b9\u30c7\u30fc\u30bf\u306e\u4f7f\u7528\u3092\u8a66\u884c\u3057\u306a\u3044\n\ -Xshare:auto \u53ef\u80fd\u306a\u5834\u5408\u306f\u5171\u6709\u30af\u30e9\u30b9\u30c7\u30fc\u30bf\u3092\u4f7f\u7528 (\u30c7\u30d5\u30a9\u30eb\u30c8)\n\ -Xshare:on \u5171\u6709\u30af\u30e9\u30b9\u30c7\u30fc\u30bf\u306e\u4f7f\u7528\u3092\u8981\u6c42 (\u305d\u3046\u3057\u306a\u3044\u3068\u969c\u5bb3\u304c\u767a\u751f\u3059\u308b\u5834\u5408)\n\n-X \u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u975e\u6a19\u6e96\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u3042\u308a\u3001\u4e88\u544a\u306a\u304f\u5909\u66f4\u3055\u308c\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\n + +java.launcher.cls.error1=\u30a8\u30e9\u30fc: \u30e1\u30a4\u30f3\u30af\u30e9\u30b9 {0} \u3092\u691c\u51fa\u3067\u304d\u307e\u305b\u3093\u3002 +java.launcher.cls.error2=\u30a8\u30e9\u30fc: \u30af\u30e9\u30b9 {1} \u3067\u3001\u30e1\u30a4\u30f3\u30e1\u30bd\u30c3\u30c9\u304c {0} \u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u30e1\u30a4\u30f3\u30e1\u30bd\u30c3\u30c9\u3092\u6b21\u306e\u3088\u3046\u306b\u5b9a\u7fa9\u3057\u3066\u304f\u3060\u3055\u3044:\n\ public static void main(String[] args) +java.launcher.cls.error3=\u30a8\u30e9\u30fc: \u30af\u30e9\u30b9 {0} \u3067\u3001\u30e1\u30a4\u30f3\u30e1\u30bd\u30c3\u30c9\u306f void \u578b\u306e\u5024\u3092\u8fd4\u3059\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\n\u30e1\u30a4\u30f3\u30e1\u30bd\u30c3\u30c9\u3092\u6b21\u306e\u3088\u3046\u306b\u5b9a\u7fa9\u3057\u3066\u304f\u3060\u3055\u3044:\n\ public static void main(String[] args) +java.launcher.cls.error4=\u30a8\u30e9\u30fc: \u30af\u30e9\u30b9 {1} \u3067\u3001\u30e1\u30a4\u30f3\u30e1\u30bd\u30c3\u30c9\u3092\u691c\u51fa\u3067\u304d\u307e\u305b\u3093\u3002\u30e1\u30a4\u30f3\u30e1\u30bd\u30c3\u30c9\u3092\u6b21\u306e\u3088\u3046\u306b\u5b9a\u7fa9\u3057\u3066\u304f\u3060\u3055\u3044:\n\ public static void main(String[] args) + + diff --git a/jdk/src/share/classes/sun/launcher/resources/launcher_ko.properties b/jdk/src/share/classes/sun/launcher/resources/launcher_ko.properties new file mode 100644 index 00000000000..7b6607438d7 --- /dev/null +++ b/jdk/src/share/classes/sun/launcher/resources/launcher_ko.properties @@ -0,0 +1,47 @@ +# +# Copyright 2007-2008 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. 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. +# + +# Translators please note do not translate the options themselves +java.launcher.opt.header = \uc0ac\uc6a9\ubc95: {0} [-options] class [args...]\n\ (\ud074\ub798\uc2a4 \uc2e4\ud589)\n \ub610\ub294 {0} [-options] -jar jarfile [args...]\n\ (jar \ud30c\uc77c \uc2e4\ud589)\n\uc635\uc158:\n + +java.launcher.opt.datamodel =\ -d{0}\t \uc0ac\uc6a9 \uac00\ub2a5\ud55c \uacbd\uc6b0 {0}\ube44\ud2b8 \ub370\uc774\ud130 \ubaa8\ub378 \uc0ac\uc6a9\n +java.launcher.opt.vmselect =\ {0}\t "{1}" VM \uc120\ud0dd \uc2dc\n +java.launcher.opt.hotspot =\ {0}\t "{1}" VM[\ub354 \uc774\uc0c1 \uc0ac\uc6a9\ub418\uc9c0 \uc54a\uc74c]\uacfc \ub3d9\uc77c \n + +java.launcher.ergo.message1 =\ \uae30\ubcf8 VM\uc740 {0}\uc784 +java.launcher.ergo.message2 =\ \uadf8 \uc774\uc720\ub294 \uc11c\ubc84 \ud074\ub798\uc2a4 \uc2dc\uc2a4\ud15c\uc5d0\uc11c \uc2e4\ud589 \uc911\uc774\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4.\n + +# Translators please note do not translate the options themselves +java.launcher.opt.footer =\ -cp <\ub514\ub809\ud1a0\ub9ac \ubc0f zip/jar \ud30c\uc77c\uc758 \ud074\ub798\uc2a4 \uac80\uc0c9 \uacbd\ub85c>\n\ -classpath <\ub514\ub809\ud1a0\ub9ac \ubc0f zip/jar \ud30c\uc77c\uc758 \ud074\ub798\uc2a4 \uac80\uc0c9 \uacbd\ub85c>\n\ \ud074\ub798\uc2a4 \ud30c\uc77c\uc744 \uac80\uc0c9\ud558\uae30 \uc704\ud55c \ub514\ub809\ud1a0\ub9ac, JAR \uc544\uce74\uc774\ube0c \ubc0f\n\ ZIP \uc544\uce74\uc774\ube0c\uc758 {0} \uad6c\ubd84\ub41c \ubaa9\ub85d\uc785\ub2c8\ub2e4.\n\ -D=\n\ \uc2dc\uc2a4\ud15c \ub4f1\ub85d \uc815\ubcf4 \uc124\uc815\n\ -verbose[:class|gc|jni]\n\ \ucd94\uac00 \ucd9c\ub825 \uc0ac\uc6a9\n\ -version \uc81c\ud488 \ubc84\uc804\uc744 \uc778\uc1c4\ud558\uace0 \uc885\ub8cc\n\ -version:\n\ \uc2e4\ud589\ud558\ub824\uba74 \uc9c0\uc815\ud55c \ubc84\uc804 \ud544\uc694\n\ -showversion \uc81c\ud488 \ubc84\uc804\uc744 \uc778\uc1c4\ud558\uace0 \uacc4\uc18d\n\ -jre-restrict-search | -jre-no-restrict-search\n\ \ubc84\uc804 \uac80\uc0c9\uc5d0\uc11c \uc0ac\uc6a9\uc790 \uac1c\uc778 JRE \ud3ec\ud568/\uc81c\uc678\n\ -? -help \uc774 \ub3c4\uc6c0\ub9d0 \uba54\uc2dc\uc9c0 \uc778\uc1c4\n\ -X \ube44\ud45c\uc900 \uc635\uc158\uc5d0 \ub300\ud55c \ub3c4\uc6c0\ub9d0 \uc778\uc1c4\n\ -ea[:...|:]\n\ -enableassertions[:...|:]\n\ \uc9c0\uc815\ud55c \uc815\ubc00\ub3c4\uc758 \uba85\uc81c \uc0ac\uc6a9\n\ -da[:...|:]\n\ -disableassertions[:...|:]\n\ \uc9c0\uc815\ud55c \uc815\ubc00\ub3c4\uc758 \uba85\uc81c \uc0ac\uc6a9 \uc548 \ud568\n\ -esa | -enablesystemassertions\n\ \uc2dc\uc2a4\ud15c \uba85\uc81c \uc0ac\uc6a9\n\ -dsa | -disablesystemassertions\n\ \uc2dc\uc2a4\ud15c \uba85\uc81c \uc0ac\uc6a9 \uc548 \ud568\n\ -agentlib:[=]\n\ \uc6d0\uc2dc \uc5d0\uc774\uc804\ud2b8 \ub77c\uc774\ube0c\ub7ec\ub9ac \ub85c\ub4dc, \uc608: -agentlib:hprof\n\ \ucc38\uc870: -agentlib:jdwp=help \ubc0f -agentlib:hprof=help\n\ -agentpath:[=]\n\ \uc804\uccb4 \uacbd\ub85c \uc774\ub984\uc73c\ub85c \uc6d0\uc2dc \uc5d0\uc774\uc804\ud2b8 \ub77c\uc774\ube0c\ub7ec\ub9ac \ub85c\ub4dc\n\ -javaagent:[=]\n\ Java \ud504\ub85c\uadf8\ub798\ubc0d \uc5b8\uc5b4 \uc5d0\uc774\uc804\ud2b8 \ub85c\ub4dc, java.lang.instrument \ucc38\uc870\n\ -splash:\n\ \uc9c0\uc815\ud55c \uc774\ubbf8\uc9c0\uc758 \uc2a4\ud50c\ub798\uc2dc \ud654\uba74 \ud45c\uc2dc\n\uc790\uc138\ud55c \ub0b4\uc6a9\uc740 http://java.sun.com/javase/reference\ub97c \ucc38\uc870\ud558\uc2ed\uc2dc\uc624. + +# Translators please note do not translate the options themselves +java.launcher.X.usage=\ -Xmixed \ud63c\ud569 \ubaa8\ub4dc \uc2e4\ud589(\uae30\ubcf8\uac12)\n\ -Xint \ud574\uc11d\ub41c \ubaa8\ub4dc \uc2e4\ud589 \uc804\uc6a9\n\ -Xbootclasspath:\n\ \ubd80\ud2b8\uc2a4\ud2b8\ub7a9 \ud074\ub798\uc2a4\uc640 \uc790\uc6d0\uc758 \uac80\uc0c9 \uacbd\ub85c \uc124\uc815\n\ -Xbootclasspath/a:\n\ \ubd80\ud2b8\uc2a4\ud2b8\ub7a9 \ud074\ub798\uc2a4 \uacbd\ub85c \ub05d\uc5d0 \ucd94\uac00\n\ -Xbootclasspath/p:\n\ \ubd80\ud2b8\uc2a4\ud2b8\ub7a9 \ud074\ub798\uc2a4 \uacbd\ub85c \uc55e\uc5d0 \ucd94\uac00\n\ -Xnoclassgc \ud074\ub798\uc2a4 \uac00\ube44\uc9c0 \uceec\ub809\uc158 \uc0ac\uc6a9 \uc548 \ud568\n\ -Xincgc \uc99d\ubd84 \uac00\ube44\uc9c0 \uceec\ub809\uc158 \uc0ac\uc6a9\n\ -Xloggc: GC \uc0c1\ud0dc\ub97c \ud0c0\uc784 \uc2a4\ud0ec\ud504\uc640 \ud568\uaed8 \ud30c\uc77c\uc5d0 \ub85c\uadf8\n\ -Xbatch \ubc31\uadf8\ub77c\uc6b4\ub4dc \ucef4\ud30c\uc77c \uc0ac\uc6a9 \uc548 \ud568\n\ -Xms \ucd08\uae30 Java \ud799 \ud06c\uae30 \uc124\uc815\n\ -Xmx \ucd5c\ub300 Java \ud799 \ud06c\uae30 \uc124\uc815\n\ -Xss java \uc2a4\ub808\ub4dc \uc2a4\ud0dd \ud06c\uae30 \uc124\uc815\n\ -Xprof cpu \ud504\ub85c\ud30c\uc77c\ub9c1 \ub370\uc774\ud130 \ucd9c\ub825\n\ -Xfuture \ubbf8\ub798 \uae30\ubcf8\uac12\uc744 \uc608\uce21\ud558\uc5ec \uac00\uc7a5 \uc5c4\uaca9\ud55c \uac80\uc0ac \uc0ac\uc6a9\n\ -Xrs Java/VM\uc5d0 \uc758\ud55c OS \uc2e0\ud638 \uc0ac\uc6a9 \uac10\uc18c(\uc124\uba85\uc11c \ucc38\uc870)\n\ -Xcheck:jni JNI \uae30\ub2a5\uc5d0 \ub300\ud55c \ucd94\uac00\uc801\uc778 \uac80\uc0ac \uc218\ud589\n\ -Xshare:off \uacf5\uc720\ub41c \ud074\ub798\uc2a4 \ub370\uc774\ud130\uc758 \uc0ac\uc6a9\uc744 \uc2dc\ub3c4\ud558\uc9c0 \uc54a\uc74c\n\ -Xshare:auto \uac00\ub2a5\ud55c \uacbd\uc6b0 \uacf5\uc720\ub41c \ud074\ub798\uc2a4 \ub370\uc774\ud130 \uc0ac\uc6a9(\uae30\ubcf8\uac12)\n\ -Xshare:on \uacf5\uc720\ub41c \ud074\ub798\uc2a4 \ub370\uc774\ud130\ub97c \uc0ac\uc6a9\ud574\uc57c \ud558\uba70 \uadf8\ub807\uc9c0 \uc54a\uc73c\uba74 \uc2e4\ud328.\n\n-X \uc635\uc158\uc740 \ud45c\uc900\uc774 \uc544\ub2c8\uba70 \uc54c\ub9bc \uc5c6\uc774 \ubcc0\uacbd\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n + +java.launcher.cls.error1=\uc624\ub958: \uae30\ubcf8 \ud074\ub798\uc2a4 {0}\uc744(\ub97c) \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +java.launcher.cls.error2=\uc624\ub958: \ud575\uc2ec \uba54\uc18c\ub4dc\uac00 \ud074\ub798\uc2a4 {1}\uc758 {0}\uc774(\uac00) \uc544\ub2d9\ub2c8\ub2e4. \ud575\uc2ec \uba54\uc18c\ub4dc\ub97c \ub2e4\uc74c\uacfc \uac19\uc774 \uc815\uc758\ud558\uc2ed\uc2dc\uc624.\n\ public static void main(String[] args) +java.launcher.cls.error3=\uc624\ub958: \ud575\uc2ec \uba54\uc18c\ub4dc\ub294 \ud074\ub798\uc2a4 {0}\uc758 void \uc720\ud615\uc758 \uac12\uc744 \ubc18\ud658\ud574\uc57c \ud569\ub2c8\ub2e4.\n\ud575\uc2ec \uba54\uc18c\ub4dc\ub97c \ub2e4\uc74c\uacfc \uac19\uc774 \uc815\uc758\ud558\uc2ed\uc2dc\uc624.\n\ public static void main(String[] args) +java.launcher.cls.error4=\uc624\ub958: \ud575\uc2ec \uba54\uc18c\ub4dc\ub97c \ud074\ub798\uc2a4 {0}\uc5d0\uc11c \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \ud575\uc2ec \uba54\uc18c\ub4dc\ub97c \ub2e4\uc74c\uacfc \uac19\uc774 \uc815\uc758\ud558\uc2ed\uc2dc\uc624.\n\ public static void main(String[] args) + + diff --git a/jdk/src/share/classes/sun/launcher/resources/launcher_sv.properties b/jdk/src/share/classes/sun/launcher/resources/launcher_sv.properties new file mode 100644 index 00000000000..da4670a4756 --- /dev/null +++ b/jdk/src/share/classes/sun/launcher/resources/launcher_sv.properties @@ -0,0 +1,47 @@ +# +# Copyright 2007-2008 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. 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. +# + +# Translators please note do not translate the options themselves +java.launcher.opt.header = Anv\u00e4ndning: {0} [-alternativ] class [arg...]\n\ (f\u00f6r att k\u00f6ra en klass)\n or {0} [-alternativ] -jar jarfile [arg...]\n\ (f\u00f6r att k\u00f6ra en jar-fil)\nbland alternativen kan n\u00e4mnas:\n + +java.launcher.opt.datamodel =\ -d{0}\t anv\u00e4nd en {0}-bitars datamodell om den finns tillg\u00e4nglig\n +java.launcher.opt.vmselect =\ {0}\t f\u00f6r att v\u00e4lja "{1}" VM\n +java.launcher.opt.hotspot =\ {0}\t \u00e4r liktydigt med "{1}"-VM [utfasad]\n + +java.launcher.ergo.message1 =\ Standard-VM \u00e4r {0} +java.launcher.ergo.message2 =\ eftersom du k\u00f6r p\u00e5 en dator med server-klass.\n + +# Translators please note do not translate the options themselves +java.launcher.opt.footer =\ -cp \n\ -classpath \n\ en med {0} avgr\u00e4nsad lista \u00f6ver kataloger, JAR-arkiv\n\ och ZIP-arkiv f\u00f6r s\u00f6kning efter klassfiler.\n\ -D=\n\ ange en systemegenskap\n\ -verbose[:klass|gc|jni]\n\ visa mer text\n\ -version skriv ut produktversionen och avsluta\n\ -version:\n\ kr\u00e4ver den angivna versionen f\u00f6r att kunna k\u00f6ras\n\ -showversion skriv ut produktversion och forts\u00e4tt\n\ -jre-restrict-search | -jre-no-restrict-search\n\ inkludera/exkludera anv\u00e4ndarens privata JRE-filer i versionss\u00f6kningen\n\ -? -help skriver ut det h\u00e4r hj\u00e4lpmeddelandet\n\ -X skriv ut hj\u00e4lp f\u00f6r alternativ som inte \u00e4r standard\n\ -ea[:...|:]\n\ -enableassertions[:...|:]\n\ aktivera bekr\u00e4ftelser med angiven precision\n\ -da[:...|:]\n\ -disableassertions[:...|:]\n\ inaktivera bekr\u00e4ftelser med angiven precision\n\ -esa | -enablesystemassertions\n\ aktivera systembekr\u00e4ftelser\n\ -dsa | -disablesystemassertions\n\ inaktivera systembekr\u00e4ftelser\n\ -agentlib:[=]\n\ l\u00e4s in det interna agentbiblioteket , t.ex. -agentlib:hprof\n\ se \u00e4ven, -agentlib:jdwp=help och -agentlib:hprof=help\n\ -agentpath:[=]\n\ l\u00e4s in internt agentbibliotek utifr\u00e5n fullst\u00e4ndig s\u00f6kv\u00e4g\n\ -javaagent:[=]\n\ l\u00e4s in agenten f\u00f6r programmeringsspr\u00e5ket Java, se java.lang.instrument\n\ -splash:\n\ visa v\u00e4lkomstf\u00f6nster med angiven bild\nMer information finns p\u00e5 http://java.sun.com/javase/reference. + +# Translators please note do not translate the options themselves +java.launcher.X.usage=\ -Xmixed k\u00f6rning i blandat l\u00e4ge (standard)\n\ -Xint endast k\u00f6rning i tolkat l\u00e4ge\n\ -Xbootclasspath:\n\ ange s\u00f6kv\u00e4g f\u00f6r bootstrap-klasser och -resurser\n\ -Xbootclasspath/a:\n\ l\u00e4gg till p\u00e5 slutet av s\u00f6kv\u00e4gen till bootstrap-klassen\n\ -Xbootclasspath/p:\n\ l\u00e4gg till i b\u00f6rjan av s\u00f6kv\u00e4gen till bootstrap-klassen\n\ -Xnoclassgc inaktivera skr\u00e4pinsamling f\u00f6r klass\n\ -Xincgc aktivera inkrementell skr\u00e4pinsaming\n\ -Xloggc: logga GC-status till en fil med tidsst\u00e4mpel\n\ -Xbatch inaktivera kompilering i bakgrunden\n\ -Xms st\u00e4ll in ursprunglig heapstorlek f\u00f6r Java\n\ -Xmx st\u00e4ll in st\u00f6rsta heapstorlek f\u00f6r Java\n\ -Xss st\u00e4ll in tr\u00e5dstackens storlek f\u00f6r Java\n\ -Xprof visa profileringsdata om processorn\n\ -Xfuture aktivera de mest rigor\u00f6sa kontrollerna och f\u00f6regrip framtida standardl\u00e4ge\n\ -Xrs minska anv\u00e4ndningen av signaler fr\u00e5n operativsystemet i Java/VM (mer information finns i dokumentationen)\n\ -Xcheck:jni utf\u00f6r ytterligare kontroller f\u00f6r JNI-funktioner\n\ -Xshare:off f\u00f6rs\u00f6k inte att anv\u00e4nda delade klassdata\n\ -Xshare:auto anv\u00e4nd om m\u00f6jligt delade klassdata (standard)\n\ -Xshare:on kr\u00e4v att delade klassdata anv\u00e4nds, skicka fel om s\u00e5 inte \u00e4r fallet.\n\n -X-alternativen betraktas inte som standard och kan \u00e4ndras utan att detta meddelas.\n + +java.launcher.cls.error1=Fel: Det g\u00e5r inte att hitta klassen main {0} +java.launcher.cls.error2=Fel: Metoden i main \u00e4r inte {0} i klass {1}. Ange huvudmetoden som:\n\ public static void main(String[] args) +java.launcher.cls.error3=Fel: Metoden i main m\u00e5ste returnera ett v\u00e4rde av typen void i klass {0}. Definiera \nmetoden i main som:\n\ public static void main(String[] args) +java.launcher.cls.error4=Fel: Klass {0} saknar metod i main. Definiera metoden som:\n\ public static void main(String[] args) + + diff --git a/jdk/src/share/classes/sun/launcher/resources/launcher_zh_CN.properties b/jdk/src/share/classes/sun/launcher/resources/launcher_zh_CN.properties new file mode 100644 index 00000000000..ad1f5e8666d --- /dev/null +++ b/jdk/src/share/classes/sun/launcher/resources/launcher_zh_CN.properties @@ -0,0 +1,47 @@ +# +# Copyright 2007-2008 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. 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. +# + +# Translators please note do not translate the options themselves +java.launcher.opt.header = \u7528\u6cd5\uff1a{0} [-\u9009\u9879] class [\u53c2\u6570...]\n\ \uff08\u6267\u884c\u4e00\u4e2a\u7c7b\uff09\n \u6216 {0} [-\u9009\u9879] -jar jarfile [\u53c2\u6570...]\n\ \uff08\u6267\u884c\u4e00\u4e2a jar \u6587\u4ef6\uff09\n\u5176\u4e2d\uff0c\u9009\u9879\u5305\u62ec\uff1a\n + +java.launcher.opt.datamodel =\ -d{0}\t \u4f7f\u7528\u4e00\u4e2a {0} \u4f4d\u6570\u636e\u6a21\u578b\uff08\u5982\u679c\u53ef\u7528\uff09\n +java.launcher.opt.vmselect =\ {0}\t \u9009\u62e9 "{1}" VM\n +java.launcher.opt.hotspot =\ {0}\t \u4e3a "{1}" VM \u7684\u540c\u4e49\u8bcd [\u5df2\u8fc7\u65f6]\n + +java.launcher.ergo.message1 =\ \u9ed8\u8ba4\u7684 VM \u4e3a {0} +java.launcher.ergo.message2 =\ \u56e0\u4e3a\u60a8\u662f\u5728\u670d\u52a1\u5668\u7c7b\u8ba1\u7b97\u673a\u4e0a\u8fd0\u884c\u3002\n + +# Translators please note do not translate the options themselves +java.launcher.opt.footer =\ -cp <\u76ee\u5f55\u548c zip/jar \u6587\u4ef6\u7684\u7c7b\u641c\u7d22\u8def\u5f84>\n\ -classpath <\u76ee\u5f55\u548c zip/jar \u6587\u4ef6\u7684\u7c7b\u641c\u7d22\u8def\u5f84>\n\ \u4e00\u4e2a\u4ee5 {0} \u5206\u9694\u7684\u76ee\u5f55\u3001JAR \u5f52\u6863\u6587\u4ef6\n\ \u548c ZIP \u5f52\u6863\u6587\u4ef6\u7684\u5217\u8868\uff0c\u7528\u4e8e\u641c\u7d22\u7c7b\u6587\u4ef6\u3002\n\ -D=\n\ \u8bbe\u7f6e\u7cfb\u7edf\u5c5e\u6027\n\ -verbose[:class|gc|jni]\n\ \u542f\u7528\u8be6\u7ec6\u8f93\u51fa\n\ -version \u663e\u793a\u4ea7\u54c1\u7248\u672c\u5e76\u9000\u51fa\n\ -version:\n\ \u8981\u6c42\u8fd0\u884c\u6307\u5b9a\u7684\u7248\u672c\n\ -showversion \u663e\u793a\u4ea7\u54c1\u7248\u672c\u5e76\u7ee7\u7eed\n\ -jre-restrict-search | -jre-no-restrict-search\n\ \u5728\u7248\u672c\u641c\u7d22\u4e2d\u5305\u62ec/\u4e0d\u5305\u62ec\u7528\u6237\u79c1\u6709 JRE\n\ -? -help \u663e\u793a\u6b64\u5e2e\u52a9\u6d88\u606f\n\ -X \u663e\u793a\u6709\u5173\u975e\u6807\u51c6\u9009\u9879\u7684\u5e2e\u52a9\n\ -ea[:...|:]\n\ -enableassertions[:...|:]\n\ \u542f\u7528\u6307\u5b9a\u7c92\u5ea6\u7684\u65ad\u8a00\n\ -da[:...|:]\n\ -disableassertions[:...|:]\n\ \u7981\u7528\u6307\u5b9a\u7c92\u5ea6\u7684\u65ad\u8a00\n\ -esa | -enablesystemassertions\n\ \u542f\u7528\u7cfb\u7edf\u65ad\u8a00\n\ -dsa | -disablesystemassertions\n\ \u7981\u7528\u7cfb\u7edf\u65ad\u8a00\n\ -agentlib:[=]\n\ \u88c5\u5165\u672c\u673a\u4ee3\u7406\u5e93 \uff0c\u4f8b\u5982\uff1a-agentlib:hprof\n\ \u53e6\u8bf7\u53c2\u89c1 -agentlib:jdwp=help \u548c -agentlib:hprof=help\n\ -agentpath:[=]\n\ \u4ee5\u5168\u8def\u5f84\u540d\u88c5\u5165\u672c\u673a\u4ee3\u7406\u5e93\n\ -javaagent:[=]\n\ \u88c5\u5165 Java \u7f16\u7a0b\u8bed\u8a00\u4ee3\u7406\uff0c\u8bf7\u53c2\u89c1 java.lang.instrument\n\ -splash:\n\ \u4f7f\u7528\u6307\u5b9a\u56fe\u50cf\u663e\u793a\u95ea\u73b0\u5c4f\u5e55\n\u6709\u5173\u66f4\u591a\u8be6\u7ec6\u4fe1\u606f\uff0c\u8bf7\u53c2\u89c1 http://java.sun.com/javase/reference\u3002 + +# Translators please note do not translate the options themselves +java.launcher.X.usage=\ -Xmixed \u6df7\u5408\u6a21\u5f0f\u6267\u884c\uff08\u9ed8\u8ba4\uff09\n\ -Xint \u4ec5\u89e3\u91ca\u6a21\u5f0f\u6267\u884c\n\ -Xbootclasspath:<\u4ee5 {0} \u5206\u9694\u7684\u76ee\u5f55\u548c zip/jar \u6587\u4ef6>\n\ \u8bbe\u7f6e\u5f15\u5bfc\u7c7b\u548c\u8d44\u6e90\u7684\u641c\u7d22\u8def\u5f84\n\ -Xbootclasspath/a:<\u4ee5 {0} \u5206\u9694\u7684\u76ee\u5f55\u548c zip/jar \u6587\u4ef6>\n\ \u9644\u52a0\u5230\u5f15\u5bfc\u7c7b\u8def\u5f84\u5c3e\u90e8\n\ -Xbootclasspath/p:<\u4ee5 {0} \u5206\u9694\u7684\u76ee\u5f55\u548c zip/jar \u6587\u4ef6>\n\ \u7f6e\u4e8e\u5f15\u5bfc\u7c7b\u8def\u5f84\u524d\u9762\n\ -Xnoclassgc \u7981\u7528\u7c7b\u5783\u573e\u6536\u96c6\n\ -Xincgc \u542f\u7528\u589e\u91cf\u5783\u573e\u6536\u96c6\n\ -Xloggc:<\u6587\u4ef6> \u5c06 GC \u72b6\u6001\u8bb0\u5f55\u5230\u4e00\u4e2a\u5e26\u6709\u65f6\u95f4\u6233\u7684\u6587\u4ef6\n\ -Xbatch \u7981\u7528\u540e\u53f0\u7f16\u8bd1\n\ -Xms<\u5927\u5c0f> \u8bbe\u7f6e\u521d\u59cb Java \u5806\u5927\u5c0f\n\ -Xmx<\u5927\u5c0f> \u8bbe\u7f6e\u6700\u5927 Java \u5806\u5927\u5c0f\n\ -Xss<\u5927\u5c0f> \u8bbe\u7f6e Java \u7ebf\u7a0b\u5806\u6808\u5927\u5c0f\n\ -Xprof \u8f93\u51fa CPU \u914d\u7f6e\u6570\u636e\n\ -Xfuture \u542f\u7528\u6700\u4e25\u683c\u7684\u68c0\u67e5\uff0c\u672a\u6765\u53ef\u80fd\u4f1a\u6210\u4e3a\u9ed8\u8ba4\u9009\u9879\n\ -Xrs \u51cf\u5c11 Java/VM \u5bf9\u64cd\u4f5c\u7cfb\u7edf\u4fe1\u53f7\u7684\u4f7f\u7528\uff08\u8bf7\u53c2\u89c1\u6587\u6863\uff09\n\ -Xcheck:jni \u9488\u5bf9 JNI \u529f\u80fd\u6267\u884c\u989d\u5916\u7684\u68c0\u67e5\n\ -Xshare:off \u4e0d\u5c1d\u8bd5\u4f7f\u7528\u5171\u4eab\u7c7b\u6570\u636e\n\ -Xshare:auto \u5982\u679c\u53ef\u80fd\u7684\u8bdd\uff0c\u4f7f\u7528\u5171\u4eab\u7c7b\u6570\u636e\uff08\u9ed8\u8ba4\uff09\n\ -Xshare:on \u8981\u6c42\u4f7f\u7528\u5171\u4eab\u7c7b\u6570\u636e\uff0c\u5426\u5219\u4f1a\u5931\u8d25\u3002\n\n-X \u9009\u9879\u662f\u975e\u6807\u51c6\u9009\u9879\uff0c\u5982\u6709\u66f4\u6539\uff0c\u6055\u4e0d\u53e6\u884c\u901a\u77e5\u3002\n + +java.launcher.cls.error1=\u9519\u8bef\uff1a\u627e\u4e0d\u5230\u4e3b\u7c7b {0} +java.launcher.cls.error2=\u9519\u8bef\uff1aMain \u65b9\u6cd5\u4e0d\u662f\u7c7b {1} \u4e2d\u7684 {0}\uff0c\u8bf7\u5c06 main \u65b9\u6cd5\u5b9a\u4e49\u4e3a\uff1a\n\ public static void main(String[] args) +java.launcher.cls.error3=\u9519\u8bef\uff1a\u5728\u7c7b {0} \u4e2d\uff0cMain \u65b9\u6cd5\u5fc5\u987b\u8fd4\u56de void \u7c7b\u578b\u7684\u503c\uff0c\u8bf7\u5c06 \nmain \u65b9\u6cd5\u5b9a\u4e49\u4e3a\uff1a\n\ public static void main(String[] args) +java.launcher.cls.error4=\u9519\u8bef\uff1a\u5728\u7c7b {0} \u4e2d\u672a\u627e\u5230 Main \u65b9\u6cd5\uff0c\u8bf7\u5c06 main \u65b9\u6cd5\u5b9a\u4e49\u4e3a\uff1a\n\ public static void main(String[] args) + + diff --git a/jdk/src/share/classes/sun/launcher/resources/launcher_zh_TW.properties b/jdk/src/share/classes/sun/launcher/resources/launcher_zh_TW.properties new file mode 100644 index 00000000000..a05a247e862 --- /dev/null +++ b/jdk/src/share/classes/sun/launcher/resources/launcher_zh_TW.properties @@ -0,0 +1,47 @@ +# +# Copyright 2007-2008 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. 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. +# + +# Translators please note do not translate the options themselves +java.launcher.opt.header = \u7528\u6cd5: {0} [-options] class [args...]\n\ (\u57f7\u884c\u985e\u5225)\n \u6216 {0} [-options] -jar jarfile [args...]\n\ (\u57f7\u884c jar \u6a94\u6848)\n\u5176\u4e2d options \u5305\u62ec:\n + +java.launcher.opt.datamodel =\ -d{0}\t \u4f7f\u7528 {0} \u4f4d\u5143\u8cc7\u6599\u6a21\u5f0f (\u5982\u679c\u53ef\u7528)\n +java.launcher.opt.vmselect =\ {0}\t \u9078\u53d6\u300c{1}\u300dVM\n +java.launcher.opt.hotspot =\ {0}\t \u662f\u300c{1}\u300dVM [\u5df2\u505c\u7528] \u7684\u540c\u7fa9\u8a5e\n + +java.launcher.ergo.message1 =\ \u9810\u8a2d VM \u70ba {0} +java.launcher.ergo.message2 =\ \u56e0\u70ba\u60a8\u6b63\u57f7\u884c\u65bc\u4f3a\u670d\u5668\u7d1a\u7684\u6a5f\u5668\u4e0a\u3002\n + +# Translators please note do not translate the options themselves +java.launcher.opt.footer =\ -cp <\u76ee\u9304\u548c zip/jar \u6a94\u6848\u7684\u985e\u5225\u641c\u5c0b\u8def\u5f91>\n\ -classpath <\u76ee\u9304\u548c zip/jar \u6a94\u6848\u7684\u985e\u5225\u641c\u5c0b\u8def\u5f91>\n\ {0} \u76ee\u9304\u3001JAR \u6b78\u6a94\n\ \u548c ZIP \u6b78\u6a94\u7684\u5206\u9694\u6e05\u55ae\uff0c\u7528\u65bc\u641c\u5c0b\u985e\u5225\u6a94\u6848\u3002\n\ -D=\n\ \u8a2d\u5b9a\u7cfb\u7d71\u7279\u6027\n\ -verbose[:class|gc|jni]\n\ \u555f\u7528\u8a73\u7d30\u8f38\u51fa\n\ -version \u5217\u5370\u7522\u54c1\u7248\u672c\u4e26\u7d50\u675f\n\ -version:\n\ \u9700\u8981\u57f7\u884c\u6307\u5b9a\u7684\u7248\u672c\n\ -showversion \u5217\u5370\u7522\u54c1\u7248\u672c\u4e26\u7e7c\u7e8c\n\ -jre-restrict-search | -jre-no-restrict-search\n\ \u5728\u7248\u672c\u641c\u5c0b\u4e2d\u5305\u542b/\u6392\u9664\u4f7f\u7528\u8005\u79c1\u7528 JRE\n\ -? -help \u5217\u5370\u6b64\u8aaa\u660e\u8a0a\u606f\n\ -X \u5217\u5370\u6709\u95dc\u975e\u6a19\u6e96\u9078\u9805\u7684\u8aaa\u660e\n\ -ea[:...|:]\n\ -enableassertions[:...|:]\n\ \u555f\u7528\u5177\u6709\u6307\u5b9a\u9846\u7c92\u6027\u7684\u5ba3\u544a\n\ -da[:...|:]\n\ -disableassertions[:...|:]\n\ \u505c\u7528\u5177\u6709\u6307\u5b9a\u9846\u7c92\u6027\u7684\u5ba3\u544a\n\ -esa | -enablesystemassertions\n\ \u555f\u7528\u7cfb\u7d71\u5ba3\u544a\n\ -dsa | -disablesystemassertions\n\ \u505c\u7528\u7cfb\u7d71\u5ba3\u544a\n\ -agentlib:[=]\n\ \u8f09\u5165\u539f\u751f\u4ee3\u7406\u7a0b\u5f0f\u7a0b\u5f0f\u5eab \uff0c\u4f8b\u5982 -agentlib:hprof\n\ \u53e6\u8acb\u53c3\u95b1 -agentlib:jdwp=help \u548c -agentlib:hprof=help\n\ -agentpath:[=]\n\ \u4f9d\u64da\u5b8c\u6574\u8def\u5f91\u540d\u7a31\u8f09\u5165\u539f\u751f\u4ee3\u7406\u7a0b\u5f0f\n\ -javaagent:[=]\n\ \u8f09\u5165 Java \u7a0b\u5f0f\u8a2d\u8a08\u8a9e\u8a00\u4ee3\u7406\u7a0b\u5f0f\uff0c\u8acb\u53c3\u95b1 java.lang.instrument\n\ -splash:\n\ \u986f\u793a\u542b\u6709\u6307\u5b9a\u5f71\u50cf\u7684\u8edf\u9ad4\u8cc7\u8a0a\u756b\u9762\n\u8acb\u53c3\u95b1 http://java.sun.com/javase/reference\uff0c\u4ee5\u53d6\u5f97\u66f4\u591a\u8a73\u7d30\u8cc7\u8a0a\u3002 + +# Translators please note do not translate the options themselves +java.launcher.X.usage=\ -Xmixed \u57f7\u884c\u6df7\u5408\u6a21\u5f0f (\u9810\u8a2d)\n\ -Xint \u50c5\u57f7\u884c\u89e3\u8b6f\u6a21\u5f0f\n\ -Xbootclasspath:<\u4ee5 {0} \u5206\u9694\u7684\u76ee\u9304\u548c zip/jar \u6a94\u6848>\n\ \u8a2d\u5b9a\u555f\u52d5\u985e\u5225\u548c\u8cc7\u6e90\u7684\u641c\u5c0b\u8def\u5f91\n\ -Xbootclasspath/a:<\u4ee5 {0} \u5206\u9694\u7684\u76ee\u9304\u548c zip/jar \u6a94\u6848>\n\ \u9644\u52a0\u81f3\u555f\u52d5\u985e\u5225\u7684\u672b\u5c3e\n\ -Xbootclasspath/p:<\u4ee5 {0} \u5206\u9694\u7684\u76ee\u9304\u548c zip/jar \u6a94\u6848>\n\ \u524d\u7f6e\u65bc\u555f\u52d5\u985e\u5225\u8def\u5f91\u7684\u524d\u9762\n\ -Xnoclassgc \u505c\u7528\u985e\u5225\u56de\u6536\u6536\u96c6\n\ -Xincgc \u555f\u7528\u905e\u589e\u56de\u6536\u6536\u96c6\n\ -Xloggc:<\u6a94\u6848> \u4f7f\u7528\u6642\u9593\u6233\u8a18\u5c07 GC \u72c0\u614b\u8a18\u9304\u81f3\u6a94\u6848\n\ -Xbatch \u505c\u7528\u80cc\u5f71\u7de8\u8b6f\n\ -Xms<\u5927\u5c0f> \u8a2d\u5b9a\u521d\u59cb Java \u5806\u758a\u5927\u5c0f\n\ -Xmx<\u5927\u5c0f> \u8a2d\u5b9a\u6700\u5927 Java \u5806\u758a\u5927\u5c0f\n\ -Xss<\u5927\u5c0f> \u8a2d\u5b9a java \u57f7\u884c\u7dd2\u5806\u758a\u5927\u5c0f\n\ -Xprof \u8f38\u51fa cpu \u8a2d\u5b9a\u6a94\u8cc7\u6599\n\ -Xfuture \u555f\u7528\u6700\u56b4\u683c\u7684\u6aa2\u67e5\uff0c\u9810\u671f\u672a\u4f86\u9810\u8a2d\u503c\n\ -Xrs \u964d\u4f4e Java/VM \u7684 OS \u8a0a\u865f\u4f7f\u7528 (\u8acb\u53c3\u95b1\u6587\u4ef6)\n\ -Xcheck:jni \u5c0d JNI \u529f\u80fd\u57f7\u884c\u5176\u4ed6\u6aa2\u67e5\n\ -Xshare:off \u4e0d\u5617\u8a66\u4f7f\u7528\u5171\u7528\u985e\u5225\u8cc7\u6599\n\ -Xshare:auto \u5982\u53ef\u80fd\uff0c\u4f7f\u7528\u5171\u7528\u985e\u5225\u8cc7\u6599 (\u9810\u8a2d)\n\ -Xshare:on \u9700\u8981\u4f7f\u7528\u5171\u7528\u985e\u5225\u8cc7\u6599\uff0c\u5426\u5247\u6703\u5931\u6557\u3002\n\n-X \u9078\u9805\u70ba\u975e\u6a19\u6e96\u9078\u9805\uff0c\u53ef\u80fd\u6703\u8b8a\u66f4\uff0c\u6055\u4e0d\u53e6\u884c\u901a\u77e5\u3002\n + +java.launcher.cls.error1=\u932f\u8aa4\uff1a\u627e\u4e0d\u5230\u4e3b\u985e\u5225 {0} +java.launcher.cls.error2=\u932f\u8aa4\uff1a\u5728\u985e\u5225 {1} \u4e2d\uff0c\u4e3b\u65b9\u6cd5\u4e0d\u662f {0}\uff0c\u8acb\u5b9a\u7fa9\u4e3b\u65b9\u6cd5\u70ba:\n\ public static void main(String[] args) +java.launcher.cls.error3=\u932f\u8aa4\uff1a\u5728\u985e\u5225 {0} \u4e2d\uff0c\u4e3b\u65b9\u6cd5\u5fc5\u9808\u50b3\u56de\u985e\u578b void \u7684\u503c\uff0c\u8acb\n\u5b9a\u7fa9\u4e3b\u65b9\u6cd5\u70ba:\n\ public static void main(String[] args) +java.launcher.cls.error4=\u932f\u8aa4\uff1a\u5728\u985e\u5225 {0} \u4e2d\u627e\u4e0d\u5230\u4e3b\u65b9\u6cd5\uff0c\u8acb\u5b9a\u7fa9\u4e3b\u65b9\u6cd5\u70ba:\n\ public static void main(String[] args) + + diff --git a/jdk/src/share/classes/sun/management/resources/agent_de.properties b/jdk/src/share/classes/sun/management/resources/agent_de.properties index d4afd6b8ce7..c9725f1473c 100644 --- a/jdk/src/share/classes/sun/management/resources/agent_de.properties +++ b/jdk/src/share/classes/sun/management/resources/agent_de.properties @@ -46,6 +46,12 @@ agent.err.invalid.agentclass = Ung\u00fcltiger Eigenschaftswert f\u00fcr c agent.err.invalid.jmxremote.port = Ung\u00fcltige Nummer f\u00fcr com.sun.management.jmxremote.port +agent.err.file.not.set = Datei nicht angegeben +agent.err.file.not.readable = Datei nicht lesbar +agent.err.file.read.failed = Datei konnte nicht gelesen werden +agent.err.file.not.found = Datei wurde nicht gefunden +agent.err.file.access.not.restricted = Lesezugriff auf die Datei muss eingeschr\u00e4nkt sein + agent.err.password.file.notset = Es wurde keine Passwortdatei angegeben, obwohl com.sun.management.jmxremote.authenticate auf \"true\" gesetzt ist. agent.err.password.file.not.readable = Passwortdatei kann nicht gelesen werden. agent.err.password.file.read.failed = Passwortdatei konnte nicht gelesen werden. @@ -76,6 +82,7 @@ jmxremote.ConnectorBootstrap.initialize = JMX-Anschlussserver starten: jmxremote.ConnectorBootstrap.initialize.noAuthentication = Keine Authentifizierung jmxremote.ConnectorBootstrap.initialize.ready = JMX-Anschluss bereit unter: {0} jmxremote.ConnectorBootstrap.initialize.password.readonly = Lesezugriff auf Passwortdatei muss eingeschr\u00e4nkt sein. {0} +jmxremote.ConnectorBootstrap.initialize.file.readonly = Lesezugriff auf die Datei muss eingeschr\u00e4nkt sein: {0} jmxremote.AdaptorBootstrap.getTargetList.processing = ACL verarbeiten jmxremote.AdaptorBootstrap.getTargetList.adding = Ziel hinzuf\u00fcgen: {0} diff --git a/jdk/src/share/classes/sun/management/resources/agent_es.properties b/jdk/src/share/classes/sun/management/resources/agent_es.properties index 0a39beafb22..09ab9784f8b 100644 --- a/jdk/src/share/classes/sun/management/resources/agent_es.properties +++ b/jdk/src/share/classes/sun/management/resources/agent_es.properties @@ -46,6 +46,12 @@ agent.err.invalid.agentclass = Valor de propiedad com.sun.management.agent agent.err.invalid.jmxremote.port = N\u00famero com.sun.management.jmxremote.port no v\u00e1lido +agent.err.file.not.set = Archivo no especificado +agent.err.file.not.readable = Archivo ilegible +agent.err.file.read.failed = Error al leer el archivo +agent.err.file.not.found = Archivo no encontrado +agent.err.file.access.not.restricted = Se debe restringir el acceso de lectura al archivo + agent.err.password.file.notset = El archivo de contrase\u00f1as no se ha especificado, pero com.sun.management.jmxremote.authenticate=true agent.err.password.file.not.readable = No se puede leer el archivo de contrase\u00f1as agent.err.password.file.read.failed = Error al leer el archivo de contrase\u00f1as @@ -76,6 +82,7 @@ jmxremote.ConnectorBootstrap.initialize = Iniciando servidor de conector JMX: jmxremote.ConnectorBootstrap.initialize.noAuthentication = Sin autenticaci\u00f3n jmxremote.ConnectorBootstrap.initialize.ready = Conector JMX listo en: {0} jmxremote.ConnectorBootstrap.initialize.password.readonly = Se debe restringir el acceso de lectura al archivo de contrase\u00f1as: {0} +jmxremote.ConnectorBootstrap.initialize.file.readonly = Se debe restringir el acceso de lectura al archivo: {0} jmxremote.AdaptorBootstrap.getTargetList.processing = Procesando ACL jmxremote.AdaptorBootstrap.getTargetList.adding = Agregando destino: {0} diff --git a/jdk/src/share/classes/sun/management/resources/agent_fr.properties b/jdk/src/share/classes/sun/management/resources/agent_fr.properties index e90ea584956..d909ab07e17 100644 --- a/jdk/src/share/classes/sun/management/resources/agent_fr.properties +++ b/jdk/src/share/classes/sun/management/resources/agent_fr.properties @@ -46,6 +46,12 @@ agent.err.invalid.agentclass = Valeur de propri\u00e9t\u00e9 com.sun.manag agent.err.invalid.jmxremote.port = Num\u00e9ro com.sun.management.jmxremote.port incorrect +agent.err.file.not.set = Fichier non sp\u00e9cifi\u00e9 +agent.err.file.not.readable = Fichier illisible +agent.err.file.read.failed = Impossible de lire le fichier +agent.err.file.not.found = Fichier introuvable +agent.err.file.access.not.restricted = L'acc\u00e8s \u00e0 la lecture du fichier doit \u00eatre limit\u00e9 + agent.err.password.file.notset = Le fichier de mots de passe n'est pas sp\u00e9cifi\u00e9 mais com.sun.management.jmxremote.authenticate=true agent.err.password.file.not.readable = Fichier de mots de passe illisible agent.err.password.file.read.failed = Impossible de lire le fichier de mots de passe @@ -76,6 +82,7 @@ jmxremote.ConnectorBootstrap.initialize = D\u00e9marrage du serveur du connecteu jmxremote.ConnectorBootstrap.initialize.noAuthentication = Pas d'authentification jmxremote.ConnectorBootstrap.initialize.ready = Connecteur JMX pr\u00eat \u00e0 : {0} jmxremote.ConnectorBootstrap.initialize.password.readonly = L''acc\u00e8s \u00e0 la lecture du fichier de mots de passe doit \u00eatre limit\u00e9 : {0} +jmxremote.ConnectorBootstrap.initialize.file.readonly = L''acc\u00e8s \u00e0 la lecture du fichier doit \u00eatre limit\u00e9\u00a0: {0} jmxremote.AdaptorBootstrap.getTargetList.processing = Traitement d'ACL jmxremote.AdaptorBootstrap.getTargetList.adding = Ajout de la cible : {0} diff --git a/jdk/src/share/classes/sun/management/resources/agent_it.properties b/jdk/src/share/classes/sun/management/resources/agent_it.properties index 46b7fb3aae5..3ca6dc8e9a1 100644 --- a/jdk/src/share/classes/sun/management/resources/agent_it.properties +++ b/jdk/src/share/classes/sun/management/resources/agent_it.properties @@ -46,6 +46,12 @@ agent.err.invalid.agentclass = Valore propriet\u00e0 com.sun.management.ag agent.err.invalid.jmxremote.port = Numero com.sun.management.jmxremote.port non valido +agent.err.file.not.set = File non specificato +agent.err.file.not.readable = File non leggibile +agent.err.file.read.failed = Lettura del file non riuscita +agent.err.file.not.found = File non trovato +agent.err.file.access.not.restricted = L'accesso in lettura al file deve essere limitato + agent.err.password.file.notset = Il file password non \u00e8 specificato ma com.sun.management.jmxremote.authenticate=true agent.err.password.file.not.readable = File password non leggibile agent.err.password.file.read.failed = Errore di lettura file password @@ -76,6 +82,7 @@ jmxremote.ConnectorBootstrap.initialize = Avvio del server connettore JMX: jmxremote.ConnectorBootstrap.initialize.noAuthentication = Nessuna autenticazione jmxremote.ConnectorBootstrap.initialize.ready = Connettore JMX pronto in: {0} jmxremote.ConnectorBootstrap.initialize.password.readonly = Limitare l''accesso in lettura al file password: {0} +jmxremote.ConnectorBootstrap.initialize.file.readonly = Limitare l''accesso in lettura al file: {0} jmxremote.AdaptorBootstrap.getTargetList.processing = Elaborazione ACL jmxremote.AdaptorBootstrap.getTargetList.adding = Aggiunta della destinazione: {0} diff --git a/jdk/src/share/classes/sun/management/resources/agent_ja.properties b/jdk/src/share/classes/sun/management/resources/agent_ja.properties index cbc99bcca1f..35852fdc402 100644 --- a/jdk/src/share/classes/sun/management/resources/agent_ja.properties +++ b/jdk/src/share/classes/sun/management/resources/agent_ja.properties @@ -42,10 +42,16 @@ agent.err.agentclass.notfound = \u7ba1\u7406\u30a8\u30fc\u30b8\u30a7\u30f3\ agent.err.agentclass.failed = \u7ba1\u7406\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u30af\u30e9\u30b9\u304c\u5931\u6557\u3057\u307e\u3057\u305f\u3002 agent.err.premain.notfound = premain(String) \u304c\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u30af\u30e9\u30b9\u306b\u5b58\u5728\u3057\u307e\u305b\u3093\u3002 agent.err.agentclass.access.denied = premain(String) \u3078\u306e\u30a2\u30af\u30bb\u30b9\u304c\u62d2\u5426\u3055\u308c\u307e\u3057\u305f\u3002 -agent.err.invalid.agentclass = com.sun.management.agent.class \u30d7\u30ed\u30d1\u30c6\u30a3\u306e\u5024\u304c\u4e0d\u6b63\u3067\u3059\u3002 +agent.err.invalid.agentclass = com.sun.management.agent.class \u30d7\u30ed\u30d1\u30c6\u30a3\u30fc\u306e\u5024\u304c\u4e0d\u6b63\u3067\u3059\u3002 agent.err.invalid.jmxremote.port = com.sun.management.jmxremote.port \u306e\u756a\u53f7\u304c\u4e0d\u6b63\u3067\u3059\u3002 +agent.err.file.not.set = \u30d5\u30a1\u30a4\u30eb\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 +agent.err.file.not.readable = \u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u53d6\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002 +agent.err.file.read.failed = \u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u53d6\u308a\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002 +agent.err.file.not.found = \u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093 +agent.err.file.access.not.restricted = \u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u53d6\u308a\u30a2\u30af\u30bb\u30b9\u306f\u5236\u9650\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 + agent.err.password.file.notset = \u30d1\u30b9\u30ef\u30fc\u30c9\u30d5\u30a1\u30a4\u30eb\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u304c\u3001com.sun.management.jmxremote.authenticate=true \u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002 agent.err.password.file.not.readable = \u30d1\u30b9\u30ef\u30fc\u30c9\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u53d6\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002 agent.err.password.file.read.failed = \u30d1\u30b9\u30ef\u30fc\u30c9\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u53d6\u308a\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002 @@ -76,6 +82,7 @@ jmxremote.ConnectorBootstrap.initialize = JMX \u30b3\u30cd\u30af\u30bf\u30b5\u30 jmxremote.ConnectorBootstrap.initialize.noAuthentication = \u8a8d\u8a3c\u306a\u3057 jmxremote.ConnectorBootstrap.initialize.ready = JMX \u30b3\u30cd\u30af\u30bf\u306e\u6e96\u5099\u304c\u3067\u304d\u307e\u3057\u305f: {0} jmxremote.ConnectorBootstrap.initialize.password.readonly = \u30d1\u30b9\u30ef\u30fc\u30c9\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u53d6\u308a\u30a2\u30af\u30bb\u30b9\u306f\u5236\u9650\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059: {0} +jmxremote.ConnectorBootstrap.initialize.file.readonly = \u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u53d6\u308a\u30a2\u30af\u30bb\u30b9\u306f\u5236\u9650\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059: {0} jmxremote.AdaptorBootstrap.getTargetList.processing = ACL \u3092\u51e6\u7406\u3057\u3066\u3044\u307e\u3059 jmxremote.AdaptorBootstrap.getTargetList.adding = \u30bf\u30fc\u30b2\u30c3\u30c8\u3092\u8ffd\u52a0\u3057\u3066\u3044\u307e\u3059: {0} diff --git a/jdk/src/share/classes/sun/management/resources/agent_ko.properties b/jdk/src/share/classes/sun/management/resources/agent_ko.properties index 063d93894f3..b6667029fd0 100644 --- a/jdk/src/share/classes/sun/management/resources/agent_ko.properties +++ b/jdk/src/share/classes/sun/management/resources/agent_ko.properties @@ -46,6 +46,12 @@ agent.err.invalid.agentclass = \uc798\ubabb\ub41c com.sun.management.agent agent.err.invalid.jmxremote.port = \uc798\ubabb\ub41c com.sun.management.jmxremote.port \ubc88\ud638 +agent.err.file.not.set = \ud30c\uc77c\uc774 \uc9c0\uc815\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. +agent.err.file.not.readable = \ud30c\uc77c\uc744 \uc77d\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +agent.err.file.read.failed = \ud30c\uc77c\uc744 \uc77d\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. +agent.err.file.not.found = \ud30c\uc77c\uc744 \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +agent.err.file.access.not.restricted = \ud30c\uc77c \uc77d\uae30 \uc561\uc138\uc2a4\ub294 \uc81c\ud55c\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4. + agent.err.password.file.notset = com.sun.management.jmxremote.authenticate=true\ub97c \uc81c\uc678\ud55c \ube44\ubc00\ubc88\ud638 \ud30c\uc77c\uc774 \uc9c0\uc815\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. agent.err.password.file.not.readable = \ube44\ubc00\ubc88\ud638 \ud30c\uc77c\uc744 \uc77d\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. agent.err.password.file.read.failed = \ube44\ubc00\ubc88\ud638 \ud30c\uc77c\uc744 \uc77d\ub294 \ub370 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4. @@ -76,6 +82,7 @@ jmxremote.ConnectorBootstrap.initialize = JMX \ucee4\ub125\ud130 \uc11c\ubc84 \u jmxremote.ConnectorBootstrap.initialize.noAuthentication = \uc778\uc99d \uc5c6\uc74c jmxremote.ConnectorBootstrap.initialize.ready = \ub2e4\uc74c\uc5d0\uc11c JMX \ucee4\ub125\ud130 \uc900\ube44: {0} jmxremote.ConnectorBootstrap.initialize.password.readonly = \ube44\ubc00\ubc88\ud638 \ud30c\uc77c \uc77d\uae30 \uc561\uc138\uc2a4\ub294 \uc81c\ud55c\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4. {0} +jmxremote.ConnectorBootstrap.initialize.file.readonly = \ud30c\uc77c \uc77d\uae30 \uc561\uc138\uc2a4\ub294 \uc81c\ud55c\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4. {0} jmxremote.AdaptorBootstrap.getTargetList.processing = ACL \ucc98\ub9ac jmxremote.AdaptorBootstrap.getTargetList.adding = \ub300\uc0c1 \ucd94\uac00: {0} diff --git a/jdk/src/share/classes/sun/management/resources/agent_sv.properties b/jdk/src/share/classes/sun/management/resources/agent_sv.properties index ae0ac13f35f..5b75adbe6d2 100644 --- a/jdk/src/share/classes/sun/management/resources/agent_sv.properties +++ b/jdk/src/share/classes/sun/management/resources/agent_sv.properties @@ -46,6 +46,12 @@ agent.err.invalid.agentclass = Ogiltigt egenskapsv\u00e4rde f\u00f6r com.s agent.err.invalid.jmxremote.port = Ogiltigt com.sun.management.jmxremote.port-nummer +agent.err.file.not.set = Filen har inte angetts. +agent.err.file.not.readable = Filen g\u00e5r inte att l\u00e4sa. +agent.err.file.read.failed = Det gick inte att l\u00e4sa filen +agent.err.file.not.found = Filen hittades inte +agent.err.file.access.not.restricted = L\u00e4sbeh\u00f6righeten f\u00f6r filen m\u00e5ste begr\u00e4nsas + agent.err.password.file.notset = L\u00f6senordsfilen har inte angetts men com.sun.management.jmxremote.authenticate=true agent.err.password.file.not.readable = L\u00f6senordsfilen \u00e4r inte l\u00e4sbar agent.err.password.file.read.failed = Det g\u00e5r inte att l\u00e4sa l\u00f6senordsfilen @@ -76,6 +82,7 @@ jmxremote.ConnectorBootstrap.initialize = Startar JMX Connector-servern: jmxremote.ConnectorBootstrap.initialize.noAuthentication = Ingen autentisering jmxremote.ConnectorBootstrap.initialize.ready = JMX Connector redo p\u00e5: {0} jmxremote.ConnectorBootstrap.initialize.password.readonly = L\u00e4sbeh\u00f6righeten f\u00f6r l\u00f6senordsfilen m\u00e5ste begr\u00e4nsas: {0} +jmxremote.ConnectorBootstrap.initialize.file.readonly = L\u00e4sbeh\u00f6righeten f\u00f6r filen m\u00e5ste begr\u00e4nsas: {0} jmxremote.AdaptorBootstrap.getTargetList.processing = ACL bearbetas jmxremote.AdaptorBootstrap.getTargetList.adding = M\u00e5l l\u00e4ggs till: {0} diff --git a/jdk/src/share/classes/sun/management/resources/agent_zh_CN.properties b/jdk/src/share/classes/sun/management/resources/agent_zh_CN.properties index 6fe9d9fa5ff..956af6cd0a8 100644 --- a/jdk/src/share/classes/sun/management/resources/agent_zh_CN.properties +++ b/jdk/src/share/classes/sun/management/resources/agent_zh_CN.properties @@ -1,6 +1,6 @@ # # -# Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved. +# Copyright 2004-2005 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 @@ -46,6 +46,12 @@ agent.err.invalid.agentclass = com.sun.management.agent.class \u5c5e\u6027 agent.err.invalid.jmxremote.port = com.sun.management.jmxremote.port \u7f16\u53f7\u65e0\u6548 +agent.err.file.not.set = \u672a\u6307\u5b9a\u6587\u4ef6 +agent.err.file.not.readable = \u65e0\u6cd5\u8bfb\u53d6\u6587\u4ef6 +agent.err.file.read.failed = \u8bfb\u53d6\u6587\u4ef6\u5931\u8d25 +agent.err.file.not.found = \u627e\u4e0d\u5230\u6587\u4ef6 +agent.err.file.access.not.restricted = \u5fc5\u987b\u9650\u5236\u6587\u4ef6\u8bfb\u53d6\u8bbf\u95ee + agent.err.password.file.notset = \u672a\u6307\u5b9a\u53e3\u4ee4\u6587\u4ef6\uff0c\u4f46 com.sun.management.jmxremote.authenticate=true agent.err.password.file.not.readable = \u65e0\u6cd5\u8bfb\u53d6\u53e3\u4ee4\u6587\u4ef6 agent.err.password.file.read.failed = \u8bfb\u53d6\u53e3\u4ee4\u6587\u4ef6\u5931\u8d25 @@ -76,6 +82,7 @@ jmxremote.ConnectorBootstrap.initialize = \u6b63\u5728\u542f\u52a8 JMX \u8fde\u6 jmxremote.ConnectorBootstrap.initialize.noAuthentication = \u65e0\u9a8c\u8bc1 jmxremote.ConnectorBootstrap.initialize.ready = \u4f4d\u4e8e {0} \u7684 JMX \u8fde\u63a5\u5668\u5c31\u7eea jmxremote.ConnectorBootstrap.initialize.password.readonly = \u5fc5\u987b\u9650\u5236\u53e3\u4ee4\u6587\u4ef6\u8bfb\u53d6\u8bbf\u95ee\uff1a{0} +jmxremote.ConnectorBootstrap.initialize.file.readonly = \u5fc5\u987b\u9650\u5236\u6587\u4ef6\u8bfb\u53d6\u8bbf\u95ee\uff1a{0} jmxremote.AdaptorBootstrap.getTargetList.processing = \u6b63\u5728\u5904\u7406 ACL jmxremote.AdaptorBootstrap.getTargetList.adding = \u6b63\u5728\u6dfb\u52a0\u76ee\u6807\uff1a{0} diff --git a/jdk/src/share/classes/sun/management/resources/agent_zh_TW.properties b/jdk/src/share/classes/sun/management/resources/agent_zh_TW.properties index 90e8eef2fdc..fecdc80d2e7 100644 --- a/jdk/src/share/classes/sun/management/resources/agent_zh_TW.properties +++ b/jdk/src/share/classes/sun/management/resources/agent_zh_TW.properties @@ -46,6 +46,12 @@ agent.err.invalid.agentclass = com.sun.management.agent.class \u7279\u6027 agent.err.invalid.jmxremote.port = com.sun.management.jmxremote.port \u7de8\u865f\u7121\u6548 +agent.err.file.not.set = \u672a\u6307\u5b9a\u6a94\u6848 +agent.err.file.not.readable = \u6a94\u6848\u4e0d\u53ef\u8b80 +agent.err.file.read.failed = \u7121\u6cd5\u8b80\u53d6\u6a94\u6848 +agent.err.file.not.found = \u627e\u4e0d\u5230\u6a94\u6848 +agent.err.file.access.not.restricted = \u5fc5\u9808\u9650\u5236\u6a94\u6848\u8b80\u53d6\u5b58\u53d6 + agent.err.password.file.notset = \u672a\u6307\u5b9a\u5bc6\u78bc\u6a94\u6848\uff0c\u4f46 com.sun.management.jmxremote.authenticate=true agent.err.password.file.not.readable = \u5bc6\u78bc\u6a94\u6848\u4e0d\u53ef\u8b80 agent.err.password.file.read.failed = \u7121\u6cd5\u8b80\u53d6\u5bc6\u78bc\u6a94\u6848 @@ -76,6 +82,7 @@ jmxremote.ConnectorBootstrap.initialize = \u6b63\u5728\u555f\u52d5 JMX \u9023\u6 jmxremote.ConnectorBootstrap.initialize.noAuthentication = \u7121\u8a8d\u8b49 jmxremote.ConnectorBootstrap.initialize.ready = JMX \u9023\u63a5\u5668\u5c31\u7dd2\uff0c\u4f4d\u65bc\ufe30{0} jmxremote.ConnectorBootstrap.initialize.password.readonly = \u5fc5\u9808\u9650\u5236\u5bc6\u78bc\u6a94\u6848\u8b80\u53d6\u5b58\u53d6\ufe30{0} +jmxremote.ConnectorBootstrap.initialize.file.readonly = \u5fc5\u9808\u9650\u5236\u6a94\u6848\u8b80\u53d6\u5b58\u53d6: {0} jmxremote.AdaptorBootstrap.getTargetList.processing = \u6b63\u5728\u8655\u7406 ACL jmxremote.AdaptorBootstrap.getTargetList.adding = \u6b63\u5728\u589e\u52a0\u76ee\u6a19\ufe30{0} diff --git a/jdk/src/share/classes/sun/security/tools/JarSignerResources_ja.java b/jdk/src/share/classes/sun/security/tools/JarSignerResources_ja.java index 6a75fa2e872..b40decd23ba 100644 --- a/jdk/src/share/classes/sun/security/tools/JarSignerResources_ja.java +++ b/jdk/src/share/classes/sun/security/tools/JarSignerResources_ja.java @@ -1,5 +1,5 @@ /* - * Copyright 2001-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2000-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 @@ -54,8 +54,8 @@ public class JarSignerResources_ja extends java.util.ListResourceBundle { "\u30ad\u30fc\u30b9\u30c8\u30a2\u304c\u30d1\u30b9\u30ef\u30fc\u30c9\u3067\u4fdd\u8b77\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408 -storepass \u304a\u3088\u3073 -keypass \u3092\u6307\u5b9a\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044"}, {"Usage: jarsigner [options] jar-file alias", "\u4f7f\u3044\u65b9: jarsigner [options] jar-file alias"}, - {" jarsigner -verify [options] jar-file", - " jarsigner -verify [options] jar-file"}, + {" jarsigner -verify [options] jar-file [alias...]", + " jarsigner -verify [options] jar-file [alias...]"}, {"[-keystore ] keystore location", "[-keystore ] \u30ad\u30fc\u30b9\u30c8\u30a2\u306e\u4f4d\u7f6e"}, {"[-storepass ] password for keystore integrity", @@ -64,6 +64,8 @@ public class JarSignerResources_ja extends java.util.ListResourceBundle { "[-storetype ] \u30ad\u30fc\u30b9\u30c8\u30a2\u306e\u578b"}, {"[-keypass ] password for private key (if different)", "[-keypass ] \u975e\u516c\u958b\u9375\u306e\u30d1\u30b9\u30ef\u30fc\u30c9 (\u7570\u306a\u308b\u5834\u5408)"}, + {"[-certchain ] name of alternative certchain file", + "[-certchain ] \u4ee3\u66ff\u8a3c\u660e\u9023\u9396\u30d5\u30a1\u30a4\u30eb\u306e\u540d\u524d"}, {"[-sigfile ] name of .SF/.DSA file", "[-sigfile ] .SF/.DSA \u30d5\u30a1\u30a4\u30eb\u306e\u540d\u524d"}, {"[-signedjar ] name of signed JAR file", @@ -74,8 +76,10 @@ public class JarSignerResources_ja extends java.util.ListResourceBundle { "[-sigalg ] \u7f72\u540d\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u540d\u524d"}, {"[-verify] verify a signed JAR file", "[-verify] \u7f72\u540d\u4ed8\u304d JAR \u30d5\u30a1\u30a4\u30eb\u306e\u691c\u8a3c"}, - {"[-verbose] verbose output when signing/verifying", - "[-verbose] \u7f72\u540d/\u691c\u8a3c\u6642\u306e\u8a73\u7d30\u51fa\u529b"}, + {"[-verbose[:suboptions]] verbose output when signing/verifying.", + "[-verbose[:suboptions]] \u7f72\u540d/\u691c\u8a3c\u6642\u306e\u8a73\u7d30\u51fa\u529b"}, + {" suboptions can be all, grouped or summary", + " \u30b5\u30d6\u30aa\u30d7\u30b7\u30e7\u30f3\u306f all\u3001grouped\u3001\u307e\u305f\u306f summary \u3067\u3059"}, {"[-certs] display certificates when verbose and verifying", "[-certs] \u8a73\u7d30\u51fa\u529b\u304a\u3088\u3073\u691c\u8a3c\u6642\u306b\u8a3c\u660e\u66f8\u3092\u8868\u793a"}, {"[-tsa ] location of the Timestamping Authority", @@ -98,10 +102,22 @@ public class JarSignerResources_ja extends java.util.ListResourceBundle { "[-providerClass \u6697\u53f7\u5316\u30b5\u30fc\u30d3\u30b9\u30d7\u30ed\u30d0\u30a4\u30c0\u306e\u540d\u524d"}, {" [-providerArg ]] ... master class file and constructor argument", " [-providerArg ]] ... \u30de\u30b9\u30bf\u30fc\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u3068\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u306e\u5f15\u6570"}, + {"[-strict] treat warnings as errors", + "[-strict] \u8b66\u544a\u3092\u30a8\u30e9\u30fc\u3068\u3057\u3066\u53d6\u308a\u6271\u3044\u307e\u3059"}, + {"Option lacks argument", "\u30aa\u30d7\u30b7\u30e7\u30f3\u306b\u5f15\u6570\u304c\u3042\u308a\u307e\u305b\u3093\u3002"}, + {"Please type jarsigner -help for usage", "\u4f7f\u3044\u65b9\u3092\u898b\u308b\u306b\u306f jarsigner -help \u3068\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002"}, + {"Please specify jarfile name", "jar \u30d5\u30a1\u30a4\u30eb\u540d\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002"}, + {"Please specify alias name", "\u5225\u540d\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002"}, + {"Only one alias can be specified", "\u6307\u5b9a\u3067\u304d\u308b\u5225\u540d\u306f 1 \u3064\u3060\u3051\u3067\u3059\u3002"}, + {"This jar contains signed entries which is not signed by the specified alias(es).", + "\u3053\u306e jar \u306b\u542b\u307e\u308c\u3066\u3044\u308b\u7f72\u540d\u6e08\u307f\u30a8\u30f3\u30c8\u30ea\u306f\u3001\u6307\u5b9a\u3055\u308c\u305f\u5225\u540d\u3067\u7f72\u540d\u3055\u308c\u305f\u3082\u306e\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002"}, + {"This jar contains signed entries that's not signed by alias in this keystore.", + "\u3053\u306e jar \u306b\u542b\u307e\u308c\u3066\u3044\u308b\u7f72\u540d\u6e08\u307f\u30a8\u30f3\u30c8\u30ea\u306f\u3001\u3053\u306e\u30ad\u30fc\u30b9\u30c8\u30a2\u3067\u7f72\u540d\u3055\u308c\u305f\u3082\u306e\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002"}, {"s", "s"}, {"m", "m"}, {"k", "k"}, {"i", "i"}, + {"(and %d more)", "(\u3055\u3089\u306b %d)"}, {" s = signature was verified ", " s = \u7f72\u540d\u304c\u691c\u8a3c\u3055\u308c\u307e\u3057\u305f\u3002"}, {" m = entry is listed in manifest", @@ -110,7 +126,11 @@ public class JarSignerResources_ja extends java.util.ListResourceBundle { " k = 1 \u3064\u4ee5\u4e0a\u306e\u8a3c\u660e\u66f8\u304c\u30ad\u30fc\u30b9\u30c8\u30a2\u3067\u691c\u51fa\u3055\u308c\u307e\u3057\u305f\u3002"}, {" i = at least one certificate was found in identity scope", " i = 1 \u3064\u4ee5\u4e0a\u306e\u8a3c\u660e\u66f8\u304c\u30a2\u30a4\u30c7\u30f3\u30c6\u30a3\u30c6\u30a3\u30b9\u30b3\u30fc\u30d7\u3067\u691c\u51fa\u3055\u308c\u307e\u3057\u305f\u3002"}, + {" X = not signed by specified alias(es)", + "X = \u6307\u5b9a\u3055\u308c\u305f\u5225\u540d\u3067\u7f72\u540d\u3055\u308c\u305f\u3082\u306e\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002"}, {"no manifest.", "\u30de\u30cb\u30d5\u30a7\u30b9\u30c8\u306f\u5b58\u5728\u3057\u307e\u305b\u3093\u3002"}, + {"(Signature related entries)","(\u7f72\u540d\u306b\u95a2\u9023\u3059\u308b\u30a8\u30f3\u30c8\u30ea)"}, + {"(Unsigned entries)", "(\u7f72\u540d\u3055\u308c\u3066\u3044\u306a\u3044\u30a8\u30f3\u30c8\u30ea)"}, {"jar is unsigned. (signatures missing or not parsable)", "jar \u306f\u7f72\u540d\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002(\u7f72\u540d\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u304b\u3001\u69cb\u6587\u89e3\u6790\u3067\u304d\u307e\u305b\u3093)"}, {"jar verified.", "jar \u304c\u691c\u8a3c\u3055\u308c\u307e\u3057\u305f\u3002"}, @@ -134,6 +154,12 @@ public class JarSignerResources_ja extends java.util.ListResourceBundle { "\u30ad\u30fc\u30b9\u30c8\u30a2\u30af\u30e9\u30b9\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u751f\u6210\u3067\u304d\u307e\u305b\u3093: "}, {"Certificate chain not found for: alias. alias must reference a valid KeyStore key entry containing a private key and corresponding public key certificate chain.", "\u6b21\u306e\u8a3c\u660e\u9023\u9396\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093: {0}\u3002 {1} \u306f\u3001\u975e\u516c\u958b\u9375\u304a\u3088\u3073\u5bfe\u5fdc\u3059\u308b\u516c\u958b\u9375\u8a3c\u660e\u9023\u9396\u3092\u542b\u3080\u6709\u52b9\u306a KeyStore \u9375\u30a8\u30f3\u30c8\u30ea\u3092\u53c2\u7167\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002"}, + {"File specified by -certchain does not exist", + "-certchain \u3067\u6307\u5b9a\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3057\u307e\u305b\u3093\u3002"}, + {"Cannot restore certchain from file specified", + "\u6307\u5b9a\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u8a3c\u660e\u9023\u9396\u3092\u5fa9\u5143\u3067\u304d\u307e\u305b\u3093\u3002"}, + {"Certificate chain not found in the file specified.", + "\u6307\u5b9a\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u306b\u8a3c\u660e\u9023\u9396\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002"}, {"found non-X.509 certificate in signer's chain", "\u7f72\u540d\u8005\u306e\u9023\u9396\u5185\u3067\u975e X.509 \u8a3c\u660e\u66f8\u304c\u691c\u51fa\u3055\u308c\u307e\u3057\u305f\u3002"}, {"incomplete certificate chain", "\u4e0d\u5b8c\u5168\u306a\u8a3c\u660e\u9023\u9396"}, @@ -149,6 +175,7 @@ public class JarSignerResources_ja extends java.util.ListResourceBundle { {"certificate is not valid until", "\u8a3c\u660e\u66f8\u306f {0} \u307e\u3067\u6709\u52b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093"}, {"certificate will expire on", "\u8a3c\u660e\u66f8\u306f {0} \u306b\u5931\u52b9\u3057\u307e\u3059"}, + {"[CertPath not validated: ", "[CertPath \u304c\u691c\u8a3c\u3055\u308c\u3066\u3044\u307e\u305b\u3093:"}, {"requesting a signature timestamp", "\u7f72\u540d\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u306e\u8981\u6c42"}, {"TSA location: ", "TSA \u306e\u5834\u6240: "}, @@ -189,14 +216,18 @@ public class JarSignerResources_ja extends java.util.ListResourceBundle { "\u7f72\u540d\u8005\u8a3c\u660e\u66f8\u306e ExtendedKeyUsage \u62e1\u5f35\u6a5f\u80fd\u3067\u306f\u3001\u30b3\u30fc\u30c9\u7f72\u540d\u306f\u8a31\u53ef\u3055\u308c\u307e\u305b\u3093\u3002"}, {"The signer certificate's NetscapeCertType extension doesn't allow code signing.", "\u7f72\u540d\u8005\u8a3c\u660e\u66f8\u306e NetscapeCertType \u62e1\u5f35\u6a5f\u80fd\u3067\u306f\u3001\u30b3\u30fc\u30c9\u7f72\u540d\u306f\u8a31\u53ef\u3055\u308c\u307e\u305b\u3093\u3002"}, - {"This jar contains entries whose signer certificate's KeyUsage extension doesn't allow code signing.", - "\u3053\u306e jar \u306b\u306f\u3001\u7f72\u540d\u8005\u8a3c\u660e\u66f8\u306e KeyUsage \u62e1\u5f35\u6a5f\u80fd\u304c\u30b3\u30fc\u30c9\u7f72\u540d\u3092\u8a31\u53ef\u3057\u306a\u3044\u30a8\u30f3\u30c8\u30ea\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002"}, - {"This jar contains entries whose signer certificate's ExtendedKeyUsage extension doesn't allow code signing.", - "\u3053\u306e jar \u306b\u306f\u3001\u7f72\u540d\u8005\u8a3c\u660e\u66f8\u306e ExtendedKeyUsage \u62e1\u5f35\u6a5f\u80fd\u304c\u30b3\u30fc\u30c9\u7f72\u540d\u3092\u8a31\u53ef\u3057\u306a\u3044\u30a8\u30f3\u30c8\u30ea\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002"}, - {"This jar contains entries whose signer certificate's NetscapeCertType extension doesn't allow code signing.", - "\u3053\u306e jar \u306b\u306f\u3001\u7f72\u540d\u8005\u8a3c\u660e\u66f8\u306e NetscapeCertType \u62e1\u5f35\u6a5f\u80fd\u304c\u30b3\u30fc\u30c9\u7f72\u540d\u3092\u8a31\u53ef\u3057\u306a\u3044\u30a8\u30f3\u30c8\u30ea\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002"}, + {"This jar contains entries whose signer certificate's KeyUsage extension doesn't allow code signing.", + "\u3053\u306e jar \u306b\u306f\u3001\u7f72\u540d\u8005\u8a3c\u660e\u66f8\u306e KeyUsage \u62e1\u5f35\u6a5f\u80fd\u304c\u30b3\u30fc\u30c9\u7f72\u540d\u3092\u8a31\u53ef\u3057\u306a\u3044\u30a8\u30f3\u30c8\u30ea\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002"}, + {"This jar contains entries whose signer certificate's ExtendedKeyUsage extension doesn't allow code signing.", + "\u3053\u306e jar \u306b\u306f\u3001\u7f72\u540d\u8005\u8a3c\u660e\u66f8\u306e ExtendedKeyUsage \u62e1\u5f35\u6a5f\u80fd\u304c\u30b3\u30fc\u30c9\u7f72\u540d\u3092\u8a31\u53ef\u3057\u306a\u3044\u30a8\u30f3\u30c8\u30ea\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002"}, + {"This jar contains entries whose signer certificate's NetscapeCertType extension doesn't allow code signing.", + "\u3053\u306e jar \u306b\u306f\u3001\u7f72\u540d\u8005\u8a3c\u660e\u66f8\u306e NetscapeCertType \u62e1\u5f35\u6a5f\u80fd\u304c\u30b3\u30fc\u30c9\u7f72\u540d\u3092\u8a31\u53ef\u3057\u306a\u3044\u30a8\u30f3\u30c8\u30ea\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002"}, {"[{0} extension does not support code signing]", "[{0} \u62e1\u5f35\u6a5f\u80fd\u306f\u30b3\u30fc\u30c9\u7f72\u540d\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u305b\u3093]"}, + {"The signer's certificate chain is not validated.", + "\u7f72\u540d\u8005\u306e\u8a3c\u660e\u9023\u9396\u304c\u691c\u8a3c\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002"}, + {"This jar contains entries whose certificate chain is not validated.", + "\u3053\u306e jar \u306b\u306f\u8a3c\u660e\u9023\u9396\u304c\u691c\u8a3c\u3055\u308c\u3066\u3044\u306a\u3044\u30a8\u30f3\u30c8\u30ea\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002"}, }; /** diff --git a/jdk/src/share/classes/sun/security/tools/JarSignerResources_zh_CN.java b/jdk/src/share/classes/sun/security/tools/JarSignerResources_zh_CN.java index 9e67fa26d3e..07a71b04fad 100644 --- a/jdk/src/share/classes/sun/security/tools/JarSignerResources_zh_CN.java +++ b/jdk/src/share/classes/sun/security/tools/JarSignerResources_zh_CN.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2000-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 @@ -51,11 +51,11 @@ public class JarSignerResources_zh_CN extends java.util.ListResourceBundle { {"If -protected is specified, then -storepass and -keypass must not be specified", "\u5982\u679c\u6307\u5b9a\u4e86 -protected\uff0c\u5219\u4e0d\u80fd\u6307\u5b9a -storepass \u548c -keypass"}, {"If keystore is not password protected, then -storepass and -keypass must not be specified", -"\u5982\u679c\u5bc6\u94a5\u5e93\u672a\u53d7\u5bc6\u7801\u4fdd\u62a4\uff0c\u5219\u8bf7\u52ff\u6307\u5b9a -storepass \u548c -keypass"}, + "\u5982\u679c\u5bc6\u94a5\u5e93\u672a\u53d7\u5bc6\u7801\u4fdd\u62a4\uff0c\u5219\u8bf7\u52ff\u6307\u5b9a -storepass \u548c -keypass"}, {"Usage: jarsigner [options] jar-file alias", "\u7528\u6cd5\uff1ajarsigner [\u9009\u9879] jar \u6587\u4ef6\u522b\u540d"}, - {" jarsigner -verify [options] jar-file", - " jarsigner -verify [\u9009\u9879] jar \u6587\u4ef6"}, + {" jarsigner -verify [options] jar-file [alias...]", + " jarsigner -verify [\u9009\u9879] jar \u6587\u4ef6 [\u522b\u540d...]"}, {"[-keystore ] keystore location", "[-keystore ] \u5bc6\u94a5\u5e93\u4f4d\u7f6e"}, {"[-storepass ] password for keystore integrity", @@ -64,6 +64,8 @@ public class JarSignerResources_zh_CN extends java.util.ListResourceBundle { "[-storetype <\u7c7b\u578b>] \u5bc6\u94a5\u5e93\u7c7b\u578b"}, {"[-keypass ] password for private key (if different)", "[-keypass <\u53e3\u4ee4>] \u4e13\u7528\u5bc6\u94a5\u7684\u53e3\u4ee4\uff08\u5982\u679c\u4e0d\u540c\uff09"}, + {"[-certchain ] name of alternative certchain file", + "[-certchain <\u6587\u4ef6>] \u66ff\u4ee3\u8bc1\u4e66\u94fe\u6587\u4ef6\u7684\u540d\u79f0"}, {"[-sigfile ] name of .SF/.DSA file", "[-sigfile <\u6587\u4ef6>] .SF/.DSA \u6587\u4ef6\u7684\u540d\u79f0"}, {"[-signedjar ] name of signed JAR file", @@ -74,8 +76,10 @@ public class JarSignerResources_zh_CN extends java.util.ListResourceBundle { "[-sigalg <\u7b97\u6cd5>] \u7b7e\u540d\u7b97\u6cd5\u7684\u540d\u79f0"}, {"[-verify] verify a signed JAR file", "[-verify] \u9a8c\u8bc1\u5df2\u7b7e\u540d\u7684 JAR \u6587\u4ef6"}, - {"[-verbose] verbose output when signing/verifying", - "[-verbose] \u7b7e\u540d/\u9a8c\u8bc1\u65f6\u8f93\u51fa\u8be6\u7ec6\u4fe1\u606f"}, + {"[-verbose[:suboptions]] verbose output when signing/verifying.", + "[-verbose[:\u5b50\u9009\u9879]] \u7b7e\u540d/\u9a8c\u8bc1\u65f6\u8f93\u51fa\u8be6\u7ec6\u4fe1\u606f\u3002"}, + {" suboptions can be all, grouped or summary", + " \u5b50\u9009\u9879\u53ef\u4ee5\u4e3a all\u3001grouped \u6216 summary"}, {"[-certs] display certificates when verbose and verifying", "[-certs] \u8f93\u51fa\u8be6\u7ec6\u4fe1\u606f\u548c\u9a8c\u8bc1\u65f6\u663e\u793a\u8bc1\u4e66"}, {"[-tsa ] location of the Timestamping Authority", @@ -98,10 +102,22 @@ public class JarSignerResources_zh_CN extends java.util.ListResourceBundle { "[-providerClass <\u7c7b> \u52a0\u5bc6\u670d\u52a1\u63d0\u4f9b\u8005\u7684\u540d\u79f0"}, {" [-providerArg ]] ... master class file and constructor argument", " [-providerArg <\u53c2\u6570>]] ... \u4e3b\u7c7b\u6587\u4ef6\u548c\u6784\u9020\u51fd\u6570\u53c2\u6570"}, + {"[-strict] treat warnings as errors", + "[-strict] \u5c06\u8b66\u544a\u89c6\u4e3a\u9519\u8bef"}, + {"Option lacks argument", "\u9009\u9879\u7f3a\u5c11\u53c2\u6570"}, + {"Please type jarsigner -help for usage", "\u6709\u5173\u7528\u6cd5\uff0c\u8bf7\u952e\u5165 jarsigner -help"}, + {"Please specify jarfile name", "\u8bf7\u6307\u5b9a jarfile \u540d\u79f0"}, + {"Please specify alias name", "\u8bf7\u6307\u5b9a\u522b\u540d"}, + {"Only one alias can be specified", "\u53ea\u80fd\u6307\u5b9a\u4e00\u4e2a\u522b\u540d"}, + {"This jar contains signed entries which is not signed by the specified alias(es).", + "\u6b64 jar \u5305\u542b\u6307\u5b9a\u522b\u540d\u672a\u7b7e\u540d\u7684\u7b7e\u540d\u6761\u76ee\u3002"}, + {"This jar contains signed entries that's not signed by alias in this keystore.", + "\u6b64 jar \u5305\u542b\u6b64\u5bc6\u94a5\u5e93\u4e2d\u522b\u540d\u672a\u7b7e\u540d\u7684\u7b7e\u540d\u6761\u76ee\u3002"}, {"s", "s"}, {"m", "m"}, {"k", "k"}, {"i", "i"}, + {"(and %d more)", "\uff08\u8fd8\u6709 %d\uff09"}, {" s = signature was verified ", " s = \u5df2\u9a8c\u8bc1\u7b7e\u540d "}, {" m = entry is listed in manifest", @@ -110,7 +126,11 @@ public class JarSignerResources_zh_CN extends java.util.ListResourceBundle { " k = \u5728\u5bc6\u94a5\u5e93\u4e2d\u81f3\u5c11\u627e\u5230\u4e86\u4e00\u4e2a\u8bc1\u4e66"}, {" i = at least one certificate was found in identity scope", " i = \u5728\u8eab\u4efd\u4f5c\u7528\u57df\u5185\u81f3\u5c11\u627e\u5230\u4e86\u4e00\u4e2a\u8bc1\u4e66"}, + {" X = not signed by specified alias(es)", + " X = \u672a\u7ecf\u6307\u5b9a\u522b\u540d\u7b7e\u540d"}, {"no manifest.", "\u6ca1\u6709\u6e05\u5355\u3002"}, + {"(Signature related entries)","\uff08\u4e0e\u7b7e\u540d\u6709\u5173\u7684\u6761\u76ee\uff09"}, + {"(Unsigned entries)", "\uff08\u672a\u7b7e\u540d\u7684\u6761\u76ee\uff09"}, {"jar is unsigned. (signatures missing or not parsable)", "jar \u672a\u7b7e\u540d\u3002\uff08\u7f3a\u5c11\u7b7e\u540d\u6216\u7b7e\u540d\u65e0\u6cd5\u89e3\u6790\uff09"}, {"jar verified.", "jar \u5df2\u9a8c\u8bc1\u3002"}, @@ -134,6 +154,12 @@ public class JarSignerResources_zh_CN extends java.util.ListResourceBundle { "\u65e0\u6cd5\u5b9e\u4f8b\u5316\u5bc6\u94a5\u5e93\u7c7b\uff1a "}, {"Certificate chain not found for: alias. alias must reference a valid KeyStore key entry containing a private key and corresponding public key certificate chain.", "\u627e\u4e0d\u5230 {0} \u7684\u8bc1\u4e66\u94fe\u3002{1} \u5fc5\u987b\u5f15\u7528\u5305\u542b\u4e13\u7528\u5bc6\u94a5\u548c\u76f8\u5e94\u7684\u516c\u5171\u5bc6\u94a5\u8bc1\u4e66\u94fe\u7684\u6709\u6548\u5bc6\u94a5\u5e93\u5bc6\u94a5\u6761\u76ee\u3002"}, + {"File specified by -certchain does not exist", + "-certchain \u6307\u5b9a\u7684\u6587\u4ef6\u4e0d\u5b58\u5728"}, + {"Cannot restore certchain from file specified", + "\u65e0\u6cd5\u4ece\u6307\u5b9a\u6587\u4ef6\u6062\u590d\u8bc1\u4e66\u94fe"}, + {"Certificate chain not found in the file specified.", + "\u5728\u6307\u5b9a\u6587\u4ef6\u4e2d\u672a\u627e\u5230\u8bc1\u4e66\u94fe\u3002"}, {"found non-X.509 certificate in signer's chain", "\u5728\u7b7e\u540d\u8005\u7684\u94fe\u4e2d\u627e\u5230\u975e X.509 \u8bc1\u4e66"}, {"incomplete certificate chain", "\u8bc1\u4e66\u94fe\u4e0d\u5b8c\u6574"}, @@ -149,6 +175,7 @@ public class JarSignerResources_zh_CN extends java.util.ListResourceBundle { {"certificate is not valid until", "\u76f4\u5230 {0}\uff0c\u8bc1\u4e66\u624d\u6709\u6548"}, {"certificate will expire on", "\u8bc1\u4e66\u5c06\u5728 {0} \u5230\u671f"}, + {"[CertPath not validated: ", "[\u8bc1\u4e66\u8def\u5f84\u672a\u7ecf\u8fc7\u9a8c\u8bc1\uff1a"}, {"requesting a signature timestamp", "\u6b63\u5728\u8bf7\u6c42\u7b7e\u540d\u65f6\u95f4\u6233"}, {"TSA location: ", "TSA \u4f4d\u7f6e\uff1a "}, @@ -184,19 +211,23 @@ public class JarSignerResources_zh_CN extends java.util.ListResourceBundle { {"The signer certificate is not yet valid.", "\u7b7e\u540d\u8005\u8bc1\u4e66\u4ecd\u65e0\u6548\u3002"}, {"The signer certificate's KeyUsage extension doesn't allow code signing.", -"\u7531\u4e8e\u7b7e\u540d\u8005\u8bc1\u4e66\u7684 KeyUsage \u6269\u5c55\u800c\u65e0\u6cd5\u8fdb\u884c\u4ee3\u7801\u7b7e\u540d\u3002"}, + "\u7531\u4e8e\u7b7e\u540d\u8005\u8bc1\u4e66\u7684 KeyUsage \u6269\u5c55\u800c\u65e0\u6cd5\u8fdb\u884c\u4ee3\u7801\u7b7e\u540d\u3002"}, {"The signer certificate's ExtendedKeyUsage extension doesn't allow code signing.", -"\u7531\u4e8e\u7b7e\u540d\u8005\u8bc1\u4e66\u7684 ExtendedKeyUsage \u6269\u5c55\u800c\u65e0\u6cd5\u8fdb\u884c\u4ee3\u7801\u7b7e\u540d\u3002"}, + "\u7531\u4e8e\u7b7e\u540d\u8005\u8bc1\u4e66\u7684 ExtendedKeyUsage \u6269\u5c55\u800c\u65e0\u6cd5\u8fdb\u884c\u4ee3\u7801\u7b7e\u540d\u3002"}, {"The signer certificate's NetscapeCertType extension doesn't allow code signing.", -"\u7531\u4e8e\u7b7e\u540d\u8005\u8bc1\u4e66\u7684 NetscapeCertType \u6269\u5c55\u800c\u65e0\u6cd5\u8fdb\u884c\u4ee3\u7801\u7b7e\u540d\u3002"}, - {"This jar contains entries whose signer certificate's KeyUsage extension doesn't allow code signing.", -"\u6b64 jar \u5305\u542b\u7531\u4e8e\u7b7e\u540d\u8005\u8bc1\u4e66\u7684 KeyUsage \u6269\u5c55\u800c\u65e0\u6cd5\u8fdb\u884c\u4ee3\u7801\u7b7e\u540d\u7684\u6761\u76ee\u3002"}, - {"This jar contains entries whose signer certificate's ExtendedKeyUsage extension doesn't allow code signing.", -"\u6b64 jar \u5305\u542b\u7531\u4e8e\u7b7e\u540d\u8005\u8bc1\u4e66\u7684 ExtendedKeyUsage \u6269\u5c55\u800c\u65e0\u6cd5\u8fdb\u884c\u4ee3\u7801\u7b7e\u540d\u7684\u6761\u76ee\u3002"}, - {"This jar contains entries whose signer certificate's NetscapeCertType extension doesn't allow code signing.", -"\u6b64 jar \u5305\u542b\u7531\u4e8e\u7b7e\u540d\u8005\u8bc1\u4e66\u7684 NetscapeCertType \u6269\u5c55\u800c\u65e0\u6cd5\u8fdb\u884c\u4ee3\u7801\u7b7e\u540d\u7684\u6761\u76ee\u3002"}, + "\u7531\u4e8e\u7b7e\u540d\u8005\u8bc1\u4e66\u7684 NetscapeCertType \u6269\u5c55\u800c\u65e0\u6cd5\u8fdb\u884c\u4ee3\u7801\u7b7e\u540d\u3002"}, + {"This jar contains entries whose signer certificate's KeyUsage extension doesn't allow code signing.", + "\u6b64 jar \u5305\u542b\u7531\u4e8e\u7b7e\u540d\u8005\u8bc1\u4e66\u7684 KeyUsage \u6269\u5c55\u800c\u65e0\u6cd5\u8fdb\u884c\u4ee3\u7801\u7b7e\u540d\u7684\u6761\u76ee\u3002"}, + {"This jar contains entries whose signer certificate's ExtendedKeyUsage extension doesn't allow code signing.", + "\u6b64 jar \u5305\u542b\u7531\u4e8e\u7b7e\u540d\u8005\u8bc1\u4e66\u7684 ExtendedKeyUsage \u6269\u5c55\u800c\u65e0\u6cd5\u8fdb\u884c\u4ee3\u7801\u7b7e\u540d\u7684\u6761\u76ee\u3002"}, + {"This jar contains entries whose signer certificate's NetscapeCertType extension doesn't allow code signing.", + "\u6b64 jar \u5305\u542b\u7531\u4e8e\u7b7e\u540d\u8005\u8bc1\u4e66\u7684 NetscapeCertType \u6269\u5c55\u800c\u65e0\u6cd5\u8fdb\u884c\u4ee3\u7801\u7b7e\u540d\u7684\u6761\u76ee\u3002"}, {"[{0} extension does not support code signing]", -"[{0} \u6269\u5c55\u4e0d\u652f\u6301\u4ee3\u7801\u7b7e\u540d]"}, + "[{0} \u6269\u5c55\u4e0d\u652f\u6301\u4ee3\u7801\u7b7e\u540d]"}, + {"The signer's certificate chain is not validated.", + "\u7b7e\u540d\u8005\u7684\u8bc1\u4e66\u94fe\u672a\u7ecf\u8fc7\u9a8c\u8bc1\u3002"}, + {"This jar contains entries whose certificate chain is not validated.", + "\u6b64 jar \u5305\u542b\u8bc1\u4e66\u94fe\u672a\u7ecf\u8fc7\u9a8c\u8bc1\u7684\u6761\u76ee\u3002"}, }; /** diff --git a/jdk/src/share/classes/sun/security/util/AuthResources_de.java b/jdk/src/share/classes/sun/security/util/AuthResources_de.java index 6d76f3331f7..f7848fdc1ac 100644 --- a/jdk/src/share/classes/sun/security/util/AuthResources_de.java +++ b/jdk/src/share/classes/sun/security/util/AuthResources_de.java @@ -1,5 +1,5 @@ /* - * Copyright 2001-2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2000-2006 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 @@ -53,30 +53,30 @@ public class AuthResources_de extends java.util.ListResourceBundle { // UnixPrincipals {"UnixNumericGroupPrincipal [Primary Group]: name", - "Unix numerischer Gruppen-Principal [Prim\u00e4rgruppe]: {0}"}, + "Unix numerischer Gruppen-Principal [Prim\u00e4rgruppe]: {0}"}, {"UnixNumericGroupPrincipal [Supplementary Group]: name", - "Unix numerische Gruppen-Principal [Zusatzgruppe]: {0}"}, + "Unix numerische Gruppen-Principal [Zusatzgruppe]: {0}"}, {"UnixNumericUserPrincipal: name", "Unix numerischer Benutzer-Principal: {0}"}, {"UnixPrincipal: name", "Unix-Principal: {0}"}, // com.sun.security.auth.login.ConfigFile {"Unable to properly expand config", "{0} kann nicht ordnungsgem\u00e4\u00df erweitert werden."}, {"extra_config (No such file or directory)", - "{0} (Datei oder Verzeichnis existiert nicht.)"}, - {"Unable to locate a login configuration", - "Anmeldekonfiguration kann nicht gefunden werden."}, + "{0} (Datei oder Verzeichnis existiert nicht.)"}, + {"Configuration Error:\n\tNo such file or directory", + "Konfigurationsfehler: \n\tKeine Datei oder kein Verzeichnis dieser Art vorhanden"}, {"Configuration Error:\n\tInvalid control flag, flag", - "Konfigurationsfehler:\n\tUng\u00fcltiges Steuerflag, {0}"}, + "Konfigurationsfehler:\n\tUng\u00fcltiges Steuerflag, {0}"}, {"Configuration Error:\n\tCan not specify multiple entries for appName", - "Konfigurationsfehler:\n\tEs k\u00f6nnen nicht mehrere Angaben f\u00fcr {0} gemacht werden."}, + "Konfigurationsfehler:\n\tEs k\u00f6nnen nicht mehrere Angaben f\u00fcr {0} gemacht werden."}, {"Configuration Error:\n\texpected [expect], read [end of file]", - "Konfigurationsfehler:\n\terwartet [{0}], gelesen [Dateiende]"}, + "Konfigurationsfehler:\n\terwartet [{0}], gelesen [Dateiende]"}, {"Configuration Error:\n\tLine line: expected [expect], found [value]", - "Konfigurationsfehler:\n\tZeile {0}: erwartet [{1}], gefunden [{2}]"}, + "Konfigurationsfehler:\n\tZeile {0}: erwartet [{1}], gefunden [{2}]"}, {"Configuration Error:\n\tLine line: expected [expect]", - "Konfigurationsfehler:\n\tZeile {0}: erwartet [{1}]"}, + "Konfigurationsfehler:\n\tZeile {0}: erwartet [{1}]"}, {"Configuration Error:\n\tLine line: system property [value] expanded to empty value", - "Konfigurationsfehler:\n\tZeile {0}: Systemeigenschaft [{1}] auf leeren Wert erweitert"}, + "Konfigurationsfehler:\n\tZeile {0}: Systemeigenschaft [{1}] auf leeren Wert erweitert"}, // com.sun.security.auth.module.JndiLoginModule {"username: ","Benutzername: "}, @@ -88,13 +88,13 @@ public class AuthResources_de extends java.util.ListResourceBundle { {"Keystore alias: ","Keystore-Alias: "}, {"Keystore password: ","Keystore-Passwort: "}, {"Private key password (optional): ", - "Privates Schl\u00fcsselpasswort (optional): "}, + "Privates Schl\u00fcsselpasswort (optional): "}, // com.sun.security.auth.module.Krb5LoginModule {"Kerberos username [[defUsername]]: ", - "Kerberos-Benutzername [{0}]: "}, + "Kerberos-Benutzername [{0}]: "}, {"Kerberos password for [username]: ", - "Kerberos-Passwort f\u00fcr {0}: "}, + "Kerberos-Passwort f\u00fcr {0}: "}, /*** EVERYTHING BELOW IS DEPRECATED ***/ @@ -107,17 +107,17 @@ public class AuthResources_de extends java.util.ListResourceBundle { {"(", "("}, {")", ")"}, {"attempt to add a Permission to a readonly PermissionCollection", - "Es wurde versucht, eine Berechtigung zu einer schreibgesch\u00fctzten Berechtigungssammlung hinzuzuf\u00fcgen."}, + "Es wurde versucht, eine Berechtigung zu einer schreibgesch\u00fctzten Berechtigungssammlung hinzuzuf\u00fcgen."}, // com.sun.security.auth.PolicyParser {"expected keystore type", "erwarteter Keystore-Typ"}, {"can not specify Principal with a ", - "Principal kann nicht mit einer "}, + "Principal kann nicht mit einer "}, {"wildcard class without a wildcard name", - "Wildcard-Klasse ohne Wildcard-Namen angegeben werden."}, + "Wildcard-Klasse ohne Wildcard-Namen angegeben werden."}, {"expected codeBase or SignedBy", "codeBase oder SignedBy erwartet"}, {"only Principal-based grant entries permitted", - "Nur Principal-basierte Berechtigungseintr\u00e4ge erlaubt"}, + "Nur Principal-basierte Berechtigungseintr\u00e4ge erlaubt"}, {"expected permission entry", "Berechtigungseintrag erwartet"}, {"number ", "Nummer "}, {"expected ", "erwartet "}, @@ -130,11 +130,11 @@ public class AuthResources_de extends java.util.ListResourceBundle { // SolarisPrincipals {"SolarisNumericGroupPrincipal [Primary Group]: ", - "Solaris numerischer Gruppen-Principal [Prim\u00e4rgruppe]: "}, + "Solaris numerischer Gruppen-Principal [Prim\u00e4rgruppe]: "}, {"SolarisNumericGroupPrincipal [Supplementary Group]: ", - "Solaris numerischer Gruppen-Principal [Zusatzgruppe]: "}, + "Solaris numerischer Gruppen-Principal [Zusatzgruppe]: "}, {"SolarisNumericUserPrincipal: ", - "Solaris numerischer Benutzer-Principal: "}, + "Solaris numerischer Benutzer-Principal: "}, {"SolarisPrincipal: ", "Solaris-Principal: "}, {"provided null name", "enthielt leeren Namen"} diff --git a/jdk/src/share/classes/sun/security/util/AuthResources_es.java b/jdk/src/share/classes/sun/security/util/AuthResources_es.java index ded7452b086..84855010813 100644 --- a/jdk/src/share/classes/sun/security/util/AuthResources_es.java +++ b/jdk/src/share/classes/sun/security/util/AuthResources_es.java @@ -1,5 +1,5 @@ /* - * Copyright 2001-2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2000-2006 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 @@ -53,30 +53,30 @@ public class AuthResources_es extends java.util.ListResourceBundle { // UnixPrincipals {"UnixNumericGroupPrincipal [Primary Group]: name", - "UnixNumericGroupPrincipal [Grupo principal] {0}"}, + "UnixNumericGroupPrincipal [Grupo principal] {0}"}, {"UnixNumericGroupPrincipal [Supplementary Group]: name", - "UnixNumericGroupPrincipal [Grupo adicional] {0}"}, + "UnixNumericGroupPrincipal [Grupo adicional] {0}"}, {"UnixNumericUserPrincipal: name", "UnixNumericUserPrincipal: {0}"}, {"UnixPrincipal: name", "UnixPrincipal: {0}"}, // com.sun.security.auth.login.ConfigFile {"Unable to properly expand config", "No se puede ampliar correctamente {0}"}, {"extra_config (No such file or directory)", - "{0} (No existe tal archivo o directorio)"}, - {"Unable to locate a login configuration", - "No se puede localizar una configuraci\u00f3n de inicio de sesi\u00f3n"}, + "{0} (No existe tal archivo o directorio)"}, + {"Configuration Error:\n\tNo such file or directory", + "Error de configuraci\u00f3n:\n\tNo se encuentra archivo o directorio"}, {"Configuration Error:\n\tInvalid control flag, flag", - "Error de configuraci\u00f3n:\n\tIndicador de control no v\u00e1lido, {0}"}, + "Error de configuraci\u00f3n:\n\tIndicador de control no v\u00e1lido, {0}"}, {"Configuration Error:\n\tCan not specify multiple entries for appName", - "Error de configuraci\u00f3n:\n\tNo se pueden especificar m\u00faltiples entradas para {0}"}, + "Error de configuraci\u00f3n:\n\tNo se pueden especificar m\u00faltiples entradas para {0}"}, {"Configuration Error:\n\texpected [expect], read [end of file]", - "Error de configuraci\u00f3n:\n\tse esperaba [{0}], se ha le\u00eddo [end of file]"}, + "Error de configuraci\u00f3n:\n\tse esperaba [{0}], se ha le\u00eddo [end of file]"}, {"Configuration Error:\n\tLine line: expected [expect], found [value]", - "Error de configuraci\u00f3n:\n\tL\u00ednea {0}: se esperaba [{1}], se ha encontrado [{2}]"}, + "Error de configuraci\u00f3n:\n\tL\u00ednea {0}: se esperaba [{1}], se ha encontrado [{2}]"}, {"Configuration Error:\n\tLine line: expected [expect]", - "Error de configuraci\u00f3n:\n\tL\u00ednea {0}: se esperaba [{1}]"}, + "Error de configuraci\u00f3n:\n\tL\u00ednea {0}: se esperaba [{1}]"}, {"Configuration Error:\n\tLine line: system property [value] expanded to empty value", - "Error de configuraci\u00f3n:\n\tL\u00ednea {0}: propiedad de sistema [{1}] ampliada a valor vac\u00edo"}, + "Error de configuraci\u00f3n:\n\tL\u00ednea {0}: propiedad de sistema [{1}] ampliada a valor vac\u00edo"}, // com.sun.security.auth.module.JndiLoginModule {"username: ","nombre de usuario: "}, @@ -88,13 +88,13 @@ public class AuthResources_es extends java.util.ListResourceBundle { {"Keystore alias: ","Alias de almac\u00e9n de claves: "}, {"Keystore password: ","Contrase\u00f1a de almac\u00e9n de claves: "}, {"Private key password (optional): ", - "Contrase\u00f1a de clave privada (opcional): "}, + "Contrase\u00f1a de clave privada (opcional): "}, // com.sun.security.auth.module.Krb5LoginModule {"Kerberos username [[defUsername]]: ", - "Nombre de usuario de Kerberos [{0}]: "}, + "Nombre de usuario de Kerberos [{0}]: "}, {"Kerberos password for [username]: ", - "Contrase\u00f1a de Kerberos de {0}: "}, + "Contrase\u00f1a de Kerberos de {0}: "}, /*** EVERYTHING BELOW IS DEPRECATED ***/ @@ -107,17 +107,17 @@ public class AuthResources_es extends java.util.ListResourceBundle { {"(", "("}, {")", ")"}, {"attempt to add a Permission to a readonly PermissionCollection", - "se ha intentado agregar un Permiso a una Colecci\u00f3n de permisos de s\u00f3lo lectura"}, + "se ha intentado agregar un Permiso a una Colecci\u00f3n de permisos de s\u00f3lo lectura"}, // com.sun.security.auth.PolicyParser {"expected keystore type", "se esperaba un tipo de almac\u00e9n de claves"}, {"can not specify Principal with a ", - "no se puede especificar Principal con una "}, + "no se puede especificar Principal con una "}, {"wildcard class without a wildcard name", - "clase comod\u00edn sin nombre de comod\u00edn"}, + "clase comod\u00edn sin nombre de comod\u00edn"}, {"expected codeBase or SignedBy", "se esperaba base de c\u00f3digos o SignedBy"}, {"only Principal-based grant entries permitted", - "s\u00f3lo se permite conceder entradas basadas en Principal"}, + "s\u00f3lo se permite conceder entradas basadas en Principal"}, {"expected permission entry", "se esperaba un permiso de entrada"}, {"number ", "n\u00famero "}, {"expected ", "se esperaba "}, @@ -130,11 +130,11 @@ public class AuthResources_es extends java.util.ListResourceBundle { // SolarisPrincipals {"SolarisNumericGroupPrincipal [Primary Group]: ", - "SolarisNumericGroupPrincipal [Grupo principal]: "}, + "SolarisNumericGroupPrincipal [Grupo principal]: "}, {"SolarisNumericGroupPrincipal [Supplementary Group]: ", - "SolarisNumericGroupPrincipal [Grupo adicional]: "}, + "SolarisNumericGroupPrincipal [Grupo adicional]: "}, {"SolarisNumericUserPrincipal: ", - "SolarisNumericUserPrincipal: "}, + "SolarisNumericUserPrincipal: "}, {"SolarisPrincipal: ", "SolarisPrincipal: "}, {"provided null name", "se ha proporcionado un nombre nulo"} diff --git a/jdk/src/share/classes/sun/security/util/AuthResources_fr.java b/jdk/src/share/classes/sun/security/util/AuthResources_fr.java index 39611a8d345..146d5fb343a 100644 --- a/jdk/src/share/classes/sun/security/util/AuthResources_fr.java +++ b/jdk/src/share/classes/sun/security/util/AuthResources_fr.java @@ -1,5 +1,5 @@ /* - * Copyright 2001-2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2000-2006 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 @@ -53,30 +53,30 @@ public class AuthResources_fr extends java.util.ListResourceBundle { // UnixPrincipals {"UnixNumericGroupPrincipal [Primary Group]: name", - "UnixNumericGroupPrincipal [groupe principal] : {0}"}, + "UnixNumericGroupPrincipal [groupe principal] : {0}"}, {"UnixNumericGroupPrincipal [Supplementary Group]: name", - "UnixNumericGroupPrincipal [groupe suppl\u00e9mentaire] : {0}"}, + "UnixNumericGroupPrincipal [groupe suppl\u00e9mentaire] : {0}"}, {"UnixNumericUserPrincipal: name", "UnixNumericUserPrincipal : {0}"}, {"UnixPrincipal: name", "UnixPrincipal : {0}"}, // com.sun.security.auth.login.ConfigFile {"Unable to properly expand config", "Impossible de d\u00e9velopper {0} correctement"}, {"extra_config (No such file or directory)", - "{0} (fichier ou r\u00e9pertoire introuvable)"}, - {"Unable to locate a login configuration", - "Impossible de trouver une configuration de connexion"}, + "{0} (fichier ou r\u00e9pertoire introuvable)"}, + {"Configuration Error:\n\tNo such file or directory", + "Erreur de configuration\u00a0:\n\tAucun fichier ou r\u00e9pertoire de ce type"}, {"Configuration Error:\n\tInvalid control flag, flag", - "Erreur de configuration :\n\tIndicateur de contr\u00f4le non valide, {0}"}, + "Erreur de configuration :\n\tIndicateur de contr\u00f4le non valide, {0}"}, {"Configuration Error:\n\tCan not specify multiple entries for appName", - "Erreur de configuration :\n\tImpossible de sp\u00e9cifier des entr\u00e9es multiples pour {0}"}, + "Erreur de configuration :\n\tImpossible de sp\u00e9cifier des entr\u00e9es multiples pour {0}"}, {"Configuration Error:\n\texpected [expect], read [end of file]", - "Erreur de configuration :\n\tattendu [{0}], lecture [fin de fichier]"}, + "Erreur de configuration :\n\tattendu [{0}], lecture [fin de fichier]"}, {"Configuration Error:\n\tLine line: expected [expect], found [value]", - "Erreur de configuration :\n\tLigne {0} : attendu [{1}], trouv\u00e9 [{2}]"}, + "Erreur de configuration :\n\tLigne {0} : attendu [{1}], trouv\u00e9 [{2}]"}, {"Configuration Error:\n\tLine line: expected [expect]", - "Erreur de configuration :\n\tLigne {0} : attendu [{1}]"}, + "Erreur de configuration :\n\tLigne {0} : attendu [{1}]"}, {"Configuration Error:\n\tLine line: system property [value] expanded to empty value", - "Erreur de configuration :\n\tLigne {0} : propri\u00e9t\u00e9 syst\u00e8me [{1}] d\u00e9velopp\u00e9e en valeur vide"}, + "Erreur de configuration :\n\tLigne {0} : propri\u00e9t\u00e9 syst\u00e8me [{1}] d\u00e9velopp\u00e9e en valeur vide"}, // com.sun.security.auth.module.JndiLoginModule {"username: ","Nom d'utilisateur : "}, @@ -88,13 +88,13 @@ public class AuthResources_fr extends java.util.ListResourceBundle { {"Keystore alias: ","Alias pour Keystore : "}, {"Keystore password: ","Mot de passe pour Keystore : "}, {"Private key password (optional): ", - "Mot de passe de cl\u00e9 priv\u00e9e (facultatif) : "}, + "Mot de passe de cl\u00e9 priv\u00e9e (facultatif) : "}, // com.sun.security.auth.module.Krb5LoginModule {"Kerberos username [[defUsername]]: ", - "Nom d''utilisateur Kerberos [{0}] : "}, + "Nom d''utilisateur Kerberos [{0}] : "}, {"Kerberos password for [username]: ", - "Mot de pass\u00e9 Kerberos pour {0} : "}, + "Mot de pass\u00e9 Kerberos pour {0} : "}, /*** EVERYTHING BELOW IS DEPRECATED ***/ @@ -107,17 +107,17 @@ public class AuthResources_fr extends java.util.ListResourceBundle { {"(", "("}, {")", ")"}, {"attempt to add a Permission to a readonly PermissionCollection", - "tentative d'ajout de permission \u00e0 un ensemble de permissions en lecture seule"}, + "tentative d'ajout de permission \u00e0 un ensemble de permissions en lecture seule"}, // com.sun.security.auth.PolicyParser {"expected keystore type", "type de Keystore attendu"}, {"can not specify Principal with a ", - "impossible de sp\u00e9cifier Principal avec une"}, + "impossible de sp\u00e9cifier Principal avec une "}, {"wildcard class without a wildcard name", - "classe g\u00e9n\u00e9rique sans nom g\u00e9n\u00e9rique"}, + "classe g\u00e9n\u00e9rique sans nom g\u00e9n\u00e9rique"}, {"expected codeBase or SignedBy", "codeBase ou SignedBy attendu"}, {"only Principal-based grant entries permitted", - "seules les entr\u00e9es bas\u00e9es sur Principal sont autoris\u00e9es"}, + "seules les entr\u00e9es bas\u00e9es sur Principal sont autoris\u00e9es"}, {"expected permission entry", "entr\u00e9e de permission attendue"}, {"number ", "nombre "}, {"expected ", "attendu "}, @@ -130,11 +130,11 @@ public class AuthResources_fr extends java.util.ListResourceBundle { // SolarisPrincipals {"SolarisNumericGroupPrincipal [Primary Group]: ", - "SolarisNumericGroupPrincipal [groupe principal] : "}, + "SolarisNumericGroupPrincipal [groupe principal] : "}, {"SolarisNumericGroupPrincipal [Supplementary Group]: ", - "SolarisNumericGroupPrincipal [groupe suppl\u00e9mentaire] : "}, + "SolarisNumericGroupPrincipal [groupe suppl\u00e9mentaire] : "}, {"SolarisNumericUserPrincipal: ", - "SolarisNumericUserPrincipal : "}, + "SolarisNumericUserPrincipal : "}, {"SolarisPrincipal: ", "SolarisPrincipal : "}, {"provided null name", "nom Null sp\u00e9cifi\u00e9"} diff --git a/jdk/src/share/classes/sun/security/util/AuthResources_it.java b/jdk/src/share/classes/sun/security/util/AuthResources_it.java index 4d846f2d958..4900458fa9b 100644 --- a/jdk/src/share/classes/sun/security/util/AuthResources_it.java +++ b/jdk/src/share/classes/sun/security/util/AuthResources_it.java @@ -1,5 +1,5 @@ /* - * Copyright 2001-2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2000-2006 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,7 +38,6 @@ package sun.security.util; public class AuthResources_it extends java.util.ListResourceBundle { private static final Object[][] contents = { - // NT principals {"invalid null input: value", "input nullo non valido: {0}"}, {"NTDomainPrincipal: name", "NTDomainPrincipal: {0}"}, @@ -53,30 +52,30 @@ public class AuthResources_it extends java.util.ListResourceBundle { // UnixPrincipals {"UnixNumericGroupPrincipal [Primary Group]: name", - "UnixNumericGroupPrincipal [gruppo primario]: {0}"}, + "UnixNumericGroupPrincipal [gruppo primario]: {0}"}, {"UnixNumericGroupPrincipal [Supplementary Group]: name", - "UnixNumericGroupPrincipal [gruppo supplementare]: {0}"}, + "UnixNumericGroupPrincipal [gruppo supplementare]: {0}"}, {"UnixNumericUserPrincipal: name", "UnixNumericUserPrincipal: {0}"}, {"UnixPrincipal: name", "UnixPrincipal: {0}"}, // com.sun.security.auth.login.ConfigFile {"Unable to properly expand config", "Impossibile espandere correttamente {0}"}, {"extra_config (No such file or directory)", - "{0} (file o directory inesistente)"}, - {"Unable to locate a login configuration", - "Impossibile trovare una configurazione di login"}, + "{0} (file o directory inesistente)"}, + {"Configuration Error:\n\tNo such file or directory", + "Errore di configurazione:\n\tfile o directory inesistente"}, {"Configuration Error:\n\tInvalid control flag, flag", - "Errore di configurazione:\n\tflag di controllo non valido, {0}"}, + "Errore di configurazione:\n\tflag di controllo non valido, {0}"}, {"Configuration Error:\n\tCan not specify multiple entries for appName", - "Errore di configurazione:\n\timpossibile specificare pi\u00f9 valori per {0}"}, + "Errore di configurazione:\n\timpossibile specificare pi\u00f9 valori per {0}"}, {"Configuration Error:\n\texpected [expect], read [end of file]", - "Errore di configurazione:\n\tprevisto [{0}], letto [end of file]"}, + "Errore di configurazione:\n\tprevisto [{0}], letto [end of file]"}, {"Configuration Error:\n\tLine line: expected [expect], found [value]", - "Errore di configurazione:\n\triga {0}: previsto [{1}], trovato [{2}]"}, + "Errore di configurazione:\n\triga {0}: previsto [{1}], trovato [{2}]"}, {"Configuration Error:\n\tLine line: expected [expect]", - "Errore di configurazione:\n\triga {0}: previsto [{1}]"}, + "Errore di configurazione:\n\triga {0}: previsto [{1}]"}, {"Configuration Error:\n\tLine line: system property [value] expanded to empty value", - "Errore di configurazione:\n\triga {0}: propriet\u00e0 di sistema [{1}] espansa a valore vuoto"}, + "Errore di configurazione:\n\triga {0}: propriet\u00e0 di sistema [{1}] espansa a valore vuoto"}, // com.sun.security.auth.module.JndiLoginModule {"username: ","Nome utente: "}, @@ -88,13 +87,13 @@ public class AuthResources_it extends java.util.ListResourceBundle { {"Keystore alias: ","Alias keystore: "}, {"Keystore password: ","Password keystore: "}, {"Private key password (optional): ", - "Password chiave privata (opzionale): "}, + "Password chiave privata (opzionale): "}, // com.sun.security.auth.module.Krb5LoginModule {"Kerberos username [[defUsername]]: ", "Nome utente Kerberos [{0}]: "}, {"Kerberos password for [username]: ", - "Password Kerberos per {0}: "}, + "Password Kerberos per {0}: "}, /*** EVERYTHING BELOW IS DEPRECATED ***/ @@ -102,22 +101,22 @@ public class AuthResources_it extends java.util.ListResourceBundle { {": error parsing ", ": errore nell'analisi "}, {": ", ": "}, {": error adding Permission ", ": errore nell'aggiunta del permesso "}, - {" ", " "}, + {" ", " "}, {": error adding Entry ", ": errore nell'aggiunta dell'entry "}, {"(", "("}, {")", ")"}, {"attempt to add a Permission to a readonly PermissionCollection", - "tentativo di aggiungere un permesso a una PermissionCollection di sola lettura"}, + "tentativo di aggiungere un permesso a una PermissionCollection di sola lettura"}, // com.sun.security.auth.PolicyParser {"expected keystore type", "tipo di keystore previsto"}, {"can not specify Principal with a ", - "impossibile specificare Principal con una "}, + "impossibile specificare Principal con una "}, {"wildcard class without a wildcard name", - "classe wildcard senza un nome wildcard"}, + "classe wildcard senza un nome wildcard"}, {"expected codeBase or SignedBy", "previsto codeBase o SignedBy"}, {"only Principal-based grant entries permitted", - "sono permessi solo valori garantiti basati su Principal"}, + "sono permessi solo valori garantiti basati su Principal"}, {"expected permission entry", "prevista entry di permesso"}, {"number ", "numero "}, {"expected ", "previsto "}, @@ -130,11 +129,11 @@ public class AuthResources_it extends java.util.ListResourceBundle { // SolarisPrincipals {"SolarisNumericGroupPrincipal [Primary Group]: ", - "SolarisNumericGroupPrincipal [gruppo primario]: "}, + "SolarisNumericGroupPrincipal [gruppo primario]: "}, {"SolarisNumericGroupPrincipal [Supplementary Group]: ", - "SolarisNumericGroupPrincipal [gruppo supplementare]: "}, + "SolarisNumericGroupPrincipal [gruppo supplementare]: "}, {"SolarisNumericUserPrincipal: ", - "SolarisNumericUserPrincipal: "}, + "SolarisNumericUserPrincipal: "}, {"SolarisPrincipal: ", "SolarisPrincipal: "}, {"provided null name", "il nome fornito \u00e8 nullo"} diff --git a/jdk/src/share/classes/sun/security/util/AuthResources_ja.java b/jdk/src/share/classes/sun/security/util/AuthResources_ja.java index 1aee9bb2434..7e2a9aee819 100644 --- a/jdk/src/share/classes/sun/security/util/AuthResources_ja.java +++ b/jdk/src/share/classes/sun/security/util/AuthResources_ja.java @@ -1,5 +1,5 @@ /* - * Copyright 2001-2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2000-2006 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 @@ -63,8 +63,8 @@ public class AuthResources_ja extends java.util.ListResourceBundle { {"Unable to properly expand config", "{0} \u3092\u6b63\u3057\u304f\u5c55\u958b\u3067\u304d\u307e\u305b\u3093\u3002"}, {"extra_config (No such file or directory)", "{0} (\u6307\u5b9a\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u307e\u305f\u306f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306f\u5b58\u5728\u3057\u307e\u305b\u3093)"}, - {"Unable to locate a login configuration", - "\u30ed\u30b0\u30a4\u30f3\u69cb\u6210\u3092\u691c\u51fa\u3067\u304d\u307e\u305b\u3093\u3002"}, + {"Configuration Error:\n\tNo such file or directory", + "\u69cb\u6210\u30a8\u30e9\u30fc:\n\t\u6307\u5b9a\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u307e\u305f\u306f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306f\u5b58\u5728\u3057\u307e\u305b\u3093\u3002"}, {"Configuration Error:\n\tInvalid control flag, flag", "\u69cb\u6210\u30a8\u30e9\u30fc:\n\t\u7121\u52b9\u306a\u5236\u5fa1\u30d5\u30e9\u30b0: {0}"}, {"Configuration Error:\n\tCan not specify multiple entries for appName", @@ -76,7 +76,7 @@ public class AuthResources_ja extends java.util.ListResourceBundle { {"Configuration Error:\n\tLine line: expected [expect]", "\u69cb\u6210\u30a8\u30e9\u30fc:\n\t\u884c {0}: [{1}] \u304c\u8981\u6c42\u3055\u308c\u307e\u3057\u305f\u3002"}, {"Configuration Error:\n\tLine line: system property [value] expanded to empty value", - "\u69cb\u6210\u30a8\u30e9\u30fc:\n\t\u884c {0}: \u30b7\u30b9\u30c6\u30e0\u30d7\u30ed\u30d1\u30c6\u30a3 [{1}] \u304c\u7a7a\u306e\u5024\u306b\u5c55\u958b\u3055\u308c\u307e\u3057\u305f\u3002"}, + "\u69cb\u6210\u30a8\u30e9\u30fc:\n\t\u884c {0}: \u30b7\u30b9\u30c6\u30e0\u30d7\u30ed\u30d1\u30c6\u30a3\u30fc [{1}] \u304c\u7a7a\u306e\u5024\u306b\u5c55\u958b\u3055\u308c\u307e\u3057\u305f\u3002"}, // com.sun.security.auth.module.JndiLoginModule {"username: ","\u30e6\u30fc\u30b6\u540d: "}, diff --git a/jdk/src/share/classes/sun/security/util/AuthResources_ko.java b/jdk/src/share/classes/sun/security/util/AuthResources_ko.java index bcd1ab2b0d5..b72f40c9826 100644 --- a/jdk/src/share/classes/sun/security/util/AuthResources_ko.java +++ b/jdk/src/share/classes/sun/security/util/AuthResources_ko.java @@ -1,5 +1,5 @@ /* - * Copyright 2001-2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2000-2006 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 @@ -63,8 +63,8 @@ public class AuthResources_ko extends java.util.ListResourceBundle { {"Unable to properly expand config", "\uc801\uc808\ud788 \ud655\uc7a5\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. {0}"}, {"extra_config (No such file or directory)", "{0} (\ud574\ub2f9 \ud30c\uc77c\uc774\ub098 \ub514\ub809\ud1a0\ub9ac\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.)"}, - {"Unable to locate a login configuration", - "\ub85c\uadf8\uc778 \uad6c\uc131\uc744 \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4."}, + {"Configuration Error:\n\tNo such file or directory", + "\uad6c\uc131 \uc624\ub958:\n\t\ud574\ub2f9 \ud30c\uc77c\uc774\ub098 \ub514\ub809\ud1a0\ub9ac\uac00 \uc5c6\uc2b5\ub2c8\ub2e4."}, {"Configuration Error:\n\tInvalid control flag, flag", "\uad6c\uc131 \uc624\ub958:\n\t\uc798\ubabb\ub41c \ucee8\ud2b8\ub864 \ud50c\ub798\uadf8, {0}"}, {"Configuration Error:\n\tCan not specify multiple entries for appName", diff --git a/jdk/src/share/classes/sun/security/util/AuthResources_sv.java b/jdk/src/share/classes/sun/security/util/AuthResources_sv.java index e81795c5592..e72699ec32b 100644 --- a/jdk/src/share/classes/sun/security/util/AuthResources_sv.java +++ b/jdk/src/share/classes/sun/security/util/AuthResources_sv.java @@ -1,5 +1,5 @@ /* - * Copyright 2001-2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2000-2006 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 @@ -53,47 +53,48 @@ public class AuthResources_sv extends java.util.ListResourceBundle { // UnixPrincipals {"UnixNumericGroupPrincipal [Primary Group]: name", - "UnixNumericGroupPrincipal [prim\u00e4r grupp]: {0}"}, + "UnixNumericGroupPrincipal [prim\u00e4r grupp]: {0}"}, {"UnixNumericGroupPrincipal [Supplementary Group]: name", - "UnixNumericGroupPrincipal [till\u00e4ggsgrupp]: {0}"}, + "UnixNumericGroupPrincipal [till\u00e4ggsgrupp]: {0}"}, {"UnixNumericUserPrincipal: name", "UnixNumericUserPrincipal: {0}"}, {"UnixPrincipal: name", "UnixPrincipal: {0}"}, // com.sun.security.auth.login.ConfigFile {"Unable to properly expand config", "Det g\u00e5r inte att utvidga korrekt {0}"}, {"extra_config (No such file or directory)", - "{0} (Det finns ingen s\u00e5dan fil eller katalog.)"}, - {"Unable to locate a login configuration", - "Det g\u00e5r inte att hitta n\u00e5gon inloggningskonfiguration"}, + "{0} (Det finns ingen s\u00e5dan fil eller katalog.)"}, + {"Configuration Error:\n\tNo such file or directory", + "Konfigurationsfel:\n\tDet finns ingen s\u00e5dan fil eller katalog."}, {"Configuration Error:\n\tInvalid control flag, flag", - "Konfigurationsfel:\n\tOgiltig kontrollflagga, {0}"}, + "Konfigurationsfel:\n\tOgiltig kontrollflagga, {0}"}, {"Configuration Error:\n\tCan not specify multiple entries for appName", - "Konfigurationsfel:\n\tDet g\u00e5r inte att ange flera poster f\u00f6r {0}"}, + "Konfigurationsfel:\n\tDet g\u00e5r inte att ange flera poster f\u00f6r {0}"}, {"Configuration Error:\n\texpected [expect], read [end of file]", - "Konfigurationsfel:\n\tf\u00f6rv\u00e4ntade [{0}], l\u00e4ste [end of file]"}, + "Konfigurationsfel:\n\tf\u00f6rv\u00e4ntade [{0}], l\u00e4ste [end of file]"}, {"Configuration Error:\n\tLine line: expected [expect], found [value]", - "Konfigurationsfel:\n\tLine {0}: f\u00f6rv\u00e4ntade [{1}], hittade [{2}]"}, + "Konfigurationsfel:\n\tLine {0}: f\u00f6rv\u00e4ntade [{1}], hittade [{2}]"}, {"Configuration Error:\n\tLine line: expected [expect]", - "Konfigurationsfel:\n\tLine {0}: f\u00f6rv\u00e4ntade [{1}]"}, + "Konfigurationsfel:\n\tLine {0}: f\u00f6rv\u00e4ntade [{1}]"}, {"Configuration Error:\n\tLine line: system property [value] expanded to empty value", - "Konfigurationsfel:\n\tLine {0}: systemegenskapen [{1}] utvidgad till tomt v\u00e4rde"}, + "Konfigurationsfel:\n\tLine {0}: systemegenskapen [{1}] utvidgad till tomt v\u00e4rde"}, // com.sun.security.auth.module.JndiLoginModule {"username: ","anv\u00e4ndarnamn: "}, {"password: ","l\u00f6senord: "}, // com.sun.security.auth.module.KeyStoreLoginModule - {"Please enter keystore information","Ange keystore-information"}, + {"Please enter keystore information", + "Ange keystore-information"}, {"Keystore alias: ","Keystore-alias: "}, {"Keystore password: ","Keystore-l\u00f6senord: "}, {"Private key password (optional): ", - "L\u00f6senord f\u00f6r personlig nyckel (valfritt): "}, + "L\u00f6senord f\u00f6r personlig nyckel (valfritt): "}, // com.sun.security.auth.module.Krb5LoginModule {"Kerberos username [[defUsername]]: ", - "Kerberos-anv\u00e4ndarnamn [{0}]: "}, + "Kerberos-anv\u00e4ndarnamn [{0}]: "}, {"Kerberos password for [username]: ", - "Kerberos-l\u00f6senord f\u00f6r {0}: "}, + "Kerberos-l\u00f6senord f\u00f6r {0}: "}, /*** EVERYTHING BELOW IS DEPRECATED ***/ @@ -106,17 +107,17 @@ public class AuthResources_sv extends java.util.ListResourceBundle { {"(", "("}, {")", ")"}, {"attempt to add a Permission to a readonly PermissionCollection", - "f\u00f6rs\u00f6k att l\u00e4gga till beh\u00f6righet till skrivskyddad PermissionCollection"}, + "f\u00f6rs\u00f6k att l\u00e4gga till beh\u00f6righet till skrivskyddad PermissionCollection"}, // com.sun.security.auth.PolicyParser {"expected keystore type", "f\u00f6rv\u00e4ntad keystore-typ"}, {"can not specify Principal with a ", - "det g\u00e5r inte att specificera n\u00e5gon principal med "}, + "det g\u00e5r inte att specificera n\u00e5gon principal med "}, {"wildcard class without a wildcard name", - "jokertecken f\u00f6r klass men inte f\u00f6r namn"}, + "jokertecken f\u00f6r klass men inte f\u00f6r namn"}, {"expected codeBase or SignedBy", "f\u00f6rv\u00e4ntade codeBase eller SignedBy"}, {"only Principal-based grant entries permitted", - "enbart Principal-baserade poster till\u00e5tna"}, + "enbart Principal-baserade poster till\u00e5tna"}, {"expected permission entry", "f\u00f6rv\u00e4ntade beh\u00f6righetspost"}, {"number ", "antal "}, {"expected ", "f\u00f6rv\u00e4ntade "}, @@ -129,11 +130,11 @@ public class AuthResources_sv extends java.util.ListResourceBundle { // SolarisPrincipals {"SolarisNumericGroupPrincipal [Primary Group]: ", - "SolarisNumericGroupPrincipal [prim\u00e4r grupp]: "}, + "SolarisNumericGroupPrincipal [prim\u00e4r grupp]: "}, {"SolarisNumericGroupPrincipal [Supplementary Group]: ", - "SolarisNumericGroupPrincipal [till\u00e4ggsgrupp]: "}, + "SolarisNumericGroupPrincipal [till\u00e4ggsgrupp]: "}, {"SolarisNumericUserPrincipal: ", - "SolarisNumericUserPrincipal: "}, + "SolarisNumericUserPrincipal: "}, {"SolarisPrincipal: ", "SolarisPrincipal: "}, {"provided null name", "gav null-namn"} diff --git a/jdk/src/share/classes/sun/security/util/AuthResources_zh_CN.java b/jdk/src/share/classes/sun/security/util/AuthResources_zh_CN.java index efb4cba7968..f9731a8692a 100644 --- a/jdk/src/share/classes/sun/security/util/AuthResources_zh_CN.java +++ b/jdk/src/share/classes/sun/security/util/AuthResources_zh_CN.java @@ -1,5 +1,5 @@ /* - * Copyright 2001-2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2000-2006 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 @@ -63,8 +63,8 @@ public class AuthResources_zh_CN extends java.util.ListResourceBundle { {"Unable to properly expand config", "\u65e0\u6cd5\u5b8c\u5168\u6269\u5145 {0}"}, {"extra_config (No such file or directory)", "{0} \uff08\u6ca1\u6709\u6b64\u6587\u4ef6\u6216\u76ee\u5f55\uff09"}, - {"Unable to locate a login configuration", - "\u65e0\u6cd5\u5b9a\u4f4d\u767b\u5f55\u914d\u7f6e"}, + {"Configuration Error:\n\tNo such file or directory", + "\u914d\u7f6e\u9519\u8bef\uff1a\n\t\u6ca1\u6709\u6b64\u6587\u4ef6\u6216\u76ee\u5f55"}, {"Configuration Error:\n\tInvalid control flag, flag", "\u914d\u7f6e\u9519\u8bef\uff1a\n\t\u65e0\u6548\u7684\u63a7\u5236\u6807\u8bb0\uff0c {0}"}, {"Configuration Error:\n\tCan not specify multiple entries for appName", diff --git a/jdk/src/share/classes/sun/security/util/AuthResources_zh_TW.java b/jdk/src/share/classes/sun/security/util/AuthResources_zh_TW.java index a85ffd038df..150b456436a 100644 --- a/jdk/src/share/classes/sun/security/util/AuthResources_zh_TW.java +++ b/jdk/src/share/classes/sun/security/util/AuthResources_zh_TW.java @@ -1,5 +1,5 @@ /* - * Copyright 2001-2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2000-2006 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 @@ -63,8 +63,8 @@ public class AuthResources_zh_TW extends java.util.ListResourceBundle { {"Unable to properly expand config", "\u7121\u6cd5\u5b8c\u5168\u64f4\u5145 {0}"}, {"extra_config (No such file or directory)", "{0} \uff08\u6c92\u6709\u6b64\u6a94\u6848\u6216\u76ee\u9304\uff09"}, - {"Unable to locate a login configuration", - "\u7121\u6cd5\u5b9a\u4f4d\u767b\u5165\u914d\u7f6e"}, + {"Configuration Error:\n\tNo such file or directory", + "\u914d\u7f6e\u932f\u8aa4\uff1a\n\t\u6c92\u6709\u9019\u985e\u7684\u6a94\u6848\u6216\u76ee\u9304"}, {"Configuration Error:\n\tInvalid control flag, flag", "\u914d\u7f6e\u932f\u8aa4\uff1a\n\t\u7121\u6548\u7684\u63a7\u5236\u65d7\u865f\uff0c {0}"}, {"Configuration Error:\n\tCan not specify multiple entries for appName", diff --git a/jdk/src/share/classes/sun/tools/jconsole/resources/JConsoleResources_ja.java b/jdk/src/share/classes/sun/tools/jconsole/resources/JConsoleResources_ja.java index 12cdd003ef4..6954a1e9290 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/resources/JConsoleResources_ja.java +++ b/jdk/src/share/classes/sun/tools/jconsole/resources/JConsoleResources_ja.java @@ -114,7 +114,6 @@ public class JConsoleResources_ja extends JConsoleResources { {"ClassTab.infoLabelFormat", "\u30ed\u30fc\u30c9: {0} \u30a2\u30f3\u30ed\u30fc\u30c9: {1} \u7dcf\u6570: {2}"}, {"ClassTab.loadedClassesPlotter.accessibleName", "\u30ed\u30fc\u30c9\u3055\u308c\u305f\u30af\u30e9\u30b9\u306e\u56f3\u3002"}, {"Classes","\u30af\u30e9\u30b9"}, - {"Clear","\u6d88\u53bb"}, {"Close","\u9589\u3058\u308b"}, {"Column.Name", "\u540d\u524d"}, {"Column.PID", "PID"}, @@ -122,7 +121,6 @@ public class JConsoleResources_ja extends JConsoleResources { {"Committed virtual memory","\u78ba\u5b9a\u4eee\u60f3\u30e1\u30e2\u30ea"}, {"Committed", "\u78ba\u5b9a"}, {"Compiler","\u30b3\u30f3\u30d1\u30a4\u30e9"}, - {"Composite Navigation", "\u8907\u5408\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3"}, {"CompositeData","CompositeData"}, {"Config","\u69cb\u6210"}, {"Connect", "\u63a5\u7d9a(C)"}, @@ -158,12 +156,9 @@ public class JConsoleResources_ja extends JConsoleResources { {"Detect Deadlock.toolTip", "\u30c7\u30c3\u30c9\u30ed\u30c3\u30af\u3057\u305f\u30b9\u30ec\u30c3\u30c9\u3092\u691c\u51fa\u3059\u308b"}, {"Dimension is not supported:","\u5927\u304d\u3055\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093:"}, {"Discard chart", "\u56f3\u3092\u7834\u68c4\u3059\u308b"}, - {"DurationDaysHoursMinutes","{0,choice,1#{0,number,integer} \u65e5 |1.0<{0,number,integer} \u65e5 }" + - "{1,choice,0<{1,number,integer} \u6642\u9593 |1#{1,number,integer} \u6642\u9593 |1<{1,number,integer} \u6642\u9593 }" + - "{2,choice,0<{2,number,integer} \u5206 |1#{2,number,integer} \u5206 |1.0<{2,number,integer} \u5206}"}, + {"DurationDaysHoursMinutes","{0,choice,1#{0,number,integer} \u65e5 |1.0<{0,number,integer} \u65e5 }{1,choice,0<{1,number,integer} \u6642\u9593 |1#{1,number,integer} \u6642\u9593 |1<{1,number,integer} \u6642\u9593 }{2,choice,0<{2,number,integer} \u5206 |1#{2,number,integer} \u5206 |1.0<{2,number,integer} \u5206}"}, - {"DurationHoursMinutes","{0,choice,1#{0,number,integer} \u6642\u9593 |1<{0,number,integer} \u6642\u9593 }" + - "{1,choice,0<{1,number,integer} \u5206 |1#{1,number,integer} \u5206 |1.0<{1,number,integer} \u5206}"}, + {"DurationHoursMinutes","{0,choice,1#{0,number,integer} \u6642\u9593 |1<{0,number,integer} \u6642\u9593 }{1,choice,0<{1,number,integer} \u5206 |1#{1,number,integer} \u5206 |1.0<{1,number,integer} \u5206}"}, {"DurationMinutes","{0,choice,1#{0,number,integer} \u5206 |1.0<{0,number,integer} \u5206}"}, {"DurationSeconds","{0} \u79d2"}, @@ -201,8 +196,6 @@ public class JConsoleResources_ja extends JConsoleResources { {"Help.AboutDialog.title", "JConsole: \u88fd\u54c1\u60c5\u5831"}, {"Help.AboutDialog.userGuideLink", "JConsole \u30e6\u30fc\u30b6\u30fc\u30ac\u30a4\u30c9:
{0}"}, {"Help.AboutDialog.userGuideLink.mnemonic", 'U'}, - // Note: The java.sun.com URL should be used for RC, or as soon as the page is available. - //{"Help.AboutDialog.UsingJMX.url", "http://java.sun.com/javase/6/docs/technotes/guides/management/jconsole.html"}, {"Help.AboutDialog.userGuideLink.url", "http://java.sun.com/javase/6/docs/technotes/guides/management/MonitoringGuide/toc.html"}, {"HelpMenu.About.title", "JConsole \u306b\u3064\u3044\u3066(A)"}, {"HelpMenu.About.title.mnemonic", 'A'}, @@ -241,9 +234,22 @@ public class JConsoleResources_ja extends JConsoleResources { {"MBeanNotificationInfo","MBeanNotificationInfo"}, {"MBeanOperationInfo","MBeanOperationInfo"}, {"MBeans","MBean"}, + {"MBeansTab.clearNotificationsButton", "\u6d88\u53bb(C)"}, + {"MBeansTab.clearNotificationsButton.mnemonic", 'C'}, + {"MBeansTab.clearNotificationsButton.toolTip", "\u901a\u77e5\u3092\u6d88\u53bb\u3059\u308b"}, + {"MBeansTab.compositeNavigationMultiple", "\u8907\u5408\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3 {0}/{1}"}, + {"MBeansTab.compositeNavigationSingle", "\u8907\u5408\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3"}, {"MBeansTab.refreshAttributesButton", "\u66f4\u65b0(R)"}, {"MBeansTab.refreshAttributesButton.mnemonic", 'R'}, {"MBeansTab.refreshAttributesButton.toolTip", "\u5c5e\u6027\u3092\u66f4\u65b0\u3059\u308b"}, + {"MBeansTab.subscribeNotificationsButton", "\u767b\u9332(S)"}, + {"MBeansTab.subscribeNotificationsButton.mnemonic", 'S'}, + {"MBeansTab.subscribeNotificationsButton.toolTip", "\u901a\u77e5\u306e\u5f85\u6a5f\u3092\u958b\u59cb"}, + {"MBeansTab.tabularNavigationMultiple", "\u8868\u5f62\u5f0f\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3 {0}/{1}"}, + {"MBeansTab.tabularNavigationSingle", "\u8868\u5f62\u5f0f\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3"}, + {"MBeansTab.unsubscribeNotificationsButton", "\u767b\u9332\u89e3\u9664(U)"}, + {"MBeansTab.unsubscribeNotificationsButton.mnemonic", 'U'}, + {"MBeansTab.unsubscribeNotificationsButton.toolTip", "\u901a\u77e5\u306e\u5f85\u6a5f\u3092\u505c\u6b62"}, {"Manage Hotspot MBeans in: ", "Hotspot MBean \u3092\u7ba1\u7406: "}, {"Max","\u6700\u5927"}, {"Maximum heap size","\u6700\u5927\u30d2\u30fc\u30d7\u30b5\u30a4\u30ba"}, @@ -343,7 +349,6 @@ public class JConsoleResources_ja extends JConsoleResources { {"Source","\u30bd\u30fc\u30b9"}, {"Stack trace", cr + "\u30b9\u30bf\u30c3\u30af\u30c8\u30ec\u30fc\u30b9: " + cr}, - {"Subscribe","\u767b\u9332"}, {"Success:","\u6210\u529f:"}, // Note: SummaryTab.headerDateTimeFormat can be one the following: // 1. A combination of two styles for date and time, using the @@ -357,7 +362,6 @@ public class JConsoleResources_ja extends JConsoleResources { {"SummaryTab.pendingFinalization.value", "{0} \u30aa\u30d6\u30b8\u30a7\u30af\u30c8"}, {"SummaryTab.tabName", "VM \u306e\u6982\u8981"}, {"SummaryTab.vmVersion","{0} \u30d0\u30fc\u30b8\u30e7\u30f3 {1}"}, - {"Tabular Navigation","\u8868\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3"}, {"TabularData are not supported", "TabularData \u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093"}, {"Threads","\u30b9\u30ec\u30c3\u30c9"}, {"ThreadTab.infoLabelFormat", "\u30e9\u30a4\u30d6: {0} \u30d4\u30fc\u30af: {1} \u7dcf\u6570: {2}"}, @@ -381,7 +385,6 @@ public class JConsoleResources_ja extends JConsoleResources { {"Unavailable","\u4f7f\u7528\u4e0d\u53ef\u80fd"}, {"UNKNOWN","UNKNOWN"}, {"Unknown Host","\u672a\u77e5\u306e\u30db\u30b9\u30c8: {0}"}, - {"Unsubscribe","\u767b\u9332\u89e3\u9664"}, {"Unregister", "\u767b\u9332\u89e3\u9664"}, {"Uptime","\u30a2\u30c3\u30d7\u30bf\u30a4\u30e0"}, {"Uptime: ","\u30a2\u30c3\u30d7\u30bf\u30a4\u30e0: "}, @@ -409,15 +412,11 @@ public class JConsoleResources_ja extends JConsoleResources { {"You cannot drop a class here", "\u30af\u30e9\u30b9\u3092\u3053\u3053\u306b\u30c9\u30ed\u30c3\u30d7\u3067\u304d\u307e\u305b\u3093"}, {"collapse", "\u6298\u308a\u305f\u305f\u307f"}, {"connectionFailed1","\u63a5\u7d9a\u306b\u5931\u6557\u3057\u307e\u3057\u305f: \u518d\u8a66\u884c\u3057\u307e\u3059\u304b?"}, - {"connectionFailed2","{0} \u3078\u306e\u63a5\u7d9a\u304c\u6210\u529f\u3057\u307e\u305b\u3093\u3067\u3057\u305f\u3002
" + - "\u3082\u3046\u4e00\u5ea6\u8a66\u3057\u307e\u3059\u304b?"}, + {"connectionFailed2","{0} \u3078\u306e\u63a5\u7d9a\u304c\u6210\u529f\u3057\u307e\u305b\u3093\u3067\u3057\u305f\u3002
\u3082\u3046\u4e00\u5ea6\u8a66\u3057\u307e\u3059\u304b?"}, {"connectionLost1","\u63a5\u7d9a\u304c\u5931\u308f\u308c\u307e\u3057\u305f: \u518d\u63a5\u7d9a\u3057\u307e\u3059\u304b?"}, - {"connectionLost2","\u30ea\u30e2\u30fc\u30c8\u30d7\u30ed\u30bb\u30b9\u304c\u7d42\u4e86\u3057\u305f\u305f\u3081\u3001" + - "{0} \u3078\u306e\u63a5\u7d9a\u304c\u5931\u308f\u308c\u307e\u3057\u305f\u3002
" + - "\u518d\u63a5\u7d9a\u3057\u307e\u3059\u304b?"}, + {"connectionLost2","\u30ea\u30e2\u30fc\u30c8\u30d7\u30ed\u30bb\u30b9\u304c\u7d42\u4e86\u3057\u305f\u305f\u3081\u3001{0} \u3078\u306e\u63a5\u7d9a\u304c\u5931\u308f\u308c\u307e\u3057\u305f\u3002
\u518d\u63a5\u7d9a\u3057\u307e\u3059\u304b?"}, {"connectingTo1","{0} \u306b\u63a5\u7d9a\u3057\u3066\u3044\u307e\u3059"}, - {"connectingTo2","\u73fe\u5728 {0} \u306b\u63a5\u7d9a\u3057\u3066\u3044\u307e\u3059\u3002
" + - "\u3053\u308c\u306b\u306f\u5c11\u3057\u6642\u9593\u304c\u304b\u304b\u308a\u307e\u3059\u3002"}, + {"connectingTo2","\u73fe\u5728 {0} \u306b\u63a5\u7d9a\u3057\u3066\u3044\u307e\u3059\u3002
\u3053\u308c\u306b\u306f\u5c11\u3057\u6642\u9593\u304c\u304b\u304b\u308a\u307e\u3059\u3002"}, {"deadlockAllTab","\u3059\u3079\u3066"}, {"deadlockTab","\u30c7\u30c3\u30c9\u30ed\u30c3\u30af"}, {"deadlockTabN","\u30c7\u30c3\u30c9\u30ed\u30c3\u30af {0}"}, diff --git a/jdk/src/share/classes/sun/tools/jconsole/resources/JConsoleResources_zh_CN.java b/jdk/src/share/classes/sun/tools/jconsole/resources/JConsoleResources_zh_CN.java index a4e1f7e0c1b..f5a9bf48610 100644 --- a/jdk/src/share/classes/sun/tools/jconsole/resources/JConsoleResources_zh_CN.java +++ b/jdk/src/share/classes/sun/tools/jconsole/resources/JConsoleResources_zh_CN.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2004-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 @@ -114,7 +114,6 @@ public class JConsoleResources_zh_CN extends JConsoleResources { {"ClassTab.infoLabelFormat", "\u5df2\u52a0\u8f7d: {0} \u672a\u52a0\u8f7d: {1} \u603b\u8ba1: {2}"}, {"ClassTab.loadedClassesPlotter.accessibleName", "\u5df2\u88c5\u5165\u7c7b\u7684\u56fe\u8868\u3002"}, {"Classes","\u7c7b"}, - {"Clear","\u6e05\u9664"}, {"Close","\u5173\u95ed"}, {"Column.Name", "\u540d\u79f0"}, {"Column.PID", "PID"}, @@ -122,7 +121,6 @@ public class JConsoleResources_zh_CN extends JConsoleResources { {"Committed virtual memory","\u5206\u914d\u7684\u865a\u62df\u5185\u5b58"}, {"Committed", "\u5206\u914d"}, {"Compiler","\u7f16\u8bd1\u5668"}, - {"Composite Navigation", "\u590d\u5408\u6d4f\u89c8"}, {"CompositeData","\u590d\u5408\u6570\u636e"}, {"Config","\u914d\u7f6e"}, {"Connect", "\u8fde\u63a5"}, @@ -158,12 +156,9 @@ public class JConsoleResources_zh_CN extends JConsoleResources { {"Detect Deadlock.toolTip", "\u68c0\u6d4b\u5230\u6b7b\u9501\u7684\u7ebf\u7a0b"}, {"Dimension is not supported:","\u4e0d\u652f\u6301\u7ef4\uff1a"}, {"Discard chart", "\u653e\u5f03\u56fe\u8868"}, - {"DurationDaysHoursMinutes","{0,choice,1#{0,number,integer} day |1.0<{0,number,integer} days }" + - "{1,choice,0<{1,number,integer} hours |1#{1,number,integer} hour |1<{1,number,integer} hours }" + - "{2,choice,0<{2,number,integer} minutes|1#{2,number,integer} minute|1.0<{2,number,integer} minutes}"}, + {"DurationDaysHoursMinutes","{0,choice,1#{0,number,integer} day |1.0<{0,number,integer} days }{1,choice,0<{1,number,integer} hours |1#{1,number,integer} hour |1<{1,number,integer} hours }{2,choice,0<{2,number,integer} minutes|1#{2,number,integer} minute|1.0<{2,number,integer} minutes}"}, - {"DurationHoursMinutes","{0,choice,1#{0,number,integer} hour |1<{0,number,integer} hours }" + - "{1,choice,0<{1,number,integer} minutes|1#{1,number,integer} minute|1.0<{1,number,integer} minutes}"}, + {"DurationHoursMinutes","{0,choice,1#{0,number,integer} hour |1<{0,number,integer} hours }{1,choice,0<{1,number,integer} minutes|1#{1,number,integer} minute|1.0<{1,number,integer} minutes}"}, {"DurationMinutes","{0,choice,1#{0,number,integer} minute|1.0<{0,number,integer} minutes}"}, {"DurationSeconds","{0} \u79d2"}, @@ -201,8 +196,6 @@ public class JConsoleResources_zh_CN extends JConsoleResources { {"Help.AboutDialog.title", "JConsole\uff1a\u5173\u4e8e"}, {"Help.AboutDialog.userGuideLink", "JConsole \u7528\u6237\u6307\u5357:
{0}"}, {"Help.AboutDialog.userGuideLink.mnemonic", 'U'}, - // Note: The java.sun.com URL should be used for RC, or as soon as the page is available. - //{"Help.AboutDialog.UsingJMX.url", "http://java.sun.com/javase/6/docs/technotes/guides/management/jconsole.html"}, {"Help.AboutDialog.userGuideLink.url", "http://java.sun.com/javase/6/docs/technotes/guides/management/MonitoringGuide/toc.html"}, {"HelpMenu.About.title", "\u5173\u4e8e JConsole"}, {"HelpMenu.About.title.mnemonic", 'A'}, @@ -241,9 +234,22 @@ public class JConsoleResources_zh_CN extends JConsoleResources { {"MBeanNotificationInfo","MBeanNotificationInfo"}, {"MBeanOperationInfo","MBeanOperationInfo"}, {"MBeans","MBean"}, - {"MBeansTab.refreshAttributesButton", "\u5237\u65b0"}, + {"MBeansTab.clearNotificationsButton", "\u6e05\u9664(C)"}, + {"MBeansTab.clearNotificationsButton.mnemonic", 'C'}, + {"MBeansTab.clearNotificationsButton.toolTip", "\u6e05\u9664\u901a\u77e5"}, + {"MBeansTab.compositeNavigationMultiple", "\u590d\u5408\u5bfc\u822a {0}/{1}"}, + {"MBeansTab.compositeNavigationSingle", "\u590d\u5408\u5bfc\u822a"}, + {"MBeansTab.refreshAttributesButton", "\u5237\u65b0(R)"}, {"MBeansTab.refreshAttributesButton.mnemonic", 'R'}, {"MBeansTab.refreshAttributesButton.toolTip", "\u5237\u65b0\u5c5e\u6027"}, + {"MBeansTab.subscribeNotificationsButton", "\u8ba2\u9605(S)"}, + {"MBeansTab.subscribeNotificationsButton.mnemonic", 'S'}, + {"MBeansTab.subscribeNotificationsButton.toolTip", "\u5f00\u59cb\u4fa6\u542c\u901a\u77e5"}, + {"MBeansTab.tabularNavigationMultiple", "\u8868\u683c\u5bfc\u822a {0}/{1}"}, + {"MBeansTab.tabularNavigationSingle", "\u8868\u683c\u5bfc\u822a"}, + {"MBeansTab.unsubscribeNotificationsButton", "\u53d6\u6d88\u8ba2\u9605(U)"}, + {"MBeansTab.unsubscribeNotificationsButton.mnemonic", 'U'}, + {"MBeansTab.unsubscribeNotificationsButton.toolTip", "\u505c\u6b62\u4fa6\u542c\u901a\u77e5"}, {"Manage Hotspot MBeans in: ", "\u7ba1\u7406 Hotspot MBean \u4e8e\uff1a "}, {"Max","\u6700\u5927\u503c"}, {"Maximum heap size","\u5806\u5927\u5c0f\u7684\u6700\u5927\u503c"}, @@ -262,7 +268,7 @@ public class JConsoleResources_zh_CN extends JConsoleResources { {"Minimize All.mnemonic", 'M'}, {"Minus Version", "\u8fd9\u662f {0} \u7248\u672c {1}"}, {"Monitor locked", -" - \u5df2\u9501\u5b9a {0}" + cr}, + " - \u5df2\u9501\u5b9a {0}" + cr}, {"Motif","\u4fee\u6539"}, {"Name Build and Mode","{0}\uff08\u5185\u90e8\u7248\u672c {1}\u3001{2}\uff09"}, {"Name and Build","{0}\uff08\u5185\u90e8\u7248\u672c {1}\uff09"}, @@ -343,7 +349,6 @@ public class JConsoleResources_zh_CN extends JConsoleResources { {"Source","\u6e90"}, {"Stack trace", cr + "\u5806\u6808\u8ffd\u8e2a\uff1a " + cr}, - {"Subscribe","\u8ba2\u9605"}, {"Success:","\u6210\u529f\uff1a"}, // Note: SummaryTab.headerDateTimeFormat can be one the following: // 1. A combination of two styles for date and time, using the @@ -357,7 +362,6 @@ public class JConsoleResources_zh_CN extends JConsoleResources { {"SummaryTab.pendingFinalization.value", "{0} \u4e2a\u5bf9\u8c61"}, {"SummaryTab.tabName", "VM \u6458\u8981"}, {"SummaryTab.vmVersion","{0} \u7248\u672c {1}"}, - {"Tabular Navigation","\u8868\u683c\u5f0f\u6d4f\u89c8"}, {"TabularData are not supported", "\u4e0d\u652f\u6301\u8868\u683c\u5f0f\u6570\u636e"}, {"Threads","\u7ebf\u7a0b"}, {"ThreadTab.infoLabelFormat", "\u6d3b\u52a8: {0} \u5cf0\u503c: {1} \u603b\u8ba1: {2}"}, @@ -381,7 +385,6 @@ public class JConsoleResources_zh_CN extends JConsoleResources { {"Unavailable","\u4e0d\u53ef\u7528"}, {"UNKNOWN","\u672a\u77e5"}, {"Unknown Host","\u672a\u77e5\u4e3b\u673a: {0}"}, - {"Unsubscribe","\u672a\u8ba2\u9605"}, {"Unregister", "\u672a\u6ce8\u518c"}, {"Uptime","\u6b63\u5e38\u8fd0\u884c\u65f6\u95f4"}, {"Uptime: ","\u6b63\u5e38\u8fd0\u884c\u65f6\u95f4\uff1a "}, @@ -409,15 +412,11 @@ public class JConsoleResources_zh_CN extends JConsoleResources { {"You cannot drop a class here", "\u60a8\u4e0d\u80fd\u5c06\u7c7b\u653e\u5728\u6b64\u5904"}, {"collapse", "\u6298\u53e0"}, {"connectionFailed1","\u8fde\u63a5\u5931\u8d25\uff1a\u662f\u5426\u91cd\u8bd5\uff1f"}, - {"connectionFailed2","\u4e0e {0} \u7684\u8fde\u63a5\u672a\u6210\u529f\u3002
" + -"\u662f\u5426\u8981\u91cd\u8bd5\uff1f"}, + {"connectionFailed2","\u4e0e {0} \u7684\u8fde\u63a5\u672a\u6210\u529f\u3002
\u662f\u5426\u8981\u91cd\u8bd5\uff1f"}, {"connectionLost1","\u8fde\u63a5\u65ad\u5f00\uff1a\u662f\u5426\u91cd\u65b0\u8fde\u63a5\uff1f"}, - {"connectionLost2","\u4e0e {0} \u7684\u8fde\u63a5\u5df2\u65ad\u5f00" + - "\u539f\u56e0\u662f\u5df2\u7ec8\u6b62\u8fdc\u7a0b\u8fdb\u7a0b\u3002
" + - "\u662f\u5426\u8981\u91cd\u65b0\u8fde\u63a5\uff1f"}, + {"connectionLost2","\u4e0e {0} \u7684\u8fde\u63a5\u5df2\u65ad\u5f00\u539f\u56e0\u662f\u5df2\u7ec8\u6b62\u8fdc\u7a0b\u8fdb\u7a0b\u3002
\u662f\u5426\u8981\u91cd\u65b0\u8fde\u63a5\uff1f"}, {"connectingTo1","\u6b63\u5728\u8fde\u63a5\u81f3 {0}"}, - {"connectingTo2","\u5f53\u524d\u6b63\u5728\u8fde\u63a5\u81f3 {0}\u3002
" + -"\u8fd9\u5c06\u4f1a\u82b1\u8d39\u4e00\u4e9b\u65f6\u95f4\u3002"}, + {"connectingTo2","\u5f53\u524d\u6b63\u5728\u8fde\u63a5\u81f3 {0}\u3002
\u8fd9\u5c06\u4f1a\u82b1\u8d39\u4e00\u4e9b\u65f6\u95f4\u3002"}, {"deadlockAllTab","\u5168\u90e8"}, {"deadlockTab","\u6b7b\u9501"}, {"deadlockTabN","\u6b7b\u9501 {0}"}, @@ -435,7 +434,7 @@ public class JConsoleResources_zh_CN extends JConsoleResources { " -version \u8f93\u51fa\u7a0b\u5e8f\u7248\u672c" + cr + cr + " connection = pid || host:port || JMX URL (service:jmx:://...)" + cr + - " pid \u76ee\u6807\u8fdb\u7a0b\u7684\u8fdb\u7a0b ID"+ cr + + " pid \u76ee\u6807\u8fdb\u7a0b\u7684\u8fdb\u7a0b ID" + cr + " host \u8fdc\u7a0b\u4e3b\u673a\u540d\u6216 IP \u5730\u5740" + cr + " port \u7528\u4e8e\u8fdc\u7a0b\u8fde\u63a5\u7684\u7aef\u53e3\u53f7" + cr + cr + From f78418e286d7ba73f7208bc462c1ec1750fcb2b7 Mon Sep 17 00:00:00 2001 From: Yong Jeffrey Huang Date: Sun, 11 Apr 2010 23:24:24 -0700 Subject: [PATCH 30/91] 6875904: Java 7 message synchronization 1 Reviewed-by: ogino, faryad --- .../sun/tools/apt/resources/apt_ja.properties | 150 +- .../tools/apt/resources/apt_zh_CN.properties | 152 +- .../html/resources/standard_ja.properties | 53 +- .../html/resources/standard_zh_CN.properties | 51 +- .../toolkit/resources/doclets_ja.properties | 60 +- .../resources/doclets_zh_CN.properties | 63 +- .../javac/resources/compiler_ja.properties | 1361 ++++++----------- .../javac/resources/compiler_zh_CN.properties | 1361 ++++++----------- .../tools/javac/resources/javac_ja.properties | 246 +-- .../javac/resources/javac_zh_CN.properties | 246 +-- 10 files changed, 1384 insertions(+), 2359 deletions(-) diff --git a/langtools/src/share/classes/com/sun/tools/apt/resources/apt_ja.properties b/langtools/src/share/classes/com/sun/tools/apt/resources/apt_ja.properties index bd1e5f30794..be7730d5946 100644 --- a/langtools/src/share/classes/com/sun/tools/apt/resources/apt_ja.properties +++ b/langtools/src/share/classes/com/sun/tools/apt/resources/apt_ja.properties @@ -23,60 +23,34 @@ # have any questions. # -apt.msg.usage.header=\ -\u4f7f\u7528\u6cd5: {0} <\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb>\n\ -\u6b21\u306e apt \u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u3042\u308a\u307e\u3059: +apt.msg.usage.header=\u4f7f\u7528\u6cd5: {0} <\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb>\n\u6b21\u306e apt \u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u3042\u308a\u307e\u3059: -apt.msg.usage.footer=\ -javac \u30aa\u30d7\u30b7\u30e7\u30f3\u306b\u3064\u3044\u3066\u306f\u3001javac -help \u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +apt.msg.usage.footer=javac \u30aa\u30d7\u30b7\u30e7\u30f3\u306b\u3064\u3044\u3066\u306f\u3001javac -help \u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -apt.msg.usage.nonstandard.footer=\ -\u3053\u308c\u3089\u306f\u975e\u6a19\u6e96\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u3042\u308a\u4e88\u544a\u306a\u3057\u306b\u5909\u66f4\u3055\u308c\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002\n\u8868\u793a\u5f62\u5f0f\u306f\u540c\u3058\u3067\u3059\u3002 +apt.msg.usage.nonstandard.footer=\u3053\u308c\u3089\u306f\u975e\u6a19\u6e96\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u3042\u308a\u4e88\u544a\u306a\u3057\u306b\u5909\u66f4\u3055\u308c\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002\n\u8868\u793a\u5f62\u5f0f\u306f\u540c\u3058\u3067\u3059\u3002 -apt.msg.bug=\ -\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u4f8b\u5916\u304c\u767a\u751f\u3057\u307e\u3057\u305f ({0})\u3002\ -Bug Parade \u306b\u540c\u3058\u30d0\u30b0\u304c\u767b\u9332\u3055\u308c\u3066\u3044\u306a\u3044\u3053\u3068\u3092\u3054\u78ba\u8a8d\u306e\u4e0a\u3001Java Developer Connection \ -(http://java.sun.com/webapps/bugreport) \u306b\u3066\u30d0\u30b0\u306e\u767b\u9332\u3092\u304a\u9858\u3044\u3044\u305f\u3057\u307e\u3059\u3002 \ -\u30ec\u30dd\u30fc\u30c8\u306b\u306f\u3001\u305d\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3068\u4e0b\u8a18\u306e\u8a3a\u65ad\u5185\u5bb9\u3092\u542b\u3081\u3066\u304f\u3060\u3055\u3044\u3002\u3054\u5354\u529b\u3042\u308a\u304c\u3068\u3046\u3054\u3056\u3044\u307e\u3059\u3002 +apt.msg.bug=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u4f8b\u5916\u304c\u767a\u751f\u3057\u307e\u3057\u305f ({0})\u3002Bug Parade \u306b\u540c\u3058\u30d0\u30b0\u304c\u767b\u9332\u3055\u308c\u3066\u3044\u306a\u3044\u3053\u3068\u3092\u3054\u78ba\u8a8d\u306e\u4e0a\u3001Java Developer Connection (http://java.sun.com/webapps/bugreport) \u306b\u3066\u30d0\u30b0\u306e\u767b\u9332\u3092\u304a\u9858\u3044\u3044\u305f\u3057\u307e\u3059\u3002 \u30ec\u30dd\u30fc\u30c8\u306b\u306f\u3001\u305d\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3068\u4e0b\u8a18\u306e\u8a3a\u65ad\u5185\u5bb9\u3092\u542b\u3081\u3066\u304f\u3060\u3055\u3044\u3002\u3054\u5354\u529b\u3042\u308a\u304c\u3068\u3046\u3054\u3056\u3044\u307e\u3059\u3002 ## apt options -apt.opt.A=\ - \u6ce8\u91c8\u30d7\u30ed\u30bb\u30c3\u30b5\u306b\u6e21\u3055\u308c\u308b\u30aa\u30d7\u30b7\u30e7\u30f3 -apt.opt.arg.class=\ - -apt.opt.arg.directory=\ - \u30d7\u30ed\u30bb\u30c3\u30b5\u304a\u3088\u3073 javac \u304c\u751f\u6210\u3057\u305f\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u7f6e\u304f\u4f4d\u7f6e\u3092\u6307\u5b9a\u3059\u308b -apt.opt.classpath=\ - \u30e6\u30fc\u30b6\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u304a\u3088\u3073\u6ce8\u91c8\u30d7\u30ed\u30bb\u30c3\u30b5\u30d5\u30a1\u30af\u30c8\u30ea\u3092\u691c\u7d22\u3059\u308b\u4f4d\u7f6e\u3092\u6307\u5b9a\u3059\u308b -apt.opt.d=\ - \u30d7\u30ed\u30bb\u30c3\u30b5\u304a\u3088\u3073 javac \u304c\u751f\u6210\u3057\u305f\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u7f6e\u304f\u4f4d\u7f6e\u3092\u6307\u5b9a\u3059\u308b -apt.opt.factory=\ - \u4f7f\u7528\u3059\u308b AnnotationProcessorFactory \u306e\u540d\u524d\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u691c\u51fa\u51e6\u7406\u3092\u30d0\u30a4\u30d1\u30b9 -apt.opt.factorypath=\ - \u6ce8\u91c8\u30d7\u30ed\u30bb\u30c3\u30b5\u30d5\u30a1\u30af\u30c8\u30ea\u306e\u691c\u7d22\u5834\u6240\u3092\u6307\u5b9a\u3059\u308b -apt.opt.s=\ - \u30d7\u30ed\u30bb\u30c3\u30b5\u304c\u751f\u6210\u3057\u305f\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u7f6e\u304f\u4f4d\u7f6e\u3092\u6307\u5b9a\u3059\u308b -apt.opt.help=\ - \u6a19\u6e96\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u6982\u8981\u3092\u51fa\u529b\u3059\u308b\u3002\u8a73\u7d30\u30aa\u30d7\u30b7\u30e7\u30f3\u306b\u3064\u3044\u3066\u306f javac -help \u3092\u53c2\u7167 -apt.opt.print=\ - \u6307\u5b9a\u3057\u305f\u578b\u306e\u30c6\u30ad\u30b9\u30c8\u8868\u793a\u3092\u51fa\u529b\u3059\u308b -apt.opt.nocompile=\ - \u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u306b\u30b3\u30f3\u30d1\u30a4\u30eb\u3057\u306a\u3044 -apt.opt.proc.flag=\ - [key[=value]] -apt.opt.version=\ - \u30d0\u30fc\u30b8\u30e7\u30f3\u60c5\u5831 -apt.opt.XListAnnotationTypes=\ - \u898b\u3064\u304b\u3063\u305f\u6ce8\u91c8\u578b\u3092\u30ea\u30b9\u30c8\u3059\u308b -apt.opt.XListDeclarations=\ - \u6307\u5b9a\u3055\u308c\u305f\u5ba3\u8a00\u304a\u3088\u3073\u30a4\u30f3\u30af\u30eb\u30fc\u30c9\u3055\u308c\u305f\u5ba3\u8a00\u3092\u30ea\u30b9\u30c8\u3059\u308b -apt.opt.XPrintAptRounds=\ - \u521d\u671f\u304a\u3088\u3073\u518d\u5e30 apt \u5f80\u5fa9\u306b\u3064\u3044\u3066\u306e\u60c5\u5831\u3092\u5370\u5237\u3059\u308b -apt.opt.XPrintFactoryInfo=\ - \u30d5\u30a1\u30af\u30c8\u30ea\u304c\u51e6\u7406\u3092\u4f9d\u983c\u3055\u308c\u308b\u6ce8\u91c8\u306b\u3064\u3044\u3066\u306e\u60c5\u5831\u3092\u5370\u5237\u3059\u308b -apt.opt.XClassesAsDecls=\ - \u30af\u30e9\u30b9\u3068\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u4e21\u65b9\u3068\u3082\u51e6\u7406\u3059\u308b\u5ba3\u8a00\u3068\u3057\u3066\u51e6\u7406 +apt.opt.A=\u6ce8\u91c8\u30d7\u30ed\u30bb\u30c3\u30b5\u306b\u6e21\u3055\u308c\u308b\u30aa\u30d7\u30b7\u30e7\u30f3 +apt.opt.arg.class= +apt.opt.arg.directory=\u30d7\u30ed\u30bb\u30c3\u30b5\u304a\u3088\u3073 javac \u304c\u751f\u6210\u3057\u305f\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u7f6e\u304f\u4f4d\u7f6e\u3092\u6307\u5b9a\u3059\u308b +apt.opt.classpath=\u30e6\u30fc\u30b6\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u304a\u3088\u3073\u6ce8\u91c8\u30d7\u30ed\u30bb\u30c3\u30b5\u30d5\u30a1\u30af\u30c8\u30ea\u3092\u691c\u7d22\u3059\u308b\u4f4d\u7f6e\u3092\u6307\u5b9a\u3059\u308b +apt.opt.d=\u30d7\u30ed\u30bb\u30c3\u30b5\u304a\u3088\u3073 javac \u304c\u751f\u6210\u3057\u305f\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u7f6e\u304f\u4f4d\u7f6e\u3092\u6307\u5b9a\u3059\u308b +apt.opt.factory=\u4f7f\u7528\u3059\u308b AnnotationProcessorFactory \u306e\u540d\u524d\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u691c\u51fa\u51e6\u7406\u3092\u30d0\u30a4\u30d1\u30b9 +apt.opt.factorypath=\u6ce8\u91c8\u30d7\u30ed\u30bb\u30c3\u30b5\u30d5\u30a1\u30af\u30c8\u30ea\u306e\u691c\u7d22\u5834\u6240\u3092\u6307\u5b9a\u3059\u308b +apt.opt.s=\u30d7\u30ed\u30bb\u30c3\u30b5\u304c\u751f\u6210\u3057\u305f\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u7f6e\u304f\u4f4d\u7f6e\u3092\u6307\u5b9a\u3059\u308b +apt.opt.help=\u6a19\u6e96\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u6982\u8981\u3092\u51fa\u529b\u3059\u308b\u3002\u8a73\u7d30\u30aa\u30d7\u30b7\u30e7\u30f3\u306b\u3064\u3044\u3066\u306f javac -help \u3092\u53c2\u7167 +apt.opt.print=\u6307\u5b9a\u3057\u305f\u578b\u306e\u30c6\u30ad\u30b9\u30c8\u8868\u793a\u3092\u51fa\u529b\u3059\u308b +apt.opt.nocompile=\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u306b\u30b3\u30f3\u30d1\u30a4\u30eb\u3057\u306a\u3044 +apt.opt.proc.flag=[key[=value]] +apt.opt.version=\u30d0\u30fc\u30b8\u30e7\u30f3\u60c5\u5831 +apt.opt.XListAnnotationTypes=\u898b\u3064\u304b\u3063\u305f\u6ce8\u91c8\u578b\u3092\u30ea\u30b9\u30c8\u3059\u308b +apt.opt.XListDeclarations=\u6307\u5b9a\u3055\u308c\u305f\u5ba3\u8a00\u304a\u3088\u3073\u30a4\u30f3\u30af\u30eb\u30fc\u30c9\u3055\u308c\u305f\u5ba3\u8a00\u3092\u30ea\u30b9\u30c8\u3059\u308b +apt.opt.XPrintAptRounds=\u521d\u671f\u304a\u3088\u3073\u518d\u5e30 apt \u5f80\u5fa9\u306b\u3064\u3044\u3066\u306e\u60c5\u5831\u3092\u5370\u5237\u3059\u308b +apt.opt.XPrintFactoryInfo=\u30d5\u30a1\u30af\u30c8\u30ea\u304c\u51e6\u7406\u3092\u4f9d\u983c\u3055\u308c\u308b\u6ce8\u91c8\u306b\u3064\u3044\u3066\u306e\u60c5\u5831\u3092\u5370\u5237\u3059\u308b +apt.opt.XClassesAsDecls=\u30af\u30e9\u30b9\u3068\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u4e21\u65b9\u3068\u3082\u51e6\u7406\u3059\u308b\u5ba3\u8a00\u3068\u3057\u3066\u51e6\u7406 ## ## errors @@ -85,92 +59,68 @@ apt.opt.XClassesAsDecls=\ ## All errors which do not refer to a particular line in the source code are ## preceded by this string. -apt.err.error=\ - \u30a8\u30e9\u30fc: +apt.err.error=\u30a8\u30e9\u30fc: -apt.err.unsupported.source.version=\ - \u30bd\u30fc\u30b9\u30ea\u30ea\u30fc\u30b9 {0} \u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u30ea\u30ea\u30fc\u30b9 5 \u4ee5\u524d\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044 +apt.err.unsupported.source.version=\u30bd\u30fc\u30b9\u30ea\u30ea\u30fc\u30b9 {0} \u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u30ea\u30ea\u30fc\u30b9 5 \u4ee5\u524d\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044 -apt.err.unsupported.target.version=\ - \u30bf\u30fc\u30b2\u30c3\u30c8\u30ea\u30ea\u30fc\u30b9 {0} \u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u30ea\u30ea\u30fc\u30b9 5 \u4ee5\u524d\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044 +apt.err.unsupported.target.version=\u30bf\u30fc\u30b2\u30c3\u30c8\u30ea\u30ea\u30fc\u30b9 {0} \u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u30ea\u30ea\u30fc\u30b9 5 \u4ee5\u524d\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044 -apt.err.BadDeclaration=\ - \u6ce8\u91c8\u578b {0} \u7528\u306b\u4f5c\u6210\u3055\u308c\u305f\u7121\u52b9\u306a\u5ba3\u8a00\u3067\u3059\u3002 +apt.err.BadDeclaration=\u6ce8\u91c8\u578b {0} \u7528\u306b\u4f5c\u6210\u3055\u308c\u305f\u7121\u52b9\u306a\u5ba3\u8a00\u3067\u3059\u3002 -apt.err.CantFindClass=\ - {0} \u306e\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002 +apt.err.CantFindClass={0} \u306e\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002 -apt.err.DeclarationCreation=\ - \u6ce8\u91c8\u578b {0} \u7528\u306b\u5ba3\u8a00\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 +apt.err.DeclarationCreation=\u6ce8\u91c8\u578b {0} \u7528\u306b\u5ba3\u8a00\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 # Print an error from the Messager -apt.err.Messager=\ - {0} +apt.err.Messager={0} ## ## miscellaneous strings ## -apt.misc.Problem=\ - \u6ce8\u91c8\u306e\u51e6\u7406\u4e2d\u306b\u554f\u984c\u304c\u691c\u51fa\u3055\u308c\u307e\u3057\u305f\u3002\n\u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u3001\u4e0b\u8a18\u306e\u30b9\u30bf\u30c3\u30af\u30c8\u30ec\u30fc\u30b9\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +apt.misc.Deprecation=\n\u8b66\u544a: apt \u30c4\u30fc\u30eb\u3068\u3053\u308c\u306b\u95a2\u9023\u3059\u308b API \u306f\u3001\u6b21\u306e JDK \u30e1\u30b8\u30e3\u30fc\u30ea\u30ea\u30fc\u30b9\u3067\n\u524a\u9664\u3055\u308c\u308b\u4e88\u5b9a\u3067\u3059\u3002\u3053\u308c\u3089\u306e\u6a5f\u80fd\u306f\u3001\njavac \u304a\u3088\u3073\u6a19\u6e96\u5316\u6ce8\u91c8\u51e6\u7406 API \n(javax.annotation.processing \u3068 javax.lang.model) \u306b\u7f6e\u304d\u63db\u3048\u3089\u308c\u307e\u3057\u305f\u3002javac \u306e\n\u6ce8\u91c8\u51e6\u7406\u6a5f\u80fd\u3078\u306e\u79fb\u884c\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002\u8a73\u7d30\u306f\u3001\njavac \u306e\u30de\u30cb\u30e5\u30a2\u30eb\u30da\u30fc\u30b8\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n -apt.misc.SunMiscService=\ - \u6ce8\u91c8\u30d7\u30ed\u30bb\u30c3\u30b5\u30d5\u30a1\u30af\u30c8\u30ea\u306e\u691c\u7d22\u30a8\u30e9\u30fc\u3067\u3059\u3002\nMETA-INF/services \u5185\u306e\u60c5\u5831\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +apt.misc.Problem=\u6ce8\u91c8\u306e\u51e6\u7406\u4e2d\u306b\u554f\u984c\u304c\u691c\u51fa\u3055\u308c\u307e\u3057\u305f\u3002\n\u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u3001\u4e0b\u8a18\u306e\u30b9\u30bf\u30c3\u30af\u30c8\u30ec\u30fc\u30b9\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002 + +apt.misc.SunMiscService=\u6ce8\u91c8\u30d7\u30ed\u30bb\u30c3\u30b5\u30d5\u30a1\u30af\u30c8\u30ea\u306e\u691c\u7d22\u30a8\u30e9\u30fc\u3067\u3059\u3002\nMETA-INF/services \u5185\u306e\u60c5\u5831\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002 # Print a notice from the Messager -apt.note.Messager=\ - {0} +apt.note.Messager={0} ## ## warnings ## ## All warning messages are preceded by the following string. -apt.warn.warning=\ - \u8b66\u544a: +apt.warn.warning=\u8b66\u544a: -apt.warn.AnnotationsWithoutProcessors=\ - \u30d7\u30ed\u30bb\u30c3\u30b5\u306a\u3057\u306e\u6ce8\u91c8\u578b\u3067\u3059: {0} +apt.warn.AnnotationsWithoutProcessors=\u30d7\u30ed\u30bb\u30c3\u30b5\u306a\u3057\u306e\u6ce8\u91c8\u578b\u3067\u3059: {0} -apt.warn.BadFactory=\ - \u6ce8\u91c8\u30d7\u30ed\u30bb\u30c3\u30b5\u30d5\u30a1\u30af\u30c8\u30ea\u304c\u7121\u52b9\u3067\u3059: {0} +apt.warn.BadFactory=\u6ce8\u91c8\u30d7\u30ed\u30bb\u30c3\u30b5\u30d5\u30a1\u30af\u30c8\u30ea\u304c\u7121\u52b9\u3067\u3059: {0} -apt.warn.BadParentDirectory=\ - {0} \u306e\u3044\u304f\u3064\u304b\u306e\u89aa\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4f5c\u6210\u306b\u5931\u6557\u3057\u307e\u3057\u305f +apt.warn.BadParentDirectory={0} \u306e\u3044\u304f\u3064\u304b\u306e\u89aa\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4f5c\u6210\u306b\u5931\u6557\u3057\u307e\u3057\u305f -apt.warn.FactoryCantInstantiate=\ - \u30d5\u30a1\u30af\u30c8\u30ea ''{0}'' \u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 +apt.warn.FactoryCantInstantiate=\u30d5\u30a1\u30af\u30c8\u30ea ''{0}'' \u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 -apt.warn.FactoryWrongType=\ - \u6307\u5b9a\u3057\u305f\u30d5\u30a1\u30af\u30c8\u30ea ''{0}'' \u306f AnnotationProcessorFactory \u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 +apt.warn.FactoryWrongType=\u6307\u5b9a\u3057\u305f\u30d5\u30a1\u30af\u30c8\u30ea ''{0}'' \u306f AnnotationProcessorFactory \u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 -apt.warn.FactoryNotFound=\ - \u6307\u5b9a\u3057\u305f AnnotationProcessorFactory ''{0}'' \u306f\u691c\u7d22\u30d1\u30b9\u3067\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002 +apt.warn.FactoryNotFound=\u6307\u5b9a\u3057\u305f AnnotationProcessorFactory ''{0}'' \u306f\u691c\u7d22\u30d1\u30b9\u3067\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002 -apt.warn.FileReopening=\ - ''{0}'' \u3092\u8907\u6570\u56de\u4f5c\u6210\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u307e\u3059\u3002 +apt.warn.FileReopening=''{0}'' \u3092\u8907\u6570\u56de\u4f5c\u6210\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u307e\u3059\u3002 -apt.warn.IllegalFileName=\ - \u7121\u52b9\u306a\u540d\u524d ''{0}'' \u306e\u30d5\u30a1\u30a4\u30eb\u306f\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3002 +apt.warn.IllegalFileName=\u7121\u52b9\u306a\u540d\u524d ''{0}'' \u306e\u30d5\u30a1\u30a4\u30eb\u306f\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3002 -apt.warn.MalformedSupportedString=\ - \u30d5\u30a1\u30af\u30c8\u30ea\u304c\u8fd4\u3057\u305f\u6ce8\u91c8\u30b5\u30dd\u30fc\u30c8 ''{0}'' \u306e\u6587\u5b57\u5217\u304c\u4e0d\u6b63\u3067\u3059\u3002 +apt.warn.MalformedSupportedString=\u30d5\u30a1\u30af\u30c8\u30ea\u304c\u8fd4\u3057\u305f\u6ce8\u91c8\u30b5\u30dd\u30fc\u30c8 ''{0}'' \u306e\u6587\u5b57\u5217\u304c\u4e0d\u6b63\u3067\u3059\u3002 -apt.warn.NoNewFilesAfterRound=\ - \u5f80\u5fa9\u306e\u7d42\u4e86\u5f8c\u306b\u30d5\u30a1\u30a4\u30eb ''{0}'' \u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 +apt.warn.NoNewFilesAfterRound=\u5f80\u5fa9\u306e\u7d42\u4e86\u5f8c\u306b\u30d5\u30a1\u30a4\u30eb ''{0}'' \u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 # Print a warning from the Messager -apt.warn.Messager=\ - {0} +apt.warn.Messager={0} -apt.warn.NoAnnotationProcessors=\ - \u6ce8\u91c8\u30d7\u30ed\u30bb\u30c3\u30b5\u306f\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u304c\u3001\u6ce8\u91c8\u306f\u5b58\u5728\u3057\u307e\u3059\u3002 +apt.warn.NoAnnotationProcessors=\u6ce8\u91c8\u30d7\u30ed\u30bb\u30c3\u30b5\u306f\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u304c\u3001\u6ce8\u91c8\u306f\u5b58\u5728\u3057\u307e\u3059\u3002 -apt.warn.NullProcessor=\ - \u30d5\u30a1\u30af\u30c8\u30ea {0} \u304c\u6ce8\u91c8\u30d7\u30ed\u30bb\u30c3\u30b5\u306b null \u3092\u8fd4\u3057\u307e\u3057\u305f\u3002 +apt.warn.NullProcessor=\u30d5\u30a1\u30af\u30c8\u30ea {0} \u304c\u6ce8\u91c8\u30d7\u30ed\u30bb\u30c3\u30b5\u306b null \u3092\u8fd4\u3057\u307e\u3057\u305f\u3002 -apt.warn.CorrespondingClassFile=\ - \u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb ''{0}'' \u306b\u5bfe\u5fdc\u3059\u308b\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u306f\u3059\u3067\u306b\u4f5c\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002 +apt.warn.CorrespondingClassFile=\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb ''{0}'' \u306b\u5bfe\u5fdc\u3059\u308b\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u306f\u3059\u3067\u306b\u4f5c\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002 -apt.warn.CorrespondingSourceFile=\ - \u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb ''{0}'' \u306b\u5bfe\u5fdc\u3059\u308b\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u306f\u3059\u3067\u306b\u4f5c\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002 +apt.warn.CorrespondingSourceFile=\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb ''{0}'' \u306b\u5bfe\u5fdc\u3059\u308b\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u306f\u3059\u3067\u306b\u4f5c\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002 diff --git a/langtools/src/share/classes/com/sun/tools/apt/resources/apt_zh_CN.properties b/langtools/src/share/classes/com/sun/tools/apt/resources/apt_zh_CN.properties index 1443397b94d..ef0c7c439f5 100644 --- a/langtools/src/share/classes/com/sun/tools/apt/resources/apt_zh_CN.properties +++ b/langtools/src/share/classes/com/sun/tools/apt/resources/apt_zh_CN.properties @@ -1,5 +1,5 @@ # -# Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved. +# Copyright 2004-2006 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 @@ -23,60 +23,34 @@ # have any questions. # -apt.msg.usage.header=\ -\u7528\u6cd5\uff1a{0} <\u6e90\u6587\u4ef6>\n\ -\u5176\u4e2d\uff0capt \u9009\u9879\u5305\u62ec\uff1a +apt.msg.usage.header=\u7528\u6cd5\uff1a{0} <\u6e90\u6587\u4ef6>\n\u5176\u4e2d\uff0capt \u9009\u9879\u5305\u62ec\uff1a -apt.msg.usage.footer=\ -\u6709\u5173 javac \u9009\u9879\u7684\u4fe1\u606f\uff0c\u8bf7\u53c2\u89c1 javac -help\u3002 +apt.msg.usage.footer=\u6709\u5173 javac \u9009\u9879\u7684\u4fe1\u606f\uff0c\u8bf7\u53c2\u89c1 javac -help\u3002 -apt.msg.usage.nonstandard.footer=\ -\u8fd9\u4e9b\u9009\u9879\u53ca\u5176\u8f93\u51fa\u683c\u5f0f\u90fd\u4e0d\u662f\u6807\u51c6\u7684\uff0c\n\u5982\u6709\u66f4\u6539\uff0c\u6055\u4e0d\u53e6\u884c\u901a\u77e5\u3002 +apt.msg.usage.nonstandard.footer=\u8fd9\u4e9b\u9009\u9879\u53ca\u5176\u8f93\u51fa\u683c\u5f0f\u90fd\u4e0d\u662f\u6807\u51c6\u7684\uff0c\n\u5982\u6709\u66f4\u6539\uff0c\u6055\u4e0d\u53e6\u884c\u901a\u77e5\u3002 -apt.msg.bug=\ -apt ({0}) \u4e2d\u51fa\u73b0\u5f02\u5e38\u3002 \ -\u5982\u679c\u5728 Bug Parade \u4e2d\u6ca1\u6709\u627e\u5230\u8be5\u9519\u8bef\uff0c\u8bf7\u5728 Java Developer Connection (http://java.sun.com/webapps/bugreport) \ -\u5bf9\u8be5\u9519\u8bef\u8fdb\u884c\u5f52\u6863\u3002 \ -\u8bf7\u5728\u62a5\u544a\u4e2d\u9644\u4e0a\u60a8\u7684\u7a0b\u5e8f\u548c\u4ee5\u4e0b\u8bca\u65ad\u4fe1\u606f\u3002\u8c22\u8c22\u60a8\u7684\u5408\u4f5c\u3002 +apt.msg.bug=apt ({0}) \u4e2d\u51fa\u73b0\u5f02\u5e38\u3002 \u5982\u679c\u5728 Bug Parade \u4e2d\u6ca1\u6709\u627e\u5230\u8be5\u9519\u8bef\uff0c\u8bf7\u5728 Java Developer Connection (http://java.sun.com/webapps/bugreport) \u5bf9\u8be5\u9519\u8bef\u8fdb\u884c\u5f52\u6863\u3002 \u8bf7\u5728\u62a5\u544a\u4e2d\u9644\u4e0a\u60a8\u7684\u7a0b\u5e8f\u548c\u4ee5\u4e0b\u8bca\u65ad\u4fe1\u606f\u3002\u8c22\u8c22\u60a8\u7684\u5408\u4f5c\u3002 ## apt options -apt.opt.A=\ -\u4f20\u9012\u7ed9\u6ce8\u91ca\u5904\u7406\u5668\u7684\u9009\u9879 -apt.opt.arg.class=\ -<\u7c7b> -apt.opt.arg.directory=\ -\u6307\u5b9a\u5b58\u653e\u5904\u7406\u5668\u548c javac \u751f\u6210\u7684\u7c7b\u6587\u4ef6\u7684\u4f4d\u7f6e -apt.opt.classpath=\ -\u6307\u5b9a\u67e5\u627e\u7528\u6237\u7c7b\u6587\u4ef6\u548c\u6ce8\u91ca\u5904\u7406\u5668\u5de5\u5382\u7684\u4f4d\u7f6e -apt.opt.d=\ -\u6307\u5b9a\u5b58\u653e\u5904\u7406\u5668\u548c javac \u751f\u6210\u7684\u7c7b\u6587\u4ef6\u7684\u4f4d\u7f6e -apt.opt.factory=\ -\u8981\u4f7f\u7528\u7684 AnnotationProcessorFactory \u7684\u540d\u79f0\uff1b\u7ed5\u8fc7\u9ed8\u8ba4\u7684\u641c\u7d22\u8fdb\u7a0b -apt.opt.factorypath=\ -\u6307\u5b9a\u67e5\u627e\u6ce8\u91ca\u5904\u7406\u5668\u5de5\u5382\u7684\u4f4d\u7f6e -apt.opt.s=\ -\u6307\u5b9a\u5b58\u653e\u5904\u7406\u5668\u751f\u6210\u7684\u6e90\u6587\u4ef6\u7684\u4f4d\u7f6e -apt.opt.help=\ -\u8f93\u51fa\u6807\u51c6\u9009\u9879\u7684\u63d0\u8981\uff1b\u4f7f\u7528 javac -help \u53ef\u4ee5\u5f97\u5230\u66f4\u591a\u9009\u9879 -apt.opt.print=\ -\u8f93\u51fa\u6307\u5b9a\u7c7b\u578b\u7684\u6587\u672c\u8868\u793a -apt.opt.nocompile=\ -\u8bf7\u52ff\u5c06\u6e90\u6587\u4ef6\u7f16\u8bd1\u4e3a\u7c7b\u6587\u4ef6 -apt.opt.proc.flag=\ -[\u5173\u952e\u5b57[=\u503c]] -apt.opt.version=\ -\u7248\u672c\u4fe1\u606f -apt.opt.XListAnnotationTypes=\ -\u5217\u51fa\u627e\u5230\u7684\u6ce8\u91ca\u7c7b\u578b -apt.opt.XListDeclarations=\ -\u5217\u51fa\u6307\u5b9a\u548c\u5305\u542b\u7684\u58f0\u660e -apt.opt.XPrintAptRounds=\ -\u8f93\u51fa\u6709\u5173\u521d\u59cb\u548c\u9012\u5f52 apt \u5faa\u73af\u7684\u4fe1\u606f -apt.opt.XPrintFactoryInfo=\ -\u8f93\u51fa\u6709\u5173\u8bf7\u6c42\u5de5\u5382\u5904\u7406\u54ea\u4e9b\u6ce8\u91ca\u7684\u4fe1\u606f -apt.opt.XClassesAsDecls=\ -\u5c06\u7c7b\u6587\u4ef6\u548c\u6e90\u6587\u4ef6\u90fd\u89c6\u4e3a\u8981\u5904\u7406\u7684\u58f0\u660e +apt.opt.A=\u4f20\u9012\u7ed9\u6ce8\u91ca\u5904\u7406\u5668\u7684\u9009\u9879 +apt.opt.arg.class=<\u7c7b> +apt.opt.arg.directory=\u6307\u5b9a\u5b58\u653e\u5904\u7406\u5668\u548c javac \u751f\u6210\u7684\u7c7b\u6587\u4ef6\u7684\u4f4d\u7f6e +apt.opt.classpath=\u6307\u5b9a\u67e5\u627e\u7528\u6237\u7c7b\u6587\u4ef6\u548c\u6ce8\u91ca\u5904\u7406\u5668\u5de5\u5382\u7684\u4f4d\u7f6e +apt.opt.d=\u6307\u5b9a\u5b58\u653e\u5904\u7406\u5668\u548c javac \u751f\u6210\u7684\u7c7b\u6587\u4ef6\u7684\u4f4d\u7f6e +apt.opt.factory=\u8981\u4f7f\u7528\u7684 AnnotationProcessorFactory \u7684\u540d\u79f0\uff1b\u7ed5\u8fc7\u9ed8\u8ba4\u7684\u641c\u7d22\u8fdb\u7a0b +apt.opt.factorypath=\u6307\u5b9a\u67e5\u627e\u6ce8\u91ca\u5904\u7406\u5668\u5de5\u5382\u7684\u4f4d\u7f6e +apt.opt.s=\u6307\u5b9a\u5b58\u653e\u5904\u7406\u5668\u751f\u6210\u7684\u6e90\u6587\u4ef6\u7684\u4f4d\u7f6e +apt.opt.help=\u8f93\u51fa\u6807\u51c6\u9009\u9879\u7684\u63d0\u8981\uff1b\u4f7f\u7528 javac -help \u53ef\u4ee5\u5f97\u5230\u66f4\u591a\u9009\u9879 +apt.opt.print=\u8f93\u51fa\u6307\u5b9a\u7c7b\u578b\u7684\u6587\u672c\u8868\u793a +apt.opt.nocompile=\u8bf7\u52ff\u5c06\u6e90\u6587\u4ef6\u7f16\u8bd1\u4e3a\u7c7b\u6587\u4ef6 +apt.opt.proc.flag=[\u5173\u952e\u5b57[=\u503c]] +apt.opt.version=\u7248\u672c\u4fe1\u606f +apt.opt.XListAnnotationTypes=\u5217\u51fa\u627e\u5230\u7684\u6ce8\u91ca\u7c7b\u578b +apt.opt.XListDeclarations=\u5217\u51fa\u6307\u5b9a\u548c\u5305\u542b\u7684\u58f0\u660e +apt.opt.XPrintAptRounds=\u8f93\u51fa\u6709\u5173\u521d\u59cb\u548c\u9012\u5f52 apt \u5faa\u73af\u7684\u4fe1\u606f +apt.opt.XPrintFactoryInfo=\u8f93\u51fa\u6709\u5173\u8bf7\u6c42\u5de5\u5382\u5904\u7406\u54ea\u4e9b\u6ce8\u91ca\u7684\u4fe1\u606f +apt.opt.XClassesAsDecls=\u5c06\u7c7b\u6587\u4ef6\u548c\u6e90\u6587\u4ef6\u90fd\u89c6\u4e3a\u8981\u5904\u7406\u7684\u58f0\u660e ## ## errors @@ -85,92 +59,68 @@ apt.opt.XClassesAsDecls=\ ## All errors which do not refer to a particular line in the source code are ## preceded by this string. -apt.err.error=\ -\u9519\u8bef\uff1a +apt.err.error=\u9519\u8bef\uff1a -apt.err.unsupported.source.version=\ - \u4e0d\u652f\u6301\u6e90\u7248\u672c {0}\uff1b\u8bf7\u4f7f\u7528\u7248\u672c 5 \u6216\u65e9\u671f\u7248\u672c +apt.err.unsupported.source.version=\u4e0d\u652f\u6301\u6e90\u7248\u672c {0}\uff1b\u8bf7\u4f7f\u7528\u7248\u672c 5 \u6216\u65e9\u671f\u7248\u672c -apt.err.unsupported.target.version=\ - \u4e0d\u652f\u6301\u76ee\u6807\u7248\u672c {0}\uff1b\u8bf7\u4f7f\u7528\u7248\u672c 5 \u6216\u65e9\u671f\u7248\u672c +apt.err.unsupported.target.version=\u4e0d\u652f\u6301\u76ee\u6807\u7248\u672c {0}\uff1b\u8bf7\u4f7f\u7528\u7248\u672c 5 \u6216\u65e9\u671f\u7248\u672c -apt.err.BadDeclaration=\ -\u4e3a\u6ce8\u91ca\u7c7b\u578b {0} \u521b\u5efa\u7684\u58f0\u660e\u51fa\u73b0\u9519\u8bef +apt.err.BadDeclaration=\u4e3a\u6ce8\u91ca\u7c7b\u578b {0} \u521b\u5efa\u7684\u58f0\u660e\u51fa\u73b0\u9519\u8bef -apt.err.CantFindClass=\ -\u627e\u4e0d\u5230 {0} \u7684\u7c7b\u6587\u4ef6 +apt.err.CantFindClass=\u627e\u4e0d\u5230 {0} \u7684\u7c7b\u6587\u4ef6 -apt.err.DeclarationCreation=\ -\u65e0\u6cd5\u4e3a\u6ce8\u91ca\u7c7b\u578b {0} \u521b\u5efa\u58f0\u660e +apt.err.DeclarationCreation=\u65e0\u6cd5\u4e3a\u6ce8\u91ca\u7c7b\u578b {0} \u521b\u5efa\u58f0\u660e # Print an error from the Messager -apt.err.Messager=\ - {0} +apt.err.Messager={0} ## ## miscellaneous strings ## -apt.misc.Problem=\ -\u6ce8\u91ca\u5904\u7406\u8fc7\u7a0b\u4e2d\u9047\u5230\u95ee\u9898\uff1b\n\u6709\u5173\u66f4\u591a\u4fe1\u606f\uff0c\u8bf7\u53c2\u89c1\u4e0b\u9762\u7684\u5806\u6808\u8ffd\u8e2a\u3002 +apt.misc.Deprecation=\n\u8b66\u544a\uff1a\u5728\u4e0b\u4e00\u4e2a JDK \u4e3b\u8981\u7248\u672c\u4e2d\uff0c\napt \u5de5\u5177\u53ca\u5176\u5173\u8054\u7684 API \u5c06\u88ab\u5220\u9664\u3002\u5176\u4e2d\u7684\u529f\u80fd\u5df2\u88ab javac \u4ee5\u53ca\n\u6807\u51c6\u5316\u6ce8\u91ca\u5904\u7406 API \njavax.annotation.processing \u548c javax.lang.model \u53d6\u4ee3\u3002\u5efa\u8bae\u7528\u6237\n\u6539\u7528 javac \u7684\u6ce8\u91ca\u5904\u7406\u529f\u80fd\uff1b\n\u6709\u5173\u8be6\u7ec6\u4fe1\u606f\uff0c\u8bf7\u53c2\u89c1 javac \u624b\u518c\u9875\u3002\n -apt.misc.SunMiscService=\ -\u67e5\u627e\u6ce8\u91ca\u5904\u7406\u5668\u5de5\u5382\u65f6\u51fa\u9519\uff1b\n\u8bf7\u67e5\u770b META-INF/\u670d\u52a1\u4fe1\u606f\u3002 +apt.misc.Problem=\u6ce8\u91ca\u5904\u7406\u8fc7\u7a0b\u4e2d\u9047\u5230\u95ee\u9898\uff1b\n\u6709\u5173\u66f4\u591a\u4fe1\u606f\uff0c\u8bf7\u53c2\u89c1\u4e0b\u9762\u7684\u5806\u6808\u8ffd\u8e2a\u3002 + +apt.misc.SunMiscService=\u67e5\u627e\u6ce8\u91ca\u5904\u7406\u5668\u5de5\u5382\u65f6\u51fa\u9519\uff1b\n\u8bf7\u67e5\u770b META-INF/\u670d\u52a1\u4fe1\u606f\u3002 # Print a notice from the Messager -apt.note.Messager=\ - {0} +apt.note.Messager={0} ## ## warnings ## ## All warning messages are preceded by the following string. -apt.warn.warning=\ -\u8b66\u544a\uff1a +apt.warn.warning=\u8b66\u544a\uff1a -apt.warn.AnnotationsWithoutProcessors=\ -\u4e0d\u5e26\u5904\u7406\u5668\u7684\u6ce8\u91ca\u7c7b\u578b\uff1a {0} +apt.warn.AnnotationsWithoutProcessors=\u4e0d\u5e26\u5904\u7406\u5668\u7684\u6ce8\u91ca\u7c7b\u578b\uff1a {0} -apt.warn.BadFactory=\ -\u6ce8\u91ca\u5904\u7406\u5668\u5de5\u5382\u51fa\u73b0\u9519\u8bef\uff1a {0} +apt.warn.BadFactory=\u6ce8\u91ca\u5904\u7406\u5668\u5de5\u5382\u51fa\u73b0\u9519\u8bef\uff1a {0} -apt.warn.BadParentDirectory=\ -\u65e0\u6cd5\u521b\u5efa {0} \u7684\u67d0\u4e9b\u7236\u76ee\u5f55 +apt.warn.BadParentDirectory=\u65e0\u6cd5\u521b\u5efa {0} \u7684\u67d0\u4e9b\u7236\u76ee\u5f55 -apt.warn.FactoryCantInstantiate=\ -\u65e0\u6cd5\u5b9e\u4f8b\u5316\u5de5\u5382 "{0}" \u7684\u5b9e\u4f8b\u3002 +apt.warn.FactoryCantInstantiate=\u65e0\u6cd5\u5b9e\u4f8b\u5316\u5de5\u5382 "{0}" \u7684\u5b9e\u4f8b\u3002 -apt.warn.FactoryWrongType=\ -\u6307\u5b9a\u7684\u5de5\u5382 "{0}" \u4e0d\u662f AnnotationProcessorFactory\u3002 +apt.warn.FactoryWrongType=\u6307\u5b9a\u7684\u5de5\u5382 "{0}" \u4e0d\u662f AnnotationProcessorFactory\u3002 -apt.warn.FactoryNotFound=\ -\u5728\u641c\u7d22\u8def\u5f84\u4e2d\u627e\u4e0d\u5230\u6307\u5b9a\u7684 AnnotationProcessorFactory "{0}"\u3002 +apt.warn.FactoryNotFound=\u5728\u641c\u7d22\u8def\u5f84\u4e2d\u627e\u4e0d\u5230\u6307\u5b9a\u7684 AnnotationProcessorFactory "{0}"\u3002 -apt.warn.FileReopening=\ -\u5c1d\u8bd5\u591a\u6b21\u521b\u5efa "{0}" +apt.warn.FileReopening=\u5c1d\u8bd5\u591a\u6b21\u521b\u5efa "{0}" -apt.warn.IllegalFileName=\ -\u65e0\u6cd5\u521b\u5efa\u5e26\u6709\u975e\u6cd5\u540d\u79f0 "{0}" \u7684\u6587\u4ef6\u3002 +apt.warn.IllegalFileName=\u65e0\u6cd5\u521b\u5efa\u5e26\u6709\u975e\u6cd5\u540d\u79f0 "{0}" \u7684\u6587\u4ef6\u3002 -apt.warn.MalformedSupportedString=\ -\u5de5\u5382\u8fd4\u56de\u4e0d\u89c4\u5219\u7684\u6ce8\u91ca\u652f\u6301\u5b57\u7b26\u4e32 "{0}"\u3002 +apt.warn.MalformedSupportedString=\u5de5\u5382\u8fd4\u56de\u4e0d\u89c4\u5219\u7684\u6ce8\u91ca\u652f\u6301\u5b57\u7b26\u4e32 "{0}"\u3002 -apt.warn.NoNewFilesAfterRound=\ -\u5faa\u73af\u7ed3\u675f\u540e\u65e0\u6cd5\u521b\u5efa\u6587\u4ef6 "{0}"\u3002 +apt.warn.NoNewFilesAfterRound=\u5faa\u73af\u7ed3\u675f\u540e\u65e0\u6cd5\u521b\u5efa\u6587\u4ef6 "{0}"\u3002 # Print a warning from the Messager -apt.warn.Messager=\ - {0} +apt.warn.Messager={0} -apt.warn.NoAnnotationProcessors=\ -\u672a\u627e\u5230\u6ce8\u91ca\u5904\u7406\u5668\uff0c\u4f46\u5b58\u5728\u6ce8\u91ca\u3002 +apt.warn.NoAnnotationProcessors=\u672a\u627e\u5230\u6ce8\u91ca\u5904\u7406\u5668\uff0c\u4f46\u5b58\u5728\u6ce8\u91ca\u3002 -apt.warn.NullProcessor=\ -\u5bf9\u4e8e\u67d0\u4e2a\u6ce8\u91ca\u5904\u7406\u5668\uff0c\u5de5\u5382 {0} \u8fd4\u56de\u7684\u503c\u4e3a null\u3002 +apt.warn.NullProcessor=\u5bf9\u4e8e\u67d0\u4e2a\u6ce8\u91ca\u5904\u7406\u5668\uff0c\u5de5\u5382 {0} \u8fd4\u56de\u7684\u503c\u4e3a null\u3002 -apt.warn.CorrespondingClassFile=\ -\u5df2\u521b\u5efa\u4e0e\u6e90\u6587\u4ef6 "{0}" \u76f8\u5bf9\u5e94\u7684\u7c7b\u6587\u4ef6\u3002 +apt.warn.CorrespondingClassFile=\u5df2\u521b\u5efa\u4e0e\u6e90\u6587\u4ef6 "{0}" \u76f8\u5bf9\u5e94\u7684\u7c7b\u6587\u4ef6\u3002 -apt.warn.CorrespondingSourceFile=\ -\u5df2\u521b\u5efa\u4e0e\u7c7b\u6587\u4ef6 "{0}" \u76f8\u5bf9\u5e94\u7684\u6e90\u6587\u4ef6\u3002 +apt.warn.CorrespondingSourceFile=\u5df2\u521b\u5efa\u4e0e\u7c7b\u6587\u4ef6 "{0}" \u76f8\u5bf9\u5e94\u7684\u6e90\u6587\u4ef6\u3002 diff --git a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/resources/standard_ja.properties b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/resources/standard_ja.properties index 9489cc201fb..393175875c4 100644 --- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/resources/standard_ja.properties +++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/resources/standard_ja.properties @@ -83,6 +83,17 @@ doclet.Deprecated_Constructors=\u63a8\u5968\u3055\u308c\u3066\u3044\u306a\u3044\ doclet.Deprecated_Methods=\u63a8\u5968\u3055\u308c\u3066\u3044\u306a\u3044\u30e1\u30bd\u30c3\u30c9 doclet.Deprecated_Enum_Constants=\u63a8\u5968\u3055\u308c\u3066\u3044\u306a\u3044\u5217\u6319\u578b\u5b9a\u6570 doclet.Deprecated_Annotation_Type_Members=\u63a8\u5968\u3055\u308c\u3066\u3044\u306a\u3044\u6ce8\u91c8\u578b\u306e\u8981\u7d20 +doclet.deprecated_classes=\u63a8\u5968\u3055\u308c\u3066\u3044\u306a\u3044\u30af\u30e9\u30b9 +doclet.deprecated_enums=\u63a8\u5968\u3055\u308c\u3066\u3044\u306a\u3044\u5217\u6319\u578b +doclet.deprecated_interfaces=\u63a8\u5968\u3055\u308c\u3066\u3044\u306a\u3044\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9 +doclet.deprecated_exceptions=\u63a8\u5968\u3055\u308c\u3066\u3044\u306a\u3044\u4f8b\u5916 +doclet.deprecated_annotation_types=\u63a8\u5968\u3055\u308c\u3066\u3044\u306a\u3044\u6ce8\u91c8\u578b +doclet.deprecated_errors=\u63a8\u5968\u3055\u308c\u3066\u3044\u306a\u3044\u30a8\u30e9\u30fc +doclet.deprecated_fields=\u63a8\u5968\u3055\u308c\u3066\u3044\u306a\u3044\u30d5\u30a3\u30fc\u30eb\u30c9 +doclet.deprecated_constructors=\u63a8\u5968\u3055\u308c\u3066\u3044\u306a\u3044\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf +doclet.deprecated_methods=\u63a8\u5968\u3055\u308c\u3066\u3044\u306a\u3044\u30e1\u30bd\u30c3\u30c9 +doclet.deprecated_enum_constants=\u63a8\u5968\u3055\u308c\u3066\u3044\u306a\u3044\u5217\u6319\u578b\u5b9a\u6570 +doclet.deprecated_annotation_type_members=\u63a8\u5968\u3055\u308c\u3066\u3044\u306a\u3044\u6ce8\u91c8\u578b\u306e\u8981\u7d20 doclet.Frame_Output=\u30d5\u30ec\u30fc\u30e0\u51fa\u529b doclet.Docs_generated_by_Javadoc=\u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306f javadoc \u3067\u751f\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002 doclet.Generated_Docs_Untitled=\u751f\u6210\u3055\u308c\u305f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8 (\u30bf\u30a4\u30c8\u30eb\u306a\u3057) @@ -158,7 +169,7 @@ doclet.Help_enum_line_3=\u5217\u6319\u578b\u306e\u8aac\u660e doclet.Help_annotation_type_line_1=\u5404\u6ce8\u91c8\u578b\u306b\u306f\u3001\u305d\u308c\u81ea\u8eab\u306e\u500b\u5225\u306e\u30da\u30fc\u30b8\u3068\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u304c\u3042\u308a\u307e\u3059: doclet.Help_annotation_type_line_2=\u6ce8\u91c8\u578b\u306e\u5ba3\u8a00 doclet.Help_annotation_type_line_3=\u6ce8\u91c8\u578b\u306e\u8aac\u660e -doclet.The= +doclet.The=The doclet.Style_line_1=javadoc \u30b9\u30bf\u30a4\u30eb\u30b7\u30fc\u30c8 doclet.Style_line_2=\u8272\u3084\u30d5\u30a9\u30f3\u30c8\u306a\u3069\u306e\u30b9\u30bf\u30a4\u30eb\u5c5e\u6027\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u3092\u4e0a\u66f8\u304d\u3059\u308b\u306b\u306f\u3001\u3053\u3053\u3067\u5b9a\u7fa9\u3057\u307e\u3059\u3002 doclet.Style_line_3=\u30da\u30fc\u30b8\u306e\u30d0\u30c3\u30af\u30b0\u30e9\u30a6\u30f3\u30c9\u306e\u8272 @@ -171,6 +182,7 @@ doclet.Style_line_8=\u5de6\u5074\u306e\u30d5\u30ec\u30fc\u30e0\u306e\u30ea\u30b9 doclet.Style_line_9=\u30d5\u30ec\u30fc\u30e0\u306b\u304a\u3051\u308b\u3001\u3088\u308a\u5c0f\u3055\u3044\u3001\u30bb\u30ea\u30d5\u306a\u3057\u30d5\u30a9\u30f3\u30c8\u306e\u4f8b doclet.Style_line_10=\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u30d0\u30fc\u306e\u30d5\u30a9\u30f3\u30c8\u3068\u8272 doclet.Style_line_11=\u6fc3\u3044\u9752 +doclet.Style_line_12=\u8868\u898b\u51fa\u3057\u306e\u30b9\u30bf\u30a4\u30eb doclet.ClassUse_Packages.that.use.0={0} \u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u30d1\u30c3\u30b1\u30fc\u30b8 doclet.ClassUse_Uses.of.0.in.1={1} \u3067\u306e {0} \u306e\u4f7f\u7528 doclet.ClassUse_Classes.in.0.used.by.1={1} \u306b\u3088\u308a\u4f7f\u7528\u3055\u308c\u308b {0} \u306e\u30af\u30e9\u30b9 @@ -206,44 +218,7 @@ doclet.Groupname_already_used=-group \u30aa\u30d7\u30b7\u30e7\u30f3\u306b\u304a\ doclet.Same_package_name_used=\u30d1\u30c3\u30b1\u30fc\u30b8\u540d\u5f62\u5f0f\u304c 2 \u56de\u4f7f\u7528\u3055\u308c\u3066\u3044\u307e\u3059: {0} doclet.Serialization.Excluded_Class=\u5e38\u99d0\u30d5\u30a3\u30fc\u30eb\u30c9 {1} \u306f\u3001\u9664\u5916\u3055\u308c\u305f\u30af\u30e9\u30b9 {0} \u3092\u4f7f\u7528\u3057\u307e\u3059\u3002 doclet.Serialization.Nonexcluded_Class=\u5e38\u99d0\u30d5\u30a3\u30fc\u30eb\u30c9 {1} \u306f\u3001\u975e\u8868\u793a\u306e\u3001\u542b\u307e\u308c\u306a\u3044\u30af\u30e9\u30b9 {0} \u3092\u4f7f\u7528\u3057\u307e\u3059\u3002 -doclet.usage=\u6a19\u6e96\u306e doclet \u306b\u3088\u308a\u63d0\u4f9b\u3055\u308c\u308b\u3082\u306e:\n\ - -d \u51fa\u529b\u30d5\u30a1\u30a4\u30eb\u306e\u8ee2\u9001\u5148\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\n\ - -use \u30af\u30e9\u30b9\u3068\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u4f7f\u7528\u30da\u30fc\u30b8\u3092\u4f5c\u6210\u3059\u308b\n\ - -version @version \u30d1\u30e9\u30b0\u30e9\u30d5\u3092\u542b\u3081\u308b\n\ - -author @author \u30d1\u30e9\u30b0\u30e9\u30d5\u3092\u542b\u3081\u308b\n\ - -docfilessubdirs doc-file \u30b5\u30d6\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u518d\u5e30\u7684\u306b\u30b3\u30d4\u30fc\u3059\u308b\n\ - -splitindex 1 \u5b57\u3054\u3068\u306b 1 \u30d5\u30a1\u30a4\u30eb\u306b\u7d22\u5f15\u3092\u5206\u5272\u3059\u308b\n\ - -windowtitle \u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u7528\u306e\u30d6\u30e9\u30a6\u30b6\u30a6\u30a3\u30f3\u30c9\u30a6\u30bf\u30a4\u30c8\u30eb\n\ - -doctitle \u6982\u8981\u30da\u30fc\u30b8\u306b\u30bf\u30a4\u30c8\u30eb\u3092\u542b\u3081\u308b\n\ - -header \u5404\u30da\u30fc\u30b8\u306b\u30d8\u30c3\u30c0\u30fc\u3092\u542b\u3081\u308b\n\ - -footer \u5404\u30da\u30fc\u30b8\u306b\u30d5\u30c3\u30bf\u30fc\u3092\u542b\u3081\u308b\n\ - -top \u5404\u30da\u30fc\u30b8\u306b\u4e0a\u90e8\u30c6\u30ad\u30b9\u30c8\u3092\u542b\u3081\u308b\n\ - -bottom \u5404\u30da\u30fc\u30b8\u306b\u4e0b\u90e8\u30c6\u30ad\u30b9\u30c8\u3092\u542b\u3081\u308b\n\ - -link \u306b javadoc \u51fa\u529b\u3078\u306e\u30ea\u30f3\u30af\u3092\u4f5c\u6210\u3059\u308b\n\ - -linkoffline \u306b\u3042\u308b\u30d1\u30c3\u30b1\u30fc\u30b8\u30ea\u30b9\u30c8\u3092\u4f7f\u7528\u3057\u3066 \u306e docs \u306b\u30ea\u30f3\u30af\u3059\u308b\n\ - -excludedocfilessubdir :.. \u6307\u5b9a\u3055\u308c\u305f\u540d\u524d\u306e doc-files \u30b5\u30d6\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u3059\u3079\u3066\u9664\u5916\u3059\u308b\n\ - -group :.. \u6307\u5b9a\u3059\u308b\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u6982\u8981\u30da\u30fc\u30b8\u306b\u304a\u3044\u3066\u30b0\u30eb\u30fc\u30d7\u5316\u3059\u308b\n\ - -nocomment \u8a18\u8ff0\u304a\u3088\u3073\u30bf\u30b0\u3092\u6291\u5236\u3057\u3066\u5ba3\u8a00\u3060\u3051\u3092\u751f\u6210\u3059\u308b\n\ - -nodeprecated @deprecated \u60c5\u5831\u3092\u9664\u5916\u3059\u308b\n\ - -noqualifier ::... \u51fa\u529b\u304b\u3089\u4fee\u98fe\u5b50\u306e\u30ea\u30b9\u30c8\u3092\u9664\u5916\u3059\u308b\n\ - -nosince @since \u60c5\u5831\u3092\u9664\u5916\u3059\u308b\n\ - -notimestamp \u975e\u8868\u793a\u306e\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u3092\u9664\u5916\u3059\u308b\n\ - -nodeprecatedlist \u975e\u63a8\u5968 \u306e\u30ea\u30b9\u30c8\u3092\u751f\u6210\u3057\u306a\u3044\n\ - -notree \u30af\u30e9\u30b9\u968e\u5c64\u3092\u751f\u6210\u3057\u306a\u3044\n\ - -noindex \u7d22\u5f15\u3092\u751f\u6210\u3057\u306a\u3044\n\ - -nohelp \u30d8\u30eb\u30d7\u30ea\u30f3\u30af\u3092\u751f\u6210\u3057\u306a\u3044\n\ - -nonavbar \u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u30d0\u30fc\u3092\u751f\u6210\u3057\u306a\u3044\n\ - -serialwarn @serial \u30bf\u30b0\u306b\u95a2\u3059\u308b\u8b66\u544a\u3092\u751f\u6210\u3059\u308b\n\ - -tag ::
\u5358\u4e00\u306e\u5f15\u6570\u3092\u6301\u3064\u30ab\u30b9\u30bf\u30e0\u30bf\u30b0\u3092\u6307\u5b9a\u3059\u308b\n\ - -taglet \u30bf\u30b0\u30ec\u30c3\u30c8\u306e\u5b8c\u5168\u4fee\u98fe\u540d\u3092\u767b\u9332\u3059\u308b\n\ - -tagletpath \u30bf\u30b0\u30ec\u30c3\u30c8\u306e\u30d1\u30b9\n\ - -charset \u751f\u6210\u3055\u308c\u308b\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u30af\u30ed\u30b9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067\u306e\u6587\u5b57\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\n\ - -helpfile \u30d8\u30eb\u30d7\u30ea\u30f3\u30af\u306e\u30ea\u30f3\u30af\u5148\u30d5\u30a1\u30a4\u30eb\u3092\u542b\u3081\u308b\n\ - -linksource HTML \u5f62\u5f0f\u3067\u30bd\u30fc\u30b9\u3092\u751f\u6210\u3059\u308b\n\ - -sourcetab \u30bd\u30fc\u30b9\u5185\u306e\u30bf\u30d6\u306e\u7a7a\u767d\u6587\u5b57\u306e\u6570\u3092\u6307\u5b9a\u3059\u308b\n\ - -keywords HTML \u306e meta \u30bf\u30b0\u306b\u3001\u30d1\u30c3\u30b1\u30fc\u30b8\u3001\u30af\u30e9\u30b9\u3001\u304a\u3088\u3073\u30e1\u30f3\u30d0\u30fc\u306e\u60c5\u5831\u3092\u542b\u3081\u308b\n\ - -stylesheetfile \u751f\u6210\u3055\u308c\u305f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u30b9\u30bf\u30a4\u30eb\u5909\u66f4\u7528\u30d5\u30a1\u30a4\u30eb\n\ - -docencoding \u51fa\u529b\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u540d +doclet.usage=\u6a19\u6e96\u306e doclet \u306b\u3088\u308a\u63d0\u4f9b\u3055\u308c\u308b\u3082\u306e:\n-d \u51fa\u529b\u30d5\u30a1\u30a4\u30eb\u306e\u8ee2\u9001\u5148\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\n-use \u30af\u30e9\u30b9\u3068\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u4f7f\u7528\u30da\u30fc\u30b8\u3092\u4f5c\u6210\u3059\u308b\n-version @version \u30d1\u30e9\u30b0\u30e9\u30d5\u3092\u542b\u3081\u308b\n-author @author \u30d1\u30e9\u30b0\u30e9\u30d5\u3092\u542b\u3081\u308b\n-docfilessubdirs doc-file \u30b5\u30d6\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u518d\u5e30\u7684\u306b\u30b3\u30d4\u30fc\u3059\u308b\n-splitindex 1 \u5b57\u3054\u3068\u306b 1 \u30d5\u30a1\u30a4\u30eb\u306b\u7d22\u5f15\u3092\u5206\u5272\u3059\u308b\n-windowtitle \u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u7528\u306e\u30d6\u30e9\u30a6\u30b6\u30a6\u30a3\u30f3\u30c9\u30a6\u30bf\u30a4\u30c8\u30eb\n-doctitle \u6982\u8981\u30da\u30fc\u30b8\u306b\u30bf\u30a4\u30c8\u30eb\u3092\u542b\u3081\u308b\n-header \u5404\u30da\u30fc\u30b8\u306b\u30d8\u30c3\u30c0\u30fc\u3092\u542b\u3081\u308b\n-footer \u5404\u30da\u30fc\u30b8\u306b\u30d5\u30c3\u30bf\u30fc\u3092\u542b\u3081\u308b\n-top \u5404\u30da\u30fc\u30b8\u306b\u4e0a\u90e8\u30c6\u30ad\u30b9\u30c8\u3092\u542b\u3081\u308b\n-bottom \u5404\u30da\u30fc\u30b8\u306b\u4e0b\u90e8\u30c6\u30ad\u30b9\u30c8\u3092\u542b\u3081\u308b\n-link \u306b javadoc \u51fa\u529b\u3078\u306e\u30ea\u30f3\u30af\u3092\u4f5c\u6210\u3059\u308b\n-linkoffline \u306b\u3042\u308b\u30d1\u30c3\u30b1\u30fc\u30b8\u30ea\u30b9\u30c8\u3092\u4f7f\u7528\u3057\u3066 \u306e docs \u306b\u30ea\u30f3\u30af\u3059\u308b\n-excludedocfilessubdir :.. \u6307\u5b9a\u3055\u308c\u305f\u540d\u524d\u306e doc-files \u30b5\u30d6\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u3059\u3079\u3066\u9664\u5916\u3059\u308b\n-group :.. \u6307\u5b9a\u3059\u308b\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u6982\u8981\u30da\u30fc\u30b8\u306b\u304a\u3044\u3066\u30b0\u30eb\u30fc\u30d7\u5316\u3059\u308b\n-nocomment \u8a18\u8ff0\u304a\u3088\u3073\u30bf\u30b0\u3092\u6291\u5236\u3057\u3066\u5ba3\u8a00\u3060\u3051\u3092\u751f\u6210\u3059\u308b\n-nodeprecated @deprecated \u60c5\u5831\u3092\u9664\u5916\u3059\u308b\n-noqualifier ::... \u51fa\u529b\u304b\u3089\u4fee\u98fe\u5b50\u306e\u30ea\u30b9\u30c8\u3092\u9664\u5916\u3059\u308b\n-nosince @since \u60c5\u5831\u3092\u9664\u5916\u3059\u308b\n-notimestamp \u975e\u8868\u793a\u306e\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u3092\u9664\u5916\u3059\u308b\n-nodeprecatedlist \u975e\u63a8\u5968 \u306e\u30ea\u30b9\u30c8\u3092\u751f\u6210\u3057\u306a\u3044\n-notree \u30af\u30e9\u30b9\u968e\u5c64\u3092\u751f\u6210\u3057\u306a\u3044\n-noindex \u7d22\u5f15\u3092\u751f\u6210\u3057\u306a\u3044\n-nohelp \u30d8\u30eb\u30d7\u30ea\u30f3\u30af\u3092\u751f\u6210\u3057\u306a\u3044\n-nonavbar \u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u30d0\u30fc\u3092\u751f\u6210\u3057\u306a\u3044\n-serialwarn @serial \u30bf\u30b0\u306b\u95a2\u3059\u308b\u8b66\u544a\u3092\u751f\u6210\u3059\u308b\n-tag ::
\u5358\u4e00\u306e\u5f15\u6570\u3092\u6301\u3064\u30ab\u30b9\u30bf\u30e0\u30bf\u30b0\u3092\u6307\u5b9a\u3059\u308b\n-taglet \u30bf\u30b0\u30ec\u30c3\u30c8\u306e\u5b8c\u5168\u4fee\u98fe\u540d\u3092\u767b\u9332\u3059\u308b\n-tagletpath \u30bf\u30b0\u30ec\u30c3\u30c8\u306e\u30d1\u30b9\n-charset \u751f\u6210\u3055\u308c\u308b\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u30af\u30ed\u30b9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067\u306e\u6587\u5b57\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\n-helpfile \u30d8\u30eb\u30d7\u30ea\u30f3\u30af\u306e\u30ea\u30f3\u30af\u5148\u30d5\u30a1\u30a4\u30eb\u3092\u542b\u3081\u308b\n-linksource HTML \u5f62\u5f0f\u3067\u30bd\u30fc\u30b9\u3092\u751f\u6210\u3059\u308b\n-sourcetab \u30bd\u30fc\u30b9\u5185\u306e\u30bf\u30d6\u306e\u7a7a\u767d\u6587\u5b57\u306e\u6570\u3092\u6307\u5b9a\u3059\u308b\n-keywords HTML \u306e meta \u30bf\u30b0\u306b\u3001\u30d1\u30c3\u30b1\u30fc\u30b8\u3001\u30af\u30e9\u30b9\u3001\u304a\u3088\u3073\u30e1\u30f3\u30d0\u30fc\u306e\u60c5\u5831\u3092\u542b\u3081\u308b\n-stylesheetfile \u751f\u6210\u3055\u308c\u305f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u30b9\u30bf\u30a4\u30eb\u5909\u66f4\u7528\u30d5\u30a1\u30a4\u30eb\n-docencoding \u51fa\u529b\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u540d diff --git a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/resources/standard_zh_CN.properties b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/resources/standard_zh_CN.properties index 31d1cccf0f9..667fa978061 100644 --- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/resources/standard_zh_CN.properties +++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/resources/standard_zh_CN.properties @@ -83,6 +83,17 @@ doclet.Deprecated_Constructors=\u5df2\u8fc7\u65f6\u7684\u6784\u9020\u65b9\u6cd5 doclet.Deprecated_Methods=\u5df2\u8fc7\u65f6\u7684\u65b9\u6cd5 doclet.Deprecated_Enum_Constants=\u5df2\u8fc7\u65f6\u7684\u679a\u4e3e\u5e38\u91cf doclet.Deprecated_Annotation_Type_Members=\u5df2\u8fc7\u65f6\u7684\u6ce8\u91ca\u7c7b\u578b\u5143\u7d20 +doclet.deprecated_classes=\u5df2\u8fc7\u65f6\u7684\u7c7b +doclet.deprecated_enums=\u5df2\u8fc7\u65f6\u7684\u679a\u4e3e +doclet.deprecated_interfaces=\u5df2\u8fc7\u65f6\u7684\u63a5\u53e3 +doclet.deprecated_exceptions=\u5df2\u8fc7\u65f6\u7684\u5f02\u5e38 +doclet.deprecated_annotation_types=\u5df2\u8fc7\u65f6\u7684\u6ce8\u91ca\u7c7b\u578b +doclet.deprecated_errors=\u5df2\u8fc7\u65f6\u7684\u9519\u8bef +doclet.deprecated_fields=\u5df2\u8fc7\u65f6\u7684\u5b57\u6bb5 +doclet.deprecated_constructors=\u5df2\u8fc7\u65f6\u7684\u6784\u9020\u51fd\u6570 +doclet.deprecated_methods=\u5df2\u8fc7\u65f6\u7684\u65b9\u6cd5 +doclet.deprecated_enum_constants=\u5df2\u8fc7\u65f6\u7684\u679a\u4e3e\u5e38\u91cf +doclet.deprecated_annotation_type_members=\u5df2\u8fc7\u65f6\u7684\u6ce8\u91ca\u7c7b\u578b\u5143\u7d20 doclet.Frame_Output=\u6846\u67b6\u8f93\u51fa doclet.Docs_generated_by_Javadoc=\u7531 Javadoc \u751f\u6210\u7684\u6587\u6863\u3002 doclet.Generated_Docs_Untitled=\u751f\u6210\u7684\u6587\u6863\uff08\u65e0\u6807\u9898\uff09 @@ -171,6 +182,7 @@ doclet.Style_line_8=\u5de6\u4fa7\u7684\u6846\u67b6\u5217\u8868\u4e2d\u4f7f\u7528 doclet.Style_line_9=\u6846\u67b6\u4e2d\u5c0f\u53f7 sans-serif \u5b57\u4f53\u7684\u793a\u4f8b doclet.Style_line_10=\u5bfc\u822a\u680f\u5b57\u4f53\u548c\u989c\u8272 doclet.Style_line_11=\u6df1\u84dd\u8272 +doclet.Style_line_12=\u8868\u683c\u6807\u9898\u6837\u5f0f doclet.ClassUse_Packages.that.use.0=\u4f7f\u7528 {0} \u7684\u8f6f\u4ef6\u5305 doclet.ClassUse_Uses.of.0.in.1={1} \u4e2d {0} \u7684\u4f7f\u7528 doclet.ClassUse_Classes.in.0.used.by.1={1} \u4f7f\u7528\u7684 {0} \u4e2d\u7684\u7c7b @@ -206,44 +218,7 @@ doclet.Groupname_already_used=\u5728 -group \u9009\u9879\u4e2d\uff0cgroupname \u doclet.Same_package_name_used=\u8f6f\u4ef6\u5305\u540d\u79f0\u5f62\u5f0f\u4f7f\u7528\u4e86\u4e24\u6b21\uff1a {0} doclet.Serialization.Excluded_Class=\u975e\u77ac\u6001\u5b57\u6bb5 {1} \u4f7f\u7528\u4e86\u6392\u9664\u7684\u7c7b {0}\u3002 doclet.Serialization.Nonexcluded_Class=\u975e\u77ac\u6001\u5b57\u6bb5 {1} \u4f7f\u7528\u4e86\u9690\u85cf\u7684\u3001\u672a\u5305\u542b\u7684\u7c7b {0}\u3002 -doclet.usage=\u901a\u8fc7\u6807\u51c6 doclet \u63d0\u4f9b:\n\ --d \u8f93\u51fa\u6587\u4ef6\u7684\u76ee\u6807\u76ee\u5f55\n\ --use \u521b\u5efa\u7c7b\u548c\u5305\u7528\u6cd5\u9875\u9762\n\ --version \u5305\u542b @version \u6bb5\n\ --author \u5305\u542b @author \u6bb5\n\ --docfilessubdirs \u9012\u5f52\u590d\u5236\u6587\u6863\u6587\u4ef6\u5b50\u76ee\u5f55\n\ --splitindex \u5c06\u7d22\u5f15\u5206\u4e3a\u6bcf\u4e2a\u5b57\u6bcd\u5bf9\u5e94\u4e00\u4e2a\u6587\u4ef6\n\ --windowtitle \u6587\u6863\u7684\u6d4f\u89c8\u5668\u7a97\u53e3\u6807\u9898\n\ --doctitle \u5305\u542b\u6982\u8ff0\u9875\u9762\u7684\u6807\u9898\n\ --header \u5305\u542b\u6bcf\u4e2a\u9875\u9762\u7684\u9875\u7709\u6587\u672c\n\ --footer \u5305\u542b\u6bcf\u4e2a\u9875\u9762\u7684\u9875\u811a\u6587\u672c\n\ --top \u5305\u542b\u6bcf\u4e2a\u9875\u9762\u7684\u9876\u90e8\u6587\u672c\n\ --bottom \u5305\u542b\u6bcf\u4e2a\u9875\u9762\u7684\u5e95\u90e8\u6587\u672c\n\ --link \u521b\u5efa\u6307\u5411\u4f4d\u4e8e \u7684 javadoc \u8f93\u51fa\u7684\u94fe\u63a5\n\ --linkoffline \u5229\u7528\u4f4d\u4e8e \u7684\u5305\u5217\u8868\u94fe\u63a5\u81f3\u4f4d\u4e8e \u7684\u6587\u6863\n\ --excludedocfilessubdir :..\u6392\u9664\u5177\u6709\u7ed9\u5b9a\u540d\u79f0\u7684\u6240\u6709\u6587\u6863\u6587\u4ef6\u5b50\u76ee\u5f55\u3002\n\ --group :..\u5728\u6982\u8ff0\u9875\u9762\u4e2d\uff0c\u5c06\u6307\u5b9a\u7684\u5305\u5206\u7ec4\n\ --nocomment \u4e0d\u751f\u6210\u63cf\u8ff0\u548c\u6807\u8bb0\uff0c\u53ea\u751f\u6210\u58f0\u660e\u3002\n\ --nodeprecated \u4e0d\u5305\u542b @deprecated \u4fe1\u606f\n\ --noqualifier ::...\u8f93\u51fa\u4e2d\u4e0d\u5305\u62ec\u6307\u5b9a\u9650\u5b9a\u7b26\u7684\u5217\u8868\u3002\n\ --nosince \u4e0d\u5305\u542b @since \u4fe1\u606f\n\ --notimestamp \u4e0d\u5305\u542b\u9690\u85cf\u65f6\u95f4\u6233\n\ --nodeprecatedlist \u4e0d\u751f\u6210\u5df2\u8fc7\u65f6\u7684\u5217\u8868\n\ --notree \u4e0d\u751f\u6210\u7c7b\u5206\u5c42\u7ed3\u6784\n\ --noindex \u4e0d\u751f\u6210\u7d22\u5f15\n\ --nohelp \u4e0d\u751f\u6210\u5e2e\u52a9\u94fe\u63a5\n\ --nonavbar \u4e0d\u751f\u6210\u5bfc\u822a\u680f\n\ --serialwarn \u751f\u6210\u6709\u5173 @serial \u6807\u8bb0\u7684\u8b66\u544a\n\ --tag ::
\u6307\u5b9a\u5355\u4e2a\u53c2\u6570\u81ea\u5b9a\u4e49\u6807\u8bb0\n\ --taglet \u8981\u6ce8\u518c\u7684 Taglet \u7684\u5168\u9650\u5b9a\u540d\u79f0\n\ --tagletpath Taglet \u7684\u8def\u5f84\n\ --charset \u7528\u4e8e\u8de8\u5e73\u53f0\u67e5\u770b\u751f\u6210\u7684\u6587\u6863\u7684\u5b57\u7b26\u96c6\u3002\n\ --helpfile \u5305\u542b\u5e2e\u52a9\u94fe\u63a5\u6240\u94fe\u63a5\u5230\u7684\u6587\u4ef6\n\ --linksource \u4ee5 HTML \u683c\u5f0f\u751f\u6210\u6e90\u6587\u4ef6\n\ --sourcetab \u6307\u5b9a\u6e90\u4e2d\u6bcf\u4e2a\u5236\u8868\u7b26\u5360\u636e\u7684\u7a7a\u683c\u6570\n\ --keywords \u4f7f\u5305\u3001\u7c7b\u548c\u6210\u5458\u4fe1\u606f\u9644\u5e26 HTML \u5143\u6807\u8bb0\n\ --stylesheetfile \u7528\u4e8e\u66f4\u6539\u751f\u6210\u6587\u6863\u7684\u6837\u5f0f\u7684\u6587\u4ef6\n\ --docencoding \u8f93\u51fa\u7f16\u7801\u540d\u79f0 +doclet.usage=\u901a\u8fc7\u6807\u51c6 doclet \u63d0\u4f9b:\n-d \u8f93\u51fa\u6587\u4ef6\u7684\u76ee\u6807\u76ee\u5f55\n-use \u521b\u5efa\u7c7b\u548c\u5305\u7528\u6cd5\u9875\u9762\n-version \u5305\u542b @version \u6bb5\n-author \u5305\u542b @author \u6bb5\n-docfilessubdirs \u9012\u5f52\u590d\u5236\u6587\u6863\u6587\u4ef6\u5b50\u76ee\u5f55\n-splitindex \u5c06\u7d22\u5f15\u5206\u4e3a\u6bcf\u4e2a\u5b57\u6bcd\u5bf9\u5e94\u4e00\u4e2a\u6587\u4ef6\n-windowtitle \u6587\u6863\u7684\u6d4f\u89c8\u5668\u7a97\u53e3\u6807\u9898\n-doctitle \u5305\u542b\u6982\u8ff0\u9875\u9762\u7684\u6807\u9898\n-header \u5305\u542b\u6bcf\u4e2a\u9875\u9762\u7684\u9875\u7709\u6587\u672c\n-footer \u5305\u542b\u6bcf\u4e2a\u9875\u9762\u7684\u9875\u811a\u6587\u672c\n-top \u5305\u542b\u6bcf\u4e2a\u9875\u9762\u7684\u9876\u90e8\u6587\u672c\n-bottom \u5305\u542b\u6bcf\u4e2a\u9875\u9762\u7684\u5e95\u90e8\u6587\u672c\n-link \u521b\u5efa\u6307\u5411\u4f4d\u4e8e \u7684 javadoc \u8f93\u51fa\u7684\u94fe\u63a5\n-linkoffline \u5229\u7528\u4f4d\u4e8e \u7684\u5305\u5217\u8868\u94fe\u63a5\u81f3\u4f4d\u4e8e \u7684\u6587\u6863\n-excludedocfilessubdir :..\u6392\u9664\u5177\u6709\u7ed9\u5b9a\u540d\u79f0\u7684\u6240\u6709\u6587\u6863\u6587\u4ef6\u5b50\u76ee\u5f55\u3002\n-group :..\u5728\u6982\u8ff0\u9875\u9762\u4e2d\uff0c\u5c06\u6307\u5b9a\u7684\u5305\u5206\u7ec4\n-nocomment \u4e0d\u751f\u6210\u63cf\u8ff0\u548c\u6807\u8bb0\uff0c\u53ea\u751f\u6210\u58f0\u660e\u3002\n-nodeprecated \u4e0d\u5305\u542b @deprecated \u4fe1\u606f\n-noqualifier ::...\u8f93\u51fa\u4e2d\u4e0d\u5305\u62ec\u6307\u5b9a\u9650\u5b9a\u7b26\u7684\u5217\u8868\u3002\n-nosince \u4e0d\u5305\u542b @since \u4fe1\u606f\n-notimestamp \u4e0d\u5305\u542b\u9690\u85cf\u65f6\u95f4\u6233\n-nodeprecatedlist \u4e0d\u751f\u6210\u5df2\u8fc7\u65f6\u7684\u5217\u8868\n-notree \u4e0d\u751f\u6210\u7c7b\u5206\u5c42\u7ed3\u6784\n-noindex \u4e0d\u751f\u6210\u7d22\u5f15\n-nohelp \u4e0d\u751f\u6210\u5e2e\u52a9\u94fe\u63a5\n-nonavbar \u4e0d\u751f\u6210\u5bfc\u822a\u680f\n-serialwarn \u751f\u6210\u6709\u5173 @serial \u6807\u8bb0\u7684\u8b66\u544a\n-tag ::
\u6307\u5b9a\u5355\u4e2a\u53c2\u6570\u81ea\u5b9a\u4e49\u6807\u8bb0\n-taglet \u8981\u6ce8\u518c\u7684 Taglet \u7684\u5168\u9650\u5b9a\u540d\u79f0\n-tagletpath Taglet \u7684\u8def\u5f84\n-charset \u7528\u4e8e\u8de8\u5e73\u53f0\u67e5\u770b\u751f\u6210\u7684\u6587\u6863\u7684\u5b57\u7b26\u96c6\u3002\n-helpfile <\u6587\u4ef6> \u5305\u542b\u5e2e\u52a9\u94fe\u63a5\u6240\u94fe\u63a5\u5230\u7684\u6587\u4ef6\n-linksource \u4ee5 HTML \u683c\u5f0f\u751f\u6210\u6e90\u6587\u4ef6\n-sourcetab \u6307\u5b9a\u6e90\u4e2d\u6bcf\u4e2a\u5236\u8868\u7b26\u5360\u636e\u7684\u7a7a\u683c\u6570\n-keywords \u4f7f\u5305\u3001\u7c7b\u548c\u6210\u5458\u4fe1\u606f\u9644\u5e26 HTML \u5143\u6807\u8bb0\n-stylesheetfile <\u8def\u5f84> \u7528\u4e8e\u66f4\u6539\u751f\u6210\u6587\u6863\u7684\u6837\u5f0f\u7684\u6587\u4ef6\n-docencoding <\u540d\u79f0> \u8f93\u51fa\u7f16\u7801\u540d\u79f0 diff --git a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets_ja.properties b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets_ja.properties index d508f48c2a8..4ab694fea9f 100644 --- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets_ja.properties +++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets_ja.properties @@ -11,10 +11,8 @@ doclet.Class_0_implements_serializable=Class {0} implements Serializable doclet.Class_0_extends_implements_serializable=Class {0} extends {1} implements Serializable doclet.Option_conflict=\u30aa\u30d7\u30b7\u30e7\u30f3 {0} \u304c {1} \u3068\u77db\u76fe\u3057\u307e\u3059 doclet.Option_reuse=\u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u518d\u4f7f\u7528\u3055\u308c\u3066\u3044\u307e\u3059: {0} -doclet.exception_encountered= {0} \u3092\u691c\u51fa \n\ -\t\u30d5\u30a1\u30a4\u30eb\u306e\u4f5c\u6210\u4e2d: {1} -doclet.perform_copy_exception_encountered= \u30b3\u30d4\u30fc\u5b9f\u884c\u4e2d\u306b {0} \u3092 \n\ -\u691c\u51fa\u3057\u307e\u3057\u305f\u3002 +doclet.exception_encountered= {0} \u3092\u691c\u51fa \n\t\u30d5\u30a1\u30a4\u30eb\u306e\u4f5c\u6210\u4e2d: {1} +doclet.perform_copy_exception_encountered= \u30b3\u30d4\u30fc\u5b9f\u884c\u4e2d\u306b {0} \u3092 \n\u691c\u51fa\u3057\u307e\u3057\u305f\u3002 doclet.File_not_found=\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093: {0} doclet.Copy_Overwrite_warning=\u30d5\u30a1\u30a4\u30eb {0} \u306f\u540c\u3058\u540d\u524d\u306e\u30d5\u30a1\u30a4\u30eb\u304c\u3042\u308b\u306e\u3067 {1} \u306b\u30b3\u30d4\u30fc\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f... doclet.Copying_File_0_To_Dir_1=\u30d5\u30a1\u30a4\u30eb {0} \u3092\u30c7\u30a3\u30ec\u30af\u30c8\u30ea {1} \u306b\u30b3\u30d4\u30fc\u4e2d... @@ -81,6 +79,8 @@ doclet.AnnotationTypes=\u6ce8\u91c8\u578b doclet.Exceptions=\u4f8b\u5916 doclet.Errors=\u30a8\u30e9\u30fc doclet.Classes=\u30af\u30e9\u30b9 +doclet.Packages=\u30d1\u30c3\u30b1\u30fc\u30b8 +doclet.packages=\u30d1\u30c3\u30b1\u30fc\u30b8 doclet.All_Classes=\u3059\u3079\u3066\u306e\u30af\u30e9\u30b9 doclet.All_Superinterfaces=\u3059\u3079\u3066\u306e\u30b9\u30fc\u30d1\u30fc\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9: doclet.All_Implemented_Interfaces=\u3059\u3079\u3066\u306e\u5b9f\u88c5\u3055\u308c\u305f\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9: @@ -91,14 +91,20 @@ doclet.Interface=\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9 doclet.Class=\u30af\u30e9\u30b9 doclet.AnnotationType=\u6ce8\u91c8\u578b doclet.annotationtype=\u6ce8\u91c8\u578b +doclet.annotationtypes=\u6ce8\u91c8\u578b doclet.Enum=\u5217\u6319\u578b doclet.enum=\u5217\u6319 +doclet.enums=\u5217\u6319\u578b doclet.interface=\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9 +doclet.interfaces=\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9 doclet.class=\u30af\u30e9\u30b9 +doclet.classes=\u30af\u30e9\u30b9 doclet.Error=\u30a8\u30e9\u30fc doclet.error=\u30a8\u30e9\u30fc +doclet.errors=\u30a8\u30e9\u30fc doclet.Exception=\u4f8b\u5916 doclet.exception=\u4f8b\u5916 +doclet.exceptions=\u4f8b\u5916 doclet.extended_by=\u4e0a\u4f4d\u3092\u62e1\u5f35 doclet.extends=extends doclet.Package_private=(package private) @@ -124,24 +130,34 @@ doclet.value_tag_invalid_reference={0} (@value \u30bf\u30b0\u306b\u3088\u308a\u5 doclet.value_tag_invalid_constant=@value \u30bf\u30b0 ({0} \u3092\u53c2\u7167\u3057\u3066\u3044\u308b) \u306f\u5b9a\u6570\u5185\u3067\u306e\u307f\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002 doclet.dest_dir_create=\u5b9b\u5148\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4f5c\u6210\u4e2d: "{0}" doclet.in={1} \u306e {0} +doclet.Use_Table_Summary=\u8868\u3001\u4e00\u89a7 {0}\u3001\u8aac\u660e\u3092\u4f7f\u7528 +doclet.Constants_Table_Summary={0} \u8868\u3001\u5b9a\u6570\u30d5\u30a3\u30fc\u30eb\u30c9\u4e00\u89a7\u3001\u5024 +doclet.Member_Table_Summary={0} \u8868\u3001\u4e00\u89a7 {1}\u3001\u8aac\u660e +doclet.fields=\u30d5\u30a3\u30fc\u30eb\u30c9 +doclet.constructors=\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf +doclet.methods=\u30e1\u30bd\u30c3\u30c9 +doclet.annotation_type_optional_members=\u4efb\u610f\u8981\u7d20 +doclet.annotation_type_required_members=\u5fc5\u9808\u8981\u7d20 +doclet.enum_constants=\u5217\u6319\u578b\u5b9a\u6570 +doclet.nested_classes=\u5165\u308c\u5b50\u306e\u30af\u30e9\u30b9 +doclet.subclasses=\u30b5\u30d6\u30af\u30e9\u30b9 +doclet.subinterfaces=\u30b5\u30d6\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9 +doclet.Modifier=\u4fee\u98fe\u5b50 +doclet.Type=\u30bf\u30a4\u30d7 +doclet.Field=\u30d5\u30a3\u30fc\u30eb\u30c9 +doclet.Constructor=\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf +doclet.Method=\u30e1\u30bd\u30c3\u30c9 +doclet.Annotation_Type_Optional_Member=\u4efb\u610f\u8981\u7d20 +doclet.Annotation_Type_Required_Member=\u5fc5\u9808\u8981\u7d20 +doclet.Annotation_Type_Member=\u6ce8\u91c8\u578b\u8981\u7d20 +doclet.Enum_Constant=\u5217\u6319\u578b\u5b9a\u6570 +doclet.Class=\u30af\u30e9\u30b9 +doclet.Description=\u8aac\u660e +doclet.ConstantField=\u5b9a\u6570\u30d5\u30a3\u30fc\u30eb\u30c9 +doclet.Value=\u5024 +doclet.0_and_1={0} \u304a\u3088\u3073 {1} #Documentation for Enums -doclet.enum_values_doc=\n\ - \u3053\u306e\u5217\u6319\u578b\u306e\u5b9a\u6570\u3092\u542b\u3080\u914d\u5217\u3092\u5ba3\u8a00\u3055\u308c\u3066\u3044\u308b\u9806\u5e8f\u3067\u8fd4\u3057\u307e\u3059\u3002\n\ - \u3053\u306e\u30e1\u30bd\u30c3\u30c9\u306f\u6b21\u306e\u3088\u3046\u306b\u3057\u3066\u5b9a\u6570\u3092\u53cd\u5fa9\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3067\u304d\u307e\u3059:\n\ -
\n\
- for ({0} c : {0}.values())\n\
-     System.out.println(c);\n\
- 
\n\ - @return \u3053\u306e\u5217\u6319\u578b\u306e\u5b9a\u6570\u3092\u5ba3\u8a00\u3055\u308c\u3066\u3044\u308b\u9806\u5e8f\u3067\u542b\u3080\u914d\u5217 +doclet.enum_values_doc=\n\u3053\u306e\u5217\u6319\u578b\u306e\u5b9a\u6570\u3092\u542b\u3080\u914d\u5217\u3092\u5ba3\u8a00\u3055\u308c\u3066\u3044\u308b\u9806\u5e8f\u3067\u8fd4\u3057\u307e\u3059\u3002\n\u3053\u306e\u30e1\u30bd\u30c3\u30c9\u306f\u6b21\u306e\u3088\u3046\u306b\u3057\u3066\u5b9a\u6570\u3092\u53cd\u5fa9\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3067\u304d\u307e\u3059:\n
\nfor ({0} c : {0}.values())\n    System.out.println(c);\n
\n@return \u3053\u306e\u5217\u6319\u578b\u306e\u5b9a\u6570\u3092\u5ba3\u8a00\u3055\u308c\u3066\u3044\u308b\u9806\u5e8f\u3067\u542b\u3080\u914d\u5217 -doclet.enum_valueof_doc=\n\ - \u6307\u5b9a\u3057\u305f\u540d\u524d\u3092\u6301\u3064\u3053\u306e\u578b\u306e\u5217\u6319\u578b\u5b9a\u6570\u3092\u8fd4\u3057\u307e\u3059\u3002\n\ - \u6587\u5b57\u5217\u306f\u3001\u3053\u306e\u578b\u306e\u5217\u6319\u578b\u5b9a\u6570\u3092\u5ba3\u8a00\u3059\u308b\u306e\u306b\u4f7f\u7528\u3057\u305f\u8b58\u5225\u5b50\u3068\u53b3\u5bc6\u306b\n\ - \u4e00\u81f4\u3057\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 (\u4f59\u5206\u306a\u7a7a\u767d\u6587\u5b57\u3092\u542b\u3081\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093)\u3002\n\ - \n\ - @param name \u8fd4\u3055\u308c\u308b\u5217\u6319\u578b\u5b9a\u6570\u306e\u540d\u524d\n\ - @return \u6307\u5b9a\u3055\u308c\u305f\u540d\u524d\u3092\u6301\u3064\u5217\u6319\u578b\u5b9a\u6570\n\ - @throws IllegalArgumentException \u6307\u5b9a\u3055\u308c\u305f\u540d\u524d\u3092\u6301\u3064\u5b9a\u6570\u3092\n\ - \u3053\u306e\u5217\u6319\u578b\u304c\u6301\u3063\u3066\u3044\u306a\u3044\u5834\u5408\n\ - @throws NullPointerException \u5f15\u6570\u304c null \u306e\u5834\u5408 +doclet.enum_valueof_doc=\n\u6307\u5b9a\u3057\u305f\u540d\u524d\u3092\u6301\u3064\u3053\u306e\u578b\u306e\u5217\u6319\u578b\u5b9a\u6570\u3092\u8fd4\u3057\u307e\u3059\u3002\n\u6587\u5b57\u5217\u306f\u3001\u3053\u306e\u578b\u306e\u5217\u6319\u578b\u5b9a\u6570\u3092\u5ba3\u8a00\u3059\u308b\u306e\u306b\u4f7f\u7528\u3057\u305f\u8b58\u5225\u5b50\u3068\u53b3\u5bc6\u306b\n\u4e00\u81f4\u3057\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 (\u4f59\u5206\u306a\u7a7a\u767d\u6587\u5b57\u3092\u542b\u3081\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093)\u3002\n\n@param name \u8fd4\u3055\u308c\u308b\u5217\u6319\u578b\u5b9a\u6570\u306e\u540d\u524d\n@return \u6307\u5b9a\u3055\u308c\u305f\u540d\u524d\u3092\u6301\u3064\u5217\u6319\u578b\u5b9a\u6570\n@throws IllegalArgumentException \u6307\u5b9a\u3055\u308c\u305f\u540d\u524d\u3092\u6301\u3064\u5b9a\u6570\u3092\n\u3053\u306e\u5217\u6319\u578b\u304c\u6301\u3063\u3066\u3044\u306a\u3044\u5834\u5408\n@throws NullPointerException \u5f15\u6570\u304c null \u306e\u5834\u5408 diff --git a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets_zh_CN.properties b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets_zh_CN.properties index 48e2377d6fe..4a238b7d57d 100644 --- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets_zh_CN.properties +++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets_zh_CN.properties @@ -11,10 +11,8 @@ doclet.Class_0_implements_serializable=\u7c7b {0} \u5b9e\u73b0 Serializable doclet.Class_0_extends_implements_serializable=\u7c7b {0} \u7ee7\u627f {1} \u5b9e\u73b0 Serializable doclet.Option_conflict=\u9009\u9879 {0} \u4e0e {1} \u51b2\u7a81 doclet.Option_reuse=\u91cd\u590d\u4f7f\u7528\u7684\u9009\u9879\uff1a {0} -doclet.exception_encountered= \u5c1d\u8bd5\u521b\u5efa\u6587\u4ef6 {1} \u65f6 \n\ -\t\u9047\u5230 {0} -doclet.perform_copy_exception_encountered= \u6267\u884c\u590d\u5236\u65f6 \n\ -\u9047\u5230{0} \u3002 +doclet.exception_encountered= \u5c1d\u8bd5\u521b\u5efa\u6587\u4ef6 {1} \u65f6 \n\t\u9047\u5230 {0} +doclet.perform_copy_exception_encountered= \u6267\u884c\u590d\u5236\u65f6 \n\u9047\u5230{0} \u3002 doclet.File_not_found=\u627e\u4e0d\u5230\u6587\u4ef6\uff1a {0} doclet.Copy_Overwrite_warning=\u672a\u5c06\u6587\u4ef6 {0} \u590d\u5236\u5230 {1}\uff0c\u56e0\u4e3a\u73b0\u6709\u6587\u4ef6\u5177\u6709\u76f8\u540c\u540d\u79f0... doclet.Copying_File_0_To_Dir_1=\u6b63\u5728\u5c06\u6587\u4ef6 {0} \u590d\u5236\u5230\u76ee\u5f55 {1}... @@ -81,6 +79,8 @@ doclet.AnnotationTypes=\u6ce8\u91ca\u7c7b\u578b doclet.Exceptions=\u5f02\u5e38 doclet.Errors=\u9519\u8bef doclet.Classes=\u7c7b +doclet.Packages=\u8f6f\u4ef6\u5305 +doclet.packages=\u8f6f\u4ef6\u5305 doclet.All_Classes=\u6240\u6709\u7c7b doclet.All_Superinterfaces=\u6240\u6709\u8d85\u7ea7\u63a5\u53e3\uff1a doclet.All_Implemented_Interfaces=\u6240\u6709\u5df2\u5b9e\u73b0\u7684\u63a5\u53e3\uff1a @@ -91,14 +91,20 @@ doclet.Interface=\u63a5\u53e3 doclet.Class=\u7c7b doclet.AnnotationType=\u6ce8\u91ca\u7c7b\u578b doclet.annotationtype=\u6ce8\u91ca\u7c7b\u578b +doclet.annotationtypes=\u6ce8\u91ca\u7c7b\u578b doclet.Enum=\u679a\u4e3e doclet.enum=\u679a\u4e3e +doclet.enums=\u679a\u4e3e doclet.interface=\u63a5\u53e3 +doclet.interfaces=\u63a5\u53e3 doclet.class=\u7c7b +doclet.classes=\u7c7b doclet.Error=\u9519\u8bef doclet.error=\u9519\u8bef +doclet.errors=\u9519\u8bef doclet.Exception=\u5f02\u5e38 doclet.exception=\u5f02\u5e38 +doclet.exceptions=\u5f02\u5e38 doclet.extended_by=\u7ee7\u627f\u8005 doclet.extends=\u7ee7\u627f doclet.Package_private=\uff08\u4e13\u7528\u8f6f\u4ef6\u5305\uff09 @@ -124,27 +130,34 @@ doclet.value_tag_invalid_reference={0}\uff08\u7531 @value \u6807\u8bb0\u5f15\u75 doclet.value_tag_invalid_constant=@value \u6807\u8bb0\uff08\u5f15\u7528 {0}\uff09\u53ea\u80fd\u5728\u5e38\u91cf\u4e2d\u4f7f\u7528\u3002 doclet.dest_dir_create=\u6b63\u5728\u521b\u5efa\u76ee\u6807\u76ee\u5f55\uff1a "{0}" doclet.in={1} \u4e2d\u7684 {0} +doclet.Use_Table_Summary=\u4f7f\u7528\u8868\u683c\uff0c\u5217\u51fa {0} \u548c\u8bf4\u660e +doclet.Constants_Table_Summary={0} \u8868\u683c\uff0c\u5217\u51fa\u5e38\u91cf\u5b57\u6bb5\u548c\u503c +doclet.Member_Table_Summary={0} \u8868\u683c\uff0c\u5217\u51fa {1} \u548c\u8bf4\u660e +doclet.fields=\u5b57\u6bb5 +doclet.constructors=\u6784\u9020\u51fd\u6570 +doclet.methods=\u65b9\u6cd5 +doclet.annotation_type_optional_members=\u53ef\u9009\u5143\u7d20 +doclet.annotation_type_required_members=\u5fc5\u9700\u5143\u7d20 +doclet.enum_constants=\u679a\u4e3e\u5e38\u91cf +doclet.nested_classes=\u5d4c\u5957\u7c7b +doclet.subclasses=\u5b50\u7c7b +doclet.subinterfaces=\u5b50\u63a5\u53e3 +doclet.Modifier=\u4fee\u9970\u7b26 +doclet.Type=\u7c7b\u578b +doclet.Field=\u5b57\u6bb5 +doclet.Constructor=\u6784\u9020\u51fd\u6570 +doclet.Method=\u65b9\u6cd5 +doclet.Annotation_Type_Optional_Member=\u53ef\u9009\u5143\u7d20 +doclet.Annotation_Type_Required_Member=\u5fc5\u9700\u5143\u7d20 +doclet.Annotation_Type_Member=\u6ce8\u91ca\u7c7b\u578b\u5143\u7d20 +doclet.Enum_Constant=\u679a\u4e3e\u5e38\u91cf +doclet.Class=\u7c7b +doclet.Description=\u63cf\u8ff0 +doclet.ConstantField=\u5e38\u91cf\u5b57\u6bb5 +doclet.Value=\u503c +doclet.0_and_1={0} \u548c {1} #Documentation for Enums -doclet.enum_values_doc=\n\ - \u6309\u7167\u58f0\u660e\u8be5\u679a\u4e3e\u7c7b\u578b\u7684\u5e38\u91cf\u7684\u987a\u5e8f\uff0c\u8fd4\u56de\n\ - \u5305\u542b\u8fd9\u4e9b\u5e38\u91cf\u7684\u6570\u7ec4\u3002\u8be5\u65b9\u6cd5\u53ef\u7528\u4e8e\u8fed\u4ee3\n\ - \u5e38\u91cf\uff0c\u5982\u4e0b\u6240\u793a\uff1a\n\ -
\n\
- for ({0} c : {0}.values())\n\
-     System.out.println(c);\n\
- 
\n\ - @\u6309\u7167\u58f0\u660e\u8be5\u679a\u4e3e\u7c7b\u578b\u7684\u5e38\u91cf\u7684\u987a\u5e8f\uff0c\u8fd4\u56de\n\ - \u5305\u542b\u8fd9\u4e9b\u5e38\u91cf\u7684\u6570\u7ec4 +doclet.enum_values_doc=\n\u6309\u7167\u58f0\u660e\u8be5\u679a\u4e3e\u7c7b\u578b\u7684\u5e38\u91cf\u7684\u987a\u5e8f\uff0c\u8fd4\u56de\n\u5305\u542b\u8fd9\u4e9b\u5e38\u91cf\u7684\u6570\u7ec4\u3002\u8be5\u65b9\u6cd5\u53ef\u7528\u4e8e\u8fed\u4ee3\n\u5e38\u91cf\uff0c\u5982\u4e0b\u6240\u793a\uff1a\n
\nfor ({0} c : {0}.values())\n    System.out.println(c);\n
\n@\u6309\u7167\u58f0\u660e\u8be5\u679a\u4e3e\u7c7b\u578b\u7684\u5e38\u91cf\u7684\u987a\u5e8f\uff0c\u8fd4\u56de\n\u5305\u542b\u8fd9\u4e9b\u5e38\u91cf\u7684\u6570\u7ec4 -doclet.enum_valueof_doc=\n\ - \u8fd4\u56de\u5e26\u6709\u6307\u5b9a\u540d\u79f0\u7684\u8be5\u7c7b\u578b\u7684\u679a\u4e3e\u5e38\u91cf\u3002\n\ - \u5b57\u7b26\u4e32\u5fc5\u987b\u4e0e\u7528\u4e8e\u58f0\u660e\u8be5\u7c7b\u578b\u7684\u679a\u4e3e\u5e38\u91cf\u7684\n\ - \u6807\u8bc6\u7b26\u5b8c\u5168\u5339\u914d\u3002\uff08\u4e0d\u5141\u8bb8\u6709\u591a\u4f59\n\ - \u7684\u7a7a\u683c\u3002\uff09\n\ - \n\ - @param name \u8981\u8fd4\u56de\u7684\u679a\u4e3e\u5e38\u91cf\u7684\u540d\u79f0\u3002\n\ - @return \u8fd4\u56de\u5e26\u6709\u6307\u5b9a\u540d\u79f0\u7684\u679a\u4e3e\u5e38\u91cf\n\ - @throws \u5982\u679c\u8be5\u679a\u4e3e\u7c7b\u578b\u6ca1\u6709\u5e26\u6709\u6307\u5b9a\u540d\u79f0\u7684\u5e38\u91cf\uff0c\n\ - \u5219\u629b\u51fa IllegalArgumentException - @throws \u5982\u679c\u53c2\u6570\u4e3a\u7a7a\u5219\u629b\u51fa NullPointerException +doclet.enum_valueof_doc=\n\u8fd4\u56de\u5e26\u6709\u6307\u5b9a\u540d\u79f0\u7684\u8be5\u7c7b\u578b\u7684\u679a\u4e3e\u5e38\u91cf\u3002\n\u5b57\u7b26\u4e32\u5fc5\u987b\u4e0e\u7528\u4e8e\u58f0\u660e\u8be5\u7c7b\u578b\u7684\u679a\u4e3e\u5e38\u91cf\u7684\n\u6807\u8bc6\u7b26\u5b8c\u5168\u5339\u914d\u3002\uff08\u4e0d\u5141\u8bb8\u6709\u591a\u4f59\n\u7684\u7a7a\u683c\u3002\uff09\n\n@param name \u8981\u8fd4\u56de\u7684\u679a\u4e3e\u5e38\u91cf\u7684\u540d\u79f0\u3002\n@return \u8fd4\u56de\u5e26\u6709\u6307\u5b9a\u540d\u79f0\u7684\u679a\u4e3e\u5e38\u91cf\n@throws \u5982\u679c\u8be5\u679a\u4e3e\u7c7b\u578b\u6ca1\u6709\u5e26\u6709\u6307\u5b9a\u540d\u79f0\u7684\u5e38\u91cf\uff0c\n\u5219\u629b\u51fa IllegalArgumentException diff --git a/langtools/src/share/classes/com/sun/tools/javac/resources/compiler_ja.properties b/langtools/src/share/classes/com/sun/tools/javac/resources/compiler_ja.properties index 865b70f8a0a..c65ca31ed9a 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/resources/compiler_ja.properties +++ b/langtools/src/share/classes/com/sun/tools/javac/resources/compiler_ja.properties @@ -1,5 +1,5 @@ # -# Copyright 1999-2006 Sun Microsystems, Inc. All Rights Reserved. +# Copyright 1999-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 @@ -27,475 +27,284 @@ ## errors ## -compiler.err.abstract.cant.be.instantiated=\ - {0} \u306f abstract \u3067\u3059\u3002\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u751f\u6210\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.abstract.meth.cant.have.body=\ - abstract \u30e1\u30bd\u30c3\u30c9\u304c\u672c\u4f53\u3092\u6301\u3064\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.already.annotated=\ - {0} {1} \u306f\u6ce8\u91c8\u304c\u4ed8\u3044\u3066\u3044\u307e\u3059\u3002 -compiler.err.already.defined=\ - {0} \u306f {1} \u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u3059\u3002 -compiler.err.already.defined.single.import=\ - {0} \u306f\u5358\u4e00\u306e\u578b\u30a4\u30f3\u30dd\u30fc\u30c8\u5ba3\u8a00\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u3059\u3002 -compiler.err.already.defined.static.single.import=\ - {0} \u306f static \u306e\u5358\u4e00\u306e\u578b\u30a4\u30f3\u30dd\u30fc\u30c8\u5ba3\u8a00\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u3059\u3002 -compiler.err.already.defined.this.unit=\ - {0} \u306f\u30b3\u30f3\u30d1\u30a4\u30eb\u5358\u4f4d\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u3059\u3002 -compiler.err.annotation.missing.default.value=\ - \u6ce8\u91c8 {0} \u306b {1} \u304c\u3042\u308a\u307e\u305b\u3093\u3002 -compiler.err.annotation.not.valid.for.type=\ - \u6ce8\u91c8\u306f\u30bf\u30a4\u30d7 {0} \u306e\u5024\u306b\u6709\u52b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 -compiler.err.annotation.type.not.applicable=\ - \u6ce8\u91c8\u578b\u306f\u3053\u306e\u7a2e\u985e\u306e\u5ba3\u8a00\u306b\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.annotation.value.must.be.annotation=\ - \u6ce8\u91c8\u306e\u5024\u306f\u6ce8\u91c8\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 -compiler.err.annotation.value.must.be.class.literal=\ - \u6ce8\u91c8\u306e\u5024\u306f\u30af\u30e9\u30b9\u30ea\u30c6\u30e9\u30eb\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 -compiler.err.annotation.value.must.be.name.value=\ - \u6ce8\u91c8\u306e\u5024\u306f ''name=value'' \u3068\u3044\u3046\u5f62\u5f0f\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093 -compiler.err.annotation.value.not.allowable.type=\ - \u4f7f\u7528\u3067\u304d\u306a\u3044\u30bf\u30a4\u30d7\u306e\u6ce8\u91c8\u306e\u5024\u3067\u3059\u3002 -compiler.err.anon.class.impl.intf.no.args=\ - \u540d\u524d\u306e\u306a\u3044\u30af\u30e9\u30b9\u304c\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u3092\u5b9f\u88c5\u3057\u3066\u3044\u307e\u3059\u3002\u5f15\u6570\u3092\u6301\u3064\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.anon.class.impl.intf.no.typeargs=\ - \u540d\u524d\u306e\u306a\u3044\u30af\u30e9\u30b9\u304c\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u3092\u5b9f\u88c5\u3057\u3066\u3044\u307e\u3059\u3002\u578b\u5f15\u6570\u3092\u6301\u3064\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093 -compiler.err.anon.class.impl.intf.no.qual.for.new=\ - \u540d\u524d\u306e\u306a\u3044\u30af\u30e9\u30b9\u304c\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u3092\u5b9f\u88c5\u3057\u3066\u3044\u307e\u3059\u3002new \u306b\u4fee\u98fe\u5b50\u3092\u6301\u3064\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.array.and.varargs=\ - {2} \u3067 {0} \u3068 {1} \u306e\u4e21\u65b9\u3092\u5ba3\u8a00\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093 -compiler.err.array.dimension.missing=\ - \u914d\u5217\u306e\u5927\u304d\u3055\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 -compiler.err.array.req.but.found=\ - \u914d\u5217\u304c\u8981\u6c42\u3055\u308c\u307e\u3057\u305f\u304c\u3001{0} \u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f\u3002 +compiler.err.abstract.cant.be.instantiated={0} \u306f abstract \u3067\u3059\u3002\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u751f\u6210\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.abstract.meth.cant.have.body=abstract \u30e1\u30bd\u30c3\u30c9\u304c\u672c\u4f53\u3092\u6301\u3064\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.already.annotated={0} {1} \u306f\u6ce8\u91c8\u304c\u4ed8\u3044\u3066\u3044\u307e\u3059\u3002 +compiler.err.already.defined={0} \u306f {1} \u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u3059\u3002 +compiler.err.already.defined.single.import={0} \u306f\u5358\u4e00\u306e\u578b\u30a4\u30f3\u30dd\u30fc\u30c8\u5ba3\u8a00\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u3059\u3002 +compiler.err.already.defined.static.single.import={0} \u306f static \u306e\u5358\u4e00\u306e\u578b\u30a4\u30f3\u30dd\u30fc\u30c8\u5ba3\u8a00\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u3059\u3002 +compiler.err.already.defined.this.unit={0} \u306f\u30b3\u30f3\u30d1\u30a4\u30eb\u5358\u4f4d\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u3059\u3002 +compiler.err.annotation.missing.default.value=\u6ce8\u91c8 {0} \u306b {1} \u304c\u3042\u308a\u307e\u305b\u3093\u3002 +compiler.err.annotation.not.valid.for.type=\u6ce8\u91c8\u306f\u30bf\u30a4\u30d7 {0} \u306e\u5024\u306b\u6709\u52b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 +compiler.err.annotation.type.not.applicable=\u6ce8\u91c8\u578b\u306f\u3053\u306e\u7a2e\u985e\u306e\u5ba3\u8a00\u306b\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.annotation.value.must.be.annotation=\u6ce8\u91c8\u306e\u5024\u306f\u6ce8\u91c8\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 +compiler.err.annotation.value.must.be.class.literal=\u6ce8\u91c8\u306e\u5024\u306f\u30af\u30e9\u30b9\u30ea\u30c6\u30e9\u30eb\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 +compiler.err.annotation.value.must.be.name.value=\u6ce8\u91c8\u306e\u5024\u306f ''name=value'' \u3068\u3044\u3046\u5f62\u5f0f\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093 +compiler.err.annotation.value.not.allowable.type=\u4f7f\u7528\u3067\u304d\u306a\u3044\u30bf\u30a4\u30d7\u306e\u6ce8\u91c8\u306e\u5024\u3067\u3059\u3002 +compiler.err.anon.class.impl.intf.no.args=\u540d\u524d\u306e\u306a\u3044\u30af\u30e9\u30b9\u304c\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u3092\u5b9f\u88c5\u3057\u3066\u3044\u307e\u3059\u3002\u5f15\u6570\u3092\u6301\u3064\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.anon.class.impl.intf.no.typeargs=\u540d\u524d\u306e\u306a\u3044\u30af\u30e9\u30b9\u304c\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u3092\u5b9f\u88c5\u3057\u3066\u3044\u307e\u3059\u3002\u578b\u5f15\u6570\u3092\u6301\u3064\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093 +compiler.err.anon.class.impl.intf.no.qual.for.new=\u540d\u524d\u306e\u306a\u3044\u30af\u30e9\u30b9\u304c\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u3092\u5b9f\u88c5\u3057\u3066\u3044\u307e\u3059\u3002new \u306b\u4fee\u98fe\u5b50\u3092\u6301\u3064\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.array.and.varargs={2} \u3067 {0} \u3068 {1} \u306e\u4e21\u65b9\u3092\u5ba3\u8a00\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093 +compiler.err.array.dimension.missing=\u914d\u5217\u306e\u5927\u304d\u3055\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 +compiler.err.array.req.but.found=\u914d\u5217\u304c\u8981\u6c42\u3055\u308c\u307e\u3057\u305f\u304c\u3001{0} \u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f\u3002 -compiler.err.assignment.from.super-bound=\ - \u30ef\u30a4\u30eb\u30c9\u30ab\u30fc\u30c9 {0} \u304b\u3089\u4ee3\u5165\u3057\u3066\u3044\u307e\u3059\u3002 -compiler.err.assignment.to.extends-bound=\ - \u30ef\u30a4\u30eb\u30c9\u30ab\u30fc\u30c9 {0} \u3078\u4ee3\u5165\u3057\u3066\u3044\u307e\u3059\u3002 -compiler.err.attribute.value.must.be.constant=\ - \u5c5e\u6027\u306e\u5024\u306f\u5b9a\u6570\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 +compiler.err.assignment.from.super-bound=\u30ef\u30a4\u30eb\u30c9\u30ab\u30fc\u30c9 {0} \u304b\u3089\u4ee3\u5165\u3057\u3066\u3044\u307e\u3059\u3002 +compiler.err.assignment.to.extends-bound=\u30ef\u30a4\u30eb\u30c9\u30ab\u30fc\u30c9 {0} \u3078\u4ee3\u5165\u3057\u3066\u3044\u307e\u3059\u3002 +compiler.err.attribute.value.must.be.constant=\u5c5e\u6027\u306e\u5024\u306f\u5b9a\u6570\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 -compiler.err.break.outside.switch.loop=\ - break \u304c switch \u6587\u307e\u305f\u306f\u30eb\u30fc\u30d7\u306e\u5916\u306b\u3042\u308a\u307e\u3059\u3002 +compiler.err.break.outside.switch.loop=break \u304c switch \u6587\u307e\u305f\u306f\u30eb\u30fc\u30d7\u306e\u5916\u306b\u3042\u308a\u307e\u3059\u3002 -compiler.err.call.must.be.first.stmt.in.ctor=\ - {0} \u306e\u547c\u3073\u51fa\u3057\u306f\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u306e\u5148\u982d\u6587\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 -compiler.err.cant.apply.symbol=\ - {0} ({1} \u5185) \u3092 {2}({3}) \u306b\u9069\u7528\u3067\u304d\u307e\u305b\u3093 -compiler.err.cant.apply.symbol.1=\ - {0} ({1} \u5185) \u3092 {2}({3}) \u306b\u9069\u7528\u3067\u304d\u307e\u305b\u3093; {4} -compiler.err.cant.assign.val.to.final.var=\ - final \u5909\u6570 {0} \u306b\u5024\u3092\u4ee3\u5165\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.cant.deref=\ - {0} \u306f\u9593\u63a5\u53c2\u7167\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.cant.extend.intf.annotation=\ - @interfaces \u3067\u306f ''extends'' \u306f\u8a31\u53ef\u3055\u308c\u307e\u305b\u3093 -compiler.err.cant.inherit.from.final=\ - final {0} \u304b\u3089\u306f\u7d99\u627f\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.cant.ref.before.ctor.called=\ - \u30b9\u30fc\u30d1\u30fc\u30bf\u30a4\u30d7\u306e\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u306e\u547c\u3073\u51fa\u3057\u524d\u306f {0} \u3092\u53c2\u7167\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.cant.ret.val.from.meth.decl.void=\ - \u623b\u308a\u5024\u306e\u578b\u304c void \u306e\u30e1\u30bd\u30c3\u30c9\u304b\u3089\u306f\u5024\u3092\u8fd4\u305b\u307e\u305b\u3093\u3002 -compiler.err.cant.select.static.class.from.param.type=\ - \u30d1\u30e9\u30e1\u30fc\u30bf\u306b\u3055\u308c\u305f\u578b\u304b\u3089 static \u30af\u30e9\u30b9\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.cant.inherit.diff.arg=\ - {0} \u3092\u7570\u306a\u308b\u5f15\u6570 <{1}> \u3068 <{2}> \u3067\u7d99\u627f\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.catch.without.try=\ - ''catch'' \u3078\u306e ''try'' \u304c\u3042\u308a\u307e\u305b\u3093\u3002 -compiler.err.clash.with.pkg.of.same.name=\ - {0} \u306f\u540c\u540d\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u3068\u7af6\u5408\u3057\u307e\u3059\u3002 -compiler.err.const.expr.req=\ - \u5b9a\u6570\u5f0f\u304c\u5fc5\u8981\u3067\u3059\u3002 -compiler.err.enum.const.req=\ - \u4fee\u98fe\u3055\u308c\u3066\u3044\u306a\u3044\u5217\u6319\u578b\u5b9a\u6570\u306e\u540d\u524d\u304c\u5fc5\u8981\u3067\u3059\u3002 -compiler.err.cont.outside.loop=\ - continue \u304c\u30eb\u30fc\u30d7\u306e\u5916\u306b\u3042\u308a\u307e\u3059\u3002 -compiler.err.cyclic.inheritance=\ - {0} \u3092\u542b\u3080\u7d99\u627f\u304c\u30eb\u30fc\u30d7\u3057\u3066\u3044\u307e\u3059\u3002 -compiler.err.cyclic.annotation.element=\ - \u6ce8\u91c8\u306e\u8981\u7d20\u30bf\u30a4\u30d7\u304c\u30eb\u30fc\u30d7\u3057\u3066\u3044\u307e\u3059\u3002 -compiler.err.call.to.super.not.allowed.in.enum.ctor=\ - \u5217\u6319\u578b\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3067\u306f\u3001\u30b9\u30fc\u30d1\u30fc\u30af\u30e9\u30b9\u306e\u547c\u3073\u51fa\u3057\u306f\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.no.superclass=\ - {0} \u306b\u306f\u30b9\u30fc\u30d1\u30fc\u30af\u30e9\u30b9\u304c\u3042\u308a\u307e\u305b\u3093\u3002 +compiler.err.call.must.be.first.stmt.in.ctor={0} \u306e\u547c\u3073\u51fa\u3057\u306f\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u306e\u5148\u982d\u6587\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 +compiler.err.cant.apply.symbol={0} ({1} \u5185) \u3092 {2}({3}) \u306b\u9069\u7528\u3067\u304d\u307e\u305b\u3093 +compiler.err.cant.apply.symbol.1={0} {1} ({4} {5} \u5185) \u306f\u4e0e\u3048\u3089\u308c\u305f\u578b\u306b\u9069\u7528\u3067\u304d\u307e\u305b\u3093\n\u671f\u5f85\u5024: {2}\n\u691c\u51fa\u5024: {3}\n\u7406\u7531: {6} +compiler.err.cant.assign.val.to.final.var=final \u5909\u6570 {0} \u306b\u5024\u3092\u4ee3\u5165\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.cant.deref={0} \u306f\u9593\u63a5\u53c2\u7167\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.cant.extend.intf.annotation=@interfaces \u3067\u306f ''extends'' \u306f\u8a31\u53ef\u3055\u308c\u307e\u305b\u3093 +compiler.err.cant.inherit.from.final=final {0} \u304b\u3089\u306f\u7d99\u627f\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.cant.ref.before.ctor.called=\u30b9\u30fc\u30d1\u30fc\u30bf\u30a4\u30d7\u306e\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u306e\u547c\u3073\u51fa\u3057\u524d\u306f {0} \u3092\u53c2\u7167\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.cant.ret.val.from.meth.decl.void=\u623b\u308a\u5024\u306e\u578b\u304c void \u306e\u30e1\u30bd\u30c3\u30c9\u304b\u3089\u306f\u5024\u3092\u8fd4\u305b\u307e\u305b\u3093\u3002 +compiler.err.cant.select.static.class.from.param.type=\u30d1\u30e9\u30e1\u30fc\u30bf\u306b\u3055\u308c\u305f\u578b\u304b\u3089 static \u30af\u30e9\u30b9\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.cant.inherit.diff.arg={0} \u3092\u7570\u306a\u308b\u5f15\u6570 <{1}> \u3068 <{2}> \u3067\u7d99\u627f\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.catch.without.try=''catch'' \u3078\u306e ''try'' \u304c\u3042\u308a\u307e\u305b\u3093\u3002 +compiler.err.clash.with.pkg.of.same.name={0} \u306f\u540c\u540d\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u3068\u7af6\u5408\u3057\u307e\u3059\u3002 +compiler.err.const.expr.req=\u5b9a\u6570\u5f0f\u304c\u5fc5\u8981\u3067\u3059\u3002 +compiler.err.enum.const.req=\u4fee\u98fe\u3055\u308c\u3066\u3044\u306a\u3044\u5217\u6319\u578b\u5b9a\u6570\u306e\u540d\u524d\u304c\u5fc5\u8981\u3067\u3059\u3002 +compiler.err.cont.outside.loop=continue \u304c\u30eb\u30fc\u30d7\u306e\u5916\u306b\u3042\u308a\u307e\u3059\u3002 +compiler.err.cyclic.inheritance={0} \u3092\u542b\u3080\u7d99\u627f\u304c\u30eb\u30fc\u30d7\u3057\u3066\u3044\u307e\u3059\u3002 +compiler.err.cyclic.annotation.element=\u6ce8\u91c8\u306e\u8981\u7d20\u30bf\u30a4\u30d7\u304c\u30eb\u30fc\u30d7\u3057\u3066\u3044\u307e\u3059\u3002 +compiler.err.call.to.super.not.allowed.in.enum.ctor=\u5217\u6319\u578b\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3067\u306f\u3001\u30b9\u30fc\u30d1\u30fc\u30af\u30e9\u30b9\u306e\u547c\u3073\u51fa\u3057\u306f\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.no.superclass={0} \u306b\u306f\u30b9\u30fc\u30d1\u30fc\u30af\u30e9\u30b9\u304c\u3042\u308a\u307e\u305b\u3093\u3002 -compiler.err.concrete.inheritance.conflict=\ - {1} \u306e\u30e1\u30bd\u30c3\u30c9 {0} \u3068 {3} \u306e {2} \u306f\u540c\u3058\u30b7\u30b0\u30cb\u30c1\u30e3\u30fc\u304b\u3089\u7d99\u627f\u3055\u308c\u3066\u3044\u307e\u3059\u3002 +compiler.err.concrete.inheritance.conflict={1} \u306e\u30e1\u30bd\u30c3\u30c9 {0} \u3068 {3} \u306e {2} \u306f\u540c\u3058\u30b7\u30b0\u30cb\u30c1\u30e3\u30fc\u304b\u3089\u7d99\u627f\u3055\u308c\u3066\u3044\u307e\u3059\u3002 -compiler.err.default.allowed.in.intf.annotation.member=\ - \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f @interface \u30e1\u30f3\u30d0\u5185\u3067\u306e\u307f\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002 -compiler.err.doesnt.exist=\ - \u30d1\u30c3\u30b1\u30fc\u30b8 {0} \u306f\u5b58\u5728\u3057\u307e\u305b\u3093\u3002 -compiler.err.duplicate.annotation=\ - \u6ce8\u91c8\u304c\u91cd\u8907\u3057\u3066\u3044\u307e\u3059\u3002 -compiler.err.duplicate.annotation.member.value=\ - {1} \u306e\u6ce8\u91c8\u30e1\u30f3\u30d0\u306e\u5024 {0} \u304c\u91cd\u8907\u3057\u3066\u3044\u307e\u3059\u3002 -compiler.err.duplicate.class=\ - \u30af\u30e9\u30b9 {0} \u304c\u91cd\u8907\u3057\u3066\u3044\u307e\u3059\u3002 -compiler.err.duplicate.case.label=\ - case \u30e9\u30d9\u30eb\u304c\u91cd\u8907\u3057\u3066\u3044\u307e\u3059\u3002 -compiler.err.duplicate.default.label=\ - default \u30e9\u30d9\u30eb\u304c\u91cd\u8907\u3057\u3066\u3044\u307e\u3059\u3002 +compiler.err.default.allowed.in.intf.annotation.member=\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f @interface \u30e1\u30f3\u30d0\u5185\u3067\u306e\u307f\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002 +compiler.err.doesnt.exist=\u30d1\u30c3\u30b1\u30fc\u30b8 {0} \u306f\u5b58\u5728\u3057\u307e\u305b\u3093\u3002 +compiler.err.duplicate.annotation=\u6ce8\u91c8\u304c\u91cd\u8907\u3057\u3066\u3044\u307e\u3059\u3002 +compiler.err.duplicate.annotation.member.value={1} \u306e\u6ce8\u91c8\u30e1\u30f3\u30d0\u306e\u5024 {0} \u304c\u91cd\u8907\u3057\u3066\u3044\u307e\u3059\u3002 +compiler.err.duplicate.class=\u30af\u30e9\u30b9 {0} \u304c\u91cd\u8907\u3057\u3066\u3044\u307e\u3059\u3002 +compiler.err.duplicate.case.label=case \u30e9\u30d9\u30eb\u304c\u91cd\u8907\u3057\u3066\u3044\u307e\u3059\u3002 +compiler.err.duplicate.default.label=default \u30e9\u30d9\u30eb\u304c\u91cd\u8907\u3057\u3066\u3044\u307e\u3059\u3002 -compiler.err.else.without.if=\ - ''else'' \u3078\u306e ''if'' \u304c\u3042\u308a\u307e\u305b\u3093\u3002 -compiler.err.empty.char.lit=\ - \u7a7a\u306e\u6587\u5b57\u30ea\u30c6\u30e9\u30eb\u3067\u3059\u3002 -compiler.err.encl.class.required=\ - {0} \u3092\u542b\u3080\u56f2\u3046\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u5fc5\u8981\u3067\u3059\u3002 -compiler.err.enum.annotation.must.be.enum.constant=\ - \u5217\u6319\u578b\u6ce8\u91c8\u5024\u306f\u3001\u5217\u6319\u578b\u5b9a\u6570\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 +compiler.err.else.without.if=''else'' \u3078\u306e ''if'' \u304c\u3042\u308a\u307e\u305b\u3093\u3002 +compiler.err.empty.bytecode.ident=\u7a7a\u306e\u30d0\u30a4\u30c8\u30b3\u30fc\u30c9\u8b58\u5225\u5b50\u3067\u3059\u3002 +compiler.err.empty.char.lit=\u7a7a\u306e\u6587\u5b57\u30ea\u30c6\u30e9\u30eb\u3067\u3059\u3002 +compiler.err.encl.class.required={0} \u3092\u542b\u3080\u56f2\u3046\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u5fc5\u8981\u3067\u3059\u3002 +compiler.err.enum.annotation.must.be.enum.constant=\u5217\u6319\u578b\u6ce8\u91c8\u5024\u306f\u3001\u5217\u6319\u578b\u5b9a\u6570\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 -compiler.err.enum.cant.be.instantiated=\ - \u5217\u6319\u578b\u30bf\u30a4\u30d7\u306f\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.enum.label.must.be.unqualified.enum=\ - \u5217\u6319\u578b\u306e switch case \u30e9\u30d9\u30eb\u306f\u5217\u6319\u578b\u5b9a\u6570\u306e\u975e\u4fee\u98fe\u540d\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 -compiler.err.enum.no.subclassing=\ - \u30af\u30e9\u30b9\u306f\u76f4\u63a5 java.lang.Enum \u3092\u62e1\u5f35\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.enum.types.not.extensible=\ - \u5217\u6319\u578b\u30bf\u30a4\u30d7\u306f\u62e1\u5f35\u53ef\u80fd\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 -compiler.err.enum.no.finalize=\ - \u5217\u6319\u578b\u30bf\u30a4\u30d7\u306f finalize \u30e1\u30bd\u30c3\u30c9\u3092\u6301\u3064\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093 -compiler.err.error.reading.file=\ - {0} \u306e\u8aad\u307f\u8fbc\u307f\u30a8\u30e9\u30fc\u3067\u3059\u3002{1} -compiler.err.except.already.caught=\ - \u4f8b\u5916 {0} \u306f\u3059\u3067\u306b\u30ad\u30e3\u30c3\u30c1\u3055\u308c\u3066\u3044\u307e\u3059\u3002 -compiler.err.except.never.thrown.in.try=\ - \u4f8b\u5916 {0} \u306f\u5bfe\u5fdc\u3059\u308b try \u6587\u306e\u672c\u4f53\u3067\u306f\u30b9\u30ed\u30fc\u3055\u308c\u307e\u305b\u3093\u3002 +compiler.err.enum.cant.be.instantiated=\u5217\u6319\u578b\u30bf\u30a4\u30d7\u306f\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.enum.label.must.be.unqualified.enum=\u5217\u6319\u578b\u306e switch case \u30e9\u30d9\u30eb\u306f\u5217\u6319\u578b\u5b9a\u6570\u306e\u975e\u4fee\u98fe\u540d\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 +compiler.err.enum.no.subclassing=\u30af\u30e9\u30b9\u306f\u76f4\u63a5 java.lang.Enum \u3092\u62e1\u5f35\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.enum.types.not.extensible=\u5217\u6319\u578b\u30bf\u30a4\u30d7\u306f\u62e1\u5f35\u53ef\u80fd\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 +compiler.err.enum.no.finalize=\u5217\u6319\u578b\u30bf\u30a4\u30d7\u306f finalize \u30e1\u30bd\u30c3\u30c9\u3092\u6301\u3064\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093 +compiler.err.error.reading.file={0} \u306e\u8aad\u307f\u8fbc\u307f\u30a8\u30e9\u30fc\u3067\u3059\u3002{1} +compiler.err.except.already.caught=\u4f8b\u5916 {0} \u306f\u3059\u3067\u306b\u30ad\u30e3\u30c3\u30c1\u3055\u308c\u3066\u3044\u307e\u3059\u3002 +compiler.err.except.never.thrown.in.try=\u4f8b\u5916 {0} \u306f\u5bfe\u5fdc\u3059\u308b try \u6587\u306e\u672c\u4f53\u3067\u306f\u30b9\u30ed\u30fc\u3055\u308c\u307e\u305b\u3093\u3002 -compiler.err.final.parameter.may.not.be.assigned=\ - final \u30d1\u30e9\u30e1\u30fc\u30bf {0} \u306b\u5024\u3092\u4ee3\u5165\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.finally.without.try=\ - ''finally'' \u3078\u306e ''try'' \u304c\u3042\u308a\u307e\u305b\u3093\u3002 -compiler.err.foreach.not.applicable.to.type=\ - foreach \u306f\u5f0f\u306e\u30bf\u30a4\u30d7\u306b\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.fp.number.too.large=\ - \u6d6e\u52d5\u5c0f\u6570\u70b9\u6570\u304c\u5927\u304d\u904e\u304e\u307e\u3059\u3002 -compiler.err.fp.number.too.small=\ - \u6d6e\u52d5\u5c0f\u6570\u70b9\u6570\u304c\u5c0f\u3055\u904e\u304e\u307e\u3059\u3002 +compiler.err.final.parameter.may.not.be.assigned=final \u30d1\u30e9\u30e1\u30fc\u30bf {0} \u306b\u5024\u3092\u4ee3\u5165\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.finally.without.try=''finally'' \u3078\u306e ''try'' \u304c\u3042\u308a\u307e\u305b\u3093\u3002 +compiler.err.foreach.not.applicable.to.type=foreach \u306f\u5f0f\u306e\u30bf\u30a4\u30d7\u306b\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.fp.number.too.large=\u6d6e\u52d5\u5c0f\u6570\u70b9\u6570\u304c\u5927\u304d\u904e\u304e\u307e\u3059\u3002 +compiler.err.fp.number.too.small=\u6d6e\u52d5\u5c0f\u6570\u70b9\u6570\u304c\u5c0f\u3055\u904e\u304e\u307e\u3059\u3002 -compiler.err.generic.array.creation=\ - \u6c4e\u7528\u914d\u5217\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002 -compiler.err.generic.throwable=\ - \u6c4e\u7528\u30af\u30e9\u30b9\u306f java.lang.Throwable \u3092\u62e1\u5f35\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.generic.array.creation=\u6c4e\u7528\u914d\u5217\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002 +compiler.err.generic.throwable=\u6c4e\u7528\u30af\u30e9\u30b9\u306f java.lang.Throwable \u3092\u62e1\u5f35\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.icls.cant.have.static.decl=\ - \u5185\u90e8\u30af\u30e9\u30b9\u304c static \u5ba3\u8a00\u3092\u6301\u3064\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.illegal.char=\ - \\{0} \u306f\u4e0d\u6b63\u306a\u6587\u5b57\u3067\u3059\u3002 -compiler.err.illegal.char.for.encoding=\ - \u3053\u306e\u6587\u5b57\u306f\u3001\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0 {0} \u306b\u30de\u30c3\u30d7\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.illegal.combination.of.modifiers=\ - \u4fee\u98fe\u5b50 {0} \u3068 {1} \u306e\u7d44\u307f\u5408\u308f\u305b\u306f\u4e0d\u6b63\u3067\u3059\u3002 -compiler.err.illegal.enum.static.ref=\ - \u521d\u671f\u5316\u5b50\u304b\u3089 static \u30d5\u30a3\u30fc\u30eb\u30c9\u3078\u306e\u53c2\u7167\u304c\u4e0d\u6b63\u3067\u3059\u3002 -compiler.err.illegal.esc.char=\ - \u30a8\u30b9\u30b1\u30fc\u30d7\u6587\u5b57\u304c\u4e0d\u6b63\u3067\u3059\u3002 -compiler.err.illegal.forward.ref=\ - \u9806\u65b9\u5411\u53c2\u7167\u304c\u4e0d\u6b63\u3067\u3059\u3002 -compiler.warn.forward.ref=\ - \u521d\u671f\u5316\u3055\u308c\u308b\u524d\u306e\u5909\u6570 ''{0}'' \u3092\u53c2\u7167\u3057\u3088\u3046\u3068\u3057\u307e\u3057\u305f -compiler.err.illegal.generic.type.for.instof=\ - instanceof \u306e\u7dcf\u79f0\u578b\u304c\u4e0d\u6b63\u3067\u3059\u3002 -compiler.err.illegal.initializer.for.type=\ - {0} \u306e\u521d\u671f\u5316\u5b50\u304c\u4e0d\u6b63\u3067\u3059\u3002 -compiler.err.illegal.line.end.in.char.lit=\ - \u6587\u5b57\u30ea\u30c6\u30e9\u30eb\u306e\u884c\u672b\u304c\u4e0d\u6b63\u3067\u3059\u3002 -compiler.err.illegal.nonascii.digit=\ - \u4e0d\u6b63\u306a\u975e ASCII \u6570\u5b57\u3067\u3059\u3002 -compiler.err.illegal.qual.not.icls=\ - \u4fee\u98fe\u5b50\u304c\u4e0d\u6b63\u3067\u3059\u3002{0} \u306f\u5185\u90e8\u30af\u30e9\u30b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 -compiler.err.illegal.start.of.expr=\ - \u5f0f\u306e\u958b\u59cb\u304c\u4e0d\u6b63\u3067\u3059\u3002 -compiler.err.illegal.start.of.type=\ - \u578b\u306e\u958b\u59cb\u304c\u4e0d\u6b63\u3067\u3059\u3002 -compiler.err.illegal.unicode.esc=\ - Unicode \u30a8\u30b9\u30b1\u30fc\u30d7\u304c\u4e0d\u6b63\u3067\u3059\u3002 -compiler.err.import.requires.canonical=\ - \u30a4\u30f3\u30dd\u30fc\u30c8\u306b\u306f {0} \u306e\u6a19\u6e96\u540d\u304c\u5fc5\u8981\u3067\u3059\u3002 -compiler.err.improperly.formed.type.param.missing=\ - \u578b\u306e\u5f62\u5f0f\u304c\u4e0d\u9069\u5207\u3067\u3059\u3002\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u4e0d\u8db3\u3057\u3066\u3044\u307e\u3059\u3002 -compiler.err.improperly.formed.type.inner.raw.param=\ - \u578b\u306e\u5f62\u5f0f\u304c\u4e0d\u9069\u5207\u3067\u3059\u3002raw \u578b\u306b\u6307\u5b9a\u3055\u308c\u305f\u578b\u30d1\u30e9\u30e1\u30fc\u30bf\u3067\u3059\u3002 -compiler.err.incomparable.types=\ - \u578b {0} \u3068 {1} \u306f\u6bd4\u8f03\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.int.number.too.large=\ - \u6574\u6570 {0} \u304c\u5927\u304d\u904e\u304e\u307e\u3059\u3002 -compiler.err.internal.error.cant.instantiate=\ - \u5185\u90e8\u30a8\u30e9\u30fc\u3067\u3059\u3002{0} \u3092 {1} \u3067 ({2}) \u306b\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u751f\u6210\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.intf.annotation.members.cant.have.params=\ - @interface \u30e1\u30f3\u30d0\u304c\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u6301\u3064\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.intf.annotation.cant.have.type.params=\ - @interface \u304c\u578b\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u6301\u3064\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.intf.annotation.members.cant.have.type.params=\ - @interface \u30e1\u30f3\u30d0\u304c\u578b\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u6301\u3064\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.intf.annotation.member.clash=\ - @interface \u30e1\u30f3\u30d0\u30fc\u306f {1} \u306e\u30e1\u30bd\u30c3\u30c9 ''{0}'' \u3068\u7af6\u5408\u3057\u307e\u3059 -compiler.err.intf.expected.here=\ - \u3053\u3053\u306b\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u304c\u5fc5\u8981\u3067\u3059\u3002 -compiler.err.intf.meth.cant.have.body=\ - \u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u30e1\u30bd\u30c3\u30c9\u304c\u672c\u4f53\u3092\u6301\u3064\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.invalid.annotation.member.type=\ - \u6ce8\u91c8\u30e1\u30f3\u30d0\u306e\u578b\u304c\u4e0d\u6b63\u3067\u3059\u3002 -compiler.err.invalid.hex.number=\ - 16 \u9032\u6570\u306b\u306f 16 \u9032\u6570\u5b57\u304c\u6700\u4f4e 1 \u3064\u306f\u542b\u307e\u308c\u3066\u3044\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 -compiler.err.invalid.meth.decl.ret.type.req=\ - \u30e1\u30bd\u30c3\u30c9\u306e\u5ba3\u8a00\u304c\u4e0d\u6b63\u3067\u3059\u3002\u623b\u308a\u5024\u306e\u578b\u304c\u5fc5\u8981\u3067\u3059\u3002 +compiler.err.icls.cant.have.static.decl=\u5185\u90e8\u30af\u30e9\u30b9\u304c static \u5ba3\u8a00\u3092\u6301\u3064\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.illegal.bytecode.ident.char=\u4e0d\u6b63\u306a\u30d0\u30a4\u30c8\u30b3\u30fc\u30c9\u8b58\u5225\u5b50\u3067\u3059: \\{0} +compiler.err.illegal.char=\\{0} \u306f\u4e0d\u6b63\u306a\u6587\u5b57\u3067\u3059\u3002 +compiler.err.illegal.char.for.encoding=\u3053\u306e\u6587\u5b57\u306f\u3001\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0 {0} \u306b\u30de\u30c3\u30d7\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.illegal.combination.of.modifiers=\u4fee\u98fe\u5b50 {0} \u3068 {1} \u306e\u7d44\u307f\u5408\u308f\u305b\u306f\u4e0d\u6b63\u3067\u3059\u3002 +compiler.err.illegal.enum.static.ref=\u521d\u671f\u5316\u5b50\u304b\u3089 static \u30d5\u30a3\u30fc\u30eb\u30c9\u3078\u306e\u53c2\u7167\u304c\u4e0d\u6b63\u3067\u3059\u3002 +compiler.err.illegal.esc.char=\u30a8\u30b9\u30b1\u30fc\u30d7\u6587\u5b57\u304c\u4e0d\u6b63\u3067\u3059\u3002 +compiler.err.illegal.forward.ref=\u9806\u65b9\u5411\u53c2\u7167\u304c\u4e0d\u6b63\u3067\u3059\u3002 +compiler.warn.forward.ref=\u521d\u671f\u5316\u3055\u308c\u308b\u524d\u306e\u5909\u6570 ''{0}'' \u3092\u53c2\u7167\u3057\u3088\u3046\u3068\u3057\u307e\u3057\u305f\u3002 +compiler.err.illegal.self.ref=\u521d\u671f\u5316\u5b50\u5185\u306b\u81ea\u5df1\u53c2\u7167\u304c\u3042\u308a\u307e\u3059\u3002 +compiler.warn.self.ref=\u521d\u671f\u5316\u5b50\u5185\u306b\u5909\u6570 ''{0}'' \u306e\u81ea\u5df1\u53c2\u7167\u304c\u3042\u308a\u307e\u3059\u3002 +compiler.err.illegal.generic.type.for.instof=instanceof \u306e\u7dcf\u79f0\u578b\u304c\u4e0d\u6b63\u3067\u3059\u3002 +compiler.err.illegal.initializer.for.type={0} \u306e\u521d\u671f\u5316\u5b50\u304c\u4e0d\u6b63\u3067\u3059\u3002 +compiler.err.illegal.line.end.in.char.lit=\u6587\u5b57\u30ea\u30c6\u30e9\u30eb\u306e\u884c\u672b\u304c\u4e0d\u6b63\u3067\u3059\u3002 +compiler.err.illegal.nonascii.digit=\u4e0d\u6b63\u306a\u975e ASCII \u6570\u5b57\u3067\u3059\u3002 +compiler.err.illegal.underscore=\u4e0b\u7dda\u304c\u4e0d\u6b63\u3067\u3059\u3002 +compiler.err.illegal.qual.not.icls=\u4fee\u98fe\u5b50\u304c\u4e0d\u6b63\u3067\u3059\u3002{0} \u306f\u5185\u90e8\u30af\u30e9\u30b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 +compiler.err.illegal.start.of.expr=\u5f0f\u306e\u958b\u59cb\u304c\u4e0d\u6b63\u3067\u3059\u3002 +compiler.err.illegal.start.of.type=\u578b\u306e\u958b\u59cb\u304c\u4e0d\u6b63\u3067\u3059\u3002 +compiler.err.illegal.unicode.esc=Unicode \u30a8\u30b9\u30b1\u30fc\u30d7\u304c\u4e0d\u6b63\u3067\u3059\u3002 +compiler.err.import.requires.canonical=\u30a4\u30f3\u30dd\u30fc\u30c8\u306b\u306f {0} \u306e\u6a19\u6e96\u540d\u304c\u5fc5\u8981\u3067\u3059\u3002 +compiler.err.improperly.formed.type.param.missing=\u578b\u306e\u5f62\u5f0f\u304c\u4e0d\u9069\u5207\u3067\u3059\u3002\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u4e0d\u8db3\u3057\u3066\u3044\u307e\u3059\u3002 +compiler.err.improperly.formed.type.inner.raw.param=\u578b\u306e\u5f62\u5f0f\u304c\u4e0d\u9069\u5207\u3067\u3059\u3002raw \u578b\u306b\u6307\u5b9a\u3055\u308c\u305f\u578b\u30d1\u30e9\u30e1\u30fc\u30bf\u3067\u3059\u3002 +compiler.err.incomparable.types=\u578b {0} \u3068 {1} \u306f\u6bd4\u8f03\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.int.number.too.large=\u6574\u6570 {0} \u304c\u5927\u304d\u904e\u304e\u307e\u3059\u3002 +compiler.err.internal.error.cant.instantiate=\u5185\u90e8\u30a8\u30e9\u30fc\u3067\u3059\u3002{0} \u3092 {1} \u3067 ({2}) \u306b\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u751f\u6210\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.intf.annotation.members.cant.have.params=@interface \u30e1\u30f3\u30d0\u304c\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u6301\u3064\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.intf.annotation.cant.have.type.params=@interface \u304c\u578b\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u6301\u3064\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.intf.annotation.members.cant.have.type.params=@interface \u30e1\u30f3\u30d0\u304c\u578b\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u6301\u3064\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.intf.annotation.member.clash=@interface \u30e1\u30f3\u30d0\u30fc\u306f {1} \u306e\u30e1\u30bd\u30c3\u30c9 ''{0}'' \u3068\u7af6\u5408\u3057\u307e\u3059 +compiler.err.intf.expected.here=\u3053\u3053\u306b\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u304c\u5fc5\u8981\u3067\u3059\u3002 +compiler.err.intf.meth.cant.have.body=\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u30e1\u30bd\u30c3\u30c9\u304c\u672c\u4f53\u3092\u6301\u3064\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.invalid.annotation.member.type=\u6ce8\u91c8\u30e1\u30f3\u30d0\u306e\u578b\u304c\u4e0d\u6b63\u3067\u3059\u3002 +compiler.err.invalid.binary.number=2 \u9032\u6570\u306b\u306f 2 \u9032\u6570\u5b57\u304c\u6700\u4f4e 1 \u3064\u306f\u542b\u307e\u308c\u3066\u3044\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 +compiler.err.invalid.hex.number=16 \u9032\u6570\u306b\u306f 16 \u9032\u6570\u5b57\u304c\u6700\u4f4e 1 \u3064\u306f\u542b\u307e\u308c\u3066\u3044\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 +compiler.err.invalid.meth.decl.ret.type.req=\u30e1\u30bd\u30c3\u30c9\u306e\u5ba3\u8a00\u304c\u4e0d\u6b63\u3067\u3059\u3002\u623b\u308a\u5024\u306e\u578b\u304c\u5fc5\u8981\u3067\u3059\u3002 -compiler.err.label.already.in.use=\ - \u30e9\u30d9\u30eb {0} \u306f\u3059\u3067\u306b\u4f7f\u308f\u308c\u3066\u3044\u307e\u3059\u3002 -compiler.err.local.var.accessed.from.icls.needs.final=\ - \u30ed\u30fc\u30ab\u30eb\u5909\u6570 {0} \u306f\u5185\u90e8\u30af\u30e9\u30b9\u304b\u3089\u30a2\u30af\u30bb\u30b9\u3055\u308c\u307e\u3059\u3002final \u3067\u5ba3\u8a00\u3055\u308c\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 -compiler.err.local.enum=\ - \u5217\u6319\u578b\u306f\u30ed\u30fc\u30ab\u30eb\u3067\u306f\u3044\u3051\u307e\u305b\u3093\u3002 +compiler.err.label.already.in.use=\u30e9\u30d9\u30eb {0} \u306f\u3059\u3067\u306b\u4f7f\u308f\u308c\u3066\u3044\u307e\u3059\u3002 +compiler.err.local.var.accessed.from.icls.needs.final=\u30ed\u30fc\u30ab\u30eb\u5909\u6570 {0} \u306f\u5185\u90e8\u30af\u30e9\u30b9\u304b\u3089\u30a2\u30af\u30bb\u30b9\u3055\u308c\u307e\u3059\u3002final \u3067\u5ba3\u8a00\u3055\u308c\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 +compiler.err.local.enum=\u5217\u6319\u578b\u306f\u30ed\u30fc\u30ab\u30eb\u3067\u306f\u3044\u3051\u307e\u305b\u3093\u3002 +compiler.err.cannot.create.array.with.type.arguments=\u578b\u5f15\u6570\u3092\u4f7f\u3063\u3066\u914d\u5217\u3092\u751f\u6210\u3067\u304d\u307e\u305b\u3093\u3002 # # limits. We don't give the limits in the diagnostic because we expect # them to change, yet we want to use the same diagnostic. These are all # detected during code generation. # -compiler.err.limit.code=\ - \u30b3\u30fc\u30c9\u304c\u5927\u304d\u3059\u304e\u307e\u3059\u3002 -compiler.err.limit.code.too.large.for.try.stmt=\ - try \u6587\u306e\u30b3\u30fc\u30c9\u304c\u5927\u304d\u3059\u304e\u307e\u3059\u3002 -compiler.err.limit.dimensions=\ - \u914d\u5217\u578b\u306e\u6b21\u5143\u304c\u591a\u3059\u304e\u307e\u3059\u3002 -compiler.err.limit.locals=\ - \u30ed\u30fc\u30ab\u30eb\u5909\u6570\u304c\u591a\u3059\u304e\u307e\u3059\u3002 -compiler.err.limit.parameters=\ - \u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u591a\u3059\u304e\u307e\u3059\u3002 -compiler.err.limit.pool=\ - \u5b9a\u6570\u304c\u591a\u3059\u304e\u307e\u3059\u3002 -compiler.err.limit.pool.in.class=\ - \u30af\u30e9\u30b9 {0} \u5185\u306e\u5b9a\u6570\u304c\u591a\u3059\u304e\u307e\u3059\u3002 -compiler.err.limit.stack=\ - \u30b3\u30fc\u30c9\u304c\u8981\u6c42\u3059\u308b\u30b9\u30bf\u30c3\u30af\u304c\u591a\u3059\u304e\u307e\u3059\u3002 -compiler.err.limit.string=\ - \u5b9a\u6570\u6587\u5b57\u5217\u304c\u9577\u3059\u304e\u307e\u3059\u3002 -compiler.err.limit.string.overflow=\ - \u6587\u5b57\u5217 \"{0}...\" \u306e UTF8 \u8868\u73fe\u304c\u3001\u5b9a\u6570\u30d7\u30fc\u30eb\u306b\u5bfe\u3057\u3066\u9577\u3059\u304e\u307e\u3059\u3002 +compiler.err.limit.code=\u30b3\u30fc\u30c9\u304c\u5927\u304d\u3059\u304e\u307e\u3059\u3002 +compiler.err.limit.code.too.large.for.try.stmt=try \u6587\u306e\u30b3\u30fc\u30c9\u304c\u5927\u304d\u3059\u304e\u307e\u3059\u3002 +compiler.err.limit.dimensions=\u914d\u5217\u578b\u306e\u6b21\u5143\u304c\u591a\u3059\u304e\u307e\u3059\u3002 +compiler.err.limit.locals=\u30ed\u30fc\u30ab\u30eb\u5909\u6570\u304c\u591a\u3059\u304e\u307e\u3059\u3002 +compiler.err.limit.parameters=\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u591a\u3059\u304e\u307e\u3059\u3002 +compiler.err.limit.pool=\u5b9a\u6570\u304c\u591a\u3059\u304e\u307e\u3059\u3002 +compiler.err.limit.pool.in.class=\u30af\u30e9\u30b9 {0} \u5185\u306e\u5b9a\u6570\u304c\u591a\u3059\u304e\u307e\u3059\u3002 +compiler.err.limit.stack=\u30b3\u30fc\u30c9\u304c\u8981\u6c42\u3059\u308b\u30b9\u30bf\u30c3\u30af\u304c\u591a\u3059\u304e\u307e\u3059\u3002 +compiler.err.limit.string=\u5b9a\u6570\u6587\u5b57\u5217\u304c\u9577\u3059\u304e\u307e\u3059\u3002 +compiler.err.limit.string.overflow=\u6587\u5b57\u5217 \"{0}...\" \u306e UTF8 \u8868\u73fe\u304c\u3001\u5b9a\u6570\u30d7\u30fc\u30eb\u306b\u5bfe\u3057\u3066\u9577\u3059\u304e\u307e\u3059\u3002 -compiler.err.malformed.fp.lit=\ - \u6d6e\u52d5\u5c0f\u6570\u70b9\u30ea\u30c6\u30e9\u30eb\u304c\u4e0d\u6b63\u3067\u3059\u3002 -compiler.err.method.does.not.override.superclass=\ - \u30e1\u30bd\u30c3\u30c9\u306f\u30b9\u30fc\u30d1\u30fc\u30bf\u30a4\u30d7\u306e\u30e1\u30bd\u30c3\u30c9\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u307e\u305f\u306f\u5b9f\u88c5\u3057\u307e\u305b\u3093 -compiler.err.missing.meth.body.or.decl.abstract=\ - \u30e1\u30bd\u30c3\u30c9\u672c\u4f53\u304c\u306a\u3044\u304b\u3001abstract \u3068\u3057\u3066\u5ba3\u8a00\u3055\u308c\u3066\u3044\u307e\u3059\u3002 -compiler.err.missing.ret.stmt=\ - return \u6587\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 -compiler.err.missing.ret.val=\ - \u623b\u308a\u5024\u304c\u3042\u308a\u307e\u305b\u3093\u3002 -compiler.err.mod.not.allowed.here=\ - \u4fee\u98fe\u5b50 {0} \u3092\u3053\u3053\u3067\u4f7f\u3046\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.intf.not.allowed.here=\ - \u3053\u3053\u3067\u306f\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u306f\u8a31\u53ef\u3055\u308c\u307e\u305b\u3093 -compiler.err.enums.must.be.static=\ - \u5217\u6319\u578b\u306e\u5ba3\u8a00\u306f static \u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3067\u3057\u304b\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093 +compiler.err.malformed.fp.lit=\u6d6e\u52d5\u5c0f\u6570\u70b9\u30ea\u30c6\u30e9\u30eb\u304c\u4e0d\u6b63\u3067\u3059\u3002 +compiler.err.method.does.not.override.superclass=\u30e1\u30bd\u30c3\u30c9\u306f\u30b9\u30fc\u30d1\u30fc\u30bf\u30a4\u30d7\u306e\u30e1\u30bd\u30c3\u30c9\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u307e\u305f\u306f\u5b9f\u88c5\u3057\u307e\u305b\u3093 +compiler.err.missing.meth.body.or.decl.abstract=\u30e1\u30bd\u30c3\u30c9\u672c\u4f53\u304c\u306a\u3044\u304b\u3001abstract \u3068\u3057\u3066\u5ba3\u8a00\u3055\u308c\u3066\u3044\u307e\u3059\u3002 +compiler.err.missing.ret.stmt=return \u6587\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 +compiler.err.missing.ret.val=\u623b\u308a\u5024\u304c\u3042\u308a\u307e\u305b\u3093\u3002 +compiler.err.mod.not.allowed.here=\u4fee\u98fe\u5b50 {0} \u3092\u3053\u3053\u3067\u4f7f\u3046\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.intf.not.allowed.here=\u3053\u3053\u3067\u306f\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u306f\u8a31\u53ef\u3055\u308c\u307e\u305b\u3093 +compiler.err.enums.must.be.static=\u5217\u6319\u578b\u306e\u5ba3\u8a00\u306f static \u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3067\u3057\u304b\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093 -compiler.err.name.clash.same.erasure=\ - \u540d\u524d\u304c\u7af6\u5408\u3057\u3066\u3044\u307e\u3059\u3002{0} \u3068 {1} \u306f\u524a\u9664\u5f8c\u306e\u540d\u524d\u304c\u540c\u3058\u3067\u3059\u3002 -compiler.err.name.clash.same.erasure.no.override=\ - \u540d\u524d\u304c\u7af6\u5408\u3057\u3066\u3044\u307e\u3059\u3002{1} \u306e {0} \u3068 {3} \u306e {2} \u306f\u307e\u3060\u4ed6\u65b9\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3057\u3066\u3044\u307e\u305b\u3093\u304c\u3001\u524a\u9664\u5f8c\u306e\u540d\u524d\u304c\u540c\u3058\u3067\u3059\u3002 -compiler.err.name.reserved.for.internal.use=\ - {0} \u306f\u5185\u90e8\u3067\u306e\u4f7f\u7528\u306e\u305f\u3081\u4e88\u7d04\u3055\u308c\u3066\u3044\u307e\u3059\u3002 -compiler.err.native.meth.cant.have.body=\ - native \u30e1\u30bd\u30c3\u30c9\u304c\u672c\u4f53\u3092\u6301\u3064\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.neither.conditional.subtype=\ - ? \u306b\u5bfe\u3059\u308b\u4e92\u63db\u6027\u306e\u306a\u3044\u578b : \u3069\u3061\u3089\u3082\u4ed6\u65b9\u306e\u30b5\u30d6\u30bf\u30a4\u30d7\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\n\ - 2 \u756a\u76ee\u306e\u30aa\u30da\u30e9\u30f3\u30c9 : {0}\n\ - 3 \u756a\u76ee\u306e\u30aa\u30da\u30e9\u30f3\u30c9 : {1} -compiler.err.new.not.allowed.in.annotation=\ - ''new'' \u306f\u6ce8\u91c8\u306b\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093 -compiler.err.no.annotation.member=\ - {1} \u306e\u6ce8\u91c8\u30e1\u30f3\u30d0 {0} \u304c\u3042\u308a\u307e\u305b\u3093\u3002 -compiler.err.no.encl.instance.of.type.in.scope=\ - \u578b {0} \u306e\u5185\u90e8\u30af\u30e9\u30b9\u3092\u56f2\u3080\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u30b9\u30b3\u30fc\u30d7\u5185\u306b\u3042\u308a\u307e\u305b\u3093\u3002 -compiler.err.no.intf.expected.here=\ - \u3053\u3053\u306b\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u306f\u5fc5\u8981\u3042\u308a\u307e\u305b\u3093\u3002 -compiler.err.no.match.entry=\ - {0} \u306f {1} \u306e\u30a8\u30f3\u30c8\u30ea\u306b\u9069\u5408\u3057\u307e\u305b\u3093\u3002{2} \u304c\u5fc5\u8981\u3067\u3059\u3002 -compiler.err.not.annotation.type=\ - {0} \u306f\u6ce8\u91c8\u578b\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 -compiler.err.not.def.access.class.intf.cant.access=\ - {1} \u306e {0} \u304c\u30a2\u30af\u30bb\u30b9\u3067\u304d\u306a\u3044\u30af\u30e9\u30b9\u307e\u305f\u306f\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u306b\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u3059 -compiler.err.not.def.public.cant.access=\ - {1} \u306e {0} \u306f public \u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u30d1\u30c3\u30b1\u30fc\u30b8\u5916\u304b\u3089\u306f\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.not.loop.label=\ - {0} \u306f\u30eb\u30fc\u30d7\u30e9\u30d9\u30eb\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 -compiler.err.not.stmt=\ - \u6587\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 -compiler.err.not.encl.class=\ - {0} \u306f\u5185\u90e8\u30af\u30e9\u30b9\u3092\u56f2\u307f\u307e\u305b\u3093\u3002 +compiler.err.name.clash.same.erasure=\u540d\u524d\u304c\u7af6\u5408\u3057\u3066\u3044\u307e\u3059\u3002{0} \u3068 {1} \u306f\u524a\u9664\u5f8c\u306e\u540d\u524d\u304c\u540c\u3058\u3067\u3059\u3002 +compiler.err.name.clash.same.erasure.no.override=\u540d\u524d\u304c\u7af6\u5408\u3057\u3066\u3044\u307e\u3059\u3002{1} \u306e {0} \u3068 {3} \u306e {2} \u306f\u307e\u3060\u4ed6\u65b9\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3057\u3066\u3044\u307e\u305b\u3093\u304c\u3001\u524a\u9664\u5f8c\u306e\u540d\u524d\u304c\u540c\u3058\u3067\u3059\u3002 +compiler.err.name.reserved.for.internal.use={0} \u306f\u5185\u90e8\u3067\u306e\u4f7f\u7528\u306e\u305f\u3081\u4e88\u7d04\u3055\u308c\u3066\u3044\u307e\u3059\u3002 +compiler.err.native.meth.cant.have.body=native \u30e1\u30bd\u30c3\u30c9\u304c\u672c\u4f53\u3092\u6301\u3064\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.neither.conditional.subtype=? \u306b\u5bfe\u3059\u308b\u4e92\u63db\u6027\u306e\u306a\u3044\u578b : \u3069\u3061\u3089\u3082\u4ed6\u65b9\u306e\u30b5\u30d6\u30bf\u30a4\u30d7\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\n2 \u756a\u76ee\u306e\u30aa\u30da\u30e9\u30f3\u30c9 : {0}\n3 \u756a\u76ee\u306e\u30aa\u30da\u30e9\u30f3\u30c9 : {1} +compiler.err.new.not.allowed.in.annotation=''new'' \u306f\u6ce8\u91c8\u306b\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093 +compiler.err.no.annotation.member={1} \u306e\u6ce8\u91c8\u30e1\u30f3\u30d0 {0} \u304c\u3042\u308a\u307e\u305b\u3093\u3002 +compiler.err.no.encl.instance.of.type.in.scope=\u578b {0} \u306e\u5185\u90e8\u30af\u30e9\u30b9\u3092\u56f2\u3080\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u30b9\u30b3\u30fc\u30d7\u5185\u306b\u3042\u308a\u307e\u305b\u3093\u3002 +compiler.err.no.intf.expected.here=\u3053\u3053\u306b\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u306f\u5fc5\u8981\u3042\u308a\u307e\u305b\u3093\u3002 +compiler.err.no.match.entry={0} \u306f {1} \u306e\u30a8\u30f3\u30c8\u30ea\u306b\u9069\u5408\u3057\u307e\u305b\u3093\u3002{2} \u304c\u5fc5\u8981\u3067\u3059\u3002 +compiler.err.not.annotation.type={0} \u306f\u6ce8\u91c8\u578b\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 +compiler.err.not.def.access.class.intf.cant.access={1} \u306e {0} \u304c\u30a2\u30af\u30bb\u30b9\u3067\u304d\u306a\u3044\u30af\u30e9\u30b9\u307e\u305f\u306f\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u306b\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u3059 +compiler.err.not.def.public.cant.access={1} \u306e {0} \u306f public \u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u30d1\u30c3\u30b1\u30fc\u30b8\u5916\u304b\u3089\u306f\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.not.loop.label={0} \u306f\u30eb\u30fc\u30d7\u30e9\u30d9\u30eb\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 +compiler.err.not.stmt=\u6587\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 +compiler.err.not.encl.class={0} \u306f\u5185\u90e8\u30af\u30e9\u30b9\u3092\u56f2\u307f\u307e\u305b\u3093\u3002 -compiler.err.operator.cant.be.applied=\ - \u6f14\u7b97\u5b50 {0} \u306f {1} \u306b\u9069\u7528\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.operator.cant.be.applied=\u6f14\u7b97\u5b50 {0} \u306f {1} \u306b\u9069\u7528\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.pkg.annotations.sb.in.package-info.java=\ - \u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u6ce8\u91c8\u306f\u30d5\u30a1\u30a4\u30eb package-info.java \u5185\u306b\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 -compiler.err.pkg.clashes.with.class.of.same.name=\ - \u30d1\u30c3\u30b1\u30fc\u30b8 {0} \u306f\u540c\u540d\u306e\u30af\u30e9\u30b9\u3068\u7af6\u5408\u3057\u3066\u3044\u307e\u3059\u3002 +compiler.err.pkg.annotations.sb.in.package-info.java=\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u6ce8\u91c8\u306f\u30d5\u30a1\u30a4\u30eb package-info.java \u5185\u306b\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 +compiler.err.pkg.clashes.with.class.of.same.name=\u30d1\u30c3\u30b1\u30fc\u30b8 {0} \u306f\u540c\u540d\u306e\u30af\u30e9\u30b9\u3068\u7af6\u5408\u3057\u3066\u3044\u307e\u3059\u3002 + +compiler.err.warnings.and.werror=\u8b66\u544a\u3092\u691c\u51fa\u3057 -Werror \u304c\u6307\u5b9a\u3055\u308c\u307e\u3057\u305f\u3002 # Errors related to annotation processing -compiler.err.proc.cant.access=\ -{0} \u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u305b\u3093\n\ -{1}\n\ -\u8a73\u7d30\u306f\u6b21\u306e\u30b9\u30bf\u30c3\u30af\u30c8\u30ec\u30fc\u30b9\u3067\u8abf\u67fb\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\ -{2} +compiler.err.proc.cant.access={0} \u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u305b\u3093\n{1}\n\u8a73\u7d30\u306f\u6b21\u306e\u30b9\u30bf\u30c3\u30af\u30c8\u30ec\u30fc\u30b9\u3067\u8abf\u67fb\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n{2} -compiler.err.proc.cant.find.class=\ - ''{0}'' \u306e\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002 +compiler.err.proc.cant.find.class=''{0}'' \u306e\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002 # Print a client-generated error message; assumed to be localized, no translation required -compiler.err.proc.messager=\ - {0} +compiler.err.proc.messager={0} -compiler.err.proc.no.explicit.annotation.processing.requested=\ - \u30af\u30e9\u30b9\u540d ''{0}'' \u304c\u53d7\u3051\u5165\u308c\u3089\u308c\u308b\u306e\u306f\u3001\u6ce8\u91c8\u51e6\u7406\u304c\u660e\u793a\u7684\u306b\u8981\u6c42\u3055\u308c\u305f\u5834\u5408\u3060\u3051\u3067\u3059 +compiler.err.proc.no.explicit.annotation.processing.requested=\u30af\u30e9\u30b9\u540d ''{0}'' \u304c\u53d7\u3051\u5165\u308c\u3089\u308c\u308b\u306e\u306f\u3001\u6ce8\u91c8\u51e6\u7406\u304c\u660e\u793a\u7684\u306b\u8981\u6c42\u3055\u308c\u305f\u5834\u5408\u3060\u3051\u3067\u3059 -compiler.err.proc.processor.bad.option.name=\ - \u30d7\u30ed\u30bb\u30c3\u30b5 ''{1}'' \u306b\u3088\u3063\u3066\u6307\u5b9a\u3055\u308c\u305f\u30aa\u30d7\u30b7\u30e7\u30f3\u540d ''{0}'' \u304c\u4e0d\u6b63\u3067\u3059 +compiler.err.proc.no.service=\u30b5\u30fc\u30d3\u30b9\u30ed\u30fc\u30c0\u30fc\u30af\u30e9\u30b9\u304c\u307f\u3064\u304b\u308a\u307e\u305b\u3093\u3002\njava.util.ServiceLoader \u3082\u3057\u304f\u306f sun.misc.Service \u304c\u5229\u7528\u53ef\u80fd\u3067\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 -compiler.err.proc.processor.cant.instantiate=\ - \u30d7\u30ed\u30bb\u30c3\u30b5 ''{0}'' \u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f +compiler.err.proc.processor.bad.option.name=\u30d7\u30ed\u30bb\u30c3\u30b5 ''{1}'' \u306b\u3088\u3063\u3066\u6307\u5b9a\u3055\u308c\u305f\u30aa\u30d7\u30b7\u30e7\u30f3\u540d ''{0}'' \u304c\u4e0d\u6b63\u3067\u3059 -compiler.err.proc.processor.constructor.error=\ - \u30d7\u30ed\u30bb\u30c3\u30b5\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u69cb\u7bc9\u4e2d\u306b\u4f8b\u5916\u304c\u30b9\u30ed\u30fc\u3055\u308c\u307e\u3057\u305f: {0} +compiler.err.proc.processor.cant.instantiate=\u30d7\u30ed\u30bb\u30c3\u30b5 ''{0}'' \u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f -compiler.err.proc.processor.not.found=\ - \u6ce8\u91c8\u30d7\u30ed\u30bb\u30c3\u30b5 ''{0}'' \u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093 +compiler.err.proc.processor.constructor.error=\u30d7\u30ed\u30bb\u30c3\u30b5\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u69cb\u7bc9\u4e2d\u306b\u4f8b\u5916\u304c\u30b9\u30ed\u30fc\u3055\u308c\u307e\u3057\u305f: {0} -compiler.err.proc.processor.wrong.type=\ - \u6ce8\u91c8\u30d7\u30ed\u30bb\u30c3\u30b5 ''{0}'' \u304c javax.annotation.processing.Processor \u3092\u5b9f\u88c5\u3057\u3066\u3044\u307e\u305b\u3093 +compiler.err.proc.processor.not.found=\u6ce8\u91c8\u30d7\u30ed\u30bb\u30c3\u30b5 ''{0}'' \u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093 -compiler.err.proc.bad.config.file=\ - \u30b5\u30fc\u30d3\u30b9\u69cb\u6210\u30d5\u30a1\u30a4\u30eb\u304c\u4e0d\u6b63\u3067\u3042\u308b\u304b\u3001\u30d7\u30ed\u30bb\u30c3\u30b5\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u69cb\u7bc9\u4e2d\u306b\u4f8b\u5916\u304c\u30b9\u30ed\u30fc\u3055\u308c\u307e\u3057\u305f: {0} +compiler.err.proc.processor.wrong.type=\u6ce8\u91c8\u30d7\u30ed\u30bb\u30c3\u30b5 ''{0}'' \u304c javax.annotation.processing.Processor \u3092\u5b9f\u88c5\u3057\u3066\u3044\u307e\u305b\u3093 -compiler.err.proc.cant.create.loader=\ - \u6ce8\u91c8\u30d7\u30ed\u30bb\u30c3\u30b5\u306e\u30af\u30e9\u30b9\u30ed\u30fc\u30c0\u30fc\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f: {0} +compiler.err.proc.service.problem=Processor \u3092\u30ed\u30fc\u30c9\u3059\u308b\u30b5\u30fc\u30d3\u30b9\u30ed\u30fc\u30c0\u30fc\u306e\u751f\u6210\u6642\u306e\u30a8\u30e9\u30fc\u3067\u3059\u3002 -compiler.err.qualified.new.of.static.class=\ - static \u30af\u30e9\u30b9\u306e new \u304c\u4fee\u98fe\u3055\u308c\u3066\u3044\u307e\u3059\u3002 +compiler.err.proc.bad.config.file=\u30b5\u30fc\u30d3\u30b9\u69cb\u6210\u30d5\u30a1\u30a4\u30eb\u304c\u4e0d\u6b63\u3067\u3042\u308b\u304b\u3001\u30d7\u30ed\u30bb\u30c3\u30b5\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u69cb\u7bc9\u4e2d\u306b\u4f8b\u5916\u304c\u30b9\u30ed\u30fc\u3055\u308c\u307e\u3057\u305f: {0} -compiler.err.recursive.ctor.invocation=\ - \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u306e\u547c\u3073\u51fa\u3057\u304c\u518d\u5e30\u7684\u3067\u3059\u3002 -compiler.err.ref.ambiguous=\ - {0} \u306e\u53c2\u7167\u306f\u3042\u3044\u307e\u3044\u3067\u3059\u3002{3} \u306e {1} {2} \u3068 {6} \u306e {4} {5} \u304c\u4e21\u65b9\u9069\u5408\u3057\u307e\u3059\u3002 -compiler.err.repeated.annotation.target=\ - \u6ce8\u91c8\u30bf\u30fc\u30b2\u30c3\u30c8\u304c\u7e70\u308a\u8fd4\u3055\u308c\u3066\u3044\u307e\u3059\u3002 -compiler.err.repeated.interface=\ - \u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u304c\u7e70\u308a\u8fd4\u3055\u308c\u3066\u3044\u307e\u3059\u3002 -compiler.err.repeated.modifier=\ - \u4fee\u98fe\u5b50\u304c\u7e70\u308a\u8fd4\u3055\u308c\u3066\u3044\u307e\u3059\u3002 -compiler.err.report.access=\ - {0} \u306f {2} \u3067 {1} \u30a2\u30af\u30bb\u30b9\u3055\u308c\u307e\u3059\u3002 -compiler.err.ret.outside.meth=\ - \u30e1\u30bd\u30c3\u30c9\u306e\u5916\u306e return \u6587\u3067\u3059\u3002 +compiler.err.proc.cant.create.loader=\u6ce8\u91c8\u30d7\u30ed\u30bb\u30c3\u30b5\u306e\u30af\u30e9\u30b9\u30ed\u30fc\u30c0\u30fc\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f: {0} -compiler.err.signature.doesnt.match.supertype=\ - \u30b7\u30b0\u30cb\u30c1\u30e3\u30fc\u304c {0} \u306b\u9069\u5408\u3057\u307e\u305b\u3093\u3002\u4e92\u63db\u6027\u306e\u306a\u3044\u30b9\u30fc\u30d1\u30fc\u30bf\u30a4\u30d7\u3067\u3059\u3002 -compiler.err.signature.doesnt.match.intf=\ - \u30b7\u30b0\u30cb\u30c1\u30e3\u30fc\u304c {0} \u306b\u9069\u5408\u3057\u307e\u305b\u3093\u3002\u4e92\u63db\u6027\u306e\u306a\u3044\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u3067\u3059\u3002 -compiler.err.does.not.override.abstract=\ - {0} \u306f abstract \u3067\u306a\u304f\u3001{2} \u5185\u306e abstract \u30e1\u30bd\u30c3\u30c9 {1} \u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3057\u307e\u305b\u3093\u3002 -compiler.err.source.cant.overwrite.input.file=\ - \u30bd\u30fc\u30b9\u306e\u66f8\u304d\u8fbc\u307f\u30a8\u30e9\u30fc\u3067\u3059\u3002\u5165\u529b\u30d5\u30a1\u30a4\u30eb {0} \u3092\u4e0a\u66f8\u304d\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.stack.sim.error=\ - \u5185\u90e8\u30a8\u30e9\u30fc: {0} \u3067\u306e\u30b9\u30bf\u30c3\u30af\u30b7\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3\u30a8\u30e9\u30fc -compiler.err.static.imp.only.classes.and.interfaces=\ - static import \u306f\u30af\u30e9\u30b9\u3068\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u304b\u3089\u306e\u307f\u3068\u306a\u308a\u307e\u3059\u3002 -compiler.err.synthetic.name.conflict=\ - \u30b7\u30f3\u30dc\u30eb {0} \u304c\u3001{1} \u3067\u30b3\u30f3\u30d1\u30a4\u30e9\u304c\u5408\u6210\u3057\u305f\u30b7\u30f3\u30dc\u30eb\u3068\u7af6\u5408\u3057\u307e\u3059\u3002 +compiler.err.qualified.new.of.static.class=static \u30af\u30e9\u30b9\u306e new \u304c\u4fee\u98fe\u3055\u308c\u3066\u3044\u307e\u3059\u3002 -compiler.err.throws.not.allowed.in.intf.annotation=\ - throws \u7bc0\u3092 @interface \u30e1\u30f3\u30d0\u3067\u4f7f\u7528\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.try.without.catch.or.finally=\ - ''try'' \u3078\u306e ''catch'' \u307e\u305f\u306f ''finally'' \u304c\u3042\u308a\u307e\u305b\u3093\u3002 -compiler.err.type.doesnt.take.params=\ - \u578b {0} \u306f\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u3068\u308a\u307e\u305b\u3093\u3002 -compiler.err.type.var.cant.be.deref=\ - \u578b\u5909\u6570\u304b\u3089\u9078\u629e\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.type.var.may.not.be.followed.by.other.bounds=\ - \u3053\u306e\u578b\u5909\u6570\u306e\u5f8c\u308d\u306b\u4ed6\u306e\u5883\u754c\u3092\u914d\u7f6e\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.type.var.more.than.once=\ - \u578b\u5909\u6570 {0} \u306f {1} \u306e\u623b\u308a\u5024\u306e\u578b\u3067 2 \u56de\u4ee5\u4e0a\u51fa\u73fe\u3057\u307e\u3059\u3002\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u751f\u6210\u3055\u308c\u306a\u3044\u307e\u307e\u306b\u306f\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.type.var.more.than.once.in.result=\ - \u578b\u5909\u6570 {0} \u306f {1} \u306e\u578b\u3067 2 \u56de\u4ee5\u4e0a\u51fa\u73fe\u3057\u307e\u3059\u3002\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u751f\u6210\u3055\u308c\u306a\u3044\u307e\u307e\u306b\u306f\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.types.incompatible.diff.ret=\ - \u578b {0} \u3068\u578b {1} \u306e\u4e92\u63db\u6027\u304c\u3042\u308a\u307e\u305b\u3093\u3002\u4e21\u65b9\u3068\u3082 {2} \u3092\u5b9a\u7fa9\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u623b\u308a\u5024\u306e\u578b\u304c\u7121\u95a2\u4fc2\u3067\u3059\u3002 +compiler.err.recursive.ctor.invocation=\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u306e\u547c\u3073\u51fa\u3057\u304c\u518d\u5e30\u7684\u3067\u3059\u3002 +compiler.err.ref.ambiguous={0} \u306e\u53c2\u7167\u306f\u3042\u3044\u307e\u3044\u3067\u3059\u3002{3} \u306e {1} {2} \u3068 {6} \u306e {4} {5} \u304c\u4e21\u65b9\u9069\u5408\u3057\u307e\u3059\u3002 +compiler.err.repeated.annotation.target=\u6ce8\u91c8\u30bf\u30fc\u30b2\u30c3\u30c8\u304c\u7e70\u308a\u8fd4\u3055\u308c\u3066\u3044\u307e\u3059\u3002 +compiler.err.repeated.interface=\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u304c\u7e70\u308a\u8fd4\u3055\u308c\u3066\u3044\u307e\u3059\u3002 +compiler.err.repeated.modifier=\u4fee\u98fe\u5b50\u304c\u7e70\u308a\u8fd4\u3055\u308c\u3066\u3044\u307e\u3059\u3002 +compiler.err.report.access={0} \u306f {2} \u3067 {1} \u30a2\u30af\u30bb\u30b9\u3055\u308c\u307e\u3059\u3002 +compiler.err.ret.outside.meth=\u30e1\u30bd\u30c3\u30c9\u306e\u5916\u306e return \u6587\u3067\u3059\u3002 -compiler.err.unclosed.char.lit=\ - \u6587\u5b57\u30ea\u30c6\u30e9\u30eb\u304c\u9589\u3058\u3089\u308c\u3066\u3044\u307e\u305b\u3093\u3002 -compiler.err.unclosed.comment=\ - \u30b3\u30e1\u30f3\u30c8\u304c\u9589\u3058\u3089\u308c\u3066\u3044\u307e\u305b\u3093\u3002 -compiler.err.unclosed.str.lit=\ - \u6587\u5b57\u5217\u30ea\u30c6\u30e9\u30eb\u304c\u9589\u3058\u3089\u308c\u3066\u3044\u307e\u305b\u3093\u3002 -compiler.err.unknown.enum.constant=\ - \u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb {0} \u5185: \u4e0d\u660e\u306a\u5217\u6319\u578b\u5b9a\u6570\u3067\u3059 {1}.{2} -compiler.err.unsupported.encoding=\ - \u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u306a\u3044\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3067\u3059: {0} -compiler.err.io.exception=\ - \u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u53d6\u308a\u30a8\u30e9\u30fc\u3067\u3059: {0} -compiler.err.undef.label=\ - \u30e9\u30d9\u30eb {0} \u306f\u672a\u5b9a\u7fa9\u3067\u3059\u3002 -compiler.err.undetermined.type=\ - {0} \u306e\u578b\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u5224\u5225\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.err.undetermined.type.1=\ - \u578b\u30d1\u30e9\u30e1\u30fc\u30bf {0} \u3092\u5224\u5225\u3067\u304d\u307e\u305b\u3093; {1} -compiler.err.unreachable.stmt=\ - \u3053\u306e\u6587\u306b\u5236\u5fa1\u304c\u79fb\u308b\u3053\u3068\u306f\u3042\u308a\u307e\u305b\u3093\u3002 -compiler.err.initializer.must.be.able.to.complete.normally=\ - \u521d\u671f\u5316\u5b50\u306f\u6b63\u5e38\u306b\u5b8c\u4e86\u3067\u304d\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 -compiler.err.unreported.exception.need.to.catch.or.throw=\ - \u4f8b\u5916 {0} \u306f\u5831\u544a\u3055\u308c\u307e\u305b\u3093\u3002\u30b9\u30ed\u30fc\u3059\u308b\u306b\u306f\u30ad\u30e3\u30c3\u30c1\u307e\u305f\u306f\u3001\u30b9\u30ed\u30fc\u5ba3\u8a00\u3092\u3057\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 -compiler.err.unreported.exception.default.constructor=\ - \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u5185\u306b\u5831\u544a\u3055\u308c\u306a\u3044\u4f8b\u5916 {0} \u304c\u5b58\u5728\u3057\u307e\u3059\u3002 -compiler.err.unsupported.cross.fp.lit=\ - 16 \u9032\u6d6e\u52d5\u5c0f\u6570\u70b9\u30ea\u30c6\u30e9\u30eb\u306f\u3053\u306e VM \u3067\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 -compiler.err.void.not.allowed.here=\ - \u3053\u3053\u3067 ''void'' \u578b\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.signature.doesnt.match.supertype=\u30b7\u30b0\u30cb\u30c1\u30e3\u30fc\u304c {0} \u306b\u9069\u5408\u3057\u307e\u305b\u3093\u3002\u4e92\u63db\u6027\u306e\u306a\u3044\u30b9\u30fc\u30d1\u30fc\u30bf\u30a4\u30d7\u3067\u3059\u3002 +compiler.err.signature.doesnt.match.intf=\u30b7\u30b0\u30cb\u30c1\u30e3\u30fc\u304c {0} \u306b\u9069\u5408\u3057\u307e\u305b\u3093\u3002\u4e92\u63db\u6027\u306e\u306a\u3044\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u3067\u3059\u3002 +compiler.err.does.not.override.abstract={0} \u306f abstract \u3067\u306a\u304f\u3001{2} \u5185\u306e abstract \u30e1\u30bd\u30c3\u30c9 {1} \u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3057\u307e\u305b\u3093\u3002 +compiler.err.source.cant.overwrite.input.file=\u30bd\u30fc\u30b9\u306e\u66f8\u304d\u8fbc\u307f\u30a8\u30e9\u30fc\u3067\u3059\u3002\u5165\u529b\u30d5\u30a1\u30a4\u30eb {0} \u3092\u4e0a\u66f8\u304d\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.stack.sim.error=\u5185\u90e8\u30a8\u30e9\u30fc: {0} \u3067\u306e\u30b9\u30bf\u30c3\u30af\u30b7\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3\u30a8\u30e9\u30fc +compiler.err.static.imp.only.classes.and.interfaces=static import \u306f\u30af\u30e9\u30b9\u3068\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u304b\u3089\u306e\u307f\u3068\u306a\u308a\u307e\u3059\u3002 +compiler.err.string.const.req=\u5b9a\u6570\u6587\u5b57\u5217\u5f0f\u304c\u5fc5\u8981\u3067\u3059\u3002 +compiler.err.synthetic.name.conflict=\u30b7\u30f3\u30dc\u30eb {0} \u304c\u3001{1} \u3067\u30b3\u30f3\u30d1\u30a4\u30e9\u304c\u5408\u6210\u3057\u305f\u30b7\u30f3\u30dc\u30eb\u3068\u7af6\u5408\u3057\u307e\u3059\u3002 +compiler.warn.synthetic.name.conflict=\u30b7\u30f3\u30dc\u30eb {0} \u304c\u3001{1} \u3067\u30b3\u30f3\u30d1\u30a4\u30e9\u304c\u5408\u6210\u3057\u305f\u30b7\u30f3\u30dc\u30eb\u3068\u7af6\u5408\u3057\u307e\u3059\u3002 -compiler.err.wrong.number.type.args=\ - \u578b\u5f15\u6570\u306e\u6570\u304c\u4e0d\u6b63\u3067\u3059\u3002{0} \u500b\u5fc5\u8981\u3067\u3059\u3002 +compiler.err.throws.not.allowed.in.intf.annotation=throws \u7bc0\u3092 @interface \u30e1\u30f3\u30d0\u3067\u4f7f\u7528\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.try.without.catch.or.finally=''try'' \u3078\u306e ''catch'' \u307e\u305f\u306f ''finally'' \u304c\u3042\u308a\u307e\u305b\u3093\u3002 +compiler.err.type.doesnt.take.params=\u578b {0} \u306f\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u3068\u308a\u307e\u305b\u3093\u3002 +compiler.err.type.var.cant.be.deref=\u578b\u5909\u6570\u304b\u3089\u9078\u629e\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.type.var.may.not.be.followed.by.other.bounds=\u3053\u306e\u578b\u5909\u6570\u306e\u5f8c\u308d\u306b\u4ed6\u306e\u5883\u754c\u3092\u914d\u7f6e\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.type.var.more.than.once=\u578b\u5909\u6570 {0} \u306f {1} \u306e\u623b\u308a\u5024\u306e\u578b\u3067 2 \u56de\u4ee5\u4e0a\u51fa\u73fe\u3057\u307e\u3059\u3002\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u751f\u6210\u3055\u308c\u306a\u3044\u307e\u307e\u306b\u306f\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.type.var.more.than.once.in.result=\u578b\u5909\u6570 {0} \u306f {1} \u306e\u578b\u3067 2 \u56de\u4ee5\u4e0a\u51fa\u73fe\u3057\u307e\u3059\u3002\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u751f\u6210\u3055\u308c\u306a\u3044\u307e\u307e\u306b\u306f\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.types.incompatible.diff.ret=\u578b {0} \u3068\u578b {1} \u306e\u4e92\u63db\u6027\u304c\u3042\u308a\u307e\u305b\u3093\u3002\u4e21\u65b9\u3068\u3082 {2} \u3092\u5b9a\u7fa9\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u623b\u308a\u5024\u306e\u578b\u304c\u7121\u95a2\u4fc2\u3067\u3059\u3002 -compiler.err.var.might.already.be.assigned=\ - \u5909\u6570 {0} \u306f\u3059\u3067\u306b\u4ee3\u5165\u3055\u308c\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 -compiler.err.var.might.not.have.been.initialized=\ - \u5909\u6570 {0} \u306f\u521d\u671f\u5316\u3055\u308c\u3066\u3044\u306a\u3044\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 -compiler.err.var.might.be.assigned.in.loop=\ - \u5909\u6570 {0} \u306f\u30eb\u30fc\u30d7\u5185\u3067\u4ee3\u5165\u3055\u308c\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 +compiler.err.unclosed.bytecode.ident=\u30d0\u30a4\u30c8\u30b3\u30fc\u30c9\u8b58\u5225\u5b50\u304c\u9589\u3058\u3089\u308c\u3066\u3044\u307e\u305b\u3093\u3002 +compiler.err.unclosed.char.lit=\u6587\u5b57\u30ea\u30c6\u30e9\u30eb\u304c\u9589\u3058\u3089\u308c\u3066\u3044\u307e\u305b\u3093\u3002 +compiler.err.unclosed.comment=\u30b3\u30e1\u30f3\u30c8\u304c\u9589\u3058\u3089\u308c\u3066\u3044\u307e\u305b\u3093\u3002 +compiler.err.unclosed.str.lit=\u6587\u5b57\u5217\u30ea\u30c6\u30e9\u30eb\u304c\u9589\u3058\u3089\u308c\u3066\u3044\u307e\u305b\u3093\u3002 +compiler.err.unknown.enum.constant=\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb {0} \u5185: \u4e0d\u660e\u306a\u5217\u6319\u578b\u5b9a\u6570\u3067\u3059 {1}.{2} +compiler.err.unsupported.encoding=\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u306a\u3044\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3067\u3059: {0} +compiler.err.io.exception=\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u53d6\u308a\u30a8\u30e9\u30fc\u3067\u3059: {0} +compiler.err.undef.label=\u30e9\u30d9\u30eb {0} \u306f\u672a\u5b9a\u7fa9\u3067\u3059\u3002 +compiler.err.undetermined.type={0} \u306e\u578b\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u5224\u5225\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.undetermined.type.1=\u578b\u30d1\u30e9\u30e1\u30fc\u30bf {0} \u3092\u5224\u5225\u3067\u304d\u307e\u305b\u3093; {1} +compiler.err.invalid.inferred.types={0} \u306e\u63a8\u5b9a\u3055\u308c\u305f\u578b\u304c\u4e0d\u6b63\u3067\u3059; {1} +compiler.err.unreachable.stmt=\u3053\u306e\u6587\u306b\u5236\u5fa1\u304c\u79fb\u308b\u3053\u3068\u306f\u3042\u308a\u307e\u305b\u3093\u3002 +compiler.err.initializer.must.be.able.to.complete.normally=\u521d\u671f\u5316\u5b50\u306f\u6b63\u5e38\u306b\u5b8c\u4e86\u3067\u304d\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 +compiler.err.unreported.exception.need.to.catch.or.throw=\u4f8b\u5916 {0} \u306f\u5831\u544a\u3055\u308c\u307e\u305b\u3093\u3002\u30b9\u30ed\u30fc\u3059\u308b\u306b\u306f\u30ad\u30e3\u30c3\u30c1\u307e\u305f\u306f\u3001\u30b9\u30ed\u30fc\u5ba3\u8a00\u3092\u3057\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 +compiler.err.unreported.exception.default.constructor=\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u5185\u306b\u5831\u544a\u3055\u308c\u306a\u3044\u4f8b\u5916 {0} \u304c\u5b58\u5728\u3057\u307e\u3059\u3002 +compiler.err.unsupported.cross.fp.lit=16 \u9032\u6d6e\u52d5\u5c0f\u6570\u70b9\u30ea\u30c6\u30e9\u30eb\u306f\u3053\u306e VM \u3067\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 +compiler.err.void.not.allowed.here=\u3053\u3053\u3067 ''void'' \u578b\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 + +compiler.err.wrong.number.type.args=\u578b\u5f15\u6570\u306e\u6570\u304c\u4e0d\u6b63\u3067\u3059\u3002{0} \u500b\u5fc5\u8981\u3067\u3059\u3002 + +compiler.err.var.might.already.be.assigned=\u5909\u6570 {0} \u306f\u3059\u3067\u306b\u4ee3\u5165\u3055\u308c\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 +compiler.err.var.might.not.have.been.initialized=\u5909\u6570 {0} \u306f\u521d\u671f\u5316\u3055\u308c\u3066\u3044\u306a\u3044\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 +compiler.err.var.might.be.assigned.in.loop=\u5909\u6570 {0} \u306f\u30eb\u30fc\u30d7\u5185\u3067\u4ee3\u5165\u3055\u308c\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 # In the following string, {1} will always be the detail message from # java.io.IOException. -compiler.err.class.cant.write=\ - {0} \u306e\u66f8\u304d\u8fbc\u307f\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002{1} +compiler.err.class.cant.write={0} \u306e\u66f8\u304d\u8fbc\u307f\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002{1} # In the following string, {0} is the name of the class in the Java source. # It really should be used two times.. -compiler.err.class.public.should.be.in.file=\ - \u30af\u30e9\u30b9 {0} \u306f public \u3067\u3042\u308a\u3001\u30d5\u30a1\u30a4\u30eb {0}.java \u3067\u5ba3\u8a00\u3057\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 +compiler.err.class.public.should.be.in.file=\u30af\u30e9\u30b9 {0} \u306f public \u3067\u3042\u308a\u3001\u30d5\u30a1\u30a4\u30eb {0}.java \u3067\u5ba3\u8a00\u3057\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 ## All errors which do not refer to a particular line in the source code are ## preceded by this string. -compiler.err.error=\ - \u30a8\u30e9\u30fc: +compiler.err.error=\u30a8\u30e9\u30fc: # The following error messages do not refer to a line in the source code. -compiler.err.cant.read.file=\ - {0} \u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3002 +compiler.err.cant.read.file={0} \u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3002 ##### # Fatal Errors -compiler.misc.fatal.err.no.java.lang=\ - \u81f4\u547d\u7684\u30a8\u30e9\u30fc: \u30af\u30e9\u30b9\u30d1\u30b9\u307e\u305f\u306f\u30d6\u30fc\u30c8\u30af\u30e9\u30b9\u30d1\u30b9\u3067\u30d1\u30c3\u30b1\u30fc\u30b8 java.lang \u3092\u691c\u51fa\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.misc.fatal.err.cant.locate.meth=\ - \u81f4\u547d\u7684\u30a8\u30e9\u30fc: \u30e1\u30bd\u30c3\u30c9 {0} \u3092\u691c\u51fa\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.misc.fatal.err.cant.locate.field=\ - \u81f4\u547d\u7684\u30a8\u30e9\u30fc: \u30d5\u30a3\u30fc\u30eb\u30c9 {0} \u3092\u691c\u51fa\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.misc.fatal.err.cant.locate.ctor=\ - \u81f4\u547d\u7684\u30a8\u30e9\u30fc: {0} \u306e\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3092\u691c\u51fa\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.misc.fatal.err.no.java.lang=\u81f4\u547d\u7684\u30a8\u30e9\u30fc: \u30af\u30e9\u30b9\u30d1\u30b9\u307e\u305f\u306f\u30d6\u30fc\u30c8\u30af\u30e9\u30b9\u30d1\u30b9\u3067\u30d1\u30c3\u30b1\u30fc\u30b8 java.lang \u3092\u691c\u51fa\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.misc.fatal.err.cant.locate.meth=\u81f4\u547d\u7684\u30a8\u30e9\u30fc: \u30e1\u30bd\u30c3\u30c9 {0} \u3092\u691c\u51fa\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.misc.fatal.err.cant.locate.field=\u81f4\u547d\u7684\u30a8\u30e9\u30fc: \u30d5\u30a3\u30fc\u30eb\u30c9 {0} \u3092\u691c\u51fa\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.misc.fatal.err.cant.locate.ctor=\u81f4\u547d\u7684\u30a8\u30e9\u30fc: {0} \u306e\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3092\u691c\u51fa\u3067\u304d\u307e\u305b\u3093\u3002 ##### @@ -503,107 +312,81 @@ compiler.misc.fatal.err.cant.locate.ctor=\ ## miscellaneous strings ## -compiler.misc.source.unavailable=\ - (\u30bd\u30fc\u30b9\u304c\u5229\u7528\u4e0d\u53ef) -compiler.misc.base.membership=\ - \u3059\u3079\u3066\u306e\u57fa\u5e95\u30af\u30e9\u30b9\u304c\u3001\u30e1\u30f3\u30d0\u3067\u3059\u3002 -compiler.misc.x.print.processor.info=\ - \u30d7\u30ed\u30bb\u30c3\u30b5 {0} \u306f {1} \u306b\u4e00\u81f4\u3057\u3001{2} \u3092\u8fd4\u3057\u307e\u3059\u3002 -compiler.misc.x.print.rounds=\ - \u5f80\u5fa9 {0}:\n\t\u5165\u529b\u30d5\u30a1\u30a4\u30eb: {1}\n\t\u6ce8\u91c8: {2}\n\t\u6700\u5f8c\u306e\u5f80\u5fa9: {3} +compiler.misc.source.unavailable=(\u30bd\u30fc\u30b9\u304c\u5229\u7528\u4e0d\u53ef) +compiler.misc.base.membership=\u3059\u3079\u3066\u306e\u57fa\u5e95\u30af\u30e9\u30b9\u304c\u3001\u30e1\u30f3\u30d0\u3067\u3059\u3002 +compiler.misc.x.print.processor.info=\u30d7\u30ed\u30bb\u30c3\u30b5 {0} \u306f {1} \u306b\u4e00\u81f4\u3057\u3001{2} \u3092\u8fd4\u3057\u307e\u3059\u3002 +compiler.misc.x.print.rounds=\u5f80\u5fa9 {0}:\n\t\u5165\u529b\u30d5\u30a1\u30a4\u30eb: {1}\n\t\u6ce8\u91c8: {2}\n\t\u6700\u5f8c\u306e\u5f80\u5fa9: {3} ##### ## The following string will appear before all messages keyed as: ## "compiler.note". -compiler.note.note=\ - \u6ce8: +compiler.note.note=\u6ce8: -compiler.note.deprecated.filename=\ - {0} \u306f\u63a8\u5968\u3055\u308c\u306a\u3044 API \u3092\u4f7f\u7528\u307e\u305f\u306f\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3057\u3066\u3044\u307e\u3059\u3002 -compiler.note.deprecated.plural=\ - \u4e00\u90e8\u306e\u5165\u529b\u30d5\u30a1\u30a4\u30eb\u306f\u63a8\u5968\u3055\u308c\u306a\u3044 API \u3092\u4f7f\u7528\u307e\u305f\u306f\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3057\u3066\u3044\u307e\u3059\u3002 +compiler.note.deprecated.filename={0} \u306f\u63a8\u5968\u3055\u308c\u306a\u3044 API \u3092\u4f7f\u7528\u307e\u305f\u306f\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3057\u3066\u3044\u307e\u3059\u3002 +compiler.note.deprecated.plural=\u4e00\u90e8\u306e\u5165\u529b\u30d5\u30a1\u30a4\u30eb\u306f\u63a8\u5968\u3055\u308c\u306a\u3044 API \u3092\u4f7f\u7528\u307e\u305f\u306f\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3057\u3066\u3044\u307e\u3059\u3002 # The following string may appear after one of the above deprecation # messages. -compiler.note.deprecated.recompile=\ - \u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u3001-Xlint:deprecation \u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u6307\u5b9a\u3057\u3066\u518d\u30b3\u30f3\u30d1\u30a4\u30eb\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +compiler.note.deprecated.recompile=\u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u3001-Xlint:deprecation \u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u6307\u5b9a\u3057\u3066\u518d\u30b3\u30f3\u30d1\u30a4\u30eb\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -compiler.note.deprecated.filename.additional=\ - {0} \u306b\u63a8\u5968\u3055\u308c\u306a\u3044 API \u306e\u8ffd\u52a0\u4f7f\u7528\u307e\u305f\u306f\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u304c\u3042\u308a\u307e\u3059\u3002 -compiler.note.deprecated.plural.additional=\ - \u4e00\u90e8\u306e\u5165\u529b\u30d5\u30a1\u30a4\u30eb\u306f\u63a8\u5968\u3055\u308c\u306a\u3044 API \u3092\u8ffd\u52a0\u4f7f\u7528\u307e\u305f\u306f\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3057\u3066\u3044\u307e\u3059\u3002 +compiler.note.deprecated.filename.additional={0} \u306b\u63a8\u5968\u3055\u308c\u306a\u3044 API \u306e\u8ffd\u52a0\u4f7f\u7528\u307e\u305f\u306f\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u304c\u3042\u308a\u307e\u3059\u3002 +compiler.note.deprecated.plural.additional=\u4e00\u90e8\u306e\u5165\u529b\u30d5\u30a1\u30a4\u30eb\u306f\u63a8\u5968\u3055\u308c\u306a\u3044 API \u3092\u8ffd\u52a0\u4f7f\u7528\u307e\u305f\u306f\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3057\u3066\u3044\u307e\u3059\u3002 + +compiler.note.unchecked.filename={0} \u306e\u64cd\u4f5c\u306f\u3001\u672a\u30c1\u30a7\u30c3\u30af\u307e\u305f\u306f\u5b89\u5168\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 +compiler.note.unchecked.plural=\u5165\u529b\u30d5\u30a1\u30a4\u30eb\u306e\u64cd\u4f5c\u306e\u3046\u3061\u3001\u672a\u30c1\u30a7\u30c3\u30af\u307e\u305f\u306f\u5b89\u5168\u3067\u306f\u306a\u3044\u3082\u306e\u304c\u3042\u308a\u307e\u3059\u3002 +# The following string may appear after one of the above deprecation +# messages. +compiler.note.unchecked.recompile=\u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u3001-Xlint:unchecked \u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u6307\u5b9a\u3057\u3066\u518d\u30b3\u30f3\u30d1\u30a4\u30eb\u3057\u3066\u304f\u3060\u3055\u3044\u3002 + +compiler.note.unchecked.filename.additional={0} \u306b\u672a\u30c1\u30a7\u30c3\u30af\u307e\u305f\u306f\u5b89\u5168\u3067\u306f\u306a\u3044\u64cd\u4f5c\u304c\u3055\u3089\u306b\u3042\u308a\u307e\u3059\u3002 +compiler.note.unchecked.plural.additional=\u5165\u529b\u30d5\u30a1\u30a4\u30eb\u306e\u64cd\u4f5c\u306e\u3046\u3061\u3001\u672a\u30c1\u30a7\u30c3\u30af\u307e\u305f\u306f\u5b89\u5168\u3067\u306f\u306a\u3044\u3082\u306e\u304c\u3055\u3089\u306b\u3042\u308a\u307e\u3059\u3002 + +compiler.note.sunapi.filename={0} \u306f\u4eca\u5f8c\u306e\u30ea\u30ea\u30fc\u30b9\u3067\u524a\u9664\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u3001Sun \u304c\u6240\u6709\u3059\u308b API \u3092\u4f7f\u7528\u3057\u307e\u3059\u3002 +compiler.note.sunapi.plural=\u4e00\u90e8\u306e\u5165\u529b\u30d5\u30a1\u30a4\u30eb\u306f\u4eca\u5f8c\u306e\u30ea\u30ea\u30fc\u30b9\u3067\u524a\u9664\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u3001Sun \u304c\u6240\u6709\u3059\u308b API \u3092\u4f7f\u7528\u3057\u307e\u3059\u3002 +# The following string may appear after one of the above sunapi messages. +compiler.note.sunapi.recompile=\u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u3001-Xlint:sunapi \u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u6307\u5b9a\u3057\u3066\u518d\u30b3\u30f3\u30d1\u30a4\u30eb\u3057\u3066\u304f\u3060\u3055\u3044\u3002 + +compiler.note.sunapi.filename.additional={0} \u306f\u4eca\u5f8c\u306e\u30ea\u30ea\u30fc\u30b9\u3067\u524a\u9664\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u3001Sun \u304c\u6240\u6709\u3059\u308b API \u3092\u4f7f\u7528\u3057\u307e\u3059\u3002 +compiler.note.sunapi.plural.additional=\u4e00\u90e8\u306e\u5165\u529b\u30d5\u30a1\u30a4\u30eb\u306f\u4eca\u5f8c\u306e\u30ea\u30ea\u30fc\u30b9\u3067\u524a\u9664\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u3001Sun \u304c\u6240\u6709\u3059\u308b API \u3092\u8ffd\u52a0\u3067\u4f7f\u7528\u3057\u307e\u3059\u3002 # Notes related to annotation processing # Print a client-generated note; assumed to be localized, no translation required -compiler.note.proc.messager=\ - {0} - -compiler.note.unchecked.filename=\ - {0} \u306e\u64cd\u4f5c\u306f\u3001\u672a\u30c1\u30a7\u30c3\u30af\u307e\u305f\u306f\u5b89\u5168\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 -compiler.note.unchecked.plural=\ - \u5165\u529b\u30d5\u30a1\u30a4\u30eb\u306e\u64cd\u4f5c\u306e\u3046\u3061\u3001\u672a\u30c1\u30a7\u30c3\u30af\u307e\u305f\u306f\u5b89\u5168\u3067\u306f\u306a\u3044\u3082\u306e\u304c\u3042\u308a\u307e\u3059\u3002 -# The following string may appear after one of the above deprecation -# messages. -compiler.note.unchecked.recompile=\ - \u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u3001-Xlint:unchecked \u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u6307\u5b9a\u3057\u3066\u518d\u30b3\u30f3\u30d1\u30a4\u30eb\u3057\u3066\u304f\u3060\u3055\u3044\u3002 - -compiler.note.unchecked.filename.additional=\ - {0} \u306b\u672a\u30c1\u30a7\u30c3\u30af\u307e\u305f\u306f\u5b89\u5168\u3067\u306f\u306a\u3044\u64cd\u4f5c\u304c\u3055\u3089\u306b\u3042\u308a\u307e\u3059\u3002 -compiler.note.unchecked.plural.additional=\ - \u5165\u529b\u30d5\u30a1\u30a4\u30eb\u306e\u64cd\u4f5c\u306e\u3046\u3061\u3001\u672a\u30c1\u30a7\u30c3\u30af\u307e\u305f\u306f\u5b89\u5168\u3067\u306f\u306a\u3044\u3082\u306e\u304c\u3055\u3089\u306b\u3042\u308a\u307e\u3059\u3002 +compiler.note.proc.messager={0} ##### -compiler.misc.count.error=\ - \u30a8\u30e9\u30fc {0} \u500b -compiler.misc.count.error.plural=\ - \u30a8\u30e9\u30fc {0} \u500b -compiler.misc.count.warn=\ - \u8b66\u544a {0} \u500b -compiler.misc.count.warn.plural=\ - \u8b66\u544a {0} \u500b +compiler.misc.count.error=\u30a8\u30e9\u30fc {0} \u500b +compiler.misc.count.error.plural=\u30a8\u30e9\u30fc {0} \u500b +compiler.misc.count.warn=\u8b66\u544a {0} \u500b +compiler.misc.count.warn.plural=\u8b66\u544a {0} \u500b ## extra output when using -verbose (JavaCompiler) -compiler.misc.verbose.checking.attribution=\ - [{0} \u3092\u78ba\u8a8d\u4e2d] -compiler.misc.verbose.parsing.done=\ - [{0}ms \u3067\u69cb\u6587\u89e3\u6790\u5b8c\u4e86] -compiler.misc.verbose.parsing.started=\ - [{0} \u3092\u69cb\u6587\u89e3\u6790\u958b\u59cb] -compiler.misc.verbose.total=\ - [\u5408\u8a08 {0}ms] -compiler.misc.verbose.wrote.file=\ - [{0} \u3092\u66f8\u304d\u8fbc\u307f\u5b8c\u4e86] +compiler.misc.verbose.checking.attribution=[{0} \u3092\u78ba\u8a8d\u4e2d] +compiler.misc.verbose.parsing.done=[{0}ms \u3067\u69cb\u6587\u89e3\u6790\u5b8c\u4e86] +compiler.misc.verbose.parsing.started=[{0} \u3092\u69cb\u6587\u89e3\u6790\u958b\u59cb] +compiler.misc.verbose.total=[\u5408\u8a08 {0}ms] +compiler.misc.verbose.wrote.file=[{0} \u3092\u66f8\u304d\u8fbc\u307f\u5b8c\u4e86] ## extra output when using -verbose (Retro) -compiler.misc.verbose.retro=\ - [{0} \u3092\u7d44\u307f\u66ff\u3048\u4e2d] -compiler.misc.verbose.retro.with=\ - \{0} \u3092 {1} \u3067\u7d44\u307f\u66ff\u3048\u4e2d\u3067\u3059\u3002 -compiler.misc.verbose.retro.with.list=\ - \{0} \u3092\u578b\u30d1\u30e9\u30e1\u30fc\u30bf {1}\u3001\u30b9\u30fc\u30d1\u30fc\u30bf\u30a4\u30d7 {2}\u3001\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9 {3} \u3067\u7d44\u307f\u66ff\u3048\u4e2d\u3067\u3059\u3002 +compiler.misc.verbose.retro=[{0} \u3092\u7d44\u307f\u66ff\u3048\u4e2d] +compiler.misc.verbose.retro.with=\{0} \u3092 {1} \u3067\u7d44\u307f\u66ff\u3048\u4e2d\u3067\u3059\u3002 +compiler.misc.verbose.retro.with.list=\{0} \u3092\u578b\u30d1\u30e9\u30e1\u30fc\u30bf {1}\u3001\u30b9\u30fc\u30d1\u30fc\u30bf\u30a4\u30d7 {2}\u3001\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9 {3} \u3067\u7d44\u307f\u66ff\u3048\u4e2d\u3067\u3059\u3002 ## extra output when using -verbose (code/ClassReader) -compiler.misc.verbose.loading=\ - [{0} \u3092\u8aad\u307f\u8fbc\u307f\u4e2d] +compiler.misc.verbose.loading=[{0} \u3092\u8aad\u307f\u8fbc\u307f\u4e2d] -compiler.misc.verbose.sourcepath=\ - [\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u306e\u691c\u7d22\u30d1\u30b9: {0}] +compiler.misc.verbose.sourcepath=[\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u306e\u691c\u7d22\u30d1\u30b9: {0}] -compiler.misc.verbose.classpath=\ - [\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u306e\u691c\u7d22\u30d1\u30b9: {0}] +compiler.misc.verbose.classpath=[\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u306e\u691c\u7d22\u30d1\u30b9: {0}] ## extra output when using -checkclassfile (code/ClassReader) -compiler.misc.ccf.found.later.version=\ - \u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb {0} \u306b\u4e88\u60f3\u5916\u306e\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u3042\u308a\u307e\u3059\u3002 -compiler.misc.ccf.unrecognized.attribute=\ - {0} \u306f\u8a8d\u8b58\u3055\u308c\u306a\u3044\u5c5e\u6027\u3067\u3059\u3002 +compiler.misc.ccf.found.later.version=\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb {0} \u306b\u4e88\u60f3\u5916\u306e\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u3042\u308a\u307e\u3059\u3002 +compiler.misc.ccf.unrecognized.attribute={0} \u306f\u8a8d\u8b58\u3055\u308c\u306a\u3044\u5c5e\u6027\u3067\u3059\u3002 ## extra output when using -prompt (util/Log) -compiler.misc.resume.abort=\ - R)\u518d\u958b, A)\u4e2d\u6b62> +compiler.misc.resume.abort=R)\u518d\u958b, A)\u4e2d\u6b62> ##### @@ -612,165 +395,109 @@ compiler.misc.resume.abort=\ ## ## All warning messages are preceded by the following string. -compiler.warn.warning=\ - \u8b66\u544a: +compiler.warn.warning=\u8b66\u544a: -compiler.warn.constant.SVUID=\ - [serial] serialVersionUID \u306f\u30af\u30e9\u30b9 {0} \u306e\u5b9a\u6570\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 +compiler.warn.constant.SVUID=[serial] serialVersionUID \u306f\u30af\u30e9\u30b9 {0} \u306e\u5b9a\u6570\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 -compiler.warn.dir.path.element.not.found=\ - [path] \u4e0d\u6b63\u306a\u30d1\u30b9\u8981\u7d20 "{0}": \u305d\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306f\u5b58\u5728\u3057\u307e\u305b\u3093\u3002 +compiler.warn.dir.path.element.not.found=[path] \u4e0d\u6b63\u306a\u30d1\u30b9\u8981\u7d20 "{0}": \u305d\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306f\u5b58\u5728\u3057\u307e\u305b\u3093\u3002 -compiler.warn.finally.cannot.complete=\ - [finally] finally \u7bc0\u304c\u6b63\u5e38\u306b\u5b8c\u4e86\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.warn.finally.cannot.complete=[finally] finally \u7bc0\u304c\u6b63\u5e38\u306b\u5b8c\u4e86\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.warn.has.been.deprecated=\ - [deprecation] {1} \u306e {0} \u306f\u63a8\u5968\u3055\u308c\u307e\u305b\u3093\u3002 +compiler.warn.has.been.deprecated=[deprecation] {1} \u306e {0} \u306f\u63a8\u5968\u3055\u308c\u307e\u305b\u3093\u3002 -compiler.warn.illegal.char.for.encoding=\ - \u3053\u306e\u6587\u5b57\u306f\u3001\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0 {0} \u306b\u30de\u30c3\u30d7\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.warn.improper.SVUID=\ - [serial] serialVersionUID \u306f\u3001\u30af\u30e9\u30b9 {0} \u306b static \u30d5\u30a1\u30a4\u30ca\u30eb\u3092\u5ba3\u8a00\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 +compiler.warn.sun.proprietary={0} \u306f Sun \u304c\u6240\u6709\u3059\u308b API \u3067\u3042\u308a\u3001\u4eca\u5f8c\u306e\u30ea\u30ea\u30fc\u30b9\u3067\u524a\u9664\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059 -compiler.warn.inexact.non-varargs.call=\ -\u6700\u7d42\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u4e0d\u6b63\u78ba\u306a\u5f15\u6570\u578b\u3092\u6301\u3063\u305f\u53ef\u5909\u5f15\u6570\u30e1\u30bd\u30c3\u30c9\u306e\u975e\u53ef\u5909\u5f15\u6570\u547c\u3073\u51fa\u3057;\n\ -\u53ef\u5909\u5f15\u6570\u547c\u3073\u51fa\u3057\u306b\u95a2\u3057\u3066\u306f {0} \u306b\u30ad\u30e3\u30b9\u30c8\u3057\u307e\u3059\u3002\n\ -\u975e\u53ef\u5909\u5f15\u6570\u547c\u3073\u51fa\u3057\u306b\u95a2\u3057\u3066\u306f {1} \u306b\u30ad\u30e3\u30b9\u30c8\u3057\u3066\u3053\u306e\u8b66\u544a\u3092\u51fa\u3055\u306a\u3044\u3088\u3046\u306b\u3057\u307e\u3059\u3002 +compiler.warn.illegal.char.for.encoding=\u3053\u306e\u6587\u5b57\u306f\u3001\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0 {0} \u306b\u30de\u30c3\u30d7\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.warn.improper.SVUID=[serial] serialVersionUID \u306f\u3001\u30af\u30e9\u30b9 {0} \u306b static \u30d5\u30a1\u30a4\u30ca\u30eb\u3092\u5ba3\u8a00\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 -compiler.warn.long.SVUID=\ - [serial] serialVersionUID \u306f\u3001\u30af\u30e9\u30b9 {0} \u306e long \u578b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 +compiler.warn.inexact.non-varargs.call=\u6700\u7d42\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u4e0d\u6b63\u78ba\u306a\u5f15\u6570\u578b\u3092\u6301\u3063\u305f\u53ef\u5909\u5f15\u6570\u30e1\u30bd\u30c3\u30c9\u306e\u975e\u53ef\u5909\u5f15\u6570\u547c\u3073\u51fa\u3057;\n\u53ef\u5909\u5f15\u6570\u547c\u3073\u51fa\u3057\u306b\u95a2\u3057\u3066\u306f {0} \u306b\u30ad\u30e3\u30b9\u30c8\u3057\u307e\u3059\u3002\n\u975e\u53ef\u5909\u5f15\u6570\u547c\u3073\u51fa\u3057\u306b\u95a2\u3057\u3066\u306f {1} \u306b\u30ad\u30e3\u30b9\u30c8\u3057\u3066\u3053\u306e\u8b66\u544a\u3092\u51fa\u3055\u306a\u3044\u3088\u3046\u306b\u3057\u307e\u3059\u3002 -compiler.warn.missing.SVUID=\ - [serial] \u76f4\u5217\u5316\u53ef\u80fd\u306a\u30af\u30e9\u30b9 {0} \u306b\u306f\u3001serialVersionUID \u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 +compiler.warn.long.SVUID=[serial] serialVersionUID \u306f\u3001\u30af\u30e9\u30b9 {0} \u306e long \u578b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 -compiler.warn.override.varargs.missing=\ - {0}; \u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3055\u308c\u305f\u30e1\u30bd\u30c3\u30c9\u306b\u306f ''...'' \u304c\u3042\u308a\u307e\u305b\u3093\u3002 -compiler.warn.override.varargs.extra=\ - {0}; \u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3057\u3066\u3044\u308b\u30e1\u30bd\u30c3\u30c9\u306b\u306f ''...'' \u304c\u3042\u308a\u307e\u305b\u3093\u3002 -compiler.warn.override.bridge=\ - {0}; \u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3055\u308c\u305f\u30e1\u30bd\u30c3\u30c9\u306f\u30d6\u30ea\u30c3\u30b8\u30e1\u30bd\u30c3\u30c9\u3067\u3059\u3002 +compiler.warn.missing.SVUID=[serial] \u76f4\u5217\u5316\u53ef\u80fd\u306a\u30af\u30e9\u30b9 {0} \u306b\u306f\u3001serialVersionUID \u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 -compiler.warn.pkg-info.already.seen=\ - [package-info] package-info.java \u30d5\u30a1\u30a4\u30eb\u304c\u3059\u3067\u306b\u30d1\u30c3\u30b1\u30fc\u30b8 {0} \u7528\u306b\u8868\u793a\u3055\u308c\u3066\u3044\u307e\u3059\u3002 -compiler.warn.path.element.not.found=\ - [path] \u4e0d\u6b63\u306a\u30d1\u30b9\u8981\u7d20 "{0}": \u305d\u306e\u30d5\u30a1\u30a4\u30eb\u307e\u305f\u306f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306f\u3042\u308a\u307e\u305b\u3093\u3002 -compiler.warn.possible.fall-through.into.case=\ - [fallthrough] case \u306b fall-through \u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 +compiler.warn.override.varargs.missing={0}; \u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3055\u308c\u305f\u30e1\u30bd\u30c3\u30c9\u306b\u306f ''...'' \u304c\u3042\u308a\u307e\u305b\u3093\u3002 +compiler.warn.override.varargs.extra={0}; \u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3057\u3066\u3044\u308b\u30e1\u30bd\u30c3\u30c9\u306b\u306f ''...'' \u304c\u3042\u308a\u307e\u305b\u3093\u3002 +compiler.warn.override.bridge={0}; \u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3055\u308c\u305f\u30e1\u30bd\u30c3\u30c9\u306f\u30d6\u30ea\u30c3\u30b8\u30e1\u30bd\u30c3\u30c9\u3067\u3059\u3002 -compiler.warn.redundant.cast=\ - [cast] {0} \u3078\u306e\u5197\u9577\u306a\u30ad\u30e3\u30b9\u30c8\u3067\u3059 +compiler.warn.pkg-info.already.seen=[package-info] package-info.java \u30d5\u30a1\u30a4\u30eb\u304c\u3059\u3067\u306b\u30d1\u30c3\u30b1\u30fc\u30b8 {0} \u7528\u306b\u8868\u793a\u3055\u308c\u3066\u3044\u307e\u3059\u3002 +compiler.warn.path.element.not.found=[path] \u4e0d\u6b63\u306a\u30d1\u30b9\u8981\u7d20 "{0}": \u305d\u306e\u30d5\u30a1\u30a4\u30eb\u307e\u305f\u306f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306f\u3042\u308a\u307e\u305b\u3093\u3002 +compiler.warn.possible.fall-through.into.case=[fallthrough] case \u306b fall-through \u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 -compiler.warn.position.overflow=\ - \u4f4d\u7f6e\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u304c\u884c {0} \u3067\u30aa\u30fc\u30d0\u30fc\u30d5\u30ed\u30fc\u3057\u307e\u3059 +compiler.warn.redundant.cast=[cast] {0} \u3078\u306e\u5197\u9577\u306a\u30ad\u30e3\u30b9\u30c8\u3067\u3059 -compiler.warn.big.major.version=\ - {0}: \u30e1\u30b8\u30e3\u30fc\u30d0\u30fc\u30b8\u30e7\u30f3 {1} \u306f\u3001\u3053\u306e\u30b3\u30f3\u30d1\u30a4\u30e9\u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u6700\u65b0\u306e\u30e1\u30b8\u30e3\u30fc\u30d0\u30fc\u30b8\u30e7\u30f3 {2} \u3088\u308a\u65b0\u3057\u3044\u3067\u3059\u3002\n\ - \u30b3\u30f3\u30d1\u30a4\u30e9\u306e\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002 +compiler.warn.position.overflow=\u4f4d\u7f6e\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u304c\u884c {0} \u3067\u30aa\u30fc\u30d0\u30fc\u30d5\u30ed\u30fc\u3057\u307e\u3059 + +compiler.warn.big.major.version={0}: \u30e1\u30b8\u30e3\u30fc\u30d0\u30fc\u30b8\u30e7\u30f3 {1} \u306f\u3001\u3053\u306e\u30b3\u30f3\u30d1\u30a4\u30e9\u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u6700\u65b0\u306e\u30e1\u30b8\u30e3\u30fc\u30d0\u30fc\u30b8\u30e7\u30f3 {2} \u3088\u308a\u65b0\u3057\u3044\u3067\u3059\u3002\n\u30b3\u30f3\u30d1\u30a4\u30e9\u306e\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002 # Warnings related to annotation processing -compiler.warn.proc.package.does.not.exist=\ - \u30d1\u30c3\u30b1\u30fc\u30b8 {0} \u306f\u5b58\u5728\u3057\u307e\u305b\u3093 -compiler.warn.proc.file.reopening=\ - ''{0}'' \u7528\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u8907\u6570\u56de\u4f5c\u6210\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u307e\u3059 +compiler.warn.proc.package.does.not.exist=\u30d1\u30c3\u30b1\u30fc\u30b8 {0} \u306f\u5b58\u5728\u3057\u307e\u305b\u3093 +compiler.warn.proc.file.reopening=''{0}'' \u7528\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u8907\u6570\u56de\u4f5c\u6210\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u307e\u3059 -compiler.warn.proc.type.already.exists=\ - \u30bf\u30a4\u30d7 ''{0}'' \u306e\u30d5\u30a1\u30a4\u30eb\u306f\u65e2\u306b\u30bd\u30fc\u30b9\u30d1\u30b9\u3082\u3057\u304f\u306f\u30af\u30e9\u30b9\u30d1\u30b9\u306b\u5b58\u5728\u3057\u307e\u3059 +compiler.warn.proc.type.already.exists=\u30bf\u30a4\u30d7 ''{0}'' \u306e\u30d5\u30a1\u30a4\u30eb\u306f\u65e2\u306b\u30bd\u30fc\u30b9\u30d1\u30b9\u3082\u3057\u304f\u306f\u30af\u30e9\u30b9\u30d1\u30b9\u306b\u5b58\u5728\u3057\u307e\u3059 -compiler.warn.proc.type.recreate=\ - \u30bf\u30a4\u30d7 ''{0}'' \u306e\u30d5\u30a1\u30a4\u30eb\u3092\u8907\u6570\u56de\u4f5c\u6210\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u307e\u3059 +compiler.warn.proc.type.recreate=\u30bf\u30a4\u30d7 ''{0}'' \u306e\u30d5\u30a1\u30a4\u30eb\u3092\u8907\u6570\u56de\u4f5c\u6210\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u307e\u3059 -compiler.warn.proc.illegal.file.name=\ - \u7121\u52b9\u306a\u540d\u524d ''{0}'' \u306e\u30d5\u30a1\u30a4\u30eb\u306f\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.warn.proc.illegal.file.name=\u7121\u52b9\u306a\u540d\u524d ''{0}'' \u306e\u30d5\u30a1\u30a4\u30eb\u306f\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.warn.proc.file.create.last.round=\ - \u6700\u5f8c\u306b\u4f5c\u6210\u3055\u308c\u305f\u30bf\u30a4\u30d7 ''{0}'' \u306e\u30d5\u30a1\u30a4\u30eb\u306f\u6ce8\u91c8\u51e6\u7406\u306b\u6e21\u3055\u308c\u307e\u305b\u3093\u3002 +compiler.warn.proc.file.create.last.round=\u6700\u5f8c\u306b\u4f5c\u6210\u3055\u308c\u305f\u30bf\u30a4\u30d7 ''{0}'' \u306e\u30d5\u30a1\u30a4\u30eb\u306f\u6ce8\u91c8\u51e6\u7406\u306b\u6e21\u3055\u308c\u307e\u305b\u3093\u3002 -compiler.warn.proc.malformed.supported.string=\ - \u30d7\u30ed\u30bb\u30c3\u30b5 ''{1}'' \u304c\u8fd4\u3057\u305f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u308b\u6ce8\u91c8\u578b\u306e\u6587\u5b57\u5217 ''{0}'' \u304c\u4e0d\u6b63\u3067\u3059 +compiler.warn.proc.malformed.supported.string=\u30d7\u30ed\u30bb\u30c3\u30b5 ''{1}'' \u304c\u8fd4\u3057\u305f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u308b\u6ce8\u91c8\u578b\u306e\u6587\u5b57\u5217 ''{0}'' \u304c\u4e0d\u6b63\u3067\u3059 -compiler.warn.proc.annotations.without.processors=\ - \u3053\u308c\u3089\u306e\u6ce8\u91c8\u3092\u8981\u6c42\u3059\u308b\u30d7\u30ed\u30bb\u30c3\u30b5\u306f\u3042\u308a\u307e\u305b\u3093\u3067\u3057\u305f: {0} +compiler.warn.proc.annotations.without.processors=\u3053\u308c\u3089\u306e\u6ce8\u91c8\u3092\u8981\u6c42\u3059\u308b\u30d7\u30ed\u30bb\u30c3\u30b5\u306f\u3042\u308a\u307e\u305b\u3093\u3067\u3057\u305f: {0} -compiler.warn.proc.processor.incompatible.source.version=\ - \u6ce8\u91c8\u30d7\u30ed\u30bb\u30c3\u30b5 ''{1}'' \u304b\u3089 -source ''{2}'' \u3088\u308a\u5c0f\u3055\u3044\u30bd\u30fc\u30b9\u30d0\u30fc\u30b8\u30e7\u30f3 ''{0}'' \u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u3059 +compiler.warn.proc.processor.incompatible.source.version=\u6ce8\u91c8\u30d7\u30ed\u30bb\u30c3\u30b5 ''{1}'' \u304b\u3089 -source ''{2}'' \u3088\u308a\u5c0f\u3055\u3044\u30bd\u30fc\u30b9\u30d0\u30fc\u30b8\u30e7\u30f3 ''{0}'' \u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u3059 -compiler.warn.proc.proc-only.requested.no.procs=\ - \u30b3\u30f3\u30d1\u30a4\u30eb\u306a\u3057\u306e\u6ce8\u91c8\u51e6\u7406\u304c\u8981\u6c42\u3055\u308c\u307e\u3057\u305f\u304c\u3001\u30d7\u30ed\u30bb\u30c3\u30b5\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002 +compiler.warn.proc.proc-only.requested.no.procs=\u30b3\u30f3\u30d1\u30a4\u30eb\u306a\u3057\u306e\u6ce8\u91c8\u51e6\u7406\u304c\u8981\u6c42\u3055\u308c\u307e\u3057\u305f\u304c\u3001\u30d7\u30ed\u30bb\u30c3\u30b5\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002 -compiler.warn.proc.use.implicit=\ -\u6697\u9ed9\u7684\u306b\u30b3\u30f3\u30d1\u30a4\u30eb\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u306f\u6ce8\u91c8\u51e6\u7406\u306b\u6e21\u3055\u308c\u307e\u305b\u3093\u3002\n\ --implicit \u3092\u4f7f\u7528\u3057\u6697\u9ed9\u7684\u30b3\u30f3\u30d1\u30a4\u30eb\u306e\u30dd\u30ea\u30b7\u30fc\u3092\u6307\u5b9a\u3057\u3066\u4e0b\u3055\u3044\u3002 +compiler.warn.proc.use.implicit=\u6697\u9ed9\u7684\u306b\u30b3\u30f3\u30d1\u30a4\u30eb\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u306f\u6ce8\u91c8\u51e6\u7406\u306b\u6e21\u3055\u308c\u307e\u305b\u3093\u3002\n-implicit \u3092\u4f7f\u7528\u3057\u6697\u9ed9\u7684\u30b3\u30f3\u30d1\u30a4\u30eb\u306e\u30dd\u30ea\u30b7\u30fc\u3092\u6307\u5b9a\u3057\u3066\u4e0b\u3055\u3044\u3002 -compiler.warn.proc.use.proc.or.implicit=\ -\u6697\u9ed9\u7684\u306b\u30b3\u30f3\u30d1\u30a4\u30eb\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u306f\u6ce8\u91c8\u51e6\u7406\u306b\u6e21\u3055\u308c\u307e\u305b\u3093\u3002\n\ --proc:none \u3092\u4f7f\u7528\u3057\u6ce8\u91c8\u51e6\u7406\u3092\u7121\u52b9\u306b\u3059\u308b\u304b -implicit \u3092\u4f7f\u7528\u3057\u6697\u9ed9\u7684\u30b3\u30f3\u30d1\u30a4\u30eb\u306e\u30dd\u30ea\u30b7\u30fc\u3092\u6307\u5b9a\u3057\u3066\u4e0b\u3055\u3044\u3002 +compiler.warn.proc.use.proc.or.implicit=\u6697\u9ed9\u7684\u306b\u30b3\u30f3\u30d1\u30a4\u30eb\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u306f\u6ce8\u91c8\u51e6\u7406\u306b\u6e21\u3055\u308c\u307e\u305b\u3093\u3002\n-proc:none \u3092\u4f7f\u7528\u3057\u6ce8\u91c8\u51e6\u7406\u3092\u7121\u52b9\u306b\u3059\u308b\u304b -implicit \u3092\u4f7f\u7528\u3057\u6697\u9ed9\u7684\u30b3\u30f3\u30d1\u30a4\u30eb\u306e\u30dd\u30ea\u30b7\u30fc\u3092\u6307\u5b9a\u3057\u3066\u4e0b\u3055\u3044\u3002 # Print a client-generated warning; assumed to be localized, no translation required -compiler.warn.proc.messager=\ - {0} +compiler.warn.proc.messager={0} -compiler.warn.proc.unclosed.type.files=\ - \u30bf\u30a4\u30d7 ''{0}'' \u306e\u30d5\u30a1\u30a4\u30eb\u304c\u9589\u3058\u3089\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u3053\u308c\u3089\u306e\u30bf\u30a4\u30d7\u306f\u6ce8\u91c8\u51e6\u7406\u3055\u308c\u307e\u305b\u3093 +compiler.warn.proc.unclosed.type.files=\u30bf\u30a4\u30d7 ''{0}'' \u306e\u30d5\u30a1\u30a4\u30eb\u304c\u9589\u3058\u3089\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u3053\u308c\u3089\u306e\u30bf\u30a4\u30d7\u306f\u6ce8\u91c8\u51e6\u7406\u3055\u308c\u307e\u305b\u3093 -compiler.warn.proc.unmatched.processor.options=\ - \u6b21\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u3069\u306e\u30d7\u30ed\u30bb\u30c3\u30b5\u3067\u3082\u8a8d\u8b58\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f: ''{0}'' +compiler.warn.proc.unmatched.processor.options=\u6b21\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u3069\u306e\u30d7\u30ed\u30bb\u30c3\u30b5\u3067\u3082\u8a8d\u8b58\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f: ''{0}'' -compiler.warn.unchecked.assign=\ - [unchecked] {0} \u304b\u3089 {1} \u3078\u306e\u7121\u691c\u67fb\u4ee3\u5165\u3067\u3059\u3002 -compiler.warn.unchecked.assign.to.var=\ - [unchecked] raw \u578b {1} \u306e\u30e1\u30f3\u30d0\u30fc\u3068\u3057\u3066\u5909\u6570 {0} \u3078\u306e\u7121\u691c\u67fb\u4ee3\u5165\u3067\u3059\u3002 -compiler.warn.unchecked.call.mbr.of.raw.type=\ - [unchecked] raw \u578b {1} \u306e\u30e1\u30f3\u30d0\u3068\u3057\u3066\u306e {0} \u3078\u306e\u7121\u691c\u67fb\u547c\u3073\u51fa\u3057\u3067\u3059\u3002 -compiler.warn.unchecked.cast.to.type=\ - [unchecked] \u578b {0} \u3078\u306e\u7121\u691c\u67fb\u30ad\u30e3\u30b9\u30c8\u3067\u3059\u3002 -compiler.warn.unchecked.meth.invocation.applied=\ - [unchecked] \u7121\u691c\u67fb\u30e1\u30bd\u30c3\u30c9\u547c\u3073\u51fa\u3057: {1} \u306e {0} \u306f {2}({3}) \u306b\u9069\u7528\u3055\u308c\u307e\u3059\u3002 -compiler.warn.unchecked.generic.array.creation=\ - [unchecked] \u53ef\u5909\u5f15\u6570\u30d1\u30e9\u30e1\u30fc\u30bf\u306b\u5bfe\u3059\u308b\u578b {0} \u306e\u7dcf\u79f0\u578b\u914d\u5217\u306e\u7121\u691c\u67fb\u4f5c\u6210\u3067\u3059\u3002 +compiler.warn.unchecked.assign=[unchecked] {0} \u304b\u3089 {1} \u3078\u306e\u7121\u691c\u67fb\u4ee3\u5165\u3067\u3059\u3002 +compiler.warn.unchecked.assign.to.var=[unchecked] raw \u578b {1} \u306e\u30e1\u30f3\u30d0\u30fc\u3068\u3057\u3066\u5909\u6570 {0} \u3078\u306e\u7121\u691c\u67fb\u4ee3\u5165\u3067\u3059\u3002 +compiler.warn.unchecked.call.mbr.of.raw.type=[unchecked] raw \u578b {1} \u306e\u30e1\u30f3\u30d0\u3068\u3057\u3066\u306e {0} \u3078\u306e\u7121\u691c\u67fb\u547c\u3073\u51fa\u3057\u3067\u3059\u3002 +compiler.warn.unchecked.cast.to.type=[unchecked] \u578b {0} \u3078\u306e\u7121\u691c\u67fb\u30ad\u30e3\u30b9\u30c8\u3067\u3059\u3002 +compiler.warn.unchecked.meth.invocation.applied=[unchecked] \u7121\u691c\u67fb\u30e1\u30bd\u30c3\u30c9\u547c\u3073\u51fa\u3057: {0} {1} ({4} {5} \u5185) \u304c\u4e0e\u3048\u3089\u308c\u305f\u578b\u306b\u9069\u7528\u3055\u308c\u307e\u3057\u305f\n\u671f\u5f85\u5024: {2}\n\u691c\u51fa\u5024: {3} -compiler.warn.missing.deprecated.annotation=\ - [dep-ann] \u63a8\u5968\u3055\u308c\u306a\u3044\u9805\u76ee\u306f @Deprecated \u3067\u6ce8\u91c8\u304c\u4ed8\u3051\u3089\u308c\u3066\u3044\u307e\u305b\u3093\u3002 +compiler.warn.unchecked.generic.array.creation=[unchecked] \u30bf\u30a4\u30d7 {0} \u306e varargs \u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u305f\u3081\u306e\u3001\u7121\u691c\u67fb\u6c4e\u7528\u914d\u5217\u306e\u4f5c\u6210 -compiler.warn.invalid.archive.file=\ - [path] \u30d1\u30b9\u4e0a\u306e\u4e88\u671f\u3057\u306a\u3044\u30d5\u30a1\u30a4\u30eb: {0} +compiler.warn.missing.deprecated.annotation=[dep-ann] \u63a8\u5968\u3055\u308c\u306a\u3044\u9805\u76ee\u306f @Deprecated \u3067\u6ce8\u91c8\u304c\u4ed8\u3051\u3089\u308c\u3066\u3044\u307e\u305b\u3093\u3002 -compiler.warn.unexpected.archive.file=\ - [path] \u30a2\u30fc\u30ab\u30a4\u30d6\u30d5\u30a1\u30a4\u30eb\u306e\u4e88\u671f\u3057\u306a\u3044\u62e1\u5f35\u5b50: {0} +compiler.warn.invalid.archive.file=[path] \u30d1\u30b9\u4e0a\u306e\u4e88\u671f\u3057\u306a\u3044\u30d5\u30a1\u30a4\u30eb: {0} -compiler.warn.div.zero=\ - [divzero] \u30bc\u30ed\u3067\u9664\u7b97 +compiler.warn.unexpected.archive.file=[path] \u30a2\u30fc\u30ab\u30a4\u30d6\u30d5\u30a1\u30a4\u30eb\u306e\u4e88\u671f\u3057\u306a\u3044\u62e1\u5f35\u5b50: {0} -compiler.warn.empty.if=\ - [empty] if \u4ee5\u964d\u304c\u7a7a\u306e\u6587\u3067\u3059 +compiler.warn.div.zero=[divzero] \u30bc\u30ed\u3067\u9664\u7b97 -compiler.warn.annotation.method.not.found=\ - \u30bf\u30a4\u30d7 ''{0}'' \u5185\u306b\u6ce8\u91c8\u30e1\u30bd\u30c3\u30c9 ''{1}()'' \u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093 +compiler.warn.empty.if=[empty] if \u4ee5\u964d\u304c\u7a7a\u306e\u6587\u3067\u3059 -compiler.warn.annotation.method.not.found.reason=\ - \u30bf\u30a4\u30d7 ''{0}'' \u5185\u306b\u6ce8\u91c8\u30e1\u30bd\u30c3\u30c9 ''{1}()'' \u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093: {2} +compiler.warn.annotation.method.not.found=\u30bf\u30a4\u30d7 ''{0}'' \u5185\u306b\u6ce8\u91c8\u30e1\u30bd\u30c3\u30c9 ''{1}()'' \u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093 + +compiler.warn.annotation.method.not.found.reason=\u30bf\u30a4\u30d7 ''{0}'' \u5185\u306b\u6ce8\u91c8\u30e1\u30bd\u30c3\u30c9 ''{1}()'' \u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093: {2} + +compiler.warn.raw.class.use=[rawtypes] raw \u578b\u3092\u691c\u51fa: {0}\n\u7dcf\u79f0\u30af\u30e9\u30b9 {1} \u306e\u578b\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u3042\u308a\u307e\u305b\u3093 ##### ## The following are tokens which are non-terminals in the language. They should ## be named as JLS3 calls them when translated to the appropriate language. -compiler.misc.token.identifier=\ - -compiler.misc.token.character=\ - -compiler.misc.token.string=\ - -compiler.misc.token.integer=\ - -compiler.misc.token.long-integer=\ - -compiler.misc.token.float=\ - -compiler.misc.token.double=\ - -compiler.misc.token.bad-symbol=\ - -compiler.misc.token.end-of-input=\ - +compiler.misc.token.identifier= +compiler.misc.token.character= +compiler.misc.token.string= +compiler.misc.token.integer= +compiler.misc.token.long-integer= +compiler.misc.token.float= +compiler.misc.token.double= +compiler.misc.token.bad-symbol= +compiler.misc.token.end-of-input= ## The argument to the following string will always be one of the following: ## 1. one of the above non-terminals @@ -781,78 +508,59 @@ compiler.misc.token.end-of-input=\ ## 6. an operator (JLS3.12) ## ## This is the only place these tokens will be used. -compiler.err.expected=\ - {0} \u304c\u3042\u308a\u307e\u305b\u3093\u3002 -compiler.err.expected2=\ - {0} \u307e\u305f\u306f {1} \u304c\u3042\u308a\u307e\u305b\u3093\u3002 -compiler.err.expected3=\ - {0}\u3001{1}\u3001\u307e\u305f\u306f {2} \u304c\u3042\u308a\u307e\u305b\u3093\u3002 +compiler.err.expected={0} \u304c\u3042\u308a\u307e\u305b\u3093\u3002 +compiler.err.expected2={0} \u307e\u305f\u306f {1} \u304c\u3042\u308a\u307e\u305b\u3093\u3002 +compiler.err.expected3={0}\u3001{1}\u3001\u307e\u305f\u306f {2} \u304c\u3042\u308a\u307e\u305b\u3093\u3002 -compiler.err.premature.eof=\ - \u69cb\u6587\u89e3\u6790\u4e2d\u306b\u30d5\u30a1\u30a4\u30eb\u306e\u7d42\u308f\u308a\u306b\u79fb\u308a\u307e\u3057\u305f +compiler.err.premature.eof=\u69cb\u6587\u89e3\u6790\u4e2d\u306b\u30d5\u30a1\u30a4\u30eb\u306e\u7d42\u308f\u308a\u306b\u79fb\u308a\u307e\u3057\u305f ## The following are related in form, but do not easily fit the above paradigm. -compiler.err.dot.class.expected=\ - ''.class'' \u304c\u3042\u308a\u307e\u305b\u3093\u3002 +compiler.err.dot.class.expected=''.class'' \u304c\u3042\u308a\u307e\u305b\u3093\u3002 ## The argument to this string will always be either 'case' or 'default'. -compiler.err.orphaned=\ - {0} \u306b\u306f\u89aa\u304c\u3042\u308a\u307e\u305b\u3093\u3002 +compiler.err.orphaned={0} \u306b\u306f\u89aa\u304c\u3042\u308a\u307e\u305b\u3093\u3002 -compiler.misc.anonymous.class=\ - +compiler.misc.anonymous.class= + +compiler.misc.type.captureof={1} \u306e capture#{0} + +compiler.misc.type.captureof.1=capture#{0} + +compiler.misc.type.none= + +compiler.misc.unnamed.package=\u7121\u540d\u30d1\u30c3\u30b1\u30fc\u30b8 ##### -compiler.err.cant.access=\ -{0} \u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u305b\u3093\u3002\n\ -{1} +compiler.err.cant.access={0} \u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u305b\u3093\u3002\n{1} -compiler.misc.bad.class.file.header=\ -\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb {0} \u306f\u4e0d\u6b63\u3067\u3059\u3002\n\ -{1}\n\ -\u524a\u9664\u3059\u308b\u304b\u3001\u30af\u30e9\u30b9\u30d1\u30b9\u306e\u6b63\u3057\u3044\u30b5\u30d6\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u3042\u308b\u304b\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +compiler.misc.bad.class.file.header=\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb {0} \u306f\u4e0d\u6b63\u3067\u3059\u3002\n{1}\n\u524a\u9664\u3059\u308b\u304b\u3001\u30af\u30e9\u30b9\u30d1\u30b9\u306e\u6b63\u3057\u3044\u30b5\u30d6\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u3042\u308b\u304b\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +compiler.misc.bad.source.file.header=\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb {0} \u306f\u4e0d\u6b63\u3067\u3059\u3002\n{1}\n\u524a\u9664\u3059\u308b\u304b\u3001\u30bd\u30fc\u30b9\u30d1\u30b9\u306e\u6b63\u3057\u3044\u30b5\u30d6\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u3042\u308b\u304b\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002 ## The following are all possible strings for the second argument ({1}) of the ## above strings. -compiler.misc.bad.class.signature=\ - \u30af\u30e9\u30b9 {0} \u306e\u30b7\u30b0\u30cb\u30c1\u30e3\u30fc\u304c\u4e0d\u6b63\u3067\u3059\u3002 -compiler.misc.bad.enclosing.method=\ - \u56f2\u3093\u3067\u3044\u308b\u30e1\u30bd\u30c3\u30c9\u5c5e\u6027\u304c\u4e0d\u6b63\u3067\u3059: {0} -compiler.misc.bad.runtime.invisible.param.annotations=\ - RuntimeInvisibleParameterAnnotations \u5c5e\u6027\u304c\u4e0d\u6b63\u3067\u3059: {0} -compiler.misc.bad.const.pool.tag=\ - \u5b9a\u6570\u30d7\u30fc\u30eb\u30bf\u30b0 {0} \u304c\u4e0d\u6b63\u3067\u3059\u3002 -compiler.misc.bad.const.pool.tag.at=\ - \u5b9a\u6570\u30d7\u30fc\u30eb\u30bf\u30b0 {1} \u3067\u306e {0} \u304c\u4e0d\u6b63\u3067\u3059\u3002 -compiler.misc.bad.signature=\ - \u30b7\u30b0\u30cb\u30c1\u30e3\u30fc {0} \u304c\u4e0d\u6b63\u3067\u3059\u3002 -compiler.misc.class.file.wrong.class=\ - \u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb {0} \u306b\u4e0d\u6b63\u306a\u30af\u30e9\u30b9\u304c\u3042\u308a\u307e\u3059\u3002 -compiler.misc.class.file.not.found=\ - {0} \u306e\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093 -compiler.misc.file.doesnt.contain.class=\ - \u30d5\u30a1\u30a4\u30eb\u306b\u30af\u30e9\u30b9 {0} \u304c\u542b\u307e\u308c\u3066\u3044\u307e\u305b\u3093\u3002 -compiler.misc.file.does.not.contain.package=\ - \u30d5\u30a1\u30a4\u30eb\u306b\u30d1\u30c3\u30b1\u30fc\u30b8 {0} \u304c\u542b\u307e\u308c\u3066\u3044\u307e\u305b\u3093 -compiler.misc.illegal.start.of.class.file=\ - \u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u306e\u958b\u59cb\u304c\u4e0d\u6b63\u3067\u3059\u3002 -compiler.misc.unable.to.access.file=\ - \u30d5\u30a1\u30a4\u30eb {0} \u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.misc.unicode.str.not.supported=\ - \u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u5185\u306e Unicode \u6587\u5b57\u5217\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 -compiler.misc.undecl.type.var=\ - \u578b\u5909\u6570 {0} \u306f\u5ba3\u8a00\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 -compiler.misc.wrong.version=\ - \u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u306e\u30d0\u30fc\u30b8\u30e7\u30f3 {0}.{1} \u306f\u4e0d\u6b63\u3067\u3059\u3002{2}.{3} \u3067\u3042\u308b\u3079\u304d\u3067\u3059\u3002 +compiler.misc.bad.class.signature=\u30af\u30e9\u30b9 {0} \u306e\u30b7\u30b0\u30cb\u30c1\u30e3\u30fc\u304c\u4e0d\u6b63\u3067\u3059\u3002 +compiler.misc.bad.enclosing.method=\u56f2\u3093\u3067\u3044\u308b\u30e1\u30bd\u30c3\u30c9\u5c5e\u6027\u304c\u4e0d\u6b63\u3067\u3059: {0} +compiler.misc.bad.runtime.invisible.param.annotations=RuntimeInvisibleParameterAnnotations \u5c5e\u6027\u304c\u4e0d\u6b63\u3067\u3059: {0} +compiler.misc.bad.const.pool.tag=\u5b9a\u6570\u30d7\u30fc\u30eb\u30bf\u30b0 {0} \u304c\u4e0d\u6b63\u3067\u3059\u3002 +compiler.misc.bad.const.pool.tag.at=\u5b9a\u6570\u30d7\u30fc\u30eb\u30bf\u30b0 {1} \u3067\u306e {0} \u304c\u4e0d\u6b63\u3067\u3059\u3002 +compiler.misc.bad.signature=\u30b7\u30b0\u30cb\u30c1\u30e3\u30fc {0} \u304c\u4e0d\u6b63\u3067\u3059\u3002 +compiler.misc.bad.type.annotation.value=\u578b\u6ce8\u91c8\u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u578b\u5024\u304c\u4e0d\u6b63\u3067\u3059: {0} +compiler.misc.class.file.wrong.class=\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb {0} \u306b\u4e0d\u6b63\u306a\u30af\u30e9\u30b9\u304c\u3042\u308a\u307e\u3059\u3002 +compiler.misc.class.file.not.found={0} \u306e\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093 +compiler.misc.file.doesnt.contain.class=\u30d5\u30a1\u30a4\u30eb\u306b\u30af\u30e9\u30b9 {0} \u304c\u542b\u307e\u308c\u3066\u3044\u307e\u305b\u3093\u3002 +compiler.misc.file.does.not.contain.package=\u30d5\u30a1\u30a4\u30eb\u306b\u30d1\u30c3\u30b1\u30fc\u30b8 {0} \u304c\u542b\u307e\u308c\u3066\u3044\u307e\u305b\u3093 +compiler.misc.illegal.start.of.class.file=\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u306e\u958b\u59cb\u304c\u4e0d\u6b63\u3067\u3059\u3002 +compiler.misc.unable.to.access.file=\u30d5\u30a1\u30a4\u30eb {0} \u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.misc.unicode.str.not.supported=\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u5185\u306e Unicode \u6587\u5b57\u5217\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 +compiler.misc.undecl.type.var=\u578b\u5909\u6570 {0} \u306f\u5ba3\u8a00\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 +compiler.misc.wrong.version=\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u306e\u30d0\u30fc\u30b8\u30e7\u30f3 {0}.{1} \u306f\u4e0d\u6b63\u3067\u3059\u3002{2}.{3} \u3067\u3042\u308b\u3079\u304d\u3067\u3059\u3002 ##### -compiler.err.not.within.bounds=\ - \u578b\u30d1\u30e9\u30e1\u30fc\u30bf {0} \u306f\u305d\u306e\u7bc4\u56f2\u3092\u8d8a\u3048\u3066\u3044\u307e\u3059\u3002 +compiler.err.not.within.bounds=\u578b\u30d1\u30e9\u30e1\u30fc\u30bf {0} \u306f\u305d\u306e\u7bc4\u56f2\u3092\u8d8a\u3048\u3066\u3044\u307e\u3059\u3002 -compiler.err.not.within.bounds.explain=\ - \u578b\u30d1\u30e9\u30e1\u30fc\u30bf {0} \u306f\u305d\u306e\u7bc4\u56f2\u3092\u8d8a\u3048\u3066\u3044\u307e\u3059\u3002{1} +compiler.err.not.within.bounds.explain=\u578b\u30d1\u30e9\u30e1\u30fc\u30bf {0} \u306f\u305d\u306e\u7bc4\u56f2\u3092\u8d8a\u3048\u3066\u3044\u307e\u3059\u3002{1} ## The following are all possible strings for the second argument ({1}) of the ## above string. @@ -861,43 +569,26 @@ compiler.err.not.within.bounds.explain=\ ##### -compiler.err.prob.found.req=\ -{0}\n\ -\u691c\u51fa\u5024 : {1}\n\ -\u671f\u5f85\u5024 : {2} -compiler.warn.prob.found.req=\ -{0}\n\ -\u691c\u51fa\u5024 : {1}\n\ -\u671f\u5f85\u5024 : {2} -compiler.err.prob.found.req.1=\ -{0} {3}\n\ -\u691c\u51fa\u5024 : {1}\n\ -\u671f\u5f85\u5024 : {2} +compiler.err.prob.found.req={0}\n\u671f\u5f85\u5024: {2}\n\u691c\u51fa\u5024: {1} +compiler.warn.prob.found.req={0}\n\u671f\u5f85\u5024: {2}\n\u691c\u51fa\u5024: {1} +compiler.err.prob.found.req.1={0} {3}\n\u671f\u5f85\u5024: {2}\n\u691c\u51fa\u5024: {1} ## The following are all possible strings for the first argument ({0}) of the ## above strings. -compiler.misc.incompatible.types=\ - \u4e92\u63db\u6027\u306e\u306a\u3044\u578b -compiler.misc.incompatible.types.1=\ - \u4e92\u63db\u6027\u306e\u306a\u3044\u578b; {0} -compiler.misc.inconvertible.types=\ - \u5909\u63db\u3067\u304d\u306a\u3044\u578b -compiler.misc.possible.loss.of.precision=\ - \u7cbe\u5ea6\u304c\u843d\u3061\u3066\u3044\u308b\u53ef\u80fd\u6027 +compiler.misc.incompatible.types=\u4e92\u63db\u6027\u306e\u306a\u3044\u578b +compiler.misc.incompatible.types.1=\u4e92\u63db\u6027\u306e\u306a\u3044\u578b; {0} +compiler.misc.inconvertible.types=\u5909\u63db\u3067\u304d\u306a\u3044\u578b +compiler.misc.possible.loss.of.precision=\u7cbe\u5ea6\u304c\u843d\u3061\u3066\u3044\u308b\u53ef\u80fd\u6027 -compiler.misc.unchecked.assign=\ - [unchecked] \u7121\u691c\u67fb\u5909\u63db\u3067\u3059 +compiler.misc.unchecked.assign=[unchecked] \u7121\u691c\u67fb\u5909\u63db\u3067\u3059 # compiler.misc.storecheck=\ # [unchecked] assignment might cause later store checks to fail # compiler.misc.unchecked=\ # [unchecked] assigned array cannot dynamically check its stores -compiler.misc.unchecked.cast.to.type=\ - [unchecked] \u7121\u691c\u67fb\u30ad\u30e3\u30b9\u30c8\u3067\u3059 +compiler.misc.unchecked.cast.to.type=[unchecked] \u7121\u691c\u67fb\u30ad\u30e3\u30b9\u30c8\u3067\u3059 -compiler.misc.assignment.from.super-bound=\ - \u30b9\u30fc\u30d1\u30fc\u30d0\u30a6\u30f3\u30c9\u578b {0} \u304b\u3089\u306e\u4ee3\u5165 -compiler.misc.assignment.to.extends-bound=\ - \u62e1\u5f35\u30d0\u30a6\u30f3\u30c9\u578b {0} \u3078\u306e\u4ee3\u5165 +compiler.misc.assignment.from.super-bound=\u30b9\u30fc\u30d1\u30fc\u30d0\u30a6\u30f3\u30c9\u578b {0} \u304b\u3089\u306e\u4ee3\u5165 +compiler.misc.assignment.to.extends-bound=\u62e1\u5f35\u30d0\u30a6\u30f3\u30c9\u578b {0} \u3078\u306e\u4ee3\u5165 # compiler.err.star.expected=\ # ''*'' expected # compiler.err.no.elem.type=\ @@ -905,221 +596,187 @@ compiler.misc.assignment.to.extends-bound=\ ##### -compiler.err.type.found.req=\ -\u4e88\u671f\u3057\u306a\u3044\u578b\n\ -\u691c\u51fa\u5024 : {0}\n\ -\u671f\u5f85\u5024 : {1} +compiler.err.type.found.req=\u4e88\u671f\u3057\u306a\u3044\u578b\n\u671f\u5f85\u5024: {1}\n\u691c\u51fa\u5024: {0} ## The following are all possible strings for the first argument ({0}) of the ## above string. -compiler.misc.type.req.class=\ - \u30af\u30e9\u30b9 -compiler.misc.type.req.class.array=\ - \u30af\u30e9\u30b9\u307e\u305f\u306f\u914d\u5217 -compiler.misc.type.req.ref=\ - \u53c2\u7167 -compiler.misc.type.req.exact=\ - \u5883\u754c\u306e\u306a\u3044\u30af\u30e9\u30b9\u307e\u305f\u306f\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9 -compiler.misc.type.parameter=\ - \u578b\u30d1\u30e9\u30e1\u30fc\u30bf {0} +compiler.misc.type.req.class=\u30af\u30e9\u30b9 +compiler.misc.type.req.class.array=\u30af\u30e9\u30b9\u307e\u305f\u306f\u914d\u5217 +compiler.misc.type.req.ref=\u53c2\u7167 +compiler.misc.type.req.exact=\u5883\u754c\u306e\u306a\u3044\u30af\u30e9\u30b9\u307e\u305f\u306f\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9 +compiler.misc.type.parameter=\u578b\u30d1\u30e9\u30e1\u30fc\u30bf {0} ##### ## The following are all possible strings for the last argument of all those ## diagnostics whose key ends in ".1" -compiler.misc.undetermined.type=\ - \u672a\u5b9a\u578b -ncompiler.misc.type.variable.has.undetermined.type=\ - \u578b\u5909\u6570 {0} \u306f\u672a\u5b9a\u578b\u3067\u3059\u3002 -compiler.misc.no.unique.maximal.instance.exists=\ - \u578b\u5909\u6570 {0} (\u4e0a\u9650 {1}) \u306e\u56fa\u6709\u306e\u6700\u5927\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u5b58\u5728\u3057\u307e\u305b\u3093\u3002 -compiler.misc.no.unique.minimal.instance.exists=\ - \u578b\u5909\u6570 {0} (\u4e0b\u9650 {1}) \u306e\u56fa\u6709\u306e\u6700\u5c0f\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u5b58\u5728\u3057\u307e\u305b\u3093\u3002 -compiler.misc.no.conforming.instance.exists=\ - \u578b\u5909\u6570 {0} \u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u5b58\u5728\u3057\u306a\u3044\u306e\u3067\u3001{1} \u306f {2} \u306b\u9069\u5408\u3057\u307e\u305b\u3093\u3002 -compiler.misc.no.conforming.assignment.exists=\ - \u578b\u5909\u6570 {0} \u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u5b58\u5728\u3057\u306a\u3044\u306e\u3067\u3001\u5f15\u6570\u578b {1} \u306f\u4eee\u30d1\u30e9\u30e1\u30fc\u30bf\u578b {2} \u306b\u9069\u5408\u3057\u307e\u305b\u3093\u3002 -compiler.misc.arg.length.mismatch=\ - \u5b9f\u5f15\u6570\u30ea\u30b9\u30c8\u3068\u4eee\u5f15\u6570\u30ea\u30b9\u30c8\u306e\u9577\u3055\u304c\u7570\u306a\u308b\u305f\u3081\u3001\u5f15\u6570\u304b\u3089\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.misc.inferred.do.not.conform.to.bounds=\ - \u63a8\u5b9a\u578b\u5f15\u6570 {0} \u306f\u578b\u5909\u6570 {1} \u306e\u5883\u754c\u306b\u9069\u5408\u3057\u307e\u305b\u3093\u3002 +compiler.misc.undetermined.type=\u672a\u5b9a\u578b +ncompiler.misc.type.variable.has.undetermined.type=\u578b\u5909\u6570 {0} \u306f\u672a\u5b9a\u578b\u3067\u3059\u3002 +compiler.misc.no.unique.maximal.instance.exists=\u578b\u5909\u6570 {0} (\u4e0a\u9650 {1}) \u306e\u56fa\u6709\u306e\u6700\u5927\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u5b58\u5728\u3057\u307e\u305b\u3093\u3002 +compiler.misc.no.unique.minimal.instance.exists=\u578b\u5909\u6570 {0} (\u4e0b\u9650 {1}) \u306e\u56fa\u6709\u306e\u6700\u5c0f\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u5b58\u5728\u3057\u307e\u305b\u3093\u3002 +compiler.misc.no.conforming.instance.exists=\u578b\u5909\u6570 {0} \u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u5b58\u5728\u3057\u306a\u3044\u306e\u3067\u3001{1} \u306f {2} \u306b\u9069\u5408\u3057\u307e\u305b\u3093\u3002 +compiler.misc.no.conforming.assignment.exists=\u578b\u5909\u6570 {0} \u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u5b58\u5728\u3057\u306a\u3044\u306e\u3067\u3001\u5f15\u6570\u578b {1} \u306f\u4eee\u30d1\u30e9\u30e1\u30fc\u30bf\u578b {2} \u306b\u9069\u5408\u3057\u307e\u305b\u3093\u3002 +compiler.misc.arg.length.mismatch=\u5b9f\u5f15\u6570\u30ea\u30b9\u30c8\u3068\u4eee\u5f15\u6570\u30ea\u30b9\u30c8\u306e\u9577\u3055\u304c\u7570\u306a\u308b\u305f\u3081\u3001\u5f15\u6570\u304b\u3089\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.misc.inferred.do.not.conform.to.bounds=\u63a8\u5b9a\u3055\u308c\u305f\u578b\u306f\u5ba3\u8a00\u3055\u308c\u305f\u5883\u754c\u306b\u9069\u5408\u3057\u307e\u305b\u3093\u3002\n\u63a8\u5b9a: {0}\n\u5883\u754c: {1} +compiler.misc.inferred.do.not.conform.to.params=\u5b9f\u5f15\u6570\u304c\u63a8\u5b9a\u3055\u308c\u305f\u4eee\u5f15\u6570\u306b\u9069\u5408\u3057\u307e\u305b\u3093\u3002\n\u671f\u5f85\u5024: {0}\n\u691c\u51fa\u5024: {1} ##### ## The first argument ({0}) is a "kindname". -compiler.err.abstract.cant.be.accessed.directly=\ - \u62bd\u8c61 {0} {1} ({2} \u5185) \u306b\u76f4\u63a5\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.abstract.cant.be.accessed.directly=\u62bd\u8c61 {0} {1} ({2} \u5185) \u306b\u76f4\u63a5\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 ## The first argument ({0}) is a "kindname". -compiler.err.non-static.cant.be.ref=\ - static \u3067\u306a\u3044 {0} {1} \u3092 static \u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u304b\u3089\u53c2\u7167\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.err.non-static.cant.be.ref=static \u3067\u306a\u3044 {0} {1} \u3092 static \u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u304b\u3089\u53c2\u7167\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 ## Both arguments ({0}, {1}) are "kindname"s. {0} is a comma-separated list ## of kindnames (the list should be identical to that provided in source. -compiler.err.unexpected.type=\ -\u4e88\u671f\u3057\u306a\u3044\u578b\n\ -\u671f\u5f85\u5024 : {0}\n\ -\u691c\u51fa\u5024 : {1} +compiler.err.unexpected.type=\u4e88\u671f\u3057\u306a\u3044\u578b\n\u671f\u5f85\u5024 : {0}\n\u691c\u51fa\u5024 : {1} -## The first argument ({0}) is a "kindname". -compiler.err.cant.resolve=\ -\u30b7\u30f3\u30dc\u30eb\u3092\u898b\u3064\u3051\u3089\u308c\u307e\u305b\u3093\u3002\n\ -\u30b7\u30f3\u30dc\u30eb: {0} {3}{1}{2} +## The first argument {0} is a "kindname" (e.g. 'constructor', 'field', etc.) +## The second argument {1} is the non-resolved symbol +## The third argument {2} is a list of type parameters (non-empty if {1} is a method) +## The fourth argument {3} is a list of argument types (non-empty if {1} is a method) +compiler.err.cant.resolve=\u30b7\u30f3\u30dc\u30eb\u3092\u898b\u3064\u3051\u3089\u308c\u307e\u305b\u3093\u3002\n\u30b7\u30f3\u30dc\u30eb: {0} {3}{1}{2} -## The first argument ({0}) and fifth argument ({4}) are "kindname"s. -compiler.err.cant.resolve.location=\ -\u30b7\u30f3\u30dc\u30eb\u3092\u898b\u3064\u3051\u3089\u308c\u307e\u305b\u3093\u3002\n\ -\u30b7\u30f3\u30dc\u30eb: {0} {3}{1}{2}\n\ -\u5834\u6240 : {5} \u306e {4} +compiler.err.cant.resolve.args=\u30b7\u30f3\u30dc\u30eb\u3092\u898b\u3064\u3051\u3089\u308c\u307e\u305b\u3093\n\u30b7\u30f3\u30dc\u30eb: {0} {1}({3}) + +compiler.err.cant.resolve.args.params=\u30b7\u30f3\u30dc\u30eb\u3092\u898b\u3064\u3051\u3089\u308c\u307e\u305b\u3093\n\u30b7\u30f3\u30dc\u30eb: {0} <{2}>{1}({3}) + +## arguments from {0} to {3} have the same meaning as above +## The fifth argument {4} is the location "kindname" (e.g. 'constructor', 'field', etc.) +## The sixth argument {5} is the location type +compiler.err.cant.resolve.location=\u30b7\u30f3\u30dc\u30eb\u3092\u898b\u3064\u3051\u3089\u308c\u307e\u305b\u3093\n\u30b7\u30f3\u30dc\u30eb: {0} {1}\n\u5834\u6240: {4} {5} + +compiler.err.cant.resolve.location.args=\u30b7\u30f3\u30dc\u30eb\u3092\u898b\u3064\u3051\u3089\u308c\u307e\u305b\u3093\n\u30b7\u30f3\u30dc\u30eb: {0} {1}({3})\n\u5834\u6240: {4} {5} + +compiler.err.cant.resolve.location.args.params=\u30b7\u30f3\u30dc\u30eb\u3092\u898b\u3064\u3051\u3089\u308c\u307e\u305b\u3093\n\u30b7\u30f3\u30dc\u30eb: {0} <{2}>{1}({3})\n\u5834\u6240: {4} {5} + +compiler.err.cant.apply.diamond=\u30c0\u30a4\u30e4\u30e2\u30f3\u30c9\u6f14\u7b97\u5b50\u304c {0} \u306e\u578b\u3092\u63a8\u5b9a\u3067\u304d\u307e\u305b\u3093;\n\u7406\u7531: {1} ## The following are all possible string for "kindname". ## They should be called whatever the JLS calls them after it been translated ## to the appropriate language. # compiler.misc.kindname.constructor=\ # static member -compiler.misc.kindname.annotation=\ - @\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9 -compiler.misc.kindname.constructor=\ - \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf -compiler.misc.kindname.interface=\ - \u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9 -compiler.misc.kindname.static=\ - static -compiler.misc.kindname.type.variable=\ - \u578b\u5909\u6570\u306e\u5883\u754c -compiler.misc.kindname=\ - \u8b58\u5225\u5b50 ({0}) -compiler.misc.kindname.variable=\ - \u5909\u6570 -compiler.misc.kindname.value=\ - \u5024 -compiler.misc.kindname.method=\ - \u30e1\u30bd\u30c3\u30c9 -compiler.misc.kindname.variable.method=\ - \u5909\u6570\u3001\u30e1\u30bd\u30c3\u30c9 -compiler.misc.kindname.value.method=\ - \u5024\u3001\u30e1\u30bd\u30c3\u30c9 -compiler.misc.kindname.class=\ - \u30af\u30e9\u30b9 -compiler.misc.kindname.variable.class=\ - \u5909\u6570\u3001\u30af\u30e9\u30b9 -compiler.misc.kindname.value.class=\ - \u5024\u3001\u30af\u30e9\u30b9 -compiler.misc.kindname.method.class=\ - \u30e1\u30bd\u30c3\u30c9\u3001\u30af\u30e9\u30b9 -compiler.misc.kindname.variable.method.class=\ - \u5909\u6570\u3001\u30e1\u30bd\u30c3\u30c9\u3001\u30af\u30e9\u30b9 -compiler.misc.kindname.value.method.class=\ - \u5024\u3001\u30e1\u30bd\u30c3\u30c9\u3001\u30af\u30e9\u30b9 -compiler.misc.kindname.package=\ - \u30d1\u30c3\u30b1\u30fc\u30b8 -compiler.misc.kindname.variable.package=\ - \u5909\u6570\u3001\u30d1\u30c3\u30b1\u30fc\u30b8 -compiler.misc.kindname.value.package=\ - \u5024\u3001\u30d1\u30c3\u30b1\u30fc\u30b8 -compiler.misc.kindname.method.package=\ - \u30e1\u30bd\u30c3\u30c9\u3001\u30d1\u30c3\u30b1\u30fc\u30b8 -compiler.misc.kindname.variable.method.package=\ - \u5909\u6570\u3001\u30e1\u30bd\u30c3\u30c9\u3001\u30d1\u30c3\u30b1\u30fc\u30b8 -compiler.misc.kindname.value.method.package=\ - \u5024\u3001\u30e1\u30bd\u30c3\u30c9\u3001\u30d1\u30c3\u30b1\u30fc\u30b8 -compiler.misc.kindname.class.package=\ - \u30af\u30e9\u30b9\u3001\u30d1\u30c3\u30b1\u30fc\u30b8 -compiler.misc.kindname.variable.class.package=\ - \u5909\u6570\u3001\u30af\u30e9\u30b9\u3001\u30d1\u30c3\u30b1\u30fc\u30b8 -compiler.misc.kindname.value.class.package=\ - \u5024\u3001\u30af\u30e9\u30b9\u3001\u30d1\u30c3\u30b1\u30fc\u30b8 -compiler.misc.kindname.method.class.package=\ - \u30e1\u30bd\u30c3\u30c9\u3001\u30af\u30e9\u30b9\u3001\u30d1\u30c3\u30b1\u30fc\u30b8 -compiler.misc.kindname.variable.method.class.package=\ - \u5909\u6570\u3001\u30e1\u30bd\u30c3\u30c9\u3001\u30af\u30e9\u30b9\u3001\u30d1\u30c3\u30b1\u30fc\u30b8 -compiler.misc.kindname.value.method.class.package=\ - \u5024\u3001\u30e1\u30bd\u30c3\u30c9\u3001\u30af\u30e9\u30b9\u3001\u30d1\u30c3\u30b1\u30fc\u30b8 - +compiler.misc.kindname.annotation=@\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9 +compiler.misc.kindname.constructor=\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf +compiler.misc.kindname.interface=\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9 +compiler.misc.kindname.static=static +compiler.misc.kindname.type.variable=\u578b\u5909\u6570\u306e\u5883\u754c +compiler.misc.kindname.type.variable.bound=\u578b\u5909\u6570\u306e\u5883\u754c +compiler.misc.kindname.variable=\u5909\u6570 +compiler.misc.kindname.value=\u5024 +compiler.misc.kindname.method=\u30e1\u30bd\u30c3\u30c9 +compiler.misc.kindname.class=\u30af\u30e9\u30b9 +compiler.misc.kindname.package=\u30d1\u30c3\u30b1\u30fc\u30b8 ##### -compiler.err.override.static=\ - {0}\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3059\u308b\u30e1\u30bd\u30c3\u30c9\u304c static \u3067\u3059\u3002 -compiler.err.override.meth=\ - {0}\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3055\u308c\u305f\u30e1\u30bd\u30c3\u30c9\u306f {1} \u3067\u3059\u3002 +compiler.misc.no.args=\u5f15\u6570\u7121\u3057 -compiler.err.override.meth.doesnt.throw=\ - {0}\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3055\u308c\u305f\u30e1\u30bd\u30c3\u30c9\u306f {1} \u3092\u30b9\u30ed\u30fc\u3057\u307e\u305b\u3093\u3002 +compiler.err.override.static={0}\n\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3059\u308b\u30e1\u30bd\u30c3\u30c9\u304c static \u3067\u3059\u3002 +compiler.err.override.meth={0}\n\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3055\u308c\u305f\u30e1\u30bd\u30c3\u30c9\u306f {1} \u3067\u3059\u3002 + +compiler.err.override.meth.doesnt.throw={0}\n\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3055\u308c\u305f\u30e1\u30bd\u30c3\u30c9\u306f {1} \u3092\u30b9\u30ed\u30fc\u3057\u307e\u305b\u3093\u3002 # In the following string {1} is a space separated list of Java Keywords, as # they would have been declared in the source code -compiler.err.override.weaker.access=\ - {0}\u30b9\u30fc\u30d1\u30fc\u30af\u30e9\u30b9\u3067\u306e\u5b9a\u7fa9\u3088\u308a\u5f31\u3044\u30a2\u30af\u30bb\u30b9\u7279\u6a29 ({1}) \u3092\u5272\u308a\u5f53\u3066\u3088\u3046\u3068\u3057\u307e\u3057\u305f\u3002 +compiler.err.override.weaker.access={0}\n\u30b9\u30fc\u30d1\u30fc\u30af\u30e9\u30b9\u3067\u306e\u5b9a\u7fa9\u3088\u308a\u5f31\u3044\u30a2\u30af\u30bb\u30b9\u7279\u6a29 ({1}) \u3092\u5272\u308a\u5f53\u3066\u3088\u3046\u3068\u3057\u307e\u3057\u305f\u3002 -compiler.misc.override.incompatible.ret=\ - {0}\u4e92\u63db\u6027\u306e\u306a\u3044\u623b\u308a\u5024\u306e\u578b\u3092\u4f7f\u304a\u3046\u3068\u3057\u307e\u3057\u305f\u3002 +compiler.err.override.incompatible.ret={0}\n\u623b\u308a\u5024\u306e\u578b {1} \u306f {2} \u3068\u4e92\u63db\u6027\u304c\u3042\u308a\u307e\u305b\u3093 -compiler.misc.override.unchecked.ret=\ - {0}; \u623b\u308a\u5024\u306e\u578b\u306f\u7121\u691c\u67fb\u5909\u63db\u304c\u5fc5\u8981\u3067\u3059\u3002 +compiler.warn.override.unchecked.ret=[unchecked] {0}\n\u623b\u308a\u5024\u306e\u578b\u306b\u306f {1} \u304b\u3089 {2} \u3078\u306e\u7121\u691c\u67fb\u306e\u5909\u63db\u304c\u5fc5\u8981\u3067\u3059\u3002 + +compiler.warn.override.unchecked.thrown=[unchecked] {0}\n\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3055\u308c\u305f\u30e1\u30bd\u30c3\u30c9\u306f {1} \u3092\u30b9\u30ed\u30fc\u3057\u307e\u305b\u3093\u3002 ## The following are all possible strings for the first argument ({0}) of the ## above strings. -compiler.misc.cant.override=\ - {1} \u306e {0} \u306f {3} \u306e {2} \u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.misc.cant.implement=\ - {1} \u306e {0} \u306f {3} \u306e {2} \u3092\u5b9f\u88c5\u3067\u304d\u307e\u305b\u3093\u3002 -compiler.misc.clashes.with=\ - {1} \u306e {0} \u306f {3} \u306e {2} \u3068\u7af6\u5408\u3057\u307e\u3059\u3002 -compiler.misc.unchecked.override=\ - {1} \u306e {0} \u306f {3} \u306e {2} \u3092\u4e0a\u66f8\u304d\u3057\u307e\u3059\u3002 -compiler.misc.unchecked.implement=\ - {1} \u306e {0} \u306f {3} \u306e {2} \u3092\u5b9f\u88c5\u3057\u307e\u3059\u3002 -compiler.misc.unchecked.clash.with=\ - {1} \u306e {0} \u306f {3} \u306e {2} \u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3057\u307e\u3059\u3002 -compiler.misc.varargs.override=\ - {1} \u306e {0} \u306f {3} \u306e {2} \u3092\u4e0a\u66f8\u304d\u3057\u307e\u3059\u3002 -compiler.misc.varargs.implement=\ - {1} \u306e {0} \u306f {3} \u306e {2} \u3092\u5b9f\u88c5\u3057\u307e\u3059\u3002 -compiler.misc.varargs.clash.with=\ - {1} \u306e {0} \u306f {3} \u306e {2} \u3092\u4e0a\u66f8\u304d\u3057\u307e\u3059\u3002 +compiler.misc.cant.override={1} \u306e {0} \u306f {3} \u306e {2} \u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.misc.cant.implement={1} \u306e {0} \u306f {3} \u306e {2} \u3092\u5b9f\u88c5\u3067\u304d\u307e\u305b\u3093\u3002 +compiler.misc.clashes.with={1} \u306e {0} \u306f {3} \u306e {2} \u3068\u7af6\u5408\u3057\u307e\u3059\u3002 +compiler.misc.unchecked.override={1} \u306e {0} \u306f {3} \u306e {2} \u3092\u4e0a\u66f8\u304d\u3057\u307e\u3059\u3002 +compiler.misc.unchecked.implement={1} \u306e {0} \u306f {3} \u306e {2} \u3092\u5b9f\u88c5\u3057\u307e\u3059\u3002 +compiler.misc.unchecked.clash.with={1} \u306e {0} \u306f {3} \u306e {2} \u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3057\u307e\u3059\u3002 +compiler.misc.varargs.override={1} \u306e {0} \u306f {3} \u306e {2} \u3092\u4e0a\u66f8\u304d\u3057\u307e\u3059\u3002 +compiler.misc.varargs.implement={1} \u306e {0} \u306f {3} \u306e {2} \u3092\u5b9f\u88c5\u3057\u307e\u3059\u3002 +compiler.misc.varargs.clash.with={1} \u306e {0} \u306f {3} \u306e {2} \u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3057\u307e\u3059\u3002 ######################################## # Diagnostics for language feature changes ######################################## -compiler.err.unsupported.fp.lit=\ - 16 \u9032\u6d6e\u52d5\u5c0f\u6570\u70b9\u30ea\u30c6\u30e9\u30eb\u306f -source 5 \u3088\u308a\u524d\u3067\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 +compiler.err.unsupported.fp.lit=16 \u9032\u306e\u6d6e\u52d5\u5c0f\u6570\u70b9\u306e\u30ea\u30c6\u30e9\u30eb\u306f -source {0} \u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\n(16 \u9032\u306e\u6d6e\u52d5\u5c0f\u6570\u70b9\u30ea\u30c6\u30e9\u30eb\u3092\u4f7f\u7528\u53ef\u80fd\u306b\u3059\u308b\u306b\u306f\u3001-source 5 \u4ee5\u964d\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044) -compiler.warn.enum.as.identifier=\ - \u30ea\u30ea\u30fc\u30b9 5 \u304b\u3089 ''enum'' \u306f\u30ad\u30fc\u30ef\u30fc\u30c9\u306a\u306e\u3067\u8b58\u5225\u5b50\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\n\ -(''enum'' \u3092\u30ad\u30fc\u30ef\u30fc\u30c9\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u306b\u306f -source 5 \u4ee5\u964d\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044) +compiler.err.unsupported.binary.lit=2 \u9032\u306e\u30ea\u30c6\u30e9\u30eb\u306f -source {0} \u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\n(2 \u9032\u306e\u30ea\u30c6\u30e9\u30eb\u3092\u4f7f\u7528\u53ef\u80fd\u306b\u3059\u308b\u306b\u306f\u3001-source 7 \u4ee5\u964d\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044) -compiler.warn.assert.as.identifier=\ - \u30ea\u30ea\u30fc\u30b9 1.4 \u304b\u3089 ''assert'' \u306f\u30ad\u30fc\u30ef\u30fc\u30c9\u306a\u306e\u3067\u3001\u8b58\u5225\u5b50\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\n\ -(''assert'' \u3092\u30ad\u30fc\u30ef\u30fc\u30c9\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u306b\u306f\u3001-source 1.4 (\u307e\u305f\u306f\u305d\u308c\u4ee5\u964d\u306e\u30ea\u30ea\u30fc\u30b9\u540d) \u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044) +compiler.err.unsupported.underscore.lit=\u30ea\u30c6\u30e9\u30eb\u306e\u4e0b\u7dda\u306f -source {0} \u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\n(\u30ea\u30c6\u30e9\u30eb\u3067\u4e0b\u7dda\u3092\u4f7f\u7528\u53ef\u80fd\u306b\u3059\u308b\u306b\u306f\u3001-source 7 \u4ee5\u964d\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044) -compiler.err.enum.as.identifier=\ - \u30ea\u30ea\u30fc\u30b9 5 \u304b\u3089 ''enum'' \u306f\u30ad\u30fc\u30ef\u30fc\u30c9\u306a\u306e\u3067\u8b58\u5225\u5b50\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\n\ -(''enum'' \u3092\u8b58\u5225\u5b50\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u306b\u306f -source 1.4 \u307e\u305f\u306f\u305d\u308c\u4ee5\u524d\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044) +compiler.warn.enum.as.identifier=\u30ea\u30ea\u30fc\u30b9 5 \u304b\u3089 ''enum'' \u306f\u30ad\u30fc\u30ef\u30fc\u30c9\u306a\u306e\u3067\u8b58\u5225\u5b50\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\n(''enum'' \u3092\u30ad\u30fc\u30ef\u30fc\u30c9\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u306b\u306f -source 5 \u4ee5\u964d\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044) -compiler.err.assert.as.identifier=\ - \u30ea\u30ea\u30fc\u30b9 1.4 \u304b\u3089 ''assert'' \u306f\u30ad\u30fc\u30ef\u30fc\u30c9\u306a\u306e\u3067\u3001\u8b58\u5225\u5b50\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\n\ -(''assert'' \u3092\u8b58\u5225\u5b50\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u306b\u306f\u3001-source 1.3 (\u307e\u305f\u306f\u305d\u308c\u4ee5\u524d\u306e\u30ea\u30ea\u30fc\u30b9\u540d) \u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044) +compiler.warn.assert.as.identifier=\u30ea\u30ea\u30fc\u30b9 1.4 \u304b\u3089 ''assert'' \u306f\u30ad\u30fc\u30ef\u30fc\u30c9\u306a\u306e\u3067\u3001\u8b58\u5225\u5b50\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\n(''assert'' \u3092\u30ad\u30fc\u30ef\u30fc\u30c9\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u306b\u306f\u3001-source 1.4 (\u307e\u305f\u306f\u305d\u308c\u4ee5\u964d\u306e\u30ea\u30ea\u30fc\u30b9\u540d) \u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044) -compiler.err.generics.not.supported.in.source=\ - \u7dcf\u79f0\u578b\u306f -source {0} \u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\n\ -(\u7dcf\u79f0\u578b\u3092\u4f7f\u7528\u53ef\u80fd\u306b\u3059\u308b\u306b\u306f\u3001-source 5 \u4ee5\u964d\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044) +compiler.err.enum.as.identifier=\u30ea\u30ea\u30fc\u30b9 5 \u304b\u3089 ''enum'' \u306f\u30ad\u30fc\u30ef\u30fc\u30c9\u306a\u306e\u3067\u8b58\u5225\u5b50\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\n(''enum'' \u3092\u8b58\u5225\u5b50\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u306b\u306f -source 1.4 \u307e\u305f\u306f\u305d\u308c\u4ee5\u524d\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044) -compiler.err.varargs.not.supported.in.source=\ - \u53ef\u5909\u5f15\u6570\u30e1\u30bd\u30c3\u30c9\u306f -source {0} \u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\n\ -(\u53ef\u5909\u5f15\u6570\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u53ef\u80fd\u306b\u3059\u308b\u306b\u306f\u3001-source 5 \u4ee5\u964d\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044) +compiler.err.assert.as.identifier=\u30ea\u30ea\u30fc\u30b9 1.4 \u304b\u3089 ''assert'' \u306f\u30ad\u30fc\u30ef\u30fc\u30c9\u306a\u306e\u3067\u3001\u8b58\u5225\u5b50\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\n(''assert'' \u3092\u8b58\u5225\u5b50\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u306b\u306f\u3001-source 1.3 (\u307e\u305f\u306f\u305d\u308c\u4ee5\u524d\u306e\u30ea\u30ea\u30fc\u30b9\u540d) \u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044) -compiler.err.annotations.not.supported.in.source=\ - \u6ce8\u91c8\u306f -source {0} \u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\n\ -(\u6ce8\u91c8\u3092\u4f7f\u7528\u53ef\u80fd\u306b\u3059\u308b\u306b\u306f\u3001-source 5 \u4ee5\u964d\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044) +compiler.err.generics.not.supported.in.source=\u7dcf\u79f0\u578b\u306f -source {0} \u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\n(\u7dcf\u79f0\u578b\u3092\u4f7f\u7528\u53ef\u80fd\u306b\u3059\u308b\u306b\u306f\u3001-source 5 \u4ee5\u964d\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044) -compiler.err.foreach.not.supported.in.source=\ - for-each \u30eb\u30fc\u30d7\u306f -source {0} \u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\n\ -(for-each \u30eb\u30fc\u30d7\u3092\u4f7f\u7528\u53ef\u80fd\u306b\u3059\u308b\u306b\u306f\u3001-source 5 \u4ee5\u964d\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044) +compiler.err.varargs.not.supported.in.source=\u53ef\u5909\u5f15\u6570\u30e1\u30bd\u30c3\u30c9\u306f -source {0} \u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\n(\u53ef\u5909\u5f15\u6570\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u53ef\u80fd\u306b\u3059\u308b\u306b\u306f\u3001-source 5 \u4ee5\u964d\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044) + +compiler.err.annotations.not.supported.in.source=\u6ce8\u91c8\u306f -source {0} \u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\n(\u6ce8\u91c8\u3092\u4f7f\u7528\u53ef\u80fd\u306b\u3059\u308b\u306b\u306f\u3001-source 5 \u4ee5\u964d\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044) + +compiler.err.type.annotations.not.supported.in.source=\u578b\u6ce8\u91c8\u306f -source {0} \u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\n(\u578b\u6ce8\u91c8\u3092\u4f7f\u7528\u53ef\u80fd\u306b\u3059\u308b\u306b\u306f\u3001-source 7 \u4ee5\u964d\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044) + +compiler.err.foreach.not.supported.in.source=for-each \u30eb\u30fc\u30d7\u306f -source {0} \u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\n(for-each \u30eb\u30fc\u30d7\u3092\u4f7f\u7528\u53ef\u80fd\u306b\u3059\u308b\u306b\u306f\u3001-source 5 \u4ee5\u964d\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044) + +compiler.err.static.import.not.supported.in.source=static import \u5ba3\u8a00\u306f -source {0} \u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\n(static import \u5ba3\u8a00\u3092\u4f7f\u7528\u53ef\u80fd\u306b\u3059\u308b\u306b\u306f\u3001-source 5 \u4ee5\u964d\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044) + +compiler.err.enums.not.supported.in.source=\u5217\u6319\u578b\u306f -source {0} \u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\n(\u5217\u6319\u578b\u3092\u4f7f\u7528\u53ef\u80fd\u306b\u3059\u308b\u306b\u306f -source 5 \u4ee5\u964d\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044) + +compiler.err.diamond.not.supported.in.source=\u30c0\u30a4\u30e4\u30e2\u30f3\u30c9\u6f14\u7b97\u5b50\u306f -source {0} \u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\n(\u30c0\u30a4\u30e4\u30e2\u30f3\u30c9\u6f14\u7b97\u5b50\u3092\u4f7f\u7528\u53ef\u80fd\u306b\u3059\u308b\u306b\u306f -source 7 \u4ee5\u964d\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044) + +compiler.err.string.switch.not.supported.in.source=\u30b9\u30a4\u30c3\u30c1\u3067\u306e\u6587\u5b57\u5217\u306e\u4f7f\u7528\u306f -source {0} \u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\n(\u30b9\u30a4\u30c3\u30c1\u3067\u6587\u5b57\u5217\u3092\u4f7f\u7528\u53ef\u80fd\u306b\u3059\u308b\u306b\u306f\u3001-source 7 \u4ee5\u964d\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044) + +######################################## +# Diagnostics for where clause implementation +# used by the RichDiagnosticFormatter. +######################################## + +compiler.misc.type.null= + +# X#n (where n is an int id) is disambiguated tvar name +compiler.misc.type.var={0}#{1} + +# CAP#n (where n is an int id) is an abbreviation for 'captured type' +compiler.misc.captured.type=CAP#{0} + +# (where n is an int id) is an abbreviation for 'intersection type' +compiler.misc.intersection.type=INT#{0} + +# where clause for captured type: contains upper ('extends {1}') and lower +# ('super {2}') bound along with the wildcard that generated this captured type ({3}) +compiler.misc.where.captured={3} \u306e\u6355\u6349\u304b\u3089 {0} \u306f {1} \u306e\u30b5\u30d6\u30af\u30e9\u30b9\u3067 {2} \u306e\u30b9\u30fc\u30d1\u30fc\u30af\u30e9\u30b9 + +# compact where clause for captured type: contains upper ('extends {1}') along +# with the wildcard that generated this captured type ({3}) +compiler.misc.where.captured.1={3} \u306e\u6355\u6349\u304b\u3089 {0} \u306f {1} \u306e\u30b5\u30d6\u30af\u30e9\u30b9 + +# where clause for type variable: contains upper bound(s) ('extends {1}') along with +# the kindname ({2}) and location ({3}) in which the typevar has been declared +compiler.misc.where.typevar={2} {3} \u3067\u5ba3\u8a00\u3055\u308c\u305f {0} \u306f {1} \u306e\u30b5\u30d6\u30af\u30e9\u30b9 + +# compact where clause for type variable: contains the kindname ({2}) and location ({3}) +# in which the typevar has been declared +compiler.misc.where.typevar.1={2} {3} \u3067\u5ba3\u8a00\u3055\u308c\u305f {0} + +# where clause for type variable: contains all the upper bound(s) ('extends {1}') +# of this intersection type +compiler.misc.where.intersection={0} \u306f {1} \u306e\u30b5\u30d6\u30af\u30e9\u30b9 + +### Where clause headers ### +compiler.misc.where.description.captured={0} \u306f\u65b0\u305f\u306a\u578b\u5909\u6570\u3067\u3059: +compiler.misc.where.description.typevar={0} \u306f\u578b\u5909\u6570\u3067\u3059: +compiler.misc.where.description.intersection={0} \u306f\u30a4\u30f3\u30bf\u30fc\u30bb\u30af\u30b7\u30e7\u30f3\u578b\u3067\u3059: +compiler.misc.where.description.captured.1={0} \u306f\u65b0\u305f\u306a\u578b\u5909\u6570\u3067\u3059: +compiler.misc.where.description.typevar.1={0} \u306f\u578b\u5909\u6570\u3067\u3059: +compiler.misc.where.description.intersection.1={0} \u306f\u30a4\u30f3\u30bf\u30fc\u30bb\u30af\u30b7\u30e7\u30f3\u578b\u3067\u3059: -compiler.err.static.import.not.supported.in.source=\ - static import \u5ba3\u8a00\u306f -source {0} \u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\n\ -(static import \u5ba3\u8a00\u3092\u4f7f\u7528\u53ef\u80fd\u306b\u3059\u308b\u306b\u306f\u3001-source 5 \u4ee5\u964d\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044) -compiler.err.enums.not.supported.in.source=\ - \u5217\u6319\u578b\u306f -source {0} \u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\n\ -(\u5217\u6319\u578b\u3092\u4f7f\u7528\u53ef\u80fd\u306b\u3059\u308b\u306b\u306f -source 5 \u4ee5\u964d\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044) diff --git a/langtools/src/share/classes/com/sun/tools/javac/resources/compiler_zh_CN.properties b/langtools/src/share/classes/com/sun/tools/javac/resources/compiler_zh_CN.properties index b5340810e8a..4353432c91f 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/resources/compiler_zh_CN.properties +++ b/langtools/src/share/classes/com/sun/tools/javac/resources/compiler_zh_CN.properties @@ -1,5 +1,5 @@ # -# Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved. +# Copyright 1999-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 @@ -27,475 +27,284 @@ ## errors ## -compiler.err.abstract.cant.be.instantiated=\ -{0} \u662f\u62bd\u8c61\u7684\uff1b\u65e0\u6cd5\u5bf9\u5176\u8fdb\u884c\u5b9e\u4f8b\u5316 -compiler.err.abstract.meth.cant.have.body=\ -\u62bd\u8c61\u65b9\u6cd5\u4e0d\u80fd\u6709\u4e3b\u4f53 -compiler.err.already.annotated=\ -{0} {1} \u5df2\u88ab\u6ce8\u91ca -compiler.err.already.defined=\ -\u5df2\u5728 {1} \u4e2d\u5b9a\u4e49 {0} -compiler.err.already.defined.single.import=\ -\u5df2\u5728 single-type \u5bfc\u5165\u4e2d\u5b9a\u4e49 {0} -compiler.err.already.defined.static.single.import=\ -\u5df2\u5728\u9759\u6001 single-type \u5bfc\u5165\u4e2d\u5b9a\u4e49 {0} -compiler.err.already.defined.this.unit=\ -\u5df2\u5728\u8be5\u7f16\u8bd1\u5355\u5143\u4e2d\u5b9a\u4e49 {0} -compiler.err.annotation.missing.default.value=\ -\u6ce8\u91ca {0} \u7f3a\u5c11 {1} -compiler.err.annotation.not.valid.for.type=\ -\u5bf9\u4e8e\u7c7b\u578b\u4e3a {0} \u7684\u503c\uff0c\u6ce8\u91ca\u65e0\u6548 -compiler.err.annotation.type.not.applicable=\ -\u6ce8\u91ca\u7c7b\u578b\u4e0d\u9002\u7528\u4e8e\u8be5\u7c7b\u578b\u7684\u58f0\u660e -compiler.err.annotation.value.must.be.annotation=\ -\u6ce8\u91ca\u503c\u5fc5\u987b\u4e3a\u6ce8\u91ca -compiler.err.annotation.value.must.be.class.literal=\ -\u6ce8\u91ca\u503c\u5fc5\u987b\u4e3a\u7c7b\u5b57\u9762\u503c -compiler.err.annotation.value.must.be.name.value=\ - \u6ce8\u91ca\u503c\u5fc5\u987b\u4e3a\u4ee5\u4e0b\u683c\u5f0f\uff1a\u201cname=value\u201d -compiler.err.annotation.value.not.allowable.type=\ -\u6ce8\u91ca\u503c\u4e0d\u662f\u5141\u8bb8\u7684\u7c7b\u578b -compiler.err.anon.class.impl.intf.no.args=\ -\u533f\u540d\u7c7b\u5b9e\u73b0\u63a5\u53e3\uff1b\u4e0d\u80fd\u6709\u53c2\u6570 -compiler.err.anon.class.impl.intf.no.typeargs=\ -\u533f\u540d\u7c7b\u5b9e\u73b0\u63a5\u53e3\uff1b\u4e0d\u80fd\u5177\u6709\u7c7b\u578b\u53c2\u6570 -compiler.err.anon.class.impl.intf.no.qual.for.new=\ -\u533f\u540d\u7c7b\u5b9e\u73b0\u63a5\u53e3\uff1b\u4e0d\u80fd\u6709\u9650\u5b9a\u7b26 - \u5bf9\u4e8e\u65b0 -compiler.err.array.and.varargs=\ -\u65e0\u6cd5\u5728 {2} \u4e2d\u540c\u65f6\u58f0\u660e {0} \u548c {1} -compiler.err.array.dimension.missing=\ -\u7f3a\u5c11\u6570\u7ec4\u7ef4\u6570 -compiler.err.array.req.but.found=\ -\u9700\u8981\u6570\u7ec4\uff0c\u4f46\u627e\u5230 {0} +compiler.err.abstract.cant.be.instantiated={0} \u662f\u62bd\u8c61\u7684\uff1b\u65e0\u6cd5\u5bf9\u5176\u8fdb\u884c\u5b9e\u4f8b\u5316 +compiler.err.abstract.meth.cant.have.body=\u62bd\u8c61\u65b9\u6cd5\u4e0d\u80fd\u6709\u4e3b\u4f53 +compiler.err.already.annotated={0} {1} \u5df2\u88ab\u6ce8\u91ca +compiler.err.already.defined=\u5df2\u5728 {1} \u4e2d\u5b9a\u4e49 {0} +compiler.err.already.defined.single.import=\u5df2\u5728 single-type \u5bfc\u5165\u4e2d\u5b9a\u4e49 {0} +compiler.err.already.defined.static.single.import=\u5df2\u5728\u9759\u6001 single-type \u5bfc\u5165\u4e2d\u5b9a\u4e49 {0} +compiler.err.already.defined.this.unit=\u5df2\u5728\u8be5\u7f16\u8bd1\u5355\u5143\u4e2d\u5b9a\u4e49 {0} +compiler.err.annotation.missing.default.value=\u6ce8\u91ca {0} \u7f3a\u5c11 {1} +compiler.err.annotation.not.valid.for.type=\u5bf9\u4e8e\u7c7b\u578b\u4e3a {0} \u7684\u503c\uff0c\u6ce8\u91ca\u65e0\u6548 +compiler.err.annotation.type.not.applicable=\u6ce8\u91ca\u7c7b\u578b\u4e0d\u9002\u7528\u4e8e\u8be5\u7c7b\u578b\u7684\u58f0\u660e +compiler.err.annotation.value.must.be.annotation=\u6ce8\u91ca\u503c\u5fc5\u987b\u4e3a\u6ce8\u91ca +compiler.err.annotation.value.must.be.class.literal=\u6ce8\u91ca\u503c\u5fc5\u987b\u4e3a\u7c7b\u5b57\u9762\u503c +compiler.err.annotation.value.must.be.name.value=\u6ce8\u91ca\u503c\u5fc5\u987b\u4e3a\u4ee5\u4e0b\u683c\u5f0f\uff1a\u201cname=value\u201d +compiler.err.annotation.value.not.allowable.type=\u6ce8\u91ca\u503c\u4e0d\u662f\u5141\u8bb8\u7684\u7c7b\u578b +compiler.err.anon.class.impl.intf.no.args=\u533f\u540d\u7c7b\u5b9e\u73b0\u63a5\u53e3\uff1b\u4e0d\u80fd\u6709\u53c2\u6570 +compiler.err.anon.class.impl.intf.no.typeargs=\u533f\u540d\u7c7b\u5b9e\u73b0\u63a5\u53e3\uff1b\u4e0d\u80fd\u5177\u6709\u7c7b\u578b\u53c2\u6570 +compiler.err.anon.class.impl.intf.no.qual.for.new=\u533f\u540d\u7c7b\u5b9e\u73b0\u63a5\u53e3\uff1b\u4e0d\u80fd\u6709\u9650\u5b9a\u7b26 - \u5bf9\u4e8e\u65b0 +compiler.err.array.and.varargs=\u65e0\u6cd5\u5728 {2} \u4e2d\u540c\u65f6\u58f0\u660e {0} \u548c {1} +compiler.err.array.dimension.missing=\u7f3a\u5c11\u6570\u7ec4\u7ef4\u6570 +compiler.err.array.req.but.found=\u9700\u8981\u6570\u7ec4\uff0c\u4f46\u627e\u5230 {0} -compiler.err.assignment.from.super-bound=\ -\u901a\u8fc7\u901a\u914d\u7b26 {0} \u6307\u5b9a -compiler.err.assignment.to.extends-bound=\ -\u6307\u5b9a\u7ed9\u901a\u914d\u7b26 {0} -compiler.err.attribute.value.must.be.constant=\ -\u5c5e\u6027\u503c\u5fc5\u987b\u4e3a\u5e38\u91cf +compiler.err.assignment.from.super-bound=\u901a\u8fc7\u901a\u914d\u7b26 {0} \u6307\u5b9a +compiler.err.assignment.to.extends-bound=\u6307\u5b9a\u7ed9\u901a\u914d\u7b26 {0} +compiler.err.attribute.value.must.be.constant=\u5c5e\u6027\u503c\u5fc5\u987b\u4e3a\u5e38\u91cf -compiler.err.break.outside.switch.loop=\ -\u5728 switch \u6216 loop \u5916\u90e8\u4e2d\u65ad +compiler.err.break.outside.switch.loop=\u5728 switch \u6216 loop \u5916\u90e8\u4e2d\u65ad -compiler.err.call.must.be.first.stmt.in.ctor=\ -\u5bf9 {0} \u7684\u8c03\u7528\u5fc5\u987b\u662f\u6784\u9020\u51fd\u6570\u4e2d\u7684\u7b2c\u4e00\u4e2a\u8bed\u53e5 -compiler.err.cant.apply.symbol=\ -\u65e0\u6cd5\u5c06 {1} \u4e2d\u7684 {0} \u5e94\u7528\u4e8e {2}({3}) -compiler.err.cant.apply.symbol.1=\ -\u65e0\u6cd5\u5c06 {1} \u4e2d\u7684 {0} \u5e94\u7528\u4e8e {2}({3})\uff1b{4} -compiler.err.cant.assign.val.to.final.var=\ -\u65e0\u6cd5\u4e3a\u6700\u7ec8\u53d8\u91cf {0} \u6307\u5b9a\u503c -compiler.err.cant.deref=\ -\u65e0\u6cd5\u53d6\u6d88\u5f15\u7528 {0} -compiler.err.cant.extend.intf.annotation=\ -\u5bf9\u4e8e @interface\uff0c\u4e0d\u5141\u8bb8 "extends" -compiler.err.cant.inherit.from.final=\ -\u65e0\u6cd5\u4ece\u6700\u7ec8 {0} \u8fdb\u884c\u7ee7\u627f -compiler.err.cant.ref.before.ctor.called=\ -\u65e0\u6cd5\u5728\u8c03\u7528\u7236\u7c7b\u578b\u6784\u9020\u51fd\u6570\u4e4b\u524d\u5f15\u7528 {0} -compiler.err.cant.ret.val.from.meth.decl.void=\ -\u5bf9\u4e8e\u7ed3\u679c\u7c7b\u578b\u4e3a void \u7684\u65b9\u6cd5\uff0c\u65e0\u6cd5\u8fd4\u56de\u503c -compiler.err.cant.select.static.class.from.param.type=\ -\u65e0\u6cd5\u4ece\u53c2\u6570\u5316\u7684\u7c7b\u578b\u4e2d\u9009\u62e9\u9759\u6001\u7c7b -compiler.err.cant.inherit.diff.arg=\ -\u65e0\u6cd5\u4f7f\u7528\u4ee5\u4e0b\u4e0d\u540c\u7684\u53c2\u6570\u7ee7\u627f {0}\uff1a<{1}> \u548c <{2}> -compiler.err.catch.without.try=\ -"catch" \u4e0d\u5e26\u6709 "try" -compiler.err.clash.with.pkg.of.same.name=\ -{0} \u4e0e\u5e26\u6709\u76f8\u540c\u540d\u79f0\u7684\u8f6f\u4ef6\u5305\u51b2\u7a81 -compiler.err.const.expr.req=\ -\u9700\u8981\u5e38\u91cf\u8868\u8fbe\u5f0f -compiler.err.enum.const.req=\ -\u9700\u8981\u975e\u9650\u5b9a\u679a\u4e3e\u5e38\u91cf\u540d\u79f0 -compiler.err.cont.outside.loop=\ -continue \u5728 loop \u5916\u90e8 -compiler.err.cyclic.inheritance=\ -\u5faa\u73af\u7ee7\u627f\u6d89\u53ca {0} -compiler.err.cyclic.annotation.element=\ -\u5faa\u73af\u6ce8\u91ca\u5143\u7d20\u7c7b\u578b -compiler.err.call.to.super.not.allowed.in.enum.ctor=\ -\u5728\u679a\u4e3e\u6784\u9020\u51fd\u6570\u4e2d\u4e0d\u5141\u8bb8\u8c03\u7528\u7236\u7c7b\u578b -compiler.err.no.superclass=\ -{0} \u4e0d\u5177\u6709\u7236\u7c7b +compiler.err.call.must.be.first.stmt.in.ctor=\u5bf9 {0} \u7684\u8c03\u7528\u5fc5\u987b\u662f\u6784\u9020\u51fd\u6570\u4e2d\u7684\u7b2c\u4e00\u4e2a\u8bed\u53e5 +compiler.err.cant.apply.symbol=\u65e0\u6cd5\u5c06 {4} {5} \u4e2d\u7684 {0} {1} \u5e94\u7528\u4e8e {2}({3}) +compiler.err.cant.apply.symbol.1=\u65e0\u6cd5\u5c06 {4} {5} \u4e2d\u7684 {0} {1} \u5e94\u7528\u4e8e {2}({3})\n\u539f\u56e0\u4e3a: {6} +compiler.err.cant.assign.val.to.final.var=\u65e0\u6cd5\u4e3a\u6700\u7ec8\u53d8\u91cf {0} \u6307\u5b9a\u503c +compiler.err.cant.deref=\u65e0\u6cd5\u53d6\u6d88\u5f15\u7528 {0} +compiler.err.cant.extend.intf.annotation=\u5bf9\u4e8e @interface\uff0c\u4e0d\u5141\u8bb8 "extends" +compiler.err.cant.inherit.from.final=\u65e0\u6cd5\u4ece\u6700\u7ec8 {0} \u8fdb\u884c\u7ee7\u627f +compiler.err.cant.ref.before.ctor.called=\u65e0\u6cd5\u5728\u8c03\u7528\u7236\u7c7b\u578b\u6784\u9020\u51fd\u6570\u4e4b\u524d\u5f15\u7528 {0} +compiler.err.cant.ret.val.from.meth.decl.void=\u5bf9\u4e8e\u7ed3\u679c\u7c7b\u578b\u4e3a void \u7684\u65b9\u6cd5\uff0c\u65e0\u6cd5\u8fd4\u56de\u503c +compiler.err.cant.select.static.class.from.param.type=\u65e0\u6cd5\u4ece\u53c2\u6570\u5316\u7684\u7c7b\u578b\u4e2d\u9009\u62e9\u9759\u6001\u7c7b +compiler.err.cant.inherit.diff.arg=\u65e0\u6cd5\u4f7f\u7528\u4ee5\u4e0b\u4e0d\u540c\u7684\u53c2\u6570\u7ee7\u627f {0}\uff1a<{1}> \u548c <{2}> +compiler.err.catch.without.try="catch" \u4e0d\u5e26\u6709 "try" +compiler.err.clash.with.pkg.of.same.name={0} \u4e0e\u5e26\u6709\u76f8\u540c\u540d\u79f0\u7684\u8f6f\u4ef6\u5305\u51b2\u7a81 +compiler.err.const.expr.req=\u9700\u8981\u5e38\u91cf\u8868\u8fbe\u5f0f +compiler.err.enum.const.req=\u9700\u8981\u975e\u9650\u5b9a\u679a\u4e3e\u5e38\u91cf\u540d\u79f0 +compiler.err.cont.outside.loop=continue \u5728 loop \u5916\u90e8 +compiler.err.cyclic.inheritance=\u5faa\u73af\u7ee7\u627f\u6d89\u53ca {0} +compiler.err.cyclic.annotation.element=\u5faa\u73af\u6ce8\u91ca\u5143\u7d20\u7c7b\u578b +compiler.err.call.to.super.not.allowed.in.enum.ctor=\u5728\u679a\u4e3e\u6784\u9020\u51fd\u6570\u4e2d\u4e0d\u5141\u8bb8\u8c03\u7528\u7236\u7c7b\u578b +compiler.err.no.superclass={0} \u4e0d\u5177\u6709\u7236\u7c7b -compiler.err.concrete.inheritance.conflict=\ -{1} \u4e2d\u7684\u65b9\u6cd5 {0} \u548c {3} \u4e2d\u7684\u65b9\u6cd5 {2} \u662f\u4f7f\u7528\u76f8\u540c\u7684\u7b7e\u540d\u7ee7\u627f\u7684 +compiler.err.concrete.inheritance.conflict={1} \u4e2d\u7684\u65b9\u6cd5 {0} \u548c {3} \u4e2d\u7684\u65b9\u6cd5 {2} \u662f\u4f7f\u7528\u76f8\u540c\u7684\u7b7e\u540d\u7ee7\u627f\u7684 -compiler.err.default.allowed.in.intf.annotation.member=\ -\u4ec5\u5728 @interface \u6210\u5458\u4e2d\u5141\u8bb8\u4f7f\u7528\u9ed8\u8ba4\u503c -compiler.err.doesnt.exist=\ -\u8f6f\u4ef6\u5305 {0} \u4e0d\u5b58\u5728 -compiler.err.duplicate.annotation=\ -\u6ce8\u91ca\u91cd\u590d -compiler.err.duplicate.annotation.member.value=\ -{1} \u4e2d\u7684\u6ce8\u91ca\u6210\u5458\u503c {0} \u91cd\u590d -compiler.err.duplicate.class=\ -\u7c7b\u91cd\u590d\uff1a {0} -compiler.err.duplicate.case.label=\ -case \u6807\u7b7e\u91cd\u590d -compiler.err.duplicate.default.label=\ -default \u6807\u7b7e\u91cd\u590d +compiler.err.default.allowed.in.intf.annotation.member=\u4ec5\u5728 @interface \u6210\u5458\u4e2d\u5141\u8bb8\u4f7f\u7528\u9ed8\u8ba4\u503c +compiler.err.doesnt.exist=\u8f6f\u4ef6\u5305 {0} \u4e0d\u5b58\u5728 +compiler.err.duplicate.annotation=\u6ce8\u91ca\u91cd\u590d +compiler.err.duplicate.annotation.member.value={1} \u4e2d\u7684\u6ce8\u91ca\u6210\u5458\u503c {0} \u91cd\u590d +compiler.err.duplicate.class=\u7c7b\u91cd\u590d\uff1a {0} +compiler.err.duplicate.case.label=case \u6807\u7b7e\u91cd\u590d +compiler.err.duplicate.default.label=default \u6807\u7b7e\u91cd\u590d -compiler.err.else.without.if=\ -"else" \u4e0d\u5e26\u6709 "if" -compiler.err.empty.char.lit=\ -\u7a7a\u5b57\u7b26\u5b57\u9762\u503c -compiler.err.encl.class.required=\ -\u9700\u8981\u5305\u542b {0} \u7684\u5c01\u95ed\u5b9e\u4f8b -compiler.err.enum.annotation.must.be.enum.constant=\ -\u679a\u4e3e\u6ce8\u91ca\u503c\u5fc5\u987b\u662f\u679a\u4e3e\u5e38\u91cf +compiler.err.else.without.if="else" \u4e0d\u5e26\u6709 "if" +compiler.err.empty.bytecode.ident=\u7a7a\u5b57\u8282\u7801\u6807\u8bc6\u7b26 +compiler.err.empty.char.lit=\u7a7a\u5b57\u7b26\u5b57\u9762\u503c +compiler.err.encl.class.required=\u9700\u8981\u5305\u542b {0} \u7684\u5c01\u95ed\u5b9e\u4f8b +compiler.err.enum.annotation.must.be.enum.constant=\u679a\u4e3e\u6ce8\u91ca\u503c\u5fc5\u987b\u662f\u679a\u4e3e\u5e38\u91cf -compiler.err.enum.cant.be.instantiated=\ -\u65e0\u6cd5\u5b9e\u4f8b\u5316\u679a\u4e3e\u7c7b\u578b -compiler.err.enum.label.must.be.unqualified.enum=\ -\u679a\u4e3e switch case \u6807\u7b7e\u5fc5\u987b\u4e3a\u679a\u4e3e\u5e38\u91cf\u7684\u975e\u9650\u5b9a\u540d\u79f0 -compiler.err.enum.no.subclassing=\ -\u7c7b\u65e0\u6cd5\u76f4\u63a5\u7ee7\u627f java.lang.Enum -compiler.err.enum.types.not.extensible=\ -\u679a\u4e3e\u7c7b\u578b\u4e0d\u53ef\u7ee7\u627f -compiler.err.enum.no.finalize=\ -\u679a\u4e3e\u4e0d\u80fd\u6709 finalize \u65b9\u6cd5 -compiler.err.error.reading.file=\ -\u8bfb\u53d6 {0} \u65f6\u51fa\u9519\uff1b{1} -compiler.err.except.already.caught=\ -\u5df2\u6355\u6349\u5230\u5f02\u5e38 {0} -compiler.err.except.never.thrown.in.try=\ -\u5728\u76f8\u5e94\u7684 try \u8bed\u53e5\u4e3b\u4f53\u4e2d\u4e0d\u80fd\u629b\u51fa\u5f02\u5e38 {0} +compiler.err.enum.cant.be.instantiated=\u65e0\u6cd5\u5b9e\u4f8b\u5316\u679a\u4e3e\u7c7b\u578b +compiler.err.enum.label.must.be.unqualified.enum=\u679a\u4e3e switch case \u6807\u7b7e\u5fc5\u987b\u4e3a\u679a\u4e3e\u5e38\u91cf\u7684\u975e\u9650\u5b9a\u540d\u79f0 +compiler.err.enum.no.subclassing=\u7c7b\u65e0\u6cd5\u76f4\u63a5\u7ee7\u627f java.lang.Enum +compiler.err.enum.types.not.extensible=\u679a\u4e3e\u7c7b\u578b\u4e0d\u53ef\u7ee7\u627f +compiler.err.enum.no.finalize=\u679a\u4e3e\u4e0d\u80fd\u6709 finalize \u65b9\u6cd5 +compiler.err.error.reading.file=\u8bfb\u53d6 {0} \u65f6\u51fa\u9519\uff1b{1} +compiler.err.except.already.caught=\u5df2\u6355\u6349\u5230\u5f02\u5e38 {0} +compiler.err.except.never.thrown.in.try=\u5728\u76f8\u5e94\u7684 try \u8bed\u53e5\u4e3b\u4f53\u4e2d\u4e0d\u80fd\u629b\u51fa\u5f02\u5e38 {0} -compiler.err.final.parameter.may.not.be.assigned=\ -\u4e0d\u80fd\u6307\u5b9a\u6700\u7ec8\u53c2\u6570 {0} -compiler.err.finally.without.try=\ -"finally" \u4e0d\u5e26\u6709 "try" -compiler.err.foreach.not.applicable.to.type=\ -foreach \u4e0d\u9002\u7528\u4e8e\u8868\u8fbe\u5f0f\u7c7b\u578b -compiler.err.fp.number.too.large=\ -\u6d6e\u70b9\u6570\u8fc7\u5927 -compiler.err.fp.number.too.small=\ -\u6d6e\u70b9\u6570\u8fc7\u5c0f +compiler.err.final.parameter.may.not.be.assigned=\u4e0d\u80fd\u6307\u5b9a\u6700\u7ec8\u53c2\u6570 {0} +compiler.err.finally.without.try="finally" \u4e0d\u5e26\u6709 "try" +compiler.err.foreach.not.applicable.to.type=foreach \u4e0d\u9002\u7528\u4e8e\u8868\u8fbe\u5f0f\u7c7b\u578b +compiler.err.fp.number.too.large=\u6d6e\u70b9\u6570\u8fc7\u5927 +compiler.err.fp.number.too.small=\u6d6e\u70b9\u6570\u8fc7\u5c0f -compiler.err.generic.array.creation=\ -\u521b\u5efa\u6cdb\u578b\u6570\u7ec4 -compiler.err.generic.throwable=\ -\u6cdb\u578b\u7c7b\u65e0\u6cd5\u7ee7\u627f java.lang.Throwable +compiler.err.generic.array.creation=\u521b\u5efa\u6cdb\u578b\u6570\u7ec4 +compiler.err.generic.throwable=\u6cdb\u578b\u7c7b\u65e0\u6cd5\u7ee7\u627f java.lang.Throwable -compiler.err.icls.cant.have.static.decl=\ -\u5185\u90e8\u7c7b\u4e0d\u80fd\u6709\u9759\u6001\u58f0\u660e -compiler.err.illegal.char=\ -\u975e\u6cd5\u5b57\u7b26\uff1a \\{0} -compiler.err.illegal.char.for.encoding=\ -\u7f16\u7801 {0} \u7684\u4e0d\u53ef\u6620\u5c04\u5b57\u7b26 -compiler.err.illegal.combination.of.modifiers=\ -\u975e\u6cd5\u7684\u4fee\u9970\u7b26\u7ec4\u5408\uff1a{0} \u548c {1} -compiler.err.illegal.enum.static.ref=\ -\u521d\u59cb\u5316\u7a0b\u5e8f\u4e2d\u5bf9\u9759\u6001\u5b57\u6bb5\u7684\u5f15\u7528\u4e0d\u5408\u6cd5 -compiler.err.illegal.esc.char=\ -\u975e\u6cd5\u8f6c\u4e49\u5b57\u7b26 -compiler.err.illegal.forward.ref=\ -\u975e\u6cd5\u5411\u524d\u5f15\u7528 -compiler.warn.forward.ref=\ - \u5148\u5f15\u7528\u53d8\u91cf''{0}''\uff0c\u7136\u540e\u518d\u5bf9\u5176\u521d\u59cb\u5316 -compiler.err.illegal.generic.type.for.instof=\ -instanceof \u7684\u6cdb\u578b\u7c7b\u578b\u4e0d\u5408\u6cd5 -compiler.err.illegal.initializer.for.type=\ -{0} \u7684\u521d\u59cb\u5316\u7a0b\u5e8f\u4e0d\u5408\u6cd5 -compiler.err.illegal.line.end.in.char.lit=\ -\u5b57\u7b26\u5b57\u9762\u503c\u7684\u884c\u7ed3\u5c3e\u4e0d\u5408\u6cd5 -compiler.err.illegal.nonascii.digit=\ -\u975e\u6cd5\u7684\u975e ASCII \u6570\u5b57 -compiler.err.illegal.qual.not.icls=\ -\u975e\u6cd5\u9650\u5b9a\u7b26\uff1b{0} \u4e0d\u662f\u5185\u90e8\u7c7b -compiler.err.illegal.start.of.expr=\ -\u975e\u6cd5\u7684\u8868\u8fbe\u5f0f\u5f00\u59cb -compiler.err.illegal.start.of.type=\ -\u975e\u6cd5\u7684\u7c7b\u578b\u5f00\u59cb -compiler.err.illegal.unicode.esc=\ -\u975e\u6cd5\u7684 Unicode \u8f6c\u4e49 -compiler.err.import.requires.canonical=\ -\u5bfc\u5165\u9700\u8981 {0} \u7684\u89c4\u8303\u540d\u79f0 -compiler.err.improperly.formed.type.param.missing=\ -\u7c7b\u578b\u7684\u683c\u5f0f\u4e0d\u6b63\u786e\uff0c\u7f3a\u5c11\u67d0\u4e9b\u53c2\u6570 -compiler.err.improperly.formed.type.inner.raw.param=\ -\u7c7b\u578b\u7684\u683c\u5f0f\u4e0d\u6b63\u786e\uff0c\u7ed9\u51fa\u4e86\u666e\u901a\u7c7b\u578b\u7684\u7c7b\u578b\u53c2\u6570 -compiler.err.incomparable.types=\ -\u4e0d\u53ef\u6bd4\u8f83\u7684\u7c7b\u578b\uff1a{0} \u548c {1} -compiler.err.int.number.too.large=\ -\u8fc7\u5927\u7684\u6574\u6570\uff1a {0} -compiler.err.internal.error.cant.instantiate=\ -\u5185\u90e8\u9519\u8bef\uff1b\u65e0\u6cd5\u5c06\u4f4d\u4e8e {1} \u7684 {0} \u5b9e\u4f8b\u5316\u4e3a ({2}) -compiler.err.intf.annotation.members.cant.have.params=\ -@interface \u6210\u5458\u4e0d\u80fd\u5e26\u6709\u53c2\u6570 -compiler.err.intf.annotation.cant.have.type.params=\ -@interface \u4e0d\u80fd\u5e26\u6709\u7c7b\u578b\u53c2\u6570 -compiler.err.intf.annotation.members.cant.have.type.params=\ -@interface \u6210\u5458\u4e0d\u80fd\u5e26\u6709\u7c7b\u578b\u53c2\u6570 -compiler.err.intf.annotation.member.clash=\ - @interface \u6210\u5458\u4e0e {1} \u4e2d\u7684\u65b9\u6cd5''{0}''\u51b2\u7a81 -compiler.err.intf.expected.here=\ -\u6b64\u5904\u9700\u8981\u63a5\u53e3 -compiler.err.intf.meth.cant.have.body=\ -\u63a5\u53e3\u65b9\u6cd5\u4e0d\u80fd\u5e26\u6709\u4e3b\u4f53 -compiler.err.invalid.annotation.member.type=\ -\u6ce8\u91ca\u6210\u5458\u7684\u7c7b\u578b\u65e0\u6548 -compiler.err.invalid.hex.number=\ -\u5341\u516d\u8fdb\u5236\u6570\u5b57\u5fc5\u987b\u5305\u542b\u81f3\u5c11\u4e00\u4f4d\u5341\u516d\u8fdb\u5236\u6570 -compiler.err.invalid.meth.decl.ret.type.req=\ -\u65b9\u6cd5\u58f0\u660e\u65e0\u6548\uff1b\u9700\u8981\u8fd4\u56de\u7c7b\u578b +compiler.err.icls.cant.have.static.decl=\u5185\u90e8\u7c7b\u4e0d\u80fd\u6709\u9759\u6001\u58f0\u660e +compiler.err.illegal.bytecode.ident.char=\u975e\u6cd5\u5b57\u8282\u7801\u6807\u8bc6\u7b26\u5b57\u7b26\uff1a\\{0} +compiler.err.illegal.char=\u975e\u6cd5\u5b57\u7b26\uff1a \\{0} +compiler.err.illegal.char.for.encoding=\u7f16\u7801 {0} \u7684\u4e0d\u53ef\u6620\u5c04\u5b57\u7b26 +compiler.err.illegal.combination.of.modifiers=\u975e\u6cd5\u7684\u4fee\u9970\u7b26\u7ec4\u5408\uff1a{0} \u548c {1} +compiler.err.illegal.enum.static.ref=\u521d\u59cb\u5316\u7a0b\u5e8f\u4e2d\u5bf9\u9759\u6001\u5b57\u6bb5\u7684\u5f15\u7528\u4e0d\u5408\u6cd5 +compiler.err.illegal.esc.char=\u975e\u6cd5\u8f6c\u4e49\u5b57\u7b26 +compiler.err.illegal.forward.ref=\u975e\u6cd5\u5411\u524d\u5f15\u7528 +compiler.warn.forward.ref=\u5728\u53d8\u91cf\u3000''{0}'' \u521d\u59cb\u5316\u4e4b\u524d\u5bf9\u5176\u5f15\u7528 +compiler.err.illegal.self.ref=\u521d\u59cb\u5316\u7a0b\u5e8f\u4e2d\u81ea\u6211\u5f15\u7528 +compiler.warn.self.ref=\u5728\u53d8\u91cf\u3000''{0}''\u3000\u7684\u521d\u59cb\u5316\u7a0b\u5e8f\u4e2d\u81ea\u6211\u5f15\u7528 +compiler.err.illegal.generic.type.for.instof=instanceof \u7684\u6cdb\u578b\u7c7b\u578b\u4e0d\u5408\u6cd5 +compiler.err.illegal.initializer.for.type={0} \u7684\u521d\u59cb\u5316\u7a0b\u5e8f\u4e0d\u5408\u6cd5 +compiler.err.illegal.line.end.in.char.lit=\u5b57\u7b26\u5b57\u9762\u503c\u7684\u884c\u7ed3\u5c3e\u4e0d\u5408\u6cd5 +compiler.err.illegal.nonascii.digit=\u975e\u6cd5\u7684\u975e ASCII \u6570\u5b57 +compiler.err.illegal.underscore=\u975e\u6cd5\u4e0b\u5212\u7ebf +compiler.err.illegal.qual.not.icls=\u975e\u6cd5\u9650\u5b9a\u7b26\uff1b{0} \u4e0d\u662f\u5185\u90e8\u7c7b +compiler.err.illegal.start.of.expr=\u975e\u6cd5\u7684\u8868\u8fbe\u5f0f\u5f00\u59cb +compiler.err.illegal.start.of.type=\u975e\u6cd5\u7684\u7c7b\u578b\u5f00\u59cb +compiler.err.illegal.unicode.esc=\u975e\u6cd5\u7684 Unicode \u8f6c\u4e49 +compiler.err.import.requires.canonical=\u5bfc\u5165\u9700\u8981 {0} \u7684\u89c4\u8303\u540d\u79f0 +compiler.err.improperly.formed.type.param.missing=\u7c7b\u578b\u7684\u683c\u5f0f\u4e0d\u6b63\u786e\uff0c\u7f3a\u5c11\u67d0\u4e9b\u53c2\u6570 +compiler.err.improperly.formed.type.inner.raw.param=\u7c7b\u578b\u7684\u683c\u5f0f\u4e0d\u6b63\u786e\uff0c\u7ed9\u51fa\u4e86\u666e\u901a\u7c7b\u578b\u7684\u7c7b\u578b\u53c2\u6570 +compiler.err.incomparable.types=\u4e0d\u53ef\u6bd4\u8f83\u7684\u7c7b\u578b\uff1a{0} \u548c {1} +compiler.err.int.number.too.large=\u8fc7\u5927\u7684\u6574\u6570\uff1a {0} +compiler.err.internal.error.cant.instantiate=\u5185\u90e8\u9519\u8bef\uff1b\u65e0\u6cd5\u5c06\u4f4d\u4e8e {1} \u7684 {0} \u5b9e\u4f8b\u5316\u4e3a ({2}) +compiler.err.intf.annotation.members.cant.have.params=@interface \u6210\u5458\u4e0d\u80fd\u5e26\u6709\u53c2\u6570 +compiler.err.intf.annotation.cant.have.type.params=@interface \u4e0d\u80fd\u5e26\u6709\u7c7b\u578b\u53c2\u6570 +compiler.err.intf.annotation.members.cant.have.type.params=@interface \u6210\u5458\u4e0d\u80fd\u5e26\u6709\u7c7b\u578b\u53c2\u6570 +compiler.err.intf.annotation.member.clash=@interface \u6210\u5458\u4e0e {1} \u4e2d\u7684\u65b9\u6cd5''{0}''\u51b2\u7a81 +compiler.err.intf.expected.here=\u6b64\u5904\u9700\u8981\u63a5\u53e3 +compiler.err.intf.meth.cant.have.body=\u63a5\u53e3\u65b9\u6cd5\u4e0d\u80fd\u5e26\u6709\u4e3b\u4f53 +compiler.err.invalid.annotation.member.type=\u6ce8\u91ca\u6210\u5458\u7684\u7c7b\u578b\u65e0\u6548 +compiler.err.invalid.binary.number=\u4e8c\u8fdb\u5236\u6570\u5b57\u5fc5\u987b\u5305\u542b\u81f3\u5c11\u4e00\u4f4d\u4e8c\u8fdb\u5236\u6570 +compiler.err.invalid.hex.number=\u5341\u516d\u8fdb\u5236\u6570\u5b57\u5fc5\u987b\u5305\u542b\u81f3\u5c11\u4e00\u4f4d\u5341\u516d\u8fdb\u5236\u6570 +compiler.err.invalid.meth.decl.ret.type.req=\u65b9\u6cd5\u58f0\u660e\u65e0\u6548\uff1b\u9700\u8981\u8fd4\u56de\u7c7b\u578b -compiler.err.label.already.in.use=\ -\u6807\u7b7e {0} \u5df2\u4f7f\u7528 -compiler.err.local.var.accessed.from.icls.needs.final=\ -\u4ece\u5185\u90e8\u7c7b\u4e2d\u8bbf\u95ee\u5c40\u90e8\u53d8\u91cf {0}\uff1b\u9700\u8981\u88ab\u58f0\u660e\u4e3a\u6700\u7ec8\u7c7b\u578b -compiler.err.local.enum=\ -\u679a\u4e3e\u7c7b\u578b\u4e0d\u80fd\u4e3a\u672c\u5730\u7c7b\u578b +compiler.err.label.already.in.use=\u6807\u7b7e {0} \u5df2\u4f7f\u7528 +compiler.err.local.var.accessed.from.icls.needs.final=\u4ece\u5185\u90e8\u7c7b\u4e2d\u8bbf\u95ee\u5c40\u90e8\u53d8\u91cf {0}\uff1b\u9700\u8981\u88ab\u58f0\u660e\u4e3a\u6700\u7ec8\u7c7b\u578b +compiler.err.local.enum=\u679a\u4e3e\u7c7b\u578b\u4e0d\u80fd\u4e3a\u672c\u5730\u7c7b\u578b +compiler.err.cannot.create.array.with.type.arguments=\u4e0d\u80fd\u4f7f\u7528\u7c7b\u578b\u53c2\u6570\u521b\u5efa\u6570\u7ec4 # # limits. We don't give the limits in the diagnostic because we expect # them to change, yet we want to use the same diagnostic. These are all # detected during code generation. # -compiler.err.limit.code=\ -\u4ee3\u7801\u8fc7\u957f -compiler.err.limit.code.too.large.for.try.stmt=\ -try \u8bed\u53e5\u7684\u4ee3\u7801\u8fc7\u957f -compiler.err.limit.dimensions=\ -\u6570\u7ec4\u7c7b\u578b\u7ef4\u6570\u8fc7\u591a -compiler.err.limit.locals=\ -\u5c40\u90e8\u53d8\u91cf\u8fc7\u591a -compiler.err.limit.parameters=\ -\u53c2\u6570\u8fc7\u591a -compiler.err.limit.pool=\ -\u5e38\u91cf\u8fc7\u591a -compiler.err.limit.pool.in.class=\ -\u7c7b {0} \u4e2d\u7684\u5e38\u91cf\u8fc7\u591a -compiler.err.limit.stack=\ -\u4ee3\u7801\u9700\u8981\u8fc7\u591a\u5806\u6808 -compiler.err.limit.string=\ -\u5e38\u91cf\u5b57\u7b26\u4e32\u8fc7\u957f -compiler.err.limit.string.overflow=\ -\u5bf9\u4e8e\u5e38\u91cf\u6c60\u6765\u8bf4\uff0c\u5b57\u7b26\u4e32 \"{0}...\" \u7684 UTF8 \u8868\u793a\u8fc7\u957f +compiler.err.limit.code=\u4ee3\u7801\u8fc7\u957f +compiler.err.limit.code.too.large.for.try.stmt=try \u8bed\u53e5\u7684\u4ee3\u7801\u8fc7\u957f +compiler.err.limit.dimensions=\u6570\u7ec4\u7c7b\u578b\u7ef4\u6570\u8fc7\u591a +compiler.err.limit.locals=\u5c40\u90e8\u53d8\u91cf\u8fc7\u591a +compiler.err.limit.parameters=\u53c2\u6570\u8fc7\u591a +compiler.err.limit.pool=\u5e38\u91cf\u8fc7\u591a +compiler.err.limit.pool.in.class=\u7c7b {0} \u4e2d\u7684\u5e38\u91cf\u8fc7\u591a +compiler.err.limit.stack=\u4ee3\u7801\u9700\u8981\u8fc7\u591a\u5806\u6808 +compiler.err.limit.string=\u5e38\u91cf\u5b57\u7b26\u4e32\u8fc7\u957f +compiler.err.limit.string.overflow=\u5bf9\u4e8e\u5e38\u91cf\u6c60\u6765\u8bf4\uff0c\u5b57\u7b26\u4e32 \"{0}...\" \u7684 UTF8 \u8868\u793a\u8fc7\u957f -compiler.err.malformed.fp.lit=\ -\u6d6e\u70b9\u5b57\u9762\u503c\u4e0d\u89c4\u5219 -compiler.err.method.does.not.override.superclass=\ - \u65b9\u6cd5\u4e0d\u4f1a\u8986\u76d6\u6216\u5b9e\u73b0\u8d85\u7c7b\u578b\u7684\u65b9\u6cd5 -compiler.err.missing.meth.body.or.decl.abstract=\ -\u7f3a\u5c11\u65b9\u6cd5\u4e3b\u4f53\uff0c\u6216\u58f0\u660e\u62bd\u8c61 -compiler.err.missing.ret.stmt=\ -\u7f3a\u5c11\u8fd4\u56de\u8bed\u53e5 -compiler.err.missing.ret.val=\ -\u7f3a\u5c11\u8fd4\u56de\u503c -compiler.err.mod.not.allowed.here=\ -\u6b64\u5904\u4e0d\u5141\u8bb8\u4f7f\u7528\u4fee\u9970\u7b26 {0} -compiler.err.intf.not.allowed.here=\ -\u6b64\u5904\u4e0d\u5141\u8bb8\u4f7f\u7528\u63a5\u53e3 -compiler.err.enums.must.be.static=\ -\u53ea\u6709\u5728\u9759\u6001\u4e0a\u4e0b\u6587\u4e2d\u624d\u5141\u8bb8\u4f7f\u7528\u679a\u4e3e\u58f0\u660e +compiler.err.malformed.fp.lit=\u6d6e\u70b9\u5b57\u9762\u503c\u4e0d\u89c4\u5219 +compiler.err.method.does.not.override.superclass=\u65b9\u6cd5\u4e0d\u4f1a\u8986\u76d6\u6216\u5b9e\u73b0\u8d85\u7c7b\u578b\u7684\u65b9\u6cd5 +compiler.err.missing.meth.body.or.decl.abstract=\u7f3a\u5c11\u65b9\u6cd5\u4e3b\u4f53\uff0c\u6216\u58f0\u660e\u62bd\u8c61 +compiler.err.missing.ret.stmt=\u7f3a\u5c11\u8fd4\u56de\u8bed\u53e5 +compiler.err.missing.ret.val=\u7f3a\u5c11\u8fd4\u56de\u503c +compiler.err.mod.not.allowed.here=\u6b64\u5904\u4e0d\u5141\u8bb8\u4f7f\u7528\u4fee\u9970\u7b26 {0} +compiler.err.intf.not.allowed.here=\u6b64\u5904\u4e0d\u5141\u8bb8\u4f7f\u7528\u63a5\u53e3 +compiler.err.enums.must.be.static=\u53ea\u6709\u5728\u9759\u6001\u4e0a\u4e0b\u6587\u4e2d\u624d\u5141\u8bb8\u4f7f\u7528\u679a\u4e3e\u58f0\u660e -compiler.err.name.clash.same.erasure=\ -\u540d\u79f0\u51b2\u7a81\uff1a{0} \u548c {1} \u5177\u6709\u76f8\u540c\u7591\u7b26 -compiler.err.name.clash.same.erasure.no.override=\ -\u540d\u79f0\u51b2\u7a81\uff1a{1} \u4e2d\u7684 {0} \u548c {3} \u4e2d\u7684 {2} \u5177\u6709\u76f8\u540c\u7591\u7b26\uff0c\u4f46\u4e24\u8005\u5747\u4e0d\u8986\u76d6\u5bf9\u65b9 -compiler.err.name.reserved.for.internal.use=\ -{0} \u4e3a\u5185\u90e8\u4f7f\u7528\u4fdd\u7559 -compiler.err.native.meth.cant.have.body=\ -\u672c\u673a\u65b9\u6cd5\u4e0d\u80fd\u5e26\u6709\u4e3b\u4f53 -compiler.err.neither.conditional.subtype=\ -? \u7684\u4e0d\u517c\u5bb9\u7c7b\u578b\uff1a\u4e24\u8005\u90fd\u4e0d\u662f\u5bf9\u65b9\u7684\u5b50\u7c7b\u578b\n\ -\u7b2c\u4e8c\u4e2a\u64cd\u4f5c\u6570\uff1a {0}\n\ -\u7b2c\u4e09\u4e2a\u64cd\u4f5c\u6570\uff1a {1} -compiler.err.new.not.allowed.in.annotation=\ -\u6ce8\u91ca\u4e2d\u4e0d\u5141\u8bb8\u4f7f\u7528 "new" -compiler.err.no.annotation.member=\ -{1} \u4e2d\u6ca1\u6709\u6ce8\u91ca\u6210\u5458 {0} -compiler.err.no.encl.instance.of.type.in.scope=\ -\u4f5c\u7528\u57df\u4e2d\u6ca1\u6709\u7c7b\u578b\u4e3a {0} \u7684\u5c01\u95ed\u5b9e\u4f8b -compiler.err.no.intf.expected.here=\ -\u6b64\u5904\u4e0d\u9700\u8981\u63a5\u53e3 -compiler.err.no.match.entry=\ -{0} \u5728 {1} \u7684\u6761\u76ee\u4e2d\u6ca1\u6709\u5339\u914d\u9879\uff1b\u9700\u8981 {2} -compiler.err.not.annotation.type=\ -{0} \u4e0d\u662f\u6ce8\u91ca\u7c7b\u578b -compiler.err.not.def.access.class.intf.cant.access=\ -{1} \u4e2d\u7684 {0} \u662f\u5728\u4e0d\u53ef\u8bbf\u95ee\u7684\u7c7b\u6216\u63a5\u53e3\u4e2d\u5b9a\u4e49\u7684 -compiler.err.not.def.public.cant.access=\ -{0} \u5728 {1} \u4e2d\u4e0d\u662f\u516c\u5171\u7684\uff1b\u65e0\u6cd5\u4ece\u5916\u90e8\u8f6f\u4ef6\u5305\u4e2d\u5bf9\u5176\u8fdb\u884c\u8bbf\u95ee -compiler.err.not.loop.label=\ -\u4e0d\u662f loop \u6807\u7b7e\uff1a {0} -compiler.err.not.stmt=\ -\u4e0d\u662f\u8bed\u53e5 -compiler.err.not.encl.class=\ -\u4e0d\u662f\u5c01\u95ed\u7c7b\uff1a {0} +compiler.err.name.clash.same.erasure=\u540d\u79f0\u51b2\u7a81\uff1a{0} \u548c {1} \u5177\u6709\u76f8\u540c\u7591\u7b26 +compiler.err.name.clash.same.erasure.no.override=\u540d\u79f0\u51b2\u7a81\uff1a{1} \u4e2d\u7684 {0} \u548c {3} \u4e2d\u7684 {2} \u5177\u6709\u76f8\u540c\u7591\u7b26\uff0c\u4f46\u4e24\u8005\u5747\u4e0d\u8986\u76d6\u5bf9\u65b9 +compiler.err.name.reserved.for.internal.use={0} \u4e3a\u5185\u90e8\u4f7f\u7528\u4fdd\u7559 +compiler.err.native.meth.cant.have.body=\u672c\u673a\u65b9\u6cd5\u4e0d\u80fd\u5e26\u6709\u4e3b\u4f53 +compiler.err.neither.conditional.subtype=? \u7684\u4e0d\u517c\u5bb9\u7c7b\u578b\uff1a\u4e24\u8005\u90fd\u4e0d\u662f\u5bf9\u65b9\u7684\u5b50\u7c7b\u578b\n\u7b2c\u4e8c\u4e2a\u64cd\u4f5c\u6570\uff1a {0}\n\u7b2c\u4e09\u4e2a\u64cd\u4f5c\u6570\uff1a {1} +compiler.err.new.not.allowed.in.annotation=\u6ce8\u91ca\u4e2d\u4e0d\u5141\u8bb8\u4f7f\u7528 "new" +compiler.err.no.annotation.member={1} \u4e2d\u6ca1\u6709\u6ce8\u91ca\u6210\u5458 {0} +compiler.err.no.encl.instance.of.type.in.scope=\u4f5c\u7528\u57df\u4e2d\u6ca1\u6709\u7c7b\u578b\u4e3a {0} \u7684\u5c01\u95ed\u5b9e\u4f8b +compiler.err.no.intf.expected.here=\u6b64\u5904\u4e0d\u9700\u8981\u63a5\u53e3 +compiler.err.no.match.entry={0} \u5728 {1} \u7684\u6761\u76ee\u4e2d\u6ca1\u6709\u5339\u914d\u9879\uff1b\u9700\u8981 {2} +compiler.err.not.annotation.type={0} \u4e0d\u662f\u6ce8\u91ca\u7c7b\u578b +compiler.err.not.def.access.class.intf.cant.access={1} \u4e2d\u7684 {0} \u662f\u5728\u4e0d\u53ef\u8bbf\u95ee\u7684\u7c7b\u6216\u63a5\u53e3\u4e2d\u5b9a\u4e49\u7684 +compiler.err.not.def.public.cant.access={0} \u5728 {1} \u4e2d\u4e0d\u662f\u516c\u5171\u7684\uff1b\u65e0\u6cd5\u4ece\u5916\u90e8\u8f6f\u4ef6\u5305\u4e2d\u5bf9\u5176\u8fdb\u884c\u8bbf\u95ee +compiler.err.not.loop.label=\u4e0d\u662f loop \u6807\u7b7e\uff1a {0} +compiler.err.not.stmt=\u4e0d\u662f\u8bed\u53e5 +compiler.err.not.encl.class=\u4e0d\u662f\u5c01\u95ed\u7c7b\uff1a {0} -compiler.err.operator.cant.be.applied=\ -\u8fd0\u7b97\u7b26 {0} \u4e0d\u80fd\u5e94\u7528\u4e8e {1} +compiler.err.operator.cant.be.applied=\u8fd0\u7b97\u7b26 {0} \u4e0d\u80fd\u5e94\u7528\u4e8e {1} -compiler.err.pkg.annotations.sb.in.package-info.java=\ -\u8f6f\u4ef6\u5305\u6ce8\u91ca\u5e94\u5728\u6587\u4ef6 package-info.java \u4e2d -compiler.err.pkg.clashes.with.class.of.same.name=\ -\u8f6f\u4ef6\u5305 {0} \u4e0e\u5e26\u6709\u76f8\u540c\u540d\u79f0\u7684\u7c7b\u51b2\u7a81 +compiler.err.pkg.annotations.sb.in.package-info.java=\u8f6f\u4ef6\u5305\u6ce8\u91ca\u5e94\u5728\u6587\u4ef6 package-info.java \u4e2d +compiler.err.pkg.clashes.with.class.of.same.name=\u8f6f\u4ef6\u5305 {0} \u4e0e\u5e26\u6709\u76f8\u540c\u540d\u79f0\u7684\u7c7b\u51b2\u7a81 + +compiler.err.warnings.and.werror=\u53d1\u73b0\u8b66\u544a\u5e76\u4e14\u6307\u5b9a\u4e86\u3000-Werror # Errors related to annotation processing -compiler.err.proc.cant.access=\ -\u65e0\u6cd5\u8bbf\u95ee {0}\n\ -{1}\n\ -\u6709\u5173\u8be6\u7ec6\u4fe1\u606f\uff0c\u8bf7\u53c2\u9605\u4ee5\u4e0b\u5806\u6808\u8ffd\u8e2a\u3002\n\ -{2} +compiler.err.proc.cant.access=\u65e0\u6cd5\u8bbf\u95ee {0}\n{1}\n\u6709\u5173\u8be6\u7ec6\u4fe1\u606f\uff0c\u8bf7\u53c2\u9605\u4ee5\u4e0b\u5806\u6808\u8ffd\u8e2a\u3002\n{2} -compiler.err.proc.cant.find.class=\ -\u627e\u4e0d\u5230\u201c{0}\u201d\u7684\u7c7b\u6587\u4ef6\u3002 +compiler.err.proc.cant.find.class=\u627e\u4e0d\u5230\u201c{0}\u201d\u7684\u7c7b\u6587\u4ef6\u3002 # Print a client-generated error message; assumed to be localized, no translation required -compiler.err.proc.messager=\ - {0} +compiler.err.proc.messager={0} -compiler.err.proc.no.explicit.annotation.processing.requested=\ -\u4ec5\u5f53\u663e\u5f0f\u8bf7\u6c42\u6ce8\u91ca\u5904\u7406\u65f6\u624d\u63a5\u53d7\u7c7b\u540d\u79f0\u201c{0}\u201d +compiler.err.proc.no.explicit.annotation.processing.requested=\u4ec5\u5f53\u663e\u5f0f\u8bf7\u6c42\u6ce8\u91ca\u5904\u7406\u65f6\u624d\u63a5\u53d7\u7c7b\u540d\u79f0\u201c{0}\u201d -compiler.err.proc.processor.bad.option.name=\ - \u5904\u7406\u5668"{1}"\u63d0\u4f9b\u7684\u9009\u9879\u540d\u79f0"{0}"\u9519\u8bef +compiler.err.proc.no.service=\u65e0\u6cd5\u627e\u5230\u670d\u52a1\u52a0\u8f7d\u5668\u7c7b\u3002\njava.util.ServiceLoader \u6216 sun.misc.Service \u5fc5\u987b\u53ef\u7528\u3002 -compiler.err.proc.processor.cant.instantiate=\ -\u65e0\u6cd5\u5b9e\u4f8b\u5316\u5904\u7406\u7a0b\u5e8f\u201c{0}\u201d\u7684\u5b9e\u4f8b +compiler.err.proc.processor.bad.option.name=\u5904\u7406\u5668"{1}"\u63d0\u4f9b\u7684\u9009\u9879\u540d\u79f0"{0}"\u9519\u8bef -compiler.err.proc.processor.constructor.error=\ -\u6784\u9020\u5904\u7406\u7a0b\u5e8f\u5bf9\u8c61 {0} \u65f6\u629b\u51fa\u5f02\u5e38 +compiler.err.proc.processor.cant.instantiate=\u65e0\u6cd5\u5b9e\u4f8b\u5316\u5904\u7406\u7a0b\u5e8f\u201c{0}\u201d\u7684\u5b9e\u4f8b -compiler.err.proc.processor.not.found=\ -\u672a\u627e\u5230\u6ce8\u91ca\u5904\u7406\u7a0b\u5e8f\u201c{0}\u201d +compiler.err.proc.processor.constructor.error=\u6784\u9020\u5904\u7406\u7a0b\u5e8f\u5bf9\u8c61 {0} \u65f6\u629b\u51fa\u5f02\u5e38 -compiler.err.proc.processor.wrong.type=\ -\u6ce8\u91ca\u5904\u7406\u7a0b\u5e8f\u201c{0}\u201d\u672a\u5b9e\u73b0 javax.annotation.processing.Processor +compiler.err.proc.processor.not.found=\u672a\u627e\u5230\u6ce8\u91ca\u5904\u7406\u7a0b\u5e8f\u201c{0}\u201d -compiler.err.proc.bad.config.file=\ -\u670d\u52a1\u914d\u7f6e\u6587\u4ef6\u4e0d\u6b63\u786e\uff0c\u6216\u6784\u9020\u5904\u7406\u7a0b\u5e8f\u5bf9\u8c61 {0} \u65f6\u629b\u51fa\u5f02\u5e38 +compiler.err.proc.processor.wrong.type=\u6ce8\u91ca\u5904\u7406\u7a0b\u5e8f\u201c{0}\u201d\u672a\u5b9e\u73b0 javax.annotation.processing.Processor -compiler.err.proc.cant.create.loader=\ -\u65e0\u6cd5\u4e3a\u6ce8\u91ca\u5904\u7406\u7a0b\u5e8f {0} \u521b\u5efa\u7c7b\u52a0\u8f7d\u5668 +compiler.err.proc.service.problem=\u751f\u6210\u670d\u52a1\u52a0\u8f7d\u5668\u4ee5\u52a0\u8f7d\u5904\u7406\u5668\u65f6\u53d1\u751f\u9519\u8bef\u3002 -compiler.err.qualified.new.of.static.class=\ -\u9650\u5b9a\u7684\u65b0\u9759\u6001\u7c7b +compiler.err.proc.bad.config.file=\u670d\u52a1\u914d\u7f6e\u6587\u4ef6\u4e0d\u6b63\u786e\uff0c\u6216\u6784\u9020\u5904\u7406\u7a0b\u5e8f\u5bf9\u8c61 {0} \u65f6\u629b\u51fa\u5f02\u5e38 -compiler.err.recursive.ctor.invocation=\ -\u9012\u5f52\u6784\u9020\u51fd\u6570\u8c03\u7528 -compiler.err.ref.ambiguous=\ -\u5bf9 {0} \u7684\u5f15\u7528\u4e0d\u660e\u786e\uff0c{3} \u4e2d\u7684 {1} {2} \u548c {6} \u4e2d\u7684 {4} {5} \u90fd\u5339\u914d -compiler.err.repeated.annotation.target=\ -\u6ce8\u91ca\u76ee\u6807\u91cd\u590d -compiler.err.repeated.interface=\ -\u63a5\u53e3\u91cd\u590d -compiler.err.repeated.modifier=\ -\u4fee\u9970\u7b26\u91cd\u590d -compiler.err.report.access=\ -{0} \u53ef\u4ee5\u5728 {2} \u4e2d\u8bbf\u95ee {1} -compiler.err.ret.outside.meth=\ -\u8fd4\u56de\u5916\u90e8\u65b9\u6cd5 +compiler.err.proc.cant.create.loader=\u65e0\u6cd5\u4e3a\u6ce8\u91ca\u5904\u7406\u7a0b\u5e8f {0} \u521b\u5efa\u7c7b\u52a0\u8f7d\u5668 -compiler.err.signature.doesnt.match.supertype=\ -\u7b7e\u540d\u4e0e {0} \u4e0d\u5339\u914d\uff1b\u4e0d\u517c\u5bb9\u7684\u7236\u7c7b\u578b -compiler.err.signature.doesnt.match.intf=\ -\u7b7e\u540d\u4e0e {0} \u4e0d\u5339\u914d\uff1b\u4e0d\u517c\u5bb9\u7684\u63a5\u53e3 -compiler.err.does.not.override.abstract=\ -{0} \u4e0d\u662f\u62bd\u8c61\u7684\uff0c\u5e76\u4e14\u672a\u8986\u76d6 {2} \u4e2d\u7684\u62bd\u8c61\u65b9\u6cd5 {1} -compiler.err.source.cant.overwrite.input.file=\ -\u5199\u5165\u6e90\u65f6\u51fa\u9519\uff1b\u65e0\u6cd5\u8986\u5199\u8f93\u5165\u6587\u4ef6 {0} -compiler.err.stack.sim.error=\ -\u5185\u90e8\u9519\u8bef\uff1a{0} \u4e2d\u7684\u5806\u6808 sim \u9519\u8bef -compiler.err.static.imp.only.classes.and.interfaces=\ -\u4ec5\u4ece\u7c7b\u548c\u63a5\u53e3\u9759\u6001\u5bfc\u5165 -compiler.err.synthetic.name.conflict=\ -\u7b26\u53f7 {0} \u4e0e {1} \u4e2d\u7684 compiler-synthesized \u7b26\u53f7\u51b2\u7a81 +compiler.err.qualified.new.of.static.class=\u9650\u5b9a\u7684\u65b0\u9759\u6001\u7c7b -compiler.err.throws.not.allowed.in.intf.annotation=\ -@interface \u6210\u5458\u4e2d\u4e0d\u5141\u8bb8\u4f7f\u7528 throws \u5b50\u53e5 -compiler.err.try.without.catch.or.finally=\ -"try" \u4e0d\u5e26\u6709 "catch" \u6216 "finally" -compiler.err.type.doesnt.take.params=\ -\u7c7b\u578b {0} \u4e0d\u5e26\u6709\u53c2\u6570 -compiler.err.type.var.cant.be.deref=\ -\u65e0\u6cd5\u4ece\u7c7b\u578b\u53d8\u91cf\u4e2d\u8fdb\u884c\u9009\u62e9 -compiler.err.type.var.may.not.be.followed.by.other.bounds=\ -\u7c7b\u578b\u53d8\u91cf\u540e\u9762\u4e0d\u80fd\u5e26\u6709\u5176\u4ed6\u9650\u5236\u8303\u56f4 -compiler.err.type.var.more.than.once=\ -\u7c7b\u578b\u53d8\u91cf {0} \u5728 {1} \u7684\u7ed3\u679c\u7c7b\u578b\u4e2d\u591a\u6b21\u51fa\u73b0\uff1b\u5fc5\u987b\u5bf9\u5176\u8fdb\u884c\u5b9e\u4f8b\u5316 -compiler.err.type.var.more.than.once.in.result=\ -\u7c7b\u578b\u53d8\u91cf {0} \u5728 {1} \u7684\u7c7b\u578b\u4e2d\u591a\u6b21\u51fa\u73b0\uff1b\u5fc5\u987b\u5bf9\u5176\u8fdb\u884c\u5b9e\u4f8b\u5316 -compiler.err.types.incompatible.diff.ret=\ -\u7c7b\u578b {0} \u548c {1} \u4e0d\u517c\u5bb9\uff1b\u4e24\u8005\u90fd\u5b9a\u4e49\u4e86 {2}\uff0c\u4f46\u5374\u5e26\u6709\u4e0d\u76f8\u5173\u7684\u8fd4\u56de\u7c7b\u578b +compiler.err.recursive.ctor.invocation=\u9012\u5f52\u6784\u9020\u51fd\u6570\u8c03\u7528 +compiler.err.ref.ambiguous=\u5bf9 {0} \u7684\u5f15\u7528\u4e0d\u660e\u786e\uff0c{3} \u4e2d\u7684 {1} {2} \u548c {6} \u4e2d\u7684 {4} {5} \u90fd\u5339\u914d +compiler.err.repeated.annotation.target=\u6ce8\u91ca\u76ee\u6807\u91cd\u590d +compiler.err.repeated.interface=\u63a5\u53e3\u91cd\u590d +compiler.err.repeated.modifier=\u4fee\u9970\u7b26\u91cd\u590d +compiler.err.report.access={0} \u53ef\u4ee5\u5728 {2} \u4e2d\u8bbf\u95ee {1} +compiler.err.ret.outside.meth=\u8fd4\u56de\u5916\u90e8\u65b9\u6cd5 -compiler.err.unclosed.char.lit=\ -\u672a\u7ed3\u675f\u7684\u5b57\u7b26\u5b57\u9762\u503c -compiler.err.unclosed.comment=\ -\u672a\u7ed3\u675f\u7684\u6ce8\u91ca -compiler.err.unclosed.str.lit=\ -\u672a\u7ed3\u675f\u7684\u5b57\u7b26\u4e32\u5b57\u9762\u503c -compiler.err.unknown.enum.constant=\ -\u5728\u7c7b\u6587\u4ef6 {0} \u4e2d\uff1a\u672a\u77e5\u7684\u679a\u4e3e\u5e38\u91cf {1}.{2} -compiler.err.unsupported.encoding=\ -\u4e0d\u652f\u6301\u7684\u7f16\u7801\uff1a {0} -compiler.err.io.exception=\ -\u8bfb\u53d6\u6e90\u6587\u4ef6\u65f6\u51fa\u9519\uff1a {0} -compiler.err.undef.label=\ -\u672a\u5b9a\u4e49\u7684\u6807\u7b7e\uff1a {0} -compiler.err.undetermined.type=\ -\u65e0\u6cd5\u786e\u5b9a {0} \u7684\u7c7b\u578b\u53c2\u6570 -compiler.err.undetermined.type.1=\ -\u65e0\u6cd5\u786e\u5b9a {0} \u7684\u7c7b\u578b\u53c2\u6570\uff1b{1} -compiler.err.unreachable.stmt=\ -\u65e0\u6cd5\u8bbf\u95ee\u7684\u8bed\u53e5 -compiler.err.initializer.must.be.able.to.complete.normally=\ -\u521d\u59cb\u5316\u7a0b\u5e8f\u5fc5\u987b\u80fd\u591f\u6b63\u5e38\u5b8c\u6210 -compiler.err.unreported.exception.need.to.catch.or.throw=\ -\u672a\u62a5\u544a\u7684\u5f02\u5e38 {0}\uff1b\u5fc5\u987b\u5bf9\u5176\u8fdb\u884c\u6355\u6349\u6216\u58f0\u660e\u4ee5\u4fbf\u629b\u51fa -compiler.err.unreported.exception.default.constructor=\ -\u9ed8\u8ba4\u6784\u9020\u51fd\u6570\u4e2d\u672a\u62a5\u544a\u7684\u5f02\u5e38 {0} -compiler.err.unsupported.cross.fp.lit=\ -\u8be5 VM \u4e0d\u652f\u6301\u5341\u516d\u8fdb\u5236\u6d6e\u70b9\u5b57\u9762\u503c -compiler.err.void.not.allowed.here=\ -\u6b64\u5904\u4e0d\u5141\u8bb8\u4f7f\u7528 "void" \u7c7b\u578b +compiler.err.signature.doesnt.match.supertype=\u7b7e\u540d\u4e0e {0} \u4e0d\u5339\u914d\uff1b\u4e0d\u517c\u5bb9\u7684\u7236\u7c7b\u578b +compiler.err.signature.doesnt.match.intf=\u7b7e\u540d\u4e0e {0} \u4e0d\u5339\u914d\uff1b\u4e0d\u517c\u5bb9\u7684\u63a5\u53e3 +compiler.err.does.not.override.abstract={0} \u4e0d\u662f\u62bd\u8c61\u7684\uff0c\u5e76\u4e14\u672a\u8986\u76d6 {2} \u4e2d\u7684\u62bd\u8c61\u65b9\u6cd5 {1} +compiler.err.source.cant.overwrite.input.file=\u5199\u5165\u6e90\u65f6\u51fa\u9519\uff1b\u65e0\u6cd5\u8986\u5199\u8f93\u5165\u6587\u4ef6 {0} +compiler.err.stack.sim.error=\u5185\u90e8\u9519\u8bef\uff1a{0} \u4e2d\u7684\u5806\u6808 sim \u9519\u8bef +compiler.err.static.imp.only.classes.and.interfaces=\u4ec5\u4ece\u7c7b\u548c\u63a5\u53e3\u9759\u6001\u5bfc\u5165 +compiler.err.string.const.req=\u9700\u8981\u5e38\u91cf\u5b57\u7b26\u4e32\u8868\u8fbe\u5f0f +compiler.err.synthetic.name.conflict=\u7b26\u53f7 {0} \u4e0e {1} \u4e2d\u7684 compiler-synthesized \u7b26\u53f7\u51b2\u7a81 +compiler.warn.synthetic.name.conflict=\u7b26\u53f7 {0} \u4e0e {1} \u4e2d\u7684 compiler-synthesized \u7b26\u53f7\u51b2\u7a81 -compiler.err.wrong.number.type.args=\ -\u7c7b\u578b\u53d8\u91cf\u6570\u76ee\u9519\u8bef\uff1b\u9700\u8981 {0} +compiler.err.throws.not.allowed.in.intf.annotation=@interface \u6210\u5458\u4e2d\u4e0d\u5141\u8bb8\u4f7f\u7528 throws \u5b50\u53e5 +compiler.err.try.without.catch.or.finally="try" \u4e0d\u5e26\u6709 "catch" \u6216 "finally" +compiler.err.type.doesnt.take.params=\u7c7b\u578b {0} \u4e0d\u5e26\u6709\u53c2\u6570 +compiler.err.type.var.cant.be.deref=\u65e0\u6cd5\u4ece\u7c7b\u578b\u53d8\u91cf\u4e2d\u8fdb\u884c\u9009\u62e9 +compiler.err.type.var.may.not.be.followed.by.other.bounds=\u7c7b\u578b\u53d8\u91cf\u540e\u9762\u4e0d\u80fd\u5e26\u6709\u5176\u4ed6\u9650\u5236\u8303\u56f4 +compiler.err.type.var.more.than.once=\u7c7b\u578b\u53d8\u91cf {0} \u5728 {1} \u7684\u7ed3\u679c\u7c7b\u578b\u4e2d\u591a\u6b21\u51fa\u73b0\uff1b\u5fc5\u987b\u5bf9\u5176\u8fdb\u884c\u5b9e\u4f8b\u5316 +compiler.err.type.var.more.than.once.in.result=\u7c7b\u578b\u53d8\u91cf {0} \u5728 {1} \u7684\u7c7b\u578b\u4e2d\u591a\u6b21\u51fa\u73b0\uff1b\u5fc5\u987b\u5bf9\u5176\u8fdb\u884c\u5b9e\u4f8b\u5316 +compiler.err.types.incompatible.diff.ret=\u7c7b\u578b {0} \u548c {1} \u4e0d\u517c\u5bb9\uff1b\u4e24\u8005\u90fd\u5b9a\u4e49\u4e86 {2}\uff0c\u4f46\u5374\u5e26\u6709\u4e0d\u76f8\u5173\u7684\u8fd4\u56de\u7c7b\u578b -compiler.err.var.might.already.be.assigned=\ -\u53ef\u80fd\u5df2\u6307\u5b9a\u53d8\u91cf {0} -compiler.err.var.might.not.have.been.initialized=\ -\u53ef\u80fd\u5c1a\u672a\u521d\u59cb\u5316\u53d8\u91cf {0} -compiler.err.var.might.be.assigned.in.loop=\ -\u53ef\u80fd\u5728 loop \u4e2d\u6307\u5b9a\u4e86\u53d8\u91cf {0} +compiler.err.unclosed.bytecode.ident=\u672a\u7ed3\u675f\u7684\u5b57\u8282\u7801\u6807\u8bc6\u7b26 +compiler.err.unclosed.char.lit=\u672a\u7ed3\u675f\u7684\u5b57\u7b26\u5b57\u9762\u503c +compiler.err.unclosed.comment=\u672a\u7ed3\u675f\u7684\u6ce8\u91ca +compiler.err.unclosed.str.lit=\u672a\u7ed3\u675f\u7684\u5b57\u7b26\u4e32\u5b57\u9762\u503c +compiler.err.unknown.enum.constant=\u5728\u7c7b\u6587\u4ef6 {0} \u4e2d\uff1a\u672a\u77e5\u7684\u679a\u4e3e\u5e38\u91cf {1}.{2} +compiler.err.unsupported.encoding=\u4e0d\u652f\u6301\u7684\u7f16\u7801\uff1a {0} +compiler.err.io.exception=\u8bfb\u53d6\u6e90\u6587\u4ef6\u65f6\u51fa\u9519\uff1a {0} +compiler.err.undef.label=\u672a\u5b9a\u4e49\u7684\u6807\u7b7e\uff1a {0} +compiler.err.undetermined.type=\u65e0\u6cd5\u786e\u5b9a {0} \u7684\u7c7b\u578b\u53c2\u6570 +compiler.err.undetermined.type.1=\u65e0\u6cd5\u786e\u5b9a {0} \u7684\u7c7b\u578b\u53c2\u6570\uff1b{1} +compiler.err.invalid.inferred.types={0} \u7684\u63a8\u65ad\u7c7b\u578b\u65e0\u6548\uff1b{1} +compiler.err.unreachable.stmt=\u65e0\u6cd5\u8bbf\u95ee\u7684\u8bed\u53e5 +compiler.err.initializer.must.be.able.to.complete.normally=\u521d\u59cb\u5316\u7a0b\u5e8f\u5fc5\u987b\u80fd\u591f\u6b63\u5e38\u5b8c\u6210 +compiler.err.unreported.exception.need.to.catch.or.throw=\u672a\u62a5\u544a\u7684\u5f02\u5e38 {0}\uff1b\u5fc5\u987b\u5bf9\u5176\u8fdb\u884c\u6355\u6349\u6216\u58f0\u660e\u4ee5\u4fbf\u629b\u51fa +compiler.err.unreported.exception.default.constructor=\u9ed8\u8ba4\u6784\u9020\u51fd\u6570\u4e2d\u672a\u62a5\u544a\u7684\u5f02\u5e38 {0} +compiler.err.unsupported.cross.fp.lit=\u8be5 VM \u4e0d\u652f\u6301\u5341\u516d\u8fdb\u5236\u6d6e\u70b9\u5b57\u9762\u503c +compiler.err.void.not.allowed.here=\u6b64\u5904\u4e0d\u5141\u8bb8\u4f7f\u7528 "void" \u7c7b\u578b + +compiler.err.wrong.number.type.args=\u7c7b\u578b\u53d8\u91cf\u6570\u76ee\u9519\u8bef\uff1b\u9700\u8981 {0} + +compiler.err.var.might.already.be.assigned=\u53ef\u80fd\u5df2\u6307\u5b9a\u53d8\u91cf {0} +compiler.err.var.might.not.have.been.initialized=\u53ef\u80fd\u5c1a\u672a\u521d\u59cb\u5316\u53d8\u91cf {0} +compiler.err.var.might.be.assigned.in.loop=\u53ef\u80fd\u5728 loop \u4e2d\u6307\u5b9a\u4e86\u53d8\u91cf {0} # In the following string, {1} will always be the detail message from # java.io.IOException. -compiler.err.class.cant.write=\ -\u5199\u5165 {0} \u65f6\u51fa\u9519\uff1a {1} +compiler.err.class.cant.write=\u5199\u5165 {0} \u65f6\u51fa\u9519\uff1a {1} # In the following string, {0} is the name of the class in the Java source. # It really should be used two times.. -compiler.err.class.public.should.be.in.file=\ -\u7c7b {0} \u662f\u516c\u5171\u7684\uff0c\u5e94\u5728\u540d\u4e3a {0}.java \u7684\u6587\u4ef6\u4e2d\u58f0\u660e +compiler.err.class.public.should.be.in.file=\u7c7b {0} \u662f\u516c\u5171\u7684\uff0c\u5e94\u5728\u540d\u4e3a {0}.java \u7684\u6587\u4ef6\u4e2d\u58f0\u660e ## All errors which do not refer to a particular line in the source code are ## preceded by this string. -compiler.err.error=\ -\u9519\u8bef\uff1a +compiler.err.error=\u9519\u8bef\uff1a # The following error messages do not refer to a line in the source code. -compiler.err.cant.read.file=\ -\u65e0\u6cd5\u8bfb\u53d6\uff1a {0} +compiler.err.cant.read.file=\u65e0\u6cd5\u8bfb\u53d6\uff1a {0} ##### # Fatal Errors -compiler.misc.fatal.err.no.java.lang=\ -\u81f4\u547d\u9519\u8bef\uff1a\u5728\u7c7b\u8def\u5f84\u6216\u5f15\u5bfc\u7c7b\u8def\u5f84\u4e2d\u627e\u4e0d\u5230\u8f6f\u4ef6\u5305 java.lang -compiler.misc.fatal.err.cant.locate.meth=\ -\u81f4\u547d\u9519\u8bef\uff1a\u627e\u4e0d\u5230\u65b9\u6cd5 {0} -compiler.misc.fatal.err.cant.locate.field=\ -\u81f4\u547d\u9519\u8bef\uff1a\u627e\u4e0d\u5230\u5b57\u6bb5 {0} -compiler.misc.fatal.err.cant.locate.ctor=\ -\u81f4\u547d\u9519\u8bef\uff1a\u627e\u4e0d\u5230 {0} \u7684\u6784\u9020\u51fd\u6570 +compiler.misc.fatal.err.no.java.lang=\u81f4\u547d\u9519\u8bef\uff1a\u5728\u7c7b\u8def\u5f84\u6216\u5f15\u5bfc\u7c7b\u8def\u5f84\u4e2d\u627e\u4e0d\u5230\u8f6f\u4ef6\u5305 java.lang +compiler.misc.fatal.err.cant.locate.meth=\u81f4\u547d\u9519\u8bef\uff1a\u627e\u4e0d\u5230\u65b9\u6cd5 {0} +compiler.misc.fatal.err.cant.locate.field=\u81f4\u547d\u9519\u8bef\uff1a\u627e\u4e0d\u5230\u5b57\u6bb5 {0} +compiler.misc.fatal.err.cant.locate.ctor=\u81f4\u547d\u9519\u8bef\uff1a\u627e\u4e0d\u5230 {0} \u7684\u6784\u9020\u51fd\u6570 ##### @@ -503,107 +312,81 @@ compiler.misc.fatal.err.cant.locate.ctor=\ ## miscellaneous strings ## -compiler.misc.source.unavailable=\ -\uff08\u6e90\u4e0d\u53ef\u7528\uff09 -compiler.misc.base.membership=\ -\u60a8\u7684\u6240\u6709\u57fa\u7c7b\u90fd\u5c5e\u4e8e\u6211\u4eec -compiler.misc.x.print.processor.info=\ - \u5904\u7406\u7a0b\u5e8f {0} \u4e0e {1} \u5339\u914d\u5e76\u8fd4\u56de {2}\u3002 -compiler.misc.x.print.rounds=\ - \u5faa\u73af {0}:\n\t\u8f93\u5165\u6587\u4ef6: {1}\n\t\u6ce8\u91ca: {2}\n\t\u6700\u540e\u4e00\u4e2a\u5faa\u73af: {3} +compiler.misc.source.unavailable=\uff08\u6e90\u4e0d\u53ef\u7528\uff09 +compiler.misc.base.membership=\u60a8\u7684\u6240\u6709\u57fa\u7c7b\u90fd\u5c5e\u4e8e\u6211\u4eec +compiler.misc.x.print.processor.info=\u5904\u7406\u7a0b\u5e8f {0} \u4e0e {1} \u5339\u914d\u5e76\u8fd4\u56de {2}\u3002 +compiler.misc.x.print.rounds=\u5faa\u73af {0}:\n\t\u8f93\u5165\u6587\u4ef6: {1}\n\t\u6ce8\u91ca: {2}\n\t\u6700\u540e\u4e00\u4e2a\u5faa\u73af: {3} ##### ## The following string will appear before all messages keyed as: ## "compiler.note". -compiler.note.note=\ -\u6ce8\u610f\uff1a +compiler.note.note=\u6ce8\u610f\uff1a -compiler.note.deprecated.filename=\ -{0} \u4f7f\u7528\u6216\u8986\u76d6\u4e86\u5df2\u8fc7\u65f6\u7684 API\u3002 -compiler.note.deprecated.plural=\ -\u67d0\u4e9b\u8f93\u5165\u6587\u4ef6\u4f7f\u7528\u6216\u8986\u76d6\u4e86\u5df2\u8fc7\u65f6\u7684 API\u3002 +compiler.note.deprecated.filename={0} \u4f7f\u7528\u6216\u8986\u76d6\u4e86\u5df2\u8fc7\u65f6\u7684 API\u3002 +compiler.note.deprecated.plural=\u67d0\u4e9b\u8f93\u5165\u6587\u4ef6\u4f7f\u7528\u6216\u8986\u76d6\u4e86\u5df2\u8fc7\u65f6\u7684 API\u3002 # The following string may appear after one of the above deprecation # messages. -compiler.note.deprecated.recompile=\ -\u8981\u4e86\u89e3\u8be6\u7ec6\u4fe1\u606f\uff0c\u8bf7\u4f7f\u7528 -Xlint:deprecation \u91cd\u65b0\u7f16\u8bd1\u3002 +compiler.note.deprecated.recompile=\u8981\u4e86\u89e3\u8be6\u7ec6\u4fe1\u606f\uff0c\u8bf7\u4f7f\u7528 -Xlint:deprecation \u91cd\u65b0\u7f16\u8bd1\u3002 -compiler.note.deprecated.filename.additional=\ -{0} \u8fd8\u4f7f\u7528\u6216\u8986\u76d6\u4e86\u5df2\u8fc7\u65f6\u7684 API\u3002 -compiler.note.deprecated.plural.additional=\ -\u67d0\u4e9b\u8f93\u5165\u6587\u4ef6\u8fd8\u4f7f\u7528\u6216\u8986\u76d6\u4e86\u5df2\u8fc7\u65f6\u7684 API\u3002 +compiler.note.deprecated.filename.additional={0} \u8fd8\u4f7f\u7528\u6216\u8986\u76d6\u4e86\u5df2\u8fc7\u65f6\u7684 API\u3002 +compiler.note.deprecated.plural.additional=\u67d0\u4e9b\u8f93\u5165\u6587\u4ef6\u8fd8\u4f7f\u7528\u6216\u8986\u76d6\u4e86\u5df2\u8fc7\u65f6\u7684 API\u3002 + +compiler.note.unchecked.filename={0} \u4f7f\u7528\u4e86\u672a\u7ecf\u68c0\u67e5\u6216\u4e0d\u5b89\u5168\u7684\u64cd\u4f5c\u3002 +compiler.note.unchecked.plural=\u67d0\u4e9b\u8f93\u5165\u6587\u4ef6\u4f7f\u7528\u4e86\u672a\u7ecf\u68c0\u67e5\u6216\u4e0d\u5b89\u5168\u7684\u64cd\u4f5c\u3002 +# The following string may appear after one of the above deprecation +# messages. +compiler.note.unchecked.recompile=\u8981\u4e86\u89e3\u8be6\u7ec6\u4fe1\u606f\uff0c\u8bf7\u4f7f\u7528 -Xlint:unchecked \u91cd\u65b0\u7f16\u8bd1\u3002 + +compiler.note.unchecked.filename.additional={0} \u8fd8\u6709\u672a\u7ecf\u68c0\u67e5\u6216\u4e0d\u5b89\u5168\u7684\u64cd\u4f5c\u3002 +compiler.note.unchecked.plural.additional=\u67d0\u4e9b\u8f93\u5165\u6587\u4ef6\u8fd8\u4f7f\u7528\u4e86\u672a\u7ecf\u68c0\u67e5\u6216\u4e0d\u5b89\u5168\u7684\u64cd\u4f5c\u3002 + +compiler.note.sunapi.filename={0} \u4f7f\u7528\u4e86\u5c06\u6765\u7248\u672c\u4e2d\u53ef\u80fd\u79fb\u9664\u7684 Sun \u4e13\u6709 API\u3002 +compiler.note.sunapi.plural=\u67d0\u4e9b\u8f93\u5165\u6587\u4ef6\u4f7f\u7528\u4e86\u5c06\u6765\u7248\u672c\u4e2d\u53ef\u80fd\u79fb\u9664\u7684 Sun \u4e13\u6709 API\u3002 +# The following string may appear after one of the above sunapi messages. +compiler.note.sunapi.recompile=\u8981\u4e86\u89e3\u8be6\u7ec6\u4fe1\u606f\uff0c\u8bf7\u4f7f\u7528 -Xlint:sunapi \u91cd\u65b0\u7f16\u8bd1\u3002 + +compiler.note.sunapi.filename.additional={0} \u4f7f\u7528\u4e86\u5c06\u6765\u7248\u672c\u4e2d\u53ef\u80fd\u79fb\u9664\u7684\u9644\u52a0 Sun \u4e13\u6709 API\u3002 +compiler.note.sunapi.plural.additional=\u67d0\u4e9b\u8f93\u5165\u6587\u4ef6\u989d\u5916\u4f7f\u7528\u4e86\u5c06\u6765\u7248\u672c\u4e2d\u53ef\u80fd\u79fb\u9664\u7684 Sun \u4e13\u6709 API\u3002 # Notes related to annotation processing # Print a client-generated note; assumed to be localized, no translation required -compiler.note.proc.messager=\ - {0} - -compiler.note.unchecked.filename=\ -{0} \u4f7f\u7528\u4e86\u672a\u7ecf\u68c0\u67e5\u6216\u4e0d\u5b89\u5168\u7684\u64cd\u4f5c\u3002 -compiler.note.unchecked.plural=\ -\u67d0\u4e9b\u8f93\u5165\u6587\u4ef6\u4f7f\u7528\u4e86\u672a\u7ecf\u68c0\u67e5\u6216\u4e0d\u5b89\u5168\u7684\u64cd\u4f5c\u3002 -# The following string may appear after one of the above deprecation -# messages. -compiler.note.unchecked.recompile=\ -\u8981\u4e86\u89e3\u8be6\u7ec6\u4fe1\u606f\uff0c\u8bf7\u4f7f\u7528 -Xlint:unchecked \u91cd\u65b0\u7f16\u8bd1\u3002 - -compiler.note.unchecked.filename.additional=\ -{0} \u8fd8\u6709\u672a\u7ecf\u68c0\u67e5\u6216\u4e0d\u5b89\u5168\u7684\u64cd\u4f5c\u3002 -compiler.note.unchecked.plural.additional=\ -\u67d0\u4e9b\u8f93\u5165\u6587\u4ef6\u8fd8\u4f7f\u7528\u4e86\u672a\u7ecf\u68c0\u67e5\u6216\u4e0d\u5b89\u5168\u7684\u64cd\u4f5c\u3002 +compiler.note.proc.messager={0} ##### -compiler.misc.count.error=\ -{0} \u9519\u8bef -compiler.misc.count.error.plural=\ -{0} \u9519\u8bef -compiler.misc.count.warn=\ -{0} \u8b66\u544a -compiler.misc.count.warn.plural=\ -{0} \u8b66\u544a +compiler.misc.count.error={0} \u9519\u8bef +compiler.misc.count.error.plural={0} \u9519\u8bef +compiler.misc.count.warn={0} \u8b66\u544a +compiler.misc.count.warn.plural={0} \u8b66\u544a ## extra output when using -verbose (JavaCompiler) -compiler.misc.verbose.checking.attribution=\ -[\u6b63\u5728\u68c0\u67e5 {0}] -compiler.misc.verbose.parsing.done=\ -[\u89e3\u6790\u5df2\u5b8c\u6210\u65f6\u95f4 {0}ms] -compiler.misc.verbose.parsing.started=\ -[\u89e3\u6790\u5f00\u59cb\u65f6\u95f4 {0}] -compiler.misc.verbose.total=\ -[\u603b\u65f6\u95f4 {0}ms] -compiler.misc.verbose.wrote.file=\ -[\u5df2\u5199\u5165 {0}] +compiler.misc.verbose.checking.attribution=[\u6b63\u5728\u68c0\u67e5 {0}] +compiler.misc.verbose.parsing.done=[\u89e3\u6790\u5df2\u5b8c\u6210\u65f6\u95f4 {0}ms] +compiler.misc.verbose.parsing.started=[\u89e3\u6790\u5f00\u59cb\u65f6\u95f4 {0}] +compiler.misc.verbose.total=[\u603b\u65f6\u95f4 {0}ms] +compiler.misc.verbose.wrote.file=[\u5df2\u5199\u5165 {0}] ## extra output when using -verbose (Retro) -compiler.misc.verbose.retro=\ -[\u6b63\u5728\u66f4\u65b0 {0}] -compiler.misc.verbose.retro.with=\ -\u6b63\u5728\u4f7f\u7528 {1} \u66f4\u65b0 {0} -compiler.misc.verbose.retro.with.list=\ -\u6b63\u5728\u4f7f\u7528\u7c7b\u578b\u53c2\u6570 {1}\u3001\u7236\u7c7b\u578b {2} \u548c\u63a5\u53e3 {3} \u66f4\u65b0 {0} +compiler.misc.verbose.retro=[\u6b63\u5728\u66f4\u65b0 {0}] +compiler.misc.verbose.retro.with=\u6b63\u5728\u4f7f\u7528 {1} \u66f4\u65b0 {0} +compiler.misc.verbose.retro.with.list=\u6b63\u5728\u4f7f\u7528\u7c7b\u578b\u53c2\u6570 {1}\u3001\u7236\u7c7b\u578b {2} \u548c\u63a5\u53e3 {3} \u66f4\u65b0 {0} ## extra output when using -verbose (code/ClassReader) -compiler.misc.verbose.loading=\ -[\u6b63\u5728\u88c5\u5165 {0}] +compiler.misc.verbose.loading=[\u6b63\u5728\u88c5\u5165 {0}] -compiler.misc.verbose.sourcepath=\ -[\u6e90\u6587\u4ef6\u7684\u641c\u7d22\u8def\u5f84\uff1a {0}] +compiler.misc.verbose.sourcepath=[\u6e90\u6587\u4ef6\u7684\u641c\u7d22\u8def\u5f84\uff1a {0}] -compiler.misc.verbose.classpath=\ -[\u7c7b\u6587\u4ef6\u7684\u641c\u7d22\u8def\u5f84\uff1a {0}] +compiler.misc.verbose.classpath=[\u7c7b\u6587\u4ef6\u7684\u641c\u7d22\u8def\u5f84\uff1a {0}] ## extra output when using -checkclassfile (code/ClassReader) -compiler.misc.ccf.found.later.version=\ -\u7c7b\u6587\u4ef6\u7684\u7248\u672c\u9ad8\u4e8e\u9884\u671f\uff1a {0} -compiler.misc.ccf.unrecognized.attribute=\ -\u65e0\u6cd5\u8bc6\u522b\u7684\u5c5e\u6027\uff1a {0} +compiler.misc.ccf.found.later.version=\u7c7b\u6587\u4ef6\u7684\u7248\u672c\u9ad8\u4e8e\u9884\u671f\uff1a {0} +compiler.misc.ccf.unrecognized.attribute=\u65e0\u6cd5\u8bc6\u522b\u7684\u5c5e\u6027\uff1a {0} ## extra output when using -prompt (util/Log) -compiler.misc.resume.abort=\ -\u7ee7\u7eed(&R), \u653e\u5f03(&A)> +compiler.misc.resume.abort=\u7ee7\u7eed(&R), \u653e\u5f03(&A)> ##### @@ -612,165 +395,109 @@ compiler.misc.resume.abort=\ ## ## All warning messages are preceded by the following string. -compiler.warn.warning=\ -\u8b66\u544a\uff1a +compiler.warn.warning=\u8b66\u544a\uff1a -compiler.warn.constant.SVUID=\ -[serial] \u5728\u7c7b {0} \u4e2d serialVersionUID \u5fc5\u987b\u4e3a\u5e38\u91cf +compiler.warn.constant.SVUID=[serial] \u5728\u7c7b {0} \u4e2d serialVersionUID \u5fc5\u987b\u4e3a\u5e38\u91cf -compiler.warn.dir.path.element.not.found=\ -[path] \u9519\u8bef\u7684\u8def\u5f84\u5143\u7d20 "{0}"\uff1a\u65e0\u6b64\u76ee\u5f55 +compiler.warn.dir.path.element.not.found=[path] \u9519\u8bef\u7684\u8def\u5f84\u5143\u7d20 "{0}"\uff1a\u65e0\u6b64\u76ee\u5f55 -compiler.warn.finally.cannot.complete=\ -[finally] \u65e0\u6cd5\u6b63\u5e38\u5b8c\u6210 finally \u5b50\u53e5 +compiler.warn.finally.cannot.complete=[finally] \u65e0\u6cd5\u6b63\u5e38\u5b8c\u6210 finally \u5b50\u53e5 -compiler.warn.has.been.deprecated=\ -[deprecation] {1} \u4e2d\u7684 {0} \u5df2\u8fc7\u65f6 +compiler.warn.has.been.deprecated=[deprecation] {1} \u4e2d\u7684 {0} \u5df2\u8fc7\u65f6 -compiler.warn.illegal.char.for.encoding=\ -\u7f16\u7801 {0} \u7684\u4e0d\u53ef\u6620\u5c04\u5b57\u7b26 -compiler.warn.improper.SVUID=\ -[serial] \u5728\u7c7b {0} \u4e2d\u5fc5\u987b\u5c06 serialVersionUID \u58f0\u660e\u4e3a\u9759\u6001\u6700\u7ec8\u7c7b\u578b +compiler.warn.sun.proprietary={0} \u662f\u3000Sun\u3000\u4e13\u6709 API\uff0c\u5728\u5c06\u6765\u7248\u672c\u4e2d\u53ef\u80fd\u88ab\u79fb\u9664 -compiler.warn.inexact.non-varargs.call=\ -\u6700\u540e\u4e00\u4e2a\u53c2\u6570\u4f7f\u7528\u4e86\u4e0d\u51c6\u786e\u7684\u53d8\u91cf\u7c7b\u578b\u7684 varargs \u65b9\u6cd5\u7684\u975e varargs \u8c03\u7528\uff1b\n\ -\u5bf9\u4e8e varargs \u8c03\u7528\uff0c\u5e94\u4f7f\u7528 {0}\n\ -\u5bf9\u4e8e\u975e varargs \u8c03\u7528\uff0c\u5e94\u4f7f\u7528 {1}\uff0c\u8fd9\u6837\u4e5f\u53ef\u4ee5\u6291\u5236\u6b64\u8b66\u544a +compiler.warn.illegal.char.for.encoding=\u7f16\u7801 {0} \u7684\u4e0d\u53ef\u6620\u5c04\u5b57\u7b26 +compiler.warn.improper.SVUID=[serial] \u5728\u7c7b {0} \u4e2d\u5fc5\u987b\u5c06 serialVersionUID \u58f0\u660e\u4e3a\u9759\u6001\u6700\u7ec8\u7c7b\u578b -compiler.warn.long.SVUID=\ -[serial] \u5728\u7c7b {0} \u4e2d serialVersionUID \u5fc5\u987b\u4e3a\u957f\u6574\u578b +compiler.warn.inexact.non-varargs.call=\u6700\u540e\u4e00\u4e2a\u53c2\u6570\u4f7f\u7528\u4e86\u4e0d\u51c6\u786e\u7684\u53d8\u91cf\u7c7b\u578b\u7684 varargs \u65b9\u6cd5\u7684\u975e varargs \u8c03\u7528\uff1b\n\u5bf9\u4e8e varargs \u8c03\u7528\uff0c\u5e94\u4f7f\u7528 {0}\n\u5bf9\u4e8e\u975e varargs \u8c03\u7528\uff0c\u5e94\u4f7f\u7528 {1}\uff0c\u8fd9\u6837\u4e5f\u53ef\u4ee5\u6291\u5236\u6b64\u8b66\u544a -compiler.warn.missing.SVUID=\ -[serial] \u53ef\u5e8f\u5217\u5316\u7c7b {0} \u4e2d\u6ca1\u6709 serialVersionUID \u7684\u5b9a\u4e49 +compiler.warn.long.SVUID=[serial] \u5728\u7c7b {0} \u4e2d serialVersionUID \u5fc5\u987b\u4e3a\u957f\u6574\u578b -compiler.warn.override.varargs.missing=\ -{0}\uff1b\u88ab\u8986\u76d6\u7684\u65b9\u6cd5\u6ca1\u6709 "..." -compiler.warn.override.varargs.extra=\ -{0}\uff1b\u8986\u76d6\u7684\u65b9\u6cd5\u7f3a\u5c11 "..." -compiler.warn.override.bridge=\ -{0}\uff1b\u88ab\u8986\u76d6\u7684\u65b9\u6cd5\u4e3a bridge \u65b9\u6cd5 +compiler.warn.missing.SVUID=[serial] \u53ef\u5e8f\u5217\u5316\u7c7b {0} \u4e2d\u6ca1\u6709 serialVersionUID \u7684\u5b9a\u4e49 -compiler.warn.pkg-info.already.seen=\ -[package-info] \u5df2\u627e\u5230\u8f6f\u4ef6\u5305 {0} \u7684 package-info.java \u6587\u4ef6 -compiler.warn.path.element.not.found=\ -[path] \u9519\u8bef\u7684\u8def\u5f84\u5143\u7d20 "{0}"\uff1a\u65e0\u6b64\u6587\u4ef6\u6216\u76ee\u5f55 -compiler.warn.possible.fall-through.into.case=\ -[fallthrough] \u53ef\u80fd\u65e0\u6cd5\u5b9e\u73b0 case +compiler.warn.override.varargs.missing={0}\uff1b\u88ab\u8986\u76d6\u7684\u65b9\u6cd5\u6ca1\u6709 "..." +compiler.warn.override.varargs.extra={0}\uff1b\u8986\u76d6\u7684\u65b9\u6cd5\u7f3a\u5c11 "..." +compiler.warn.override.bridge={0}\uff1b\u88ab\u8986\u76d6\u7684\u65b9\u6cd5\u4e3a bridge \u65b9\u6cd5 -compiler.warn.redundant.cast=\ -[\u8f6c\u6362] \u5411 {0} \u8f6c\u6362\u51fa\u73b0\u5197\u4f59 +compiler.warn.pkg-info.already.seen=[package-info] \u5df2\u627e\u5230\u8f6f\u4ef6\u5305 {0} \u7684 package-info.java \u6587\u4ef6 +compiler.warn.path.element.not.found=[path] \u9519\u8bef\u7684\u8def\u5f84\u5143\u7d20 "{0}"\uff1a\u65e0\u6b64\u6587\u4ef6\u6216\u76ee\u5f55 +compiler.warn.possible.fall-through.into.case=[fallthrough] \u53ef\u80fd\u65e0\u6cd5\u5b9e\u73b0 case -compiler.warn.position.overflow=\ -\u884c {0} \u5904\u7684\u4f4d\u7f6e\u7f16\u7801\u6ea2\u51fa +compiler.warn.redundant.cast=[\u8f6c\u6362] \u5411 {0} \u8f6c\u6362\u51fa\u73b0\u5197\u4f59 -compiler.warn.big.major.version=\ -{0}: \u4e3b\u7248\u672c {1} \u6bd4 {2} \u65b0\uff0c\u6b64\u7f16\u8bd1\u5668\u652f\u6301\u6700\u65b0\u7684\u4e3b\u7248\u672c\u3002\n\ -\u5efa\u8bae\u5347\u7ea7\u6b64\u7f16\u8bd1\u5668\u3002 +compiler.warn.position.overflow=\u884c {0} \u5904\u7684\u4f4d\u7f6e\u7f16\u7801\u6ea2\u51fa + +compiler.warn.big.major.version={0}: \u4e3b\u7248\u672c {1} \u6bd4 {2} \u65b0\uff0c\u6b64\u7f16\u8bd1\u5668\u652f\u6301\u6700\u65b0\u7684\u4e3b\u7248\u672c\u3002\n\u5efa\u8bae\u5347\u7ea7\u6b64\u7f16\u8bd1\u5668\u3002 # Warnings related to annotation processing -compiler.warn.proc.package.does.not.exist=\ - \u8f6f\u4ef6\u5305 {0} \u4e0d\u5b58\u5728 -compiler.warn.proc.file.reopening=\ -\u5c1d\u8bd5\u591a\u6b21\u4e3a\u201c{0}\u201d\u521b\u5efa\u6587\u4ef6 +compiler.warn.proc.package.does.not.exist=\u8f6f\u4ef6\u5305 {0} \u4e0d\u5b58\u5728 +compiler.warn.proc.file.reopening=\u5c1d\u8bd5\u591a\u6b21\u4e3a\u201c{0}\u201d\u521b\u5efa\u6587\u4ef6 -compiler.warn.proc.type.already.exists=\ - \u5177\u6709\u7c7b\u578b''{0}''\u7684\u6587\u4ef6\u5df2\u7ecf\u5b58\u5728\u4e8e\u6e90\u8def\u5f84\u6216\u7c7b\u8def\u5f84\u4e2d +compiler.warn.proc.type.already.exists=\u5177\u6709\u7c7b\u578b''{0}''\u7684\u6587\u4ef6\u5df2\u7ecf\u5b58\u5728\u4e8e\u6e90\u8def\u5f84\u6216\u7c7b\u8def\u5f84\u4e2d -compiler.warn.proc.type.recreate=\ -\u5c1d\u8bd5\u591a\u6b21\u521b\u5efa\u5177\u6709\u7c7b\u578b\u201c{0}\u201d\u7684\u6587\u4ef6 +compiler.warn.proc.type.recreate=\u5c1d\u8bd5\u591a\u6b21\u521b\u5efa\u5177\u6709\u7c7b\u578b\u201c{0}\u201d\u7684\u6587\u4ef6 -compiler.warn.proc.illegal.file.name=\ -\u65e0\u6cd5\u521b\u5efa\u5e26\u6709\u975e\u6cd5\u540d\u79f0\u201c{0}\u201d\u7684\u6587\u4ef6\u3002 +compiler.warn.proc.illegal.file.name=\u65e0\u6cd5\u521b\u5efa\u5e26\u6709\u975e\u6cd5\u540d\u79f0\u201c{0}\u201d\u7684\u6587\u4ef6\u3002 -compiler.warn.proc.file.create.last.round=\ -\u5c06\u4e0d\u5bf9\u5728\u6700\u540e\u4e00\u4e2a\u5faa\u73af\u4e2d\u521b\u5efa\u7684\u7c7b\u578b\u4e3a\u201c{0}\u201d\u7684\u6587\u4ef6\u8fdb\u884c\u6ce8\u91ca\u5904\u7406\u3002 +compiler.warn.proc.file.create.last.round=\u5c06\u4e0d\u5bf9\u5728\u6700\u540e\u4e00\u4e2a\u5faa\u73af\u4e2d\u521b\u5efa\u7684\u7c7b\u578b\u4e3a\u201c{0}\u201d\u7684\u6587\u4ef6\u8fdb\u884c\u6ce8\u91ca\u5904\u7406\u3002 -compiler.warn.proc.malformed.supported.string=\ -\u5904\u7406\u7a0b\u5e8f\u201c{1}\u201d\u4e3a\u652f\u6301\u7684\u6ce8\u91ca\u7c7b\u578b\u8fd4\u56de\u4e0d\u89c4\u5219\u7684\u5b57\u7b26\u4e32\u201c{0}\u201d +compiler.warn.proc.malformed.supported.string=\u5904\u7406\u7a0b\u5e8f\u201c{1}\u201d\u4e3a\u652f\u6301\u7684\u6ce8\u91ca\u7c7b\u578b\u8fd4\u56de\u4e0d\u89c4\u5219\u7684\u5b57\u7b26\u4e32\u201c{0}\u201d -compiler.warn.proc.annotations.without.processors=\ - \u6ca1\u6709\u5904\u7406\u7a0b\u5e8f\u8981\u4f7f\u7528\u4ee5\u4e0b\u4efb\u4f55\u6ce8\u91ca: {0} +compiler.warn.proc.annotations.without.processors=\u6ca1\u6709\u5904\u7406\u7a0b\u5e8f\u8981\u4f7f\u7528\u4ee5\u4e0b\u4efb\u4f55\u6ce8\u91ca: {0} -compiler.warn.proc.processor.incompatible.source.version=\ - \u6765\u81ea\u6ce8\u91ca\u5904\u7406\u5668"{1}"\u7684\u53d7\u652f\u6301 source \u7248\u672c"{0}"\u4f4e\u4e8e -source"{2}" +compiler.warn.proc.processor.incompatible.source.version=\u6765\u81ea\u6ce8\u91ca\u5904\u7406\u5668"{1}"\u7684\u53d7\u652f\u6301 source \u7248\u672c"{0}"\u4f4e\u4e8e -source"{2}" -compiler.warn.proc.proc-only.requested.no.procs=\ -\u5728\u672a\u8bf7\u6c42\u7f16\u8bd1\u7684\u60c5\u51b5\u4e0b\u8fdb\u884c\u6ce8\u91ca\u5904\u7406\uff0c\u4f46\u672a\u627e\u5230\u5904\u7406\u7a0b\u5e8f\u3002 +compiler.warn.proc.proc-only.requested.no.procs=\u5728\u672a\u8bf7\u6c42\u7f16\u8bd1\u7684\u60c5\u51b5\u4e0b\u8fdb\u884c\u6ce8\u91ca\u5904\u7406\uff0c\u4f46\u672a\u627e\u5230\u5904\u7406\u7a0b\u5e8f\u3002 -compiler.warn.proc.use.implicit=\ -\u6ce8\u91ca\u5904\u7406\u4e0d\u9002\u7528\u4e8e\u9690\u5f0f\u7f16\u8bd1\u7684\u6587\u4ef6\u3002\n\ -\u4f7f\u7528 -implicit \u6307\u5b9a\u7528\u4e8e\u9690\u5f0f\u7f16\u8bd1\u7684\u7b56\u7565\u3002 +compiler.warn.proc.use.implicit=\u6ce8\u91ca\u5904\u7406\u4e0d\u9002\u7528\u4e8e\u9690\u5f0f\u7f16\u8bd1\u7684\u6587\u4ef6\u3002\n\u4f7f\u7528 -implicit \u6307\u5b9a\u7528\u4e8e\u9690\u5f0f\u7f16\u8bd1\u7684\u7b56\u7565\u3002 -compiler.warn.proc.use.proc.or.implicit=\ -\u6ce8\u91ca\u5904\u7406\u4e0d\u9002\u7528\u4e8e\u9690\u5f0f\u7f16\u8bd1\u7684\u6587\u4ef6\u3002\n\ -\u4f7f\u7528 -proc:none \u7981\u7528\u6ce8\u91ca\u5904\u7406\u6216\u4f7f\u7528 -implicit \u6307\u5b9a\u7528\u4e8e\u9690\u5f0f\u7f16\u8bd1\u7684\u7b56\u7565\u3002 +compiler.warn.proc.use.proc.or.implicit=\u6ce8\u91ca\u5904\u7406\u4e0d\u9002\u7528\u4e8e\u9690\u5f0f\u7f16\u8bd1\u7684\u6587\u4ef6\u3002\n\u4f7f\u7528 -proc:none \u7981\u7528\u6ce8\u91ca\u5904\u7406\u6216\u4f7f\u7528 -implicit \u6307\u5b9a\u7528\u4e8e\u9690\u5f0f\u7f16\u8bd1\u7684\u7b56\u7565\u3002 # Print a client-generated warning; assumed to be localized, no translation required -compiler.warn.proc.messager=\ - {0} +compiler.warn.proc.messager={0} -compiler.warn.proc.unclosed.type.files=\ -\u7c7b\u578b\u4e3a\u201c{0}\u201d\u7684\u6587\u4ef6\u672a\u5173\u95ed\uff1b\u5c06\u4e0d\u9488\u5bf9\u8fd9\u4e9b\u7c7b\u578b\u8fdb\u884c\u6ce8\u91ca\u5904\u7406 +compiler.warn.proc.unclosed.type.files=\u7c7b\u578b\u4e3a\u201c{0}\u201d\u7684\u6587\u4ef6\u672a\u5173\u95ed\uff1b\u5c06\u4e0d\u9488\u5bf9\u8fd9\u4e9b\u7c7b\u578b\u8fdb\u884c\u6ce8\u91ca\u5904\u7406 -compiler.warn.proc.unmatched.processor.options=\ - \u4ee5\u4e0b\u9009\u9879\u672a\u88ab\u4efb\u4f55\u5904\u7406\u5668\u8bc6\u522b\uff1a"{0}" +compiler.warn.proc.unmatched.processor.options=\u4ee5\u4e0b\u9009\u9879\u672a\u88ab\u4efb\u4f55\u5904\u7406\u5668\u8bc6\u522b\uff1a"{0}" -compiler.warn.unchecked.assign=\ -[unchecked] \u672a\u7ecf\u68c0\u67e5\u7684\u6307\u5b9a\uff1a\u5c06 {0} \u6307\u5b9a\u7ed9 {1} -compiler.warn.unchecked.assign.to.var=\ -[unchecked] \u5bf9\u4f5c\u4e3a\u666e\u901a\u7c7b\u578b {1} \u7684\u6210\u5458\u7684\u53d8\u91cf {0} \u7684\u6307\u5b9a\u672a\u7ecf\u68c0\u67e5 -compiler.warn.unchecked.call.mbr.of.raw.type=\ -[unchecked] \u5bf9\u4f5c\u4e3a\u666e\u901a\u7c7b\u578b {1} \u7684\u6210\u5458\u7684 {0} \u7684\u8c03\u7528\u672a\u7ecf\u68c0\u67e5 -compiler.warn.unchecked.cast.to.type=\ -[unchecked] \u5bf9\u7c7b\u578b {0} \u7684\u4f7f\u7528\u672a\u7ecf\u68c0\u67e5 -compiler.warn.unchecked.meth.invocation.applied=\ -[unchecked] \u65b9\u6cd5\u8c03\u7528\u672a\u7ecf\u68c0\u67e5\uff1a{1} \u4e2d\u7684 {0} \u88ab\u5e94\u7528\u4e8e {2}({3}) -compiler.warn.unchecked.generic.array.creation=\ -[unchecked] \u5bf9\u4e8e varargs \u53c2\u6570\uff0c\u7c7b\u578b {0} \u7684\u6cdb\u578b\u6570\u7ec4\u521b\u5efa\u672a\u7ecf\u68c0\u67e5 +compiler.warn.unchecked.assign=[unchecked] \u672a\u7ecf\u68c0\u67e5\u7684\u6307\u5b9a\uff1a\u5c06 {0} \u6307\u5b9a\u7ed9 {1} +compiler.warn.unchecked.assign.to.var=[unchecked] \u5bf9\u4f5c\u4e3a\u666e\u901a\u7c7b\u578b {1} \u7684\u6210\u5458\u7684\u53d8\u91cf {0} \u7684\u6307\u5b9a\u672a\u7ecf\u68c0\u67e5 +compiler.warn.unchecked.call.mbr.of.raw.type=[unchecked] \u5bf9\u4f5c\u4e3a\u666e\u901a\u7c7b\u578b {1} \u7684\u6210\u5458\u7684 {0} \u7684\u8c03\u7528\u672a\u7ecf\u68c0\u67e5 +compiler.warn.unchecked.cast.to.type=[unchecked] \u5bf9\u7c7b\u578b {0} \u7684\u4f7f\u7528\u672a\u7ecf\u68c0\u67e5 +compiler.warn.unchecked.meth.invocation.applied=[unchecked] \u672a\u7ecf\u68c0\u67e5\u7684\u65b9\u6cd5\u8c03\u7528: {4} {5}\u3000\u4e2d\u7684\u3000{0} {1}\u3000\u4f7f\u7528\u4e8e\u7ed9\u5b9a\u7684\u7c7b\u578b\n\u9700\u8981: {2}\n\u53d1\u73b0: {3} -compiler.warn.missing.deprecated.annotation=\ -[dep-ann] \u672a\u4f7f\u7528 @Deprecated \u5bf9\u5df2\u8fc7\u65f6\u7684\u9879\u76ee\u8fdb\u884c\u6ce8\u91ca +compiler.warn.unchecked.generic.array.creation=[unchecked] \u7c7b\u578b {0} \u7684 varargs \u53c2\u6570\u7684\u6cdb\u578b\u6570\u7ec4\u521b\u5efa\u672a\u7ecf\u68c0\u67e5 -compiler.warn.invalid.archive.file=\ -[path] \u4ee5\u4e0b\u8def\u5f84\u4e2d\u5b58\u5728\u610f\u5916\u7684\u6587\u4ef6: {0} +compiler.warn.missing.deprecated.annotation=[dep-ann] \u672a\u4f7f\u7528 @Deprecated \u5bf9\u5df2\u8fc7\u65f6\u7684\u9879\u76ee\u8fdb\u884c\u6ce8\u91ca -compiler.warn.unexpected.archive.file=\ -[path] \u4ee5\u4e0b\u5f52\u6863\u6587\u4ef6\u5b58\u5728\u610f\u5916\u7684\u6269\u5c55\u540d: {0} +compiler.warn.invalid.archive.file=[path] \u4ee5\u4e0b\u8def\u5f84\u4e2d\u5b58\u5728\u610f\u5916\u7684\u6587\u4ef6: {0} -compiler.warn.div.zero=\ -[divzero] \u9664\u6570\u4e3a\u96f6 +compiler.warn.unexpected.archive.file=[path] \u4ee5\u4e0b\u5f52\u6863\u6587\u4ef6\u5b58\u5728\u610f\u5916\u7684\u6269\u5c55\u540d: {0} -compiler.warn.empty.if=\ -[\u7a7a] if \u4e4b\u540e\u6ca1\u6709\u8bed\u53e5 +compiler.warn.div.zero=[divzero] \u9664\u6570\u4e3a\u96f6 -compiler.warn.annotation.method.not.found=\ -\u65e0\u6cd5\u627e\u5230\u7c7b\u578b\u4e3a\u201c{0}\u201d\u7684\u6ce8\u91ca\u65b9\u6cd5\u201c{1}()\u201d +compiler.warn.empty.if=[\u7a7a] if \u4e4b\u540e\u6ca1\u6709\u8bed\u53e5 -compiler.warn.annotation.method.not.found.reason=\ -\u65e0\u6cd5\u627e\u5230\u7c7b\u578b\u4e3a\u201c{0}\u201d\u7684\u6ce8\u91ca\u65b9\u6cd5\u201c{1}()\u201d: {2} +compiler.warn.annotation.method.not.found=\u65e0\u6cd5\u627e\u5230\u7c7b\u578b\u4e3a\u201c{0}\u201d\u7684\u6ce8\u91ca\u65b9\u6cd5\u201c{1}()\u201d + +compiler.warn.annotation.method.not.found.reason=\u65e0\u6cd5\u627e\u5230\u7c7b\u578b\u4e3a\u201c{0}\u201d\u7684\u6ce8\u91ca\u65b9\u6cd5\u201c{1}()\u201d: {2} + +compiler.warn.raw.class.use=[rawtypes] \u53d1\u73b0\u539f\u578b(raw type): {0}\n\u6cdb\u578b\u7c7b\u7f3a\u5c11\u7c7b\u578b\u53c2\u6570 {1} ##### ## The following are tokens which are non-terminals in the language. They should ## be named as JLS3 calls them when translated to the appropriate language. -compiler.misc.token.identifier=\ -<\u6807\u8bc6\u7b26> -compiler.misc.token.character=\ -<\u5b57\u7b26> -compiler.misc.token.string=\ -<\u5b57\u7b26\u4e32> -compiler.misc.token.integer=\ -<\u6574\u578b> -compiler.misc.token.long-integer=\ -<\u957f\u6574\u578b> -compiler.misc.token.float=\ -<\u6d6e\u70b9\u578b> -compiler.misc.token.double=\ -<\u53cc\u7cbe\u5ea6\u578b> -compiler.misc.token.bad-symbol=\ -<\u9519\u8bef\u7b26\u53f7> -compiler.misc.token.end-of-input=\ -<\u8f93\u5165\u7ed3\u675f> +compiler.misc.token.identifier=<\u6807\u8bc6\u7b26> +compiler.misc.token.character=<\u5b57\u7b26> +compiler.misc.token.string=<\u5b57\u7b26\u4e32> +compiler.misc.token.integer=<\u6574\u578b> +compiler.misc.token.long-integer=<\u957f\u6574\u578b> +compiler.misc.token.float=<\u6d6e\u70b9\u578b> +compiler.misc.token.double=<\u53cc\u7cbe\u5ea6\u578b> +compiler.misc.token.bad-symbol=<\u9519\u8bef\u7b26\u53f7> +compiler.misc.token.end-of-input=<\u8f93\u5165\u7ed3\u675f> ## The argument to the following string will always be one of the following: ## 1. one of the above non-terminals @@ -781,78 +508,59 @@ compiler.misc.token.end-of-input=\ ## 6. an operator (JLS3.12) ## ## This is the only place these tokens will be used. -compiler.err.expected=\ -\u9700\u8981 {0} -compiler.err.expected2=\ -\u9700\u8981\u4e3a {0} \u6216 {1} -compiler.err.expected3=\ -\u9700\u8981\u4e3a {0}\u3001{1} \u6216 {2} +compiler.err.expected=\u9700\u8981 {0} +compiler.err.expected2=\u9700\u8981\u4e3a {0} \u6216 {1} +compiler.err.expected3=\u9700\u8981\u4e3a {0}\u3001{1} \u6216 {2} -compiler.err.premature.eof=\ -\u8fdb\u884c\u8bed\u6cd5\u89e3\u6790\u65f6\u5df2\u5230\u8fbe\u6587\u4ef6\u7ed3\u5c3e +compiler.err.premature.eof=\u8fdb\u884c\u8bed\u6cd5\u89e3\u6790\u65f6\u5df2\u5230\u8fbe\u6587\u4ef6\u7ed3\u5c3e ## The following are related in form, but do not easily fit the above paradigm. -compiler.err.dot.class.expected=\ -\u9700\u8981 ".class" +compiler.err.dot.class.expected=\u9700\u8981 ".class" ## The argument to this string will always be either 'case' or 'default'. -compiler.err.orphaned=\ -\u5355\u4e2a {0}\uff1a +compiler.err.orphaned=\u5355\u4e2a {0}\uff1a -compiler.misc.anonymous.class=\ -<\u533f\u540d {0}> +compiler.misc.anonymous.class=<\u533f\u540d {0}> + +compiler.misc.type.captureof=\u6355\u83b7 {1} \u4e2d\u7684 #{0} + +compiler.misc.type.captureof.1=\u6355\u83b7 #{0} + +compiler.misc.type.none= + +compiler.misc.unnamed.package=\u672a\u547d\u540d\u5305 ##### -compiler.err.cant.access=\ -\u65e0\u6cd5\u8bbf\u95ee {0}\n\ -{1} +compiler.err.cant.access=\u65e0\u6cd5\u8bbf\u95ee {0}\n{1} -compiler.misc.bad.class.file.header=\ -\u9519\u8bef\u7684\u7c7b\u6587\u4ef6\uff1a {0}\n\ -{1}\n\ -\u8bf7\u5220\u9664\u8be5\u6587\u4ef6\u6216\u786e\u4fdd\u8be5\u6587\u4ef6\u4f4d\u4e8e\u6b63\u786e\u7684\u7c7b\u8def\u5f84\u5b50\u76ee\u5f55\u4e2d\u3002 +compiler.misc.bad.class.file.header=\u9519\u8bef\u7684\u7c7b\u6587\u4ef6\uff1a {0}\n{1}\n\u8bf7\u5220\u9664\u8be5\u6587\u4ef6\u6216\u786e\u4fdd\u8be5\u6587\u4ef6\u4f4d\u4e8e\u6b63\u786e\u7684\u7c7b\u8def\u5f84\u5b50\u76ee\u5f55\u4e2d\u3002 +compiler.misc.bad.source.file.header=\u9519\u8bef\u7684\u6e90\u6587\u4ef6\uff1a\u3000{0}\n{1}\n\u8bf7\u5220\u9664\u8be5\u6587\u4ef6\u6216\u786e\u4fdd\u8be5\u6587\u4ef6\u4f4d\u4e8e\u6b63\u786e\u7684\u6e90\u6587\u4ef6\u8def\u5f84\u5b50\u76ee\u5f55\u4e2d\u3002 ## The following are all possible strings for the second argument ({1}) of the ## above strings. -compiler.misc.bad.class.signature=\ -\u9519\u8bef\u7684\u7c7b\u7b7e\u540d\uff1a {0} -compiler.misc.bad.enclosing.method=\ -\u95ed\u5408\u65b9\u6cd5\u5c5e\u6027 {0} \u65f6\u51fa\u9519 -compiler.misc.bad.runtime.invisible.param.annotations=\ - RuntimeInvisibleParameterAnnotations \u5c5e\u6027\u9519\u8bef: {0} -compiler.misc.bad.const.pool.tag=\ -\u9519\u8bef\u7684\u5e38\u91cf\u6c60\u6807\u8bb0\uff1a {0} -compiler.misc.bad.const.pool.tag.at=\ -\u9519\u8bef\u7684\u5e38\u91cf\u6c60\u6807\u8bb0\uff1a{0}\uff0c\u4f4d\u4e8e {1} -compiler.misc.bad.signature=\ -\u9519\u8bef\u7684\u7b7e\u540d\uff1a {0} -compiler.misc.class.file.wrong.class=\ -\u7c7b\u6587\u4ef6\u5305\u542b\u9519\u8bef\u7684\u7c7b\uff1a {0} -compiler.misc.class.file.not.found=\ -\u672a\u627e\u5230 {0} \u7684\u7c7b\u6587\u4ef6 -compiler.misc.file.doesnt.contain.class=\ -\u6587\u4ef6\u4e0d\u5305\u542b\u7c7b {0} -compiler.misc.file.does.not.contain.package=\ - \u6587\u4ef6\u4e0d\u5305\u542b\u8f6f\u4ef6\u5305 {0} -compiler.misc.illegal.start.of.class.file=\ -\u975e\u6cd5\u7684\u7c7b\u6587\u4ef6\u5f00\u59cb -compiler.misc.unable.to.access.file=\ -\u65e0\u6cd5\u8bbf\u95ee\u6587\u4ef6\uff1a {0} -compiler.misc.unicode.str.not.supported=\ -\u4e0d\u652f\u6301\u7c7b\u6587\u4ef6\u4e2d\u7684 Unicode \u5b57\u7b26\u4e32 -compiler.misc.undecl.type.var=\ -\u672a\u58f0\u660e\u7684\u7c7b\u578b\u53d8\u91cf\uff1a {0} -compiler.misc.wrong.version=\ -\u7c7b\u6587\u4ef6\u5177\u6709\u9519\u8bef\u7684\u7248\u672c {0}.{1}\uff0c\u5e94\u4e3a {2}.{3} +compiler.misc.bad.class.signature=\u9519\u8bef\u7684\u7c7b\u7b7e\u540d\uff1a {0} +compiler.misc.bad.enclosing.method=\u95ed\u5408\u65b9\u6cd5\u5c5e\u6027 {0} \u65f6\u51fa\u9519 +compiler.misc.bad.runtime.invisible.param.annotations=RuntimeInvisibleParameterAnnotations \u5c5e\u6027\u9519\u8bef: {0} +compiler.misc.bad.const.pool.tag=\u9519\u8bef\u7684\u5e38\u91cf\u6c60\u6807\u8bb0\uff1a {0} +compiler.misc.bad.const.pool.tag.at=\u9519\u8bef\u7684\u5e38\u91cf\u6c60\u6807\u8bb0\uff1a{0}\uff0c\u4f4d\u4e8e {1} +compiler.misc.bad.signature=\u9519\u8bef\u7684\u7b7e\u540d\uff1a {0} +compiler.misc.bad.type.annotation.value=\u9519\u8bef\u7c7b\u578b\u6ce8\u91ca\u76ee\u6807\u7c7b\u578b\u503c\uff1a{0} +compiler.misc.class.file.wrong.class=\u7c7b\u6587\u4ef6\u5305\u542b\u9519\u8bef\u7684\u7c7b\uff1a {0} +compiler.misc.class.file.not.found=\u672a\u627e\u5230 {0} \u7684\u7c7b\u6587\u4ef6 +compiler.misc.file.doesnt.contain.class=\u6587\u4ef6\u4e0d\u5305\u542b\u7c7b {0} +compiler.misc.file.does.not.contain.package=\u6587\u4ef6\u4e0d\u5305\u542b\u8f6f\u4ef6\u5305 {0} +compiler.misc.illegal.start.of.class.file=\u975e\u6cd5\u7684\u7c7b\u6587\u4ef6\u5f00\u59cb +compiler.misc.unable.to.access.file=\u65e0\u6cd5\u8bbf\u95ee\u6587\u4ef6\uff1a {0} +compiler.misc.unicode.str.not.supported=\u4e0d\u652f\u6301\u7c7b\u6587\u4ef6\u4e2d\u7684 Unicode \u5b57\u7b26\u4e32 +compiler.misc.undecl.type.var=\u672a\u58f0\u660e\u7684\u7c7b\u578b\u53d8\u91cf\uff1a {0} +compiler.misc.wrong.version=\u7c7b\u6587\u4ef6\u5177\u6709\u9519\u8bef\u7684\u7248\u672c {0}.{1}\uff0c\u5e94\u4e3a {2}.{3} ##### -compiler.err.not.within.bounds=\ -\u7c7b\u578b\u53c2\u6570 {0} \u4e0d\u5728\u5176\u9650\u5236\u8303\u56f4\u4e4b\u5185 +compiler.err.not.within.bounds=\u7c7b\u578b\u53c2\u6570 {0} \u4e0d\u5728\u5176\u9650\u5236\u8303\u56f4\u4e4b\u5185 -compiler.err.not.within.bounds.explain=\ -\u7c7b\u578b\u53c2\u6570 {0} \u4e0d\u5728\u5176\u9650\u5236\u8303\u56f4\u4e4b\u5185\uff1b{1} +compiler.err.not.within.bounds.explain=\u7c7b\u578b\u53c2\u6570 {0} \u4e0d\u5728\u5176\u9650\u5236\u8303\u56f4\u4e4b\u5185\uff1b{1} ## The following are all possible strings for the second argument ({1}) of the ## above string. @@ -861,43 +569,26 @@ compiler.err.not.within.bounds.explain=\ ##### -compiler.err.prob.found.req=\ -{0}\n\ -\u627e\u5230\uff1a {1}\n\ -\u9700\u8981\uff1a {2} -compiler.warn.prob.found.req=\ -{0}\n\ -\u627e\u5230\uff1a {1}\n\ -\u9700\u8981\uff1a {2} -compiler.err.prob.found.req.1=\ -{0} {3}\n\ -\u627e\u5230\uff1a {1}\n\ -\u9700\u8981\uff1a {2} +compiler.err.prob.found.req={0}\n\u8981\u6c42\uff1a{2}\n\u53d1\u73b0\uff1a {1} +compiler.warn.prob.found.req={0}\n\u8981\u6c42\uff1a{2}\n\u53d1\u73b0\uff1a {1} +compiler.err.prob.found.req.1={0} {3}\n\u8981\u6c42\uff1a{2}\n\u53d1\u73b0\uff1a {1} ## The following are all possible strings for the first argument ({0}) of the ## above strings. -compiler.misc.incompatible.types=\ -\u4e0d\u517c\u5bb9\u7684\u7c7b\u578b -compiler.misc.incompatible.types.1=\ -\u4e0d\u517c\u5bb9\u7684\u7c7b\u578b\uff1b{0} -compiler.misc.inconvertible.types=\ -\u4e0d\u53ef\u8f6c\u6362\u7684\u7c7b\u578b -compiler.misc.possible.loss.of.precision=\ -\u53ef\u80fd\u635f\u5931\u7cbe\u5ea6 +compiler.misc.incompatible.types=\u4e0d\u517c\u5bb9\u7684\u7c7b\u578b +compiler.misc.incompatible.types.1=\u4e0d\u517c\u5bb9\u7684\u7c7b\u578b\uff1b{0} +compiler.misc.inconvertible.types=\u4e0d\u53ef\u8f6c\u6362\u7684\u7c7b\u578b +compiler.misc.possible.loss.of.precision=\u53ef\u80fd\u635f\u5931\u7cbe\u5ea6 -compiler.misc.unchecked.assign=\ -[unchecked] \u672a\u7ecf\u68c0\u67e5\u7684\u8f6c\u6362 +compiler.misc.unchecked.assign=[unchecked] \u672a\u7ecf\u68c0\u67e5\u7684\u8f6c\u6362 # compiler.misc.storecheck=\ # [unchecked] assignment might cause later store checks to fail # compiler.misc.unchecked=\ # [unchecked] assigned array cannot dynamically check its stores -compiler.misc.unchecked.cast.to.type=\ -[unchecked] \u672a\u7ecf\u68c0\u67e5\u7684\u7c7b\u578b\u4f7f\u7528 +compiler.misc.unchecked.cast.to.type=[unchecked] \u672a\u7ecf\u68c0\u67e5\u7684\u7c7b\u578b\u4f7f\u7528 -compiler.misc.assignment.from.super-bound=\ -\u4ece super-bound \u7c7b\u578b {0} \u6307\u5b9a -compiler.misc.assignment.to.extends-bound=\ -\u5bf9 extends-bound \u7c7b\u578b {0} \u8fdb\u884c\u6307\u5b9a +compiler.misc.assignment.from.super-bound=\u4ece super-bound \u7c7b\u578b {0} \u6307\u5b9a +compiler.misc.assignment.to.extends-bound=\u5bf9 extends-bound \u7c7b\u578b {0} \u8fdb\u884c\u6307\u5b9a # compiler.err.star.expected=\ # ''*'' expected # compiler.err.no.elem.type=\ @@ -905,221 +596,187 @@ compiler.misc.assignment.to.extends-bound=\ ##### -compiler.err.type.found.req=\ -\u610f\u5916\u7684\u7c7b\u578b\n\ -\u627e\u5230\uff1a {0}\n\ -\u9700\u8981\uff1a {1} +compiler.err.type.found.req=\u4ee5\u5916\u7c7b\u578b\n\u8981\u6c42\uff1a {1}\n\u53d1\u73b0\uff1a {0} ## The following are all possible strings for the first argument ({0}) of the ## above string. -compiler.misc.type.req.class=\ -\u7c7b -compiler.misc.type.req.class.array=\ -\u7c7b\u6216\u6570\u7ec4 -compiler.misc.type.req.ref=\ -\u5f15\u7528 -compiler.misc.type.req.exact=\ -\u4e0d\u5e26\u9650\u5236\u8303\u56f4\u7684\u7c7b\u6216\u63a5\u53e3 -compiler.misc.type.parameter=\ -\u7c7b\u578b\u53c2\u6570 {0} +compiler.misc.type.req.class=\u7c7b +compiler.misc.type.req.class.array=\u7c7b\u6216\u6570\u7ec4 +compiler.misc.type.req.ref=\u5f15\u7528 +compiler.misc.type.req.exact=\u4e0d\u5e26\u9650\u5236\u8303\u56f4\u7684\u7c7b\u6216\u63a5\u53e3 +compiler.misc.type.parameter=\u7c7b\u578b\u53c2\u6570 {0} ##### ## The following are all possible strings for the last argument of all those ## diagnostics whose key ends in ".1" -compiler.misc.undetermined.type=\ -\u672a\u786e\u5b9a\u7684\u7c7b\u578b -ncompiler.misc.type.variable.has.undetermined.type=\ -\u7c7b\u578b\u53d8\u91cf {0} \u5e26\u6709\u672a\u786e\u5b9a\u7684\u7c7b\u578b -compiler.misc.no.unique.maximal.instance.exists=\ -\u5bf9\u4e8e\u4e0a\u9650\u4e3a {1} \u7684\u7c7b\u578b\u53d8\u91cf {0}\uff0c\u4e0d\u5b58\u5728\u552f\u4e00\u6700\u5927\u5b9e\u4f8b -compiler.misc.no.unique.minimal.instance.exists=\ -\u5bf9\u4e8e\u4e0b\u9650\u4e3a {1} \u7684\u7c7b\u578b\u53d8\u91cf {0}\uff0c\u4e0d\u5b58\u5728\u552f\u4e00\u6700\u5c0f\u5b9e\u4f8b -compiler.misc.no.conforming.instance.exists=\ -\u4e0d\u5b58\u5728\u7c7b\u578b\u53d8\u91cf {0} \u7684\u5b9e\u4f8b\uff0c\u4ee5\u4f7f {1} \u4e0e {2} \u4e00\u81f4 -compiler.misc.no.conforming.assignment.exists=\ -\u4e0d\u5b58\u5728\u7c7b\u578b\u53d8\u91cf {0} \u7684\u5b9e\u4f8b\uff0c\u4ee5\u4f7f\u53c2\u6570\u7c7b\u578b {1} \u4e0e\u5f62\u5f0f\u53c2\u6570\u7c7b\u578b {2} \u4e00\u81f4 -compiler.misc.arg.length.mismatch=\ -\u65e0\u6cd5\u4ece\u53c2\u6570\u8fdb\u884c\u5b9e\u4f8b\u5316\uff0c\u56e0\u4e3a\u5b9e\u9645\u53c2\u6570\u5217\u8868\u548c\u5f62\u5f0f\u53c2\u6570\u5217\u8868\u957f\u5ea6\u4e0d\u540c -compiler.misc.inferred.do.not.conform.to.bounds=\ -\u63a8\u7406\u7c7b\u578b\u53c2\u6570 {0} \u4e0d\u7b26\u5408\u7c7b\u578b\u53d8\u91cf {1} \u7684\u9650\u5236\u8303\u56f4 +compiler.misc.undetermined.type=\u672a\u786e\u5b9a\u7684\u7c7b\u578b +ncompiler.misc.type.variable.has.undetermined.type=\u7c7b\u578b\u53d8\u91cf {0} \u5e26\u6709\u672a\u786e\u5b9a\u7684\u7c7b\u578b +compiler.misc.no.unique.maximal.instance.exists=\u5bf9\u4e8e\u4e0a\u9650\u4e3a {1} \u7684\u7c7b\u578b\u53d8\u91cf {0}\uff0c\u4e0d\u5b58\u5728\u552f\u4e00\u6700\u5927\u5b9e\u4f8b +compiler.misc.no.unique.minimal.instance.exists=\u5bf9\u4e8e\u4e0b\u9650\u4e3a {1} \u7684\u7c7b\u578b\u53d8\u91cf {0}\uff0c\u4e0d\u5b58\u5728\u552f\u4e00\u6700\u5c0f\u5b9e\u4f8b +compiler.misc.no.conforming.instance.exists=\u4e0d\u5b58\u5728\u7c7b\u578b\u53d8\u91cf {0} \u7684\u5b9e\u4f8b\uff0c\u4ee5\u4f7f {1} \u4e0e {2} \u4e00\u81f4 +compiler.misc.no.conforming.assignment.exists=\u4e0d\u5b58\u5728\u7c7b\u578b\u53d8\u91cf {0} \u7684\u5b9e\u4f8b\uff0c\u4ee5\u4f7f\u53c2\u6570\u7c7b\u578b {1} \u4e0e\u5f62\u5f0f\u53c2\u6570\u7c7b\u578b {2} \u4e00\u81f4 +compiler.misc.arg.length.mismatch=\u65e0\u6cd5\u4ece\u53c2\u6570\u8fdb\u884c\u5b9e\u4f8b\u5316\uff0c\u56e0\u4e3a\u5b9e\u9645\u53c2\u6570\u5217\u8868\u548c\u5f62\u5f0f\u53c2\u6570\u5217\u8868\u957f\u5ea6\u4e0d\u540c +compiler.misc.inferred.do.not.conform.to.bounds=\u63a8\u65ad\u7c7b\u578b\u4e0d\u7b26\u5408\u58f0\u660e\u7684\u9650\u5236\u8303\u56f4\n\u63a8\u65ad\uff1a{0}\n\u9650\u5236\u8303\u56f4\uff1a{1} +compiler.misc.inferred.do.not.conform.to.params=\u5b9e\u9645\u53c2\u6570\u4e0d\u7b26\u5408\u63a8\u65ad\u5f62\u5f0f\u53c2\u6570\n\u9700\u8981\uff1a{0}\n\u627e\u5230: {1} ##### ## The first argument ({0}) is a "kindname". -compiler.err.abstract.cant.be.accessed.directly=\ -\u65e0\u6cd5\u76f4\u63a5\u8bbf\u95ee {2} \u4e2d\u7684\u62bd\u8c61 {0} {1} +compiler.err.abstract.cant.be.accessed.directly=\u65e0\u6cd5\u76f4\u63a5\u8bbf\u95ee {2} \u4e2d\u7684\u62bd\u8c61 {0} {1} ## The first argument ({0}) is a "kindname". -compiler.err.non-static.cant.be.ref=\ -\u65e0\u6cd5\u4ece\u9759\u6001\u4e0a\u4e0b\u6587\u4e2d\u5f15\u7528\u975e\u9759\u6001 {0} {1} +compiler.err.non-static.cant.be.ref=\u65e0\u6cd5\u4ece\u9759\u6001\u4e0a\u4e0b\u6587\u4e2d\u5f15\u7528\u975e\u9759\u6001 {0} {1} ## Both arguments ({0}, {1}) are "kindname"s. {0} is a comma-separated list ## of kindnames (the list should be identical to that provided in source. -compiler.err.unexpected.type=\ -\u610f\u5916\u7684\u7c7b\u578b\n\ -\u9700\u8981\uff1a {0}\n\ -\u627e\u5230\uff1a {1} +compiler.err.unexpected.type=\u610f\u5916\u7684\u7c7b\u578b\n\u9700\u8981\uff1a {0}\n\u627e\u5230\uff1a {1} -## The first argument ({0}) is a "kindname". -compiler.err.cant.resolve=\ -\u627e\u4e0d\u5230\u7b26\u53f7\n\ -\u7b26\u53f7\uff1a {0} {3}{1}{2} +## The first argument {0} is a "kindname" (e.g. 'constructor', 'field', etc.) +## The second argument {1} is the non-resolved symbol +## The third argument {2} is a list of type parameters (non-empty if {1} is a method) +## The fourth argument {3} is a list of argument types (non-empty if {1} is a method) +compiler.err.cant.resolve=\u627e\u4e0d\u5230\u7b26\u53f7\n\u7b26\u53f7\uff1a {0} {3}{1}{2} -## The first argument ({0}) and fifth argument ({4}) are "kindname"s. -compiler.err.cant.resolve.location=\ -\u627e\u4e0d\u5230\u7b26\u53f7\n\ -\u7b26\u53f7\uff1a {0} {3}{1}{2}\n\ -\u4f4d\u7f6e\uff1a {4} {5} +compiler.err.cant.resolve.args=\u627e\u4e0d\u5230\u7b26\u53f7\n\u7b26\u53f7\uff1a {0} {1}({3}) + +compiler.err.cant.resolve.args.params=\u627e\u4e0d\u5230\u7b26\u53f7\n\u7b26\u53f7\uff1a {0} <{2}>{1}({3}) + +## arguments from {0} to {3} have the same meaning as above +## The fifth argument {4} is the location "kindname" (e.g. 'constructor', 'field', etc.) +## The sixth argument {5} is the location type +compiler.err.cant.resolve.location=\u627e\u4e0d\u5230\u7b26\u53f7\n\u7b26\u53f7\uff1a {0} {3}{1}{2}\n\u4f4d\u7f6e\uff1a {4} {5} + +compiler.err.cant.resolve.location.args=\u627e\u4e0d\u5230\u7b26\u53f7\n\u7b26\u53f7\uff1a {0} {1}({3})\nlocation: {4} {5} + +compiler.err.cant.resolve.location.args.params=\u627e\u4e0d\u5230\u7b26\u53f7\n\u7b26\u53f7\uff1a {0} <{2}>{1}({3})\n\u4f4d\u7f6e\uff1a {4} {5} + +compiler.err.cant.apply.diamond=\u83f1\u5f62\u8fd0\u7b97\u7b26\u65e0\u6cd5\u63a8\u65ad {0} \u7684\u7c7b\u578b\uff1b\n\u539f\u56e0: {1} ## The following are all possible string for "kindname". ## They should be called whatever the JLS calls them after it been translated ## to the appropriate language. # compiler.misc.kindname.constructor=\ # static member -compiler.misc.kindname.annotation=\ -@interface -compiler.misc.kindname.constructor=\ -\u6784\u9020\u51fd\u6570 -compiler.misc.kindname.interface=\ -\u63a5\u53e3 -compiler.misc.kindname.static=\ -\u9759\u6001 -compiler.misc.kindname.type.variable=\ -\u7c7b\u578b\u53d8\u91cf\u7684\u9650\u5236\u8303\u56f4 -compiler.misc.kindname=\ -\u6807\u8bc6\u7b26 ({0}) -compiler.misc.kindname.variable=\ -\u53d8\u91cf -compiler.misc.kindname.value=\ -\u503c -compiler.misc.kindname.method=\ -\u65b9\u6cd5 -compiler.misc.kindname.variable.method=\ -\u53d8\u91cf\u3001\u65b9\u6cd5 -compiler.misc.kindname.value.method=\ -\u503c\u3001\u65b9\u6cd5 -compiler.misc.kindname.class=\ -\u7c7b -compiler.misc.kindname.variable.class=\ -\u53d8\u91cf\u3001\u7c7b -compiler.misc.kindname.value.class=\ -\u503c\u3001\u7c7b -compiler.misc.kindname.method.class=\ -\u65b9\u6cd5\u3001\u7c7b -compiler.misc.kindname.variable.method.class=\ -\u53d8\u91cf\u3001\u65b9\u6cd5\u3001\u7c7b -compiler.misc.kindname.value.method.class=\ -\u503c\u3001\u65b9\u6cd5\u3001\u7c7b -compiler.misc.kindname.package=\ -\u8f6f\u4ef6\u5305 -compiler.misc.kindname.variable.package=\ -\u53d8\u91cf\u3001\u8f6f\u4ef6\u5305 -compiler.misc.kindname.value.package=\ -\u503c\u3001\u8f6f\u4ef6\u5305 -compiler.misc.kindname.method.package=\ -\u65b9\u6cd5\u3001\u8f6f\u4ef6\u5305 -compiler.misc.kindname.variable.method.package=\ -\u53d8\u91cf\u3001\u65b9\u6cd5\u3001\u8f6f\u4ef6\u5305 -compiler.misc.kindname.value.method.package=\ -\u503c\u3001\u65b9\u6cd5\u3001\u8f6f\u4ef6\u5305 -compiler.misc.kindname.class.package=\ -\u7c7b\u3001\u8f6f\u4ef6\u5305 -compiler.misc.kindname.variable.class.package=\ -\u53d8\u91cf\u3001\u7c7b\u3001\u8f6f\u4ef6\u5305 -compiler.misc.kindname.value.class.package=\ -\u503c\u3001\u7c7b\u3001\u8f6f\u4ef6\u5305 -compiler.misc.kindname.method.class.package=\ -\u65b9\u6cd5\u3001\u7c7b\u3001\u8f6f\u4ef6\u5305 -compiler.misc.kindname.variable.method.class.package=\ -\u53d8\u91cf\u3001\u65b9\u6cd5\u3001\u7c7b\u3001\u8f6f\u4ef6\u5305 -compiler.misc.kindname.value.method.class.package=\ -\u503c\u3001\u65b9\u6cd5\u3001\u7c7b\u3001\u8f6f\u4ef6\u5305 - +compiler.misc.kindname.annotation=@interface +compiler.misc.kindname.constructor=\u6784\u9020\u51fd\u6570 +compiler.misc.kindname.interface=\u63a5\u53e3 +compiler.misc.kindname.static=\u9759\u6001 +compiler.misc.kindname.type.variable=\u7c7b\u578b\u53d8\u91cf +compiler.misc.kindname.type.variable.bound=\u7c7b\u578b\u53d8\u91cf\u7684\u9650\u5236\u8303\u56f4 +compiler.misc.kindname.variable=\u53d8\u91cf +compiler.misc.kindname.value=\u503c +compiler.misc.kindname.method=\u65b9\u6cd5 +compiler.misc.kindname.class=\u7c7b +compiler.misc.kindname.package=\u8f6f\u4ef6\u5305 ##### -compiler.err.override.static=\ -{0}\uff1b\u8986\u76d6\u7684\u65b9\u6cd5\u4e3a\u9759\u6001 -compiler.err.override.meth=\ -{0}\uff1b\u88ab\u8986\u76d6\u7684\u65b9\u6cd5\u4e3a {1} +compiler.misc.no.args=\u6ca1\u6709\u53c2\u6570 -compiler.err.override.meth.doesnt.throw=\ -{0}\uff1b\u88ab\u8986\u76d6\u7684\u65b9\u6cd5\u4e0d\u629b\u51fa {1} +compiler.err.override.static={0}\n\u8986\u76d6\u7684\u65b9\u6cd5\u4e3a\u9759\u6001 +compiler.err.override.meth={0}\n\u8986\u76d6\u7684\u65b9\u6cd5\u4e3a {1} + +compiler.err.override.meth.doesnt.throw={0}\n\u88ab\u8986\u76d6\u7684\u65b9\u6cd5\u4e0d\u629b\u51fa {1} # In the following string {1} is a space separated list of Java Keywords, as # they would have been declared in the source code -compiler.err.override.weaker.access=\ -{0}\uff1b\u6b63\u5728\u5c1d\u8bd5\u6307\u5b9a\u66f4\u4f4e\u7684\u8bbf\u95ee\u6743\u9650\uff1b\u4e3a {1} +compiler.err.override.weaker.access={0}\n\u6b63\u5728\u5c1d\u8bd5\u6307\u5b9a\u66f4\u4f4e\u7684\u8bbf\u95ee\u6743\u9650\uff1b\u4e3a {1} -compiler.misc.override.incompatible.ret=\ -{0}\uff1b\u6b63\u5728\u5c1d\u8bd5\u4f7f\u7528\u4e0d\u517c\u5bb9\u7684\u8fd4\u56de\u7c7b\u578b +compiler.err.override.incompatible.ret={0}\n\u8fd4\u56de\u7c7b\u578b {1} \u4e0e {2} \u4e0d\u517c\u5bb9 -compiler.misc.override.unchecked.ret=\ -{0}\uff1b\u8fd4\u56de\u7c7b\u578b\u9700\u8981\u672a\u7ecf\u68c0\u67e5\u7684\u8f6c\u6362 +compiler.warn.override.unchecked.ret=[unchecked] {0}\n\u8fd4\u56de\u7c7b\u578b\u9700\u8981\u4ece {1} \u5230 {2} \u7684\u672a\u7ecf\u68c0\u67e5\u8f6c\u6362 + +compiler.warn.override.unchecked.thrown=[unchecked] {0}\n\u88ab\u8986\u76d6\u7684\u65b9\u6cd5\u4e0d\u629b\u51fa {1} ## The following are all possible strings for the first argument ({0}) of the ## above strings. -compiler.misc.cant.override=\ -{1} \u4e2d\u7684 {0} \u65e0\u6cd5\u8986\u76d6 {3} \u4e2d\u7684 {2} -compiler.misc.cant.implement=\ -{1} \u4e2d\u7684 {0} \u65e0\u6cd5\u5b9e\u73b0 {3} \u4e2d\u7684 {2} -compiler.misc.clashes.with=\ -{1} \u4e2d\u7684 {0} \u4e0e {3} \u4e2d\u7684 {2} \u51b2\u7a81 -compiler.misc.unchecked.override=\ -{1} \u4e2d\u7684 {0} \u8986\u76d6\u4e86 {3} \u4e2d\u7684 {2} -compiler.misc.unchecked.implement=\ -{1} \u4e2d\u7684 {0} \u5b9e\u73b0\u4e86 {3} \u4e2d\u7684 {2} -compiler.misc.unchecked.clash.with=\ -{1} \u4e2d\u7684 {0} \u8986\u76d6\u4e86 {3} \u4e2d\u7684 {2} -compiler.misc.varargs.override=\ -{1} \u4e2d\u7684 {0} \u8986\u76d6\u4e86 {3} \u4e2d\u7684 {2} -compiler.misc.varargs.implement=\ -{1} \u4e2d\u7684 {0} \u5b9e\u73b0\u4e86 {3} \u4e2d\u7684 {2} -compiler.misc.varargs.clash.with=\ -{1} \u4e2d\u7684 {0} \u8986\u76d6\u4e86 {3} \u4e2d\u7684 {2} +compiler.misc.cant.override={1} \u4e2d\u7684 {0} \u65e0\u6cd5\u8986\u76d6 {3} \u4e2d\u7684 {2} +compiler.misc.cant.implement={1} \u4e2d\u7684 {0} \u65e0\u6cd5\u5b9e\u73b0 {3} \u4e2d\u7684 {2} +compiler.misc.clashes.with={1} \u4e2d\u7684 {0} \u4e0e {3} \u4e2d\u7684 {2} \u51b2\u7a81 +compiler.misc.unchecked.override={1} \u4e2d\u7684 {0} \u8986\u76d6\u4e86 {3} \u4e2d\u7684 {2} +compiler.misc.unchecked.implement={1} \u4e2d\u7684 {0} \u5b9e\u73b0\u4e86 {3} \u4e2d\u7684 {2} +compiler.misc.unchecked.clash.with={1} \u4e2d\u7684 {0} \u8986\u76d6\u4e86 {3} \u4e2d\u7684 {2} +compiler.misc.varargs.override={1} \u4e2d\u7684 {0} \u8986\u76d6\u4e86 {3} \u4e2d\u7684 {2} +compiler.misc.varargs.implement={1} \u4e2d\u7684 {0} \u5b9e\u73b0\u4e86 {3} \u4e2d\u7684 {2} +compiler.misc.varargs.clash.with={1} \u4e2d\u7684 {0} \u8986\u76d6\u4e86 {3} \u4e2d\u7684 {2} ######################################## # Diagnostics for language feature changes ######################################## -compiler.err.unsupported.fp.lit=\ -\u5728 -source 5 \u4e4b\u524d\uff0c\u4e0d\u652f\u6301\u5341\u516d\u8fdb\u5236\u6d6e\u70b9\u5b57\u9762\u503c +compiler.err.unsupported.fp.lit=-source {0} \u4e2d\u4e0d\u652f\u6301\u5341\u516d\u8fdb\u5236\u6d6e\u70b9\u5b57\u9762\u503c\n\uff08\u8bf7\u4f7f\u7528 -source 5 \u6216\u66f4\u9ad8\u7248\u672c\u4ee5\u542f\u7528\u5341\u516d\u8fdb\u5236\u6d6e\u70b9\u5b57\u9762\u503c\uff09 -compiler.warn.enum.as.identifier=\ -\u4ece\u53d1\u884c\u7248 5 \u5f00\u59cb\uff0c"enum" \u4e3a\u5173\u952e\u5b57\uff0c\u800c\u4e0d\u7528\u4f5c\u6807\u8bc6\u7b26\n\ -\uff08\u8bf7\u4f7f\u7528 -source 5 \u6216\u66f4\u9ad8\u7248\u672c\u4ee5\u5c06 "enum"' \u7528\u4f5c\u5173\u952e\u5b57\uff09 +compiler.err.unsupported.binary.lit=-source {0} \u4e2d\u4e0d\u652f\u6301\u4e8c\u8fdb\u5236\u5b57\u9762\u503c\n\uff08\u8bf7\u4f7f\u7528 -source 7 \u6216\u66f4\u9ad8\u7248\u672c\u4ee5\u542f\u7528\u4e8c\u8fdb\u5236\u5b57\u9762\u503c\uff09 -compiler.warn.assert.as.identifier=\ -\u4ece\u7248\u672c 1.4 \u5f00\u59cb\uff0c''assert'' \u662f\u4e00\u4e2a\u5173\u952e\u5b57\uff0c\u4f46\u4e0d\u80fd\u7528\u4f5c\u6807\u8bc6\u7b26\n\ -\uff08\u8bf7\u4f7f\u7528 -source 1.4 \u6216\u66f4\u9ad8\u7248\u672c\u4ee5\u4fbf\u5c06 ''assert'' \u7528\u4f5c\u5173\u952e\u5b57\uff09 +compiler.err.unsupported.underscore.lit=-source {0} \u4e2d\u4e0d\u652f\u6301\u5b57\u9762\u503c\u4f7f\u7528\u4e0b\u5212\u7ebf\n\uff08\u8bf7\u4f7f\u7528 -source 7 \u6216\u66f4\u9ad8\u7248\u672c\u4ee5\u5141\u8bb8\u5b57\u9762\u503c\u4f7f\u7528\u4e0b\u5212\u7ebf\uff09 -compiler.err.enum.as.identifier=\ -\u4ece\u53d1\u884c\u7248 5 \u5f00\u59cb\uff0c"enum" \u4e3a\u5173\u952e\u5b57\uff0c\u800c\u4e0d\u7528\u4f5c\u6807\u8bc6\u7b26\n\ -\uff08\u8bf7\u4f7f\u7528 -source 1.4 \u6216\u66f4\u4f4e\u7248\u672c\u4ee5\u5c06 "enum" \u7528\u4f5c\u6807\u8bc6\u7b26\uff09 +compiler.warn.enum.as.identifier=\u4ece\u53d1\u884c\u7248 5 \u5f00\u59cb\uff0c"enum" \u4e3a\u5173\u952e\u5b57\uff0c\u800c\u4e0d\u7528\u4f5c\u6807\u8bc6\u7b26\n\uff08\u8bf7\u4f7f\u7528 -source 5 \u6216\u66f4\u9ad8\u7248\u672c\u4ee5\u5c06 "enum"' \u7528\u4f5c\u5173\u952e\u5b57\uff09 -compiler.err.assert.as.identifier=\ -\u4ece\u7248\u672c 1.4 \u5f00\u59cb\uff0c''assert'' \u662f\u4e00\u4e2a\u5173\u952e\u5b57\uff0c\u4f46\u4e0d\u80fd\u7528\u4f5c\u6807\u8bc6\u7b26\n\ -\uff08\u8bf7\u4f7f\u7528 -source 1.3 \u6216\u66f4\u4f4e\u7248\u672c\u4ee5\u4fbf\u5c06 ''assert'' \u7528\u4f5c\u6807\u8bc6\u7b26\uff09 +compiler.warn.assert.as.identifier=\u4ece\u7248\u672c 1.4 \u5f00\u59cb\uff0c''assert'' \u662f\u4e00\u4e2a\u5173\u952e\u5b57\uff0c\u4f46\u4e0d\u80fd\u7528\u4f5c\u6807\u8bc6\u7b26\n\uff08\u8bf7\u4f7f\u7528 -source 1.4 \u6216\u66f4\u9ad8\u7248\u672c\u4ee5\u4fbf\u5c06 ''assert'' \u7528\u4f5c\u5173\u952e\u5b57\uff09 -compiler.err.generics.not.supported.in.source=\ --source {0} \u4e2d\u4e0d\u652f\u6301\u6cdb\u578b\n\ -\uff08\u8bf7\u4f7f\u7528 -source 5 \u6216\u66f4\u9ad8\u7248\u672c\u4ee5\u542f\u7528\u6cdb\u578b\uff09 +compiler.err.enum.as.identifier=\u4ece\u53d1\u884c\u7248 5 \u5f00\u59cb\uff0c"enum" \u4e3a\u5173\u952e\u5b57\uff0c\u800c\u4e0d\u7528\u4f5c\u6807\u8bc6\u7b26\n\uff08\u8bf7\u4f7f\u7528 -source 1.4 \u6216\u66f4\u4f4e\u7248\u672c\u4ee5\u5c06 "enum" \u7528\u4f5c\u6807\u8bc6\u7b26\uff09 -compiler.err.varargs.not.supported.in.source=\ --source {0} \u4e2d\u4e0d\u652f\u6301 variable-arity \u65b9\u6cd5\n\ -\uff08\u8bf7\u4f7f\u7528 -source 5 \u6216\u66f4\u9ad8\u7248\u672c\u4ee5\u542f\u7528 variable-arity \u65b9\u6cd5\uff09 +compiler.err.assert.as.identifier=\u4ece\u7248\u672c 1.4 \u5f00\u59cb\uff0c''assert'' \u662f\u4e00\u4e2a\u5173\u952e\u5b57\uff0c\u4f46\u4e0d\u80fd\u7528\u4f5c\u6807\u8bc6\u7b26\n\uff08\u8bf7\u4f7f\u7528 -source 1.3 \u6216\u66f4\u4f4e\u7248\u672c\u4ee5\u4fbf\u5c06 ''assert'' \u7528\u4f5c\u6807\u8bc6\u7b26\uff09 -compiler.err.annotations.not.supported.in.source=\ --source {0} \u4e2d\u4e0d\u652f\u6301\u6ce8\u91ca\n\ -\uff08\u8bf7\u4f7f\u7528 -source 5 \u6216\u66f4\u9ad8\u7248\u672c\u4ee5\u542f\u7528\u6ce8\u91ca\uff09 +compiler.err.generics.not.supported.in.source=-source {0} \u4e2d\u4e0d\u652f\u6301\u6cdb\u578b\n\uff08\u8bf7\u4f7f\u7528 -source 5 \u6216\u66f4\u9ad8\u7248\u672c\u4ee5\u542f\u7528\u6cdb\u578b\uff09 -compiler.err.foreach.not.supported.in.source=\ --source {0} \u4e2d\u4e0d\u652f\u6301 for-each \u5faa\u73af\n\ -\uff08\u8bf7\u4f7f\u7528 -source 5 \u6216\u66f4\u9ad8\u7248\u672c\u4ee5\u542f\u7528 for-each \u5faa\u73af\uff09 +compiler.err.varargs.not.supported.in.source=-source {0} \u4e2d\u4e0d\u652f\u6301 variable-arity \u65b9\u6cd5\n\uff08\u8bf7\u4f7f\u7528 -source 5 \u6216\u66f4\u9ad8\u7248\u672c\u4ee5\u542f\u7528 variable-arity \u65b9\u6cd5\uff09 + +compiler.err.annotations.not.supported.in.source=-source {0} \u4e2d\u4e0d\u652f\u6301\u6ce8\u91ca\n\uff08\u8bf7\u4f7f\u7528 -source 5 \u6216\u66f4\u9ad8\u7248\u672c\u4ee5\u542f\u7528\u6ce8\u91ca\uff09 + +compiler.err.type.annotations.not.supported.in.source=-source {0} \u4e2d\u4e0d\u652f\u6301\u7c7b\u578b\u6ce8\u91ca\n\uff08\u8bf7\u4f7f\u7528 -source 7 \u6216\u66f4\u9ad8\u7248\u672c\u4ee5\u542f\u7528\u7c7b\u578b\u6ce8\u91ca\uff09 + +compiler.err.foreach.not.supported.in.source=-source {0} \u4e2d\u4e0d\u652f\u6301 for-each \u5faa\u73af\n\uff08\u8bf7\u4f7f\u7528 -source 5 \u6216\u66f4\u9ad8\u7248\u672c\u4ee5\u542f\u7528 for-each \u5faa\u73af\uff09 + +compiler.err.static.import.not.supported.in.source=-source {0} \u4e2d\u4e0d\u652f\u6301\u9759\u6001\u5bfc\u5165\u58f0\u660e\n\uff08\u8bf7\u4f7f\u7528 -source 5 \u6216\u66f4\u9ad8\u7248\u672c\u4ee5\u542f\u7528\u9759\u6001\u5bfc\u5165\u58f0\u660e\uff09 + +compiler.err.enums.not.supported.in.source=-source {0} \u4e2d\u4e0d\u652f\u6301\u679a\u4e3e\n\uff08\u8bf7\u4f7f\u7528 -source 5 \u6216\u66f4\u9ad8\u7248\u672c\u4ee5\u542f\u7528\u679a\u4e3e\uff09 + +compiler.err.diamond.not.supported.in.source=-source {0} \u4e2d\u4e0d\u652f\u6301\u83f1\u5f62\u8fd0\u7b97\u7b26\n\uff08\u8bf7\u4f7f\u7528 -source 7 \u6216\u66f4\u9ad8\u7248\u672c\u4ee5\u542f\u7528\u83f1\u5f62\u8fd0\u7b97\u7b26\uff09 + +compiler.err.string.switch.not.supported.in.source=-source {0} \u4e2d\u4e0d\u652f\u6301 switch \u4f7f\u7528\u5b57\u7b26\u4e32\n\uff08\u8bf7\u4f7f\u7528 -source 7 \u6216\u66f4\u9ad8\u7248\u672c\u4ee5\u5141\u8bb8 switch \u4f7f\u7528\u5b57\u7b26\u4e32\uff09 + +######################################## +# Diagnostics for where clause implementation +# used by the RichDiagnosticFormatter. +######################################## + +compiler.misc.type.null= + +# X#n (where n is an int id) is disambiguated tvar name +compiler.misc.type.var={0}#{1} + +# CAP#n (where n is an int id) is an abbreviation for 'captured type' +compiler.misc.captured.type=CAP#{0} + +# (where n is an int id) is an abbreviation for 'intersection type' +compiler.misc.intersection.type=INT#{0} + +# where clause for captured type: contains upper ('extends {1}') and lower +# ('super {2}') bound along with the wildcard that generated this captured type ({3}) +compiler.misc.where.captured={0} \u901a\u8fc7\u6355\u83b7 {3} \u6269\u5c55 {1} \u8d85\u7ea7\u7c7b\u578b\uff1a{2} + +# compact where clause for captured type: contains upper ('extends {1}') along +# with the wildcard that generated this captured type ({3}) +compiler.misc.where.captured.1={0} \u901a\u8fc7\u6355\u83b7 {3} \u6269\u5c55 {1} + +# where clause for type variable: contains upper bound(s) ('extends {1}') along with +# the kindname ({2}) and location ({3}) in which the typevar has been declared +compiler.misc.where.typevar={0} \u6269\u5c55 {2} {3} \u4e2d\u58f0\u660e\u7684 {1} + +# compact where clause for type variable: contains the kindname ({2}) and location ({3}) +# in which the typevar has been declared +compiler.misc.where.typevar.1={2} {3} \u4e2d\u58f0\u660e\u7684 {0} + +# where clause for type variable: contains all the upper bound(s) ('extends {1}') +# of this intersection type +compiler.misc.where.intersection={0} \u6269\u5c55 {1} + +### Where clause headers ### +compiler.misc.where.description.captured=\u5176\u4e2d {0} \u662f\u4e00\u4e2a\u65b0\u7684\u7c7b\u578b\u53d8\u91cf\uff1a +compiler.misc.where.description.typevar=\u5176\u4e2d {0} \u662f\u4e00\u4e2a\u7c7b\u578b\u53d8\u91cf\uff1a +compiler.misc.where.description.intersection=\u5176\u4e2d {0} \u662f\u4ea4\u96c6\u7c7b\u578b\uff1a +compiler.misc.where.description.captured.1=\u5176\u4e2d {0} \u662f\u65b0\u7684\u7c7b\u578b\u53d8\u91cf\uff1a +compiler.misc.where.description.typevar.1=\u5176\u4e2d {0} \u662f\u7c7b\u578b\u53d8\u91cf\uff1a +compiler.misc.where.description.intersection.1=\u5176\u4e2d {0} \u662f\u4ea4\u96c6\u7c7b\u578b\uff1a -compiler.err.static.import.not.supported.in.source=\ --source {0} \u4e2d\u4e0d\u652f\u6301\u9759\u6001\u5bfc\u5165\u58f0\u660e\n\ -\uff08\u8bf7\u4f7f\u7528 -source 5 \u6216\u66f4\u9ad8\u7248\u672c\u4ee5\u542f\u7528\u9759\u6001\u5bfc\u5165\u58f0\u660e\uff09 -compiler.err.enums.not.supported.in.source=\ --source {0} \u4e2d\u4e0d\u652f\u6301\u679a\u4e3e\n\ -\uff08\u8bf7\u4f7f\u7528 -source 5 \u6216\u66f4\u9ad8\u7248\u672c\u4ee5\u542f\u7528\u679a\u4e3e\uff09 diff --git a/langtools/src/share/classes/com/sun/tools/javac/resources/javac_ja.properties b/langtools/src/share/classes/com/sun/tools/javac/resources/javac_ja.properties index 85164f408d6..3e4235376cc 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/resources/javac_ja.properties +++ b/langtools/src/share/classes/com/sun/tools/javac/resources/javac_ja.properties @@ -1,5 +1,5 @@ # -# Copyright 1999-2006 Sun Microsystems, Inc. All Rights Reserved. +# Copyright 1999-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 @@ -25,184 +25,100 @@ ## standard options -javac.opt.g=\ - \u3059\u3079\u3066\u306e\u30c7\u30d0\u30c3\u30b0\u60c5\u5831\u3092\u751f\u6210\u3059\u308b -javac.opt.g.none=\ - \u30c7\u30d0\u30c3\u30b0\u60c5\u5831\u3092\u751f\u6210\u3057\u306a\u3044 -javac.opt.g.lines.vars.source=\ - \u3044\u304f\u3064\u304b\u306e\u30c7\u30d0\u30c3\u30b0\u60c5\u5831\u3060\u3051\u3092\u751f\u6210\u3059\u308b -javac.opt.nowarn=\ - \u8b66\u544a\u3092\u767a\u751f\u3055\u305b\u306a\u3044 -javac.opt.verbose=\ - \u30b3\u30f3\u30d1\u30a4\u30e9\u306e\u52d5\u4f5c\u306b\u3064\u3044\u3066\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u51fa\u529b\u3059\u308b -javac.opt.deprecation=\ - \u63a8\u5968\u3055\u308c\u306a\u3044 API \u304c\u4f7f\u7528\u3055\u308c\u3066\u3044\u308b\u30bd\u30fc\u30b9\u306e\u4f4d\u7f6e\u3092\u51fa\u529b\u3059\u308b -javac.opt.classpath=\ - \u30e6\u30fc\u30b6\u30fc\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u304a\u3088\u3073\u6ce8\u91c8\u30d7\u30ed\u30bb\u30c3\u30b5\u3092\u691c\u7d22\u3059\u308b\u4f4d\u7f6e\u3092\u6307\u5b9a\u3059\u308b -javac.opt.sourcepath=\ - \u5165\u529b\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22\u3059\u308b\u4f4d\u7f6e\u3092\u6307\u5b9a\u3059\u308b -javac.opt.bootclasspath=\ - \u30d6\u30fc\u30c8\u30b9\u30c8\u30e9\u30c3\u30d7\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u306e\u4f4d\u7f6e\u3092\u7f6e\u304d\u63db\u3048\u308b -javac.opt.Xbootclasspath.p=\ - \u30d6\u30fc\u30c8\u30b9\u30c8\u30e9\u30c3\u30d7\u30af\u30e9\u30b9\u306b\u4ed8\u52a0\u3059\u308b -javac.opt.Xbootclasspath.a=\ - \u30d6\u30fc\u30c8\u30b9\u30c8\u30e9\u30c3\u30d7\u30af\u30e9\u30b9\u306b\u8ffd\u52a0\u3059\u308b -javac.opt.endorseddirs=\ - \u63a8\u5968\u898f\u683c\u30d1\u30b9\u306e\u4f4d\u7f6e\u3092\u7f6e\u304d\u63db\u3048\u308b -javac.opt.extdirs=\ - \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6e08\u307f\u62e1\u5f35\u6a5f\u80fd\u306e\u4f4d\u7f6e\u3092\u7f6e\u304d\u63db\u3048\u308b -javac.opt.processorpath=\ - \u6ce8\u91c8\u30d7\u30ed\u30bb\u30c3\u30b5\u3092\u691c\u7d22\u3059\u308b\u4f4d\u7f6e\u3092\u6307\u5b9a\u3059\u308b -javac.opt.processor=\ - \u5b9f\u884c\u3059\u308b\u6ce8\u91c8\u30d7\u30ed\u30bb\u30c3\u30b5\u306e\u540d\u524d\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u691c\u51fa\u51e6\u7406\u3092\u30d0\u30a4\u30d1\u30b9 -javac.opt.proc.none.only=\ - \u6ce8\u91c8\u51e6\u7406\u3084\u30b3\u30f3\u30d1\u30a4\u30eb\u3092\u5b9f\u884c\u3059\u308b\u304b\u3069\u3046\u304b\u3092\u5236\u5fa1\u3057\u307e\u3059\u3002 -javac.opt.d=\ - \u751f\u6210\u3055\u308c\u305f\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u683c\u7d0d\u3059\u308b\u4f4d\u7f6e\u3092\u6307\u5b9a\u3059\u308b -javac.opt.sourceDest=\ - \u751f\u6210\u3055\u308c\u305f\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u683c\u7d0d\u3059\u308b\u5834\u6240\u3092\u6307\u5b9a\u3059\u308b -javac.opt.J=\ - \u3092\u5b9f\u884c\u30b7\u30b9\u30c6\u30e0\u306b\u76f4\u63a5\u6e21\u3059 -javac.opt.encoding=\ - \u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u304c\u4f7f\u7528\u3059\u308b\u6587\u5b57\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3092\u6307\u5b9a\u3059\u308b -javac.opt.target=\ - \u7279\u5b9a\u306e VM \u30d0\u30fc\u30b8\u30e7\u30f3\u7528\u306e\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u751f\u6210\u3059\u308b -javac.opt.source=\ - \u6307\u5b9a\u3055\u308c\u305f\u30ea\u30ea\u30fc\u30b9\u3068\u30bd\u30fc\u30b9\u306e\u4e92\u63db\u6027\u3092\u4fdd\u3064 -javac.opt.A=\ - \u6ce8\u91c8\u30d7\u30ed\u30bb\u30c3\u30b5\u306b\u6e21\u3055\u308c\u308b\u30aa\u30d7\u30b7\u30e7\u30f3 -javac.opt.implicit=\ - \u6697\u9ed9\u7684\u306b\u53c2\u7167\u3055\u308c\u308b\u30d5\u30a1\u30a4\u30eb\u306b\u3064\u3044\u3066\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u751f\u6210\u3059\u308b\u304b\u3069\u3046\u304b\u3092\u6307\u5b9a\u3059\u308b -javac.opt.arg.class=\ - -javac.opt.arg.class.list=\ - [,,...] -javac.opt.arg.flag=\ - -javac.opt.arg.key.equals.value=\ - key[=value] -javac.opt.arg.path=\ - -javac.opt.arg.dirs=\ - -javac.opt.arg.directory=\ - -javac.opt.arg.encoding=\ - -javac.opt.arg.release=\ - -javac.opt.arg.number=\ - +javac.opt.g=\u3059\u3079\u3066\u306e\u30c7\u30d0\u30c3\u30b0\u60c5\u5831\u3092\u751f\u6210\u3059\u308b +javac.opt.g.none=\u30c7\u30d0\u30c3\u30b0\u60c5\u5831\u3092\u751f\u6210\u3057\u306a\u3044 +javac.opt.g.lines.vars.source=\u3044\u304f\u3064\u304b\u306e\u30c7\u30d0\u30c3\u30b0\u60c5\u5831\u3060\u3051\u3092\u751f\u6210\u3059\u308b +javac.opt.nowarn=\u8b66\u544a\u3092\u767a\u751f\u3055\u305b\u306a\u3044 +javac.opt.verbose=\u30b3\u30f3\u30d1\u30a4\u30e9\u306e\u52d5\u4f5c\u306b\u3064\u3044\u3066\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u51fa\u529b\u3059\u308b +javac.opt.deprecation=\u63a8\u5968\u3055\u308c\u306a\u3044 API \u304c\u4f7f\u7528\u3055\u308c\u3066\u3044\u308b\u30bd\u30fc\u30b9\u306e\u4f4d\u7f6e\u3092\u51fa\u529b\u3059\u308b +javac.opt.classpath=\u30e6\u30fc\u30b6\u30fc\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u304a\u3088\u3073\u6ce8\u91c8\u30d7\u30ed\u30bb\u30c3\u30b5\u3092\u691c\u7d22\u3059\u308b\u4f4d\u7f6e\u3092\u6307\u5b9a\u3059\u308b +javac.opt.sourcepath=\u5165\u529b\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22\u3059\u308b\u4f4d\u7f6e\u3092\u6307\u5b9a\u3059\u308b +javac.opt.bootclasspath=\u30d6\u30fc\u30c8\u30b9\u30c8\u30e9\u30c3\u30d7\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u306e\u4f4d\u7f6e\u3092\u7f6e\u304d\u63db\u3048\u308b +javac.opt.Xbootclasspath.p=\u30d6\u30fc\u30c8\u30b9\u30c8\u30e9\u30c3\u30d7\u30af\u30e9\u30b9\u306b\u4ed8\u52a0\u3059\u308b +javac.opt.Xbootclasspath.a=\u30d6\u30fc\u30c8\u30b9\u30c8\u30e9\u30c3\u30d7\u30af\u30e9\u30b9\u306b\u8ffd\u52a0\u3059\u308b +javac.opt.endorseddirs=\u63a8\u5968\u898f\u683c\u30d1\u30b9\u306e\u4f4d\u7f6e\u3092\u7f6e\u304d\u63db\u3048\u308b +javac.opt.extdirs=\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6e08\u307f\u62e1\u5f35\u6a5f\u80fd\u306e\u4f4d\u7f6e\u3092\u7f6e\u304d\u63db\u3048\u308b +javac.opt.processorpath=\u6ce8\u91c8\u30d7\u30ed\u30bb\u30c3\u30b5\u3092\u691c\u7d22\u3059\u308b\u4f4d\u7f6e\u3092\u6307\u5b9a\u3059\u308b +javac.opt.processor=\u5b9f\u884c\u3059\u308b\u6ce8\u91c8\u30d7\u30ed\u30bb\u30c3\u30b5\u306e\u540d\u524d\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u691c\u51fa\u51e6\u7406\u3092\u30d0\u30a4\u30d1\u30b9 +javac.opt.proc.none.only=\u6ce8\u91c8\u51e6\u7406\u3084\u30b3\u30f3\u30d1\u30a4\u30eb\u3092\u5b9f\u884c\u3059\u308b\u304b\u3069\u3046\u304b\u3092\u5236\u5fa1\u3057\u307e\u3059\u3002 +javac.opt.d=\u751f\u6210\u3055\u308c\u305f\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u683c\u7d0d\u3059\u308b\u4f4d\u7f6e\u3092\u6307\u5b9a\u3059\u308b +javac.opt.sourceDest=\u751f\u6210\u3055\u308c\u305f\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u683c\u7d0d\u3059\u308b\u5834\u6240\u3092\u6307\u5b9a\u3059\u308b +javac.opt.J= \u3092\u5b9f\u884c\u30b7\u30b9\u30c6\u30e0\u306b\u76f4\u63a5\u6e21\u3059 +javac.opt.encoding=\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u304c\u4f7f\u7528\u3059\u308b\u6587\u5b57\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3092\u6307\u5b9a\u3059\u308b +javac.opt.target=\u7279\u5b9a\u306e VM \u30d0\u30fc\u30b8\u30e7\u30f3\u7528\u306e\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u751f\u6210\u3059\u308b +javac.opt.source=\u6307\u5b9a\u3055\u308c\u305f\u30ea\u30ea\u30fc\u30b9\u3068\u30bd\u30fc\u30b9\u306e\u4e92\u63db\u6027\u3092\u4fdd\u3064 +javac.opt.Werror=\u8b66\u544a\u304c\u767a\u751f\u3057\u305f\u5834\u5408\u306b\u30b3\u30f3\u30d1\u30a4\u30eb\u3092\u7d42\u4e86\u3059\u308b +javac.opt.A=\u6ce8\u91c8\u30d7\u30ed\u30bb\u30c3\u30b5\u306b\u6e21\u3055\u308c\u308b\u30aa\u30d7\u30b7\u30e7\u30f3 +javac.opt.implicit=\u6697\u9ed9\u7684\u306b\u53c2\u7167\u3055\u308c\u308b\u30d5\u30a1\u30a4\u30eb\u306b\u3064\u3044\u3066\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u751f\u6210\u3059\u308b\u304b\u3069\u3046\u304b\u3092\u6307\u5b9a\u3059\u308b +javac.opt.arg.class= +javac.opt.arg.class.list=[,,...] +javac.opt.arg.flag= +javac.opt.arg.key.equals.value=key[=value] +javac.opt.arg.path= +javac.opt.arg.dirs= +javac.opt.arg.directory= +javac.opt.arg.encoding= +javac.opt.arg.release= +javac.opt.arg.number= ## extended options -javac.opt.maxerrs=\ - \u51fa\u529b\u3059\u308b\u30a8\u30e9\u30fc\u306e\u6700\u5927\u6570\u3092\u8a2d\u5b9a\u3059\u308b -javac.opt.maxwarns=\ - \u51fa\u529b\u3059\u308b\u8b66\u544a\u306e\u6700\u5927\u6570\u3092\u8a2d\u5b9a\u3059\u308b -javac.opt.nogj=\ - \u8a00\u8a9e\u306e\u6c4e\u7528\u6027\u3092\u53d7\u3051\u4ed8\u3051\u306a\u3044 -javac.opt.moreinfo=\ - \u578b\u5909\u6570\u306e\u62e1\u5f35\u60c5\u5831\u3092\u51fa\u529b\u3059\u308b -javac.opt.printflat=\ - \u5185\u90e8\u30af\u30e9\u30b9\u306e\u5909\u63db\u5f8c\u306b\u62bd\u8c61\u69cb\u6587\u30c4\u30ea\u30fc\u3092\u51fa\u529b\u3059\u308b -javac.opt.printsearch=\ - \u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u306e\u691c\u7d22\u4f4d\u7f6e\u60c5\u5831\u3092\u51fa\u529b\u3059\u308b -javac.opt.prompt=\ - \u5404\u30a8\u30e9\u30fc\u3067\u505c\u6b62\u3059\u308b -javac.opt.retrofit=\ - \u65e2\u5b58\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u6c4e\u7528\u578b\u3067\u7d44\u307f\u66ff\u3048\u308b -javac.opt.s=\ - \u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u306e\u4ee3\u308f\u308a\u306b java \u30bd\u30fc\u30b9\u3092\u767a\u884c\u3059\u308b -javac.opt.scramble=\ - \u30d0\u30a4\u30c8\u30b3\u30fc\u30c9\u306e private \u8b58\u5225\u5b50\u306b\u30b9\u30af\u30e9\u30f3\u30d6\u30eb\u3092\u304b\u3051\u308b -javac.opt.scrambleall=\ - \u30d0\u30a4\u30c8\u30b3\u30fc\u30c9\u306e package \u53ef\u8996\u8b58\u5225\u5b50\u306b\u30b9\u30af\u30e9\u30f3\u30d6\u30eb\u3092\u304b\u3051\u308b -javac.opt.version=\ - \u30d0\u30fc\u30b8\u30e7\u30f3\u60c5\u5831 -javac.opt.arg.pathname=\ - -javac.opt.arg.file=\ - -javac.opt.Xlint=\ - \u63a8\u5968\u306e\u8b66\u544a\u3092\u6709\u52b9\u306b\u3059\u308b -javac.opt.Xlint.suboptlist=\ - \u7279\u5b9a\u306e\u8b66\u544a\u3092\u6709\u52b9\u307e\u305f\u306f\u7121\u52b9\u306b\u3059\u308b -javac.opt.Xstdout=\ - \u6a19\u6e96\u51fa\u529b\u3092\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3059\u308b -javac.opt.X=\ - \u975e\u6a19\u6e96\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u6982\u8981\u3092\u51fa\u529b\u3059\u308b -javac.opt.help=\ - \u6a19\u6e96\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u6982\u8981\u3092\u51fa\u529b\u3059\u308b -javac.opt.print=\ - \u6307\u5b9a\u3057\u305f\u578b\u306e\u30c6\u30ad\u30b9\u30c8\u8868\u793a\u3092\u51fa\u529b\u3059\u308b -javac.opt.printRounds=\ - \u6ce8\u91c8\u51e6\u7406\u306e\u5f80\u5fa9\u306b\u3064\u3044\u3066\u306e\u60c5\u5831\u3092\u5370\u5237\u3059\u308b -javac.opt.printProcessorInfo=\ - \u30d7\u30ed\u30bb\u30c3\u30b5\u304c\u51e6\u7406\u3092\u4f9d\u983c\u3055\u308c\u308b\u6ce8\u91c8\u306b\u3064\u3044\u3066\u306e\u60c5\u5831\u3092\u5370\u5237\u3059\u308b -javac.opt.prefer=\ - \u6697\u9ed9\u7684\u306b\u30b3\u30f3\u30d1\u30a4\u30eb\u3055\u308c\u308b\u30af\u30e9\u30b9\u306b\u3064\u3044\u3066\u3001\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u3068\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u306e\u4e21\u65b9\u304c\u898b\u3064\u304b\u3063\u305f\u969b\u3069\u3061\u3089\u3092\u8aad\u307f\u8fbc\u3080\u304b\u6307\u5b9a\u3059\u308b +javac.opt.maxerrs=\u51fa\u529b\u3059\u308b\u30a8\u30e9\u30fc\u306e\u6700\u5927\u6570\u3092\u8a2d\u5b9a\u3059\u308b +javac.opt.maxwarns=\u51fa\u529b\u3059\u308b\u8b66\u544a\u306e\u6700\u5927\u6570\u3092\u8a2d\u5b9a\u3059\u308b +javac.opt.nogj=\u8a00\u8a9e\u306e\u6c4e\u7528\u6027\u3092\u53d7\u3051\u4ed8\u3051\u306a\u3044 +javac.opt.moreinfo=\u578b\u5909\u6570\u306e\u62e1\u5f35\u60c5\u5831\u3092\u51fa\u529b\u3059\u308b +javac.opt.printflat=\u5185\u90e8\u30af\u30e9\u30b9\u306e\u5909\u63db\u5f8c\u306b\u62bd\u8c61\u69cb\u6587\u30c4\u30ea\u30fc\u3092\u51fa\u529b\u3059\u308b +javac.opt.printsearch=\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u306e\u691c\u7d22\u4f4d\u7f6e\u60c5\u5831\u3092\u51fa\u529b\u3059\u308b +javac.opt.prompt=\u5404\u30a8\u30e9\u30fc\u3067\u505c\u6b62\u3059\u308b +javac.opt.retrofit=\u65e2\u5b58\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u6c4e\u7528\u578b\u3067\u7d44\u307f\u66ff\u3048\u308b +javac.opt.s=\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u306e\u4ee3\u308f\u308a\u306b java \u30bd\u30fc\u30b9\u3092\u767a\u884c\u3059\u308b +javac.opt.scramble=\u30d0\u30a4\u30c8\u30b3\u30fc\u30c9\u306e private \u8b58\u5225\u5b50\u306b\u30b9\u30af\u30e9\u30f3\u30d6\u30eb\u3092\u304b\u3051\u308b +javac.opt.scrambleall=\u30d0\u30a4\u30c8\u30b3\u30fc\u30c9\u306e package \u53ef\u8996\u8b58\u5225\u5b50\u306b\u30b9\u30af\u30e9\u30f3\u30d6\u30eb\u3092\u304b\u3051\u308b +javac.opt.version=\u30d0\u30fc\u30b8\u30e7\u30f3\u60c5\u5831 +javac.opt.arg.pathname= +javac.opt.arg.file= +javac.opt.Xlint=\u63a8\u5968\u306e\u8b66\u544a\u3092\u6709\u52b9\u306b\u3059\u308b +javac.opt.Xlint.suboptlist=\u7279\u5b9a\u306e\u8b66\u544a\u3092\u6709\u52b9\u307e\u305f\u306f\u7121\u52b9\u306b\u3059\u308b +javac.opt.Xstdout=\u6a19\u6e96\u51fa\u529b\u3092\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3059\u308b +javac.opt.X=\u975e\u6a19\u6e96\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u6982\u8981\u3092\u51fa\u529b\u3059\u308b +javac.opt.help=\u6a19\u6e96\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u6982\u8981\u3092\u51fa\u529b\u3059\u308b +javac.opt.print=\u6307\u5b9a\u3057\u305f\u578b\u306e\u30c6\u30ad\u30b9\u30c8\u8868\u793a\u3092\u51fa\u529b\u3059\u308b +javac.opt.printRounds=\u6ce8\u91c8\u51e6\u7406\u306e\u5f80\u5fa9\u306b\u3064\u3044\u3066\u306e\u60c5\u5831\u3092\u5370\u5237\u3059\u308b +javac.opt.printProcessorInfo=\u30d7\u30ed\u30bb\u30c3\u30b5\u304c\u51e6\u7406\u3092\u4f9d\u983c\u3055\u308c\u308b\u6ce8\u91c8\u306b\u3064\u3044\u3066\u306e\u60c5\u5831\u3092\u5370\u5237\u3059\u308b +javac.opt.prefer=\u6697\u9ed9\u7684\u306b\u30b3\u30f3\u30d1\u30a4\u30eb\u3055\u308c\u308b\u30af\u30e9\u30b9\u306b\u3064\u3044\u3066\u3001\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u3068\u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u306e\u4e21\u65b9\u304c\u898b\u3064\u304b\u3063\u305f\u969b\u3069\u3061\u3089\u3092\u8aad\u307f\u8fbc\u3080\u304b\u6307\u5b9a\u3059\u308b ## errors -javac.err.empty.A.argument=\ - -A \u306b\u306f\u5f15\u6570\u304c\u5fc5\u8981\u3067\u3059\u3002''-Akey'' \u307e\u305f\u306f ''-Akey=value'' \u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044 -javac.err.invalid.arg=\ - {0} \u306f\u7121\u52b9\u306a\u5f15\u6570\u3067\u3059\u3002 -javac.err.invalid.A.key=\ - \u6ce8\u91c8\u30d7\u30ed\u30bb\u30c3\u30b5\u30aa\u30d7\u30b7\u30e7\u30f3 ''{0}'' \u306e\u30ad\u30fc\u306b\u6307\u5b9a\u3055\u308c\u3066\u3044\u308b\u4e00\u9023\u306e\u8b58\u5225\u5b50\u304c\u3001\u30c9\u30c3\u30c8\u3067\u533a\u5207\u3089\u308c\u3066\u3044\u307e\u305b\u3093 -javac.err.invalid.flag=\ - {0} \u306f\u7121\u52b9\u306a\u30d5\u30e9\u30b0\u3067\u3059\u3002 -javac.err.invalid.target=\ - {0} \u306f\u7121\u52b9\u306a VM \u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3059\u3002 -javac.err.no.source.files=\ - \u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u304c\u3042\u308a\u307e\u305b\u3093\u3002 -javac.err.req.arg=\ - {0} \u306b\u306f\u5f15\u6570\u304c\u5fc5\u8981\u3067\u3059 -javac.err.invalid.source=\ - {0} \u306f\u7121\u52b9\u306a\u30bd\u30fc\u30b9\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3059\u3002 -javac.err.error.writing.file=\ - {0} \u306e\u66f8\u304d\u8fbc\u307f\u30a8\u30e9\u30fc\u3067\u3059\u3002{1} -javac.warn.source.target.conflict=\ - \u30ea\u30ea\u30fc\u30b9 {0} \u306e\u30bd\u30fc\u30b9\u306b\u306f\u30ea\u30ea\u30fc\u30b9 {1} \u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u304c\u5fc5\u8981\u3067\u3059\u3002 -javac.warn.target.default.source.conflict=\ - \u30bf\u30fc\u30b2\u30c3\u30c8\u30ea\u30ea\u30fc\u30b9 {0} \u304c\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30bd\u30fc\u30b9\u30ea\u30ea\u30fc\u30b9 {1} \u3068\u7af6\u5408\u3057\u3066\u3044\u307e\u3059\u3002 -javac.err.file.not.found=\ - \u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093: {0} -javac.err.file.not.directory=\ - \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3067\u306f\u3042\u308a\u307e\u305b\u3093: {0} -javac.err.file.not.file=\ - \u30d5\u30a1\u30a4\u30eb\u3067\u306f\u3042\u308a\u307e\u305b\u3093: {0} +javac.err.empty.A.argument=-A \u306b\u306f\u5f15\u6570\u304c\u5fc5\u8981\u3067\u3059\u3002''-Akey'' \u307e\u305f\u306f ''-Akey=value'' \u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044 +javac.err.invalid.arg={0} \u306f\u7121\u52b9\u306a\u5f15\u6570\u3067\u3059\u3002 +javac.err.invalid.A.key=\u6ce8\u91c8\u30d7\u30ed\u30bb\u30c3\u30b5\u30aa\u30d7\u30b7\u30e7\u30f3 ''{0}'' \u306e\u30ad\u30fc\u306b\u6307\u5b9a\u3055\u308c\u3066\u3044\u308b\u4e00\u9023\u306e\u8b58\u5225\u5b50\u304c\u3001\u30c9\u30c3\u30c8\u3067\u533a\u5207\u3089\u308c\u3066\u3044\u307e\u305b\u3093 +javac.err.invalid.flag={0} \u306f\u7121\u52b9\u306a\u30d5\u30e9\u30b0\u3067\u3059\u3002 +javac.err.invalid.target={0} \u306f\u7121\u52b9\u306a VM \u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3059\u3002 +javac.err.no.source.files=\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u304c\u3042\u308a\u307e\u305b\u3093\u3002 +javac.err.req.arg={0} \u306b\u306f\u5f15\u6570\u304c\u5fc5\u8981\u3067\u3059 +javac.err.invalid.source={0} \u306f\u7121\u52b9\u306a\u30bd\u30fc\u30b9\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3059\u3002 +javac.err.error.writing.file={0} \u306e\u66f8\u304d\u8fbc\u307f\u30a8\u30e9\u30fc\u3067\u3059\u3002{1} +javac.warn.source.target.conflict=\u30ea\u30ea\u30fc\u30b9 {0} \u306e\u30bd\u30fc\u30b9\u306b\u306f\u30ea\u30ea\u30fc\u30b9 {1} \u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u304c\u5fc5\u8981\u3067\u3059\u3002 +javac.warn.target.default.source.conflict=\u30bf\u30fc\u30b2\u30c3\u30c8\u30ea\u30ea\u30fc\u30b9 {0} \u304c\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30bd\u30fc\u30b9\u30ea\u30ea\u30fc\u30b9 {1} \u3068\u7af6\u5408\u3057\u3066\u3044\u307e\u3059\u3002 +javac.err.dir.not.found=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304c\u3042\u308a\u307e\u305b\u3093: {0} +javac.err.file.not.found=\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093: {0} +javac.err.file.not.directory=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3067\u306f\u3042\u308a\u307e\u305b\u3093: {0} +javac.err.file.not.file=\u30d5\u30a1\u30a4\u30eb\u3067\u306f\u3042\u308a\u307e\u305b\u3093: {0} ## messages -javac.msg.usage.header=\ -\u4f7f\u3044\u65b9: {0} \n\ -\u4f7f\u7528\u53ef\u80fd\u306a\u30aa\u30d7\u30b7\u30e7\u30f3\u306b\u306f\u6b21\u306e\u3082\u306e\u304c\u3042\u308a\u307e\u3059\u3002 +javac.msg.usage.header=\u4f7f\u3044\u65b9: {0} \n\u4f7f\u7528\u53ef\u80fd\u306a\u30aa\u30d7\u30b7\u30e7\u30f3\u306b\u306f\u6b21\u306e\u3082\u306e\u304c\u3042\u308a\u307e\u3059\u3002 -javac.msg.usage=\ - \u4f7f\u3044\u65b9: {0} \n\ - \u4f7f\u7528\u53ef\u80fd\u306a\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u30ea\u30b9\u30c8\u306b\u3064\u3044\u3066\u306f\u3001-help \u3092\u4f7f\u7528\u3057\u307e\u3059 +javac.msg.usage=\u4f7f\u3044\u65b9: {0} \n\u4f7f\u7528\u53ef\u80fd\u306a\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u30ea\u30b9\u30c8\u306b\u3064\u3044\u3066\u306f\u3001-help \u3092\u4f7f\u7528\u3057\u307e\u3059 -javac.msg.usage.nonstandard.footer=\ -\u3053\u308c\u3089\u306f\u975e\u6a19\u6e96\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u3042\u308a\u4e88\u544a\u306a\u3057\u306b\u5909\u66f4\u3055\u308c\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002 +javac.msg.usage.nonstandard.footer=\u3053\u308c\u3089\u306f\u975e\u6a19\u6e96\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u3042\u308a\u4e88\u544a\u306a\u3057\u306b\u5909\u66f4\u3055\u308c\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002 -javac.msg.bug=\ -\u30b3\u30f3\u30d1\u30a4\u30e9\u3067\u4f8b\u5916\u304c\u767a\u751f\u3057\u307e\u3057\u305f ({0})\u3002\ -Bug Parade \u306b\u540c\u3058\u30d0\u30b0\u304c\u767b\u9332\u3055\u308c\u3066\u3044\u306a\u3044\u3053\u3068\u3092\u3054\u78ba\u8a8d\u306e\u4e0a\u3001Java Developer Connection \ -(http://java.sun.com/webapps/bugreport) \u306b\u3066\u30d0\u30b0\u306e\u767b\u9332\u3092\u304a\u9858\u3044\u3044\u305f\u3057\u307e\u3059\u3002\ -\u30ec\u30dd\u30fc\u30c8\u306b\u306f\u3001\u305d\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3068\u4e0b\u8a18\u306e\u8a3a\u65ad\u5185\u5bb9\u3092\u542b\u3081\u3066\u304f\u3060\u3055\u3044\u3002\u3054\u5354\u529b\u3042\u308a\u304c\u3068\u3046\u3054\u3056\u3044\u307e\u3059\u3002 +javac.msg.bug=\u30b3\u30f3\u30d1\u30a4\u30e9\u3067\u4f8b\u5916\u304c\u767a\u751f\u3057\u307e\u3057\u305f ({0})\u3002Bug Parade \u306b\u540c\u3058\u30d0\u30b0\u304c\u767b\u9332\u3055\u308c\u3066\u3044\u306a\u3044\u3053\u3068\u3092\u3054\u78ba\u8a8d\u306e\u4e0a\u3001Java Developer Connection (http://java.sun.com/webapps/bugreport) \u306b\u3066\u30d0\u30b0\u306e\u767b\u9332\u3092\u304a\u9858\u3044\u3044\u305f\u3057\u307e\u3059\u3002\u30ec\u30dd\u30fc\u30c8\u306b\u306f\u3001\u305d\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3068\u4e0b\u8a18\u306e\u8a3a\u65ad\u5185\u5bb9\u3092\u542b\u3081\u3066\u304f\u3060\u3055\u3044\u3002\u3054\u5354\u529b\u3042\u308a\u304c\u3068\u3046\u3054\u3056\u3044\u307e\u3059\u3002 -javac.msg.io=\ -\n\n\u5165\u51fa\u529b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\n\ -\u8a73\u7d30\u306f\u6b21\u306e\u30b9\u30bf\u30c3\u30af\u30c8\u30ec\u30fc\u30b9\u3067\u8abf\u67fb\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n +javac.msg.io=\n\n\u5165\u51fa\u529b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\n\u8a73\u7d30\u306f\u6b21\u306e\u30b9\u30bf\u30c3\u30af\u30c8\u30ec\u30fc\u30b9\u3067\u8abf\u67fb\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n -javac.msg.proc.annotation.uncaught.exception=\ -\n\n\u6ce8\u91c8\u51e6\u7406\u3067\u30ad\u30e3\u30c3\u30c1\u3055\u308c\u306a\u3044\u4f8b\u5916\u304c\u30b9\u30ed\u30fc\u3055\u308c\u307e\u3057\u305f\u3002\n\ -\u8a73\u7d30\u306f\u6b21\u306e\u30b9\u30bf\u30c3\u30af\u30c8\u30ec\u30fc\u30b9\u3067\u8abf\u67fb\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n +javac.msg.proc.annotation.uncaught.exception=\n\n\u6ce8\u91c8\u51e6\u7406\u3067\u30ad\u30e3\u30c3\u30c1\u3055\u308c\u306a\u3044\u4f8b\u5916\u304c\u30b9\u30ed\u30fc\u3055\u308c\u307e\u3057\u305f\u3002\n\u8a73\u7d30\u306f\u6b21\u306e\u30b9\u30bf\u30c3\u30af\u30c8\u30ec\u30fc\u30b9\u3067\u8abf\u67fb\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n -javac.msg.resource=\ -\n\n\u30b7\u30b9\u30c6\u30e0\u30ea\u30bd\u30fc\u30b9\u304c\u4e0d\u8db3\u3057\u3066\u3044\u307e\u3059\u3002\n\ -\u8a73\u7d30\u306f\u6b21\u306e\u30b9\u30bf\u30c3\u30af\u30c8\u30ec\u30fc\u30b9\u3067\u8abf\u67fb\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n +javac.msg.resource=\n\n\u30b7\u30b9\u30c6\u30e0\u30ea\u30bd\u30fc\u30b9\u304c\u4e0d\u8db3\u3057\u3066\u3044\u307e\u3059\u3002\n\u8a73\u7d30\u306f\u6b21\u306e\u30b9\u30bf\u30c3\u30af\u30c8\u30ec\u30fc\u30b9\u3067\u8abf\u67fb\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n javac.version={0} {1} javac.fullVersion={0} \u30d5\u30eb\u30d0\u30fc\u30b8\u30e7\u30f3 "{1}" diff --git a/langtools/src/share/classes/com/sun/tools/javac/resources/javac_zh_CN.properties b/langtools/src/share/classes/com/sun/tools/javac/resources/javac_zh_CN.properties index 61c51012151..cefb0a8158e 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/resources/javac_zh_CN.properties +++ b/langtools/src/share/classes/com/sun/tools/javac/resources/javac_zh_CN.properties @@ -1,5 +1,5 @@ # -# Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved. +# Copyright 1999-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 @@ -25,184 +25,100 @@ ## standard options -javac.opt.g=\ -\u751f\u6210\u6240\u6709\u8c03\u8bd5\u4fe1\u606f -javac.opt.g.none=\ -\u4e0d\u751f\u6210\u4efb\u4f55\u8c03\u8bd5\u4fe1\u606f -javac.opt.g.lines.vars.source=\ -\u53ea\u751f\u6210\u67d0\u4e9b\u8c03\u8bd5\u4fe1\u606f -javac.opt.nowarn=\ -\u4e0d\u751f\u6210\u4efb\u4f55\u8b66\u544a -javac.opt.verbose=\ -\u8f93\u51fa\u6709\u5173\u7f16\u8bd1\u5668\u6b63\u5728\u6267\u884c\u7684\u64cd\u4f5c\u7684\u6d88\u606f -javac.opt.deprecation=\ -\u8f93\u51fa\u4f7f\u7528\u5df2\u8fc7\u65f6\u7684 API \u7684\u6e90\u4f4d\u7f6e -javac.opt.classpath=\ -\u6307\u5b9a\u67e5\u627e\u7528\u6237\u7c7b\u6587\u4ef6\u548c\u6ce8\u91ca\u5904\u7406\u7a0b\u5e8f\u7684\u4f4d\u7f6e -javac.opt.sourcepath=\ -\u6307\u5b9a\u67e5\u627e\u8f93\u5165\u6e90\u6587\u4ef6\u7684\u4f4d\u7f6e -javac.opt.bootclasspath=\ -\u8986\u76d6\u5f15\u5bfc\u7c7b\u6587\u4ef6\u7684\u4f4d\u7f6e -javac.opt.Xbootclasspath.p=\ -\u7f6e\u4e8e\u5f15\u5bfc\u7c7b\u8def\u5f84\u4e4b\u524d -javac.opt.Xbootclasspath.a=\ -\u7f6e\u4e8e\u5f15\u5bfc\u7c7b\u8def\u5f84\u4e4b\u540e -javac.opt.endorseddirs=\ -\u8986\u76d6\u7b7e\u540d\u7684\u6807\u51c6\u8def\u5f84\u7684\u4f4d\u7f6e -javac.opt.extdirs=\ -\u8986\u76d6\u5b89\u88c5\u7684\u6269\u5c55\u76ee\u5f55\u7684\u4f4d\u7f6e -javac.opt.processorpath=\ -\u6307\u5b9a\u67e5\u627e\u6ce8\u91ca\u5904\u7406\u7a0b\u5e8f\u7684\u4f4d\u7f6e -javac.opt.processor=\ -\u8981\u8fd0\u884c\u7684\u6ce8\u91ca\u5904\u7406\u7a0b\u5e8f\u7684\u540d\u79f0\uff1b\u7ed5\u8fc7\u9ed8\u8ba4\u7684\u641c\u7d22\u8fdb\u7a0b -javac.opt.proc.none.only=\ -\u63a7\u5236\u662f\u5426\u6267\u884c\u6ce8\u91ca\u5904\u7406\u548c/\u6216\u7f16\u8bd1\u3002 -javac.opt.d=\ -\u6307\u5b9a\u5b58\u653e\u751f\u6210\u7684\u7c7b\u6587\u4ef6\u7684\u4f4d\u7f6e -javac.opt.sourceDest=\ -\u6307\u5b9a\u5b58\u653e\u751f\u6210\u7684\u6e90\u6587\u4ef6\u7684\u4f4d\u7f6e -javac.opt.J=\ -\u76f4\u63a5\u5c06 <\u6807\u5fd7> \u4f20\u9012\u7ed9\u8fd0\u884c\u65f6\u7cfb\u7edf -javac.opt.encoding=\ -\u6307\u5b9a\u6e90\u6587\u4ef6\u4f7f\u7528\u7684\u5b57\u7b26\u7f16\u7801 -javac.opt.target=\ -\u751f\u6210\u7279\u5b9a VM \u7248\u672c\u7684\u7c7b\u6587\u4ef6 -javac.opt.source=\ -\u63d0\u4f9b\u4e0e\u6307\u5b9a\u7248\u672c\u7684\u6e90\u517c\u5bb9\u6027 -javac.opt.A=\ -\u4f20\u9012\u7ed9\u6ce8\u91ca\u5904\u7406\u7a0b\u5e8f\u7684\u9009\u9879 -javac.opt.implicit=\ - \u6307\u5b9a\u662f\u5426\u4e3a\u9690\u5f0f\u5f15\u7528\u6587\u4ef6\u751f\u6210\u7c7b\u6587\u4ef6 -javac.opt.arg.class=\ - -javac.opt.arg.class.list=\ -[,,...] -javac.opt.arg.flag=\ -<\u6807\u5fd7> -javac.opt.arg.key.equals.value=\ - key[=value] -javac.opt.arg.path=\ -<\u8def\u5f84> -javac.opt.arg.dirs=\ -<\u76ee\u5f55> -javac.opt.arg.directory=\ -<\u76ee\u5f55> -javac.opt.arg.encoding=\ -<\u7f16\u7801> -javac.opt.arg.release=\ -<\u7248\u672c> -javac.opt.arg.number=\ -<\u7f16\u53f7> +javac.opt.g=\u751f\u6210\u6240\u6709\u8c03\u8bd5\u4fe1\u606f +javac.opt.g.none=\u4e0d\u751f\u6210\u4efb\u4f55\u8c03\u8bd5\u4fe1\u606f +javac.opt.g.lines.vars.source=\u53ea\u751f\u6210\u67d0\u4e9b\u8c03\u8bd5\u4fe1\u606f +javac.opt.nowarn=\u4e0d\u751f\u6210\u4efb\u4f55\u8b66\u544a +javac.opt.verbose=\u8f93\u51fa\u6709\u5173\u7f16\u8bd1\u5668\u6b63\u5728\u6267\u884c\u7684\u64cd\u4f5c\u7684\u6d88\u606f +javac.opt.deprecation=\u8f93\u51fa\u4f7f\u7528\u5df2\u8fc7\u65f6\u7684 API \u7684\u6e90\u4f4d\u7f6e +javac.opt.classpath=\u6307\u5b9a\u67e5\u627e\u7528\u6237\u7c7b\u6587\u4ef6\u548c\u6ce8\u91ca\u5904\u7406\u7a0b\u5e8f\u7684\u4f4d\u7f6e +javac.opt.sourcepath=\u6307\u5b9a\u67e5\u627e\u8f93\u5165\u6e90\u6587\u4ef6\u7684\u4f4d\u7f6e +javac.opt.bootclasspath=\u8986\u76d6\u5f15\u5bfc\u7c7b\u6587\u4ef6\u7684\u4f4d\u7f6e +javac.opt.Xbootclasspath.p=\u7f6e\u4e8e\u5f15\u5bfc\u7c7b\u8def\u5f84\u4e4b\u524d +javac.opt.Xbootclasspath.a=\u7f6e\u4e8e\u5f15\u5bfc\u7c7b\u8def\u5f84\u4e4b\u540e +javac.opt.endorseddirs=\u8986\u76d6\u7b7e\u540d\u7684\u6807\u51c6\u8def\u5f84\u7684\u4f4d\u7f6e +javac.opt.extdirs=\u8986\u76d6\u5b89\u88c5\u7684\u6269\u5c55\u76ee\u5f55\u7684\u4f4d\u7f6e +javac.opt.processorpath=\u6307\u5b9a\u67e5\u627e\u6ce8\u91ca\u5904\u7406\u7a0b\u5e8f\u7684\u4f4d\u7f6e +javac.opt.processor=\u8981\u8fd0\u884c\u7684\u6ce8\u91ca\u5904\u7406\u7a0b\u5e8f\u7684\u540d\u79f0\uff1b\u7ed5\u8fc7\u9ed8\u8ba4\u7684\u641c\u7d22\u8fdb\u7a0b +javac.opt.proc.none.only=\u63a7\u5236\u662f\u5426\u6267\u884c\u6ce8\u91ca\u5904\u7406\u548c/\u6216\u7f16\u8bd1\u3002 +javac.opt.d=\u6307\u5b9a\u5b58\u653e\u751f\u6210\u7684\u7c7b\u6587\u4ef6\u7684\u4f4d\u7f6e +javac.opt.sourceDest=\u6307\u5b9a\u5b58\u653e\u751f\u6210\u7684\u6e90\u6587\u4ef6\u7684\u4f4d\u7f6e +javac.opt.J=\u76f4\u63a5\u5c06 <\u6807\u5fd7> \u4f20\u9012\u7ed9\u8fd0\u884c\u65f6\u7cfb\u7edf +javac.opt.encoding=\u6307\u5b9a\u6e90\u6587\u4ef6\u4f7f\u7528\u7684\u5b57\u7b26\u7f16\u7801 +javac.opt.target=\u751f\u6210\u7279\u5b9a VM \u7248\u672c\u7684\u7c7b\u6587\u4ef6 +javac.opt.source=\u63d0\u4f9b\u4e0e\u6307\u5b9a\u7248\u672c\u7684\u6e90\u517c\u5bb9\u6027 +javac.opt.Werror=\u51fa\u73b0\u8b66\u544a\u5219\u4e2d\u6b62\u7f16\u8bd1 +javac.opt.A=\u4f20\u9012\u7ed9\u6ce8\u91ca\u5904\u7406\u7a0b\u5e8f\u7684\u9009\u9879 +javac.opt.implicit=\u6307\u5b9a\u662f\u5426\u4e3a\u9690\u5f0f\u5f15\u7528\u6587\u4ef6\u751f\u6210\u7c7b\u6587\u4ef6 +javac.opt.arg.class= +javac.opt.arg.class.list=[,,...] +javac.opt.arg.flag=<\u6807\u5fd7> +javac.opt.arg.key.equals.value=key[=value] +javac.opt.arg.path=<\u8def\u5f84> +javac.opt.arg.dirs=<\u76ee\u5f55> +javac.opt.arg.directory=<\u76ee\u5f55> +javac.opt.arg.encoding=<\u7f16\u7801> +javac.opt.arg.release=<\u7248\u672c> +javac.opt.arg.number=<\u7f16\u53f7> ## extended options -javac.opt.maxerrs=\ -\u8bbe\u7f6e\u8981\u8f93\u51fa\u7684\u9519\u8bef\u7684\u6700\u5927\u6570\u76ee -javac.opt.maxwarns=\ -\u8bbe\u7f6e\u8981\u8f93\u51fa\u7684\u8b66\u544a\u7684\u6700\u5927\u6570\u76ee -javac.opt.nogj=\ -\u8bed\u8a00\u4e2d\u4e0d\u63a5\u53d7\u6cdb\u578b -javac.opt.moreinfo=\ -\u8f93\u51fa\u7c7b\u578b\u53d8\u91cf\u7684\u6269\u5c55\u4fe1\u606f -javac.opt.printflat=\ -\u5728\u5185\u90e8\u7c7b\u8f6c\u6362\u4e4b\u540e\u8f93\u51fa\u62bd\u8c61\u8bed\u6cd5\u6811 -javac.opt.printsearch=\ -\u8f93\u51fa\u6709\u5173\u641c\u7d22\u7c7b\u6587\u4ef6\u7684\u4f4d\u7f6e\u7684\u4fe1\u606f -javac.opt.prompt=\ -\u5728\u6bcf\u6b21\u51fa\u9519\u540e\u505c\u6b62 -javac.opt.retrofit=\ -\u66f4\u65b0\u4f7f\u7528\u6cdb\u578b\u7684\u73b0\u6709\u7c7b\u6587\u4ef6 -javac.opt.s=\ -\u53d1\u51fa java \u6e90\u800c\u4e0d\u662f\u7c7b\u6587\u4ef6 -javac.opt.scramble=\ -\u5728\u5b57\u8282\u7801\u4e2d\u6df7\u6dc6\u4e13\u7528\u6807\u8bc6\u7b26 -javac.opt.scrambleall=\ -\u5728\u5b57\u8282\u7801\u4e2d\u6df7\u6dc6\u8f6f\u4ef6\u5305\u53ef\u89c1\u6807\u8bc6\u7b26 -javac.opt.version=\ -\u7248\u672c\u4fe1\u606f -javac.opt.arg.pathname=\ -<\u8def\u5f84\u540d> -javac.opt.arg.file=\ -<\u6587\u4ef6\u540d> -javac.opt.Xlint=\ -\u542f\u7528\u5efa\u8bae\u7684\u8b66\u544a -javac.opt.Xlint.suboptlist=\ -\u542f\u7528\u6216\u7981\u7528\u7279\u5b9a\u7684\u8b66\u544a -javac.opt.Xstdout=\ -\u91cd\u5b9a\u5411\u6807\u51c6\u8f93\u51fa -javac.opt.X=\ -\u8f93\u51fa\u975e\u6807\u51c6\u9009\u9879\u7684\u63d0\u8981 -javac.opt.help=\ -\u8f93\u51fa\u6807\u51c6\u9009\u9879\u7684\u63d0\u8981 -javac.opt.print=\ -\u8f93\u51fa\u6307\u5b9a\u7c7b\u578b\u7684\u6587\u672c\u8868\u793a -javac.opt.printRounds=\ -\u8f93\u51fa\u6709\u5173\u6ce8\u91ca\u5904\u7406\u5faa\u73af\u7684\u4fe1\u606f -javac.opt.printProcessorInfo=\ -\u8f93\u51fa\u6709\u5173\u8bf7\u6c42\u5904\u7406\u7a0b\u5e8f\u5904\u7406\u54ea\u4e9b\u6ce8\u91ca\u7684\u4fe1\u606f -javac.opt.prefer=\ - \u6307\u5b9a\u8bfb\u53d6\u6587\u4ef6\uff0c\u5f53\u540c\u65f6\u627e\u5230\u9690\u5f0f\u7f16\u8bd1\u7c7b\u7684\u6e90\u6587\u4ef6\u548c\u7c7b\u6587\u4ef6\u65f6 +javac.opt.maxerrs=\u8bbe\u7f6e\u8981\u8f93\u51fa\u7684\u9519\u8bef\u7684\u6700\u5927\u6570\u76ee +javac.opt.maxwarns=\u8bbe\u7f6e\u8981\u8f93\u51fa\u7684\u8b66\u544a\u7684\u6700\u5927\u6570\u76ee +javac.opt.nogj=\u8bed\u8a00\u4e2d\u4e0d\u63a5\u53d7\u6cdb\u578b +javac.opt.moreinfo=\u8f93\u51fa\u7c7b\u578b\u53d8\u91cf\u7684\u6269\u5c55\u4fe1\u606f +javac.opt.printflat=\u5728\u5185\u90e8\u7c7b\u8f6c\u6362\u4e4b\u540e\u8f93\u51fa\u62bd\u8c61\u8bed\u6cd5\u6811 +javac.opt.printsearch=\u8f93\u51fa\u6709\u5173\u641c\u7d22\u7c7b\u6587\u4ef6\u7684\u4f4d\u7f6e\u7684\u4fe1\u606f +javac.opt.prompt=\u5728\u6bcf\u6b21\u51fa\u9519\u540e\u505c\u6b62 +javac.opt.retrofit=\u66f4\u65b0\u4f7f\u7528\u6cdb\u578b\u7684\u73b0\u6709\u7c7b\u6587\u4ef6 +javac.opt.s=\u53d1\u51fa java \u6e90\u800c\u4e0d\u662f\u7c7b\u6587\u4ef6 +javac.opt.scramble=\u5728\u5b57\u8282\u7801\u4e2d\u6df7\u6dc6\u4e13\u7528\u6807\u8bc6\u7b26 +javac.opt.scrambleall=\u5728\u5b57\u8282\u7801\u4e2d\u6df7\u6dc6\u8f6f\u4ef6\u5305\u53ef\u89c1\u6807\u8bc6\u7b26 +javac.opt.version=\u7248\u672c\u4fe1\u606f +javac.opt.arg.pathname=<\u8def\u5f84\u540d> +javac.opt.arg.file=<\u6587\u4ef6\u540d> +javac.opt.Xlint=\u542f\u7528\u5efa\u8bae\u7684\u8b66\u544a +javac.opt.Xlint.suboptlist=\u542f\u7528\u6216\u7981\u7528\u7279\u5b9a\u7684\u8b66\u544a +javac.opt.Xstdout=\u91cd\u5b9a\u5411\u6807\u51c6\u8f93\u51fa +javac.opt.X=\u8f93\u51fa\u975e\u6807\u51c6\u9009\u9879\u7684\u63d0\u8981 +javac.opt.help=\u8f93\u51fa\u6807\u51c6\u9009\u9879\u7684\u63d0\u8981 +javac.opt.print=\u8f93\u51fa\u6307\u5b9a\u7c7b\u578b\u7684\u6587\u672c\u8868\u793a +javac.opt.printRounds=\u8f93\u51fa\u6709\u5173\u6ce8\u91ca\u5904\u7406\u5faa\u73af\u7684\u4fe1\u606f +javac.opt.printProcessorInfo=\u8f93\u51fa\u6709\u5173\u8bf7\u6c42\u5904\u7406\u7a0b\u5e8f\u5904\u7406\u54ea\u4e9b\u6ce8\u91ca\u7684\u4fe1\u606f +javac.opt.prefer=\u6307\u5b9a\u8bfb\u53d6\u6587\u4ef6\uff0c\u5f53\u540c\u65f6\u627e\u5230\u9690\u5f0f\u7f16\u8bd1\u7c7b\u7684\u6e90\u6587\u4ef6\u548c\u7c7b\u6587\u4ef6\u65f6 ## errors -javac.err.empty.A.argument=\ - -A \u9700\u8981\u4e00\u4e2a\u53c2\u6570\uff1b\u4f7f\u7528 ''-Akey'' \u6216 ''-Akey=value'' -javac.err.invalid.arg=\ -\u65e0\u6548\u7684\u53c2\u6570\uff1a {0} -javac.err.invalid.A.key=\ - \u6ce8\u91ca\u5904\u7406\u5668\u9009\u9879"{0}"\u4e2d\u7684\u5173\u952e\u5b57\u4e0d\u662f\u4ee5\u70b9\u5206\u9694\u7684\u6807\u8bc6\u7b26\u5e8f\u5217 -javac.err.invalid.flag=\ -\u65e0\u6548\u7684\u6807\u5fd7\uff1a {0} -javac.err.invalid.target=\ -\u65e0\u6548\u7684\u76ee\u6807\u7248\u672c\uff1a {0} -javac.err.no.source.files=\ -\u65e0\u6e90\u6587\u4ef6 -javac.err.req.arg=\ -{0} \u9700\u8981\u53c2\u6570 -javac.err.invalid.source=\ -\u65e0\u6548\u7684\u6e90\u7248\u672c\uff1a {0} -javac.err.error.writing.file=\ -\u5199\u5165 {0} \u65f6\u51fa\u9519\uff1b{1} -javac.warn.source.target.conflict=\ -\u6e90\u7248\u672c {0} \u9700\u8981\u76ee\u6807\u7248\u672c {1} -javac.warn.target.default.source.conflict=\ -\u76ee\u6807\u7248\u672c {0} \u4e0e\u9ed8\u8ba4\u7684\u6e90\u7248\u672c {1} \u51b2\u7a81 -javac.err.file.not.found=\ -\u627e\u4e0d\u5230\u6587\u4ef6\uff1a {0} -javac.err.file.not.directory=\ - \u4e0d\u662f\u76ee\u5f55: {0} -javac.err.file.not.file=\ - \u4e0d\u662f\u6587\u4ef6: {0} +javac.err.empty.A.argument=-A \u9700\u8981\u4e00\u4e2a\u53c2\u6570\uff1b\u4f7f\u7528 ''-Akey'' \u6216 ''-Akey=value'' +javac.err.invalid.arg=\u65e0\u6548\u7684\u53c2\u6570\uff1a {0} +javac.err.invalid.A.key=\u6ce8\u91ca\u5904\u7406\u5668\u9009\u9879"{0}"\u4e2d\u7684\u5173\u952e\u5b57\u4e0d\u662f\u4ee5\u70b9\u5206\u9694\u7684\u6807\u8bc6\u7b26\u5e8f\u5217 +javac.err.invalid.flag=\u65e0\u6548\u7684\u6807\u5fd7\uff1a {0} +javac.err.invalid.target=\u65e0\u6548\u7684\u76ee\u6807\u7248\u672c\uff1a {0} +javac.err.no.source.files=\u65e0\u6e90\u6587\u4ef6 +javac.err.req.arg={0} \u9700\u8981\u53c2\u6570 +javac.err.invalid.source=\u65e0\u6548\u7684\u6e90\u7248\u672c\uff1a {0} +javac.err.error.writing.file=\u5199\u5165 {0} \u65f6\u51fa\u9519\uff1b{1} +javac.warn.source.target.conflict=\u6e90\u7248\u672c {0} \u9700\u8981\u76ee\u6807\u7248\u672c {1} +javac.warn.target.default.source.conflict=\u76ee\u6807\u7248\u672c {0} \u4e0e\u9ed8\u8ba4\u7684\u6e90\u7248\u672c {1} \u51b2\u7a81 +javac.err.dir.not.found=\u627e\u4e0d\u5230\u76ee\u5f55: {0} +javac.err.file.not.found=\u627e\u4e0d\u5230\u6587\u4ef6\uff1a {0} +javac.err.file.not.directory=\u4e0d\u662f\u76ee\u5f55: {0} +javac.err.file.not.file=\u4e0d\u662f\u6587\u4ef6: {0} ## messages -javac.msg.usage.header=\ -\u7528\u6cd5\uff1a{0} <\u9009\u9879> <\u6e90\u6587\u4ef6>\n\ -\u5176\u4e2d\uff0c\u53ef\u80fd\u7684\u9009\u9879\u5305\u62ec\uff1a +javac.msg.usage.header=\u7528\u6cd5\uff1a{0} <\u9009\u9879> <\u6e90\u6587\u4ef6>\n\u5176\u4e2d\uff0c\u53ef\u80fd\u7684\u9009\u9879\u5305\u62ec\uff1a -javac.msg.usage=\ - \u7528\u6cd5: {0} \n\ - -help \u7528\u4e8e\u5217\u51fa\u53ef\u80fd\u7684\u9009\u9879 +javac.msg.usage=\u7528\u6cd5: {0} \n-help \u7528\u4e8e\u5217\u51fa\u53ef\u80fd\u7684\u9009\u9879 -javac.msg.usage.nonstandard.footer=\ -\u8fd9\u4e9b\u9009\u9879\u90fd\u662f\u975e\u6807\u51c6\u9009\u9879\uff0c\u5982\u6709\u66f4\u6539\uff0c\u6055\u4e0d\u53e6\u884c\u901a\u77e5\u3002 +javac.msg.usage.nonstandard.footer=\u8fd9\u4e9b\u9009\u9879\u90fd\u662f\u975e\u6807\u51c6\u9009\u9879\uff0c\u5982\u6709\u66f4\u6539\uff0c\u6055\u4e0d\u53e6\u884c\u901a\u77e5\u3002 -javac.msg.bug=\ -\u7f16\u8bd1\u5668 ({0}) \u4e2d\u51fa\u73b0\u5f02\u5e38\u3002 \ -\u5982\u679c\u5728 Bug Parade \u4e2d\u6ca1\u6709\u627e\u5230\u8be5\u9519\u8bef\uff0c\u8bf7\u5728 Java Developer Connection (http://java.sun.com/webapps/bugreport) \ -\u5bf9\u8be5\u9519\u8bef\u8fdb\u884c\u5f52\u6863\u3002 \ -\u8bf7\u5728\u62a5\u544a\u4e2d\u9644\u4e0a\u60a8\u7684\u7a0b\u5e8f\u548c\u4ee5\u4e0b\u8bca\u65ad\u4fe1\u606f\u3002\u8c22\u8c22\u60a8\u7684\u5408\u4f5c\u3002 +javac.msg.bug=\u7f16\u8bd1\u5668 ({0}) \u4e2d\u51fa\u73b0\u5f02\u5e38\u3002 \u5982\u679c\u5728 Bug Parade \u4e2d\u6ca1\u6709\u627e\u5230\u8be5\u9519\u8bef\uff0c\u8bf7\u5728 Java Developer Connection (http://java.sun.com/webapps/bugreport) \u5bf9\u8be5\u9519\u8bef\u8fdb\u884c\u5f52\u6863\u3002 \u8bf7\u5728\u62a5\u544a\u4e2d\u9644\u4e0a\u60a8\u7684\u7a0b\u5e8f\u548c\u4ee5\u4e0b\u8bca\u65ad\u4fe1\u606f\u3002\u8c22\u8c22\u60a8\u7684\u5408\u4f5c\u3002 -javac.msg.io=\ -\n\n\u53d1\u751f\u8f93\u5165/\u8f93\u51fa\u9519\u8bef\u3002\n\ -\u6709\u5173\u8be6\u7ec6\u4fe1\u606f\uff0c\u8bf7\u53c2\u9605\u4ee5\u4e0b\u5806\u6808\u8ffd\u8e2a\u3002\n +javac.msg.io=\n\n\u53d1\u751f\u8f93\u5165/\u8f93\u51fa\u9519\u8bef\u3002\n\u6709\u5173\u8be6\u7ec6\u4fe1\u606f\uff0c\u8bf7\u53c2\u9605\u4ee5\u4e0b\u5806\u6808\u8ffd\u8e2a\u3002\n -javac.msg.proc.annotation.uncaught.exception=\ -\n\n\u6ce8\u91ca\u5904\u7406\u7a0b\u5e8f\u629b\u51fa\u672a\u6355\u83b7\u7684\u5f02\u5e38\u3002\n\ -\u6709\u5173\u8be6\u7ec6\u4fe1\u606f\uff0c\u8bf7\u53c2\u9605\u4ee5\u4e0b\u5806\u6808\u8ffd\u8e2a\u3002\n +javac.msg.proc.annotation.uncaught.exception=\n\n\u6ce8\u91ca\u5904\u7406\u7a0b\u5e8f\u629b\u51fa\u672a\u6355\u83b7\u7684\u5f02\u5e38\u3002\n\u6709\u5173\u8be6\u7ec6\u4fe1\u606f\uff0c\u8bf7\u53c2\u9605\u4ee5\u4e0b\u5806\u6808\u8ffd\u8e2a\u3002\n -javac.msg.resource=\ -\n\n\u7cfb\u7edf\u8d44\u6e90\u4e0d\u8db3\u3002\n\ -\u6709\u5173\u8be6\u7ec6\u4fe1\u606f\uff0c\u8bf7\u53c2\u9605\u4ee5\u4e0b\u5806\u6808\u8ffd\u8e2a\u3002\n +javac.msg.resource=\n\n\u7cfb\u7edf\u8d44\u6e90\u4e0d\u8db3\u3002\n\u6709\u5173\u8be6\u7ec6\u4fe1\u606f\uff0c\u8bf7\u53c2\u9605\u4ee5\u4e0b\u5806\u6808\u8ffd\u8e2a\u3002\n javac.version={0} {1} javac.fullVersion={0} \u5b8c\u6574\u7248\u672c "{1}" From 795261fbaaec7d03dcbb036155e72bb8c658659f Mon Sep 17 00:00:00 2001 From: Xueming Shen Date: Mon, 12 Apr 2010 10:57:07 -0700 Subject: [PATCH 31/91] 6942707: nwe Big5.map for HKSCS2008 missed 5 codepoints Updated the Big5.map table to add 5 entries Reviewed-by: okutsu --- jdk/make/tools/CharsetMapping/Big5.c2b | 8 -------- jdk/make/tools/CharsetMapping/Big5.map | 13 +++++++++++++ 2 files changed, 13 insertions(+), 8 deletions(-) delete mode 100644 jdk/make/tools/CharsetMapping/Big5.c2b diff --git a/jdk/make/tools/CharsetMapping/Big5.c2b b/jdk/make/tools/CharsetMapping/Big5.c2b deleted file mode 100644 index a4ed3176312..00000000000 --- a/jdk/make/tools/CharsetMapping/Big5.c2b +++ /dev/null @@ -1,8 +0,0 @@ -#Add the following 5 characters which are duplicated -#or have conflicts with other characters. -0xA1C4 0xFF3F #REGWARN Fallback 0xA1C4 SPACING UNDERSCORE -0xA2AC 0x2571 #REGWARN Fallback 0xA2AC LT DIAG UP RIGHT TO LOW LEFT -0xA2AD 0x2572 #REGWARN Fallback 0xA2AD LT DIAG UP LEFT TO LOW RIGHT -0xA451 0x5341 #REGWARN Fallback 0xA451 HANGZHOU NUMERAL TEN -0xA4CA 0x5345 #REGWARN Fallback 0xA4CA HANGZHOU NUMERAL THIRTY -# diff --git a/jdk/make/tools/CharsetMapping/Big5.map b/jdk/make/tools/CharsetMapping/Big5.map index dcfa244c310..93242f1ebaa 100644 --- a/jdk/make/tools/CharsetMapping/Big5.map +++ b/jdk/make/tools/CharsetMapping/Big5.map @@ -13830,8 +13830,21 @@ 0xF9D4 0x9F49 # 0xF9D5 0x9F98 # # +# from Big5.b2c-irreversible +# 0xA15A 0xFF3F #SPACING UNDERSCORE 0xA1FE 0x2571 #LT DIAG UP RIGHT TO LOW LEFT 0xA240 0x2572 #LT DIAG UP LEFT TO LOW RIGHTG 0xA2CC 0x5341 #HANGHZOU NUMERAL TEN 0xA2CE 0x5345 #HANGZHOU NUMERAL THIRTY +# +# Add the following 5 characters from Big5.c2b-irreversible +# It appears these 5 should be here to be the round-trip +# for these 5 characters. Above 5 are the b->c only nrt. +# +0xA1C4 0xFF3F +0xA2AC 0x2571 +0xA2AD 0x2572 +0xA451 0x5341 +0xA4CA 0x5345 +# From 2790d3b818716d15bbc576278c03b663281198fe Mon Sep 17 00:00:00 2001 From: Yuka Kamiya Date: Tue, 13 Apr 2010 13:47:54 +0900 Subject: [PATCH 32/91] 6709938: RFE: Support more scripts in JDK logical fonts using new fonts in Windows XP and later Reviewed-by: okutsu --- jdk/src/windows/classes/sun/awt/windows/fontconfig.properties | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/jdk/src/windows/classes/sun/awt/windows/fontconfig.properties b/jdk/src/windows/classes/sun/awt/windows/fontconfig.properties index b3aef483fd4..a380ec57e1b 100644 --- a/jdk/src/windows/classes/sun/awt/windows/fontconfig.properties +++ b/jdk/src/windows/classes/sun/awt/windows/fontconfig.properties @@ -41,6 +41,7 @@ allfonts.dingbats=Wingdings allfonts.lucida=Lucida Sans Regular allfonts.symbol=Symbol allfonts.thai=Lucida Sans Regular +allfonts.georgian=Sylfaen serif.plain.alphabetic=Times New Roman serif.plain.chinese-ms950=MingLiU @@ -231,7 +232,7 @@ sequence.allfonts.x-windows-874=alphabetic,thai,dingbats,symbol sequence.fallback=lucida,\ chinese-ms950,chinese-hkscs,chinese-ms936,chinese-gb18030,\ - japanese,korean,chinese-ms950-extb,chinese-ms936-extb + japanese,korean,chinese-ms950-extb,chinese-ms936-extb,georgian # Exclusion Ranges @@ -290,3 +291,4 @@ filename.Mangal=MANGAL.TTF filename.Symbol=SYMBOL.TTF filename.Wingdings=WINGDING.TTF +filename.Sylfaen=sylfaen.ttf From 87fe7a43767feb90ae074d518fea86d214fa8b69 Mon Sep 17 00:00:00 2001 From: Chris Hegarty Date: Tue, 13 Apr 2010 12:02:06 +0100 Subject: [PATCH 33/91] 6706251: api/java_net/NetworkInterface/index.html#misc: getDisplayName() returned non null but empty String Reviewed-by: alanb, michaelm, andrew --- jdk/src/share/classes/java/net/NetworkInterface.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/jdk/src/share/classes/java/net/NetworkInterface.java b/jdk/src/share/classes/java/net/NetworkInterface.java index 07941b062fd..eb332713985 100644 --- a/jdk/src/share/classes/java/net/NetworkInterface.java +++ b/jdk/src/share/classes/java/net/NetworkInterface.java @@ -221,11 +221,12 @@ public final class NetworkInterface { * A display name is a human readable String describing the network * device. * - * @return the display name of this network interface, - * or null if no display name is available. + * @return a non-empty string representing the display name of this network + * interface, or null if no display name is available. */ public String getDisplayName() { - return displayName; + /* strict TCK conformance */ + return "".equals(displayName) ? null : displayName; } /** From 6cfd12db8540790288ea7947bf13f94704cb9253 Mon Sep 17 00:00:00 2001 From: Masayoshi Okutsu Date: Wed, 14 Apr 2010 13:53:17 +0900 Subject: [PATCH 34/91] 6941948: NumaricShaper.shape() doesn't work with NumericShaper.Range.EASTERN_ARABIC Reviewed-by: peytoia --- .../classes/java/awt/font/NumericShaper.java | 111 +++++++++------- .../font/NumericShaper/EasternArabicTest.java | 118 ++++++++++++++++++ 2 files changed, 184 insertions(+), 45 deletions(-) create mode 100644 jdk/test/java/awt/font/NumericShaper/EasternArabicTest.java diff --git a/jdk/src/share/classes/java/awt/font/NumericShaper.java b/jdk/src/share/classes/java/awt/font/NumericShaper.java index 435b60213f0..75f4dbad751 100644 --- a/jdk/src/share/classes/java/awt/font/NumericShaper.java +++ b/jdk/src/share/classes/java/awt/font/NumericShaper.java @@ -129,6 +129,8 @@ public final class NumericShaper implements java.io.Serializable { * @since 1.7 */ public static enum Range { + // The order of EUROPEAN to MOGOLIAN must be consistent + // with the bitmask-based constants. /** * The Latin (European) range with the Latin (ASCII) digits. */ @@ -210,6 +212,9 @@ public final class NumericShaper implements java.io.Serializable { * The Mongolian range with the Mongolian digits. */ MONGOLIAN ('\u1810', '\u1800', '\u1900'), + // The order of EUROPEAN to MOGOLIAN must be consistent + // with the bitmask-based constants. + /** * The N'Ko range with the N'Ko digits. */ @@ -259,17 +264,6 @@ public final class NumericShaper implements java.io.Serializable { */ CHAM ('\uaa50', '\uaa00', '\uaa60'); - private static final Range[] ranges = Range.class.getEnumConstants(); - static { - // sort ranges[] by base for binary search - Arrays.sort(ranges, - new Comparator() { - public int compare(Range s1, Range s2) { - return s1.base > s2.base ? 1 : s1.base == s2.base ? 0 : -1; - } - }); - } - private static int toRangeIndex(Range script) { int index = script.ordinal(); return index < NUM_KEYS ? index : -1; @@ -346,11 +340,20 @@ public final class NumericShaper implements java.io.Serializable { /** * {@code Set} indicating which Unicode ranges to * shape. {@code null} for the bit mask-based API. - * - * @since 1.7 */ private transient Set rangeSet; + /** + * rangeSet.toArray() value. Sorted by Range.base when the number + * of elements is greater then BSEARCH_THRESHOLD. + */ + private transient Range[] rangeArray; + + /** + * If more than BSEARCH_THRESHOLD ranges are specified, binary search is used. + */ + private static final int BSEARCH_THRESHOLD = 3; + private static final long serialVersionUID = -8022764705923730308L; /** Identifies the Latin-1 (European) and extended range, and @@ -513,25 +516,32 @@ public final class NumericShaper implements java.io.Serializable { // cache for the NumericShaper.Range version private transient volatile Range currentRange = Range.EUROPEAN; - private Range rangeForCodePoint(int codepoint) { - Range range = currentRange; - if (range.inRange(codepoint)) { - return range; + private Range rangeForCodePoint(final int codepoint) { + if (currentRange.inRange(codepoint)) { + return currentRange; } - final Range[] ranges = Range.ranges; - int lo = 0; - int hi = ranges.length - 1; - while (lo <= hi) { - int mid = (lo + hi) / 2; - range = ranges[mid]; - if (codepoint < range.start) { - hi = mid - 1; - } else if (codepoint >= range.end) { - lo = mid + 1; - } else { - currentRange = range; - return range; + final Range[] ranges = rangeArray; + if (ranges.length > BSEARCH_THRESHOLD) { + int lo = 0; + int hi = ranges.length - 1; + while (lo <= hi) { + int mid = (lo + hi) / 2; + Range range = ranges[mid]; + if (codepoint < range.start) { + hi = mid - 1; + } else if (codepoint >= range.end) { + lo = mid + 1; + } else { + currentRange = range; + return range; + } + } + } else { + for (int i = 0; i < ranges.length; i++) { + if (ranges[i].inRange(codepoint)) { + return ranges[i]; + } } } return Range.EUROPEAN; @@ -928,8 +938,25 @@ public final class NumericShaper implements java.io.Serializable { } private NumericShaper(Range defaultContext, Set ranges) { - this.shapingRange = defaultContext; - this.rangeSet = EnumSet.copyOf(ranges); // throws NPE if ranges is null. + shapingRange = defaultContext; + rangeSet = EnumSet.copyOf(ranges); // throws NPE if ranges is null. + + // Give precedance to EASTERN_ARABIC if both ARABIC and + // EASTERN_ARABIC are specified. + if (rangeSet.contains(Range.EASTERN_ARABIC) + && rangeSet.contains(Range.ARABIC)) { + rangeSet.remove(Range.ARABIC); + } + rangeArray = rangeSet.toArray(new Range[rangeSet.size()]); + if (rangeArray.length > BSEARCH_THRESHOLD) { + // sort rangeArray for binary search + Arrays.sort(rangeArray, + new Comparator() { + public int compare(Range s1, Range s2) { + return s1.base > s2.base ? 1 : s1.base == s2.base ? 0 : -1; + } + }); + } } /** @@ -1152,31 +1179,25 @@ public final class NumericShaper implements java.io.Serializable { } private void shapeContextually(char[] text, int start, int count, Range ctxKey) { - if (ctxKey == null) { + // if we don't support the specified context, then don't shape. + if (ctxKey == null || !rangeSet.contains(ctxKey)) { ctxKey = Range.EUROPEAN; } Range lastKey = ctxKey; int base = ctxKey.getDigitBase(); char minDigit = (char)('0' + ctxKey.getNumericBase()); - for (int i = start, end = start + count; i < end; ++i) { + final int end = start + count; + for (int i = start; i < end; ++i) { char c = text[i]; if (c >= minDigit && c <= '9') { text[i] = (char)(c + base); continue; } if (isStrongDirectional(c)) { - Range newKey = rangeForCodePoint(c); - if (newKey != lastKey) { - lastKey = newKey; - ctxKey = newKey; - if (rangeSet.contains(Range.EUROPEAN) - && (ctxKey == Range.ARABIC || ctxKey == Range.EASTERN_ARABIC)) { - ctxKey = Range.EASTERN_ARABIC; - } else if (!rangeSet.contains(ctxKey)) { - ctxKey = Range.EUROPEAN; - } - + ctxKey = rangeForCodePoint(c); + if (ctxKey != lastKey) { + lastKey = ctxKey; base = ctxKey.getDigitBase(); minDigit = (char)('0' + ctxKey.getNumericBase()); } diff --git a/jdk/test/java/awt/font/NumericShaper/EasternArabicTest.java b/jdk/test/java/awt/font/NumericShaper/EasternArabicTest.java new file mode 100644 index 00000000000..0e57b0e58df --- /dev/null +++ b/jdk/test/java/awt/font/NumericShaper/EasternArabicTest.java @@ -0,0 +1,118 @@ +/* + * Copyright (c) 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 + * 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 6941948 + * @summary Make sure that EASTERN_ARABIC works with the enum interface. + */ + +import java.awt.font.NumericShaper; +import java.util.EnumSet; +import static java.awt.font.NumericShaper.*; + +public class EasternArabicTest { + static NumericShaper ns_old, ns_new; + static boolean err = false; + + static String[][] testData = { + // Arabic "October 10" + {"\u0623\u0643\u062a\u0648\u0628\u0631 10", + "\u0623\u0643\u062a\u0648\u0628\u0631 \u06f1\u06f0"}, // EASTERN_ARABIC digits + + // Tamil "Year 2009" + {"\u0b86\u0ba3\u0bcd\u0b9f\u0bc1 2009", + "\u0b86\u0ba3\u0bcd\u0b9f\u0bc1 \u0be8\u0be6\u0be6\u0bef"}, + // "\u0be800\u0bef is returned by pre-JDK7 because Tamil zero was not + // included in Unicode 4.0.0. + + // Ethiopic "Syllable 2009" + {"\u1200 2009", + "\u1200 \u136a00\u1371"}, + // Ethiopic zero doesn't exist even in Unicode 5.1.0. + }; + + public static void main(String[] args) { + ns_old = getContextualShaper(TAMIL|ETHIOPIC|EASTERN_ARABIC|ARABIC|THAI|LAO, + EUROPEAN); + ns_new = getContextualShaper(EnumSet.of(Range.THAI, + Range.TAMIL, + Range.ETHIOPIC, + Range.EASTERN_ARABIC, + Range.ARABIC, + Range.LAO), + Range.EUROPEAN); + + + StringBuilder cData = new StringBuilder(); + StringBuilder cExpected = new StringBuilder(); + for (int i = 0; i < testData.length; i++) { + String data = testData[i][0]; + String expected = testData[i][1]; + test(data, expected); + cData.append(data).append(' '); + cExpected.append(expected).append(' '); + } + test(cData.toString(), cExpected.toString()); + + if (err) { + throw new RuntimeException("shape() returned unexpected value."); + } + } + + private static void test(String data, String expected) { + char[] text = data.toCharArray(); + ns_old.shape(text, 0, text.length); + String got = new String(text); + + if (!expected.equals(got)) { + err = true; + System.err.println("Error with traditional range."); + System.err.println(" text = " + data); + System.err.println(" got = " + got); + System.err.println(" expected = " + expected); + } else { + System.err.println("OK with traditional range."); + System.err.println(" text = " + data); + System.err.println(" got = " + got); + System.err.println(" expected = " + expected); + } + + text = data.toCharArray(); + ns_new.shape(text, 0, text.length); + got = new String(text); + + if (!expected.equals(got)) { + err = true; + System.err.println("Error with new Enum range."); + System.err.println(" text = " + data); + System.err.println(" got = " + got); + System.err.println(" expected = " + expected); + } else { + System.err.println("OK with new Enum range."); + System.err.println(" text = " + data); + System.err.println(" got = " + got); + System.err.println(" expected = " + expected); + } + } +} From 965595d38b48f88a78184b5e8d18638574d9b1cb Mon Sep 17 00:00:00 2001 From: Maurizio Cimadamore Date: Wed, 14 Apr 2010 12:23:29 +0100 Subject: [PATCH 35/91] 6939618: Revert 'simple' diamond implementation Backout changeset for 6840638 Reviewed-by: jjg --- .../com/sun/tools/javac/code/Source.java | 3 - .../com/sun/tools/javac/comp/Attr.java | 49 ++-------- .../com/sun/tools/javac/comp/Check.java | 78 +++++----------- .../sun/tools/javac/parser/JavacParser.java | 22 +---- .../tools/javac/resources/compiler.properties | 8 -- .../com/sun/tools/javac/tree/TreeInfo.java | 9 -- .../javac/generics/diamond/neg/Neg01.java | 38 -------- .../javac/generics/diamond/neg/Neg01.out | 31 ------- .../javac/generics/diamond/neg/Neg02.java | 61 ------------- .../javac/generics/diamond/neg/Neg02.out | 61 ------------- .../javac/generics/diamond/neg/Neg03.java | 83 ----------------- .../javac/generics/diamond/neg/Neg03.out | 91 ------------------- .../javac/generics/diamond/neg/Neg04.java | 38 -------- .../javac/generics/diamond/neg/Neg04.out | 31 ------- .../javac/generics/diamond/neg/Neg05.java | 61 ------------- .../javac/generics/diamond/neg/Neg05.out | 33 ------- .../javac/generics/diamond/pos/Pos01.java | 44 --------- .../javac/generics/diamond/pos/Pos02.java | 67 -------------- .../javac/generics/diamond/pos/Pos03.java | 91 ------------------- .../javac/generics/diamond/pos/Pos04.java | 44 --------- .../round/TestElementsAnnotatedWith.java | 2 +- .../model/element/TestAnonClassNames.java | 6 +- 22 files changed, 36 insertions(+), 915 deletions(-) delete mode 100644 langtools/test/tools/javac/generics/diamond/neg/Neg01.java delete mode 100644 langtools/test/tools/javac/generics/diamond/neg/Neg01.out delete mode 100644 langtools/test/tools/javac/generics/diamond/neg/Neg02.java delete mode 100644 langtools/test/tools/javac/generics/diamond/neg/Neg02.out delete mode 100644 langtools/test/tools/javac/generics/diamond/neg/Neg03.java delete mode 100644 langtools/test/tools/javac/generics/diamond/neg/Neg03.out delete mode 100644 langtools/test/tools/javac/generics/diamond/neg/Neg04.java delete mode 100644 langtools/test/tools/javac/generics/diamond/neg/Neg04.out delete mode 100644 langtools/test/tools/javac/generics/diamond/neg/Neg05.java delete mode 100644 langtools/test/tools/javac/generics/diamond/neg/Neg05.out delete mode 100644 langtools/test/tools/javac/generics/diamond/pos/Pos01.java delete mode 100644 langtools/test/tools/javac/generics/diamond/pos/Pos02.java delete mode 100644 langtools/test/tools/javac/generics/diamond/pos/Pos03.java delete mode 100644 langtools/test/tools/javac/generics/diamond/pos/Pos04.java diff --git a/langtools/src/share/classes/com/sun/tools/javac/code/Source.java b/langtools/src/share/classes/com/sun/tools/javac/code/Source.java index 4809565d855..a2127564b4a 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/code/Source.java +++ b/langtools/src/share/classes/com/sun/tools/javac/code/Source.java @@ -122,9 +122,6 @@ public enum Source { public boolean allowGenerics() { return compareTo(JDK1_5) >= 0; } - public boolean allowDiamond() { - return compareTo(JDK1_7) >= 0; - } public boolean allowEnums() { return compareTo(JDK1_5) >= 0; } diff --git a/langtools/src/share/classes/com/sun/tools/javac/comp/Attr.java b/langtools/src/share/classes/com/sun/tools/javac/comp/Attr.java index b5d2c16d20f..1e0fda5290d 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/comp/Attr.java +++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Attr.java @@ -207,21 +207,6 @@ public class Attr extends JCTree.Visitor { return owntype; } - Type checkReturn(JCTree tree, Type owntype, int ownkind, int pkind, Type pt) { - if (owntype.tag != ERROR && pt.tag != METHOD && pt.tag != FORALL) { - if ((ownkind & ~pkind) == 0) { - owntype = chk.checkReturnType(tree.pos(), owntype, pt); - } else { - log.error(tree.pos(), "unexpected.type", - kindNames(pkind), - kindName(ownkind)); - owntype = types.createErrorType(owntype); - } - } - tree.type = owntype; - return owntype; - } - /** Is given blank final variable assignable, i.e. in a scope where it * may be assigned to even though it is final? * @param v The blank final variable. @@ -440,14 +425,7 @@ public class Attr extends JCTree.Visitor { /** Derived visitor method: attribute a type tree. */ Type attribType(JCTree tree, Env env) { - Type result = attribType(tree, env, Type.noType); - return result; - } - - /** Derived visitor method: attribute a type tree. - */ - Type attribType(JCTree tree, Env env, Type pt) { - Type result = attribTree(tree, env, TYP, pt); + Type result = attribTree(tree, env, TYP, Type.noType); return result; } @@ -1400,7 +1378,7 @@ public class Attr extends JCTree.Visitor { // Check that value of resulting type is admissible in the // current context. Also, capture the return type - result = checkReturn(tree, capture(restype), VAL, pkind, pt); + result = check(tree, capture(restype), VAL, pkind, pt); } chk.validate(tree.typeargs, localEnv); } @@ -1475,9 +1453,9 @@ public class Attr extends JCTree.Visitor { // Attribute clazz expression and store // symbol + type back into the attributed tree. - Type clazztype = attribType(clazz, env); + Type clazztype = chk.checkClassType( + tree.clazz.pos(), attribType(clazz, env), true); chk.validate(clazz, localEnv); - clazztype = chk.checkNewClassType(clazz.pos(), clazztype, true, pt); if (tree.encl != null) { // We have to work in this case to store // symbol + type back into the attributed tree. @@ -1582,9 +1560,7 @@ public class Attr extends JCTree.Visitor { // ... // } if (Resolve.isStatic(env)) cdef.mods.flags |= STATIC; - clazz = TreeInfo.isDiamond(tree) ? - make.Type(clazztype) - : clazz; + if (clazztype.tsym.isInterface()) { cdef.implementing = List.of(clazz); } else { @@ -2571,7 +2547,7 @@ public class Attr extends JCTree.Visitor { if (clazztype.tag == CLASS) { List formals = clazztype.tsym.type.getTypeArguments(); - if (actuals.length() == formals.length() || actuals.isEmpty()) { + if (actuals.length() == formals.length()) { List a = actuals; List f = formals; while (a.nonEmpty()) { @@ -2597,18 +2573,7 @@ public class Attr extends JCTree.Visitor { clazzOuter = site; } } - if (actuals.nonEmpty()) { - owntype = new ClassType(clazzOuter, actuals, clazztype.tsym); - } - else if (TreeInfo.isDiamond(tree)) { - //a type apply with no explicit type arguments - diamond operator - //the result type is a forall F where F's tvars are the type-variables - //that will be inferred when F is checked against the expected type - List ftvars = clazztype.tsym.type.getTypeArguments(); - List new_tvars = types.newInstances(ftvars); - clazztype = new ClassType(clazzOuter, new_tvars, clazztype.tsym); - owntype = new ForAll(new_tvars, clazztype); - } + owntype = new ClassType(clazzOuter, actuals, clazztype.tsym); } else { if (formals.length() != 0) { log.error(tree.pos(), "wrong.number.type.args", diff --git a/langtools/src/share/classes/com/sun/tools/javac/comp/Check.java b/langtools/src/share/classes/com/sun/tools/javac/comp/Check.java index bfaba9f4c4d..c55b1934092 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/comp/Check.java +++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Check.java @@ -375,6 +375,8 @@ public class Check { Type checkType(DiagnosticPosition pos, Type found, Type req) { if (req.tag == ERROR) return req; + if (found.tag == FORALL) + return instantiatePoly(pos, (ForAll)found, req, convertWarner(pos, found, req)); if (req.tag == NONE) return found; if (types.isAssignable(found, req, convertWarner(pos, found, req))) @@ -392,33 +394,6 @@ public class Check { return typeError(pos, diags.fragment("incompatible.types"), found, req); } - Type checkReturnType(DiagnosticPosition pos, Type found, Type req) { - if (found.tag == FORALL) { - try { - return instantiatePoly(pos, (ForAll) found, req, convertWarner(pos, found, req)); - } catch (Infer.NoInstanceException ex) { - if (ex.isAmbiguous) { - JCDiagnostic d = ex.getDiagnostic(); - log.error(pos, - "undetermined.type" + (d != null ? ".1" : ""), - found, d); - return types.createErrorType(req); - } else { - JCDiagnostic d = ex.getDiagnostic(); - return typeError(pos, - diags.fragment("incompatible.types" + (d != null ? ".1" : ""), d), - found, req); - } - } catch (Infer.InvalidInstanceException ex) { - JCDiagnostic d = ex.getDiagnostic(); - log.error(pos, "invalid.inferred.types", ((ForAll)found).tvars, d); - return types.createErrorType(req); - } - } else { - return checkType(pos, found, req); - } - } - /** Instantiate polymorphic type to some prototype, unless * prototype is `anyPoly' in which case polymorphic type * is returned unchanged. @@ -432,9 +407,28 @@ public class Check { } else if (pt.tag == ERROR) { return pt; } else { - return infer.instantiateExpr(t, pt, warn); + try { + return infer.instantiateExpr(t, pt, warn); + } catch (Infer.NoInstanceException ex) { + if (ex.isAmbiguous) { + JCDiagnostic d = ex.getDiagnostic(); + log.error(pos, + "undetermined.type" + (d!=null ? ".1" : ""), + t, d); + return types.createErrorType(pt); + } else { + JCDiagnostic d = ex.getDiagnostic(); + return typeError(pos, + diags.fragment("incompatible.types" + (d!=null ? ".1" : ""), d), + t, pt); + } + } catch (Infer.InvalidInstanceException ex) { + JCDiagnostic d = ex.getDiagnostic(); + log.error(pos, "invalid.inferred.types", t.tvars, d); + return types.createErrorType(pt); + } } - } + } /** Check that a given type can be cast to a given target type. * Return the result of the cast. @@ -557,29 +551,6 @@ public class Check { return t; } - /** Check that type is a valid type for a new expression. If the type contains - * some uninferred type variables, instantiate them exploiting the expected - * type. - * - * @param pos Position to be used for error reporting. - * @param t The type to be checked. - * @param noBounds True if type bounds are illegal here. - * @param pt Expected type (used with diamond operator) - */ - Type checkNewClassType(DiagnosticPosition pos, Type t, boolean noBounds, Type pt) { - if (t.tag == FORALL) { - try { - t = instantiatePoly(pos, (ForAll)t, pt, Warner.noWarnings); - } - catch (Infer.NoInstanceException ex) { - JCDiagnostic d = ex.getDiagnostic(); - log.error(pos, "cant.apply.diamond", t.getTypeArguments(), d); - return types.createErrorType(pt); - } - } - return checkClassType(pos, t, noBounds); - } - /** Check that type is a reifiable class, interface or array type. * @param pos Position to be used for error reporting. * @param t The type to be checked. @@ -936,8 +907,7 @@ public class Check { } checkCapture(tree); - } - if (tree.type.tag == CLASS || tree.type.tag == FORALL) { + // Check that this type is either fully parameterized, or // not parameterized at all. if (tree.type.getEnclosingType().isRaw()) diff --git a/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java b/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java index 3816c93e176..a426f4a896a 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java +++ b/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java @@ -131,7 +131,6 @@ public class JavacParser implements Parser { this.allowForeach = source.allowForeach(); this.allowStaticImport = source.allowStaticImport(); this.allowAnnotations = source.allowAnnotations(); - this.allowDiamond = source.allowDiamond(); this.allowTypeAnnotations = source.allowTypeAnnotations(); this.keepDocComments = keepDocComments; if (keepDocComments) @@ -149,10 +148,6 @@ public class JavacParser implements Parser { */ boolean allowGenerics; - /** Switch: Should diamond operator be recognized? - */ - boolean allowDiamond; - /** Switch: Should varargs be recognized? */ boolean allowVarargs; @@ -199,7 +194,6 @@ public class JavacParser implements Parser { static final int TYPE = 2; static final int NOPARAMS = 4; static final int TYPEARG = 8; - static final int DIAMOND = 16; /** The current mode. */ @@ -1349,11 +1343,6 @@ public class JavacParser implements Parser { ListBuffer args = lb(); if (S.token() == LT) { S.nextToken(); - if (S.token() == GT && (mode & DIAMOND) != 0) { - checkDiamond(); - S.nextToken(); - return List.nil(); - } args.append(((mode & EXPR) == 0) ? typeArgument() : parseType()); while (S.token() == COMMA) { S.nextToken(); @@ -1527,7 +1516,7 @@ public class JavacParser implements Parser { t = F.AnnotatedType(newAnnotations, t); int oldmode = mode; - mode = TYPE | DIAMOND; + mode = TYPE; if (S.token() == LT) { checkGenerics(); t = typeArguments(t); @@ -1580,11 +1569,8 @@ public class JavacParser implements Parser { JCExpression innerCreator(int newpos, List typeArgs, JCExpression encl) { JCExpression t = toP(F.at(S.pos()).Ident(ident())); if (S.token() == LT) { - int oldmode = mode; - mode |= DIAMOND; checkGenerics(); t = typeArguments(t); - mode = oldmode; } return classCreatorRest(newpos, encl, typeArgs, t); } @@ -3151,12 +3137,6 @@ public class JavacParser implements Parser { } } - void checkDiamond() { - if (!allowDiamond) { - log.error(S.pos(), "diamond.not.supported.in.source", source.name); - allowDiamond = true; - } - } void checkGenerics() { if (!allowGenerics) { log.error(S.pos(), "generics.not.supported.in.source", source.name); diff --git a/langtools/src/share/classes/com/sun/tools/javac/resources/compiler.properties b/langtools/src/share/classes/com/sun/tools/javac/resources/compiler.properties index 23d7fc38353..dc99f0ec35d 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/resources/compiler.properties +++ b/langtools/src/share/classes/com/sun/tools/javac/resources/compiler.properties @@ -1082,10 +1082,6 @@ compiler.err.cant.resolve.location.args.params=\ symbol: {0} <{2}>{1}({3})\n\ location: {4} {5} -compiler.err.cant.apply.diamond=\ - diamond operator cannot infer types for {0};\n\ - reason: {1} - ## The following are all possible string for "kindname". ## They should be called whatever the JLS calls them after it been translated ## to the appropriate language. @@ -1227,10 +1223,6 @@ compiler.err.enums.not.supported.in.source=\ enums are not supported in -source {0}\n\ (use -source 5 or higher to enable enums) -compiler.err.diamond.not.supported.in.source=\ - diamond operator is not supported in -source {0}\n\ -(use -source 7 or higher to enable diamond operator) - compiler.err.string.switch.not.supported.in.source=\ strings in switch are not supported in -source {0}\n\ (use -source 7 or higher to enable strings in switch) diff --git a/langtools/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java b/langtools/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java index 12f25312e6e..b42586a978a 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java +++ b/langtools/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java @@ -204,15 +204,6 @@ public class TreeInfo { return (JCMethodInvocation)exec.expr; } - /** Return true if a tree represents a diamond new expr. */ - public static boolean isDiamond(JCTree tree) { - switch(tree.getTag()) { - case JCTree.TYPEAPPLY: return ((JCTypeApply)tree).getTypeArguments().isEmpty(); - case JCTree.NEWCLASS: return isDiamond(((JCNewClass)tree).clazz); - default: return false; - } - } - /** Return true if a tree represents the null literal. */ public static boolean isNull(JCTree tree) { if (tree.getTag() != JCTree.LITERAL) diff --git a/langtools/test/tools/javac/generics/diamond/neg/Neg01.java b/langtools/test/tools/javac/generics/diamond/neg/Neg01.java deleted file mode 100644 index 8b23e491391..00000000000 --- a/langtools/test/tools/javac/generics/diamond/neg/Neg01.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * @test /nodynamiccopyright/ - * @bug 6840638 - * - * @summary Project Coin: Improved Type Inference for Generic Instance Creation (aka 'diamond') - * @author mcimadamore - * @compile/fail/ref=Neg01.out Neg01.java -source 1.7 -XDrawDiagnostics - * - */ - -class Neg01 { - - Neg01(X x) {} - - Neg01(X x, Z z) {} - - void test() { - Neg01 n1 = new Neg01<>(""); //new Foo created - Neg01 n2 = new Neg01<>(""); //new Foo created - Neg01 n3 = new Neg01<>(""); //new Foo created - Neg01 n4 = new Neg01<>(""); //new Foo created - - Neg01 n5 = new Neg01<>(""){}; //new Foo created - Neg01 n6 = new Neg01<>(""){}; //new Foo created - Neg01 n7 = new Neg01<>(""){}; //new Foo created - Neg01 n8 = new Neg01<>(""){}; //new Foo created - - Neg01 n9 = new Neg01<>("", ""); //new Foo created - Neg01 n10 = new Neg01<>("", ""); //new Foo created - Neg01 n11 = new Neg01<>("", ""); //new Foo created - Foo n12 = new Neg01<>("", ""); //new Foo created - - Neg01 n13 = new Neg01<>("", ""){}; //new Foo created - Neg01 n14 = new Neg01<>("", ""){}; //new Foo created - Neg01 n15 = new Neg01<>("", ""){}; //new Foo created - Neg01 n16 = new Neg01<>("", ""){}; //new Foo created - } -} diff --git a/langtools/test/tools/javac/generics/diamond/neg/Neg01.out b/langtools/test/tools/javac/generics/diamond/neg/Neg01.out deleted file mode 100644 index 83078458123..00000000000 --- a/langtools/test/tools/javac/generics/diamond/neg/Neg01.out +++ /dev/null @@ -1,31 +0,0 @@ -Neg01.java:18:15: compiler.err.not.within.bounds: java.lang.String -Neg01.java:18:37: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg01, Neg01) -Neg01.java:19:15: compiler.err.not.within.bounds: ? extends java.lang.String -Neg01.java:19:47: compiler.err.cant.apply.diamond: X, (compiler.misc.no.unique.maximal.instance.exists: X, java.lang.String,java.lang.Number) -Neg01.java:20:23: compiler.err.cant.resolve.location.args: kindname.constructor, Neg01, , java.lang.String, kindname.class, Neg01 -Neg01.java:21:15: compiler.err.not.within.bounds: ? super java.lang.String -Neg01.java:21:45: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg01, Neg01) -Neg01.java:23:15: compiler.err.not.within.bounds: java.lang.String -Neg01.java:23:37: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg01, Neg01) -Neg01.java:24:15: compiler.err.not.within.bounds: ? extends java.lang.String -Neg01.java:24:47: compiler.err.cant.apply.diamond: X, (compiler.misc.no.unique.maximal.instance.exists: X, java.lang.String,java.lang.Number) -Neg01.java:25:23: compiler.err.cant.resolve.location.args: kindname.constructor, Neg01, , java.lang.String, kindname.class, Neg01 -Neg01.java:25:38: compiler.err.cant.resolve.location.args: kindname.constructor, Neg01, , , kindname.class, Neg01 -Neg01.java:26:15: compiler.err.not.within.bounds: ? super java.lang.String -Neg01.java:26:45: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg01, Neg01) -Neg01.java:28:15: compiler.err.not.within.bounds: java.lang.String -Neg01.java:28:37: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg01, Neg01) -Neg01.java:29:15: compiler.err.not.within.bounds: ? extends java.lang.String -Neg01.java:29:48: compiler.err.cant.apply.diamond: X, (compiler.misc.no.unique.maximal.instance.exists: X, java.lang.String,java.lang.Number) -Neg01.java:30:24: compiler.err.cant.resolve.location.args: kindname.constructor, Neg01, , java.lang.String,java.lang.String, kindname.class, Neg01 -Neg01.java:31:9: compiler.err.cant.resolve.location: kindname.class, Foo, , , kindname.class, Neg01 -Neg01.java:31:35: compiler.err.cant.resolve.location.args: kindname.constructor, Neg01, , java.lang.String,java.lang.String, kindname.class, Neg01 -Neg01.java:33:15: compiler.err.not.within.bounds: java.lang.String -Neg01.java:33:38: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg01, Neg01) -Neg01.java:34:15: compiler.err.not.within.bounds: ? extends java.lang.String -Neg01.java:34:48: compiler.err.cant.apply.diamond: X, (compiler.misc.no.unique.maximal.instance.exists: X, java.lang.String,java.lang.Number) -Neg01.java:35:24: compiler.err.cant.resolve.location.args: kindname.constructor, Neg01, , java.lang.String,java.lang.String, kindname.class, Neg01 -Neg01.java:35:43: compiler.err.cant.resolve.location.args: kindname.constructor, Neg01, , , kindname.class, Neg01 -Neg01.java:36:15: compiler.err.not.within.bounds: ? super java.lang.String -Neg01.java:36:46: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg01, Neg01) -30 errors diff --git a/langtools/test/tools/javac/generics/diamond/neg/Neg02.java b/langtools/test/tools/javac/generics/diamond/neg/Neg02.java deleted file mode 100644 index b732ce12164..00000000000 --- a/langtools/test/tools/javac/generics/diamond/neg/Neg02.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * @test /nodynamiccopyright/ - * @bug 6840638 - * - * @summary Project Coin: Improved Type Inference for Generic Instance Creation (aka 'diamond') - * @author mcimadamore - * @compile/fail/ref=Neg02.out Neg02.java -source 1.7 -XDrawDiagnostics - * - */ - -class Neg02 { - - static class Foo { - Foo(X x) {} - Foo(X x, Z z) {} - } - - void testSimple() { - Foo f1 = new Foo<>(""); //new Foo created - Foo f2 = new Foo<>(""); //new Foo created - Foo f3 = new Foo<>(""); //new Foo created - Foo f4 = new Foo<>(""); //new Foo created - - Foo f5 = new Foo<>(""){}; //new Foo created - Foo f6 = new Foo<>(""){}; //new Foo created - Foo f7 = new Foo<>(""){}; //new Foo created - Foo f8 = new Foo<>(""){}; //new Foo created - - Foo f9 = new Foo<>("", ""); //new Foo created - Foo f10 = new Foo<>("", ""); //new Foo created - Foo f11 = new Foo<>("", ""); //new Foo created - Foo f12 = new Foo<>("", ""); //new Foo created - - Foo f13 = new Foo<>("", ""){}; //new Foo created - Foo f14 = new Foo<>("", ""){}; //new Foo created - Foo f15 = new Foo<>("", ""){}; //new Foo created - Foo f16 = new Foo<>("", ""){}; //new Foo created - } - - void testQualified() { - Foo f1 = new Neg02.Foo<>(""); //new Foo created - Foo f2 = new Neg02.Foo<>(""); //new Foo created - Foo f3 = new Neg02.Foo<>(""); //new Foo created - Foo f4 = new Neg02.Foo<>(""); //new Foo created - - Foo f5 = new Neg02.Foo<>(""){}; //new Foo created - Foo f6 = new Neg02.Foo<>(""){}; //new Foo created - Foo f7 = new Neg02.Foo<>(""){}; //new Foo created - Foo f8 = new Neg02.Foo<>(""){}; //new Foo created - - Foo f9 = new Neg02.Foo<>("", ""); //new Foo created - Foo f10 = new Neg02.Foo<>("", ""); //new Foo created - Foo f11 = new Neg02.Foo<>("", ""); //new Foo created - Foo f12 = new Neg02.Foo<>("", ""); //new Foo created - - Foo f13 = new Neg02.Foo<>("", ""){}; //new Foo created - Foo f14 = new Neg02.Foo<>("", ""){}; //new Foo created - Foo f15 = new Neg02.Foo<>("", ""){}; //new Foo created - Foo f16 = new Neg02.Foo<>("", ""){}; //new Foo created - } -} diff --git a/langtools/test/tools/javac/generics/diamond/neg/Neg02.out b/langtools/test/tools/javac/generics/diamond/neg/Neg02.out deleted file mode 100644 index 27d7cb097f0..00000000000 --- a/langtools/test/tools/javac/generics/diamond/neg/Neg02.out +++ /dev/null @@ -1,61 +0,0 @@ -Neg02.java:19:13: compiler.err.not.within.bounds: java.lang.String -Neg02.java:19:33: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg02.Foo, Neg02.Foo) -Neg02.java:20:13: compiler.err.not.within.bounds: ? extends java.lang.String -Neg02.java:20:43: compiler.err.cant.apply.diamond: X, (compiler.misc.no.unique.maximal.instance.exists: X, java.lang.String,java.lang.Number) -Neg02.java:21:21: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String, kindname.class, Neg02.Foo -Neg02.java:22:13: compiler.err.not.within.bounds: ? super java.lang.String -Neg02.java:22:41: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg02.Foo, Neg02.Foo) -Neg02.java:24:13: compiler.err.not.within.bounds: java.lang.String -Neg02.java:24:33: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg02.Foo, Neg02.Foo) -Neg02.java:25:13: compiler.err.not.within.bounds: ? extends java.lang.String -Neg02.java:25:43: compiler.err.cant.apply.diamond: X, (compiler.misc.no.unique.maximal.instance.exists: X, java.lang.String,java.lang.Number) -Neg02.java:26:21: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String, kindname.class, Neg02.Foo -Neg02.java:26:34: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , , kindname.class, Neg02.Foo -Neg02.java:27:13: compiler.err.not.within.bounds: ? super java.lang.String -Neg02.java:27:41: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg02.Foo, Neg02.Foo) -Neg02.java:29:13: compiler.err.not.within.bounds: java.lang.String -Neg02.java:29:33: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg02.Foo, Neg02.Foo) -Neg02.java:30:13: compiler.err.not.within.bounds: ? extends java.lang.String -Neg02.java:30:44: compiler.err.cant.apply.diamond: X, (compiler.misc.no.unique.maximal.instance.exists: X, java.lang.String,java.lang.Number) -Neg02.java:31:22: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String,java.lang.String, kindname.class, Neg02.Foo -Neg02.java:32:13: compiler.err.not.within.bounds: ? super java.lang.String -Neg02.java:32:42: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg02.Foo, Neg02.Foo) -Neg02.java:34:13: compiler.err.not.within.bounds: java.lang.String -Neg02.java:34:34: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg02.Foo, Neg02.Foo) -Neg02.java:35:13: compiler.err.not.within.bounds: ? extends java.lang.String -Neg02.java:35:44: compiler.err.cant.apply.diamond: X, (compiler.misc.no.unique.maximal.instance.exists: X, java.lang.String,java.lang.Number) -Neg02.java:36:22: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String,java.lang.String, kindname.class, Neg02.Foo -Neg02.java:36:39: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , , kindname.class, Neg02.Foo -Neg02.java:37:13: compiler.err.not.within.bounds: ? super java.lang.String -Neg02.java:37:42: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg02.Foo, Neg02.Foo) -Neg02.java:41:13: compiler.err.not.within.bounds: java.lang.String -Neg02.java:41:39: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg02.Foo, Neg02.Foo) -Neg02.java:42:13: compiler.err.not.within.bounds: ? extends java.lang.String -Neg02.java:42:49: compiler.err.cant.apply.diamond: X, (compiler.misc.no.unique.maximal.instance.exists: X, java.lang.String,java.lang.Number) -Neg02.java:43:21: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String, kindname.class, Neg02.Foo -Neg02.java:44:13: compiler.err.not.within.bounds: ? super java.lang.String -Neg02.java:44:47: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg02.Foo, Neg02.Foo) -Neg02.java:46:13: compiler.err.not.within.bounds: java.lang.String -Neg02.java:46:39: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg02.Foo, Neg02.Foo) -Neg02.java:47:13: compiler.err.not.within.bounds: ? extends java.lang.String -Neg02.java:47:49: compiler.err.cant.apply.diamond: X, (compiler.misc.no.unique.maximal.instance.exists: X, java.lang.String,java.lang.Number) -Neg02.java:48:21: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String, kindname.class, Neg02.Foo -Neg02.java:48:40: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , , kindname.class, Neg02.Foo -Neg02.java:49:13: compiler.err.not.within.bounds: ? super java.lang.String -Neg02.java:49:47: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg02.Foo, Neg02.Foo) -Neg02.java:51:13: compiler.err.not.within.bounds: java.lang.String -Neg02.java:51:39: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg02.Foo, Neg02.Foo) -Neg02.java:52:13: compiler.err.not.within.bounds: ? extends java.lang.String -Neg02.java:52:50: compiler.err.cant.apply.diamond: X, (compiler.misc.no.unique.maximal.instance.exists: X, java.lang.String,java.lang.Number) -Neg02.java:53:22: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String,java.lang.String, kindname.class, Neg02.Foo -Neg02.java:54:13: compiler.err.not.within.bounds: ? super java.lang.String -Neg02.java:54:48: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg02.Foo, Neg02.Foo) -Neg02.java:56:13: compiler.err.not.within.bounds: java.lang.String -Neg02.java:56:40: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg02.Foo, Neg02.Foo) -Neg02.java:57:13: compiler.err.not.within.bounds: ? extends java.lang.String -Neg02.java:57:50: compiler.err.cant.apply.diamond: X, (compiler.misc.no.unique.maximal.instance.exists: X, java.lang.String,java.lang.Number) -Neg02.java:58:22: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String,java.lang.String, kindname.class, Neg02.Foo -Neg02.java:58:45: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , , kindname.class, Neg02.Foo -Neg02.java:59:13: compiler.err.not.within.bounds: ? super java.lang.String -Neg02.java:59:48: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg02.Foo, Neg02.Foo) -60 errors diff --git a/langtools/test/tools/javac/generics/diamond/neg/Neg03.java b/langtools/test/tools/javac/generics/diamond/neg/Neg03.java deleted file mode 100644 index 0e594b80a04..00000000000 --- a/langtools/test/tools/javac/generics/diamond/neg/Neg03.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * @test /nodynamiccopyright/ - * @bug 6840638 - * - * @summary Project Coin: Improved Type Inference for Generic Instance Creation (aka 'diamond') - * @author mcimadamore - * @compile/fail/ref=Neg03.out Neg03.java -source 1.7 -XDrawDiagnostics - * - */ - -class Neg03 { - - class Foo { - Foo(V x) {} - Foo(V x, Z z) {} - } - - void testSimple() { - Foo f1 = new Foo<>(""); //new Foo created - Foo f2 = new Foo<>(""); //new Foo created - Foo f3 = new Foo<>(""); //new Foo created - Foo f4 = new Foo<>(""); //new Foo created - - Foo f5 = new Foo<>(""){}; //new Foo created - Foo f6 = new Foo<>(""){}; //new Foo created - Foo f7 = new Foo<>(""){}; //new Foo created - Foo f8 = new Foo<>(""){}; //new Foo created - - Foo f9 = new Foo<>("", ""); //new Foo created - Foo f10 = new Foo<>("", ""); //new Foo created - Foo f11 = new Foo<>("", ""); //new Foo created - Foo f12 = new Foo<>("", ""); //new Foo created - - Foo f13 = new Foo<>("", ""){}; //new Foo created - Foo f14 = new Foo<>("", ""){}; //new Foo created - Foo f15 = new Foo<>("", ""){}; //new Foo created - Foo f16 = new Foo<>("", ""){}; //new Foo created - } - - void testQualified_1() { - Foo f1 = new Neg03.Foo<>(""); //new Foo created - Foo f2 = new Neg03.Foo<>(""); //new Foo created - Foo f3 = new Neg03.Foo<>(""); //new Foo created - Foo f4 = new Neg03.Foo<>(""); //new Foo created - - Foo f5 = new Neg03.Foo<>(""){}; //new Foo created - Foo f6 = new Neg03.Foo<>(""){}; //new Foo created - Foo f7 = new Neg03.Foo<>(""){}; //new Foo created - Foo f8 = new Neg03.Foo<>(""){}; //new Foo created - - Foo f9 = new Neg03.Foo<>("", ""); //new Foo created - Foo f10 = new Neg03.Foo<>("", ""); //new Foo created - Foo f11 = new Neg03.Foo<>("", ""); //new Foo created - Foo f12 = new Neg03.Foo<>("", ""); //new Foo created - - Foo f13 = new Neg03.Foo<>("", ""){}; //new Foo created - Foo f14 = new Neg03.Foo<>("", ""){}; //new Foo created - Foo f15 = new Neg03.Foo<>("", ""){}; //new Foo created - Foo f16 = new Neg03.Foo<>("", ""){}; //new Foo created - } - - void testQualified_2(Neg03 n) { - Foo f1 = n.new Foo<>(""); //new Foo created - Foo f2 = n.new Foo<>(""); //new Foo created - Foo f3 = n.new Foo<>(""); //new Foo created - Foo f4 = n.new Foo<>(""); //new Foo created - - Foo f5 = n.new Foo<>(""){}; //new Foo created - Foo f6 = n.new Foo<>(""){}; //new Foo created - Foo f7 = n.new Foo<>(""){}; //new Foo created - Foo f8 = n.new Foo<>(""){}; //new Foo created - - Foo f9 = n.new Foo<>("", ""); //new Foo created - Foo f10 = n.new Foo<>("", ""); //new Foo created - Foo f11 = n.new Foo<>("", ""); //new Foo created - Foo f12 = n.new Foo<>("", ""); //new Foo created - - Foo f13 = n.new Foo<>("", ""){}; //new Foo created - Foo f14 = n.new Foo<>("", ""){}; //new Foo created - Foo f15 = n.new Foo<>("", ""){}; //new Foo created - Foo f16 = n.new Foo<>("", ""){}; //new Foo created - } -} diff --git a/langtools/test/tools/javac/generics/diamond/neg/Neg03.out b/langtools/test/tools/javac/generics/diamond/neg/Neg03.out deleted file mode 100644 index 287df896e0b..00000000000 --- a/langtools/test/tools/javac/generics/diamond/neg/Neg03.out +++ /dev/null @@ -1,91 +0,0 @@ -Neg03.java:19:13: compiler.err.not.within.bounds: java.lang.String -Neg03.java:19:33: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03.Foo, Neg03.Foo) -Neg03.java:20:13: compiler.err.not.within.bounds: ? extends java.lang.String -Neg03.java:20:43: compiler.err.cant.apply.diamond: V, (compiler.misc.no.unique.maximal.instance.exists: V, java.lang.String,java.lang.Number) -Neg03.java:21:21: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String, kindname.class, Neg03.Foo -Neg03.java:22:13: compiler.err.not.within.bounds: ? super java.lang.String -Neg03.java:22:41: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03.Foo, Neg03.Foo) -Neg03.java:24:13: compiler.err.not.within.bounds: java.lang.String -Neg03.java:24:33: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03.Foo, Neg03.Foo) -Neg03.java:25:13: compiler.err.not.within.bounds: ? extends java.lang.String -Neg03.java:25:43: compiler.err.cant.apply.diamond: V, (compiler.misc.no.unique.maximal.instance.exists: V, java.lang.String,java.lang.Number) -Neg03.java:26:21: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String, kindname.class, Neg03.Foo -Neg03.java:26:34: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , , kindname.class, Neg03.Foo -Neg03.java:27:13: compiler.err.not.within.bounds: ? super java.lang.String -Neg03.java:27:41: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03.Foo, Neg03.Foo) -Neg03.java:29:13: compiler.err.not.within.bounds: java.lang.String -Neg03.java:29:33: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03.Foo, Neg03.Foo) -Neg03.java:30:13: compiler.err.not.within.bounds: ? extends java.lang.String -Neg03.java:30:44: compiler.err.cant.apply.diamond: V, (compiler.misc.no.unique.maximal.instance.exists: V, java.lang.String,java.lang.Number) -Neg03.java:31:22: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String,java.lang.String, kindname.class, Neg03.Foo -Neg03.java:32:13: compiler.err.not.within.bounds: ? super java.lang.String -Neg03.java:32:42: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03.Foo, Neg03.Foo) -Neg03.java:34:13: compiler.err.not.within.bounds: java.lang.String -Neg03.java:34:34: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03.Foo, Neg03.Foo) -Neg03.java:35:13: compiler.err.not.within.bounds: ? extends java.lang.String -Neg03.java:35:44: compiler.err.cant.apply.diamond: V, (compiler.misc.no.unique.maximal.instance.exists: V, java.lang.String,java.lang.Number) -Neg03.java:36:22: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String,java.lang.String, kindname.class, Neg03.Foo -Neg03.java:36:39: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , , kindname.class, Neg03.Foo -Neg03.java:37:13: compiler.err.not.within.bounds: ? super java.lang.String -Neg03.java:37:42: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03.Foo, Neg03.Foo) -Neg03.java:41:13: compiler.err.not.within.bounds: java.lang.String -Neg03.java:41:42: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03.Foo, Neg03.Foo) -Neg03.java:42:13: compiler.err.not.within.bounds: ? extends java.lang.String -Neg03.java:42:52: compiler.err.cant.apply.diamond: V, (compiler.misc.no.unique.maximal.instance.exists: V, java.lang.String,java.lang.Number) -Neg03.java:43:21: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String, kindname.class, Neg03.Foo -Neg03.java:44:13: compiler.err.not.within.bounds: ? super java.lang.String -Neg03.java:44:50: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03.Foo, Neg03.Foo) -Neg03.java:46:13: compiler.err.not.within.bounds: java.lang.String -Neg03.java:46:42: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03.Foo, Neg03.Foo) -Neg03.java:47:13: compiler.err.not.within.bounds: ? extends java.lang.String -Neg03.java:47:52: compiler.err.cant.apply.diamond: V, (compiler.misc.no.unique.maximal.instance.exists: V, java.lang.String,java.lang.Number) -Neg03.java:48:21: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String, kindname.class, Neg03.Foo -Neg03.java:48:43: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , , kindname.class, Neg03.Foo -Neg03.java:49:13: compiler.err.not.within.bounds: ? super java.lang.String -Neg03.java:49:50: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03.Foo, Neg03.Foo) -Neg03.java:51:13: compiler.err.not.within.bounds: java.lang.String -Neg03.java:51:42: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03.Foo, Neg03.Foo) -Neg03.java:52:13: compiler.err.not.within.bounds: ? extends java.lang.String -Neg03.java:52:53: compiler.err.cant.apply.diamond: V, (compiler.misc.no.unique.maximal.instance.exists: V, java.lang.String,java.lang.Number) -Neg03.java:53:22: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String,java.lang.String, kindname.class, Neg03.Foo -Neg03.java:54:13: compiler.err.not.within.bounds: ? super java.lang.String -Neg03.java:54:51: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03.Foo, Neg03.Foo) -Neg03.java:56:13: compiler.err.not.within.bounds: java.lang.String -Neg03.java:56:43: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03.Foo, Neg03.Foo) -Neg03.java:57:13: compiler.err.not.within.bounds: ? extends java.lang.String -Neg03.java:57:53: compiler.err.cant.apply.diamond: V, (compiler.misc.no.unique.maximal.instance.exists: V, java.lang.String,java.lang.Number) -Neg03.java:58:22: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String,java.lang.String, kindname.class, Neg03.Foo -Neg03.java:58:48: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , , kindname.class, Neg03.Foo -Neg03.java:59:13: compiler.err.not.within.bounds: ? super java.lang.String -Neg03.java:59:51: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03.Foo, Neg03.Foo) -Neg03.java:63:13: compiler.err.not.within.bounds: java.lang.String -Neg03.java:63:28: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03.Foo, Neg03.Foo) -Neg03.java:64:13: compiler.err.not.within.bounds: ? extends java.lang.String -Neg03.java:64:38: compiler.err.cant.apply.diamond: V, (compiler.misc.no.unique.maximal.instance.exists: V, java.lang.String,java.lang.Number) -Neg03.java:65:23: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String, kindname.class, Neg03.Foo -Neg03.java:66:13: compiler.err.not.within.bounds: ? super java.lang.String -Neg03.java:66:36: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03.Foo, Neg03.Foo) -Neg03.java:68:13: compiler.err.not.within.bounds: java.lang.String -Neg03.java:68:28: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03.Foo, Neg03.Foo) -Neg03.java:69:13: compiler.err.not.within.bounds: ? extends java.lang.String -Neg03.java:69:38: compiler.err.cant.apply.diamond: V, (compiler.misc.no.unique.maximal.instance.exists: V, java.lang.String,java.lang.Number) -Neg03.java:70:23: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String, kindname.class, Neg03.Foo -Neg03.java:70:36: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , , kindname.class, Neg03.Foo -Neg03.java:71:13: compiler.err.not.within.bounds: ? super java.lang.String -Neg03.java:71:36: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03.Foo, Neg03.Foo) -Neg03.java:73:13: compiler.err.not.within.bounds: java.lang.String -Neg03.java:73:28: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03.Foo, Neg03.Foo) -Neg03.java:74:13: compiler.err.not.within.bounds: ? extends java.lang.String -Neg03.java:74:39: compiler.err.cant.apply.diamond: V, (compiler.misc.no.unique.maximal.instance.exists: V, java.lang.String,java.lang.Number) -Neg03.java:75:24: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String,java.lang.String, kindname.class, Neg03.Foo -Neg03.java:76:13: compiler.err.not.within.bounds: ? super java.lang.String -Neg03.java:76:37: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03.Foo, Neg03.Foo) -Neg03.java:78:13: compiler.err.not.within.bounds: java.lang.String -Neg03.java:78:29: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03.Foo, Neg03.Foo) -Neg03.java:79:13: compiler.err.not.within.bounds: ? extends java.lang.String -Neg03.java:79:39: compiler.err.cant.apply.diamond: V, (compiler.misc.no.unique.maximal.instance.exists: V, java.lang.String,java.lang.Number) -Neg03.java:80:24: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String,java.lang.String, kindname.class, Neg03.Foo -Neg03.java:80:41: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , , kindname.class, Neg03.Foo -Neg03.java:81:13: compiler.err.not.within.bounds: ? super java.lang.String -Neg03.java:81:37: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03.Foo, Neg03.Foo) -90 errors diff --git a/langtools/test/tools/javac/generics/diamond/neg/Neg04.java b/langtools/test/tools/javac/generics/diamond/neg/Neg04.java deleted file mode 100644 index d04d93059ce..00000000000 --- a/langtools/test/tools/javac/generics/diamond/neg/Neg04.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * @test /nodynamiccopyright/ - * @bug 6840638 - * - * @summary Project Coin: Improved Type Inference for Generic Instance Creation (aka 'diamond') - * @author mcimadamore - * @compile/fail/ref=Neg04.out Neg04.java -source 1.7 -XDrawDiagnostics - * - */ - -class Neg04 { - - void test() { - class Foo { - Foo(V x) {} - Foo(V x, Z z) {} - } - Foo n1 = new Foo<>(""); //new Foo created - Foo n2 = new Foo<>(""); //new Foo created - Foo n3 = new Foo<>(""); //new Foo created - Foo n4 = new Foo<>(""); //new Foo created - - Foo n5 = new Foo<>(""){}; //new Foo created - Foo n6 = new Foo<>(""){}; //new Foo created - Foo n7 = new Foo<>(""){}; //new Foo created - Foo n8 = new Foo<>(""){}; //new Foo created - - Foo n9 = new Foo<>("", ""); //new Foo created - Foo n10 = new Foo<>("", ""); //new Foo created - Foo n11 = new Foo<>("", ""); //new Foo created - Foo n12 = new Foo<>("", ""); //new Foo created - - Foo n13 = new Foo<>("", ""){}; //new Foo created - Foo n14 = new Foo<>("", ""){}; //new Foo created - Foo n15 = new Foo<>("", ""){}; //new Foo created - Foo n16 = new Foo<>("", ""){}; //new Foo created - } -} diff --git a/langtools/test/tools/javac/generics/diamond/neg/Neg04.out b/langtools/test/tools/javac/generics/diamond/neg/Neg04.out deleted file mode 100644 index f3bf0c79000..00000000000 --- a/langtools/test/tools/javac/generics/diamond/neg/Neg04.out +++ /dev/null @@ -1,31 +0,0 @@ -Neg04.java:18:13: compiler.err.not.within.bounds: java.lang.String -Neg04.java:18:33: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Foo, Foo) -Neg04.java:19:13: compiler.err.not.within.bounds: ? extends java.lang.String -Neg04.java:19:43: compiler.err.cant.apply.diamond: V, (compiler.misc.no.unique.maximal.instance.exists: V, java.lang.String,java.lang.Number) -Neg04.java:20:21: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String, kindname.class, Foo -Neg04.java:21:13: compiler.err.not.within.bounds: ? super java.lang.String -Neg04.java:21:41: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Foo, Foo) -Neg04.java:23:13: compiler.err.not.within.bounds: java.lang.String -Neg04.java:23:33: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Foo, Foo) -Neg04.java:24:13: compiler.err.not.within.bounds: ? extends java.lang.String -Neg04.java:24:43: compiler.err.cant.apply.diamond: V, (compiler.misc.no.unique.maximal.instance.exists: V, java.lang.String,java.lang.Number) -Neg04.java:25:21: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String, kindname.class, Foo -Neg04.java:25:34: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , , kindname.class, Foo -Neg04.java:26:13: compiler.err.not.within.bounds: ? super java.lang.String -Neg04.java:26:41: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Foo, Foo) -Neg04.java:28:13: compiler.err.not.within.bounds: java.lang.String -Neg04.java:28:33: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Foo, Foo) -Neg04.java:29:13: compiler.err.not.within.bounds: ? extends java.lang.String -Neg04.java:29:44: compiler.err.cant.apply.diamond: V, (compiler.misc.no.unique.maximal.instance.exists: V, java.lang.String,java.lang.Number) -Neg04.java:30:22: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String,java.lang.String, kindname.class, Foo -Neg04.java:31:13: compiler.err.not.within.bounds: ? super java.lang.String -Neg04.java:31:42: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Foo, Foo) -Neg04.java:33:13: compiler.err.not.within.bounds: java.lang.String -Neg04.java:33:34: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Foo, Foo) -Neg04.java:34:13: compiler.err.not.within.bounds: ? extends java.lang.String -Neg04.java:34:44: compiler.err.cant.apply.diamond: V, (compiler.misc.no.unique.maximal.instance.exists: V, java.lang.String,java.lang.Number) -Neg04.java:35:22: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String,java.lang.String, kindname.class, Foo -Neg04.java:35:39: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , , kindname.class, Foo -Neg04.java:36:13: compiler.err.not.within.bounds: ? super java.lang.String -Neg04.java:36:42: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Foo, Foo) -30 errors diff --git a/langtools/test/tools/javac/generics/diamond/neg/Neg05.java b/langtools/test/tools/javac/generics/diamond/neg/Neg05.java deleted file mode 100644 index d287ec59aa1..00000000000 --- a/langtools/test/tools/javac/generics/diamond/neg/Neg05.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * @test /nodynamiccopyright/ - * @bug 6840638 - * - * @summary Project Coin: Improved Type Inference for Generic Instance Creation (aka 'diamond') - * @author mcimadamore - * @compile/fail/ref=Neg05.out Neg05.java -source 1.7 -XDrawDiagnostics - * - */ - -class Neg05 { - - class Foo { - Foo(V x) {} - Foo(V x, Z z) {} - } - - void testRare_1() { - Neg05.Foo f1 = new Neg05.Foo<>(""); //new Foo created - Neg05.Foo f2 = new Neg05.Foo<>(""); //new Foo created - Neg05.Foo f3 = new Neg05.Foo<>(""); //new Foo created - Neg05.Foo f4 = new Neg05.Foo<>(""); //new Foo created - - Neg05.Foo f5 = new Neg05.Foo<>(""){}; //new Foo created - Neg05.Foo f6 = new Neg05.Foo<>(""){}; //new Foo created - Neg05.Foo f7 = new Neg05.Foo<>(""){}; //new Foo created - Neg05.Foo f8 = new Neg05.Foo<>(""){}; //new Foo created - - Neg05.Foo f9 = new Neg05.Foo<>("", ""); //new Foo created - Neg05.Foo f10 = new Neg05.Foo<>("", ""); //new Foo created - Neg05.Foo f11 = new Neg05.Foo<>("", ""); //new Foo created - Neg05.Foo f12 = new Neg05.Foo<>("", ""); //new Foo created - - Neg05.Foo f13 = new Neg05.Foo<>("", ""){}; //new Foo created - Neg05.Foo f14 = new Neg05.Foo<>("", ""){}; //new Foo created - Neg05.Foo f15 = new Neg05.Foo<>("", ""){}; //new Foo created - Neg05.Foo f16 = new Neg05.Foo<>("", ""){}; //new Foo created - } - - void testRare_2(Neg05 n) { - Neg05.Foo f1 = n.new Foo<>(""); //new Foo created - Neg05.Foo f2 = n.new Foo<>(""); //new Foo created - Neg05.Foo f3 = n.new Foo<>(""); //new Foo created - Neg05.Foo f4 = n.new Foo<>(""); //new Foo created - - Neg05.Foo f5 = n.new Foo<>(""){}; //new Foo created - Neg05.Foo f6 = n.new Foo<>(""){}; //new Foo created - Neg05.Foo f7 = n.new Foo<>(""){}; //new Foo created - Neg05.Foo f8 = n.new Foo<>(""){}; //new Foo created - - Neg05.Foo f9 = n.new Foo<>("", ""); //new Foo created - Neg05.Foo f10 = n.new Foo<>("", ""); //new Foo created - Neg05.Foo f11 = n.new Foo<>("", ""); //new Foo created - Neg05.Foo f12 = n.new Foo<>("", ""); //new Foo created - - Neg05.Foo f13 = n.new Foo<>("", ""){}; //new Foo created - Neg05.Foo f14 = n.new Foo<>("", ""){}; //new Foo created - Neg05.Foo f15 = n.new Foo<>("", ""){}; //new Foo created - Neg05.Foo f16 = n.new Foo<>("", ""){}; //new Foo created - } -} diff --git a/langtools/test/tools/javac/generics/diamond/neg/Neg05.out b/langtools/test/tools/javac/generics/diamond/neg/Neg05.out deleted file mode 100644 index 582e83baca4..00000000000 --- a/langtools/test/tools/javac/generics/diamond/neg/Neg05.out +++ /dev/null @@ -1,33 +0,0 @@ -Neg05.java:19:48: compiler.err.improperly.formed.type.inner.raw.param -Neg05.java:20:58: compiler.err.improperly.formed.type.inner.raw.param -Neg05.java:21:43: compiler.err.improperly.formed.type.inner.raw.param -Neg05.java:22:56: compiler.err.improperly.formed.type.inner.raw.param -Neg05.java:24:48: compiler.err.improperly.formed.type.inner.raw.param -Neg05.java:25:58: compiler.err.improperly.formed.type.inner.raw.param -Neg05.java:26:43: compiler.err.improperly.formed.type.inner.raw.param -Neg05.java:27:56: compiler.err.improperly.formed.type.inner.raw.param -Neg05.java:29:48: compiler.err.improperly.formed.type.inner.raw.param -Neg05.java:30:59: compiler.err.improperly.formed.type.inner.raw.param -Neg05.java:31:44: compiler.err.improperly.formed.type.inner.raw.param -Neg05.java:32:57: compiler.err.improperly.formed.type.inner.raw.param -Neg05.java:34:49: compiler.err.improperly.formed.type.inner.raw.param -Neg05.java:35:59: compiler.err.improperly.formed.type.inner.raw.param -Neg05.java:36:44: compiler.err.improperly.formed.type.inner.raw.param -Neg05.java:37:57: compiler.err.improperly.formed.type.inner.raw.param -Neg05.java:41:37: compiler.err.improperly.formed.type.inner.raw.param -Neg05.java:42:47: compiler.err.improperly.formed.type.inner.raw.param -Neg05.java:43:32: compiler.err.improperly.formed.type.inner.raw.param -Neg05.java:44:45: compiler.err.improperly.formed.type.inner.raw.param -Neg05.java:46:37: compiler.err.improperly.formed.type.inner.raw.param -Neg05.java:47:47: compiler.err.improperly.formed.type.inner.raw.param -Neg05.java:48:32: compiler.err.improperly.formed.type.inner.raw.param -Neg05.java:49:45: compiler.err.improperly.formed.type.inner.raw.param -Neg05.java:51:37: compiler.err.improperly.formed.type.inner.raw.param -Neg05.java:52:48: compiler.err.improperly.formed.type.inner.raw.param -Neg05.java:53:33: compiler.err.improperly.formed.type.inner.raw.param -Neg05.java:54:46: compiler.err.improperly.formed.type.inner.raw.param -Neg05.java:56:38: compiler.err.improperly.formed.type.inner.raw.param -Neg05.java:57:48: compiler.err.improperly.formed.type.inner.raw.param -Neg05.java:58:33: compiler.err.improperly.formed.type.inner.raw.param -Neg05.java:59:46: compiler.err.improperly.formed.type.inner.raw.param -32 errors diff --git a/langtools/test/tools/javac/generics/diamond/pos/Pos01.java b/langtools/test/tools/javac/generics/diamond/pos/Pos01.java deleted file mode 100644 index 6d3a6d46b3f..00000000000 --- a/langtools/test/tools/javac/generics/diamond/pos/Pos01.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * @test /nodynamiccopyright/ - * @bug 6840638 - * - * @summary Project Coin: Improved Type Inference for Generic Instance Creation (aka 'diamond') - * @author mcimadamore - * @compile Pos01.java -source 1.7 - * @run main Pos01 - * - */ - -public class Pos01 { - - Pos01(X x) {} - - Pos01(X x, Z z) {} - - void test() { - Pos01 p1 = new Pos01<>(1); //new Foo created - Pos01 p2 = new Pos01<>(1); //new Foo created - Pos01 p3 = new Pos01<>(1); //new Foo created - Pos01 p4 = new Pos01<>(1); //new Foo created - - Pos01 p5 = new Pos01<>(1){}; //new Foo created - Pos01 p6 = new Pos01<>(1){}; //new Foo created - Pos01 p7 = new Pos01<>(1){}; //new Foo created - Pos01 p8 = new Pos01<>(1){}; //new Foo created - - Pos01 p9 = new Pos01<>(1, ""); //new Foo created - Pos01 p10 = new Pos01<>(1, ""); //new Foo created - Pos01 p11 = new Pos01<>(1, ""); //new Foo created - Pos01 p12 = new Pos01<>(1, ""); //new Foo created - - Pos01 p13 = new Pos01<>(1, ""){}; //new Foo created - Pos01 p14= new Pos01<>(1, ""){}; //new Foo created - Pos01 p15 = new Pos01<>(1, ""){}; //new Foo created - Pos01 p16 = new Pos01<>(1, ""){}; //new Foo created - } - - public static void main(String[] args) { - Pos01 p1 = new Pos01<>(""); - p1.test(); - } -} diff --git a/langtools/test/tools/javac/generics/diamond/pos/Pos02.java b/langtools/test/tools/javac/generics/diamond/pos/Pos02.java deleted file mode 100644 index 4b2e34c5a05..00000000000 --- a/langtools/test/tools/javac/generics/diamond/pos/Pos02.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * @test /nodynamiccopyright/ - * @bug 6840638 - * - * @summary Project Coin: Improved Type Inference for Generic Instance Creation (aka 'diamond') - * @author mcimadamore - * @compile Pos02.java -source 1.7 - * @run main Pos02 - */ - -public class Pos02 { - - static class Foo { - Foo(X x) {} - Foo(X x, Z z) {} - } - - void testSimple() { - Foo f1 = new Foo<>(1); //new Foo created - Foo f2 = new Foo<>(1); //new Foo created - Foo f3 = new Foo<>(1); //new Foo created - Foo f4 = new Foo<>(1); //new Foo created - - Foo f5 = new Foo<>(1){}; //new Foo created - Foo f6 = new Foo<>(1){}; //new Foo created - Foo f7 = new Foo<>(1){}; //new Foo created - Foo f8 = new Foo<>(1){}; //new Foo created - - Foo f9 = new Foo<>(1, ""); //new Foo created - Foo f10 = new Foo<>(1, ""); //new Foo created - Foo f11 = new Foo<>(1, ""); //new Foo created - Foo f12 = new Foo<>(1, ""); //new Foo created - - Foo f13 = new Foo<>(1, ""){}; //new Foo created - Foo f14 = new Foo<>(1, ""){}; //new Foo created - Foo f15 = new Foo<>(1, ""){}; //new Foo created - Foo f16 = new Foo<>(1, ""){}; //new Foo created - } - - void testQualified() { - Foo f1 = new Pos02.Foo<>(1); //new Foo created - Foo f2 = new Pos02.Foo<>(1); //new Foo created - Foo f3 = new Pos02.Foo<>(1); //new Foo created - Foo f4 = new Pos02.Foo<>(1); //new Foo created - - Foo f5 = new Pos02.Foo<>(1){}; //new Foo created - Foo f6 = new Pos02.Foo<>(1){}; //new Foo created - Foo f7 = new Pos02.Foo<>(1){}; //new Foo created - Foo f8 = new Pos02.Foo<>(1){}; //new Foo created - - Foo f9 = new Pos02.Foo<>(1, ""); //new Foo created - Foo f10 = new Pos02.Foo<>(1, ""); //new Foo created - Foo f11 = new Pos02.Foo<>(1, ""); //new Foo created - Foo f12 = new Pos02.Foo<>(1, ""); //new Foo created - - Foo f13 = new Pos02.Foo<>(1, ""){}; //new Foo created - Foo f14 = new Pos02.Foo<>(1, ""){}; //new Foo created - Foo f15 = new Pos02.Foo<>(1, ""){}; //new Foo created - Foo f16 = new Pos02.Foo<>(1, ""){}; //new Foo created - } - - public static void main(String[] args) { - Pos02 p2 = new Pos02(); - p2.testSimple(); - p2.testQualified(); - } -} diff --git a/langtools/test/tools/javac/generics/diamond/pos/Pos03.java b/langtools/test/tools/javac/generics/diamond/pos/Pos03.java deleted file mode 100644 index 0f8a32148c5..00000000000 --- a/langtools/test/tools/javac/generics/diamond/pos/Pos03.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * @test /nodynamiccopyright/ - * @bug 6840638 - * - * @summary Project Coin: Improved Type Inference for Generic Instance Creation (aka 'diamond') - * @author mcimadamore - * @compile Pos03.java -source 1.7 - * @run main Pos03 - * - */ - -public class Pos03 { - - class Foo { - Foo(V x) {} - Foo(V x, Z z) {} - } - - void testSimple() { - Foo f1 = new Foo<>(1); //new Foo created - Foo f2 = new Foo<>(1); //new Foo created - Foo f3 = new Foo<>(1); //new Foo created - Foo f4 = new Foo<>(1); //new Foo created - - Foo f5 = new Foo<>(1){}; //new Foo created - Foo f6 = new Foo<>(1){}; //new Foo created - Foo f7 = new Foo<>(1){}; //new Foo created - Foo f8 = new Foo<>(1){}; //new Foo created - - Foo f9 = new Foo<>(1, ""); //new Foo created - Foo f10 = new Foo<>(1, ""); //new Foo created - Foo f11 = new Foo<>(1, ""); //new Foo created - Foo f12 = new Foo<>(1, ""); //new Foo created - - Foo f13 = new Foo<>(1, ""){}; //new Foo created - Foo f14 = new Foo<>(1, ""){}; //new Foo created - Foo f15 = new Foo<>(1, ""){}; //new Foo created - Foo f16 = new Foo<>(1, ""){}; //new Foo created - } - - void testQualified_1() { - Foo f1 = new Pos03.Foo<>(1); //new Foo created - Foo f2 = new Pos03.Foo<>(1); //new Foo created - Foo f3 = new Pos03.Foo<>(1); //new Foo created - Foo f4 = new Pos03.Foo<>(1); //new Foo created - - Foo f5 = new Pos03.Foo<>(1){}; //new Foo created - Foo f6 = new Pos03.Foo<>(1){}; //new Foo created - Foo f7 = new Pos03.Foo<>(1){}; //new Foo created - Foo f8 = new Pos03.Foo<>(1){}; //new Foo created - - Foo f9 = new Pos03.Foo<>(1, ""); //new Foo created - Foo f10 = new Pos03.Foo<>(1, ""); //new Foo created - Foo f11 = new Pos03.Foo<>(1, ""); //new Foo created - Foo f12 = new Pos03.Foo<>(1, ""); //new Foo created - - Foo f13 = new Pos03.Foo<>(1, ""){}; //new Foo created - Foo f14 = new Pos03.Foo<>(1, ""){}; //new Foo created - Foo f15 = new Pos03.Foo<>(1, ""){}; //new Foo created - Foo f16 = new Pos03.Foo<>(1, ""){}; //new Foo created - } - - void testQualified_2(Pos03 p) { - Foo f1 = p.new Foo<>(1); //new Foo created - Foo f2 = p.new Foo<>(1); //new Foo created - Foo f3 = p.new Foo<>(1); //new Foo created - Foo f4 = p.new Foo<>(1); //new Foo created - - Foo f5 = p.new Foo<>(1){}; //new Foo created - Foo f6 = p.new Foo<>(1){}; //new Foo created - Foo f7 = p.new Foo<>(1){}; //new Foo created - Foo f8 = p.new Foo<>(1){}; //new Foo created - - Foo f9 = p.new Foo<>(1, ""); //new Foo created - Foo f10 = p.new Foo<>(1, ""); //new Foo created - Foo f11 = p.new Foo<>(1, ""); //new Foo created - Foo f12 = p.new Foo<>(1, ""); //new Foo created - - Foo f13 = p.new Foo<>(1, ""){}; //new Foo created - Foo f14 = p.new Foo<>(1, ""){}; //new Foo created - Foo f15 = p.new Foo<>(1, ""){}; //new Foo created - Foo f16 = p.new Foo<>(1, ""){}; //new Foo created - } - - public static void main(String[] args) { - Pos03 p3 = new Pos03<>(); - p3.testSimple(); - p3.testQualified_1(); - p3.testQualified_2(p3); - } -} diff --git a/langtools/test/tools/javac/generics/diamond/pos/Pos04.java b/langtools/test/tools/javac/generics/diamond/pos/Pos04.java deleted file mode 100644 index fae82a53eb5..00000000000 --- a/langtools/test/tools/javac/generics/diamond/pos/Pos04.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * @test /nodynamiccopyright/ - * @bug 6840638 - * - * @summary Project Coin: Improved Type Inference for Generic Instance Creation (aka 'diamond') - * @author mcimadamore - * @compile Pos04.java -source 1.7 - * @run main Pos04 - * - */ - -public class Pos04 { - - void test() { - class Foo { - Foo(V x) {} - Foo(V x, Z z) {} - } - Foo p1 = new Foo<>(1); //new Foo created - Foo p2 = new Foo<>(1); //new Foo created - Foo p3 = new Foo<>(1); //new Foo created - Foo p4 = new Foo<>(1); //new Foo created - - Foo p5 = new Foo<>(1){}; //new Foo created - Foo p6 = new Foo<>(1){}; //new Foo created - Foo p7 = new Foo<>(1){}; //new Foo created - Foo p8 = new Foo<>(1){}; //new Foo created - - Foo p9 = new Foo<>(1, ""); //new Foo created - Foo p10 = new Foo<>(1, ""); //new Foo created - Foo p11 = new Foo<>(1, ""); //new Foo created - Foo p12 = new Foo<>(1, ""); //new Foo created - - Foo p13 = new Foo<>(1, ""){}; //new Foo created - Foo p14 = new Foo<>(1, ""){}; //new Foo created - Foo p15 = new Foo<>(1, ""){}; //new Foo created - Foo p16 = new Foo<>(1, ""){}; //new Foo created - } - - public static void main(String[] args) { - Pos04 p4 = new Pos04<>(); - p4.test(); - } -} diff --git a/langtools/test/tools/javac/processing/environment/round/TestElementsAnnotatedWith.java b/langtools/test/tools/javac/processing/environment/round/TestElementsAnnotatedWith.java index ca7804f89e0..48463413833 100644 --- a/langtools/test/tools/javac/processing/environment/round/TestElementsAnnotatedWith.java +++ b/langtools/test/tools/javac/processing/environment/round/TestElementsAnnotatedWith.java @@ -89,7 +89,7 @@ public class TestElementsAnnotatedWith extends AbstractProcessor { // Verify that the annotation information is as // expected. - Set expectedNames = new HashSet<>(Arrays.asList(annotatedElementInfo.names())); + Set expectedNames = new HashSet(Arrays.asList(annotatedElementInfo.names())); resultsMeta = roundEnvironment. diff --git a/langtools/test/tools/javac/processing/model/element/TestAnonClassNames.java b/langtools/test/tools/javac/processing/model/element/TestAnonClassNames.java index 59f16b1da62..d6066cfb942 100644 --- a/langtools/test/tools/javac/processing/model/element/TestAnonClassNames.java +++ b/langtools/test/tools/javac/processing/model/element/TestAnonClassNames.java @@ -113,10 +113,10 @@ public class TestAnonClassNames { */ static void testClassName(String className) { JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler(); - List classNames = new ArrayList<>(); + List classNames = new ArrayList(); classNames.add(className); - List options = new ArrayList<>(); + List options = new ArrayList(); options.add("-proc:only"); options.add("-classpath"); options.add(System.getProperty("test.classes")); @@ -128,7 +128,7 @@ public class TestAnonClassNames { options, classNames, null); // Sources - List processors = new ArrayList<>(); + List processors = new ArrayList(); processors.add(new ClassNameProber()); compileTask.setProcessors(processors); Boolean goodResult = compileTask.call(); From d3fa7f79ad1b4a8f23c85750ec29b80dcdb8ea46 Mon Sep 17 00:00:00 2001 From: Maurizio Cimadamore Date: Wed, 14 Apr 2010 12:31:55 +0100 Subject: [PATCH 36/91] 6939620: Switch to 'complex' diamond inference scheme Implement new inference scheme for diamond operator that takes into account type of actual arguments supplied to constructor Reviewed-by: jjg, darcy --- .../com/sun/tools/javac/code/Source.java | 3 + .../com/sun/tools/javac/code/Symbol.java | 7 + .../com/sun/tools/javac/comp/Attr.java | 183 ++++++++++++++++-- .../com/sun/tools/javac/comp/Check.java | 37 ++++ .../com/sun/tools/javac/comp/Resolve.java | 44 +++++ .../sun/tools/javac/parser/JavacParser.java | 30 ++- .../tools/javac/resources/compiler.properties | 14 +- .../com/sun/tools/javac/tree/TreeInfo.java | 9 + .../test/tools/javac/6840059/T6840059.out | 4 +- .../javac/generics/diamond/neg/Neg01.java | 38 ++++ .../javac/generics/diamond/neg/Neg01.out | 29 +++ .../javac/generics/diamond/neg/Neg02.java | 61 ++++++ .../javac/generics/diamond/neg/Neg02.out | 57 ++++++ .../javac/generics/diamond/neg/Neg03.java | 83 ++++++++ .../javac/generics/diamond/neg/Neg03.out | 85 ++++++++ .../javac/generics/diamond/neg/Neg04.java | 38 ++++ .../javac/generics/diamond/neg/Neg04.out | 29 +++ .../javac/generics/diamond/neg/Neg05.java | 61 ++++++ .../javac/generics/diamond/neg/Neg05.out | 49 +++++ .../javac/generics/diamond/neg/Neg06.java | 21 ++ .../javac/generics/diamond/neg/Neg06.out | 4 + .../javac/generics/diamond/neg/Neg07.java | 19 ++ .../javac/generics/diamond/neg/Neg07.out | 3 + .../javac/generics/diamond/neg/Neg08.java | 30 +++ .../javac/generics/diamond/neg/Neg08.out | 4 + .../javac/generics/diamond/neg/Neg09.java | 22 +++ .../javac/generics/diamond/neg/Neg09.out | 4 + .../javac/generics/diamond/neg/Neg10.java | 17 ++ .../javac/generics/diamond/neg/Neg10.out | 2 + .../javac/generics/diamond/neg/Neg11.java | 18 ++ .../javac/generics/diamond/neg/Neg11.out | 3 + .../javac/generics/diamond/pos/Pos01.java | 67 +++++++ .../javac/generics/diamond/pos/Pos02.java | 90 +++++++++ .../javac/generics/diamond/pos/Pos03.java | 114 +++++++++++ .../javac/generics/diamond/pos/Pos04.java | 67 +++++++ .../javac/generics/diamond/pos/Pos05.java | 45 +++++ 36 files changed, 1368 insertions(+), 23 deletions(-) create mode 100644 langtools/test/tools/javac/generics/diamond/neg/Neg01.java create mode 100644 langtools/test/tools/javac/generics/diamond/neg/Neg01.out create mode 100644 langtools/test/tools/javac/generics/diamond/neg/Neg02.java create mode 100644 langtools/test/tools/javac/generics/diamond/neg/Neg02.out create mode 100644 langtools/test/tools/javac/generics/diamond/neg/Neg03.java create mode 100644 langtools/test/tools/javac/generics/diamond/neg/Neg03.out create mode 100644 langtools/test/tools/javac/generics/diamond/neg/Neg04.java create mode 100644 langtools/test/tools/javac/generics/diamond/neg/Neg04.out create mode 100644 langtools/test/tools/javac/generics/diamond/neg/Neg05.java create mode 100644 langtools/test/tools/javac/generics/diamond/neg/Neg05.out create mode 100644 langtools/test/tools/javac/generics/diamond/neg/Neg06.java create mode 100644 langtools/test/tools/javac/generics/diamond/neg/Neg06.out create mode 100644 langtools/test/tools/javac/generics/diamond/neg/Neg07.java create mode 100644 langtools/test/tools/javac/generics/diamond/neg/Neg07.out create mode 100644 langtools/test/tools/javac/generics/diamond/neg/Neg08.java create mode 100644 langtools/test/tools/javac/generics/diamond/neg/Neg08.out create mode 100644 langtools/test/tools/javac/generics/diamond/neg/Neg09.java create mode 100644 langtools/test/tools/javac/generics/diamond/neg/Neg09.out create mode 100644 langtools/test/tools/javac/generics/diamond/neg/Neg10.java create mode 100644 langtools/test/tools/javac/generics/diamond/neg/Neg10.out create mode 100644 langtools/test/tools/javac/generics/diamond/neg/Neg11.java create mode 100644 langtools/test/tools/javac/generics/diamond/neg/Neg11.out create mode 100644 langtools/test/tools/javac/generics/diamond/pos/Pos01.java create mode 100644 langtools/test/tools/javac/generics/diamond/pos/Pos02.java create mode 100644 langtools/test/tools/javac/generics/diamond/pos/Pos03.java create mode 100644 langtools/test/tools/javac/generics/diamond/pos/Pos04.java create mode 100644 langtools/test/tools/javac/generics/diamond/pos/Pos05.java diff --git a/langtools/src/share/classes/com/sun/tools/javac/code/Source.java b/langtools/src/share/classes/com/sun/tools/javac/code/Source.java index a2127564b4a..4809565d855 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/code/Source.java +++ b/langtools/src/share/classes/com/sun/tools/javac/code/Source.java @@ -122,6 +122,9 @@ public enum Source { public boolean allowGenerics() { return compareTo(JDK1_5) >= 0; } + public boolean allowDiamond() { + return compareTo(JDK1_7) >= 0; + } public boolean allowEnums() { return compareTo(JDK1_5) >= 0; } diff --git a/langtools/src/share/classes/com/sun/tools/javac/code/Symbol.java b/langtools/src/share/classes/com/sun/tools/javac/code/Symbol.java index 85f7b7d420e..bc354c8c666 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/code/Symbol.java +++ b/langtools/src/share/classes/com/sun/tools/javac/code/Symbol.java @@ -225,6 +225,13 @@ public abstract class Symbol implements Element { (owner.kind == TYP && owner.isLocal()); } + /** Has this symbol an empty name? This includes anonymous + * inner classses. + */ + public boolean isAnonymous() { + return name.isEmpty(); + } + /** Is this symbol a constructor? */ public boolean isConstructor() { diff --git a/langtools/src/share/classes/com/sun/tools/javac/comp/Attr.java b/langtools/src/share/classes/com/sun/tools/javac/comp/Attr.java index 1e0fda5290d..214a9723003 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/comp/Attr.java +++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Attr.java @@ -72,6 +72,7 @@ public class Attr extends JCTree.Visitor { final Log log; final Symtab syms; final Resolve rs; + final Infer infer; final Check chk; final MemberEnter memberEnter; final TreeMaker make; @@ -100,6 +101,7 @@ public class Attr extends JCTree.Visitor { memberEnter = MemberEnter.instance(context); make = TreeMaker.instance(context); enter = Enter.instance(context); + infer = Infer.instance(context); cfolder = ConstFold.instance(context); target = Target.instance(context); types = Types.instance(context); @@ -425,7 +427,14 @@ public class Attr extends JCTree.Visitor { /** Derived visitor method: attribute a type tree. */ Type attribType(JCTree tree, Env env) { - Type result = attribTree(tree, env, TYP, Type.noType); + Type result = attribType(tree, env, Type.noType); + return result; + } + + /** Derived visitor method: attribute a type tree. + */ + Type attribType(JCTree tree, Env env, Type pt) { + Type result = attribTree(tree, env, TYP, pt); return result; } @@ -532,6 +541,7 @@ public class Attr extends JCTree.Visitor { } /** Attribute type reference in an `extends' or `implements' clause. + * Supertypes of anonymous inner classes are usually already attributed. * * @param tree The tree making up the type reference. * @param env The environment current at the reference. @@ -543,7 +553,9 @@ public class Attr extends JCTree.Visitor { boolean classExpected, boolean interfaceExpected, boolean checkExtensible) { - Type t = attribType(tree, env); + Type t = tree.type != null ? + tree.type : + attribType(tree, env); return checkBase(t, tree, env, classExpected, interfaceExpected, checkExtensible); } Type checkBase(Type t, @@ -1448,13 +1460,16 @@ public class Attr extends JCTree.Visitor { ((JCTypeApply) clazz).arguments); else clazz = clazzid1; -// System.out.println(clazz + " generated.");//DEBUG } // Attribute clazz expression and store // symbol + type back into the attributed tree. - Type clazztype = chk.checkClassType( - tree.clazz.pos(), attribType(clazz, env), true); + Type clazztype = attribType(clazz, env); + Pair mapping = getSyntheticScopeMapping((ClassType)clazztype); + if (!TreeInfo.isDiamond(tree)) { + clazztype = chk.checkClassType( + tree.clazz.pos(), clazztype, true); + } chk.validate(clazz, localEnv); if (tree.encl != null) { // We have to work in this case to store @@ -1479,6 +1494,11 @@ public class Attr extends JCTree.Visitor { List argtypes = attribArgs(tree.args, localEnv); List typeargtypes = attribTypes(tree.typeargs, localEnv); + if (TreeInfo.isDiamond(tree)) { + clazztype = attribDiamond(localEnv, tree, clazztype, mapping, argtypes, typeargtypes, true); + clazz.type = clazztype; + } + // If we have made no mistakes in the class type... if (clazztype.tag == CLASS) { // Enums may not be instantiated except implicitly @@ -1516,12 +1536,12 @@ public class Attr extends JCTree.Visitor { tree.constructor = rs.resolveConstructor( tree.pos(), localEnv, clazztype, argtypes, typeargtypes); tree.constructorType = checkMethod(clazztype, - tree.constructor, - localEnv, - tree.args, - argtypes, - typeargtypes, - localEnv.info.varArgs); + tree.constructor, + localEnv, + tree.args, + argtypes, + typeargtypes, + localEnv.info.varArgs); if (localEnv.info.varArgs) assert tree.constructorType.isErroneous() || tree.varargsElement != null; } @@ -1606,6 +1626,136 @@ public class Attr extends JCTree.Visitor { chk.validate(tree.typeargs, localEnv); } + Type attribDiamond(Env env, + JCNewClass tree, + Type clazztype, + Pair mapping, + List argtypes, + List typeargtypes, + boolean reportErrors) { + if (clazztype.isErroneous()) { + //if the type of the instance creation expression is erroneous + //return the erroneous type itself + return clazztype; + } + else if (clazztype.isInterface()) { + //if the type of the instance creation expression is an interface + //skip the method resolution step (JLS 15.12.2.7). The type to be + //inferred is of the kind C + clazztype = new ForAll(clazztype.tsym.type.allparams(), + clazztype.tsym.type); + } else { + //if the type of the instance creation expression is a class type + //apply method resolution inference (JLS 15.12.2.7). The return type + //of the resolved constructor will be a partially instantiated type + ((ClassSymbol) clazztype.tsym).members_field = mapping.snd; + Symbol constructor; + try { + constructor = rs.resolveDiamond(tree.pos(), + env, + clazztype.tsym.type, + argtypes, + typeargtypes, reportErrors); + } finally { + ((ClassSymbol) clazztype.tsym).members_field = mapping.fst; + } + if (constructor.kind == MTH) { + ClassType ct = new ClassType(clazztype.getEnclosingType(), + clazztype.tsym.type.getTypeArguments(), + clazztype.tsym); + clazztype = checkMethod(ct, + constructor, + env, + tree.args, + argtypes, + typeargtypes, + env.info.varArgs).getReturnType(); + } else { + clazztype = syms.errType; + } + } + if (clazztype.tag == FORALL && !pt.isErroneous()) { + //if the resolved constructor's return type has some uninferred + //type-variables, infer them using the expected type and declared + //bounds (JLS 15.12.2.8). + try { + clazztype = infer.instantiateExpr((ForAll) clazztype, + pt.tag == NONE ? syms.objectType : pt, + Warner.noWarnings); + } catch (Infer.InferenceException ex) { + //an error occurred while inferring uninstantiated type-variables + //we need to optionally report an error + if (reportErrors) { + log.error(tree.clazz.pos(), + "cant.apply.diamond.1", + diags.fragment("diamond", clazztype.tsym), + ex.diagnostic); + } + } + } + if (reportErrors) { + clazztype = chk.checkClassType(tree.clazz.pos(), + clazztype, + true); + if (clazztype.tag == CLASS) { + List invalidDiamondArgs = chk.checkDiamond((ClassType)clazztype); + if (!clazztype.isErroneous() && invalidDiamondArgs.nonEmpty()) { + //one or more types inferred in the previous steps is either a + //captured type or an intersection type --- we need to report an error. + String subkey = invalidDiamondArgs.size() > 1 ? + "diamond.invalid.args" : + "diamond.invalid.arg"; + //The error message is of the kind: + // + //cannot infer type arguments for {clazztype}<>; + //reason: {subkey} + // + //where subkey is a fragment of the kind: + // + //type argument(s) {invalidDiamondArgs} inferred for {clazztype}<> is not allowed in this context + log.error(tree.clazz.pos(), + "cant.apply.diamond.1", + diags.fragment("diamond", clazztype.tsym), + diags.fragment(subkey, + invalidDiamondArgs, + diags.fragment("diamond", clazztype.tsym))); + } + } + } + return clazztype; + } + + /** Creates a synthetic scope containing fake generic constructors. + * Assuming that the original scope contains a constructor of the kind: + * Foo(X x, Y y), where X,Y are class type-variables declared in Foo, + * the synthetic scope is added a generic constructor of the kind: + * Foo(X x, Y y). This is crucial in order to enable diamond + * inference. The inferred return type of the synthetic constructor IS + * the inferred type for the diamond operator. + */ + private Pair getSyntheticScopeMapping(ClassType ctype) { + Pair mapping = + new Pair(ctype.tsym.members(), new Scope(ctype.tsym)); + List typevars = ctype.tsym.type.getTypeArguments(); + for (Scope.Entry e = mapping.fst.lookup(names.init); + e.scope != null; + e = e.next()) { + MethodSymbol newConstr = (MethodSymbol) e.sym.clone(ctype.tsym); + newConstr.name = names.init; + List oldTypeargs = List.nil(); + if (newConstr.type.tag == FORALL) { + oldTypeargs = ((ForAll) newConstr.type).tvars; + } + newConstr.type = new MethodType(newConstr.type.getParameterTypes(), + new ClassType(ctype.getEnclosingType(), ctype.tsym.type.getTypeArguments(), ctype.tsym), + newConstr.type.getThrownTypes(), + syms.methodClass); + newConstr.type = new ForAll(typevars.prependList(oldTypeargs), newConstr.type); + mapping.snd.enter(newConstr); + } + return mapping; + } + /** Make an attributed null check tree. */ public JCExpression makeNullCheck(JCExpression arg) { @@ -2547,7 +2697,7 @@ public class Attr extends JCTree.Visitor { if (clazztype.tag == CLASS) { List formals = clazztype.tsym.type.getTypeArguments(); - if (actuals.length() == formals.length()) { + if (actuals.length() == formals.length() || actuals.length() == 0) { List a = actuals; List f = formals; while (a.nonEmpty()) { @@ -2788,9 +2938,12 @@ public class Attr extends JCTree.Visitor { // Validate type parameters, supertype and interfaces. attribBounds(tree.typarams); - chk.validate(tree.typarams, env); - chk.validate(tree.extending, env); - chk.validate(tree.implementing, env); + if (!c.isAnonymous()) { + //already checked if anonymous + chk.validate(tree.typarams, env); + chk.validate(tree.extending, env); + chk.validate(tree.implementing, env); + } // If this is a non-abstract class, check that it has no abstract // methods or unimplemented methods of an implemented interface. diff --git a/langtools/src/share/classes/com/sun/tools/javac/comp/Check.java b/langtools/src/share/classes/com/sun/tools/javac/comp/Check.java index c55b1934092..44cf6a6e717 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/comp/Check.java +++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Check.java @@ -640,6 +640,43 @@ public class Check { return true; } + /** Check that the type inferred using the diamond operator does not contain + * non-denotable types such as captured types or intersection types. + * @param t the type inferred using the diamond operator + */ + List checkDiamond(ClassType t) { + DiamondTypeChecker dtc = new DiamondTypeChecker(); + ListBuffer buf = ListBuffer.lb(); + for (Type arg : t.getTypeArguments()) { + if (!dtc.visit(arg, null)) { + buf.append(arg); + } + } + return buf.toList(); + } + + static class DiamondTypeChecker extends Types.SimpleVisitor { + public Boolean visitType(Type t, Void s) { + return true; + } + @Override + public Boolean visitClassType(ClassType t, Void s) { + if (t.isCompound()) { + return false; + } + for (Type targ : t.getTypeArguments()) { + if (!visit(targ, s)) { + return false; + } + } + return true; + } + @Override + public Boolean visitCapturedType(CapturedType t, Void s) { + return false; + } + } + /** Check that given modifiers are legal for given symbol and * return modifiers together with any implicit modififiers for that symbol. * Warning: we can't use flags() here since this method diff --git a/langtools/src/share/classes/com/sun/tools/javac/comp/Resolve.java b/langtools/src/share/classes/com/sun/tools/javac/comp/Resolve.java index 808fd9959ef..c7a23e782ea 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/comp/Resolve.java +++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Resolve.java @@ -788,6 +788,8 @@ public class Resolve { operator); } } + if (name == names.init) + break; //- System.out.println(" - " + bestSoFar); if (abstractok) { Symbol concrete = methodNotFound; @@ -1409,6 +1411,48 @@ public class Resolve { return sym; } + /** Resolve constructor using diamond inference. + * @param pos The position to use for error reporting. + * @param env The environment current at the constructor invocation. + * @param site The type of class for which a constructor is searched. + * The scope of this class has been touched in attribution. + * @param argtypes The types of the constructor invocation's value + * arguments. + * @param typeargtypes The types of the constructor invocation's type + * arguments. + */ + Symbol resolveDiamond(DiagnosticPosition pos, + Env env, + Type site, + List argtypes, + List typeargtypes, boolean reportErrors) { + Symbol sym = methodNotFound; + JCDiagnostic explanation = null; + List steps = methodResolutionSteps; + while (steps.nonEmpty() && + steps.head.isApplicable(boxingEnabled, varargsEnabled) && + sym.kind >= ERRONEOUS) { + sym = resolveConstructor(pos, env, site, argtypes, typeargtypes, + steps.head.isBoxingRequired(), + env.info.varArgs = steps.head.isVarargsRequired()); + methodResolutionCache.put(steps.head, sym); + if (sym.kind == WRONG_MTH && + ((InapplicableSymbolError)sym).explanation != null) { + //if the symbol is an inapplicable method symbol, then the + //explanation contains the reason for which inference failed + explanation = ((InapplicableSymbolError)sym).explanation; + } + steps = steps.tail; + } + if (sym.kind >= AMBIGUOUS && reportErrors) { + String key = explanation == null ? + "cant.apply.diamond" : + "cant.apply.diamond.1"; + log.error(pos, key, diags.fragment("diamond", site.tsym), explanation); + } + return sym; + } + /** Resolve constructor. * @param pos The position to use for error reporting. * @param env The environment current at the constructor invocation. diff --git a/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java b/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java index a426f4a896a..63914e315e6 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java +++ b/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java @@ -131,6 +131,7 @@ public class JavacParser implements Parser { this.allowForeach = source.allowForeach(); this.allowStaticImport = source.allowStaticImport(); this.allowAnnotations = source.allowAnnotations(); + this.allowDiamond = source.allowDiamond(); this.allowTypeAnnotations = source.allowTypeAnnotations(); this.keepDocComments = keepDocComments; if (keepDocComments) @@ -148,6 +149,10 @@ public class JavacParser implements Parser { */ boolean allowGenerics; + /** Switch: Should diamond operator be recognized? + */ + boolean allowDiamond; + /** Switch: Should varargs be recognized? */ boolean allowVarargs; @@ -190,10 +195,11 @@ public class JavacParser implements Parser { * mode = NOPARAMS : no parameters allowed for type * mode = TYPEARG : type argument */ - static final int EXPR = 1; - static final int TYPE = 2; - static final int NOPARAMS = 4; - static final int TYPEARG = 8; + static final int EXPR = 0x1; + static final int TYPE = 0x2; + static final int NOPARAMS = 0x4; + static final int TYPEARG = 0x8; + static final int DIAMOND = 0x10; /** The current mode. */ @@ -1343,6 +1349,11 @@ public class JavacParser implements Parser { ListBuffer args = lb(); if (S.token() == LT) { S.nextToken(); + if (S.token() == GT && (mode & DIAMOND) != 0) { + checkDiamond(); + S.nextToken(); + return List.nil(); + } args.append(((mode & EXPR) == 0) ? typeArgument() : parseType()); while (S.token() == COMMA) { S.nextToken(); @@ -1516,7 +1527,7 @@ public class JavacParser implements Parser { t = F.AnnotatedType(newAnnotations, t); int oldmode = mode; - mode = TYPE; + mode = TYPE | DIAMOND; if (S.token() == LT) { checkGenerics(); t = typeArguments(t); @@ -1569,8 +1580,11 @@ public class JavacParser implements Parser { JCExpression innerCreator(int newpos, List typeArgs, JCExpression encl) { JCExpression t = toP(F.at(S.pos()).Ident(ident())); if (S.token() == LT) { + int oldmode = mode; + mode |= DIAMOND; checkGenerics(); t = typeArguments(t); + mode = oldmode; } return classCreatorRest(newpos, encl, typeArgs, t); } @@ -3173,4 +3187,10 @@ public class JavacParser implements Parser { allowTypeAnnotations = true; } } + void checkDiamond() { + if (!allowDiamond) { + log.error(S.pos(), "diamond.not.supported.in.source", source.name); + allowDiamond = true; + } + } } diff --git a/langtools/src/share/classes/com/sun/tools/javac/resources/compiler.properties b/langtools/src/share/classes/com/sun/tools/javac/resources/compiler.properties index dc99f0ec35d..9de74667229 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/resources/compiler.properties +++ b/langtools/src/share/classes/com/sun/tools/javac/resources/compiler.properties @@ -479,6 +479,11 @@ compiler.err.undetermined.type.1=\ type parameters of {0} cannot be determined; {1} compiler.err.invalid.inferred.types=\ invalid inferred types for {0}; {1} +compiler.err.cant.apply.diamond=\ + cannot infer type arguments for {0} +compiler.err.cant.apply.diamond.1=\ + cannot infer type arguments for {0};\n\ + reason: {1} compiler.err.unreachable.stmt=\ unreachable statement compiler.err.initializer.must.be.able.to.complete.normally=\ @@ -1030,7 +1035,12 @@ compiler.misc.inferred.do.not.conform.to.params=\ actual arguments do not conform to inferred formal arguments\n\ required: {0}\n\ found: {1} - +compiler.misc.diamond=\ + {0}<> +compiler.misc.diamond.invalid.arg=\ + type argument {0} inferred for {1} is not allowed in this context +compiler.misc.diamond.invalid.args=\ + type arguments {0} inferred for {1} are not allowed in this context ##### ## The first argument ({0}) is a "kindname". @@ -1163,6 +1173,8 @@ compiler.misc.varargs.implement=\ {0} in {1} implements {2} in {3} compiler.misc.varargs.clash.with=\ {0} in {1} overrides {2} in {3} +compiler.misc.non.denotable.type=\ + Non-denotable type {0} not allowed here ######################################## # Diagnostics for language feature changes diff --git a/langtools/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java b/langtools/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java index b42586a978a..12f25312e6e 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java +++ b/langtools/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java @@ -204,6 +204,15 @@ public class TreeInfo { return (JCMethodInvocation)exec.expr; } + /** Return true if a tree represents a diamond new expr. */ + public static boolean isDiamond(JCTree tree) { + switch(tree.getTag()) { + case JCTree.TYPEAPPLY: return ((JCTypeApply)tree).getTypeArguments().isEmpty(); + case JCTree.NEWCLASS: return isDiamond(((JCNewClass)tree).clazz); + default: return false; + } + } + /** Return true if a tree represents the null literal. */ public static boolean isNull(JCTree tree) { if (tree.getTag() != JCTree.LITERAL) diff --git a/langtools/test/tools/javac/6840059/T6840059.out b/langtools/test/tools/javac/6840059/T6840059.out index d23d3e33838..a93cdf688a4 100644 --- a/langtools/test/tools/javac/6840059/T6840059.out +++ b/langtools/test/tools/javac/6840059/T6840059.out @@ -1,3 +1,3 @@ -T6840059.java:15:9: compiler.err.cant.resolve.location.args: kindname.constructor, T6840059, , java.lang.String, kindname.class, T6840059 -T6840059.java:15:25: compiler.err.cant.resolve.location.args: kindname.constructor, T6840059, , , kindname.class, T6840059 +T6840059.java:15:9: compiler.err.cant.apply.symbol: kindname.constructor, T6840059, java.lang.Integer, java.lang.String, kindname.class, T6840059, null +T6840059.java:15:25: compiler.err.cant.apply.symbol: kindname.constructor, T6840059, java.lang.Integer, compiler.misc.no.args, kindname.class, T6840059, null 2 errors diff --git a/langtools/test/tools/javac/generics/diamond/neg/Neg01.java b/langtools/test/tools/javac/generics/diamond/neg/Neg01.java new file mode 100644 index 00000000000..ca73e00d479 --- /dev/null +++ b/langtools/test/tools/javac/generics/diamond/neg/Neg01.java @@ -0,0 +1,38 @@ +/* + * @test /nodynamiccopyright/ + * @bug 6939620 + * + * @summary Switch to 'complex' diamond inference scheme + * @author mcimadamore + * @compile/fail/ref=Neg01.out Neg01.java -XDrawDiagnostics + * + */ + +class Neg01 { + + Neg01(X x) {} + + Neg01(X x, Z z) {} + + void test() { + Neg01 n1 = new Neg01<>(""); + Neg01 n2 = new Neg01<>(""); + Neg01 n3 = new Neg01<>(""); + Neg01 n4 = new Neg01<>(""); + + Neg01 n5 = new Neg01<>(""){}; + Neg01 n6 = new Neg01<>(""){}; + Neg01 n7 = new Neg01<>(""){}; + Neg01 n8 = new Neg01<>(""){}; + + Neg01 n9 = new Neg01<>("", ""); + Neg01 n10 = new Neg01<>("", ""); + Neg01 n11 = new Neg01<>("", ""); + Foo n12 = new Neg01<>("", ""); + + Neg01 n13 = new Neg01<>("", ""){}; + Neg01 n14 = new Neg01<>("", ""){}; + Neg01 n15 = new Neg01<>("", ""){}; + Neg01 n16 = new Neg01<>("", ""){}; + } +} diff --git a/langtools/test/tools/javac/generics/diamond/neg/Neg01.out b/langtools/test/tools/javac/generics/diamond/neg/Neg01.out new file mode 100644 index 00000000000..1c53707ce8b --- /dev/null +++ b/langtools/test/tools/javac/generics/diamond/neg/Neg01.out @@ -0,0 +1,29 @@ +Neg01.java:18:15: compiler.err.not.within.bounds: java.lang.String +Neg01.java:18:28: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null +Neg01.java:19:15: compiler.err.not.within.bounds: ? extends java.lang.String +Neg01.java:19:38: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null +Neg01.java:20:23: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null +Neg01.java:21:15: compiler.err.not.within.bounds: ? super java.lang.String +Neg01.java:21:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null +Neg01.java:23:15: compiler.err.not.within.bounds: java.lang.String +Neg01.java:23:28: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null +Neg01.java:24:15: compiler.err.not.within.bounds: ? extends java.lang.String +Neg01.java:24:38: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null +Neg01.java:25:23: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null +Neg01.java:26:15: compiler.err.not.within.bounds: ? super java.lang.String +Neg01.java:26:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null +Neg01.java:28:15: compiler.err.not.within.bounds: java.lang.String +Neg01.java:28:28: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null +Neg01.java:29:15: compiler.err.not.within.bounds: ? extends java.lang.String +Neg01.java:29:39: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null +Neg01.java:30:24: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null +Neg01.java:31:9: compiler.err.cant.resolve.location: kindname.class, Foo, , , kindname.class, Neg01 +Neg01.java:31:35: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null +Neg01.java:33:15: compiler.err.not.within.bounds: java.lang.String +Neg01.java:33:29: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null +Neg01.java:34:15: compiler.err.not.within.bounds: ? extends java.lang.String +Neg01.java:34:39: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null +Neg01.java:35:24: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null +Neg01.java:36:15: compiler.err.not.within.bounds: ? super java.lang.String +Neg01.java:36:37: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg01), null +28 errors diff --git a/langtools/test/tools/javac/generics/diamond/neg/Neg02.java b/langtools/test/tools/javac/generics/diamond/neg/Neg02.java new file mode 100644 index 00000000000..26e0e4359fc --- /dev/null +++ b/langtools/test/tools/javac/generics/diamond/neg/Neg02.java @@ -0,0 +1,61 @@ +/* + * @test /nodynamiccopyright/ + * @bug 6939620 + * + * @summary Switch to 'complex' diamond inference scheme + * @author mcimadamore + * @compile/fail/ref=Neg02.out Neg02.java -XDrawDiagnostics + * + */ + +class Neg02 { + + static class Foo { + Foo(X x) {} + Foo(X x, Z z) {} + } + + void testSimple() { + Foo f1 = new Foo<>(""); + Foo f2 = new Foo<>(""); + Foo f3 = new Foo<>(""); + Foo f4 = new Foo<>(""); + + Foo f5 = new Foo<>(""){}; + Foo f6 = new Foo<>(""){}; + Foo f7 = new Foo<>(""){}; + Foo f8 = new Foo<>(""){}; + + Foo f9 = new Foo<>("", ""); + Foo f10 = new Foo<>("", ""); + Foo f11 = new Foo<>("", ""); + Foo f12 = new Foo<>("", ""); + + Foo f13 = new Foo<>("", ""){}; + Foo f14 = new Foo<>("", ""){}; + Foo f15 = new Foo<>("", ""){}; + Foo f16 = new Foo<>("", ""){}; + } + + void testQualified() { + Foo f1 = new Neg02.Foo<>(""); + Foo f2 = new Neg02.Foo<>(""); + Foo f3 = new Neg02.Foo<>(""); + Foo f4 = new Neg02.Foo<>(""); + + Foo f5 = new Neg02.Foo<>(""){}; + Foo f6 = new Neg02.Foo<>(""){}; + Foo f7 = new Neg02.Foo<>(""){}; + Foo f8 = new Neg02.Foo<>(""){}; + + Foo f9 = new Neg02.Foo<>("", ""); + Foo f10 = new Neg02.Foo<>("", ""); + Foo f11 = new Neg02.Foo<>("", ""); + Foo f12 = new Neg02.Foo<>("", ""); + + Foo f13 = new Neg02.Foo<>("", ""){}; + Foo f14 = new Neg02.Foo<>("", ""){}; + Foo f15 = new Neg02.Foo<>("", ""){}; + Foo f16 = new Neg02.Foo<>("", ""){}; + } +} diff --git a/langtools/test/tools/javac/generics/diamond/neg/Neg02.out b/langtools/test/tools/javac/generics/diamond/neg/Neg02.out new file mode 100644 index 00000000000..c4d7228e440 --- /dev/null +++ b/langtools/test/tools/javac/generics/diamond/neg/Neg02.out @@ -0,0 +1,57 @@ +Neg02.java:19:13: compiler.err.not.within.bounds: java.lang.String +Neg02.java:19:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null +Neg02.java:20:13: compiler.err.not.within.bounds: ? extends java.lang.String +Neg02.java:20:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null +Neg02.java:21:21: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null +Neg02.java:22:13: compiler.err.not.within.bounds: ? super java.lang.String +Neg02.java:22:34: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null +Neg02.java:24:13: compiler.err.not.within.bounds: java.lang.String +Neg02.java:24:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null +Neg02.java:25:13: compiler.err.not.within.bounds: ? extends java.lang.String +Neg02.java:25:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null +Neg02.java:26:21: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null +Neg02.java:27:13: compiler.err.not.within.bounds: ? super java.lang.String +Neg02.java:27:34: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null +Neg02.java:29:13: compiler.err.not.within.bounds: java.lang.String +Neg02.java:29:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null +Neg02.java:30:13: compiler.err.not.within.bounds: ? extends java.lang.String +Neg02.java:30:37: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null +Neg02.java:31:22: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null +Neg02.java:32:13: compiler.err.not.within.bounds: ? super java.lang.String +Neg02.java:32:35: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null +Neg02.java:34:13: compiler.err.not.within.bounds: java.lang.String +Neg02.java:34:27: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null +Neg02.java:35:13: compiler.err.not.within.bounds: ? extends java.lang.String +Neg02.java:35:37: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null +Neg02.java:36:22: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null +Neg02.java:37:13: compiler.err.not.within.bounds: ? super java.lang.String +Neg02.java:37:35: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null +Neg02.java:41:13: compiler.err.not.within.bounds: java.lang.String +Neg02.java:41:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null +Neg02.java:42:13: compiler.err.not.within.bounds: ? extends java.lang.String +Neg02.java:42:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null +Neg02.java:43:21: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null +Neg02.java:44:13: compiler.err.not.within.bounds: ? super java.lang.String +Neg02.java:44:34: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null +Neg02.java:46:13: compiler.err.not.within.bounds: java.lang.String +Neg02.java:46:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null +Neg02.java:47:13: compiler.err.not.within.bounds: ? extends java.lang.String +Neg02.java:47:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null +Neg02.java:48:21: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null +Neg02.java:49:13: compiler.err.not.within.bounds: ? super java.lang.String +Neg02.java:49:34: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null +Neg02.java:51:13: compiler.err.not.within.bounds: java.lang.String +Neg02.java:51:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null +Neg02.java:52:13: compiler.err.not.within.bounds: ? extends java.lang.String +Neg02.java:52:37: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null +Neg02.java:53:22: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null +Neg02.java:54:13: compiler.err.not.within.bounds: ? super java.lang.String +Neg02.java:54:35: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null +Neg02.java:56:13: compiler.err.not.within.bounds: java.lang.String +Neg02.java:56:27: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null +Neg02.java:57:13: compiler.err.not.within.bounds: ? extends java.lang.String +Neg02.java:57:37: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null +Neg02.java:58:22: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null +Neg02.java:59:13: compiler.err.not.within.bounds: ? super java.lang.String +Neg02.java:59:35: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg02.Foo), null +56 errors diff --git a/langtools/test/tools/javac/generics/diamond/neg/Neg03.java b/langtools/test/tools/javac/generics/diamond/neg/Neg03.java new file mode 100644 index 00000000000..29a1a18a2a8 --- /dev/null +++ b/langtools/test/tools/javac/generics/diamond/neg/Neg03.java @@ -0,0 +1,83 @@ +/* + * @test /nodynamiccopyright/ + * @bug 6939620 + * + * @summary Switch to 'complex' diamond inference scheme + * @author mcimadamore + * @compile/fail/ref=Neg03.out Neg03.java -XDrawDiagnostics + * + */ + +class Neg03 { + + class Foo { + Foo(V x) {} + Foo(V x, Z z) {} + } + + void testSimple() { + Foo f1 = new Foo<>(""); + Foo f2 = new Foo<>(""); + Foo f3 = new Foo<>(""); + Foo f4 = new Foo<>(""); + + Foo f5 = new Foo<>(""){}; + Foo f6 = new Foo<>(""){}; + Foo f7 = new Foo<>(""){}; + Foo f8 = new Foo<>(""){}; + + Foo f9 = new Foo<>("", ""); + Foo f10 = new Foo<>("", ""); + Foo f11 = new Foo<>("", ""); + Foo f12 = new Foo<>("", ""); + + Foo f13 = new Foo<>("", ""){}; + Foo f14 = new Foo<>("", ""){}; + Foo f15 = new Foo<>("", ""){}; + Foo f16 = new Foo<>("", ""){}; + } + + void testQualified_1() { + Foo f1 = new Neg03.Foo<>(""); + Foo f2 = new Neg03.Foo<>(""); + Foo f3 = new Neg03.Foo<>(""); + Foo f4 = new Neg03.Foo<>(""); + + Foo f5 = new Neg03.Foo<>(""){}; + Foo f6 = new Neg03.Foo<>(""){}; + Foo f7 = new Neg03.Foo<>(""){}; + Foo f8 = new Neg03.Foo<>(""){}; + + Foo f9 = new Neg03.Foo<>("", ""); + Foo f10 = new Neg03.Foo<>("", ""); + Foo f11 = new Neg03.Foo<>("", ""); + Foo f12 = new Neg03.Foo<>("", ""); + + Foo f13 = new Neg03.Foo<>("", ""){}; + Foo f14 = new Neg03.Foo<>("", ""){}; + Foo f15 = new Neg03.Foo<>("", ""){}; + Foo f16 = new Neg03.Foo<>("", ""){}; + } + + void testQualified_2(Neg03 n) { + Foo f1 = n.new Foo<>(""); + Foo f2 = n.new Foo<>(""); + Foo f3 = n.new Foo<>(""); + Foo f4 = n.new Foo<>(""); + + Foo f5 = n.new Foo<>(""){}; + Foo f6 = n.new Foo<>(""){}; + Foo f7 = n.new Foo<>(""){}; + Foo f8 = n.new Foo<>(""){}; + + Foo f9 = n.new Foo<>("", ""); + Foo f10 = n.new Foo<>("", ""); + Foo f11 = n.new Foo<>("", ""); + Foo f12 = n.new Foo<>("", ""); + + Foo f13 = n.new Foo<>("", ""){}; + Foo f14 = n.new Foo<>("", ""){}; + Foo f15 = n.new Foo<>("", ""){}; + Foo f16 = n.new Foo<>("", ""){}; + } +} diff --git a/langtools/test/tools/javac/generics/diamond/neg/Neg03.out b/langtools/test/tools/javac/generics/diamond/neg/Neg03.out new file mode 100644 index 00000000000..60a16bd7984 --- /dev/null +++ b/langtools/test/tools/javac/generics/diamond/neg/Neg03.out @@ -0,0 +1,85 @@ +Neg03.java:19:13: compiler.err.not.within.bounds: java.lang.String +Neg03.java:19:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:20:13: compiler.err.not.within.bounds: ? extends java.lang.String +Neg03.java:20:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:21:21: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:22:13: compiler.err.not.within.bounds: ? super java.lang.String +Neg03.java:22:34: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:24:13: compiler.err.not.within.bounds: java.lang.String +Neg03.java:24:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:25:13: compiler.err.not.within.bounds: ? extends java.lang.String +Neg03.java:25:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:26:21: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:27:13: compiler.err.not.within.bounds: ? super java.lang.String +Neg03.java:27:34: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:29:13: compiler.err.not.within.bounds: java.lang.String +Neg03.java:29:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:30:13: compiler.err.not.within.bounds: ? extends java.lang.String +Neg03.java:30:37: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:31:22: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:32:13: compiler.err.not.within.bounds: ? super java.lang.String +Neg03.java:32:35: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:34:13: compiler.err.not.within.bounds: java.lang.String +Neg03.java:34:27: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:35:13: compiler.err.not.within.bounds: ? extends java.lang.String +Neg03.java:35:37: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:36:22: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:37:13: compiler.err.not.within.bounds: ? super java.lang.String +Neg03.java:37:35: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:41:13: compiler.err.not.within.bounds: java.lang.String +Neg03.java:41:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:42:13: compiler.err.not.within.bounds: ? extends java.lang.String +Neg03.java:42:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:43:21: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:44:13: compiler.err.not.within.bounds: ? super java.lang.String +Neg03.java:44:34: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:46:13: compiler.err.not.within.bounds: java.lang.String +Neg03.java:46:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:47:13: compiler.err.not.within.bounds: ? extends java.lang.String +Neg03.java:47:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:48:21: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:49:13: compiler.err.not.within.bounds: ? super java.lang.String +Neg03.java:49:34: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:51:13: compiler.err.not.within.bounds: java.lang.String +Neg03.java:51:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:52:13: compiler.err.not.within.bounds: ? extends java.lang.String +Neg03.java:52:37: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:53:22: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:54:13: compiler.err.not.within.bounds: ? super java.lang.String +Neg03.java:54:35: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:56:13: compiler.err.not.within.bounds: java.lang.String +Neg03.java:56:27: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:57:13: compiler.err.not.within.bounds: ? extends java.lang.String +Neg03.java:57:37: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:58:22: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:59:13: compiler.err.not.within.bounds: ? super java.lang.String +Neg03.java:59:35: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:63:13: compiler.err.not.within.bounds: java.lang.String +Neg03.java:63:28: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:64:13: compiler.err.not.within.bounds: ? extends java.lang.String +Neg03.java:64:38: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:65:23: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:66:13: compiler.err.not.within.bounds: ? super java.lang.String +Neg03.java:66:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:68:13: compiler.err.not.within.bounds: java.lang.String +Neg03.java:68:28: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:69:13: compiler.err.not.within.bounds: ? extends java.lang.String +Neg03.java:69:38: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:70:23: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:71:13: compiler.err.not.within.bounds: ? super java.lang.String +Neg03.java:71:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:73:13: compiler.err.not.within.bounds: java.lang.String +Neg03.java:73:28: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:74:13: compiler.err.not.within.bounds: ? extends java.lang.String +Neg03.java:74:39: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:75:24: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:76:13: compiler.err.not.within.bounds: ? super java.lang.String +Neg03.java:76:37: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:78:13: compiler.err.not.within.bounds: java.lang.String +Neg03.java:78:29: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:79:13: compiler.err.not.within.bounds: ? extends java.lang.String +Neg03.java:79:39: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:80:24: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +Neg03.java:81:13: compiler.err.not.within.bounds: ? super java.lang.String +Neg03.java:81:37: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Neg03.Foo), null +84 errors diff --git a/langtools/test/tools/javac/generics/diamond/neg/Neg04.java b/langtools/test/tools/javac/generics/diamond/neg/Neg04.java new file mode 100644 index 00000000000..43af1f4b9b2 --- /dev/null +++ b/langtools/test/tools/javac/generics/diamond/neg/Neg04.java @@ -0,0 +1,38 @@ +/* + * @test /nodynamiccopyright/ + * @bug 6939620 + * + * @summary Switch to 'complex' diamond inference scheme + * @author mcimadamore + * @compile/fail/ref=Neg04.out Neg04.java -XDrawDiagnostics + * + */ + +class Neg04 { + + void test() { + class Foo { + Foo(V x) {} + Foo(V x, Z z) {} + } + Foo n1 = new Foo<>(""); + Foo n2 = new Foo<>(""); + Foo n3 = new Foo<>(""); + Foo n4 = new Foo<>(""); + + Foo n5 = new Foo<>(""){}; + Foo n6 = new Foo<>(""){}; + Foo n7 = new Foo<>(""){}; + Foo n8 = new Foo<>(""){}; + + Foo n9 = new Foo<>("", ""); + Foo n10 = new Foo<>("", ""); + Foo n11 = new Foo<>("", ""); + Foo n12 = new Foo<>("", ""); + + Foo n13 = new Foo<>("", ""){}; + Foo n14 = new Foo<>("", ""){}; + Foo n15 = new Foo<>("", ""){}; + Foo n16 = new Foo<>("", ""){}; + } +} diff --git a/langtools/test/tools/javac/generics/diamond/neg/Neg04.out b/langtools/test/tools/javac/generics/diamond/neg/Neg04.out new file mode 100644 index 00000000000..723b6da0cbd --- /dev/null +++ b/langtools/test/tools/javac/generics/diamond/neg/Neg04.out @@ -0,0 +1,29 @@ +Neg04.java:18:13: compiler.err.not.within.bounds: java.lang.String +Neg04.java:18:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null +Neg04.java:19:13: compiler.err.not.within.bounds: ? extends java.lang.String +Neg04.java:19:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null +Neg04.java:20:21: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null +Neg04.java:21:13: compiler.err.not.within.bounds: ? super java.lang.String +Neg04.java:21:34: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null +Neg04.java:23:13: compiler.err.not.within.bounds: java.lang.String +Neg04.java:23:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null +Neg04.java:24:13: compiler.err.not.within.bounds: ? extends java.lang.String +Neg04.java:24:36: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null +Neg04.java:25:21: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null +Neg04.java:26:13: compiler.err.not.within.bounds: ? super java.lang.String +Neg04.java:26:34: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null +Neg04.java:28:13: compiler.err.not.within.bounds: java.lang.String +Neg04.java:28:26: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null +Neg04.java:29:13: compiler.err.not.within.bounds: ? extends java.lang.String +Neg04.java:29:37: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null +Neg04.java:30:22: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null +Neg04.java:31:13: compiler.err.not.within.bounds: ? super java.lang.String +Neg04.java:31:35: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null +Neg04.java:33:13: compiler.err.not.within.bounds: java.lang.String +Neg04.java:33:27: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null +Neg04.java:34:13: compiler.err.not.within.bounds: ? extends java.lang.String +Neg04.java:34:37: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null +Neg04.java:35:22: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null +Neg04.java:36:13: compiler.err.not.within.bounds: ? super java.lang.String +Neg04.java:36:35: compiler.err.cant.apply.diamond: (compiler.misc.diamond: Foo), null +28 errors diff --git a/langtools/test/tools/javac/generics/diamond/neg/Neg05.java b/langtools/test/tools/javac/generics/diamond/neg/Neg05.java new file mode 100644 index 00000000000..c2e7ce7ed12 --- /dev/null +++ b/langtools/test/tools/javac/generics/diamond/neg/Neg05.java @@ -0,0 +1,61 @@ +/* + * @test /nodynamiccopyright/ + * @bug 6939620 + * + * @summary Switch to 'complex' diamond inference scheme + * @author mcimadamore + * @compile/fail/ref=Neg05.out Neg05.java -XDrawDiagnostics + * + */ + +class Neg05 { + + class Foo { + Foo(V x) {} + Foo(V x, Z z) {} + } + + void testRare_1() { + Neg05.Foo f1 = new Neg05.Foo<>(""); + Neg05.Foo f2 = new Neg05.Foo<>(""); + Neg05.Foo f3 = new Neg05.Foo<>(""); + Neg05.Foo f4 = new Neg05.Foo<>(""); + + Neg05.Foo f5 = new Neg05.Foo<>(""){}; + Neg05.Foo f6 = new Neg05.Foo<>(""){}; + Neg05.Foo f7 = new Neg05.Foo<>(""){}; + Neg05.Foo f8 = new Neg05.Foo<>(""){}; + + Neg05.Foo f9 = new Neg05.Foo<>("", ""); + Neg05.Foo f10 = new Neg05.Foo<>("", ""); + Neg05.Foo f11 = new Neg05.Foo<>("", ""); + Neg05.Foo f12 = new Neg05.Foo<>("", ""); + + Neg05.Foo f13 = new Neg05.Foo<>("", ""){}; + Neg05.Foo f14 = new Neg05.Foo<>("", ""){}; + Neg05.Foo f15 = new Neg05.Foo<>("", ""){}; + Neg05.Foo f16 = new Neg05.Foo<>("", ""){}; + } + + void testRare_2(Neg05 n) { + Neg05.Foo f1 = n.new Foo<>(""); + Neg05.Foo f2 = n.new Foo<>(""); + Neg05.Foo f3 = n.new Foo<>(""); + Neg05.Foo f4 = n.new Foo<>(""); + + Neg05.Foo f5 = n.new Foo<>(""){}; + Neg05.Foo f6 = n.new Foo<>(""){}; + Neg05.Foo f7 = n.new Foo<>(""){}; + Neg05.Foo f8 = n.new Foo<>(""){}; + + Neg05.Foo f9 = n.new Foo<>("", ""); + Neg05.Foo f10 = n.new Foo<>("", ""); + Neg05.Foo f11 = n.new Foo<>("", ""); + Neg05.Foo f12 = n.new Foo<>("", ""); + + Neg05.Foo f13 = n.new Foo<>("", ""){}; + Neg05.Foo f14 = n.new Foo<>("", ""){}; + Neg05.Foo f15 = n.new Foo<>("", ""){}; + Neg05.Foo f16 = n.new Foo<>("", ""){}; + } +} diff --git a/langtools/test/tools/javac/generics/diamond/neg/Neg05.out b/langtools/test/tools/javac/generics/diamond/neg/Neg05.out new file mode 100644 index 00000000000..4fc4a8d0b53 --- /dev/null +++ b/langtools/test/tools/javac/generics/diamond/neg/Neg05.out @@ -0,0 +1,49 @@ +Neg05.java:19:48: compiler.err.improperly.formed.type.inner.raw.param +Neg05.java:19:35: compiler.err.prob.found.req: (compiler.misc.incompatible.types), Neg05.Foo, Neg05.Foo +Neg05.java:20:58: compiler.err.improperly.formed.type.inner.raw.param +Neg05.java:20:45: compiler.err.prob.found.req: (compiler.misc.incompatible.types), Neg05.Foo, Neg05.Foo +Neg05.java:21:43: compiler.err.improperly.formed.type.inner.raw.param +Neg05.java:21:30: compiler.err.prob.found.req: (compiler.misc.incompatible.types), Neg05.Foo, Neg05.Foo +Neg05.java:22:56: compiler.err.improperly.formed.type.inner.raw.param +Neg05.java:22:43: compiler.err.prob.found.req: (compiler.misc.incompatible.types), Neg05.Foo, Neg05.Foo +Neg05.java:24:48: compiler.err.improperly.formed.type.inner.raw.param +Neg05.java:24:35: compiler.err.prob.found.req: (compiler.misc.incompatible.types), compiler.misc.anonymous.class: Neg05.Foo, Neg05.Foo +Neg05.java:25:58: compiler.err.improperly.formed.type.inner.raw.param +Neg05.java:25:45: compiler.err.prob.found.req: (compiler.misc.incompatible.types), compiler.misc.anonymous.class: Neg05.Foo, Neg05.Foo +Neg05.java:26:43: compiler.err.improperly.formed.type.inner.raw.param +Neg05.java:26:30: compiler.err.prob.found.req: (compiler.misc.incompatible.types), compiler.misc.anonymous.class: Neg05.Foo, Neg05.Foo +Neg05.java:27:56: compiler.err.improperly.formed.type.inner.raw.param +Neg05.java:27:43: compiler.err.prob.found.req: (compiler.misc.incompatible.types), compiler.misc.anonymous.class: Neg05.Foo, Neg05.Foo +Neg05.java:29:48: compiler.err.improperly.formed.type.inner.raw.param +Neg05.java:29:35: compiler.err.prob.found.req: (compiler.misc.incompatible.types), Neg05.Foo, Neg05.Foo +Neg05.java:30:59: compiler.err.improperly.formed.type.inner.raw.param +Neg05.java:30:46: compiler.err.prob.found.req: (compiler.misc.incompatible.types), Neg05.Foo, Neg05.Foo +Neg05.java:31:44: compiler.err.improperly.formed.type.inner.raw.param +Neg05.java:31:31: compiler.err.prob.found.req: (compiler.misc.incompatible.types), Neg05.Foo, Neg05.Foo +Neg05.java:32:57: compiler.err.improperly.formed.type.inner.raw.param +Neg05.java:32:44: compiler.err.prob.found.req: (compiler.misc.incompatible.types), Neg05.Foo, Neg05.Foo +Neg05.java:34:49: compiler.err.improperly.formed.type.inner.raw.param +Neg05.java:34:36: compiler.err.prob.found.req: (compiler.misc.incompatible.types), compiler.misc.anonymous.class: Neg05.Foo, Neg05.Foo +Neg05.java:35:59: compiler.err.improperly.formed.type.inner.raw.param +Neg05.java:35:46: compiler.err.prob.found.req: (compiler.misc.incompatible.types), compiler.misc.anonymous.class: Neg05.Foo, Neg05.Foo +Neg05.java:36:44: compiler.err.improperly.formed.type.inner.raw.param +Neg05.java:36:31: compiler.err.prob.found.req: (compiler.misc.incompatible.types), compiler.misc.anonymous.class: Neg05.Foo, Neg05.Foo +Neg05.java:37:57: compiler.err.improperly.formed.type.inner.raw.param +Neg05.java:37:44: compiler.err.prob.found.req: (compiler.misc.incompatible.types), compiler.misc.anonymous.class: Neg05.Foo, Neg05.Foo +Neg05.java:41:37: compiler.err.improperly.formed.type.inner.raw.param +Neg05.java:42:47: compiler.err.improperly.formed.type.inner.raw.param +Neg05.java:43:32: compiler.err.improperly.formed.type.inner.raw.param +Neg05.java:44:45: compiler.err.improperly.formed.type.inner.raw.param +Neg05.java:46:37: compiler.err.improperly.formed.type.inner.raw.param +Neg05.java:47:47: compiler.err.improperly.formed.type.inner.raw.param +Neg05.java:48:32: compiler.err.improperly.formed.type.inner.raw.param +Neg05.java:49:45: compiler.err.improperly.formed.type.inner.raw.param +Neg05.java:51:37: compiler.err.improperly.formed.type.inner.raw.param +Neg05.java:52:48: compiler.err.improperly.formed.type.inner.raw.param +Neg05.java:53:33: compiler.err.improperly.formed.type.inner.raw.param +Neg05.java:54:46: compiler.err.improperly.formed.type.inner.raw.param +Neg05.java:56:38: compiler.err.improperly.formed.type.inner.raw.param +Neg05.java:57:48: compiler.err.improperly.formed.type.inner.raw.param +Neg05.java:58:33: compiler.err.improperly.formed.type.inner.raw.param +Neg05.java:59:46: compiler.err.improperly.formed.type.inner.raw.param +48 errors diff --git a/langtools/test/tools/javac/generics/diamond/neg/Neg06.java b/langtools/test/tools/javac/generics/diamond/neg/Neg06.java new file mode 100644 index 00000000000..e58cfd3a580 --- /dev/null +++ b/langtools/test/tools/javac/generics/diamond/neg/Neg06.java @@ -0,0 +1,21 @@ +/* + * @test /nodynamiccopyright/ + * @bug 6939620 + * + * @summary Switch to 'complex' diamond inference scheme + * @author mcimadamore + * @compile/fail/ref=Neg06.out Neg06.java -XDrawDiagnostics + * + */ + +class Neg06 { + interface ISuperFoo {} + interface IFoo extends ISuperFoo {} + + static class CSuperFoo {} + static class CFoo extends CSuperFoo {} + + ISuperFoo isf = new IFoo<>() {}; + CSuperFoo csf1 = new CFoo<>(); + CSuperFoo csf2 = new CFoo<>() {}; +} diff --git a/langtools/test/tools/javac/generics/diamond/neg/Neg06.out b/langtools/test/tools/javac/generics/diamond/neg/Neg06.out new file mode 100644 index 00000000000..eaf8633c51f --- /dev/null +++ b/langtools/test/tools/javac/generics/diamond/neg/Neg06.out @@ -0,0 +1,4 @@ +Neg06.java:18:36: compiler.err.cant.apply.diamond.1: (compiler.misc.diamond: Neg06.IFoo), (compiler.misc.no.conforming.instance.exists: X, Neg06.IFoo, Neg06.ISuperFoo) +Neg06.java:19:37: compiler.err.cant.apply.diamond.1: (compiler.misc.diamond: Neg06.CFoo), (compiler.misc.no.conforming.instance.exists: X, Neg06.CFoo, Neg06.CSuperFoo) +Neg06.java:20:37: compiler.err.cant.apply.diamond.1: (compiler.misc.diamond: Neg06.CFoo), (compiler.misc.no.conforming.instance.exists: X, Neg06.CFoo, Neg06.CSuperFoo) +3 errors diff --git a/langtools/test/tools/javac/generics/diamond/neg/Neg07.java b/langtools/test/tools/javac/generics/diamond/neg/Neg07.java new file mode 100644 index 00000000000..b7e61fe897d --- /dev/null +++ b/langtools/test/tools/javac/generics/diamond/neg/Neg07.java @@ -0,0 +1,19 @@ +/* + * @test /nodynamiccopyright/ + * @bug 6939620 + * + * @summary Switch to 'complex' diamond inference scheme + * @author mcimadamore + * @compile/fail/ref=Neg07.out Neg07.java -XDrawDiagnostics + * + */ + +class Neg07 { + static class SuperFoo {} + static class Foo extends SuperFoo { + Foo(X x) {} + } + + SuperFoo sf1 = new Foo<>(""); + SuperFoo sf2 = new Foo<>("") {}; +} diff --git a/langtools/test/tools/javac/generics/diamond/neg/Neg07.out b/langtools/test/tools/javac/generics/diamond/neg/Neg07.out new file mode 100644 index 00000000000..f141ff099b8 --- /dev/null +++ b/langtools/test/tools/javac/generics/diamond/neg/Neg07.out @@ -0,0 +1,3 @@ +Neg07.java:17:27: compiler.err.cant.apply.diamond.1: (compiler.misc.diamond: Neg07.Foo), (compiler.misc.inferred.do.not.conform.to.bounds: java.lang.String, java.lang.Number) +Neg07.java:18:27: compiler.err.cant.apply.diamond.1: (compiler.misc.diamond: Neg07.Foo), (compiler.misc.inferred.do.not.conform.to.bounds: java.lang.String, java.lang.Number) +2 errors diff --git a/langtools/test/tools/javac/generics/diamond/neg/Neg08.java b/langtools/test/tools/javac/generics/diamond/neg/Neg08.java new file mode 100644 index 00000000000..7ebb9875591 --- /dev/null +++ b/langtools/test/tools/javac/generics/diamond/neg/Neg08.java @@ -0,0 +1,30 @@ +/* + * @test /nodynamiccopyright/ + * @bug 6939620 6894753 + * + * @summary Switch to 'complex' diamond inference scheme + * @author mcimadamore + * @compile/fail/ref=Neg08.out Neg08.java -XDrawDiagnostics + * + */ + +class Neg08 { + static class Foo { + Foo(X x) { } + } + + static class DoubleFoo { + DoubleFoo(X x,Y y) { } + } + + static class TripleFoo { + TripleFoo(X x,Y y,Z z) { } + } + + Foo fi = new Foo<>(1); + Foo fw = new Foo<>(fi); + Foo fd = new Foo<>(3.0); + DoubleFoo dw = new DoubleFoo<>(fi,fd); + Foo fs = new Foo<>("one"); + TripleFoo tw = new TripleFoo<>(fi,fd,fs); +} diff --git a/langtools/test/tools/javac/generics/diamond/neg/Neg08.out b/langtools/test/tools/javac/generics/diamond/neg/Neg08.out new file mode 100644 index 00000000000..6a7a7fbe808 --- /dev/null +++ b/langtools/test/tools/javac/generics/diamond/neg/Neg08.out @@ -0,0 +1,4 @@ +Neg08.java:25:24: compiler.err.cant.apply.diamond.1: (compiler.misc.diamond: Neg08.Foo), (compiler.misc.diamond.invalid.arg: Neg08.Foo, (compiler.misc.diamond: Neg08.Foo)) +Neg08.java:27:38: compiler.err.cant.apply.diamond.1: (compiler.misc.diamond: Neg08.DoubleFoo), (compiler.misc.diamond.invalid.args: Neg08.Foo,Neg08.Foo, (compiler.misc.diamond: Neg08.DoubleFoo)) +Neg08.java:29:40: compiler.err.cant.apply.diamond.1: (compiler.misc.diamond: Neg08.TripleFoo), (compiler.misc.diamond.invalid.args: Neg08.Foo,Neg08.Foo, (compiler.misc.diamond: Neg08.TripleFoo)) +3 errors diff --git a/langtools/test/tools/javac/generics/diamond/neg/Neg09.java b/langtools/test/tools/javac/generics/diamond/neg/Neg09.java new file mode 100644 index 00000000000..a424864df0e --- /dev/null +++ b/langtools/test/tools/javac/generics/diamond/neg/Neg09.java @@ -0,0 +1,22 @@ +/* + * @test /nodynamiccopyright/ + * @bug 6939620 6894753 + * + * @summary Switch to 'complex' diamond inference scheme + * @author mcimadamore + * @compile/fail/ref=Neg09.out Neg09.java -XDrawDiagnostics + * + */ + +class Neg09 { + static class Foo> {} + static class DoubleFoo, + Y extends Number & Comparable> {} + static class TripleFoo, + Y extends Number & Comparable, + Z> {} + + Foo fw = new Foo<>(); + DoubleFoo dw = new DoubleFoo<>(); + TripleFoo tw = new TripleFoo<>(); +} diff --git a/langtools/test/tools/javac/generics/diamond/neg/Neg09.out b/langtools/test/tools/javac/generics/diamond/neg/Neg09.out new file mode 100644 index 00000000000..c6df94c5554 --- /dev/null +++ b/langtools/test/tools/javac/generics/diamond/neg/Neg09.out @@ -0,0 +1,4 @@ +Neg09.java:19:24: compiler.err.cant.apply.diamond.1: (compiler.misc.diamond: Neg09.Foo), (compiler.misc.diamond.invalid.arg: java.lang.Number&java.lang.Comparable, (compiler.misc.diamond: Neg09.Foo)) +Neg09.java:20:38: compiler.err.cant.apply.diamond.1: (compiler.misc.diamond: Neg09.DoubleFoo), (compiler.misc.diamond.invalid.args: java.lang.Number&java.lang.Comparable,java.lang.Number&java.lang.Comparable, (compiler.misc.diamond: Neg09.DoubleFoo)) +Neg09.java:21:40: compiler.err.cant.apply.diamond.1: (compiler.misc.diamond: Neg09.TripleFoo), (compiler.misc.diamond.invalid.args: java.lang.Number&java.lang.Comparable,java.lang.Number&java.lang.Comparable, (compiler.misc.diamond: Neg09.TripleFoo)) +3 errors diff --git a/langtools/test/tools/javac/generics/diamond/neg/Neg10.java b/langtools/test/tools/javac/generics/diamond/neg/Neg10.java new file mode 100644 index 00000000000..0d6de69adef --- /dev/null +++ b/langtools/test/tools/javac/generics/diamond/neg/Neg10.java @@ -0,0 +1,17 @@ +/* + * @test /nodynamiccopyright/ + * @bug 6939620 + * + * @summary Switch to 'complex' diamond inference scheme + * @author mcimadamore + * @compile/fail/ref=Neg10.out Neg10.java -XDrawDiagnostics + * + */ + +class Neg10 { + static class Foo { + Foo(X x) {} + } + + Foo fw = new Foo<>(1); +} diff --git a/langtools/test/tools/javac/generics/diamond/neg/Neg10.out b/langtools/test/tools/javac/generics/diamond/neg/Neg10.out new file mode 100644 index 00000000000..8205ae51895 --- /dev/null +++ b/langtools/test/tools/javac/generics/diamond/neg/Neg10.out @@ -0,0 +1,2 @@ +Neg10.java:16:22: compiler.err.prob.found.req: (compiler.misc.incompatible.types), Neg10.Foo, Neg10.Foo +1 error diff --git a/langtools/test/tools/javac/generics/diamond/neg/Neg11.java b/langtools/test/tools/javac/generics/diamond/neg/Neg11.java new file mode 100644 index 00000000000..2e62f1742c0 --- /dev/null +++ b/langtools/test/tools/javac/generics/diamond/neg/Neg11.java @@ -0,0 +1,18 @@ +/* + * @test /nodynamiccopyright/ + * @bug 6939620 + * + * @summary Switch to 'complex' diamond inference scheme + * @author mcimadamore + * @compile/fail/ref=Neg11.out Neg11.java -XDrawDiagnostics + * + */ + +class Neg11 { + + void test() { + class Foo { } + Foo f1 = new UndeclaredName<>(); //this is deliberate: aim is to test erroneous path + Foo f2 = new UndeclaredName<>() {}; //this is deliberate: aim is to test erroneous path + } +} diff --git a/langtools/test/tools/javac/generics/diamond/neg/Neg11.out b/langtools/test/tools/javac/generics/diamond/neg/Neg11.out new file mode 100644 index 00000000000..6661531225a --- /dev/null +++ b/langtools/test/tools/javac/generics/diamond/neg/Neg11.out @@ -0,0 +1,3 @@ +Neg11.java:15:25: compiler.err.cant.resolve.location: kindname.class, UndeclaredName, , , kindname.class, Neg11 +Neg11.java:16:25: compiler.err.cant.resolve.location: kindname.class, UndeclaredName, , , kindname.class, Neg11 +2 errors diff --git a/langtools/test/tools/javac/generics/diamond/pos/Pos01.java b/langtools/test/tools/javac/generics/diamond/pos/Pos01.java new file mode 100644 index 00000000000..c32b7d5c2c9 --- /dev/null +++ b/langtools/test/tools/javac/generics/diamond/pos/Pos01.java @@ -0,0 +1,67 @@ +/* + * 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 + * 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 6939620 + * + * @summary Switch to 'complex' diamond inference scheme + * @author mcimadamore + * @compile Pos01.java + * @run main Pos01 + * + */ + +public class Pos01 { + + Pos01(X x) {} + + Pos01(X x, Z z) {} + + void test() { + Pos01 p1 = new Pos01<>(1); + Pos01 p2 = new Pos01<>(1); + Pos01 p3 = new Pos01<>(1); + Pos01 p4 = new Pos01<>(1); + + Pos01 p5 = new Pos01<>(1){}; + Pos01 p6 = new Pos01<>(1){}; + Pos01 p7 = new Pos01<>(1){}; + Pos01 p8 = new Pos01<>(1){}; + + Pos01 p9 = new Pos01<>(1, ""); + Pos01 p10 = new Pos01<>(1, ""); + Pos01 p11 = new Pos01<>(1, ""); + Pos01 p12 = new Pos01<>(1, ""); + + Pos01 p13 = new Pos01<>(1, ""){}; + Pos01 p14= new Pos01<>(1, ""){}; + Pos01 p15 = new Pos01<>(1, ""){}; + Pos01 p16 = new Pos01<>(1, ""){}; + } + + public static void main(String[] args) { + Pos01 p1 = new Pos01<>(""); + p1.test(); + } +} diff --git a/langtools/test/tools/javac/generics/diamond/pos/Pos02.java b/langtools/test/tools/javac/generics/diamond/pos/Pos02.java new file mode 100644 index 00000000000..c20e9dbaf0d --- /dev/null +++ b/langtools/test/tools/javac/generics/diamond/pos/Pos02.java @@ -0,0 +1,90 @@ +/* + * 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 + * 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 6939620 + * + * @summary Switch to 'complex' diamond inference scheme + * @author mcimadamore + * @compile Pos02.java + * @run main Pos02 + */ + +public class Pos02 { + + static class Foo { + Foo(X x) {} + Foo(X x, Z z) {} + } + + void testSimple() { + Foo f1 = new Foo<>(1); + Foo f2 = new Foo<>(1); + Foo f3 = new Foo<>(1); + Foo f4 = new Foo<>(1); + + Foo f5 = new Foo<>(1){}; + Foo f6 = new Foo<>(1){}; + Foo f7 = new Foo<>(1){}; + Foo f8 = new Foo<>(1){}; + + Foo f9 = new Foo<>(1, ""); + Foo f10 = new Foo<>(1, ""); + Foo f11 = new Foo<>(1, ""); + Foo f12 = new Foo<>(1, ""); + + Foo f13 = new Foo<>(1, ""){}; + Foo f14 = new Foo<>(1, ""){}; + Foo f15 = new Foo<>(1, ""){}; + Foo f16 = new Foo<>(1, ""){}; + } + + void testQualified() { + Foo f1 = new Pos02.Foo<>(1); + Foo f2 = new Pos02.Foo<>(1); + Foo f3 = new Pos02.Foo<>(1); + Foo f4 = new Pos02.Foo<>(1); + + Foo f5 = new Pos02.Foo<>(1){}; + Foo f6 = new Pos02.Foo<>(1){}; + Foo f7 = new Pos02.Foo<>(1){}; + Foo f8 = new Pos02.Foo<>(1){}; + + Foo f9 = new Pos02.Foo<>(1, ""); + Foo f10 = new Pos02.Foo<>(1, ""); + Foo f11 = new Pos02.Foo<>(1, ""); + Foo f12 = new Pos02.Foo<>(1, ""); + + Foo f13 = new Pos02.Foo<>(1, ""){}; + Foo f14 = new Pos02.Foo<>(1, ""){}; + Foo f15 = new Pos02.Foo<>(1, ""){}; + Foo f16 = new Pos02.Foo<>(1, ""){}; + } + + public static void main(String[] args) { + Pos02 p2 = new Pos02(); + p2.testSimple(); + p2.testQualified(); + } +} diff --git a/langtools/test/tools/javac/generics/diamond/pos/Pos03.java b/langtools/test/tools/javac/generics/diamond/pos/Pos03.java new file mode 100644 index 00000000000..65b798da072 --- /dev/null +++ b/langtools/test/tools/javac/generics/diamond/pos/Pos03.java @@ -0,0 +1,114 @@ +/* + * 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 + * 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 6939620 + * + * @summary Switch to 'complex' diamond inference scheme + * @author mcimadamore + * @compile Pos03.java + * @run main Pos03 + * + */ + +public class Pos03 { + + class Foo { + Foo(V x) {} + Foo(V x, Z z) {} + } + + void testSimple() { + Foo f1 = new Foo<>(1); + Foo f2 = new Foo<>(1); + Foo f3 = new Foo<>(1); + Foo f4 = new Foo<>(1); + + Foo f5 = new Foo<>(1){}; + Foo f6 = new Foo<>(1){}; + Foo f7 = new Foo<>(1){}; + Foo f8 = new Foo<>(1){}; + + Foo f9 = new Foo<>(1, ""); + Foo f10 = new Foo<>(1, ""); + Foo f11 = new Foo<>(1, ""); + Foo f12 = new Foo<>(1, ""); + + Foo f13 = new Foo<>(1, ""){}; + Foo f14 = new Foo<>(1, ""){}; + Foo f15 = new Foo<>(1, ""){}; + Foo f16 = new Foo<>(1, ""){}; + } + + void testQualified_1() { + Foo f1 = new Pos03.Foo<>(1); + Foo f2 = new Pos03.Foo<>(1); + Foo f3 = new Pos03.Foo<>(1); + Foo f4 = new Pos03.Foo<>(1); + + Foo f5 = new Pos03.Foo<>(1){}; + Foo f6 = new Pos03.Foo<>(1){}; + Foo f7 = new Pos03.Foo<>(1){}; + Foo f8 = new Pos03.Foo<>(1){}; + + Foo f9 = new Pos03.Foo<>(1, ""); + Foo f10 = new Pos03.Foo<>(1, ""); + Foo f11 = new Pos03.Foo<>(1, ""); + Foo f12 = new Pos03.Foo<>(1, ""); + + Foo f13 = new Pos03.Foo<>(1, ""){}; + Foo f14 = new Pos03.Foo<>(1, ""){}; + Foo f15 = new Pos03.Foo<>(1, ""){}; + Foo f16 = new Pos03.Foo<>(1, ""){}; + } + + void testQualified_2(Pos03 p) { + Foo f1 = p.new Foo<>(1); + Foo f2 = p.new Foo<>(1); + Foo f3 = p.new Foo<>(1); + Foo f4 = p.new Foo<>(1); + + Foo f5 = p.new Foo<>(1){}; + Foo f6 = p.new Foo<>(1){}; + Foo f7 = p.new Foo<>(1){}; + Foo f8 = p.new Foo<>(1){}; + + Foo f9 = p.new Foo<>(1, ""); + Foo f10 = p.new Foo<>(1, ""); + Foo f11 = p.new Foo<>(1, ""); + Foo f12 = p.new Foo<>(1, ""); + + Foo f13 = p.new Foo<>(1, ""){}; + Foo f14 = p.new Foo<>(1, ""){}; + Foo f15 = p.new Foo<>(1, ""){}; + Foo f16 = p.new Foo<>(1, ""){}; + } + + public static void main(String[] args) { + Pos03 p3 = new Pos03<>(); + p3.testSimple(); + p3.testQualified_1(); + p3.testQualified_2(p3); + } +} diff --git a/langtools/test/tools/javac/generics/diamond/pos/Pos04.java b/langtools/test/tools/javac/generics/diamond/pos/Pos04.java new file mode 100644 index 00000000000..a799c3a4967 --- /dev/null +++ b/langtools/test/tools/javac/generics/diamond/pos/Pos04.java @@ -0,0 +1,67 @@ +/* + * 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 + * 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 6939620 + * + * @summary Switch to 'complex' diamond inference scheme + * @author mcimadamore + * @compile Pos04.java + * @run main Pos04 + * + */ + +public class Pos04 { + + void test() { + class Foo { + Foo(V x) {} + Foo(V x, Z z) {} + } + Foo p1 = new Foo<>(1); + Foo p2 = new Foo<>(1); + Foo p3 = new Foo<>(1); + Foo p4 = new Foo<>(1); + + Foo p5 = new Foo<>(1){}; + Foo p6 = new Foo<>(1){}; + Foo p7 = new Foo<>(1){}; + Foo p8 = new Foo<>(1){}; + + Foo p9 = new Foo<>(1, ""); + Foo p10 = new Foo<>(1, ""); + Foo p11 = new Foo<>(1, ""); + Foo p12 = new Foo<>(1, ""); + + Foo p13 = new Foo<>(1, ""){}; + Foo p14 = new Foo<>(1, ""){}; + Foo p15 = new Foo<>(1, ""){}; + Foo p16 = new Foo<>(1, ""){}; + } + + public static void main(String[] args) { + Pos04 p4 = new Pos04<>(); + p4.test(); + } +} diff --git a/langtools/test/tools/javac/generics/diamond/pos/Pos05.java b/langtools/test/tools/javac/generics/diamond/pos/Pos05.java new file mode 100644 index 00000000000..8eeed315dc8 --- /dev/null +++ b/langtools/test/tools/javac/generics/diamond/pos/Pos05.java @@ -0,0 +1,45 @@ +/* + * 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 + * 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 6939620 + * + * @summary Switch to 'complex' diamond inference scheme + * @author mcimadamore + * @compile Pos05.java + * + */ + +public class Pos05 { + + static class Foo { + Foo(X x) {} + } + + void m(Foo fi) {} + + void test() { + m(new Foo<>(1)); + } +} From a1446b775d568577d5f74cdcd174950f22953e5c Mon Sep 17 00:00:00 2001 From: Tom Rodriguez Date: Wed, 14 Apr 2010 15:30:13 -0700 Subject: [PATCH 37/91] 6938026: C2 compiler fails in Node::rematerialize()const Reviewed-by: twisti --- hotspot/src/share/vm/opto/parse1.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/hotspot/src/share/vm/opto/parse1.cpp b/hotspot/src/share/vm/opto/parse1.cpp index 579f4d0cd6c..af8be005729 100644 --- a/hotspot/src/share/vm/opto/parse1.cpp +++ b/hotspot/src/share/vm/opto/parse1.cpp @@ -280,7 +280,13 @@ void Parse::load_interpreter_state(Node* osr_buf) { continue; } // Construct code to access the appropriate local. - Node *value = fetch_interpreter_state(index, type->basic_type(), locals_addr, osr_buf); + BasicType bt = type->basic_type(); + if (type == TypePtr::NULL_PTR) { + // Ptr types are mixed together with T_ADDRESS but NULL is + // really for T_OBJECT types so correct it. + bt = T_OBJECT; + } + Node *value = fetch_interpreter_state(index, bt, locals_addr, osr_buf); set_local(index, value); } From 95b528bff007cd30765ec932cf52491dfe5ca314 Mon Sep 17 00:00:00 2001 From: Gary Benson Date: Thu, 15 Apr 2010 02:40:12 -0700 Subject: [PATCH 38/91] 6941224: Improved stack overflow handling for Zero Adding stack overflow checking to Shark brought to light a bunch of deficiencies in Zero's stack overflow code. Reviewed-by: twisti --- .../src/cpu/zero/vm/cppInterpreter_zero.cpp | 107 ++++++------------ .../src/cpu/zero/vm/cppInterpreter_zero.hpp | 4 - hotspot/src/cpu/zero/vm/entryFrame_zero.hpp | 8 +- .../src/cpu/zero/vm/fakeStubFrame_zero.hpp | 4 +- .../src/cpu/zero/vm/interpreterFrame_zero.hpp | 8 +- .../src/cpu/zero/vm/interpreterRT_zero.cpp | 7 +- hotspot/src/cpu/zero/vm/stack_zero.hpp | 17 ++- .../src/cpu/zero/vm/stubGenerator_zero.cpp | 75 ++++++------ .../linux_zero/vm/thread_linux_zero.hpp | 11 +- hotspot/src/share/vm/includeDB_zero | 14 ++- 10 files changed, 121 insertions(+), 134 deletions(-) diff --git a/hotspot/src/cpu/zero/vm/cppInterpreter_zero.cpp b/hotspot/src/cpu/zero/vm/cppInterpreter_zero.cpp index 47a305cdf5c..7c38e0820b1 100644 --- a/hotspot/src/cpu/zero/vm/cppInterpreter_zero.cpp +++ b/hotspot/src/cpu/zero/vm/cppInterpreter_zero.cpp @@ -39,21 +39,9 @@ void CppInterpreter::normal_entry(methodOop method, intptr_t UNUSED, TRAPS) { JavaThread *thread = (JavaThread *) THREAD; - ZeroStack *stack = thread->zero_stack(); - - // Adjust the caller's stack frame to accomodate any additional - // local variables we have contiguously with our parameters. - int extra_locals = method->max_locals() - method->size_of_parameters(); - if (extra_locals > 0) { - if (extra_locals > stack->available_words()) { - Unimplemented(); - } - for (int i = 0; i < extra_locals; i++) - stack->push(0); - } // Allocate and initialize our frame. - InterpreterFrame *frame = InterpreterFrame::build(stack, method, thread); + InterpreterFrame *frame = InterpreterFrame::build(method, CHECK); thread->push_zero_frame(frame); // Execute those bytecodes! @@ -76,12 +64,6 @@ void CppInterpreter::main_loop(int recurse, TRAPS) { intptr_t *result = NULL; int result_slots = 0; - // Check we're not about to run out of stack - if (stack_overflow_imminent(thread)) { - CALL_VM_NOCHECK(InterpreterRuntime::throw_StackOverflowError(thread)); - goto unwind_and_return; - } - while (true) { // We can set up the frame anchor with everything we want at // this point as we are thread_in_Java and no safepoints can @@ -123,9 +105,9 @@ void CppInterpreter::main_loop(int recurse, TRAPS) { int monitor_words = frame::interpreter_frame_monitor_size(); // Allocate the space - if (monitor_words > stack->available_words()) { - Unimplemented(); - } + stack->overflow_check(monitor_words, THREAD); + if (HAS_PENDING_EXCEPTION) + break; stack->alloc(monitor_words * wordSize); // Move the expression stack contents @@ -172,8 +154,6 @@ void CppInterpreter::main_loop(int recurse, TRAPS) { } } - unwind_and_return: - // Unwind the current frame thread->pop_zero_frame(); @@ -193,17 +173,11 @@ void CppInterpreter::native_entry(methodOop method, intptr_t UNUSED, TRAPS) { ZeroStack *stack = thread->zero_stack(); // Allocate and initialize our frame - InterpreterFrame *frame = InterpreterFrame::build(stack, method, thread); + InterpreterFrame *frame = InterpreterFrame::build(method, CHECK); thread->push_zero_frame(frame); interpreterState istate = frame->interpreter_state(); intptr_t *locals = istate->locals(); - // Check we're not about to run out of stack - if (stack_overflow_imminent(thread)) { - CALL_VM_NOCHECK(InterpreterRuntime::throw_StackOverflowError(thread)); - goto unwind_and_return; - } - // Update the invocation counter if ((UseCompiler || CountCompiledCalls) && !method->is_synchronized()) { InvocationCounter *counter = method->invocation_counter(); @@ -264,9 +238,10 @@ void CppInterpreter::native_entry(methodOop method, intptr_t UNUSED, TRAPS) { assert(function != NULL, "should be set if signature handler is"); // Build the argument list - if (handler->argument_count() * 2 > stack->available_words()) { - Unimplemented(); - } + stack->overflow_check(handler->argument_count() * 2, THREAD); + if (HAS_PENDING_EXCEPTION) + goto unlock_unwind_and_return; + void **arguments; void *mirror; { arguments = @@ -503,9 +478,7 @@ void CppInterpreter::accessor_entry(methodOop method, intptr_t UNUSED, TRAPS) { switch (entry->flag_state()) { case ltos: case dtos: - if (stack->available_words() < 1) { - Unimplemented(); - } + stack->overflow_check(1, CHECK); stack->alloc(wordSize); break; } @@ -601,39 +574,30 @@ void CppInterpreter::empty_entry(methodOop method, intptr_t UNUSED, TRAPS) { stack->set_sp(stack->sp() + method->size_of_parameters()); } -bool CppInterpreter::stack_overflow_imminent(JavaThread *thread) { - // How is the ABI stack? - address stack_top = thread->stack_base() - thread->stack_size(); - int free_stack = os::current_stack_pointer() - stack_top; - if (free_stack < StackShadowPages * os::vm_page_size()) { - return true; +InterpreterFrame *InterpreterFrame::build(const methodOop method, TRAPS) { + JavaThread *thread = (JavaThread *) THREAD; + ZeroStack *stack = thread->zero_stack(); + + // Calculate the size of the frame we'll build, including + // any adjustments to the caller's frame that we'll make. + int extra_locals = 0; + int monitor_words = 0; + int stack_words = 0; + + if (!method->is_native()) { + extra_locals = method->max_locals() - method->size_of_parameters(); + stack_words = method->max_stack(); } - - // How is the Zero stack? - // Throwing a StackOverflowError involves a VM call, which means - // we need a frame on the stack. We should be checking here to - // ensure that methods we call have enough room to install the - // largest possible frame, but that's more than twice the size - // of the entire Zero stack we get by default, so we just check - // we have *some* space instead... - free_stack = thread->zero_stack()->available_words() * wordSize; - if (free_stack < StackShadowPages * os::vm_page_size()) { - return true; + if (method->is_synchronized()) { + monitor_words = frame::interpreter_frame_monitor_size(); } + stack->overflow_check( + extra_locals + header_words + monitor_words + stack_words, CHECK_NULL); - return false; -} - -InterpreterFrame *InterpreterFrame::build(ZeroStack* stack, - const methodOop method, - JavaThread* thread) { - int monitor_words = - method->is_synchronized() ? frame::interpreter_frame_monitor_size() : 0; - int stack_words = method->is_native() ? 0 : method->max_stack(); - - if (header_words + monitor_words + stack_words > stack->available_words()) { - Unimplemented(); - } + // Adjust the caller's stack frame to accomodate any additional + // local variables we have contiguously with our parameters. + for (int i = 0; i < extra_locals; i++) + stack->push(0); intptr_t *locals; if (method->is_native()) @@ -812,14 +776,13 @@ InterpreterGenerator::InterpreterGenerator(StubQueue* code) // Deoptimization helpers -InterpreterFrame *InterpreterFrame::build(ZeroStack* stack, int size) { +InterpreterFrame *InterpreterFrame::build(int size, TRAPS) { + ZeroStack *stack = ((JavaThread *) THREAD)->zero_stack(); + int size_in_words = size >> LogBytesPerWord; assert(size_in_words * wordSize == size, "unaligned"); assert(size_in_words >= header_words, "too small"); - - if (size_in_words > stack->available_words()) { - Unimplemented(); - } + stack->overflow_check(size_in_words, CHECK_NULL); stack->push(0); // next_frame, filled in later intptr_t *fp = stack->sp(); diff --git a/hotspot/src/cpu/zero/vm/cppInterpreter_zero.hpp b/hotspot/src/cpu/zero/vm/cppInterpreter_zero.hpp index 24c698c7ce5..69a4efc68cc 100644 --- a/hotspot/src/cpu/zero/vm/cppInterpreter_zero.hpp +++ b/hotspot/src/cpu/zero/vm/cppInterpreter_zero.hpp @@ -38,10 +38,6 @@ // Main loop of normal_entry static void main_loop(int recurse, TRAPS); - private: - // Stack overflow checks - static bool stack_overflow_imminent(JavaThread *thread); - private: // Fast result type determination static BasicType result_type_of(methodOop method); diff --git a/hotspot/src/cpu/zero/vm/entryFrame_zero.hpp b/hotspot/src/cpu/zero/vm/entryFrame_zero.hpp index 03bd78102a4..17bdccfb6ad 100644 --- a/hotspot/src/cpu/zero/vm/entryFrame_zero.hpp +++ b/hotspot/src/cpu/zero/vm/entryFrame_zero.hpp @@ -1,6 +1,6 @@ /* * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. - * Copyright 2008 Red Hat, Inc. + * Copyright 2008, 2010 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 @@ -47,10 +47,10 @@ class EntryFrame : public ZeroFrame { }; public: - static EntryFrame *build(ZeroStack* stack, - const intptr_t* parameters, + static EntryFrame *build(const intptr_t* parameters, int parameter_words, - JavaCallWrapper* call_wrapper); + JavaCallWrapper* call_wrapper, + TRAPS); public: JavaCallWrapper *call_wrapper() const { return (JavaCallWrapper *) value_of_word(call_wrapper_off); diff --git a/hotspot/src/cpu/zero/vm/fakeStubFrame_zero.hpp b/hotspot/src/cpu/zero/vm/fakeStubFrame_zero.hpp index ec3054019ff..1f94944b7dd 100644 --- a/hotspot/src/cpu/zero/vm/fakeStubFrame_zero.hpp +++ b/hotspot/src/cpu/zero/vm/fakeStubFrame_zero.hpp @@ -1,6 +1,6 @@ /* * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. - * Copyright 2008 Red Hat, Inc. + * Copyright 2008, 2010 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 @@ -42,7 +42,7 @@ class FakeStubFrame : public ZeroFrame { }; public: - static FakeStubFrame *build(ZeroStack* stack); + static FakeStubFrame *build(TRAPS); public: void identify_word(int frame_index, diff --git a/hotspot/src/cpu/zero/vm/interpreterFrame_zero.hpp b/hotspot/src/cpu/zero/vm/interpreterFrame_zero.hpp index 7c8199c05ce..12158ee21e8 100644 --- a/hotspot/src/cpu/zero/vm/interpreterFrame_zero.hpp +++ b/hotspot/src/cpu/zero/vm/interpreterFrame_zero.hpp @@ -1,6 +1,6 @@ /* * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. - * Copyright 2008 Red Hat, Inc. + * Copyright 2008, 2010 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 @@ -55,10 +55,8 @@ class InterpreterFrame : public ZeroFrame { }; public: - static InterpreterFrame *build(ZeroStack* stack, - const methodOop method, - JavaThread* thread); - static InterpreterFrame *build(ZeroStack* stack, int size); + static InterpreterFrame *build(const methodOop method, TRAPS); + static InterpreterFrame *build(int size, TRAPS); public: interpreterState interpreter_state() const { diff --git a/hotspot/src/cpu/zero/vm/interpreterRT_zero.cpp b/hotspot/src/cpu/zero/vm/interpreterRT_zero.cpp index 912a8aeacc7..9b6b118bde1 100644 --- a/hotspot/src/cpu/zero/vm/interpreterRT_zero.cpp +++ b/hotspot/src/cpu/zero/vm/interpreterRT_zero.cpp @@ -1,6 +1,6 @@ /* * Copyright 2003-2005 Sun Microsystems, Inc. All Rights Reserved. - * Copyright 2007, 2008 Red Hat, Inc. + * Copyright 2007, 2008, 2010 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 @@ -140,9 +140,8 @@ IRT_ENTRY(address, int required_words = (align_size_up(sizeof(ffi_cif), wordSize) >> LogBytesPerWord) + (method->is_static() ? 2 : 1) + method->size_of_parameters() + 1; - if (required_words > stack->available_words()) { - Unimplemented(); - } + + stack->overflow_check(required_words, CHECK_NULL); intptr_t *buf = (intptr_t *) stack->alloc(required_words * wordSize); SlowSignatureHandlerGenerator sshg(methodHandle(thread, method), buf); diff --git a/hotspot/src/cpu/zero/vm/stack_zero.hpp b/hotspot/src/cpu/zero/vm/stack_zero.hpp index daf0b92099a..8e02d9f4bff 100644 --- a/hotspot/src/cpu/zero/vm/stack_zero.hpp +++ b/hotspot/src/cpu/zero/vm/stack_zero.hpp @@ -1,6 +1,6 @@ /* * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. - * Copyright 2008, 2009 Red Hat, Inc. + * Copyright 2008, 2009, 2010 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 @@ -29,9 +29,14 @@ class ZeroStack { intptr_t *_top; // the word past the end of the stack intptr_t *_sp; // the top word on the stack + private: + int _shadow_pages_size; // how much ABI stack must we keep free? + public: ZeroStack() - : _base(NULL), _top(NULL), _sp(NULL) {} + : _base(NULL), _top(NULL), _sp(NULL) { + _shadow_pages_size = StackShadowPages * os::vm_page_size(); + } bool needs_setup() const { return _base == NULL; @@ -81,6 +86,14 @@ class ZeroStack { return _sp -= count; } + int shadow_pages_size() const { + return _shadow_pages_size; + } + + public: + void overflow_check(int required_words, TRAPS); + static void handle_overflow(TRAPS); + public: static ByteSize base_offset() { return byte_offset_of(ZeroStack, _base); diff --git a/hotspot/src/cpu/zero/vm/stubGenerator_zero.cpp b/hotspot/src/cpu/zero/vm/stubGenerator_zero.cpp index b8ab9bb558a..4ffa5d18919 100644 --- a/hotspot/src/cpu/zero/vm/stubGenerator_zero.cpp +++ b/hotspot/src/cpu/zero/vm/stubGenerator_zero.cpp @@ -1,6 +1,6 @@ /* * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. - * Copyright 2007, 2008 Red Hat, Inc. + * Copyright 2007, 2008, 2010 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 @@ -60,37 +60,42 @@ class StubGenerator: public StubCodeGenerator { } // Allocate and initialize our frame - thread->push_zero_frame( - EntryFrame::build(stack, parameters, parameter_words, call_wrapper)); + EntryFrame *frame = + EntryFrame::build(parameters, parameter_words, call_wrapper, THREAD); - // Make the call - Interpreter::invoke_method(method, entry_point, THREAD); - - // Store result depending on type if (!HAS_PENDING_EXCEPTION) { - switch (result_type) { - case T_INT: - *(jint *) result = *(jint *) stack->sp(); - break; - case T_LONG: - *(jlong *) result = *(jlong *) stack->sp(); - break; - case T_FLOAT: - *(jfloat *) result = *(jfloat *) stack->sp(); - break; - case T_DOUBLE: - *(jdouble *) result = *(jdouble *) stack->sp(); - break; - case T_OBJECT: - *(oop *) result = *(oop *) stack->sp(); - break; - default: - ShouldNotReachHere(); - } - } + // Push the frame + thread->push_zero_frame(frame); - // Unwind our frame - thread->pop_zero_frame(); + // Make the call + Interpreter::invoke_method(method, entry_point, THREAD); + + // Store the result + if (!HAS_PENDING_EXCEPTION) { + switch (result_type) { + case T_INT: + *(jint *) result = *(jint *) stack->sp(); + break; + case T_LONG: + *(jlong *) result = *(jlong *) stack->sp(); + break; + case T_FLOAT: + *(jfloat *) result = *(jfloat *) stack->sp(); + break; + case T_DOUBLE: + *(jdouble *) result = *(jdouble *) stack->sp(); + break; + case T_OBJECT: + *(oop *) result = *(oop *) stack->sp(); + break; + default: + ShouldNotReachHere(); + } + } + + // Unwind the frame + thread->pop_zero_frame(); + } // Tear down the stack if necessary if (stack_needs_teardown) @@ -226,13 +231,13 @@ void StubGenerator_generate(CodeBuffer* code, bool all) { StubGenerator g(code, all); } -EntryFrame *EntryFrame::build(ZeroStack* stack, - const intptr_t* parameters, +EntryFrame *EntryFrame::build(const intptr_t* parameters, int parameter_words, - JavaCallWrapper* call_wrapper) { - if (header_words + parameter_words > stack->available_words()) { - Unimplemented(); - } + JavaCallWrapper* call_wrapper, + TRAPS) { + + ZeroStack *stack = ((JavaThread *) THREAD)->zero_stack(); + stack->overflow_check(header_words + parameter_words, CHECK_NULL); stack->push(0); // next_frame, filled in later intptr_t *fp = stack->sp(); diff --git a/hotspot/src/os_cpu/linux_zero/vm/thread_linux_zero.hpp b/hotspot/src/os_cpu/linux_zero/vm/thread_linux_zero.hpp index a1ca908d08a..76f74c49b63 100644 --- a/hotspot/src/os_cpu/linux_zero/vm/thread_linux_zero.hpp +++ b/hotspot/src/os_cpu/linux_zero/vm/thread_linux_zero.hpp @@ -1,6 +1,6 @@ /* * Copyright 2000-2007 Sun Microsystems, Inc. All Rights Reserved. - * Copyright 2007, 2008, 2009 Red Hat, Inc. + * Copyright 2007, 2008, 2009, 2010 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 @@ -68,12 +68,13 @@ public: void set_last_Java_frame() { - JavaFrameAnchor *jfa = frame_anchor(); - jfa->set_last_Java_sp((intptr_t *) top_zero_frame()); + set_last_Java_frame(top_zero_frame()); } void reset_last_Java_frame() { - JavaFrameAnchor *jfa = frame_anchor(); - jfa->set_last_Java_sp(NULL); + set_last_Java_frame(NULL); + } + void set_last_Java_frame(ZeroFrame* frame) { + frame_anchor()->set_last_Java_sp((intptr_t *) frame); } private: diff --git a/hotspot/src/share/vm/includeDB_zero b/hotspot/src/share/vm/includeDB_zero index 4d1d52cfdf5..b5c7a60440f 100644 --- a/hotspot/src/share/vm/includeDB_zero +++ b/hotspot/src/share/vm/includeDB_zero @@ -1,6 +1,6 @@ // // Copyright 2001-2009 Sun Microsystems, Inc. All Rights Reserved. -// Copyright 2009 Red Hat, Inc. +// Copyright 2009, 2010 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 @@ -25,6 +25,8 @@ // NOTE: DO NOT CHANGE THIS COPYRIGHT TO NEW STYLE - IT WILL BREAK makeDeps! +cppInterpreter_.cpp stack_.inline.hpp + entryFrame_.hpp javaCalls.hpp entryFrame_.hpp stack_.hpp @@ -47,9 +49,19 @@ interpreterFrame_.hpp methodOop.hpp interpreterFrame_.hpp stack_.hpp interpreterFrame_.hpp thread.hpp +interpreterRT_.cpp stack_.inline.hpp + sharkFrame_.hpp methodOop.hpp sharkFrame_.hpp stack_.hpp stack_.hpp sizes.hpp +stack_.inline.hpp stack_.hpp +stack_.inline.hpp thread.hpp + +stack_.cpp interpreterRuntime.hpp +stack_.cpp stack_.hpp + +stubGenerator_.cpp stack_.inline.hpp + thread.hpp stack_.hpp From d88990933509de8713838fbcc89d8cf5de78094e Mon Sep 17 00:00:00 2001 From: Gary Benson Date: Thu, 15 Apr 2010 03:13:56 -0700 Subject: [PATCH 39/91] 6944028: 6940701 broke Zero The fix for 6940701 broke Zero. Reviewed-by: twisti --- hotspot/src/cpu/zero/vm/globals_zero.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/hotspot/src/cpu/zero/vm/globals_zero.hpp b/hotspot/src/cpu/zero/vm/globals_zero.hpp index e50df6f3dd1..bd0264551d9 100644 --- a/hotspot/src/cpu/zero/vm/globals_zero.hpp +++ b/hotspot/src/cpu/zero/vm/globals_zero.hpp @@ -35,6 +35,7 @@ define_pd_global(bool, ImplicitNullChecks, true); define_pd_global(bool, UncommonNullCast, true); define_pd_global(intx, CodeEntryAlignment, 32); +define_pd_global(intx, OptoLoopAlignment, 16); define_pd_global(intx, InlineFrequencyCount, 100); define_pd_global(intx, PreInflateSpin, 10); From 61ab8e5bfdf093fc96661a0da5ef030ac7d04301 Mon Sep 17 00:00:00 2001 From: Chris Hegarty Date: Thu, 15 Apr 2010 16:37:16 +0100 Subject: [PATCH 40/91] 6943219: test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/DNSIdentities.java fail in linux Reviewed-by: andrew --- .../www/protocol/https/HttpsURLConnection/DNSIdentities.java | 3 --- .../https/HttpsURLConnection/IPAddressDNSIdentities.java | 3 --- .../https/HttpsURLConnection/IPAddressIPIdentities.java | 3 --- .../www/protocol/https/HttpsURLConnection/IPIdentities.java | 3 --- .../net/www/protocol/https/HttpsURLConnection/Identities.java | 3 --- 5 files changed, 15 deletions(-) diff --git a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/DNSIdentities.java b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/DNSIdentities.java index eddbd29e190..4ad52df30ae 100644 --- a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/DNSIdentities.java +++ b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/DNSIdentities.java @@ -657,9 +657,6 @@ public class DNSIdentities { SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept(); sslSocket.setNeedClientAuth(true); - if (sslSocket instanceof SSLSocketImpl) { - ((SSLSocketImpl)sslSocket).trySetHostnameVerification("HTTPS"); - } PrintStream out = new PrintStream(sslSocket.getOutputStream()); diff --git a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/IPAddressDNSIdentities.java b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/IPAddressDNSIdentities.java index 4cc3a0f0554..21827a28ce1 100644 --- a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/IPAddressDNSIdentities.java +++ b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/IPAddressDNSIdentities.java @@ -657,9 +657,6 @@ public class IPAddressDNSIdentities { SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept(); sslSocket.setNeedClientAuth(true); - if (sslSocket instanceof SSLSocketImpl) { - ((SSLSocketImpl)sslSocket).trySetHostnameVerification("HTTPS"); - } PrintStream out = new PrintStream(sslSocket.getOutputStream()); diff --git a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/IPAddressIPIdentities.java b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/IPAddressIPIdentities.java index d30efd81ebf..6e54fc39631 100644 --- a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/IPAddressIPIdentities.java +++ b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/IPAddressIPIdentities.java @@ -658,9 +658,6 @@ public class IPAddressIPIdentities { SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept(); sslSocket.setNeedClientAuth(true); - if (sslSocket instanceof SSLSocketImpl) { - ((SSLSocketImpl)sslSocket).trySetHostnameVerification("HTTPS"); - } PrintStream out = new PrintStream(sslSocket.getOutputStream()); diff --git a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/IPIdentities.java b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/IPIdentities.java index 10dc8d8301a..369022c4416 100644 --- a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/IPIdentities.java +++ b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/IPIdentities.java @@ -658,9 +658,6 @@ public class IPIdentities { SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept(); sslSocket.setNeedClientAuth(true); - if (sslSocket instanceof SSLSocketImpl) { - ((SSLSocketImpl)sslSocket).trySetHostnameVerification("HTTPS"); - } PrintStream out = new PrintStream(sslSocket.getOutputStream()); diff --git a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/Identities.java b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/Identities.java index 79224b0ac70..861518141de 100644 --- a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/Identities.java +++ b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/Identities.java @@ -657,9 +657,6 @@ public class Identities { SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept(); sslSocket.setNeedClientAuth(true); - if (sslSocket instanceof SSLSocketImpl) { - ((SSLSocketImpl)sslSocket).trySetHostnameVerification("HTTPS"); - } PrintStream out = new PrintStream(sslSocket.getOutputStream()); From c782032ff8a6efac53ced903d0ab09327a85473c Mon Sep 17 00:00:00 2001 From: Michael Wilkerson Date: Thu, 15 Apr 2010 13:54:49 -0700 Subject: [PATCH 41/91] Added tag jdk7-b89 for changeset e996369c787b --- .hgtags-top-repo | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags-top-repo b/.hgtags-top-repo index 4713fd46342..5abe6bf24de 100644 --- a/.hgtags-top-repo +++ b/.hgtags-top-repo @@ -63,3 +63,4 @@ cf26288a114be67c39f2758959ce50b60f5ae330 jdk7-b85 433a60a9c0bf1b26ee7e65cebaa89c541f497aed jdk7-b86 6b1069f53fbc30663ccef49d78c31bb7d6967bde jdk7-b87 82135c848d5fcddb065e98ae77b81077c858f593 jdk7-b88 +7f1ba4459972bf84b8201dc1cc4f62b1fe1c74f4 jdk7-b89 From d74a843b458d2b1f381147ec61e40c857439bdfe Mon Sep 17 00:00:00 2001 From: Michael Wilkerson Date: Thu, 15 Apr 2010 13:54:50 -0700 Subject: [PATCH 42/91] Added tag jdk7-b89 for changeset 6bdda0396d9d --- corba/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/corba/.hgtags b/corba/.hgtags index dc6713f7452..97e7794b2b6 100644 --- a/corba/.hgtags +++ b/corba/.hgtags @@ -63,3 +63,4 @@ c67a9df7bc0ca291f08f9a9cc05cb78ea15d25e6 jdk7-b85 6253e28826d16cf1aecc39ce04c8de1f6bf2df5f jdk7-b86 09a41111a401d327f65e453384d976a10154d9ea jdk7-b87 39e14d2da687c7e592142137517aaf689544820f jdk7-b88 +bb4424c5e778b842c064a8b1aa902b35f4397654 jdk7-b89 From 8c5458caf10f0ab9fa8dab50f2b0a796cc6120b3 Mon Sep 17 00:00:00 2001 From: Michael Wilkerson Date: Thu, 15 Apr 2010 13:54:54 -0700 Subject: [PATCH 43/91] Added tag jdk7-b89 for changeset 750e57985f1e --- hotspot/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/hotspot/.hgtags b/hotspot/.hgtags index 76dc8e725d3..7894663dd0b 100644 --- a/hotspot/.hgtags +++ b/hotspot/.hgtags @@ -87,3 +87,4 @@ bf823ef06b4f211e66988d76a2e2669be5c0820e jdk7-b86 07226e9eab8f74b37346b32715f829a2ef2c3188 hs18-b01 e7e7e36ccdb5d56edd47e5744351202d38f3b7ad jdk7-b87 4b60f23c42231f7ecd62ad1fcb6a9ca26fa57d1b jdk7-b88 +15836273ac2494f36ef62088bc1cb6f3f011f565 jdk7-b89 From 5a8b753b8a214384e3631aa0bad89e8196b325a3 Mon Sep 17 00:00:00 2001 From: Michael Wilkerson Date: Thu, 15 Apr 2010 13:54:59 -0700 Subject: [PATCH 44/91] Added tag jdk7-b89 for changeset a5368e5402f5 --- jaxp/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/jaxp/.hgtags b/jaxp/.hgtags index 18d60966945..24f93501115 100644 --- a/jaxp/.hgtags +++ b/jaxp/.hgtags @@ -63,3 +63,4 @@ c876ad22e4bf9d3c6460080db7ace478e29a3ff9 jdk7-b82 81c0f115bbe5d3bcf59864465b5eca5538567c79 jdk7-b86 8b493f1aa136d86de0885fcba15262c4fa2b1412 jdk7-b87 d8ebd15910034f2ba50b2f129f959f86cca01419 jdk7-b88 +d2818fd2b036f3b3154a9a7de41afcf4ac679c1b jdk7-b89 From 657ff085672dce698f50e2a9bd51928efe86f6b1 Mon Sep 17 00:00:00 2001 From: Michael Wilkerson Date: Thu, 15 Apr 2010 13:54:59 -0700 Subject: [PATCH 45/91] Added tag jdk7-b89 for changeset 8063e418d57c --- jaxws/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/jaxws/.hgtags b/jaxws/.hgtags index 7852f151705..a929154499b 100644 --- a/jaxws/.hgtags +++ b/jaxws/.hgtags @@ -63,3 +63,4 @@ f051045fe94a48fae1097f90cbd9227e6aae6b7e jdk7-b81 512b0e924a5ae0c0b7ad326182cae0dc0e4d1aa8 jdk7-b86 3febd6fab2ac8ffddbaf7bed00d11290262af153 jdk7-b87 8c666f8f3565974e301ccb58b7538912551a6e26 jdk7-b88 +bf3675aa7f20fc6f241ce95760005aef2a30ff41 jdk7-b89 From 056ada1df62e8181ce6668bc20cf096627dc2f9c Mon Sep 17 00:00:00 2001 From: Michael Wilkerson Date: Thu, 15 Apr 2010 13:55:04 -0700 Subject: [PATCH 46/91] Added tag jdk7-b89 for changeset 892f63d483d9 --- jdk/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/jdk/.hgtags b/jdk/.hgtags index a6b4e850e5d..83aac469273 100644 --- a/jdk/.hgtags +++ b/jdk/.hgtags @@ -63,3 +63,4 @@ b396584a3e64988839cca21ea1f7fbdcc9248783 jdk7-b85 eae6e9ab26064d9ba0e7665dd646a1fd2506fcc1 jdk7-b86 2cafbbe9825e911a6ca6c17d9a18eb1f0bf0873c jdk7-b87 b3c69282f6d3c90ec21056cd1ab70dc0c895b069 jdk7-b88 +4a6abb7e224cc8d9a583c23c5782e4668739a119 jdk7-b89 From 78db55760020f9942cfc1a7ab81cf031d99759b9 Mon Sep 17 00:00:00 2001 From: Michael Wilkerson Date: Thu, 15 Apr 2010 13:55:14 -0700 Subject: [PATCH 47/91] Added tag jdk7-b89 for changeset 8d57da0c20f6 --- langtools/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/langtools/.hgtags b/langtools/.hgtags index 0dc63823118..b143649c02c 100644 --- a/langtools/.hgtags +++ b/langtools/.hgtags @@ -63,3 +63,4 @@ d9cd5b8286e44f3baf90da290cd295433e21c05a jdk7-b84 ef07347428f2198ae6b8144ac0b9086bbe39fd16 jdk7-b86 409db93d19c002333980df5b797c6b965150c7a0 jdk7-b87 f9b5d4867a26f8c4b90ad37fe2c345b721e93d6b jdk7-b88 +6cea9a143208bc1185ced046942c0f4e45dbeba5 jdk7-b89 From 6110c052aa8314a25d174c5e61b32f2271dfcfab Mon Sep 17 00:00:00 2001 From: John Cuthbertson Date: Thu, 15 Apr 2010 15:52:55 -0700 Subject: [PATCH 48/91] 6943926: G1: Integer overflow during heap region verification The expression that calculates the live bytes for a heap region can overflow for a suitably large humongous region/object. Cache the object size in a suitably sized local variable so that the expression is converted to a wider type. Reviewed-by: tonyp, jmasa, iveresov, apetrusenko --- .../src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp index 1b56eae5245..5f1948108db 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp @@ -2194,8 +2194,10 @@ public: assert(o != NULL, "Huh?"); if (!_g1h->is_obj_dead_cond(o, _use_prev_marking)) { o->oop_iterate(&isLive); - if (!_hr->obj_allocated_since_prev_marking(o)) - _live_bytes += (o->size() * HeapWordSize); + if (!_hr->obj_allocated_since_prev_marking(o)) { + size_t obj_size = o->size(); // Make sure we don't overflow + _live_bytes += (obj_size * HeapWordSize); + } } } size_t live_bytes() { return _live_bytes; } From 89dcd228da7e9b6f7f61dde9e7930876e4583e92 Mon Sep 17 00:00:00 2001 From: Antonios Printezis Date: Thu, 15 Apr 2010 18:45:30 -0400 Subject: [PATCH 49/91] 6939027: G1: assertion failure during the concurrent phase of cleanup The outgoing region map is not maintained properly and it's causing an assert failure. Given that we don't actually use it, I'm removing it. I'm piggy-backing a small change on this which removes a message that it's printed before a Full GC when DisableExplicitGC is set. Reviewed-by: apetrusenko, ysr --- .../gc_implementation/g1/g1CollectedHeap.cpp | 1 - .../gc_implementation/g1/heapRegionRemSet.cpp | 27 +------------------ .../gc_implementation/g1/heapRegionRemSet.hpp | 11 -------- 3 files changed, 1 insertion(+), 38 deletions(-) diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp index 5f1948108db..c1baa6ee822 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp @@ -913,7 +913,6 @@ void G1CollectedHeap::do_collection(bool full, bool clear_all_soft_refs, } if (full && DisableExplicitGC) { - gclog_or_tty->print("\n\n\nDisabling Explicit GC\n\n\n"); return; } diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp b/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp index 883b2b1ef26..db7e7332fdb 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp @@ -662,8 +662,6 @@ void OtherRegionsTable::add_reference(OopOrNarrowOopStar from, int tid) { prt = PosParPRT::alloc(from_hr); } prt->init(from_hr); - // Record the outgoing pointer in the from_region's outgoing bitmap. - from_hr->rem_set()->add_outgoing_reference(hr()); PosParPRT* first_prt = _fine_grain_regions[ind]; prt->set_next(first_prt); // XXX Maybe move to init? @@ -1073,11 +1071,7 @@ int HeapRegionRemSet::num_par_rem_sets() { HeapRegionRemSet::HeapRegionRemSet(G1BlockOffsetSharedArray* bosa, HeapRegion* hr) - : _bosa(bosa), _other_regions(hr), - _outgoing_region_map(G1CollectedHeap::heap()->max_regions(), - false /* in-resource-area */), - _iter_state(Unclaimed) -{} + : _bosa(bosa), _other_regions(hr), _iter_state(Unclaimed) { } void HeapRegionRemSet::setup_remset_size() { @@ -1148,30 +1142,11 @@ void HeapRegionRemSet::par_cleanup() { PosParPRT::par_contract_all(); } -void HeapRegionRemSet::add_outgoing_reference(HeapRegion* to_hr) { - _outgoing_region_map.par_at_put(to_hr->hrs_index(), 1); -} - void HeapRegionRemSet::clear() { - clear_outgoing_entries(); - _outgoing_region_map.clear(); _other_regions.clear(); assert(occupied() == 0, "Should be clear."); } -void HeapRegionRemSet::clear_outgoing_entries() { - G1CollectedHeap* g1h = G1CollectedHeap::heap(); - size_t i = _outgoing_region_map.get_next_one_offset(0); - while (i < _outgoing_region_map.size()) { - HeapRegion* to_region = g1h->region_at(i); - if (!to_region->in_collection_set()) { - to_region->rem_set()->clear_incoming_entry(hr()); - } - i = _outgoing_region_map.get_next_one_offset(i+1); - } -} - - void HeapRegionRemSet::scrub(CardTableModRefBS* ctbs, BitMap* region_bm, BitMap* card_bm) { _other_regions.scrub(ctbs, region_bm, card_bm); diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp b/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp index c51286290af..34712c98fcb 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp @@ -179,13 +179,6 @@ private: OtherRegionsTable _other_regions; - // One set bit for every region that has an entry for this one. - BitMap _outgoing_region_map; - - // Clear entries for the current region in any rem sets named in - // the _outgoing_region_map. - void clear_outgoing_entries(); - enum ParIterState { Unclaimed, Claimed, Complete }; volatile ParIterState _iter_state; volatile jlong _iter_claimed; @@ -243,10 +236,6 @@ public: _other_regions.add_reference(from, tid); } - // Records the fact that the current region contains an outgoing - // reference into "to_hr". - void add_outgoing_reference(HeapRegion* to_hr); - // Removes any entries shown by the given bitmaps to contain only dead // objects. void scrub(CardTableModRefBS* ctbs, BitMap* region_bm, BitMap* card_bm); From d0a7eafe8d7a5b2b7f5310b6532526a5386333a7 Mon Sep 17 00:00:00 2001 From: Xueming Shen Date: Thu, 15 Apr 2010 17:00:55 -0700 Subject: [PATCH 50/91] 6931676: TEST_BUG: wrong value for bugid in comments Update to the correct bugid Reviewed-by: martin --- jdk/test/java/util/regex/RegExTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jdk/test/java/util/regex/RegExTest.java b/jdk/test/java/util/regex/RegExTest.java index c2748f071c4..bc5ad65aa86 100644 --- a/jdk/test/java/util/regex/RegExTest.java +++ b/jdk/test/java/util/regex/RegExTest.java @@ -32,7 +32,7 @@ * 4872664 4803179 4892980 4900747 4945394 4938995 4979006 4994840 4997476 * 5013885 5003322 4988891 5098443 5110268 6173522 4829857 5027748 6376940 * 6358731 6178785 6284152 6231989 6497148 6486934 6233084 6504326 6635133 - * 6350801 6676425 6878475 6919132 + * 6350801 6676425 6878475 6919132 6931676 */ import java.util.regex.*; @@ -3515,7 +3515,7 @@ public class RegExTest { report("NamedGroupCapture"); } - // This is for bug 6969132 + // This is for bug 6919132 private static void nonBmpClassComplementTest() throws Exception { Pattern p = Pattern.compile("\\P{Lu}"); Matcher m = p.matcher(new String(new int[] {0x1d400}, 0, 1)); From 98ee92e72468f4ab61bae267c19b9309cc6af43d Mon Sep 17 00:00:00 2001 From: Tom Rodriguez Date: Thu, 15 Apr 2010 18:14:49 -0700 Subject: [PATCH 51/91] 6939930: exception unwind changes in 6919934 hurts compilation speed Reviewed-by: twisti --- .../cpu/sparc/vm/c1_LIRAssembler_sparc.cpp | 89 +++++++++++++---- .../src/cpu/x86/vm/c1_LIRAssembler_x86.cpp | 95 +++++++++++++++---- hotspot/src/share/vm/asm/codeBuffer.hpp | 2 + hotspot/src/share/vm/c1/c1_Compilation.cpp | 4 + hotspot/src/share/vm/c1/c1_GraphBuilder.cpp | 34 +------ hotspot/src/share/vm/c1/c1_Instruction.hpp | 9 +- hotspot/src/share/vm/c1/c1_LIR.cpp | 14 ++- hotspot/src/share/vm/c1/c1_LIR.hpp | 10 +- hotspot/src/share/vm/c1/c1_LIRAssembler.cpp | 7 +- hotspot/src/share/vm/c1/c1_LIRAssembler.hpp | 6 +- hotspot/src/share/vm/c1/c1_LIRGenerator.cpp | 22 +---- hotspot/src/share/vm/code/nmethod.cpp | 6 ++ hotspot/src/share/vm/code/nmethod.hpp | 4 + .../src/share/vm/runtime/sharedRuntime.cpp | 7 ++ 14 files changed, 208 insertions(+), 101 deletions(-) diff --git a/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp b/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp index af970215024..21cb47f9d98 100644 --- a/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp @@ -388,6 +388,60 @@ int LIR_Assembler::emit_exception_handler() { } +// Emit the code to remove the frame from the stack in the exception +// unwind path. +int LIR_Assembler::emit_unwind_handler() { +#ifndef PRODUCT + if (CommentedAssembly) { + _masm->block_comment("Unwind handler"); + } +#endif + + int offset = code_offset(); + + // Fetch the exception from TLS and clear out exception related thread state + __ ld_ptr(G2_thread, in_bytes(JavaThread::exception_oop_offset()), O0); + __ st_ptr(G0, G2_thread, in_bytes(JavaThread::exception_oop_offset())); + __ st_ptr(G0, G2_thread, in_bytes(JavaThread::exception_pc_offset())); + + __ bind(_unwind_handler_entry); + __ verify_not_null_oop(O0); + if (method()->is_synchronized() || compilation()->env()->dtrace_method_probes()) { + __ mov(O0, I0); // Preserve the exception + } + + // Preform needed unlocking + MonitorExitStub* stub = NULL; + if (method()->is_synchronized()) { + monitor_address(0, FrameMap::I1_opr); + stub = new MonitorExitStub(FrameMap::I1_opr, true, 0); + __ unlock_object(I3, I2, I1, *stub->entry()); + __ bind(*stub->continuation()); + } + + if (compilation()->env()->dtrace_method_probes()) { + jobject2reg(method()->constant_encoding(), O0); + __ call(CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_exit), relocInfo::runtime_call_type); + __ delayed()->nop(); + } + + if (method()->is_synchronized() || compilation()->env()->dtrace_method_probes()) { + __ mov(I0, O0); // Restore the exception + } + + // dispatch to the unwind logic + __ call(Runtime1::entry_for(Runtime1::unwind_exception_id), relocInfo::runtime_call_type); + __ delayed()->nop(); + + // Emit the slow path assembly + if (stub != NULL) { + stub->emit_code(this); + } + + return offset; +} + + int LIR_Assembler::emit_deopt_handler() { // if the last instruction is a call (typically to do a throw which // is coming at the end after block reordering) the return address @@ -2050,26 +2104,29 @@ int LIR_Assembler::shift_amount(BasicType t) { } -void LIR_Assembler::throw_op(LIR_Opr exceptionPC, LIR_Opr exceptionOop, CodeEmitInfo* info, bool unwind) { +void LIR_Assembler::throw_op(LIR_Opr exceptionPC, LIR_Opr exceptionOop, CodeEmitInfo* info) { assert(exceptionOop->as_register() == Oexception, "should match"); - assert(unwind || exceptionPC->as_register() == Oissuing_pc, "should match"); + assert(exceptionPC->as_register() == Oissuing_pc, "should match"); info->add_register_oop(exceptionOop); - if (unwind) { - __ call(Runtime1::entry_for(Runtime1::unwind_exception_id), relocInfo::runtime_call_type); - __ delayed()->nop(); - } else { - // reuse the debug info from the safepoint poll for the throw op itself - address pc_for_athrow = __ pc(); - int pc_for_athrow_offset = __ offset(); - RelocationHolder rspec = internal_word_Relocation::spec(pc_for_athrow); - __ set(pc_for_athrow, Oissuing_pc, rspec); - add_call_info(pc_for_athrow_offset, info); // for exception handler + // reuse the debug info from the safepoint poll for the throw op itself + address pc_for_athrow = __ pc(); + int pc_for_athrow_offset = __ offset(); + RelocationHolder rspec = internal_word_Relocation::spec(pc_for_athrow); + __ set(pc_for_athrow, Oissuing_pc, rspec); + add_call_info(pc_for_athrow_offset, info); // for exception handler - __ call(Runtime1::entry_for(Runtime1::handle_exception_id), relocInfo::runtime_call_type); - __ delayed()->nop(); - } + __ call(Runtime1::entry_for(Runtime1::handle_exception_id), relocInfo::runtime_call_type); + __ delayed()->nop(); +} + + +void LIR_Assembler::unwind_op(LIR_Opr exceptionOop) { + assert(exceptionOop->as_register() == Oexception, "should match"); + + __ br(Assembler::always, false, Assembler::pt, _unwind_handler_entry); + __ delayed()->nop(); } @@ -2358,7 +2415,7 @@ void LIR_Assembler::emit_alloc_array(LIR_OpAllocArray* op) { if (UseSlowPath || (!UseFastNewObjectArray && (op->type() == T_OBJECT || op->type() == T_ARRAY)) || (!UseFastNewTypeArray && (op->type() != T_OBJECT && op->type() != T_ARRAY))) { - __ br(Assembler::always, false, Assembler::pn, *op->stub()->entry()); + __ br(Assembler::always, false, Assembler::pt, *op->stub()->entry()); __ delayed()->nop(); } else { __ allocate_array(op->obj()->as_register(), diff --git a/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp b/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp index d88ce13e2c4..966a01d8624 100644 --- a/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp +++ b/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp @@ -455,6 +455,60 @@ int LIR_Assembler::emit_exception_handler() { } +// Emit the code to remove the frame from the stack in the exception +// unwind path. +int LIR_Assembler::emit_unwind_handler() { +#ifndef PRODUCT + if (CommentedAssembly) { + _masm->block_comment("Unwind handler"); + } +#endif + + int offset = code_offset(); + + // Fetch the exception from TLS and clear out exception related thread state + __ get_thread(rsi); + __ movptr(rax, Address(rsi, JavaThread::exception_oop_offset())); + __ movptr(Address(rsi, JavaThread::exception_oop_offset()), (int32_t)NULL_WORD); + __ movptr(Address(rsi, JavaThread::exception_pc_offset()), (int32_t)NULL_WORD); + + __ bind(_unwind_handler_entry); + __ verify_not_null_oop(rax); + if (method()->is_synchronized() || compilation()->env()->dtrace_method_probes()) { + __ mov(rsi, rax); // Preserve the exception + } + + // Preform needed unlocking + MonitorExitStub* stub = NULL; + if (method()->is_synchronized()) { + monitor_address(0, FrameMap::rax_opr); + stub = new MonitorExitStub(FrameMap::rax_opr, true, 0); + __ unlock_object(rdi, rbx, rax, *stub->entry()); + __ bind(*stub->continuation()); + } + + if (compilation()->env()->dtrace_method_probes()) { + __ movoop(Address(rsp, 0), method()->constant_encoding()); + __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_exit))); + } + + if (method()->is_synchronized() || compilation()->env()->dtrace_method_probes()) { + __ mov(rax, rsi); // Restore the exception + } + + // remove the activation and dispatch to the unwind handler + __ remove_frame(initial_frame_size_in_bytes()); + __ jump(RuntimeAddress(Runtime1::entry_for(Runtime1::unwind_exception_id))); + + // Emit the slow path assembly + if (stub != NULL) { + stub->emit_code(this); + } + + return offset; +} + + int LIR_Assembler::emit_deopt_handler() { // if the last instruction is a call (typically to do a throw which // is coming at the end after block reordering) the return address @@ -2795,42 +2849,43 @@ void LIR_Assembler::emit_static_call_stub() { } -void LIR_Assembler::throw_op(LIR_Opr exceptionPC, LIR_Opr exceptionOop, CodeEmitInfo* info, bool unwind) { +void LIR_Assembler::throw_op(LIR_Opr exceptionPC, LIR_Opr exceptionOop, CodeEmitInfo* info) { assert(exceptionOop->as_register() == rax, "must match"); - assert(unwind || exceptionPC->as_register() == rdx, "must match"); + assert(exceptionPC->as_register() == rdx, "must match"); // exception object is not added to oop map by LinearScan // (LinearScan assumes that no oops are in fixed registers) info->add_register_oop(exceptionOop); Runtime1::StubID unwind_id; - if (!unwind) { - // get current pc information - // pc is only needed if the method has an exception handler, the unwind code does not need it. - int pc_for_athrow_offset = __ offset(); - InternalAddress pc_for_athrow(__ pc()); - __ lea(exceptionPC->as_register(), pc_for_athrow); - add_call_info(pc_for_athrow_offset, info); // for exception handler + // get current pc information + // pc is only needed if the method has an exception handler, the unwind code does not need it. + int pc_for_athrow_offset = __ offset(); + InternalAddress pc_for_athrow(__ pc()); + __ lea(exceptionPC->as_register(), pc_for_athrow); + add_call_info(pc_for_athrow_offset, info); // for exception handler - __ verify_not_null_oop(rax); - // search an exception handler (rax: exception oop, rdx: throwing pc) - if (compilation()->has_fpu_code()) { - unwind_id = Runtime1::handle_exception_id; - } else { - unwind_id = Runtime1::handle_exception_nofpu_id; - } - __ call(RuntimeAddress(Runtime1::entry_for(unwind_id))); + __ verify_not_null_oop(rax); + // search an exception handler (rax: exception oop, rdx: throwing pc) + if (compilation()->has_fpu_code()) { + unwind_id = Runtime1::handle_exception_id; } else { - // remove the activation - __ remove_frame(initial_frame_size_in_bytes()); - __ jump(RuntimeAddress(Runtime1::entry_for(Runtime1::unwind_exception_id))); + unwind_id = Runtime1::handle_exception_nofpu_id; } + __ call(RuntimeAddress(Runtime1::entry_for(unwind_id))); // enough room for two byte trap __ nop(); } +void LIR_Assembler::unwind_op(LIR_Opr exceptionOop) { + assert(exceptionOop->as_register() == rax, "must match"); + + __ jmp(_unwind_handler_entry); +} + + void LIR_Assembler::shift_op(LIR_Code code, LIR_Opr left, LIR_Opr count, LIR_Opr dest, LIR_Opr tmp) { // optimized version for linear scan: diff --git a/hotspot/src/share/vm/asm/codeBuffer.hpp b/hotspot/src/share/vm/asm/codeBuffer.hpp index 8751fb6494d..3d61f875a6e 100644 --- a/hotspot/src/share/vm/asm/codeBuffer.hpp +++ b/hotspot/src/share/vm/asm/codeBuffer.hpp @@ -40,6 +40,7 @@ public: Exceptions, // Offset where exception handler lives Deopt, // Offset where deopt handler lives DeoptMH, // Offset where MethodHandle deopt handler lives + UnwindHandler, // Offset to default unwind handler max_Entries }; // special value to note codeBlobs where profile (forte) stack walking is @@ -59,6 +60,7 @@ public: _values[Exceptions ] = -1; _values[Deopt ] = -1; _values[DeoptMH ] = -1; + _values[UnwindHandler ] = -1; } int value(Entries e) { return _values[e]; } diff --git a/hotspot/src/share/vm/c1/c1_Compilation.cpp b/hotspot/src/share/vm/c1/c1_Compilation.cpp index e1df739770f..5fd667cb7d0 100644 --- a/hotspot/src/share/vm/c1/c1_Compilation.cpp +++ b/hotspot/src/share/vm/c1/c1_Compilation.cpp @@ -229,6 +229,10 @@ void Compilation::emit_code_epilog(LIR_Assembler* assembler) { code_offsets->set_value(CodeOffsets::DeoptMH, assembler->emit_deopt_handler()); CHECK_BAILOUT(); + // Emit the handler to remove the activation from the stack and + // dispatch to the caller. + offsets()->set_value(CodeOffsets::UnwindHandler, assembler->emit_unwind_handler()); + // done masm()->flush(); } diff --git a/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp b/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp index 8fc646cca55..808adc78cf4 100644 --- a/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp +++ b/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp @@ -829,12 +829,8 @@ void GraphBuilder::ScopeData::setup_jsr_xhandlers() { // should be left alone since there can be only one and all code // should dispatch to the same one. XHandler* h = handlers->handler_at(i); - if (h->handler_bci() != SynchronizationEntryBCI) { - h->set_entry_block(block_at(h->handler_bci())); - } else { - assert(h->entry_block()->is_set(BlockBegin::default_exception_handler_flag), - "should be the synthetic unlock block"); - } + assert(h->handler_bci() != SynchronizationEntryBCI, "must be real"); + h->set_entry_block(block_at(h->handler_bci())); } _jsr_xhandlers = handlers; } @@ -2867,19 +2863,6 @@ GraphBuilder::GraphBuilder(Compilation* compilation, IRScope* scope) _initial_state = state_at_entry(); start_block->merge(_initial_state); - // setup an exception handler to do the unlocking and/or - // notification and unwind the frame. - BlockBegin* sync_handler = new BlockBegin(-1); - sync_handler->set(BlockBegin::exception_entry_flag); - sync_handler->set(BlockBegin::is_on_work_list_flag); - sync_handler->set(BlockBegin::default_exception_handler_flag); - - ciExceptionHandler* desc = new ciExceptionHandler(method()->holder(), 0, method()->code_size(), -1, 0); - XHandler* h = new XHandler(desc); - h->set_entry_block(sync_handler); - scope_data()->xhandlers()->append(h); - scope_data()->set_has_handler(); - // complete graph _vmap = new ValueMap(); scope->compute_lock_stack_size(); @@ -2930,19 +2913,6 @@ GraphBuilder::GraphBuilder(Compilation* compilation, IRScope* scope) } CHECK_BAILOUT(); - if (sync_handler && sync_handler->state() != NULL) { - Value lock = NULL; - if (method()->is_synchronized()) { - lock = method()->is_static() ? new Constant(new InstanceConstant(method()->holder()->java_mirror())) : - _initial_state->local_at(0); - - sync_handler->state()->unlock(); - sync_handler->state()->lock(scope, lock); - - } - fill_sync_handler(lock, sync_handler, true); - } - _start = setup_start_block(osr_bci, start_block, _osr_entry, _initial_state); eliminate_redundant_phis(_start); diff --git a/hotspot/src/share/vm/c1/c1_Instruction.hpp b/hotspot/src/share/vm/c1/c1_Instruction.hpp index 92e020a873a..eac937ad9e3 100644 --- a/hotspot/src/share/vm/c1/c1_Instruction.hpp +++ b/hotspot/src/share/vm/c1/c1_Instruction.hpp @@ -1628,11 +1628,10 @@ LEAF(BlockBegin, StateSplit) backward_branch_target_flag = 1 << 4, is_on_work_list_flag = 1 << 5, was_visited_flag = 1 << 6, - default_exception_handler_flag = 1 << 8, // identify block which represents the default exception handler - parser_loop_header_flag = 1 << 9, // set by parser to identify blocks where phi functions can not be created on demand - critical_edge_split_flag = 1 << 10, // set for all blocks that are introduced when critical edges are split - linear_scan_loop_header_flag = 1 << 11, // set during loop-detection for LinearScan - linear_scan_loop_end_flag = 1 << 12 // set during loop-detection for LinearScan + parser_loop_header_flag = 1 << 7, // set by parser to identify blocks where phi functions can not be created on demand + critical_edge_split_flag = 1 << 8, // set for all blocks that are introduced when critical edges are split + linear_scan_loop_header_flag = 1 << 9, // set during loop-detection for LinearScan + linear_scan_loop_end_flag = 1 << 10 // set during loop-detection for LinearScan }; void set(Flag f) { _flags |= f; } diff --git a/hotspot/src/share/vm/c1/c1_LIR.cpp b/hotspot/src/share/vm/c1/c1_LIR.cpp index 4d9f6958a26..e6a3b314715 100644 --- a/hotspot/src/share/vm/c1/c1_LIR.cpp +++ b/hotspot/src/share/vm/c1/c1_LIR.cpp @@ -626,8 +626,7 @@ void LIR_OpVisitState::visit(LIR_Op* op) { break; } - case lir_throw: - case lir_unwind: { + case lir_throw: { assert(op->as_Op2() != NULL, "must be"); LIR_Op2* op2 = (LIR_Op2*)op; @@ -639,6 +638,17 @@ void LIR_OpVisitState::visit(LIR_Op* op) { break; } + case lir_unwind: { + assert(op->as_Op1() != NULL, "must be"); + LIR_Op1* op1 = (LIR_Op1*)op; + + assert(op1->_info == NULL, "no info"); + assert(op1->_opr->is_valid(), "exception oop"); do_input(op1->_opr); + assert(op1->_result->is_illegal(), "no result"); + + break; + } + case lir_tan: case lir_sin: diff --git a/hotspot/src/share/vm/c1/c1_LIR.hpp b/hotspot/src/share/vm/c1/c1_LIR.hpp index 4ce123a176e..b0a56404502 100644 --- a/hotspot/src/share/vm/c1/c1_LIR.hpp +++ b/hotspot/src/share/vm/c1/c1_LIR.hpp @@ -801,6 +801,7 @@ enum LIR_Code { , lir_monaddr , lir_roundfp , lir_safepoint + , lir_unwind , end_op1 , begin_op2 , lir_cmp @@ -830,7 +831,6 @@ enum LIR_Code { , lir_ushr , lir_alloc_array , lir_throw - , lir_unwind , lir_compare_to , end_op2 , begin_op3 @@ -1827,8 +1827,12 @@ class LIR_List: public CompilationResourceObj { void logical_xor (LIR_Opr left, LIR_Opr right, LIR_Opr dst) { append(new LIR_Op2(lir_logic_xor, left, right, dst)); } void null_check(LIR_Opr opr, CodeEmitInfo* info) { append(new LIR_Op1(lir_null_check, opr, info)); } - void throw_exception(LIR_Opr exceptionPC, LIR_Opr exceptionOop, CodeEmitInfo* info) { append(new LIR_Op2(lir_throw, exceptionPC, exceptionOop, LIR_OprFact::illegalOpr, info)); } - void unwind_exception(LIR_Opr exceptionPC, LIR_Opr exceptionOop, CodeEmitInfo* info) { append(new LIR_Op2(lir_unwind, exceptionPC, exceptionOop, LIR_OprFact::illegalOpr, info)); } + void throw_exception(LIR_Opr exceptionPC, LIR_Opr exceptionOop, CodeEmitInfo* info) { + append(new LIR_Op2(lir_throw, exceptionPC, exceptionOop, LIR_OprFact::illegalOpr, info)); + } + void unwind_exception(LIR_Opr exceptionOop) { + append(new LIR_Op1(lir_unwind, exceptionOop)); + } void compare_to (LIR_Opr left, LIR_Opr right, LIR_Opr dst) { append(new LIR_Op2(lir_compare_to, left, right, dst)); diff --git a/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp b/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp index 14c4485e343..ab9c44625fe 100644 --- a/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp +++ b/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp @@ -552,6 +552,10 @@ void LIR_Assembler::emit_op1(LIR_Op1* op) { monitor_address(op->in_opr()->as_constant_ptr()->as_jint(), op->result_opr()); break; + case lir_unwind: + unwind_op(op->in_opr()); + break; + default: Unimplemented(); break; @@ -707,8 +711,7 @@ void LIR_Assembler::emit_op2(LIR_Op2* op) { break; case lir_throw: - case lir_unwind: - throw_op(op->in_opr1(), op->in_opr2(), op->info(), op->code() == lir_unwind); + throw_op(op->in_opr1(), op->in_opr2(), op->info()); break; default: diff --git a/hotspot/src/share/vm/c1/c1_LIRAssembler.hpp b/hotspot/src/share/vm/c1/c1_LIRAssembler.hpp index a7c1ecc869e..d73a19fdbdb 100644 --- a/hotspot/src/share/vm/c1/c1_LIRAssembler.hpp +++ b/hotspot/src/share/vm/c1/c1_LIRAssembler.hpp @@ -39,6 +39,8 @@ class LIR_Assembler: public CompilationResourceObj { Instruction* _pending_non_safepoint; int _pending_non_safepoint_offset; + Label _unwind_handler_entry; + #ifdef ASSERT BlockList _branch_target_blocks; void check_no_unbound_labels(); @@ -134,6 +136,7 @@ class LIR_Assembler: public CompilationResourceObj { // code patterns int emit_exception_handler(); + int emit_unwind_handler(); void emit_exception_entries(ExceptionInfoList* info_list); int emit_deopt_handler(); @@ -217,7 +220,8 @@ class LIR_Assembler: public CompilationResourceObj { void build_frame(); - void throw_op(LIR_Opr exceptionPC, LIR_Opr exceptionOop, CodeEmitInfo* info, bool unwind); + void throw_op(LIR_Opr exceptionPC, LIR_Opr exceptionOop, CodeEmitInfo* info); + void unwind_op(LIR_Opr exceptionOop); void monitor_address(int monitor_ix, LIR_Opr dst); void align_backward_branch_target(); diff --git a/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp b/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp index 4d9b19882f1..ea2942d9b2c 100644 --- a/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp +++ b/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp @@ -1765,35 +1765,17 @@ void LIRGenerator::do_Throw(Throw* x) { __ null_check(exception_opr, new CodeEmitInfo(info, true)); } - if (compilation()->env()->jvmti_can_post_on_exceptions() && - !block()->is_set(BlockBegin::default_exception_handler_flag)) { + if (compilation()->env()->jvmti_can_post_on_exceptions()) { // we need to go through the exception lookup path to get JVMTI // notification done unwind = false; } - assert(!block()->is_set(BlockBegin::default_exception_handler_flag) || unwind, - "should be no more handlers to dispatch to"); - - if (compilation()->env()->dtrace_method_probes() && - block()->is_set(BlockBegin::default_exception_handler_flag)) { - // notify that this frame is unwinding - BasicTypeList signature; - signature.append(T_INT); // thread - signature.append(T_OBJECT); // methodOop - LIR_OprList* args = new LIR_OprList(); - args->append(getThreadPointer()); - LIR_Opr meth = new_register(T_OBJECT); - __ oop2reg(method()->constant_encoding(), meth); - args->append(meth); - call_runtime(&signature, args, CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_exit), voidType, NULL); - } - // move exception oop into fixed register __ move(exception_opr, exceptionOopOpr()); if (unwind) { - __ unwind_exception(LIR_OprFact::illegalOpr, exceptionOopOpr(), info); + __ unwind_exception(exceptionOopOpr()); } else { __ throw_exception(exceptionPcOpr(), exceptionOopOpr(), info); } diff --git a/hotspot/src/share/vm/code/nmethod.cpp b/hotspot/src/share/vm/code/nmethod.cpp index 7ffb0f57026..946e5f67aed 100644 --- a/hotspot/src/share/vm/code/nmethod.cpp +++ b/hotspot/src/share/vm/code/nmethod.cpp @@ -685,6 +685,7 @@ nmethod::nmethod( _exception_offset = 0; _deoptimize_offset = 0; _deoptimize_mh_offset = 0; + _unwind_handler_offset = -1; _trap_offset = offsets->value(CodeOffsets::Dtrace_trap); _orig_pc_offset = 0; _stub_offset = data_offset(); @@ -798,6 +799,11 @@ nmethod::nmethod( _exception_offset = _stub_offset + offsets->value(CodeOffsets::Exceptions); _deoptimize_offset = _stub_offset + offsets->value(CodeOffsets::Deopt); _deoptimize_mh_offset = _stub_offset + offsets->value(CodeOffsets::DeoptMH); + if (offsets->value(CodeOffsets::UnwindHandler) != -1) { + _unwind_handler_offset = instructions_offset() + offsets->value(CodeOffsets::UnwindHandler); + } else { + _unwind_handler_offset = -1; + } _consts_offset = instructions_offset() + code_buffer->total_offset_of(code_buffer->consts()->start()); _scopes_data_offset = data_offset(); _scopes_pcs_offset = _scopes_data_offset + round_to(debug_info->data_size (), oopSize); diff --git a/hotspot/src/share/vm/code/nmethod.hpp b/hotspot/src/share/vm/code/nmethod.hpp index f910efbd224..05664fd97b4 100644 --- a/hotspot/src/share/vm/code/nmethod.hpp +++ b/hotspot/src/share/vm/code/nmethod.hpp @@ -154,6 +154,9 @@ class nmethod : public CodeBlob { // All deoptee's at a MethodHandle call site will resume execution // at this location described by this offset. int _deoptimize_mh_offset; + // Offset of the unwind handler if it exists + int _unwind_handler_offset; + #ifdef HAVE_DTRACE_H int _trap_offset; #endif // def HAVE_DTRACE_H @@ -341,6 +344,7 @@ class nmethod : public CodeBlob { address exception_begin () const { return header_begin() + _exception_offset ; } address deopt_handler_begin () const { return header_begin() + _deoptimize_offset ; } address deopt_mh_handler_begin() const { return header_begin() + _deoptimize_mh_offset ; } + address unwind_handler_begin () const { return _unwind_handler_offset != -1 ? (header_begin() + _unwind_handler_offset) : NULL; } address stub_begin () const { return header_begin() + _stub_offset ; } address stub_end () const { return header_begin() + _consts_offset ; } address consts_begin () const { return header_begin() + _consts_offset ; } diff --git a/hotspot/src/share/vm/runtime/sharedRuntime.cpp b/hotspot/src/share/vm/runtime/sharedRuntime.cpp index b2c5c43c1b3..06af4af32cd 100644 --- a/hotspot/src/share/vm/runtime/sharedRuntime.cpp +++ b/hotspot/src/share/vm/runtime/sharedRuntime.cpp @@ -473,6 +473,13 @@ address SharedRuntime::compute_compiled_exc_handler(nmethod* nm, address ret_pc, t = table.entry_for(catch_pco, -1, 0); } +#ifdef COMPILER1 + if (t == NULL && nm->is_compiled_by_c1()) { + assert(nm->unwind_handler_begin() != NULL, ""); + return nm->unwind_handler_begin(); + } +#endif + if (t == NULL) { tty->print_cr("MISSING EXCEPTION HANDLER for pc " INTPTR_FORMAT " and handler bci %d", ret_pc, handler_bci); tty->print_cr(" Exception:"); From 7afbc895a8268795ce2f9086af6abf9ce7f7aa89 Mon Sep 17 00:00:00 2001 From: Weijun Wang Date: Fri, 16 Apr 2010 10:06:07 +0800 Subject: [PATCH 52/91] 6937978: let keytool -gencert generate the chain Reviewed-by: mullan --- .../classes/sun/security/tools/KeyTool.java | 107 ++++++++++-------- .../sun/security/tools/keytool/selfissued.sh | 28 ++--- 2 files changed, 72 insertions(+), 63 deletions(-) diff --git a/jdk/src/share/classes/sun/security/tools/KeyTool.java b/jdk/src/share/classes/sun/security/tools/KeyTool.java index 3f6eca93218..bd03c696e0e 100644 --- a/jdk/src/share/classes/sun/security/tools/KeyTool.java +++ b/jdk/src/share/classes/sun/security/tools/KeyTool.java @@ -1211,6 +1211,14 @@ public final class KeyTool { X509CertImpl cert = new X509CertImpl(info); cert.sign(privateKey, sigAlgName); dumpCert(cert, out); + for (Certificate ca: keyStore.getCertificateChain(alias)) { + if (ca instanceof X509Certificate) { + X509Certificate xca = (X509Certificate)ca; + if (!isSelfSigned(xca)) { + dumpCert(xca, out); + } + } + } } /** @@ -2640,19 +2648,33 @@ public final class KeyTool { } /** - * Returns true if the given certificate is trusted, false otherwise. + * Locates a signer for a given certificate from a given keystore and + * returns the signer's certificate. + * @param cert the certificate whose signer is searched, not null + * @param ks the keystore to search with, not null + * @return cert itself if it's already inside ks, + * or a certificate inside ks who signs cert, + * or null otherwise. */ - private boolean isTrusted(Certificate cert) - throws Exception - { - if (keyStore.getCertificateAlias(cert) != null) { - return true; // found in own keystore + private static Certificate getTrustedSigner(Certificate cert, KeyStore ks) + throws Exception { + if (ks.getCertificateAlias(cert) != null) { + return cert; } - if (trustcacerts && (caks != null) && - (caks.getCertificateAlias(cert) != null)) { - return true; // found in CA keystore + for (Enumeration aliases = ks.aliases(); + aliases.hasMoreElements(); ) { + String name = aliases.nextElement(); + Certificate trustedCert = ks.getCertificate(name); + if (trustedCert != null) { + try { + cert.verify(trustedCert.getPublicKey()); + return trustedCert; + } catch (Exception e) { + // Not verified, skip to the next one + } + } } - return false; + return null; } /** @@ -2985,48 +3007,33 @@ public final class KeyTool { return replyCerts; } - // do we trust the (root) cert at the top? + // do we trust the cert at the top? Certificate topCert = replyCerts[replyCerts.length-1]; - if (!isTrusted(topCert)) { - boolean verified = false; - Certificate rootCert = null; - if (trustcacerts && (caks!= null)) { - for (Enumeration aliases = caks.aliases(); - aliases.hasMoreElements(); ) { - String name = aliases.nextElement(); - rootCert = caks.getCertificate(name); - if (rootCert != null) { - try { - topCert.verify(rootCert.getPublicKey()); - verified = true; - break; - } catch (Exception e) { - } - } - } + Certificate root = getTrustedSigner(topCert, keyStore); + if (root == null && trustcacerts && caks != null) { + root = getTrustedSigner(topCert, caks); + } + if (root == null) { + System.err.println(); + System.err.println + (rb.getString("Top-level certificate in reply:\n")); + printX509Cert((X509Certificate)topCert, System.out); + System.err.println(); + System.err.print(rb.getString("... is not trusted. ")); + String reply = getYesNoReply + (rb.getString("Install reply anyway? [no]: ")); + if ("NO".equals(reply)) { + return null; } - if (!verified) { - System.err.println(); - System.err.println - (rb.getString("Top-level certificate in reply:\n")); - printX509Cert((X509Certificate)topCert, System.out); - System.err.println(); - System.err.print(rb.getString("... is not trusted. ")); - String reply = getYesNoReply - (rb.getString("Install reply anyway? [no]: ")); - if ("NO".equals(reply)) { - return null; - } - } else { - if (!isSelfSigned((X509Certificate)topCert)) { - // append the (self-signed) root CA cert to the chain - Certificate[] tmpCerts = - new Certificate[replyCerts.length+1]; - System.arraycopy(replyCerts, 0, tmpCerts, 0, - replyCerts.length); - tmpCerts[tmpCerts.length-1] = rootCert; - replyCerts = tmpCerts; - } + } else { + if (root != topCert) { + // append the root CA cert to the chain + Certificate[] tmpCerts = + new Certificate[replyCerts.length+1]; + System.arraycopy(replyCerts, 0, tmpCerts, 0, + replyCerts.length); + tmpCerts[tmpCerts.length-1] = root; + replyCerts = tmpCerts; } } diff --git a/jdk/test/sun/security/tools/keytool/selfissued.sh b/jdk/test/sun/security/tools/keytool/selfissued.sh index e6e06c040b3..ec27a98a6d4 100644 --- a/jdk/test/sun/security/tools/keytool/selfissued.sh +++ b/jdk/test/sun/security/tools/keytool/selfissued.sh @@ -1,5 +1,5 @@ # -# Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. +# Copyright 2009-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 @@ -22,8 +22,8 @@ # # @test -# @bug 6825352 -# @summary support self-issued certificate in keytool +# @bug 6825352 6937978 +# @summary support self-issued certificate in keytool and let -gencert generate the chain # # @run shell selfissued.sh # @@ -50,20 +50,22 @@ KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit -keystor rm $KS $KT -alias ca -dname CN=CA -genkeypair -$KT -alias me -dname CN=CA -genkeypair +$KT -alias ca1 -dname CN=CA -genkeypair +$KT -alias ca2 -dname CN=CA -genkeypair $KT -alias e1 -dname CN=E1 -genkeypair -$KT -alias e2 -dname CN=E2 -genkeypair -# me signed by ca, self-issued -$KT -alias me -certreq | $KT -alias ca -gencert | $KT -alias me -importcert +# ca signs ca1, ca1 signs ca2, all self-issued +$KT -alias ca1 -certreq | $KT -alias ca -gencert -ext san=dns:ca1 \ + | $KT -alias ca1 -importcert +$KT -alias ca2 -certreq | $KT -alias ca1 -gencert -ext san=dns:ca2 \ + | $KT -alias ca2 -importcert -# Import e1 signed by me, should add me and ca -$KT -alias e1 -certreq | $KT -alias me -gencert | $KT -alias e1 -importcert +# Import e1 signed by ca2, should add ca2 and ca1, at least 3 certs in the chain +$KT -alias e1 -certreq | $KT -alias ca2 -gencert > e1.cert +$KT -alias ca1 -delete +$KT -alias ca2 -delete +cat e1.cert | $KT -alias e1 -importcert $KT -alias e1 -list -v | grep '\[3\]' || { echo Bad E1; exit 1; } -# Import (e2 signed by me,ca,me), should reorder to (e2,me,ca) -( $KT -alias e2 -certreq | $KT -alias me -gencert; $KT -exportcert -alias ca; $KT -exportcert -alias me ) | $KT -alias e2 -importcert -$KT -alias e2 -list -v | grep '\[3\]' || { echo Bad E2; exit 1; } - echo Good From 67e6e0207c51691baf68798dc57ca40399dd2437 Mon Sep 17 00:00:00 2001 From: Erik Trimble Date: Thu, 15 Apr 2010 19:08:18 -0700 Subject: [PATCH 53/91] 6944398: Bump the HS18 build number to 03 Update the HS18 build number to 03 Reviewed-by: jcoomes --- hotspot/make/hotspot_version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hotspot/make/hotspot_version b/hotspot/make/hotspot_version index 920a9d901a2..ddf2f38ffa9 100644 --- a/hotspot/make/hotspot_version +++ b/hotspot/make/hotspot_version @@ -35,7 +35,7 @@ HOTSPOT_VM_COPYRIGHT=Copyright 2010 HS_MAJOR_VER=18 HS_MINOR_VER=0 -HS_BUILD_NUMBER=02 +HS_BUILD_NUMBER=03 JDK_MAJOR_VER=1 JDK_MINOR_VER=7 From a61cccd54ba2e34cd4fe766521ec3faf1d80e078 Mon Sep 17 00:00:00 2001 From: Erik Trimble Date: Thu, 15 Apr 2010 19:09:48 -0700 Subject: [PATCH 54/91] Added tag hs18-b02 for changeset 0c79cc0b79fd --- hotspot/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/hotspot/.hgtags b/hotspot/.hgtags index 76dc8e725d3..953797e153b 100644 --- a/hotspot/.hgtags +++ b/hotspot/.hgtags @@ -87,3 +87,4 @@ bf823ef06b4f211e66988d76a2e2669be5c0820e jdk7-b86 07226e9eab8f74b37346b32715f829a2ef2c3188 hs18-b01 e7e7e36ccdb5d56edd47e5744351202d38f3b7ad jdk7-b87 4b60f23c42231f7ecd62ad1fcb6a9ca26fa57d1b jdk7-b88 +4b60f23c42231f7ecd62ad1fcb6a9ca26fa57d1b hs18-b02 From 592e8de4e14bc05ac2e93d0e690bc74c5bce2c3e Mon Sep 17 00:00:00 2001 From: Weijun Wang Date: Fri, 16 Apr 2010 10:13:23 +0800 Subject: [PATCH 55/91] 6939248: Jarsigner can't extract Extended Key Usage from Timestamp Reply correctly Reviewed-by: xuelei, mullan --- .../sun/security/tools/TimestampedSigner.java | 45 ++- .../tools/jarsigner/TimestampCheck.java | 294 ++++++++++++++++++ jdk/test/sun/security/tools/jarsigner/ts.sh | 91 ++++++ 3 files changed, 406 insertions(+), 24 deletions(-) create mode 100644 jdk/test/sun/security/tools/jarsigner/TimestampCheck.java create mode 100644 jdk/test/sun/security/tools/jarsigner/ts.sh diff --git a/jdk/src/share/classes/sun/security/tools/TimestampedSigner.java b/jdk/src/share/classes/sun/security/tools/TimestampedSigner.java index 549ed8ea210..a77f2878d1f 100644 --- a/jdk/src/share/classes/sun/security/tools/TimestampedSigner.java +++ b/jdk/src/share/classes/sun/security/tools/TimestampedSigner.java @@ -81,6 +81,11 @@ public final class TimestampedSigner extends ContentSigner { */ private static final String KP_TIMESTAMPING_OID = "1.3.6.1.5.5.7.3.8"; + /* + * Object identifier for extendedKeyUsage extension + */ + private static final String EXTENDED_KEY_USAGE_OID = "2.5.29.37"; + /* * Object identifier for the timestamping access descriptors. */ @@ -357,34 +362,26 @@ public final class TimestampedSigner extends ContentSigner { } // Examine the TSA's certificate (if present) - List keyPurposes = null; - X509Certificate[] certs = tsToken.getCertificates(); - if (certs != null && certs.length > 0) { - // Use certficate from the TSP reply - // Pick out the cert for the TS server, which is the end-entity - // one inside the chain. - for (X509Certificate cert: certs) { - boolean isSigner = false; - for (X509Certificate cert2: certs) { - if (cert != cert2) { - if (cert.getSubjectDN().equals(cert2.getIssuerDN())) { - isSigner = true; - break; - } - } + for (SignerInfo si: tsToken.getSignerInfos()) { + X509Certificate cert = si.getCertificate(tsToken); + if (cert == null) { + // Error, we've already set tsRequestCertificate = true + throw new CertificateException( + "Certificate not included in timestamp token"); + } else { + if (!cert.getCriticalExtensionOIDs().contains( + EXTENDED_KEY_USAGE_OID)) { + throw new CertificateException( + "Certificate is not valid for timestamping"); } - if (!isSigner) { - keyPurposes = cert.getExtendedKeyUsage(); - if (keyPurposes == null || - ! keyPurposes.contains(KP_TIMESTAMPING_OID)) { - throw new CertificateException( - "Certificate is not valid for timestamping"); - } - break; + List keyPurposes = cert.getExtendedKeyUsage(); + if (keyPurposes == null || + ! keyPurposes.contains(KP_TIMESTAMPING_OID)) { + throw new CertificateException( + "Certificate is not valid for timestamping"); } } } - return tsReply.getEncodedToken(); } } diff --git a/jdk/test/sun/security/tools/jarsigner/TimestampCheck.java b/jdk/test/sun/security/tools/jarsigner/TimestampCheck.java new file mode 100644 index 00000000000..18dec0dc726 --- /dev/null +++ b/jdk/test/sun/security/tools/jarsigner/TimestampCheck.java @@ -0,0 +1,294 @@ +/* + * Copyright 2003-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 + * 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. + */ + +import com.sun.net.httpserver.*; +import java.io.BufferedReader; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.math.BigInteger; +import java.net.InetSocketAddress; +import java.security.KeyStore; +import java.security.PrivateKey; +import java.security.Signature; +import java.security.cert.Certificate; +import java.security.cert.X509Certificate; +import java.util.Calendar; +import sun.security.pkcs.ContentInfo; +import sun.security.pkcs.PKCS7; +import sun.security.pkcs.SignerInfo; +import sun.security.util.DerOutputStream; +import sun.security.util.DerValue; +import sun.security.util.ObjectIdentifier; +import sun.security.x509.AlgorithmId; +import sun.security.x509.X500Name; + +public class TimestampCheck { + static final String TSKS = "tsks"; + static final String JAR = "old.jar"; + + static class Handler implements HttpHandler { + public void handle(HttpExchange t) throws IOException { + int len = 0; + for (String h: t.getRequestHeaders().keySet()) { + if (h.equalsIgnoreCase("Content-length")) { + len = Integer.valueOf(t.getRequestHeaders().get(h).get(0)); + } + } + byte[] input = new byte[len]; + t.getRequestBody().read(input); + + try { + int path = 0; + if (t.getRequestURI().getPath().length() > 1) { + path = Integer.parseInt( + t.getRequestURI().getPath().substring(1)); + } + byte[] output = sign(input, path); + Headers out = t.getResponseHeaders(); + out.set("Content-Type", "application/timestamp-reply"); + + t.sendResponseHeaders(200, output.length); + OutputStream os = t.getResponseBody(); + os.write(output); + } catch (Exception e) { + e.printStackTrace(); + t.sendResponseHeaders(500, 0); + } + t.close(); + } + + /** + * @param input The data to sign + * @param path different cases to simulate, impl on URL path + * 0: normal + * 1: Missing nonce + * 2: Different nonce + * 3: Bad digets octets in messageImprint + * 4: Different algorithmId in messageImprint + * 5: whole chain in cert set + * 6: extension is missing + * 7: extension is non-critical + * 8: extension does not have timestamping + * @returns the signed + */ + byte[] sign(byte[] input, int path) throws Exception { + // Read TSRequest + DerValue value = new DerValue(input); + System.err.println("\nIncoming Request\n==================="); + System.err.println("Version: " + value.data.getInteger()); + DerValue messageImprint = value.data.getDerValue(); + AlgorithmId aid = AlgorithmId.parse( + messageImprint.data.getDerValue()); + System.err.println("AlgorithmId: " + aid); + + BigInteger nonce = null; + while (value.data.available() > 0) { + DerValue v = value.data.getDerValue(); + if (v.tag == DerValue.tag_Integer) { + nonce = v.getBigInteger(); + System.err.println("nonce: " + nonce); + } else if (v.tag == DerValue.tag_Boolean) { + System.err.println("certReq: " + v.getBoolean()); + } + } + + // Write TSResponse + System.err.println("\nResponse\n==================="); + KeyStore ks = KeyStore.getInstance("JKS"); + ks.load(new FileInputStream(TSKS), "changeit".toCharArray()); + + String alias = "ts"; + if (path == 6) alias = "tsbad1"; + if (path == 7) alias = "tsbad2"; + if (path == 8) alias = "tsbad3"; + + DerOutputStream statusInfo = new DerOutputStream(); + statusInfo.putInteger(0); + + DerOutputStream token = new DerOutputStream(); + AlgorithmId[] algorithms = {aid}; + Certificate[] chain = ks.getCertificateChain(alias); + X509Certificate[] signerCertificateChain = null; + X509Certificate signer = (X509Certificate)chain[0]; + if (path == 5) { // Only case 5 uses full chain + signerCertificateChain = new X509Certificate[chain.length]; + for (int i=0; i A +rm old.jar +$JAR cvf old.jar A + +# ca is CA +# old is signer for code +# ts is signer for timestamp +# tsbad1 has no extendedKeyUsage +# tsbad2's extendedKeyUsage is non-critical +# tsbad3's extendedKeyUsage has no timestamping + +$KT -alias ca -genkeypair -ext bc -dname CN=CA +$KT -alias old -genkeypair -dname CN=old +$KT -alias ts -genkeypair -dname CN=ts +$KT -alias tsbad1 -genkeypair -dname CN=tsbad1 +$KT -alias tsbad2 -genkeypair -dname CN=tsbad2 +$KT -alias tsbad3 -genkeypair -dname CN=tsbad3 +$KT -alias ts -certreq | \ + $KT -alias ca -gencert -ext eku:critical=ts | \ + $KT -alias ts -importcert +$KT -alias tsbad1 -certreq | \ + $KT -alias ca -gencert | \ + $KT -alias tsbad1 -importcert +$KT -alias tsbad2 -certreq | \ + $KT -alias ca -gencert -ext eku=ts | \ + $KT -alias tsbad2 -importcert +$KT -alias tsbad3 -certreq | \ + $KT -alias ca -gencert -ext eku:critical=cs | \ + $KT -alias tsbad3 -importcert + +$JAVAC -d . ${TESTSRC}/TimestampCheck.java +$JAVA TimestampCheck + From 471633a591151cf8d65d4f95bab2020c8e9ff858 Mon Sep 17 00:00:00 2001 From: Masayoshi Okutsu Date: Fri, 16 Apr 2010 15:53:18 +0900 Subject: [PATCH 56/91] 6609675: [Fmt-Da] DateFormat.parse() on a timezone changes its calendar's timezone Reviewed-by: peytoia --- .../share/classes/java/text/DateFormat.java | 112 +++++++++++++----- .../classes/java/text/SimpleDateFormat.java | 14 +++ 2 files changed, 94 insertions(+), 32 deletions(-) diff --git a/jdk/src/share/classes/java/text/DateFormat.java b/jdk/src/share/classes/java/text/DateFormat.java index 51a43435638..5445678d8dc 100644 --- a/jdk/src/share/classes/java/text/DateFormat.java +++ b/jdk/src/share/classes/java/text/DateFormat.java @@ -53,20 +53,20 @@ import java.util.spi.LocaleServiceProvider; import sun.util.LocaleServiceProviderPool; /** - * DateFormat is an abstract class for date/time formatting subclasses which + * {@code DateFormat} is an abstract class for date/time formatting subclasses which * formats and parses dates or time in a language-independent manner. - * The date/time formatting subclass, such as SimpleDateFormat, allows for + * The date/time formatting subclass, such as {@link SimpleDateFormat}, allows for * formatting (i.e., date -> text), parsing (text -> date), and * normalization. The date is represented as a Date object or * as the milliseconds since January 1, 1970, 00:00:00 GMT. * - *

DateFormat provides many class methods for obtaining default date/time + *

{@code DateFormat} provides many class methods for obtaining default date/time * formatters based on the default or a given locale and a number of formatting - * styles. The formatting styles include FULL, LONG, MEDIUM, and SHORT. More + * styles. The formatting styles include {@link #FULL}, {@link #LONG}, {@link #MEDIUM}, and {@link #SHORT}. More * detail and examples of using these styles are provided in the method * descriptions. * - *

DateFormat helps you to format and parse dates for any locale. + *

{@code DateFormat} helps you to format and parse dates for any locale. * Your code can be completely independent of the locale conventions for * months, days of the week, or even the calendar format: lunar vs. solar. * @@ -86,7 +86,7 @@ import sun.util.LocaleServiceProviderPool; * } * *

To format a date for a different Locale, specify it in the - * call to getDateInstance(). + * call to {@link #getDateInstance(int, Locale) getDateInstance()}. *

  *  DateFormat df = DateFormat.getDateInstance(DateFormat.LONG, Locale.FRANCE);
  * 
@@ -94,30 +94,30 @@ import sun.util.LocaleServiceProviderPool; *
  *  myDate = df.parse(myString);
  * 
- *

Use getDateInstance to get the normal date format for that country. + *

Use {@code getDateInstance} to get the normal date format for that country. * There are other static factory methods available. - * Use getTimeInstance to get the time format for that country. - * Use getDateTimeInstance to get a date and time format. You can pass in + * Use {@code getTimeInstance} to get the time format for that country. + * Use {@code getDateTimeInstance} to get a date and time format. You can pass in * different options to these factory methods to control the length of the - * result; from SHORT to MEDIUM to LONG to FULL. The exact result depends + * result; from {@link #SHORT} to {@link #MEDIUM} to {@link #LONG} to {@link #FULL}. The exact result depends * on the locale, but generally: - *

  • SHORT is completely numeric, such as 12.13.52 or 3:30pm - *
  • MEDIUM is longer, such as Jan 12, 1952 - *
  • LONG is longer, such as January 12, 1952 or 3:30:32pm - *
  • FULL is pretty completely specified, such as - * Tuesday, April 12, 1952 AD or 3:30:42pm PST. + *
    • {@link #SHORT} is completely numeric, such as {@code 12.13.52} or {@code 3:30pm} + *
    • {@link #MEDIUM} is longer, such as {@code Jan 12, 1952} + *
    • {@link #LONG} is longer, such as {@code January 12, 1952} or {@code 3:30:32pm} + *
    • {@link #FULL} is pretty completely specified, such as + * {@code Tuesday, April 12, 1952 AD or 3:30:42pm PST}. *
    * *

    You can also set the time zone on the format if you wish. * If you want even more control over the format or parsing, * (or want to give your users more control), - * you can try casting the DateFormat you get from the factory methods - * to a SimpleDateFormat. This will work for the majority - * of countries; just remember to put it in a try block in case you + * you can try casting the {@code DateFormat} you get from the factory methods + * to a {@link SimpleDateFormat}. This will work for the majority + * of countries; just remember to put it in a {@code try} block in case you * encounter an unusual one. * *

    You can also use forms of the parse and format methods with - * ParsePosition and FieldPosition to + * {@link ParsePosition} and {@link FieldPosition} to * allow you to *

    • progressively parse through pieces of a string. *
    • align any particular field, or find out where it is for selection @@ -143,10 +143,13 @@ import sun.util.LocaleServiceProviderPool; public abstract class DateFormat extends Format { /** - * The calendar that DateFormat uses to produce the time field - * values needed to implement date and time formatting. Subclasses should - * initialize this to a calendar appropriate for the locale associated with - * this DateFormat. + * The {@link Calendar} instance used for calculating the date-time fields + * and the instant of time. This field is used for both formatting and + * parsing. + * + *

      Subclasses should initialize this field to a {@link Calendar} + * appropriate for the {@link Locale} associated with this + * DateFormat. * @serial */ protected Calendar calendar; @@ -358,15 +361,21 @@ public abstract class DateFormat extends Format { /** * Parse a date/time string according to the given parse position. For - * example, a time text "07/10/96 4:5 PM, PDT" will be parsed into a Date - * that is equivalent to Date(837039928046). + * example, a time text {@code "07/10/96 4:5 PM, PDT"} will be parsed into a {@code Date} + * that is equivalent to {@code Date(837039900000L)}. * *

      By default, parsing is lenient: If the input is not in the form used * by this object's format method but can still be parsed as a date, then * the parse succeeds. Clients may insist on strict adherence to the - * format by calling setLenient(false). + * format by calling {@link #setLenient(boolean) setLenient(false)}. * - * @see java.text.DateFormat#setLenient(boolean) + *

      This parsing operation uses the {@link #calendar} to produce + * a {@code Date}. As a result, the {@code calendar}'s date-time + * fields and the {@code TimeZone} value may have been + * overwritten, depending on subclass implementations. Any {@code + * TimeZone} value that has previously been set by a call to + * {@link #setTimeZone(java.util.TimeZone) setTimeZone} may need + * to be restored for further operations. * * @param source The date/time string to be parsed * @@ -374,7 +383,7 @@ public abstract class DateFormat extends Format { * output, the position at which parsing terminated, or the * start position if the parse failed. * - * @return A Date, or null if the input could not be parsed + * @return A {@code Date}, or {@code null} if the input could not be parsed */ public abstract Date parse(String source, ParsePosition pos); @@ -569,7 +578,12 @@ public abstract class DateFormat extends Format { /** * Set the calendar to be used by this date format. Initially, the default * calendar for the specified or default locale is used. - * @param newCalendar the new Calendar to be used by the date format + * + *

      Any {@link java.util.TimeZone TimeZone} and {@linkplain + * #isLenient() leniency} values that have previously been set are + * overwritten by {@code newCalendar}'s values. + * + * @param newCalendar the new {@code Calendar} to be used by the date format */ public void setCalendar(Calendar newCalendar) { @@ -578,6 +592,7 @@ public abstract class DateFormat extends Format { /** * Gets the calendar associated with this date/time formatter. + * * @return the calendar associated with this date/time formatter. */ public Calendar getCalendar() @@ -605,7 +620,18 @@ public abstract class DateFormat extends Format { } /** - * Sets the time zone for the calendar of this DateFormat object. + * Sets the time zone for the calendar of this {@code DateFormat} object. + * This method is equivalent to the following call. + *

      +     *  getCalendar().setTimeZone(zone)
      +     * 
      + * + *

      The {@code TimeZone} set by this method is overwritten by a + * {@link #setCalendar(java.util.Calendar) setCalendar} call. + * + *

      The {@code TimeZone} set by this method may be overwritten as + * a result of a call to the parse method. + * * @param zone the given new time zone. */ public void setTimeZone(TimeZone zone) @@ -615,6 +641,11 @@ public abstract class DateFormat extends Format { /** * Gets the time zone. + * This method is equivalent to the following call. + *

      +     *  getCalendar().getTimeZone()
      +     * 
      + * * @return the time zone associated with the calendar of DateFormat. */ public TimeZone getTimeZone() @@ -627,8 +658,17 @@ public abstract class DateFormat extends Format { * lenient parsing, the parser may use heuristics to interpret inputs that * do not precisely match this object's format. With strict parsing, * inputs must match this object's format. - * @param lenient when true, parsing is lenient - * @see java.util.Calendar#setLenient + * + *

      This method is equivalent to the following call. + *

      +     *  getCalendar().setLenient(lenient)
      +     * 
      + * + *

      This leniency value is overwritten by a call to {@link + * #setCalendar(java.util.Calendar) setCalendar()}. + * + * @param lenient when {@code true}, parsing is lenient + * @see java.util.Calendar#setLenient(boolean) */ public void setLenient(boolean lenient) { @@ -637,6 +677,14 @@ public abstract class DateFormat extends Format { /** * Tell whether date/time parsing is to be lenient. + * This method is equivalent to the following call. + *

      +     *  getCalendar().isLenient()
      +     * 
      + * + * @return {@code true} if the {@link #calendar} is lenient; + * {@code false} otherwise. + * @see java.util.Calendar#isLenient() */ public boolean isLenient() { diff --git a/jdk/src/share/classes/java/text/SimpleDateFormat.java b/jdk/src/share/classes/java/text/SimpleDateFormat.java index 1dfa42ea5f2..eacfbddfe6b 100644 --- a/jdk/src/share/classes/java/text/SimpleDateFormat.java +++ b/jdk/src/share/classes/java/text/SimpleDateFormat.java @@ -1235,6 +1235,20 @@ public class SimpleDateFormat extends DateFormat { * changed, the error index of pos is set to the index of * the character where the error occurred, and null is returned. * + *

      This parsing operation uses the {@link DateFormat#calendar + * calendar} to produce a {@code Date}. All of the {@code + * calendar}'s date-time fields are {@linkplain Calendar#clear() + * cleared} before parsing, and the {@code calendar}'s default + * values of the date-time fields are used for any missing + * date-time information. For example, the year value of the + * parsed {@code Date} is 1970 with {@link GregorianCalendar} if + * no year value is given from the parsing operation. The {@code + * TimeZone} value may be overwritten, depending on the given + * pattern and the time zone value in {@code text}. Any {@code + * TimeZone} value that has previously been set by a call to + * {@link #setTimeZone(java.util.TimeZone) setTimeZone} may need + * to be restored for further operations. + * * @param text A String, part of which should be parsed. * @param pos A ParsePosition object with index and error * index information as described above. From 41515b3a35f4ef7ffb2c60f4818c4930b010e041 Mon Sep 17 00:00:00 2001 From: Andrew John Hughes Date: Fri, 16 Apr 2010 09:54:13 +0100 Subject: [PATCH 57/91] 6944361: Missing CKR_ values in PKCS11Exception Allow native NSS errors to be observed and correctly reported Reviewed-by: wetmore, valeriep --- .../classes/sun/security/pkcs11/wrapper/PKCS11Exception.java | 4 ++++ jdk/src/share/classes/sun/security/x509/X509Key.java | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/jdk/src/share/classes/sun/security/pkcs11/wrapper/PKCS11Exception.java b/jdk/src/share/classes/sun/security/pkcs11/wrapper/PKCS11Exception.java index b66e23a73de..4d00cf88ec5 100644 --- a/jdk/src/share/classes/sun/security/pkcs11/wrapper/PKCS11Exception.java +++ b/jdk/src/share/classes/sun/security/pkcs11/wrapper/PKCS11Exception.java @@ -148,6 +148,7 @@ public class PKCS11Exception extends Exception { 0x00000115, 0x00000120, 0x00000121, + 0x00000130, 0x00000150, 0x00000160, 0x00000170, @@ -156,6 +157,7 @@ public class PKCS11Exception extends Exception { 0x00000191, 0x000001A0, 0x000001A1, + 0x00000200, 0x80000000, }; String[] errorMessages = new String[] { @@ -234,6 +236,7 @@ public class PKCS11Exception extends Exception { "CKR_WRAPPING_KEY_TYPE_INCONSISTENT", "CKR_RANDOM_SEED_NOT_SUPPORTED", "CKR_RANDOM_NO_RNG", + "CKR_DOMAIN_PARAMS_INVALID", "CKR_BUFFER_TOO_SMALL", "CKR_SAVED_STATE_INVALID", "CKR_INFORMATION_SENSITIVE", @@ -242,6 +245,7 @@ public class PKCS11Exception extends Exception { "CKR_CRYPTOKI_ALREADY_INITIALIZED", "CKR_MUTEX_BAD", "CKR_MUTEX_NOT_LOCKED", + "CKR_FUNCTION_REJECTED", "CKR_VENDOR_DEFINED", }; errorMap = new HashMap(); diff --git a/jdk/src/share/classes/sun/security/x509/X509Key.java b/jdk/src/share/classes/sun/security/x509/X509Key.java index 04855b19b57..3db634e5f03 100644 --- a/jdk/src/share/classes/sun/security/x509/X509Key.java +++ b/jdk/src/share/classes/sun/security/x509/X509Key.java @@ -171,7 +171,7 @@ public class X509Key implements PublicKey { in.data.getUnalignedBitString()); } catch (InvalidKeyException e) { - throw new IOException("subject key, " + e.getMessage()); + throw new IOException("subject key, " + e.getMessage(), e); } if (in.data.available() != 0) @@ -224,7 +224,7 @@ public class X509Key implements PublicKey { } catch (NoSuchAlgorithmException e) { // Return generic X509Key with opaque key data (see below) } catch (InvalidKeySpecException e) { - throw new InvalidKeyException(e.getMessage()); + throw new InvalidKeyException(e.getMessage(), e); } /* From 3157c37cf5fd78800f9495ba5b6f7fc99bb9734a Mon Sep 17 00:00:00 2001 From: Pavel Porvatov Date: Fri, 16 Apr 2010 13:05:14 +0400 Subject: [PATCH 58/91] 6922179: SynthTextPaneUI.installUI() doesn't set component to opaque as specified Reviewed-by: alexp --- .../share/classes/javax/swing/plaf/basic/BasicTextUI.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextUI.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextUI.java index 7d564eeccb5..8d029110362 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicTextUI.java @@ -756,9 +756,8 @@ public abstract class BasicTextUI extends TextUI implements ViewFactory { * things. *

        *
      1. - * Sets the associated component to opaque (can be changed - * easily by a subclass or on JTextComponent directly), - * which is the most common case. This will cause the + * Sets the associated component to opaque if the opaque property + * has not already been set by the client program. This will cause the * component's background color to be painted. *
      2. * Installs the default caret and highlighter into the From 193be0b9eb26574f30656552977bd8ade5420cb6 Mon Sep 17 00:00:00 2001 From: Gary Benson Date: Fri, 16 Apr 2010 05:05:53 -0700 Subject: [PATCH 59/91] 6944473: 6941224 misses new files Two new files are missing in the push for 6941224. Reviewed-by: twisti --- hotspot/src/cpu/zero/vm/stack_zero.cpp | 73 +++++++++++++++++++ hotspot/src/cpu/zero/vm/stack_zero.inline.hpp | 43 +++++++++++ 2 files changed, 116 insertions(+) create mode 100644 hotspot/src/cpu/zero/vm/stack_zero.cpp create mode 100644 hotspot/src/cpu/zero/vm/stack_zero.inline.hpp diff --git a/hotspot/src/cpu/zero/vm/stack_zero.cpp b/hotspot/src/cpu/zero/vm/stack_zero.cpp new file mode 100644 index 00000000000..f9c50a6c2fd --- /dev/null +++ b/hotspot/src/cpu/zero/vm/stack_zero.cpp @@ -0,0 +1,73 @@ +/* + * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2010 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. + * + * 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. + * + */ + +#include "incls/_precompiled.incl" +#include "incls/_stack_zero.cpp.incl" + +void ZeroStack::handle_overflow(TRAPS) { + JavaThread *thread = (JavaThread *) THREAD; + + // Set up the frame anchor if it isn't already + bool has_last_Java_frame = thread->has_last_Java_frame(); + if (!has_last_Java_frame) { + ZeroFrame *frame = thread->top_zero_frame(); + while (frame) { + if (frame->is_shark_frame()) + break; + + if (frame->is_interpreter_frame()) { + interpreterState istate = + frame->as_interpreter_frame()->interpreter_state(); + if (istate->self_link() == istate) + break; + } + + frame = frame->next(); + } + + if (frame == NULL) + fatal("unrecoverable stack overflow"); + + thread->set_last_Java_frame(frame); + } + + // Throw the exception + switch (thread->thread_state()) { + case _thread_in_Java: + InterpreterRuntime::throw_StackOverflowError(thread); + break; + + case _thread_in_vm: + Exceptions::throw_stack_overflow_exception(thread, __FILE__, __LINE__); + break; + + default: + ShouldNotReachHere(); + } + + // Reset the frame anchor if necessary + if (!has_last_Java_frame) + thread->reset_last_Java_frame(); +} diff --git a/hotspot/src/cpu/zero/vm/stack_zero.inline.hpp b/hotspot/src/cpu/zero/vm/stack_zero.inline.hpp new file mode 100644 index 00000000000..ffb247c6039 --- /dev/null +++ b/hotspot/src/cpu/zero/vm/stack_zero.inline.hpp @@ -0,0 +1,43 @@ +/* + * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2010 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. + * + * 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. + * + */ + +// This function should match SharkStack::CreateStackOverflowCheck +inline void ZeroStack::overflow_check(int required_words, TRAPS) { + JavaThread *thread = (JavaThread *) THREAD; + + // Check the Zero stack + if (required_words > available_words()) { + handle_overflow(THREAD); + return; + } + + // Check the ABI stack + address stack_top = thread->stack_base() - thread->stack_size(); + int free_stack = ((address) &stack_top) - stack_top; + if (free_stack < shadow_pages_size()) { + handle_overflow(THREAD); + return; + } +} From 99cdb36ecab283429090b0ec96bac6b1f1e0249e Mon Sep 17 00:00:00 2001 From: Andrey Petrusenko Date: Fri, 16 Apr 2010 08:48:16 -0700 Subject: [PATCH 60/91] 6942253: G1: replace G1ParallelGCAllocBufferSize with YoungPLABSize and OldPLABSize Replaces the G1-specific parameter with the existing ones that are used by the other GCs (YoungPLABSize and OldPLABSize) Reviewed-by: tonyp, johnc --- .../gc_implementation/g1/g1CollectedHeap.cpp | 24 ++++++++ .../gc_implementation/g1/g1CollectedHeap.hpp | 58 +++++++++++-------- .../g1/g1CollectorPolicy.cpp | 9 +++ .../vm/gc_implementation/g1/g1_globals.hpp | 3 - 4 files changed, 68 insertions(+), 26 deletions(-) diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp index c1baa6ee822..6857d8fda97 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp @@ -2946,6 +2946,25 @@ G1CollectedHeap::do_collection_pause_at_safepoint() { } } +size_t G1CollectedHeap::desired_plab_sz(GCAllocPurpose purpose) +{ + size_t gclab_word_size; + switch (purpose) { + case GCAllocForSurvived: + gclab_word_size = YoungPLABSize; + break; + case GCAllocForTenured: + gclab_word_size = OldPLABSize; + break; + default: + assert(false, "unknown GCAllocPurpose"); + gclab_word_size = OldPLABSize; + break; + } + return gclab_word_size; +} + + void G1CollectedHeap::set_gc_alloc_region(int purpose, HeapRegion* r) { assert(purpose >= 0 && purpose < GCAllocPurposeCount, "invalid purpose"); // make sure we don't call set_gc_alloc_region() multiple times on @@ -3680,6 +3699,8 @@ G1ParScanThreadState::G1ParScanThreadState(G1CollectedHeap* g1h, int queue_num) _g1_rem(g1h->g1_rem_set()), _hash_seed(17), _queue_num(queue_num), _term_attempts(0), + _surviving_alloc_buffer(g1h->desired_plab_sz(GCAllocForSurvived)), + _tenured_alloc_buffer(g1h->desired_plab_sz(GCAllocForTenured)), _age_table(false), #if G1_DETAILED_STATS _pushes(0), _pops(0), _steals(0), @@ -3706,6 +3727,9 @@ G1ParScanThreadState::G1ParScanThreadState(G1CollectedHeap* g1h, int queue_num) _overflowed_refs = new OverflowQueue(10); + _alloc_buffers[GCAllocForSurvived] = &_surviving_alloc_buffer; + _alloc_buffers[GCAllocForTenured] = &_tenured_alloc_buffer; + _start = os::elapsedTime(); } diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp index 54715bd7b92..478e6588093 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp @@ -232,6 +232,9 @@ private: // current collection. HeapRegion* _gc_alloc_region_list; + // Determines PLAB size for a particular allocation purpose. + static size_t desired_plab_sz(GCAllocPurpose purpose); + // When called by par thread, require par_alloc_during_gc_lock() to be held. void push_gc_alloc_region(HeapRegion* hr); @@ -1367,12 +1370,18 @@ private: return BitsPerWord << shifter(); } - static size_t gclab_word_size() { - return G1ParallelGCAllocBufferSize / HeapWordSize; + size_t gclab_word_size() const { + return _gclab_word_size; } - static size_t bitmap_size_in_bits() { - size_t bits_in_bitmap = gclab_word_size() >> shifter(); + // Calculates actual GCLab size in words + size_t gclab_real_word_size() const { + return bitmap_size_in_bits(pointer_delta(_real_end_word, _start_word)) + / BitsPerWord; + } + + static size_t bitmap_size_in_bits(size_t gclab_word_size) { + size_t bits_in_bitmap = gclab_word_size >> shifter(); // We are going to ensure that the beginning of a word in this // bitmap also corresponds to the beginning of a word in the // global marking bitmap. To handle the case where a GCLab @@ -1382,13 +1391,13 @@ private: return bits_in_bitmap + BitsPerWord - 1; } public: - GCLabBitMap(HeapWord* heap_start) - : BitMap(bitmap_size_in_bits()), + GCLabBitMap(HeapWord* heap_start, size_t gclab_word_size) + : BitMap(bitmap_size_in_bits(gclab_word_size)), _cm(G1CollectedHeap::heap()->concurrent_mark()), _shifter(shifter()), _bitmap_word_covers_words(bitmap_word_covers_words()), _heap_start(heap_start), - _gclab_word_size(gclab_word_size()), + _gclab_word_size(gclab_word_size), _real_start_word(NULL), _real_end_word(NULL), _start_word(NULL) @@ -1483,7 +1492,7 @@ public: mark_bitmap->mostly_disjoint_range_union(this, 0, // always start from the start of the bitmap _start_word, - size_in_words()); + gclab_real_word_size()); _cm->grayRegionIfNecessary(MemRegion(_real_start_word, _real_end_word)); #ifndef PRODUCT @@ -1495,9 +1504,10 @@ public: } } - static size_t bitmap_size_in_words() { - return (bitmap_size_in_bits() + BitsPerWord - 1) / BitsPerWord; + size_t bitmap_size_in_words() const { + return (bitmap_size_in_bits(gclab_word_size()) + BitsPerWord - 1) / BitsPerWord; } + }; class G1ParGCAllocBuffer: public ParGCAllocBuffer { @@ -1507,10 +1517,10 @@ private: GCLabBitMap _bitmap; public: - G1ParGCAllocBuffer() : - ParGCAllocBuffer(G1ParallelGCAllocBufferSize / HeapWordSize), + G1ParGCAllocBuffer(size_t gclab_word_size) : + ParGCAllocBuffer(gclab_word_size), _during_marking(G1CollectedHeap::heap()->mark_in_progress()), - _bitmap(G1CollectedHeap::heap()->reserved_region().start()), + _bitmap(G1CollectedHeap::heap()->reserved_region().start(), gclab_word_size), _retired(false) { } @@ -1549,8 +1559,10 @@ protected: typedef GrowableArray OverflowQueue; OverflowQueue* _overflowed_refs; - G1ParGCAllocBuffer _alloc_buffers[GCAllocPurposeCount]; - ageTable _age_table; + G1ParGCAllocBuffer _surviving_alloc_buffer; + G1ParGCAllocBuffer _tenured_alloc_buffer; + G1ParGCAllocBuffer* _alloc_buffers[GCAllocPurposeCount]; + ageTable _age_table; size_t _alloc_buffer_waste; size_t _undo_waste; @@ -1619,7 +1631,7 @@ public: ageTable* age_table() { return &_age_table; } G1ParGCAllocBuffer* alloc_buffer(GCAllocPurpose purpose) { - return &_alloc_buffers[purpose]; + return _alloc_buffers[purpose]; } size_t alloc_buffer_waste() { return _alloc_buffer_waste; } @@ -1684,15 +1696,15 @@ public: HeapWord* allocate_slow(GCAllocPurpose purpose, size_t word_sz) { HeapWord* obj = NULL; - if (word_sz * 100 < - (size_t)(G1ParallelGCAllocBufferSize / HeapWordSize) * - ParallelGCBufferWastePct) { + size_t gclab_word_size = _g1h->desired_plab_sz(purpose); + if (word_sz * 100 < gclab_word_size * ParallelGCBufferWastePct) { G1ParGCAllocBuffer* alloc_buf = alloc_buffer(purpose); + assert(gclab_word_size == alloc_buf->word_sz(), + "dynamic resizing is not supported"); add_to_alloc_buffer_waste(alloc_buf->words_remaining()); alloc_buf->retire(false, false); - HeapWord* buf = - _g1h->par_allocate_during_gc(purpose, G1ParallelGCAllocBufferSize / HeapWordSize); + HeapWord* buf = _g1h->par_allocate_during_gc(purpose, gclab_word_size); if (buf == NULL) return NULL; // Let caller handle allocation failure. // Otherwise. alloc_buf->set_buf(buf); @@ -1786,9 +1798,9 @@ public: void retire_alloc_buffers() { for (int ap = 0; ap < GCAllocPurposeCount; ++ap) { - size_t waste = _alloc_buffers[ap].words_remaining(); + size_t waste = _alloc_buffers[ap]->words_remaining(); add_to_alloc_buffer_waste(waste); - _alloc_buffers[ap].retire(true, false); + _alloc_buffers[ap]->retire(true, false); } } diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp index 19e22d78b73..d88c2fc624e 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp @@ -209,6 +209,15 @@ G1CollectorPolicy::G1CollectorPolicy() : HeapRegion::setup_heap_region_size(Arguments::min_heap_size()); HeapRegionRemSet::setup_remset_size(); + // Verify PLAB sizes + const uint region_size = HeapRegion::GrainWords; + if (YoungPLABSize > region_size || OldPLABSize > region_size) { + char buffer[128]; + jio_snprintf(buffer, sizeof(buffer), "%sPLABSize should be at most %u", + OldPLABSize > region_size ? "Old" : "Young", region_size); + vm_exit_during_initialization(buffer); + } + _recent_prev_end_times_for_all_gcs_sec->add(os::elapsedTime()); _prev_collection_pause_end_ms = os::elapsedTime() * 1000.0; diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp index fca2f43c883..7e74f68d4d2 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp @@ -28,9 +28,6 @@ #define G1_FLAGS(develop, develop_pd, product, product_pd, diagnostic, experimental, notproduct, manageable, product_rw) \ \ - product(intx, G1ParallelGCAllocBufferSize, 8*K, \ - "Size of parallel G1 allocation buffers in to-space.") \ - \ product(intx, G1ConfidencePercent, 50, \ "Confidence level for MMU/pause predictions") \ \ From d132f8e1c6208e4f80c42bd2edbff797bfe5a94e Mon Sep 17 00:00:00 2001 From: Kevin Walls Date: Fri, 16 Apr 2010 17:36:37 +0100 Subject: [PATCH 61/91] 6897143: Stress test crashes during HeapInspection using ParallelGC Ensure_parsability() must be called even if GC_locker prevents GC. Reviewed-by: ysr, chrisphi --- .../shared/vmGCOperations.cpp | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.cpp b/hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.cpp index c230275275a..17d18db32da 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.cpp @@ -115,11 +115,25 @@ bool VM_GC_HeapInspection::skip_operation() const { void VM_GC_HeapInspection::doit() { HandleMark hm; CollectedHeap* ch = Universe::heap(); + ch->ensure_parsability(false); // must happen, even if collection does + // not happen (e.g. due to GC_locker) if (_full_gc) { - ch->collect_as_vm_thread(GCCause::_heap_inspection); - } else { - // make the heap parsable (no need to retire TLABs) - ch->ensure_parsability(false); + // The collection attempt below would be skipped anyway if + // the gc locker is held. The following dump may then be a tad + // misleading to someone expecting only live objects to show + // up in the dump (see CR 6944195). Just issue a suitable warning + // in that case and do not attempt to do a collection. + // The latter is a subtle point, because even a failed attempt + // to GC will, in fact, induce one in the future, which we + // probably want to avoid in this case because the GC that we may + // be about to attempt holds value for us only + // if it happens now and not if it happens in the eventual + // future. + if (GC_locker::is_active()) { + warning("GC locker is held; pre-dump GC was skipped"); + } else { + ch->collect_as_vm_thread(GCCause::_heap_inspection); + } } HeapInspection::heap_inspection(_out, _need_prologue /* need_prologue */); } From 5e6b41847279abc61d7386df15d9c8957d2a2718 Mon Sep 17 00:00:00 2001 From: Gary Benson Date: Mon, 19 Apr 2010 02:13:06 -0700 Subject: [PATCH 62/91] 6944503: Improved Zero crash dump With Zero on a GC crash the stack was dumped differently to other crashes. Reviewed-by: twisti --- hotspot/src/share/vm/utilities/vmError.cpp | 99 +++++++++++----------- hotspot/src/share/vm/utilities/vmError.hpp | 6 +- 2 files changed, 53 insertions(+), 52 deletions(-) diff --git a/hotspot/src/share/vm/utilities/vmError.cpp b/hotspot/src/share/vm/utilities/vmError.cpp index 81ab6830204..a9013bace94 100644 --- a/hotspot/src/share/vm/utilities/vmError.cpp +++ b/hotspot/src/share/vm/utilities/vmError.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -212,6 +212,51 @@ char* VMError::error_string(char* buf, int buflen) { return buf; } +void VMError::print_stack_trace(outputStream* st, JavaThread* jt, + char* buf, int buflen, bool verbose) { +#ifdef ZERO + if (jt->zero_stack()->sp() && jt->top_zero_frame()) { + // StackFrameStream uses the frame anchor, which may not have + // been set up. This can be done at any time in Zero, however, + // so if it hasn't been set up then we just set it up now and + // clear it again when we're done. + bool has_last_Java_frame = jt->has_last_Java_frame(); + if (!has_last_Java_frame) + jt->set_last_Java_frame(); + st->print("Java frames:"); + + // If the top frame is a Shark frame and the frame anchor isn't + // set up then it's possible that the information in the frame + // is garbage: it could be from a previous decache, or it could + // simply have never been written. So we print a warning... + StackFrameStream sfs(jt); + if (!has_last_Java_frame && !sfs.is_done()) { + if (sfs.current()->zeroframe()->is_shark_frame()) { + st->print(" (TOP FRAME MAY BE JUNK)"); + } + } + st->cr(); + + // Print the frames + for(int i = 0; !sfs.is_done(); sfs.next(), i++) { + sfs.current()->zero_print_on_error(i, st, buf, buflen); + st->cr(); + } + + // Reset the frame anchor if necessary + if (!has_last_Java_frame) + jt->reset_last_Java_frame(); + } +#else + if (jt->has_last_Java_frame()) { + st->print_cr("Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)"); + for(StackFrameStream sfs(jt); !sfs.is_done(); sfs.next()) { + sfs.current()->print_on_error(st, buf, buflen, verbose); + st->cr(); + } + } +#endif // ZERO +} // This is the main function to report a fatal error. Only one thread can // call this function, so we don't need to worry about MT-safety. But it's @@ -457,49 +502,7 @@ void VMError::report(outputStream* st) { STEP(130, "(printing Java stack)" ) if (_verbose && _thread && _thread->is_Java_thread()) { - JavaThread* jt = (JavaThread*)_thread; -#ifdef ZERO - if (jt->zero_stack()->sp() && jt->top_zero_frame()) { - // StackFrameStream uses the frame anchor, which may not have - // been set up. This can be done at any time in Zero, however, - // so if it hasn't been set up then we just set it up now and - // clear it again when we're done. - bool has_last_Java_frame = jt->has_last_Java_frame(); - if (!has_last_Java_frame) - jt->set_last_Java_frame(); - st->print("Java frames:"); - - // If the top frame is a Shark frame and the frame anchor isn't - // set up then it's possible that the information in the frame - // is garbage: it could be from a previous decache, or it could - // simply have never been written. So we print a warning... - StackFrameStream sfs(jt); - if (!has_last_Java_frame && !sfs.is_done()) { - if (sfs.current()->zeroframe()->is_shark_frame()) { - st->print(" (TOP FRAME MAY BE JUNK)"); - } - } - st->cr(); - - // Print the frames - for(int i = 0; !sfs.is_done(); sfs.next(), i++) { - sfs.current()->zero_print_on_error(i, st, buf, sizeof(buf)); - st->cr(); - } - - // Reset the frame anchor if necessary - if (!has_last_Java_frame) - jt->reset_last_Java_frame(); - } -#else - if (jt->has_last_Java_frame()) { - st->print_cr("Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)"); - for(StackFrameStream sfs(jt); !sfs.is_done(); sfs.next()) { - sfs.current()->print_on_error(st, buf, sizeof(buf)); - st->cr(); - } - } -#endif // ZERO + print_stack_trace(st, (JavaThread*)_thread, buf, sizeof(buf)); } STEP(135, "(printing target Java thread stack)" ) @@ -509,13 +512,7 @@ void VMError::report(outputStream* st) { JavaThread* jt = ((NamedThread *)_thread)->processed_thread(); if (jt != NULL) { st->print_cr("JavaThread " PTR_FORMAT " (nid = " UINTX_FORMAT ") was being processed", jt, jt->osthread()->thread_id()); - if (jt->has_last_Java_frame()) { - st->print_cr("Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)"); - for(StackFrameStream sfs(jt); !sfs.is_done(); sfs.next()) { - sfs.current()->print_on_error(st, buf, sizeof(buf), true); - st->cr(); - } - } + print_stack_trace(st, jt, buf, sizeof(buf), true); } } diff --git a/hotspot/src/share/vm/utilities/vmError.hpp b/hotspot/src/share/vm/utilities/vmError.hpp index 4a8cc23523d..e3845b57386 100644 --- a/hotspot/src/share/vm/utilities/vmError.hpp +++ b/hotspot/src/share/vm/utilities/vmError.hpp @@ -1,5 +1,5 @@ /* - * Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -70,6 +70,10 @@ class VMError : public StackObj { // generate an error report void report(outputStream* st); + // generate a stack trace + static void print_stack_trace(outputStream* st, JavaThread* jt, + char* buf, int buflen, bool verbose = false); + // accessor const char* message() { return _message; } From 4d2c11649f535beac9c37bc17432a4b5edf559e3 Mon Sep 17 00:00:00 2001 From: Naoto Sato Date: Mon, 19 Apr 2010 14:48:46 -0700 Subject: [PATCH 63/91] 6943941: Rebranding issues with some tests in jdk/test/java/util Reviewed-by: ohair --- jdk/test/java/util/Locale/Bug4175998Test.java | 10 ---------- jdk/test/java/util/ResourceBundle/Bug4083270Test.java | 10 ---------- jdk/test/java/util/ResourceBundle/Bug4165815Test.java | 10 ---------- jdk/test/java/util/ResourceBundle/Bug4168625Class.java | 10 ---------- .../java/util/ResourceBundle/Bug4168625Getter.java | 10 ---------- .../java/util/ResourceBundle/Bug4168625Resource.java | 10 ---------- .../java/util/ResourceBundle/Bug4168625Resource2.java | 10 ---------- .../util/ResourceBundle/Bug4168625Resource2_en_US.java | 10 ---------- .../java/util/ResourceBundle/Bug4168625Resource3.java | 10 ---------- .../util/ResourceBundle/Bug4168625Resource3_en.java | 10 ---------- .../util/ResourceBundle/Bug4168625Resource3_en_CA.java | 10 ---------- .../util/ResourceBundle/Bug4168625Resource3_en_IE.java | 10 ---------- .../util/ResourceBundle/Bug4168625Resource3_en_US.java | 10 ---------- jdk/test/java/util/ResourceBundle/Bug4177489Test.java | 10 ---------- .../java/util/ResourceBundle/Bug4177489_Resource.java | 10 ---------- .../util/ResourceBundle/Bug4177489_Resource_jf.java | 10 ---------- 16 files changed, 160 deletions(-) diff --git a/jdk/test/java/util/Locale/Bug4175998Test.java b/jdk/test/java/util/Locale/Bug4175998Test.java index 37ebee4860e..329a3bfa733 100644 --- a/jdk/test/java/util/Locale/Bug4175998Test.java +++ b/jdk/test/java/util/Locale/Bug4175998Test.java @@ -32,16 +32,6 @@ * * (C) Copyright IBM Corp. 1998 - All Rights Reserved * - * Portions Copyright 2007 by Sun Microsystems, Inc., - * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A. - * All rights reserved. - * - * This software is the confidential and proprietary information - * of Sun Microsystems, Inc. ("Confidential Information"). You - * shall not disclose such Confidential Information and shall use - * it only in accordance with the terms of the license agreement - * you entered into with Sun. - * * The original version of this source code and documentation is * copyrighted and owned by IBM. These materials are provided * under terms of a License Agreement between IBM and Sun. diff --git a/jdk/test/java/util/ResourceBundle/Bug4083270Test.java b/jdk/test/java/util/ResourceBundle/Bug4083270Test.java index e6a7337d799..be5e29a44e2 100644 --- a/jdk/test/java/util/ResourceBundle/Bug4083270Test.java +++ b/jdk/test/java/util/ResourceBundle/Bug4083270Test.java @@ -31,16 +31,6 @@ * * (C) Copyright IBM Corp. 1999 - All Rights Reserved * - * Portions Copyright 2007 by Sun Microsystems, Inc., - * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A. - * All rights reserved. - * - * This software is the confidential and proprietary information - * of Sun Microsystems, Inc. ("Confidential Information"). You - * shall not disclose such Confidential Information and shall use - * it only in accordance with the terms of the license agreement - * you entered into with Sun. - * * The original version of this source code and documentation is * copyrighted and owned by IBM. These materials are provided * under terms of a License Agreement between IBM and Sun. diff --git a/jdk/test/java/util/ResourceBundle/Bug4165815Test.java b/jdk/test/java/util/ResourceBundle/Bug4165815Test.java index ec21bdab361..a6add0df273 100644 --- a/jdk/test/java/util/ResourceBundle/Bug4165815Test.java +++ b/jdk/test/java/util/ResourceBundle/Bug4165815Test.java @@ -34,16 +34,6 @@ * * (C) Copyright IBM Corp. 1999 - All Rights Reserved * - * Portions Copyright 2007 by Sun Microsystems, Inc., - * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A. - * All rights reserved. - * - * This software is the confidential and proprietary information - * of Sun Microsystems, Inc. ("Confidential Information"). You - * shall not disclose such Confidential Information and shall use - * it only in accordance with the terms of the license agreement - * you entered into with Sun. - * * The original version of this source code and documentation is * copyrighted and owned by IBM. These materials are provided * under terms of a License Agreement between IBM and Sun. diff --git a/jdk/test/java/util/ResourceBundle/Bug4168625Class.java b/jdk/test/java/util/ResourceBundle/Bug4168625Class.java index dcb8996117f..5484c66f5e8 100644 --- a/jdk/test/java/util/ResourceBundle/Bug4168625Class.java +++ b/jdk/test/java/util/ResourceBundle/Bug4168625Class.java @@ -25,16 +25,6 @@ * * (C) Copyright IBM Corp. 1999 - All Rights Reserved * - * Portions Copyright 2007 by Sun Microsystems, Inc., - * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A. - * All rights reserved. - * - * This software is the confidential and proprietary information - * of Sun Microsystems, Inc. ("Confidential Information"). You - * shall not disclose such Confidential Information and shall use - * it only in accordance with the terms of the license agreement - * you entered into with Sun. - * * The original version of this source code and documentation is * copyrighted and owned by IBM. These materials are provided * under terms of a License Agreement between IBM and Sun. diff --git a/jdk/test/java/util/ResourceBundle/Bug4168625Getter.java b/jdk/test/java/util/ResourceBundle/Bug4168625Getter.java index 77ddae197d6..4c16445c197 100644 --- a/jdk/test/java/util/ResourceBundle/Bug4168625Getter.java +++ b/jdk/test/java/util/ResourceBundle/Bug4168625Getter.java @@ -25,16 +25,6 @@ * * (C) Copyright IBM Corp. 1999 - All Rights Reserved * - * Portions Copyright 2007 by Sun Microsystems, Inc., - * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A. - * All rights reserved. - * - * This software is the confidential and proprietary information - * of Sun Microsystems, Inc. ("Confidential Information"). You - * shall not disclose such Confidential Information and shall use - * it only in accordance with the terms of the license agreement - * you entered into with Sun. - * * The original version of this source code and documentation is * copyrighted and owned by IBM. These materials are provided * under terms of a License Agreement between IBM and Sun. diff --git a/jdk/test/java/util/ResourceBundle/Bug4168625Resource.java b/jdk/test/java/util/ResourceBundle/Bug4168625Resource.java index a035e6c98ce..0c367f1b0ab 100644 --- a/jdk/test/java/util/ResourceBundle/Bug4168625Resource.java +++ b/jdk/test/java/util/ResourceBundle/Bug4168625Resource.java @@ -25,16 +25,6 @@ * * (C) Copyright IBM Corp. 1999 - All Rights Reserved * - * Portions Copyright 2007 by Sun Microsystems, Inc., - * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A. - * All rights reserved. - * - * This software is the confidential and proprietary information - * of Sun Microsystems, Inc. ("Confidential Information"). You - * shall not disclose such Confidential Information and shall use - * it only in accordance with the terms of the license agreement - * you entered into with Sun. - * * The original version of this source code and documentation is * copyrighted and owned by IBM. These materials are provided * under terms of a License Agreement between IBM and Sun. diff --git a/jdk/test/java/util/ResourceBundle/Bug4168625Resource2.java b/jdk/test/java/util/ResourceBundle/Bug4168625Resource2.java index 9aac1c4e808..c7c08df65b9 100644 --- a/jdk/test/java/util/ResourceBundle/Bug4168625Resource2.java +++ b/jdk/test/java/util/ResourceBundle/Bug4168625Resource2.java @@ -25,16 +25,6 @@ * * (C) Copyright IBM Corp. 1999 - All Rights Reserved * - * Portions Copyright 2007 by Sun Microsystems, Inc., - * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A. - * All rights reserved. - * - * This software is the confidential and proprietary information - * of Sun Microsystems, Inc. ("Confidential Information"). You - * shall not disclose such Confidential Information and shall use - * it only in accordance with the terms of the license agreement - * you entered into with Sun. - * * The original version of this source code and documentation is * copyrighted and owned by IBM. These materials are provided * under terms of a License Agreement between IBM and Sun. diff --git a/jdk/test/java/util/ResourceBundle/Bug4168625Resource2_en_US.java b/jdk/test/java/util/ResourceBundle/Bug4168625Resource2_en_US.java index cc0c10dd657..9da86c653e1 100644 --- a/jdk/test/java/util/ResourceBundle/Bug4168625Resource2_en_US.java +++ b/jdk/test/java/util/ResourceBundle/Bug4168625Resource2_en_US.java @@ -25,16 +25,6 @@ * * (C) Copyright IBM Corp. 1999 - All Rights Reserved * - * Portions Copyright 2007 by Sun Microsystems, Inc., - * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A. - * All rights reserved. - * - * This software is the confidential and proprietary information - * of Sun Microsystems, Inc. ("Confidential Information"). You - * shall not disclose such Confidential Information and shall use - * it only in accordance with the terms of the license agreement - * you entered into with Sun. - * * The original version of this source code and documentation is * copyrighted and owned by IBM. These materials are provided * under terms of a License Agreement between IBM and Sun. diff --git a/jdk/test/java/util/ResourceBundle/Bug4168625Resource3.java b/jdk/test/java/util/ResourceBundle/Bug4168625Resource3.java index d98c3cc9181..a9ba771419d 100644 --- a/jdk/test/java/util/ResourceBundle/Bug4168625Resource3.java +++ b/jdk/test/java/util/ResourceBundle/Bug4168625Resource3.java @@ -25,16 +25,6 @@ * * (C) Copyright IBM Corp. 1999 - All Rights Reserved * - * Portions Copyright 2007 by Sun Microsystems, Inc., - * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A. - * All rights reserved. - * - * This software is the confidential and proprietary information - * of Sun Microsystems, Inc. ("Confidential Information"). You - * shall not disclose such Confidential Information and shall use - * it only in accordance with the terms of the license agreement - * you entered into with Sun. - * * The original version of this source code and documentation is * copyrighted and owned by IBM. These materials are provided * under terms of a License Agreement between IBM and Sun. diff --git a/jdk/test/java/util/ResourceBundle/Bug4168625Resource3_en.java b/jdk/test/java/util/ResourceBundle/Bug4168625Resource3_en.java index d8ea44e0171..0afaace2a62 100644 --- a/jdk/test/java/util/ResourceBundle/Bug4168625Resource3_en.java +++ b/jdk/test/java/util/ResourceBundle/Bug4168625Resource3_en.java @@ -25,16 +25,6 @@ * * (C) Copyright IBM Corp. 1999 - All Rights Reserved * - * Portions Copyright 2007 by Sun Microsystems, Inc., - * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A. - * All rights reserved. - * - * This software is the confidential and proprietary information - * of Sun Microsystems, Inc. ("Confidential Information"). You - * shall not disclose such Confidential Information and shall use - * it only in accordance with the terms of the license agreement - * you entered into with Sun. - * * The original version of this source code and documentation is * copyrighted and owned by IBM. These materials are provided * under terms of a License Agreement between IBM and Sun. diff --git a/jdk/test/java/util/ResourceBundle/Bug4168625Resource3_en_CA.java b/jdk/test/java/util/ResourceBundle/Bug4168625Resource3_en_CA.java index b560f5f93b6..cbdf3cdb052 100644 --- a/jdk/test/java/util/ResourceBundle/Bug4168625Resource3_en_CA.java +++ b/jdk/test/java/util/ResourceBundle/Bug4168625Resource3_en_CA.java @@ -25,16 +25,6 @@ * * (C) Copyright IBM Corp. 1999 - All Rights Reserved * - * Portions Copyright 2007 by Sun Microsystems, Inc., - * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A. - * All rights reserved. - * - * This software is the confidential and proprietary information - * of Sun Microsystems, Inc. ("Confidential Information"). You - * shall not disclose such Confidential Information and shall use - * it only in accordance with the terms of the license agreement - * you entered into with Sun. - * * The original version of this source code and documentation is * copyrighted and owned by IBM. These materials are provided * under terms of a License Agreement between IBM and Sun. diff --git a/jdk/test/java/util/ResourceBundle/Bug4168625Resource3_en_IE.java b/jdk/test/java/util/ResourceBundle/Bug4168625Resource3_en_IE.java index 85d744f81e0..6a584240fb3 100644 --- a/jdk/test/java/util/ResourceBundle/Bug4168625Resource3_en_IE.java +++ b/jdk/test/java/util/ResourceBundle/Bug4168625Resource3_en_IE.java @@ -25,16 +25,6 @@ * * (C) Copyright IBM Corp. 1999 - All Rights Reserved * - * Portions Copyright 2007 by Sun Microsystems, Inc., - * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A. - * All rights reserved. - * - * This software is the confidential and proprietary information - * of Sun Microsystems, Inc. ("Confidential Information"). You - * shall not disclose such Confidential Information and shall use - * it only in accordance with the terms of the license agreement - * you entered into with Sun. - * * The original version of this source code and documentation is * copyrighted and owned by IBM. These materials are provided * under terms of a License Agreement between IBM and Sun. diff --git a/jdk/test/java/util/ResourceBundle/Bug4168625Resource3_en_US.java b/jdk/test/java/util/ResourceBundle/Bug4168625Resource3_en_US.java index 5c264c49a89..270d35df0ae 100644 --- a/jdk/test/java/util/ResourceBundle/Bug4168625Resource3_en_US.java +++ b/jdk/test/java/util/ResourceBundle/Bug4168625Resource3_en_US.java @@ -25,16 +25,6 @@ * * (C) Copyright IBM Corp. 1999 - All Rights Reserved * - * Portions Copyright 2007 by Sun Microsystems, Inc., - * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A. - * All rights reserved. - * - * This software is the confidential and proprietary information - * of Sun Microsystems, Inc. ("Confidential Information"). You - * shall not disclose such Confidential Information and shall use - * it only in accordance with the terms of the license agreement - * you entered into with Sun. - * * The original version of this source code and documentation is * copyrighted and owned by IBM. These materials are provided * under terms of a License Agreement between IBM and Sun. diff --git a/jdk/test/java/util/ResourceBundle/Bug4177489Test.java b/jdk/test/java/util/ResourceBundle/Bug4177489Test.java index 93c9683e75d..98c3a48967f 100644 --- a/jdk/test/java/util/ResourceBundle/Bug4177489Test.java +++ b/jdk/test/java/util/ResourceBundle/Bug4177489Test.java @@ -32,16 +32,6 @@ * * (C) Copyright IBM Corp. 1999 - All Rights Reserved * - * Portions Copyright 2007 by Sun Microsystems, Inc., - * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A. - * All rights reserved. - * - * This software is the confidential and proprietary information - * of Sun Microsystems, Inc. ("Confidential Information"). You - * shall not disclose such Confidential Information and shall use - * it only in accordance with the terms of the license agreement - * you entered into with Sun. - * * The original version of this source code and documentation is * copyrighted and owned by IBM. These materials are provided * under terms of a License Agreement between IBM and Sun. diff --git a/jdk/test/java/util/ResourceBundle/Bug4177489_Resource.java b/jdk/test/java/util/ResourceBundle/Bug4177489_Resource.java index bf9833a6d4b..35112f4effd 100644 --- a/jdk/test/java/util/ResourceBundle/Bug4177489_Resource.java +++ b/jdk/test/java/util/ResourceBundle/Bug4177489_Resource.java @@ -25,16 +25,6 @@ * * (C) Copyright IBM Corp. 1999 - All Rights Reserved * - * Portions Copyright 2007 by Sun Microsystems, Inc., - * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A. - * All rights reserved. - * - * This software is the confidential and proprietary information - * of Sun Microsystems, Inc. ("Confidential Information"). You - * shall not disclose such Confidential Information and shall use - * it only in accordance with the terms of the license agreement - * you entered into with Sun. - * * The original version of this source code and documentation is * copyrighted and owned by IBM. These materials are provided * under terms of a License Agreement between IBM and Sun. diff --git a/jdk/test/java/util/ResourceBundle/Bug4177489_Resource_jf.java b/jdk/test/java/util/ResourceBundle/Bug4177489_Resource_jf.java index 9bfce2bb21c..e0f9f497369 100644 --- a/jdk/test/java/util/ResourceBundle/Bug4177489_Resource_jf.java +++ b/jdk/test/java/util/ResourceBundle/Bug4177489_Resource_jf.java @@ -25,16 +25,6 @@ * * (C) Copyright IBM Corp. 1999 - All Rights Reserved * - * Portions Copyright 2007 by Sun Microsystems, Inc., - * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A. - * All rights reserved. - * - * This software is the confidential and proprietary information - * of Sun Microsystems, Inc. ("Confidential Information"). You - * shall not disclose such Confidential Information and shall use - * it only in accordance with the terms of the license agreement - * you entered into with Sun. - * * The original version of this source code and documentation is * copyrighted and owned by IBM. These materials are provided * under terms of a License Agreement between IBM and Sun. From 8f45ed22995f09ce62f70f8ac9f9fc7703908528 Mon Sep 17 00:00:00 2001 From: Yuka Kamiya Date: Tue, 20 Apr 2010 15:01:31 +0900 Subject: [PATCH 64/91] 6945238: (tz) Support tzdata2010i Reviewed-by: okutsu --- jdk/make/sun/javazic/tzdata/VERSION | 2 +- jdk/make/sun/javazic/tzdata/africa | 38 ++++++++++++++++- jdk/make/sun/javazic/tzdata/asia | 53 ++++++++++++++++++++++-- jdk/make/sun/javazic/tzdata/southamerica | 25 ++++++++++- 4 files changed, 109 insertions(+), 9 deletions(-) diff --git a/jdk/make/sun/javazic/tzdata/VERSION b/jdk/make/sun/javazic/tzdata/VERSION index 5575f59019b..cf8117c57a2 100644 --- a/jdk/make/sun/javazic/tzdata/VERSION +++ b/jdk/make/sun/javazic/tzdata/VERSION @@ -21,4 +21,4 @@ # CA 95054 USA or visit www.sun.com if you need additional information or # have any questions. # -tzdata2010g +tzdata2010i diff --git a/jdk/make/sun/javazic/tzdata/africa b/jdk/make/sun/javazic/tzdata/africa index 2032f3862d7..ca7ccd3e269 100644 --- a/jdk/make/sun/javazic/tzdata/africa +++ b/jdk/make/sun/javazic/tzdata/africa @@ -702,6 +702,21 @@ Zone Indian/Mayotte 3:00:56 - LMT 1911 Jul # Mamoutzou # http://www.worldtimezone.com/dst_news/dst_news_morocco03.html # +# From Steffen Thorsen (2010-04-13): +# Several news media in Morocco report that the Ministry of Modernization +# of Public Sectors has announced that Morocco will have DST from +# 2010-05-02 to 2010-08-08. +# +# Example: +# +# http://www.lavieeco.com/actualites/4099-le-maroc-passera-a-l-heure-d-ete-gmt1-le-2-mai.html +# +# (French) +# Our page: +# +# http://www.timeanddate.com/news/time/morocco-starts-dst-2010.html +# + # RULE NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Morocco 1939 only - Sep 12 0:00 1:00 S @@ -723,6 +738,8 @@ Rule Morocco 2008 only - Jun 1 0:00 1:00 S Rule Morocco 2008 only - Sep 1 0:00 0 - Rule Morocco 2009 only - Jun 1 0:00 1:00 S Rule Morocco 2009 only - Aug 21 0:00 0 - +Rule Morocco 2010 only - May 2 0:00 1:00 S +Rule Morocco 2010 only - Aug 8 0:00 0 - # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Africa/Casablanca -0:30:20 - LMT 1913 Oct 26 0:00 Morocco WE%sT 1984 Mar 16 @@ -964,6 +981,24 @@ Zone Africa/Lome 0:04:52 - LMT 1893 # Therefore, the standard time will be kept unchanged the whole year long." # So foregoing DST seems to be an exception (albeit one that may be repeated in the future). +# From Alexander Krivenyshev (2010-03-27): +# According to some news reports Tunis confirmed not to use DST in 2010 +# +# (translation): +# "The Tunisian government has decided to abandon DST, which was scheduled on +# Sunday... +# Tunisian authorities had suspended the DST for the first time last year also +# coincided with the month of Ramadan..." +# +# (in Arabic) +# +# http://www.moheet.com/show_news.aspx?nid=358861&pg=1 +# +# http://www.almadenahnews.com/newss/news.php?c=118&id=38036 +# or +# +# http://www.worldtimezone.com/dst_news/dst_news_tunis02.html + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Tunisia 1939 only - Apr 15 23:00s 1:00 S Rule Tunisia 1939 only - Nov 18 23:00s 0 - @@ -990,8 +1025,7 @@ Rule Tunisia 2005 only - May 1 0:00s 1:00 S Rule Tunisia 2005 only - Sep 30 1:00s 0 - Rule Tunisia 2006 2008 - Mar lastSun 2:00s 1:00 S Rule Tunisia 2006 2008 - Oct lastSun 2:00s 0 - -Rule Tunisia 2010 max - Mar lastSun 2:00s 1:00 S -Rule Tunisia 2010 max - Oct lastSun 2:00s 0 - + # Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's # more precise 0:09:21. # Shanks & Pottenger say the 1911 switch was on Mar 9; go with Howse's Mar 11. diff --git a/jdk/make/sun/javazic/tzdata/asia b/jdk/make/sun/javazic/tzdata/asia index 54051000939..3b378b419a6 100644 --- a/jdk/make/sun/javazic/tzdata/asia +++ b/jdk/make/sun/javazic/tzdata/asia @@ -588,6 +588,28 @@ Zone Asia/Hong_Kong 7:36:36 - LMT 1904 Oct 30 # was still controlled by Japan. This is hard to believe, but we don't # have any other information. +# From smallufo (2010-04-03): +# According to Taiwan's CWB, +# +# http://www.cwb.gov.tw/V6/astronomy/cdata/summert.htm +# +# Taipei has DST in 1979 between July 1st and Sep 30. + +# From Arthur David Olson (2010-04-07): +# Here's Google's translation of the table at the bottom of the "summert.htm" page: +# Decade Name Start and end date +# Republic of China 34 years to 40 years (AD 1945-1951 years) Summer Time May 1 to September 30 +# 41 years of the Republic of China (AD 1952) Daylight Saving Time March 1 to October 31 +# Republic of China 42 years to 43 years (AD 1953-1954 years) Daylight Saving Time April 1 to October 31 +# In the 44 years to 45 years (AD 1955-1956 years) Daylight Saving Time April 1 to September 30 +# Republic of China 46 years to 48 years (AD 1957-1959) Summer Time April 1 to September 30 +# Republic of China 49 years to 50 years (AD 1960-1961) Summer Time June 1 to September 30 +# Republic of China 51 years to 62 years (AD 1962-1973 years) Stop Summer Time +# Republic of China 63 years to 64 years (1974-1975 AD) Daylight Saving Time April 1 to September 30 +# Republic of China 65 years to 67 years (1976-1978 AD) Stop Daylight Saving Time +# Republic of China 68 years (AD 1979) Daylight Saving Time July 1 to September 30 +# Republic of China since 69 years (AD 1980) Stop Daylight Saving Time + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Taiwan 1945 1951 - May 1 0:00 1:00 D Rule Taiwan 1945 1951 - Oct 1 0:00 0 S @@ -598,8 +620,9 @@ Rule Taiwan 1955 1961 - Oct 1 0:00 0 S Rule Taiwan 1960 1961 - Jun 1 0:00 1:00 D Rule Taiwan 1974 1975 - Apr 1 0:00 1:00 D Rule Taiwan 1974 1975 - Oct 1 0:00 0 S -Rule Taiwan 1980 only - Jun 30 0:00 1:00 D -Rule Taiwan 1980 only - Sep 30 0:00 0 S +Rule Taiwan 1979 only - Jun 30 0:00 1:00 D +Rule Taiwan 1979 only - Sep 30 0:00 0 S + # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Asia/Taipei 8:06:00 - LMT 1896 # or Taibei or T'ai-pei 8:00 Taiwan C%sT @@ -1934,13 +1957,35 @@ Zone Asia/Muscat 3:54:20 - LMT 1920 # [T]he German Consulate General in Karachi reported me today that Pakistan # will go back to standard time on 1st of November. +# From Steffen Thorsen (2010-03-26): +# Steffen Thorsen wrote: +# > On Thursday (2010-03-25) it was announced that DST would start in +# > Pakistan on 2010-04-01. +# > +# > Then today, the president said that they might have to revert the +# > decision if it is not supported by the parliament. So at the time +# > being, it seems unclear if DST will be actually observed or not - but +# > April 1 could be a more likely date than April 15. +# Now, it seems that the decision to not observe DST in final: +# +# "Govt Withdraws Plan To Advance Clocks" +# +# http://www.apakistannews.com/govt-withdraws-plan-to-advance-clocks-172041 +# +# +# "People laud PM's announcement to end DST" +# +# http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=99374&Itemid=2 +# + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Pakistan 2002 only - Apr Sun>=2 0:01 1:00 S Rule Pakistan 2002 only - Oct Sun>=2 0:01 0 - Rule Pakistan 2008 only - Jun 1 0:00 1:00 S Rule Pakistan 2008 only - Nov 1 0:00 0 - -Rule Pakistan 2009 max - Apr 15 0:00 1:00 S -Rule Pakistan 2009 max - Nov 1 0:00 0 - +Rule Pakistan 2009 only - Apr 15 0:00 1:00 S +Rule Pakistan 2009 only - Nov 1 0:00 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Asia/Karachi 4:28:12 - LMT 1907 5:30 - IST 1942 Sep diff --git a/jdk/make/sun/javazic/tzdata/southamerica b/jdk/make/sun/javazic/tzdata/southamerica index 76f1acaf005..44eecceeae8 100644 --- a/jdk/make/sun/javazic/tzdata/southamerica +++ b/jdk/make/sun/javazic/tzdata/southamerica @@ -459,6 +459,27 @@ Rule Arg 2008 only - Oct Sun>=15 0:00 1:00 S # of the country calls it "ART". # ... +# From Alexander Krivenyshev (2010-04-09): +# According to news reports from El Diario de la Republica Province San +# Luis, Argentina (standard time UTC-04) will keep Daylight Saving Time +# after April 11, 2010--will continue to have same time as rest of +# Argentina (UTC-3) (no DST). +# +# Confirmaron la prórroga del huso horario de verano (Spanish) +# +# http://www.eldiariodelarepublica.com/index.php?option=com_content&task=view&id=29383&Itemid=9 +# +# or (some English translation): +# +# http://www.worldtimezone.com/dst_news/dst_news_argentina08.html +# + +# From Mariano Absatz (2010-04-12): +# yes...I can confirm this...and given that San Luis keeps calling +# UTC-03:00 "summer time", we should't just let San Luis go back to "Arg" +# rules...San Luis is still using "Western ARgentina Time" and it got +# stuck on Summer daylight savings time even though the summer is over. + # Zone NAME GMTOFF RULES FORMAT [UNTIL] # # Buenos Aires (BA), Capital Federal (CF), @@ -592,8 +613,8 @@ Zone America/Argentina/Mendoza -4:35:16 - LMT 1894 Oct 31 # # San Luis (SL) -Rule SanLuis 2008 max - Mar Sun>=8 0:00 0 - -Rule SanLuis 2007 max - Oct Sun>=8 0:00 1:00 S +Rule SanLuis 2008 2009 - Mar Sun>=8 0:00 0 - +Rule SanLuis 2007 2009 - Oct Sun>=8 0:00 1:00 S Zone America/Argentina/San_Luis -4:25:24 - LMT 1894 Oct 31 -4:16:48 - CMT 1920 May From 8403ec67a34f0c530596cc74453353901338690d Mon Sep 17 00:00:00 2001 From: Andrew Brygin Date: Tue, 20 Apr 2010 11:06:47 +0400 Subject: [PATCH 65/91] 6936389: FontManager.fileCloser may cause memory leak in applets Reviewed-by: igor, prr, ant --- .../classes/sun/font/SunFontManager.java | 1 + .../share/classes/sun/java2d/Disposer.java | 1 + .../sun/java2d/loops/GraphicsPrimitive.java | 4 +- .../solaris/classes/sun/awt/X11/XToolkit.java | 41 ++-- .../classes/sun/awt/X11GraphicsDevice.java | 31 ++- .../classes/sun/awt/motif/MToolkit.java | 38 +-- .../classes/sun/awt/windows/WToolkit.java | 36 ++- .../java2d/d3d/D3DScreenUpdateManager.java | 18 +- .../sun/awt/font/ClassLoaderLeakTest.java | 220 ++++++++++++++++++ 9 files changed, 319 insertions(+), 71 deletions(-) create mode 100644 jdk/test/sun/awt/font/ClassLoaderLeakTest.java diff --git a/jdk/src/share/classes/sun/font/SunFontManager.java b/jdk/src/share/classes/sun/font/SunFontManager.java index 923f1cc475b..197397a1bbf 100644 --- a/jdk/src/share/classes/sun/font/SunFontManager.java +++ b/jdk/src/share/classes/sun/font/SunFontManager.java @@ -2310,6 +2310,7 @@ public abstract class SunFontManager implements FontSupport, FontManagerForSGE { tgn != null; tg = tgn, tgn = tg.getParent()); fileCloser = new Thread(tg, fileCloserRunnable); + fileCloser.setContextClassLoader(null); Runtime.getRuntime().addShutdownHook(fileCloser); return null; } diff --git a/jdk/src/share/classes/sun/java2d/Disposer.java b/jdk/src/share/classes/sun/java2d/Disposer.java index 4433a278d5d..5bca4609e74 100644 --- a/jdk/src/share/classes/sun/java2d/Disposer.java +++ b/jdk/src/share/classes/sun/java2d/Disposer.java @@ -84,6 +84,7 @@ public class Disposer implements Runnable { tg = tgn, tgn = tg.getParent()); Thread t = new Thread(tg, disposerInstance, "Java2D Disposer"); + t.setContextClassLoader(null); t.setDaemon(true); t.setPriority(Thread.MAX_PRIORITY); t.start(); diff --git a/jdk/src/share/classes/sun/java2d/loops/GraphicsPrimitive.java b/jdk/src/share/classes/sun/java2d/loops/GraphicsPrimitive.java index adc3fda4862..31cccc58c5c 100644 --- a/jdk/src/share/classes/sun/java2d/loops/GraphicsPrimitive.java +++ b/jdk/src/share/classes/sun/java2d/loops/GraphicsPrimitive.java @@ -417,7 +417,9 @@ public abstract class GraphicsPrimitive { public static void setShutdownHook() { AccessController.doPrivileged(new PrivilegedAction() { public Object run() { - Runtime.getRuntime().addShutdownHook(new TraceReporter()); + TraceReporter t = new TraceReporter(); + t.setContextClassLoader(null); + Runtime.getRuntime().addShutdownHook(t); return null; } }); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XToolkit.java b/jdk/src/solaris/classes/sun/awt/X11/XToolkit.java index 8676c6affb9..710d8ac8a10 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XToolkit.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XToolkit.java @@ -307,22 +307,35 @@ public final class XToolkit extends UNIXToolkit implements Runnable { } finally { awtUnlock(); } - - Runtime.getRuntime().addShutdownHook(new Thread() { - public void run() { - XSystemTrayPeer peer = XSystemTrayPeer.getPeerInstance(); - if (peer != null) { - peer.dispose(); - } - if (xs != null) { - ((XAWTXSettings)xs).dispose(); - } - freeXKB(); - if (log.isLoggable(PlatformLogger.FINE)) { - dumpPeers(); + PrivilegedAction a = new PrivilegedAction() { + public Void run() { + ThreadGroup mainTG = Thread.currentThread().getThreadGroup(); + ThreadGroup parentTG = mainTG.getParent(); + while (parentTG != null) { + mainTG = parentTG; + parentTG = mainTG.getParent(); } + Thread shutdownThread = new Thread(mainTG, "XToolkt-Shutdown-Thread") { + public void run() { + XSystemTrayPeer peer = XSystemTrayPeer.getPeerInstance(); + if (peer != null) { + peer.dispose(); + } + if (xs != null) { + ((XAWTXSettings)xs).dispose(); + } + freeXKB(); + if (log.isLoggable(PlatformLogger.FINE)) { + dumpPeers(); + } + } + }; + shutdownThread.setContextClassLoader(null); + Runtime.getRuntime().addShutdownHook(shutdownThread); + return null; } - }); + }; + AccessController.doPrivileged(a); } static String getCorrectXIDString(String val) { diff --git a/jdk/src/solaris/classes/sun/awt/X11GraphicsDevice.java b/jdk/src/solaris/classes/sun/awt/X11GraphicsDevice.java index 115320bb056..cd4763033ba 100644 --- a/jdk/src/solaris/classes/sun/awt/X11GraphicsDevice.java +++ b/jdk/src/solaris/classes/sun/awt/X11GraphicsDevice.java @@ -32,6 +32,8 @@ import java.awt.GraphicsDevice; import java.awt.GraphicsConfiguration; import java.awt.Rectangle; import java.awt.Window; +import java.security.AccessController; +import java.security.PrivilegedAction; import java.util.ArrayList; import java.util.HashSet; import java.util.HashMap; @@ -402,17 +404,30 @@ public class X11GraphicsDevice // is already in the original DisplayMode at that time, this // hook will have no effect) shutdownHookRegistered = true; - Runnable r = new Runnable() { - public void run() { - Window old = getFullScreenWindow(); - if (old != null) { - exitFullScreenExclusive(old); - setDisplayMode(origDisplayMode); + PrivilegedAction a = new PrivilegedAction() { + public Void run() { + ThreadGroup mainTG = Thread.currentThread().getThreadGroup(); + ThreadGroup parentTG = mainTG.getParent(); + while (parentTG != null) { + mainTG = parentTG; + parentTG = mainTG.getParent(); } + Runnable r = new Runnable() { + public void run() { + Window old = getFullScreenWindow(); + if (old != null) { + exitFullScreenExclusive(old); + setDisplayMode(origDisplayMode); + } + } + }; + Thread t = new Thread(mainTG, r,"Display-Change-Shutdown-Thread-"+screen); + t.setContextClassLoader(null); + Runtime.getRuntime().addShutdownHook(t); + return null; } }; - Thread t = new Thread(r,"Display-Change-Shutdown-Thread-"+screen); - Runtime.getRuntime().addShutdownHook(t); + AccessController.doPrivileged(a); } // switch to the new DisplayMode diff --git a/jdk/src/solaris/classes/sun/awt/motif/MToolkit.java b/jdk/src/solaris/classes/sun/awt/motif/MToolkit.java index 318897a4466..1c48f57b3e4 100644 --- a/jdk/src/solaris/classes/sun/awt/motif/MToolkit.java +++ b/jdk/src/solaris/classes/sun/awt/motif/MToolkit.java @@ -156,27 +156,27 @@ public class MToolkit extends UNIXToolkit implements Runnable { Thread toolkitThread = new Thread(this, "AWT-Motif"); toolkitThread.setPriority(Thread.NORM_PRIORITY + 1); toolkitThread.setDaemon(true); - ThreadGroup mainTG = (ThreadGroup)AccessController.doPrivileged( - new PrivilegedAction() { - public Object run() { - ThreadGroup currentTG = - Thread.currentThread().getThreadGroup(); - ThreadGroup parentTG = currentTG.getParent(); - while (parentTG != null) { - currentTG = parentTG; - parentTG = currentTG.getParent(); - } - return currentTG; - } - }); - Runtime.getRuntime().addShutdownHook( - new Thread(mainTG, new Runnable() { - public void run() { - shutdown(); + PrivilegedAction a = new PrivilegedAction() { + public Void run() { + ThreadGroup mainTG = Thread.currentThread().getThreadGroup(); + ThreadGroup parentTG = mainTG.getParent(); + + while (parentTG != null) { + mainTG = parentTG; + parentTG = mainTG.getParent(); } - }, "Shutdown-Thread") - ); + Thread shutdownThread = new Thread(mainTG, new Runnable() { + public void run() { + shutdown(); + } + }, "Shutdown-Thread"); + shutdownThread.setContextClassLoader(null); + Runtime.getRuntime().addShutdownHook(shutdownThread); + return null; + } + }; + AccessController.doPrivileged(a); /* * Fix for 4701990. diff --git a/jdk/src/windows/classes/sun/awt/windows/WToolkit.java b/jdk/src/windows/classes/sun/awt/windows/WToolkit.java index b822cf654d2..002da43e74a 100644 --- a/jdk/src/windows/classes/sun/awt/windows/WToolkit.java +++ b/jdk/src/windows/classes/sun/awt/windows/WToolkit.java @@ -266,27 +266,25 @@ public class WToolkit extends SunToolkit implements Runnable { boolean startPump = init(); if (startPump) { - ThreadGroup mainTG = (ThreadGroup)AccessController.doPrivileged( - new PrivilegedAction() { - public Object run() { - ThreadGroup currentTG = - Thread.currentThread().getThreadGroup(); - ThreadGroup parentTG = currentTG.getParent(); - while (parentTG != null) { - currentTG = parentTG; - parentTG = currentTG.getParent(); - } - return currentTG; + AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + ThreadGroup currentTG = + Thread.currentThread().getThreadGroup(); + ThreadGroup parentTG = currentTG.getParent(); + while (parentTG != null) { + currentTG = parentTG; + parentTG = currentTG.getParent(); } + Thread shutdown = new Thread(currentTG, new Runnable() { + public void run() { + shutdown(); + } + }); + shutdown.setContextClassLoader(null); + Runtime.getRuntime().addShutdownHook(shutdown); + return null; + } }); - - Runtime.getRuntime().addShutdownHook( - new Thread(mainTG, new Runnable() { - public void run() { - shutdown(); - } - }) - ); } synchronized(this) { diff --git a/jdk/src/windows/classes/sun/java2d/d3d/D3DScreenUpdateManager.java b/jdk/src/windows/classes/sun/java2d/d3d/D3DScreenUpdateManager.java index 53ae895ddfe..db506b49dd5 100644 --- a/jdk/src/windows/classes/sun/java2d/d3d/D3DScreenUpdateManager.java +++ b/jdk/src/windows/classes/sun/java2d/d3d/D3DScreenUpdateManager.java @@ -101,17 +101,15 @@ public class D3DScreenUpdateManager extends ScreenUpdateManager currentTG = parentTG; parentTG = currentTG.getParent(); } + Thread shutdown = new Thread(currentTG, new Runnable() { + public void run() { + done = true; + wakeUpUpdateThread(); + } + }); + shutdown.setContextClassLoader(null); try { - Runtime.getRuntime().addShutdownHook( - new Thread(currentTG, - new Runnable() { - public void run() { - done = true; - wakeUpUpdateThread(); - } - } - ) - ); + Runtime.getRuntime().addShutdownHook(shutdown); } catch (Exception e) { done = true; } diff --git a/jdk/test/sun/awt/font/ClassLoaderLeakTest.java b/jdk/test/sun/awt/font/ClassLoaderLeakTest.java new file mode 100644 index 00000000000..9696b56e350 --- /dev/null +++ b/jdk/test/sun/awt/font/ClassLoaderLeakTest.java @@ -0,0 +1,220 @@ +/* + * 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 + * 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 6936389 + * + * @summary Test verifes that LogManager shutdown hook does not cause + * an application classloader leaks. + * + * @run main/othervm ClassLoaderLeakTest FontManagerTest + */ + +import java.awt.Font; +import java.awt.Graphics; +import java.io.File; +import java.lang.ref.WeakReference; +import java.lang.reflect.Constructor; +import java.lang.reflect.Method; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.concurrent.CountDownLatch; + +public class ClassLoaderLeakTest { + + private static CountDownLatch doneSignal; + private static CountDownLatch launchSignal; + private static Throwable launchFailure = null; + + public static void main(String[] args) { + doneSignal = new CountDownLatch(1); + launchSignal = new CountDownLatch(1); + + String testcase = "FontManagerTest"; + + if (args.length > 0) { + testcase = args[0]; + } + + /* prepare test class loader */ + URL pwd = null; + try { + + pwd = new File(System.getProperty("test.classes", ".")).toURL(); + } catch (MalformedURLException e) { + throw new RuntimeException("Test failed.", e); + } + System.out.println("PWD: " + pwd); + URL[] urls = new URL[]{pwd}; + + MyClassLoader appClassLoader = new MyClassLoader(urls, "test0"); + WeakReference ref = + new WeakReference(appClassLoader); + + ThreadGroup appsThreadGroup = new ThreadGroup("MyAppsThreadGroup"); + + Runnable launcher = new TestLauncher(testcase); + + Thread appThread = new Thread(appsThreadGroup, launcher, "AppThread-0"); + appThread.setContextClassLoader(appClassLoader); + + appThread.start(); + appsThreadGroup = null; + appClassLoader = null; + launcher = null; + appThread = null; + + /* wait for laucnh completion */ + try { + launchSignal.await(); + } catch (InterruptedException e) { + } + + /* check if launch failed */ + if (launchFailure != null) { + throw new RuntimeException("Test failed.", launchFailure); + } + + /* wait for test app excution completion */ + try { + doneSignal.await(); + } catch (InterruptedException e) { + } + + /* give a chance to GC */ + waitAndGC(9); + + if (ref.get() != null) { + throw new RuntimeException("Test failed: classloader is still alive"); + } + + + System.out.println("Test passed."); + } + + private static class TestLauncher implements Runnable { + + private String className; + + public TestLauncher(String name) { + className = name; + } + + public void run() { + try { + ClassLoader cl = + Thread.currentThread().getContextClassLoader(); + Class appMain = cl.loadClass(className); + Method launch = + appMain.getMethod("launch", doneSignal.getClass()); + + Constructor c = appMain.getConstructor(); + + Object o = c.newInstance(); + + launch.invoke(o, doneSignal); + + } catch (Throwable e) { + launchFailure = e; + } finally { + launchSignal.countDown(); + } + } + } + + private static class MyClassLoader extends URLClassLoader { + + private static boolean verbose = + Boolean.getBoolean("verboseClassLoading"); + private String uniqClassName; + + public MyClassLoader(URL[] urls, String uniq) { + super(urls); + + uniqClassName = uniq; + } + + public Class loadClass(String name) throws ClassNotFoundException { + if (verbose) { + System.out.printf("%s: load class %s\n", uniqClassName, name); + } + if (uniqClassName.equals(name)) { + return Object.class; + } + return super.loadClass(name); + } + + public String toString() { + return "MyClassLoader(" + uniqClassName + ")"; + } + } + + private static void waitAndGC(int sec) { + int cnt = sec; + System.out.print("Wait "); + while (cnt-- > 0) { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + } + // do GC every 3 seconds + if (cnt % 3 == 2) { + System.gc(); + System.out.print("+"); + } else { + System.out.print("."); + } + //checkErrors(); + } + System.out.println(""); + } +} + +abstract class AppTest { + + public AppTest() { + } + + protected abstract void doTest(); + + public void launch(CountDownLatch done) { + System.out.println("Testcase: " + this.getClass().getName()); + try { + doTest(); + } finally { + done.countDown(); + } + } +} + +class FontManagerTest extends AppTest { + + public FontManagerTest() { + } + + protected void doTest() { + Font f = new Font(Font.SANS_SERIF, Font.ITALIC, 24); + f.getNumGlyphs(); + } +} From 5d137e0d2f9bbf85a059db4670f0a87d48e0c833 Mon Sep 17 00:00:00 2001 From: Weijun Wang Date: Tue, 20 Apr 2010 19:30:31 +0800 Subject: [PATCH 66/91] 6944847: native gss lib names on linux Reviewed-by: valeriep --- .../jgss/wrapper/SunNativeProvider.java | 38 ++++--- .../sun/security/krb5/Krb5NameEquals.java | 78 +++++++++++++ jdk/test/sun/security/krb5/runNameEquals.sh | 106 ++++++++++++++++++ 3 files changed, 207 insertions(+), 15 deletions(-) create mode 100644 jdk/test/sun/security/krb5/Krb5NameEquals.java create mode 100644 jdk/test/sun/security/krb5/runNameEquals.sh diff --git a/jdk/src/share/classes/sun/security/jgss/wrapper/SunNativeProvider.java b/jdk/src/share/classes/sun/security/jgss/wrapper/SunNativeProvider.java index e212da7d5c3..5a71cdfaaa5 100644 --- a/jdk/src/share/classes/sun/security/jgss/wrapper/SunNativeProvider.java +++ b/jdk/src/share/classes/sun/security/jgss/wrapper/SunNativeProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2005-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 @@ -77,26 +77,34 @@ public final class SunNativeProvider extends Provider { if (DEBUG) err.printStackTrace(); return null; } - String gssLib = System.getProperty(LIB_PROP); - if (gssLib == null || gssLib.trim().equals("")) { + String gssLibs[] = new String[0]; + String defaultLib = System.getProperty(LIB_PROP); + if (defaultLib == null || defaultLib.trim().equals("")) { String osname = System.getProperty("os.name"); if (osname.startsWith("SunOS")) { - gssLib = "libgss.so"; + gssLibs = new String[]{ "libgss.so" }; } else if (osname.startsWith("Linux")) { - gssLib = "libgssapi.so"; + gssLibs = new String[]{ + "libgssapi.so", + "libgssapi_krb5.so", + }; } + } else { + gssLibs = new String[]{ defaultLib }; } - if (GSSLibStub.init(gssLib)) { - debug("Loaded GSS library: " + gssLib); - Oid[] mechs = GSSLibStub.indicateMechs(); - HashMap map = - new HashMap(); - for (int i = 0; i < mechs.length; i++) { - debug("Native MF for " + mechs[i]); - map.put("GssApiMechanism." + mechs[i], - MF_CLASS); + for (String libName: gssLibs) { + if (GSSLibStub.init(libName)) { + debug("Loaded GSS library: " + libName); + Oid[] mechs = GSSLibStub.indicateMechs(); + HashMap map = + new HashMap(); + for (int i = 0; i < mechs.length; i++) { + debug("Native MF for " + mechs[i]); + map.put("GssApiMechanism." + mechs[i], + MF_CLASS); + } + return map; } - return map; } return null; } diff --git a/jdk/test/sun/security/krb5/Krb5NameEquals.java b/jdk/test/sun/security/krb5/Krb5NameEquals.java new file mode 100644 index 00000000000..d319fb5dcde --- /dev/null +++ b/jdk/test/sun/security/krb5/Krb5NameEquals.java @@ -0,0 +1,78 @@ +/* + * Copyright 2007-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 + * 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. + */ + +/* + * @bug 4634392 + * @summary JDK code doesn't respect contract for equals and hashCode + * @author Andrew Fan + */ + +import org.ietf.jgss.*; + +public class Krb5NameEquals { + + private static String NAME_STR1 = "service@host"; + private static String NAME_STR2 = "service@host2"; + private static final Oid MECH; + + static { + Oid temp = null; + try { + temp = new Oid("1.2.840.113554.1.2.2"); // KRB5 + } catch (Exception e) { + // should never happen + } + MECH = temp; + } + + public static void main(String[] argv) throws Exception { + GSSManager mgr = GSSManager.getInstance(); + + boolean result = true; + // Create GSSName and check their equals(), hashCode() impl + GSSName name1 = mgr.createName(NAME_STR1, + GSSName.NT_HOSTBASED_SERVICE, MECH); + GSSName name2 = mgr.createName(NAME_STR2, + GSSName.NT_HOSTBASED_SERVICE, MECH); + GSSName name3 = mgr.createName(NAME_STR1, + GSSName.NT_HOSTBASED_SERVICE, MECH); + + if (!name1.equals(name3) || !name1.equals(name3) || + !name1.equals((Object) name1) || + !name1.equals((Object) name3)) { + System.out.println("Error: should be the same name"); + result = false; + } else if (name1.hashCode() != name3.hashCode()) { + System.out.println("Error: should have same hash"); + result = false; + } + + if (name1.equals(name2) || name1.equals((Object) name2)) { + System.out.println("Error: should be different names"); + result = false; + } + if (result) { + System.out.println("Done"); + } else System.exit(1); + } +} diff --git a/jdk/test/sun/security/krb5/runNameEquals.sh b/jdk/test/sun/security/krb5/runNameEquals.sh new file mode 100644 index 00000000000..cddba722cb0 --- /dev/null +++ b/jdk/test/sun/security/krb5/runNameEquals.sh @@ -0,0 +1,106 @@ +# +# Copyright 2009-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 +# 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 6317711 6944847 +# @summary Ensure the GSSName has the correct impl which respects +# the contract for equals and hashCode across different configurations. + +# set a few environment variables so that the shell-script can run stand-alone +# in the source directory + +if [ "${TESTSRC}" = "" ] ; then + TESTSRC="." +fi + +if [ "${TESTCLASSES}" = "" ] ; then + TESTCLASSES="." +fi + +if [ "${TESTJAVA}" = "" ] ; then + echo "TESTJAVA not set. Test cannot execute." + echo "FAILED!!!" + exit 1 +fi + +NATIVE=false + +# set platform-dependent variables +OS=`uname -s` +case "$OS" in + SunOS ) + PATHSEP=":" + FILESEP="/" + NATIVE=true + ;; + Linux ) + PATHSEP=":" + FILESEP="/" + NATIVE=true + ;; + CYGWIN* ) + PATHSEP=";" + FILESEP="/" + ;; + Windows* ) + PATHSEP=";" + FILESEP="\\" + ;; + * ) + echo "Unrecognized system!" + exit 1; + ;; +esac + +TEST=Krb5NameEquals + +${TESTJAVA}${FILESEP}bin${FILESEP}javac \ + -d ${TESTCLASSES}${FILESEP} \ + ${TESTSRC}${FILESEP}${TEST}.java + +EXIT_STATUS=0 + +if [ "${NATIVE}" = "true" ] ; then + echo "Testing native provider" + ${TESTJAVA}${FILESEP}bin${FILESEP}java \ + -classpath ${TESTCLASSES} \ + -Dsun.security.jgss.native=true \ + ${TEST} + if [ $? != 0 ] ; then + echo "Native provider fails" + EXIT_STATUS=1 + fi +fi + +echo "Testing java provider" +${TESTJAVA}${FILESEP}bin${FILESEP}java \ + -classpath ${TESTCLASSES} \ + -Djava.security.krb5.realm=R \ + -Djava.security.krb5.kdc=127.0.0.1 \ + ${TEST} +if [ $? != 0 ] ; then + echo "Java provider fails" + EXIT_STATUS=1 +fi + +exit ${EXIT_STATUS} From 166ea7f01caa1ff5eaa1fba118e22b3e58eee175 Mon Sep 17 00:00:00 2001 From: Tom Rodriguez Date: Tue, 20 Apr 2010 13:26:33 -0700 Subject: [PATCH 67/91] 6945219: minor SA fixes Reviewed-by: twisti --- hotspot/agent/src/os/linux/ps_core.c | 7 +- .../sun/jvm/hotspot/CommandProcessor.java | 318 +++++++++++++----- .../share/classes/sun/jvm/hotspot/HSDB.java | 8 +- .../sun/jvm/hotspot/bugspot/BugSpot.java | 14 +- .../interpreter/BytecodeDisassembler.java | 6 +- .../sun/jvm/hotspot/oops/ConstantPool.java | 9 +- .../jvm/hotspot/runtime/ClassConstants.java | 5 +- .../hotspot/runtime/SignatureIterator.java | 4 +- .../jvm/hotspot/tools/jcore/ClassWriter.java | 5 +- .../sun/jvm/hotspot/ui/FrameWrapper.java | 3 +- .../ui/classbrowser/HTMLGenerator.java | 54 +-- .../sun/jvm/hotspot/utilities/Assert.java | 4 +- 12 files changed, 306 insertions(+), 131 deletions(-) diff --git a/hotspot/agent/src/os/linux/ps_core.c b/hotspot/agent/src/os/linux/ps_core.c index 95e14574894..e2067a951ce 100644 --- a/hotspot/agent/src/os/linux/ps_core.c +++ b/hotspot/agent/src/os/linux/ps_core.c @@ -884,9 +884,12 @@ static bool read_shared_lib_info(struct ps_prochandle* ph) { } // read name of the shared object - if (read_string(ph, (uintptr_t) lib_name_addr, lib_name, sizeof(lib_name)) != true) { + lib_name[0] = '\0'; + if (lib_name_addr != 0 && + read_string(ph, (uintptr_t) lib_name_addr, lib_name, sizeof(lib_name)) != true) { print_debug("can't read shared object name\n"); - return false; + // don't let failure to read the name stop opening the file. If something is really wrong + // it will fail later. } if (lib_name[0] != '\0') { diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/CommandProcessor.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/CommandProcessor.java index a8d802f2fec..68c67aac47a 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/CommandProcessor.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/CommandProcessor.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2005-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 @@ -494,6 +494,68 @@ public class CommandProcessor { } } }, + new Command("revptrs", "revptrs address", false) { + public void doit(Tokens t) { + int tokens = t.countTokens(); + if (tokens != 1 && (tokens != 2 || !t.nextToken().equals("-c"))) { + usage(); + return; + } + boolean chase = tokens == 2; + ReversePtrs revptrs = VM.getVM().getRevPtrs(); + if (revptrs == null) { + out.println("Computing reverse pointers..."); + ReversePtrsAnalysis analysis = new ReversePtrsAnalysis(); + final boolean[] complete = new boolean[1]; + HeapProgressThunk thunk = new HeapProgressThunk() { + public void heapIterationFractionUpdate(double d) {} + public synchronized void heapIterationComplete() { + complete[0] = true; + notify(); + } + }; + analysis.setHeapProgressThunk(thunk); + analysis.run(); + while (!complete[0]) { + synchronized (thunk) { + try { + thunk.wait(); + } catch (Exception e) { + } + } + } + revptrs = VM.getVM().getRevPtrs(); + out.println("Done."); + } + Address a = VM.getVM().getDebugger().parseAddress(t.nextToken()); + if (VM.getVM().getUniverse().heap().isInReserved(a)) { + OopHandle handle = a.addOffsetToAsOopHandle(0); + Oop oop = VM.getVM().getObjectHeap().newOop(handle); + ArrayList ptrs = revptrs.get(oop); + if (ptrs == null) { + out.println("no live references to " + a); + } else { + if (chase) { + while (ptrs.size() == 1) { + LivenessPathElement e = (LivenessPathElement)ptrs.get(0); + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + Oop.printOopValueOn(e.getObj(), new PrintStream(bos)); + out.println(bos.toString()); + ptrs = revptrs.get(e.getObj()); + } + } else { + for (int i = 0; i < ptrs.size(); i++) { + LivenessPathElement e = (LivenessPathElement)ptrs.get(i); + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + Oop.printOopValueOn(e.getObj(), new PrintStream(bos)); + out.println(bos.toString()); + oop = e.getObj(); + } + } + } + } + } + }, new Command("inspect", "inspect expression", false) { public void doit(Tokens t) { if (t.countTokens() != 1) { @@ -816,8 +878,24 @@ public class CommandProcessor { dumpType(type); } else { Iterator i = agent.getTypeDataBase().getTypes(); + // Make sure the types are emitted in an order than can be read back in + HashSet emitted = new HashSet(); + Stack pending = new Stack(); while (i.hasNext()) { - dumpType((Type)i.next()); + Type n = (Type)i.next(); + if (emitted.contains(n.getName())) { + continue; + } + + while (n != null && !emitted.contains(n.getName())) { + pending.push(n); + n = n.getSuperclass(); + } + while (!pending.empty()) { + n = (Type)pending.pop(); + dumpType(n); + emitted.add(n.getName()); + } } } } @@ -846,83 +924,105 @@ public class CommandProcessor { } }, - new Command("search", "search [ heap | codecache | threads ] value", false) { + new Command("search", "search [ heap | perm | rawheap | codecache | threads ] value", false) { public void doit(Tokens t) { if (t.countTokens() != 2) { usage(); - } else { - String type = t.nextToken(); - final Address value = VM.getVM().getDebugger().parseAddress(t.nextToken()); - final long stride = VM.getVM().getAddressSize(); - if (type.equals("threads")) { - Threads threads = VM.getVM().getThreads(); - for (JavaThread thread = threads.first(); thread != null; thread = thread.next()) { - Address base = thread.getBaseOfStackPointer(); - Address end = thread.getLastJavaSP(); - if (end == null) continue; - if (end.lessThan(base)) { - Address tmp = base; - base = end; - end = tmp; - } - out.println("Searching " + base + " " + end); - while (base != null && base.lessThan(end)) { - Address val = base.getAddressAt(0); - if (AddressOps.equal(val, value)) { - out.println(base); - } - base = base.addOffsetTo(stride); - } + return; + } + String type = t.nextToken(); + final Address value = VM.getVM().getDebugger().parseAddress(t.nextToken()); + final long stride = VM.getVM().getAddressSize(); + if (type.equals("threads")) { + Threads threads = VM.getVM().getThreads(); + for (JavaThread thread = threads.first(); thread != null; thread = thread.next()) { + Address base = thread.getBaseOfStackPointer(); + Address end = thread.getLastJavaSP(); + if (end == null) continue; + if (end.lessThan(base)) { + Address tmp = base; + base = end; + end = tmp; + } + out.println("Searching " + base + " " + end); + while (base != null && base.lessThan(end)) { + Address val = base.getAddressAt(0); + if (AddressOps.equal(val, value)) { + out.println(base); + } + base = base.addOffsetTo(stride); } - } else if (type.equals("heap")) { - RawHeapVisitor iterator = new RawHeapVisitor() { - public void prologue(long used) { - } - - public void visitAddress(Address addr) { - Address val = addr.getAddressAt(0); - if (AddressOps.equal(val, value)) { - out.println("found at " + addr); - } - } - public void visitCompOopAddress(Address addr) { - Address val = addr.getCompOopAddressAt(0); - if (AddressOps.equal(val, value)) { - out.println("found at " + addr); - } - } - public void epilogue() { - } - }; - VM.getVM().getObjectHeap().iterateRaw(iterator); - } else if (type.equals("codecache")) { - CodeCacheVisitor v = new CodeCacheVisitor() { - public void prologue(Address start, Address end) { - } - public void visit(CodeBlob blob) { - boolean printed = false; - Address base = blob.getAddress(); - Address end = base.addOffsetTo(blob.getSize()); - while (base != null && base.lessThan(end)) { - Address val = base.getAddressAt(0); - if (AddressOps.equal(val, value)) { - if (!printed) { - printed = true; - blob.printOn(out); - } - out.println("found at " + base + "\n"); - } - base = base.addOffsetTo(stride); - } - } - public void epilogue() { - } - - - }; - VM.getVM().getCodeCache().iterate(v); - } + } else if (type.equals("rawheap")) { + RawHeapVisitor iterator = new RawHeapVisitor() { + public void prologue(long used) { + } + + public void visitAddress(Address addr) { + Address val = addr.getAddressAt(0); + if (AddressOps.equal(val, value)) { + out.println("found at " + addr); + } + } + public void visitCompOopAddress(Address addr) { + Address val = addr.getCompOopAddressAt(0); + if (AddressOps.equal(val, value)) { + out.println("found at " + addr); + } + } + public void epilogue() { + } + }; + VM.getVM().getObjectHeap().iterateRaw(iterator); + } else if (type.equals("heap") || type.equals("perm")) { + HeapVisitor iterator = new DefaultHeapVisitor() { + public boolean doObj(Oop obj) { + int index = 0; + Address start = obj.getHandle(); + long end = obj.getObjectSize(); + while (index < end) { + Address val = start.getAddressAt(index); + if (AddressOps.equal(val, value)) { + out.println("found in " + obj.getHandle()); + break; + } + index += 4; + } + return false; + } + }; + if (type.equals("heap")) { + VM.getVM().getObjectHeap().iterate(iterator); + } else { + VM.getVM().getObjectHeap().iteratePerm(iterator); + } + } else if (type.equals("codecache")) { + CodeCacheVisitor v = new CodeCacheVisitor() { + public void prologue(Address start, Address end) { + } + public void visit(CodeBlob blob) { + boolean printed = false; + Address base = blob.getAddress(); + Address end = base.addOffsetTo(blob.getSize()); + while (base != null && base.lessThan(end)) { + Address val = base.getAddressAt(0); + if (AddressOps.equal(val, value)) { + if (!printed) { + printed = true; + blob.printOn(out); + } + out.println("found at " + base + "\n"); + } + base = base.addOffsetTo(stride); + } + } + public void epilogue() { + } + + + }; + VM.getVM().getCodeCache().iterate(v); + } } }, @@ -957,12 +1057,19 @@ public class CommandProcessor { Threads threads = VM.getVM().getThreads(); boolean all = name.equals("-a"); for (JavaThread thread = threads.first(); thread != null; thread = thread.next()) { - StringWriter sw = new StringWriter(); ByteArrayOutputStream bos = new ByteArrayOutputStream(); thread.printThreadIDOn(new PrintStream(bos)); if (all || bos.toString().equals(name)) { + out.println(bos.toString() + " = " + thread.getAddress()); HTMLGenerator gen = new HTMLGenerator(false); - out.println(gen.genHTMLForJavaStackTrace(thread)); + try { + out.println(gen.genHTMLForJavaStackTrace(thread)); + } catch (Exception e) { + err.println("Error: " + e); + if (verboseExceptions) { + e.printStackTrace(err); + } + } if (!all) return; } } @@ -970,6 +1077,26 @@ public class CommandProcessor { } } }, + new Command("thread", "thread { -a | id }", false) { + public void doit(Tokens t) { + if (t.countTokens() != 1) { + usage(); + } else { + String name = t.nextToken(); + Threads threads = VM.getVM().getThreads(); + boolean all = name.equals("-a"); + for (JavaThread thread = threads.first(); thread != null; thread = thread.next()) { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + thread.printThreadIDOn(new PrintStream(bos)); + if (all || bos.toString().equals(name)) { + out.println(bos.toString() + " = " + thread.getAddress()); + if (!all) return; + } + } + out.println("Couldn't find thread " + name); + } + } + }, new Command("threads", false) { public void doit(Tokens t) { @@ -1161,7 +1288,7 @@ public class CommandProcessor { } } - static Pattern historyPattern = Pattern.compile("((!\\*)|(!\\$)|(!!-?)|(!-?[0-9][0-9]*))"); + static Pattern historyPattern = Pattern.compile("((!\\*)|(!\\$)|(!!-?)|(!-?[0-9][0-9]*)|(![a-zA-Z][^ ]*))"); public void executeCommand(String ln) { if (ln.indexOf('!') != -1) { @@ -1195,14 +1322,37 @@ public class CommandProcessor { result.append(item.at(item.countTokens() - 1)); } else { String tail = cmd.substring(1); - int index = Integer.parseInt(tail); - if (index < 0) { - index = history.size() + index; + switch (tail.charAt(0)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '-': { + int index = Integer.parseInt(tail); + if (index < 0) { + index = history.size() + index; + } + if (index > size) { + err.println("No such history item"); + } else { + result.append((String)history.get(index)); + } + break; + } + default: { + for (int i = history.size() - 1; i >= 0; i--) { + String s = (String)history.get(i); + if (s.startsWith(tail)) { + result.append(s); + } + } } - if (index > size) { - err.println("No such history item"); - } else { - result.append((String)history.get(index)); } } } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/HSDB.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/HSDB.java index 8a2ef3c84c2..df22e2604ea 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/HSDB.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/HSDB.java @@ -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 @@ -985,6 +985,12 @@ public class HSDB implements ObjectHistogramPanel.Listener, SAListener { annoPanel.addAnnotation(new Annotation(curFrame.addressOfInterpreterFrameExpressionStack(), curFrame.addressOfInterpreterFrameTOS(), "Interpreter expression stack")); + Address monBegin = curFrame.interpreterFrameMonitorBegin().address(); + Address monEnd = curFrame.interpreterFrameMonitorEnd().address(); + if (!monBegin.equals(monEnd)) { + annoPanel.addAnnotation(new Annotation(monBegin, monEnd, + "BasicObjectLocks")); + } if (interpreterFrameMethod != null) { // The offset is just to get the right stack slots highlighted in the output int offset = 1; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/BugSpot.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/BugSpot.java index 66bb719e5ce..4902d6f0d86 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/BugSpot.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/BugSpot.java @@ -1,5 +1,5 @@ /* - * Copyright 2001-2003 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2001-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 @@ -294,7 +294,7 @@ public class BugSpot extends JPanel { attachDialog.setSize(400, 300); GraphicsUtilities.centerInContainer(attachDialog.getComponent(), getParentDimension(attachDialog.getComponent())); - attachDialog.show(); + attachDialog.setVisible(true); } public void showThreadsDialog() { @@ -321,7 +321,7 @@ public class BugSpot extends JPanel { getParentDimension(threadsDialog.getComponent())); GraphicsUtilities.centerInContainer(threadsDialog.getComponent(), getParentDimension(threadsDialog.getComponent())); - threadsDialog.show(); + threadsDialog.setVisible(true); } public void showMemoryDialog() { @@ -341,7 +341,7 @@ public class BugSpot extends JPanel { getParentDimension(memoryDialog.getComponent())); GraphicsUtilities.centerInContainer(memoryDialog.getComponent(), getParentDimension(memoryDialog.getComponent())); - memoryDialog.show(); + memoryDialog.setVisible(true); } /** Changes the editor factory this debugger uses to display source @@ -530,7 +530,7 @@ public class BugSpot extends JPanel { addFrame(stackFrame); stackFrame.setSize(400, 200); GraphicsUtilities.moveToInContainer(stackFrame.getComponent(), 0.0f, 1.0f, 0, 20); - stackFrame.show(); + stackFrame.setVisible(true); // Create register panel registerPanel = new RegisterPanel(); @@ -544,7 +544,7 @@ public class BugSpot extends JPanel { registerFrame.setSize(225, 200); GraphicsUtilities.moveToInContainer(registerFrame.getComponent(), 1.0f, 0.0f, 0, 0); - registerFrame.show(); + registerFrame.setVisible(true); resetCurrentThread(); } catch (DebuggerException e) { @@ -979,7 +979,7 @@ public class BugSpot extends JPanel { 1.0f, 0.85f, getParentDimension(editorFrame.getComponent())); - editorFrame.show(); + editorFrame.setVisible(true); shown = true; } code.showLineNumber(lineNo); diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/interpreter/BytecodeDisassembler.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/interpreter/BytecodeDisassembler.java index 7ba662b1262..09e466d99bb 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/interpreter/BytecodeDisassembler.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/interpreter/BytecodeDisassembler.java @@ -1,5 +1,5 @@ /* - * Copyright 2002 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2002-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 @@ -96,10 +96,6 @@ public class BytecodeDisassembler { addBytecodeClass(Bytecodes._dstore, BytecodeStore.class); addBytecodeClass(Bytecodes._astore, BytecodeStore.class); addBytecodeClass(Bytecodes._tableswitch, BytecodeTableswitch.class); - - // only special fast_xxx cases. others are handled differently. - addBytecodeClass(Bytecodes._fast_iaccess_0, BytecodeFastAAccess0.class); - addBytecodeClass(Bytecodes._fast_aaccess_0, BytecodeFastIAccess0.class); } public BytecodeDisassembler(Method method) { diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ConstantPool.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ConstantPool.java index 236ab20822e..730643c45bc 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ConstantPool.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ConstantPool.java @@ -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 @@ -263,11 +263,12 @@ public class ConstantPool extends Oop implements ClassConstants { case JVM_CONSTANT_NameAndType: return "JVM_CONSTANT_NameAndType"; case JVM_CONSTANT_Invalid: return "JVM_CONSTANT_Invalid"; case JVM_CONSTANT_UnresolvedClass: return "JVM_CONSTANT_UnresolvedClass"; + case JVM_CONSTANT_UnresolvedClassInError: return "JVM_CONSTANT_UnresolvedClassInError"; case JVM_CONSTANT_ClassIndex: return "JVM_CONSTANT_ClassIndex"; case JVM_CONSTANT_UnresolvedString: return "JVM_CONSTANT_UnresolvedString"; case JVM_CONSTANT_StringIndex: return "JVM_CONSTANT_StringIndex"; } - throw new InternalError("unknown tag"); + throw new InternalError("Unknown tag: " + tag); } public void iterateFields(OopVisitor visitor, boolean doVMFields) { @@ -304,6 +305,7 @@ public class ConstantPool extends Oop implements ClassConstants { index++; break; + case JVM_CONSTANT_UnresolvedClassInError: case JVM_CONSTANT_UnresolvedClass: case JVM_CONSTANT_Class: case JVM_CONSTANT_UnresolvedString: @@ -409,6 +411,7 @@ public class ConstantPool extends Oop implements ClassConstants { } // case JVM_CONSTANT_ClassIndex: + case JVM_CONSTANT_UnresolvedClassInError: case JVM_CONSTANT_UnresolvedClass: { dos.writeByte(JVM_CONSTANT_Class); String klassName = getSymbolAt(ci).asString(); @@ -464,6 +467,8 @@ public class ConstantPool extends Oop implements ClassConstants { + ", type = " + signatureIndex); break; } + default: + throw new InternalError("unknown tag: " + cpConstType); } // switch } dos.flush(); diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/ClassConstants.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/ClassConstants.java index 431a18261a9..6e34ef5d102 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/ClassConstants.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/ClassConstants.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2002-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 @@ -58,6 +58,9 @@ public interface ClassConstants // Temporary tag while constructing constant pool public static final int JVM_CONSTANT_StringIndex = 103; + // Temporary tag while constructing constant pool + public static final int JVM_CONSTANT_UnresolvedClassInError = 104; + // 1.5 major/minor version numbers from JVM spec. 3rd edition public static final short MAJOR_VERSION = 49; public static final short MINOR_VERSION = 0; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/SignatureIterator.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/SignatureIterator.java index 4707452e334..faf5aaf34b7 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/SignatureIterator.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/SignatureIterator.java @@ -1,5 +1,5 @@ /* - * Copyright 2001 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2001-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 @@ -108,7 +108,7 @@ public abstract class SignatureIterator { return BasicTypeSize.getTArraySize(); } } - throw new RuntimeException("Should not reach here"); + throw new RuntimeException("Should not reach here: char " + (char)_signature.getByteAt(_index) + " @ " + _index + " in " + _signature.asString()); } protected void checkSignatureEnd() { if (_index < _signature.getLength()) { diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/jcore/ClassWriter.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/jcore/ClassWriter.java index 077ce1241e1..cc247d0d5be 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/jcore/ClassWriter.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/jcore/ClassWriter.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2002-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 @@ -238,6 +238,7 @@ public class ClassWriter implements /* imports */ ClassConstants } // case JVM_CONSTANT_ClassIndex: + case JVM_CONSTANT_UnresolvedClassInError: case JVM_CONSTANT_UnresolvedClass: { dos.writeByte(JVM_CONSTANT_Class); String klassName = cpool.getSymbolAt(ci).asString(); @@ -296,6 +297,8 @@ public class ClassWriter implements /* imports */ ClassConstants + ", type = " + signatureIndex); break; } + default: + throw new InternalError("Unknown tag: " + cpConstType); } // switch } } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/ui/FrameWrapper.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/ui/FrameWrapper.java index 4fb9fecd750..d85b31da342 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/ui/FrameWrapper.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/ui/FrameWrapper.java @@ -1,5 +1,5 @@ /* - * Copyright 2001 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2001-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 @@ -39,7 +39,6 @@ public interface FrameWrapper { public void setVisible(boolean visible); public void setSize(int x, int y); public void pack(); - public void show(); public void dispose(); public void setBackground(Color color); public void setResizable(boolean resizable); diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/ui/classbrowser/HTMLGenerator.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/ui/classbrowser/HTMLGenerator.java index c7d29d7d2e5..475b6663fa8 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/ui/classbrowser/HTMLGenerator.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/ui/classbrowser/HTMLGenerator.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2002-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 @@ -95,8 +95,10 @@ public class HTMLGenerator implements /* imports */ ClassConstants { // list tags void beginList() { beginTag("ul"); nl(); } - void li(String s) { wrap("li", s); nl(); } void endList() { endTag("ul"); nl(); } + void beginListItem() { beginTag("li"); } + void endListItem() { endTag("li"); nl(); } + void li(String s) { wrap("li", s); nl(); } // table tags void beginTable(int border) { @@ -505,6 +507,11 @@ public class HTMLGenerator implements /* imports */ ClassConstants { buf.cell(cpool.getSymbolAt(index).asString()); break; + case JVM_CONSTANT_UnresolvedClassInError: + buf.cell("JVM_CONSTANT_UnresolvedClassInError"); + buf.cell(cpool.getSymbolAt(index).asString()); + break; + case JVM_CONSTANT_Class: buf.cell("JVM_CONSTANT_Class"); Klass klass = (Klass) cpool.getObjAt(index); @@ -564,6 +571,9 @@ public class HTMLGenerator implements /* imports */ ClassConstants { buf.cell("JVM_CONSTANT_StringIndex"); buf.cell(Integer.toString(cpool.getIntAt(index))); break; + + default: + throw new InternalError("unknown tag: " + ctag); } buf.endTag("tr"); @@ -671,7 +681,16 @@ public class HTMLGenerator implements /* imports */ ClassConstants { buf.cell(Integer.toString(curBci) + spaces); buf.beginTag("td"); - String instrStr = escapeHTMLSpecialChars(instr.toString()); + String instrStr = null; + try { + instrStr = escapeHTMLSpecialChars(instr.toString()); + } catch (RuntimeException re) { + buf.append("exception during bytecode processing"); + buf.endTag("td"); + buf.endTag("tr"); + re.printStackTrace(); + return; + } if (instr instanceof BytecodeNew) { BytecodeNew newBytecode = (BytecodeNew) instr; @@ -1396,9 +1415,7 @@ public class HTMLGenerator implements /* imports */ ClassConstants { final SymbolFinder symFinder = createSymbolFinder(); final Disassembler disasm = createDisassembler(startPc, code); class NMethodVisitor implements InstructionVisitor { - boolean prevWasCall; public void prologue() { - prevWasCall = false; } public void visit(long currentPc, Instruction instr) { @@ -1418,8 +1435,7 @@ public class HTMLGenerator implements /* imports */ ClassConstants { PCDesc pcDesc = (PCDesc) safepoints.get(longToAddress(currentPc)); - boolean isSafepoint = (pcDesc != null); - if (isSafepoint && prevWasCall) { + if (pcDesc != null) { buf.append(genSafepointInfo(nmethod, pcDesc)); } @@ -1435,11 +1451,6 @@ public class HTMLGenerator implements /* imports */ ClassConstants { } buf.br(); - if (isSafepoint && !prevWasCall) { - buf.append(genSafepointInfo(nmethod, pcDesc)); - } - - prevWasCall = instr.isCall(); } public void epilogue() { @@ -1783,22 +1794,20 @@ public class HTMLGenerator implements /* imports */ ClassConstants { buf.h3("Fields"); buf.beginList(); for (int f = 0; f < numFields; f += InstanceKlass.NEXT_OFFSET) { - int nameIndex = fields.getShortAt(f + InstanceKlass.NAME_INDEX_OFFSET); - int sigIndex = fields.getShortAt(f + InstanceKlass.SIGNATURE_INDEX_OFFSET); - int genSigIndex = fields.getShortAt(f + InstanceKlass.GENERIC_SIGNATURE_INDEX_OFFSET); - Symbol f_name = cp.getSymbolAt(nameIndex); - Symbol f_sig = cp.getSymbolAt(sigIndex); - Symbol f_genSig = (genSigIndex != 0)? cp.getSymbolAt(genSigIndex) : null; - AccessFlags acc = new AccessFlags(fields.getShortAt(f + InstanceKlass.ACCESS_FLAGS_OFFSET)); + sun.jvm.hotspot.oops.Field field = klass.getFieldByIndex(f); + String f_name = ((NamedFieldIdentifier)field.getID()).getName(); + Symbol f_sig = field.getSignature(); + Symbol f_genSig = field.getGenericSignature(); + AccessFlags acc = field.getAccessFlagsObj(); - buf.beginTag("li"); + buf.beginListItem(); buf.append(genFieldModifierString(acc)); buf.append(' '); Formatter sigBuf = new Formatter(genHTML); new SignatureConverter(f_sig, sigBuf.getBuffer()).dispatchField(); buf.append(sigBuf.toString().replace('/', '.')); buf.append(' '); - buf.append(f_name.asString()); + buf.append(f_name); buf.append(';'); // is it generic? if (f_genSig != null) { @@ -1806,7 +1815,8 @@ public class HTMLGenerator implements /* imports */ ClassConstants { buf.append(escapeHTMLSpecialChars(f_genSig.asString())); buf.append("] "); } - buf.endTag("li"); + buf.append(" (offset = " + field.getOffset() + ")"); + buf.endListItem(); } buf.endList(); } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/Assert.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/Assert.java index 62ae9b3e7aa..a675f54adc1 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/Assert.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/Assert.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2005 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 @@ -28,7 +28,7 @@ public class Assert { public static boolean ASSERTS_ENABLED = true; public static void that(boolean test, String message) { - if (!test) { + if (ASSERTS_ENABLED && !test) { throw new AssertionFailure(message); } } From 09ae7d4842be0a9569e3573be0fe99507eb0ccd0 Mon Sep 17 00:00:00 2001 From: Bradford Wetmore Date: Tue, 20 Apr 2010 14:24:06 -0700 Subject: [PATCH 68/91] 6945604: wrong error message in CardImpl.java Reviewed-by: mullan --- jdk/src/share/classes/sun/security/smartcardio/CardImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jdk/src/share/classes/sun/security/smartcardio/CardImpl.java b/jdk/src/share/classes/sun/security/smartcardio/CardImpl.java index e865ff8f9e1..c72103b70fe 100644 --- a/jdk/src/share/classes/sun/security/smartcardio/CardImpl.java +++ b/jdk/src/share/classes/sun/security/smartcardio/CardImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2005-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 @@ -214,7 +214,7 @@ final class CardImpl extends Card { SCardEndTransaction(cardId, SCARD_LEAVE_CARD); } catch (PCSCException e) { handleError(e); - throw new CardException("beginExclusive() failed", e); + throw new CardException("endExclusive() failed", e); } finally { exclusiveThread = null; } From b1867e0dd59da4c02bb9fa1f166e23f704a24183 Mon Sep 17 00:00:00 2001 From: John Cuthbertson Date: Thu, 22 Apr 2010 10:02:38 -0700 Subject: [PATCH 69/91] 6819061: G1: eliminate serial Other times that are proportional to the collection set length 6871109: G1: remove the concept of the scan only prefix Removed scan only regions and associated code. The young portion of the collection set is now constructed incrementally - when a young region is retired as the current allocation region it is added to the collection set. Reviewed-by: apetrusenko, iveresov, tonyp --- .../g1/concurrentG1RefineThread.cpp | 9 +- .../gc_implementation/g1/concurrentMark.hpp | 15 +- .../gc_implementation/g1/g1CollectedHeap.cpp | 448 +++---- .../gc_implementation/g1/g1CollectedHeap.hpp | 101 +- .../g1/g1CollectorPolicy.cpp | 1052 ++++++++--------- .../g1/g1CollectorPolicy.hpp | 189 ++- .../vm/gc_implementation/g1/g1_globals.hpp | 6 +- .../vm/gc_implementation/g1/heapRegion.cpp | 8 +- .../vm/gc_implementation/g1/heapRegion.hpp | 42 +- .../vm/gc_implementation/g1/survRateGroup.cpp | 20 +- .../vm/gc_implementation/g1/survRateGroup.hpp | 14 +- .../src/share/vm/services/g1MemoryPool.cpp | 4 +- 12 files changed, 895 insertions(+), 1013 deletions(-) diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentG1RefineThread.cpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentG1RefineThread.cpp index 741aaf65cc2..2b66edf6101 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentG1RefineThread.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentG1RefineThread.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2001-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2001-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,9 +69,9 @@ void ConcurrentG1RefineThread::sample_young_list_rs_lengths() { G1CollectorPolicy* g1p = g1h->g1_policy(); if (g1p->adaptive_young_list_length()) { int regions_visited = 0; - g1h->young_list_rs_length_sampling_init(); - while (g1h->young_list_rs_length_sampling_more()) { - g1h->young_list_rs_length_sampling_next(); + g1h->young_list()->rs_length_sampling_init(); + while (g1h->young_list()->rs_length_sampling_more()) { + g1h->young_list()->rs_length_sampling_next(); ++regions_visited; // we try to yield every time we visit 10 regions @@ -162,6 +162,7 @@ void ConcurrentG1RefineThread::run() { if (_worker_id >= cg1r()->worker_thread_num()) { run_young_rs_sampling(); terminate(); + return; } _vtime_start = os::elapsedVTime(); diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp index 28f8c2a7e8a..1dc0e6d54ab 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp @@ -1,5 +1,5 @@ /* - * Copyright 2001-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2001-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 @@ -733,6 +733,19 @@ public: // to determine whether any heap regions are located above the finger. void registerCSetRegion(HeapRegion* hr); + // Registers the maximum region-end associated with a set of + // regions with CM. Again this is used to determine whether any + // heap regions are located above the finger. + void register_collection_set_finger(HeapWord* max_finger) { + // max_finger is the highest heap region end of the regions currently + // contained in the collection set. If this value is larger than + // _min_finger then we need to gray objects. + // This routine is like registerCSetRegion but for an entire + // collection of regions. + if (max_finger > _min_finger) + _should_gray_objects = true; + } + // Returns "true" if at least one mark has been completed. bool at_least_one_mark_complete() { return _at_least_one_mark_complete; } diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp index 6857d8fda97..2881eb6f335 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp @@ -30,7 +30,7 @@ size_t G1CollectedHeap::_humongous_object_threshold_in_words = 0; // turn it on so that the contents of the young list (scan-only / // to-be-collected) are printed at "strategic" points before / during // / after the collection --- this is useful for debugging -#define SCAN_ONLY_VERBOSE 0 +#define YOUNG_LIST_VERBOSE 0 // CURRENT STATUS // This file is under construction. Search for "FIXME". @@ -133,8 +133,7 @@ public: YoungList::YoungList(G1CollectedHeap* g1h) : _g1h(g1h), _head(NULL), - _scan_only_head(NULL), _scan_only_tail(NULL), _curr_scan_only(NULL), - _length(0), _scan_only_length(0), + _length(0), _last_sampled_rs_lengths(0), _survivor_head(NULL), _survivor_tail(NULL), _survivor_length(0) { @@ -166,48 +165,6 @@ void YoungList::add_survivor_region(HeapRegion* hr) { ++_survivor_length; } -HeapRegion* YoungList::pop_region() { - while (_head != NULL) { - assert( length() > 0, "list should not be empty" ); - HeapRegion* ret = _head; - _head = ret->get_next_young_region(); - ret->set_next_young_region(NULL); - --_length; - assert(ret->is_young(), "region should be very young"); - - // Replace 'Survivor' region type with 'Young'. So the region will - // be treated as a young region and will not be 'confused' with - // newly created survivor regions. - if (ret->is_survivor()) { - ret->set_young(); - } - - if (!ret->is_scan_only()) { - return ret; - } - - // scan-only, we'll add it to the scan-only list - if (_scan_only_tail == NULL) { - guarantee( _scan_only_head == NULL, "invariant" ); - - _scan_only_head = ret; - _curr_scan_only = ret; - } else { - guarantee( _scan_only_head != NULL, "invariant" ); - _scan_only_tail->set_next_young_region(ret); - } - guarantee( ret->get_next_young_region() == NULL, "invariant" ); - _scan_only_tail = ret; - - // no need to be tagged as scan-only any more - ret->set_young(); - - ++_scan_only_length; - } - assert( length() == 0, "list should be empty" ); - return NULL; -} - void YoungList::empty_list(HeapRegion* list) { while (list != NULL) { HeapRegion* next = list->get_next_young_region(); @@ -225,12 +182,6 @@ void YoungList::empty_list() { _head = NULL; _length = 0; - empty_list(_scan_only_head); - _scan_only_head = NULL; - _scan_only_tail = NULL; - _scan_only_length = 0; - _curr_scan_only = NULL; - empty_list(_survivor_head); _survivor_head = NULL; _survivor_tail = NULL; @@ -248,11 +199,11 @@ bool YoungList::check_list_well_formed() { HeapRegion* curr = _head; HeapRegion* last = NULL; while (curr != NULL) { - if (!curr->is_young() || curr->is_scan_only()) { + if (!curr->is_young()) { gclog_or_tty->print_cr("### YOUNG REGION "PTR_FORMAT"-"PTR_FORMAT" " - "incorrectly tagged (%d, %d)", + "incorrectly tagged (y: %d, surv: %d)", curr->bottom(), curr->end(), - curr->is_young(), curr->is_scan_only()); + curr->is_young(), curr->is_survivor()); ret = false; } ++length; @@ -267,47 +218,10 @@ bool YoungList::check_list_well_formed() { length, _length); } - bool scan_only_ret = true; - length = 0; - curr = _scan_only_head; - last = NULL; - while (curr != NULL) { - if (!curr->is_young() || curr->is_scan_only()) { - gclog_or_tty->print_cr("### SCAN-ONLY REGION "PTR_FORMAT"-"PTR_FORMAT" " - "incorrectly tagged (%d, %d)", - curr->bottom(), curr->end(), - curr->is_young(), curr->is_scan_only()); - scan_only_ret = false; - } - ++length; - last = curr; - curr = curr->get_next_young_region(); - } - scan_only_ret = scan_only_ret && (length == _scan_only_length); - - if ( (last != _scan_only_tail) || - (_scan_only_head == NULL && _scan_only_tail != NULL) || - (_scan_only_head != NULL && _scan_only_tail == NULL) ) { - gclog_or_tty->print_cr("## _scan_only_tail is set incorrectly"); - scan_only_ret = false; - } - - if (_curr_scan_only != NULL && _curr_scan_only != _scan_only_head) { - gclog_or_tty->print_cr("### _curr_scan_only is set incorrectly"); - scan_only_ret = false; - } - - if (!scan_only_ret) { - gclog_or_tty->print_cr("### SCAN-ONLY LIST seems not well formed!"); - gclog_or_tty->print_cr("### list has %d entries, _scan_only_length is %d", - length, _scan_only_length); - } - - return ret && scan_only_ret; + return ret; } -bool YoungList::check_list_empty(bool ignore_scan_only_list, - bool check_sample) { +bool YoungList::check_list_empty(bool check_sample) { bool ret = true; if (_length != 0) { @@ -327,28 +241,7 @@ bool YoungList::check_list_empty(bool ignore_scan_only_list, gclog_or_tty->print_cr("### YOUNG LIST does not seem empty"); } - if (ignore_scan_only_list) - return ret; - - bool scan_only_ret = true; - if (_scan_only_length != 0) { - gclog_or_tty->print_cr("### SCAN-ONLY LIST should have 0 length, not %d", - _scan_only_length); - scan_only_ret = false; - } - if (_scan_only_head != NULL) { - gclog_or_tty->print_cr("### SCAN-ONLY LIST does not have a NULL head"); - scan_only_ret = false; - } - if (_scan_only_tail != NULL) { - gclog_or_tty->print_cr("### SCAN-ONLY LIST does not have a NULL tail"); - scan_only_ret = false; - } - if (!scan_only_ret) { - gclog_or_tty->print_cr("### SCAN-ONLY LIST does not seem empty"); - } - - return ret && scan_only_ret; + return ret; } void @@ -365,7 +258,18 @@ YoungList::rs_length_sampling_more() { void YoungList::rs_length_sampling_next() { assert( _curr != NULL, "invariant" ); - _sampled_rs_lengths += _curr->rem_set()->occupied(); + size_t rs_length = _curr->rem_set()->occupied(); + + _sampled_rs_lengths += rs_length; + + // The current region may not yet have been added to the + // incremental collection set (it gets added when it is + // retired as the current allocation region). + if (_curr->in_collection_set()) { + // Update the collection set policy information for this region + _g1h->g1_policy()->update_incremental_cset_info(_curr, rs_length); + } + _curr = _curr->get_next_young_region(); if (_curr == NULL) { _last_sampled_rs_lengths = _sampled_rs_lengths; @@ -375,54 +279,46 @@ YoungList::rs_length_sampling_next() { void YoungList::reset_auxilary_lists() { - // We could have just "moved" the scan-only list to the young list. - // However, the scan-only list is ordered according to the region - // age in descending order, so, by moving one entry at a time, we - // ensure that it is recreated in ascending order. - guarantee( is_empty(), "young list should be empty" ); assert(check_list_well_formed(), "young list should be well formed"); // Add survivor regions to SurvRateGroup. _g1h->g1_policy()->note_start_adding_survivor_regions(); _g1h->g1_policy()->finished_recalculating_age_indexes(true /* is_survivors */); + for (HeapRegion* curr = _survivor_head; curr != NULL; curr = curr->get_next_young_region()) { _g1h->g1_policy()->set_region_survivors(curr); + + // The region is a non-empty survivor so let's add it to + // the incremental collection set for the next evacuation + // pause. + _g1h->g1_policy()->add_region_to_incremental_cset_rhs(curr); } _g1h->g1_policy()->note_stop_adding_survivor_regions(); + _head = _survivor_head; + _length = _survivor_length; if (_survivor_head != NULL) { - _head = _survivor_head; - _length = _survivor_length + _scan_only_length; - _survivor_tail->set_next_young_region(_scan_only_head); - } else { - _head = _scan_only_head; - _length = _scan_only_length; + assert(_survivor_tail != NULL, "cause it shouldn't be"); + assert(_survivor_length > 0, "invariant"); + _survivor_tail->set_next_young_region(NULL); } - for (HeapRegion* curr = _scan_only_head; - curr != NULL; - curr = curr->get_next_young_region()) { - curr->recalculate_age_in_surv_rate_group(); - } - _scan_only_head = NULL; - _scan_only_tail = NULL; - _scan_only_length = 0; - _curr_scan_only = NULL; + // Don't clear the survivor list handles until the start of + // the next evacuation pause - we need it in order to re-tag + // the survivor regions from this evacuation pause as 'young' + // at the start of the next. - _survivor_head = NULL; - _survivor_tail = NULL; - _survivor_length = 0; _g1h->g1_policy()->finished_recalculating_age_indexes(false /* is_survivors */); assert(check_list_well_formed(), "young list should be well formed"); } void YoungList::print() { - HeapRegion* lists[] = {_head, _scan_only_head, _survivor_head}; - const char* names[] = {"YOUNG", "SCAN-ONLY", "SURVIVOR"}; + HeapRegion* lists[] = {_head, _survivor_head}; + const char* names[] = {"YOUNG", "SURVIVOR"}; for (unsigned int list = 0; list < ARRAY_SIZE(lists); ++list) { gclog_or_tty->print_cr("%s LIST CONTENTS", names[list]); @@ -431,7 +327,7 @@ void YoungList::print() { gclog_or_tty->print_cr(" empty"); while (curr != NULL) { gclog_or_tty->print_cr(" [%08x-%08x], t: %08x, P: %08x, N: %08x, C: %08x, " - "age: %4d, y: %d, s-o: %d, surv: %d", + "age: %4d, y: %d, surv: %d", curr->bottom(), curr->end(), curr->top(), curr->prev_top_at_mark_start(), @@ -439,7 +335,6 @@ void YoungList::print() { curr->top_at_conc_mark_count(), curr->age_in_surv_rate_group_cond(), curr->is_young(), - curr->is_scan_only(), curr->is_survivor()); curr = curr->get_next_young_region(); } @@ -707,6 +602,12 @@ G1CollectedHeap::attempt_allocation_slow(size_t word_size, // region below. if (_cur_alloc_region != NULL) { // We're finished with the _cur_alloc_region. + // As we're builing (at least the young portion) of the collection + // set incrementally we'll add the current allocation region to + // the collection set here. + if (_cur_alloc_region->is_young()) { + g1_policy()->add_region_to_incremental_cset_lhs(_cur_alloc_region); + } _summary_bytes_used += _cur_alloc_region->used(); _cur_alloc_region = NULL; } @@ -820,6 +721,12 @@ void G1CollectedHeap::abandon_cur_alloc_region() { _free_regions++; free_region(_cur_alloc_region); } else { + // As we're builing (at least the young portion) of the collection + // set incrementally we'll add the current allocation region to + // the collection set here. + if (_cur_alloc_region->is_young()) { + g1_policy()->add_region_to_incremental_cset_lhs(_cur_alloc_region); + } _summary_bytes_used += _cur_alloc_region->used(); } _cur_alloc_region = NULL; @@ -975,6 +882,15 @@ void G1CollectedHeap::do_collection(bool full, bool clear_all_soft_refs, g1_rem_set()->as_HRInto_G1RemSet()->cleanupHRRS(); tear_down_region_lists(); set_used_regions_to_need_zero_fill(); + + // We may have added regions to the current incremental collection + // set between the last GC or pause and now. We need to clear the + // incremental collection set and then start rebuilding it afresh + // after this full GC. + abandon_collection_set(g1_policy()->inc_cset_head()); + g1_policy()->clear_incremental_cset(); + g1_policy()->stop_incremental_cset_building(); + if (g1_policy()->in_young_gc_mode()) { empty_young_list(); g1_policy()->set_full_young_gcs(true); @@ -1058,6 +974,15 @@ void G1CollectedHeap::do_collection(bool full, bool clear_all_soft_refs, perm()->compute_new_size(); } + // Start a new incremental collection set for the next pause + assert(g1_policy()->collection_set() == NULL, "must be"); + g1_policy()->start_incremental_cset_building(); + + // Clear the _cset_fast_test bitmap in anticipation of adding + // regions to the incremental collection set for the next + // evacuation pause. + clear_cset_fast_test(); + double end = os::elapsedTime(); g1_policy()->record_full_collection_end(); @@ -1076,7 +1001,9 @@ void G1CollectedHeap::do_collection(bool full, bool clear_all_soft_refs, if (g1_policy()->in_young_gc_mode()) { _young_list->reset_sampled_info(); - assert( check_young_list_empty(false, false), + // At this point there should be no regions in the + // entire heap tagged as young. + assert( check_young_list_empty(true /* check_heap */), "young list should be empty at this point"); } @@ -1573,6 +1500,20 @@ jint G1CollectedHeap::initialize() { _g1h = this; + _in_cset_fast_test_length = max_regions(); + _in_cset_fast_test_base = NEW_C_HEAP_ARRAY(bool, _in_cset_fast_test_length); + + // We're biasing _in_cset_fast_test to avoid subtracting the + // beginning of the heap every time we want to index; basically + // it's the same with what we do with the card table. + _in_cset_fast_test = _in_cset_fast_test_base - + ((size_t) _g1_reserved.start() >> HeapRegion::LogOfHRGrainBytes); + + // Clear the _cset_fast_test bitmap in anticipation of adding + // regions to the incremental collection set for the first + // evacuation pause. + clear_cset_fast_test(); + // Create the ConcurrentMark data structure and thread. // (Must do this late, so that "max_regions" is defined.) _cm = new ConcurrentMark(heap_rs, (int) max_regions()); @@ -2751,25 +2692,19 @@ G1CollectedHeap::do_collection_pause_at_safepoint() { double start_time_sec = os::elapsedTime(); size_t start_used_bytes = used(); +#if YOUNG_LIST_VERBOSE + gclog_or_tty->print_cr("\nBefore recording pause start.\nYoung_list:"); + _young_list->print(); + g1_policy()->print_collection_set(g1_policy()->inc_cset_head(), gclog_or_tty); +#endif // YOUNG_LIST_VERBOSE + g1_policy()->record_collection_pause_start(start_time_sec, start_used_bytes); - guarantee(_in_cset_fast_test == NULL, "invariant"); - guarantee(_in_cset_fast_test_base == NULL, "invariant"); - _in_cset_fast_test_length = max_regions(); - _in_cset_fast_test_base = - NEW_C_HEAP_ARRAY(bool, _in_cset_fast_test_length); - memset(_in_cset_fast_test_base, false, - _in_cset_fast_test_length * sizeof(bool)); - // We're biasing _in_cset_fast_test to avoid subtracting the - // beginning of the heap every time we want to index; basically - // it's the same with what we do with the card table. - _in_cset_fast_test = _in_cset_fast_test_base - - ((size_t) _g1_reserved.start() >> HeapRegion::LogOfHRGrainBytes); - -#if SCAN_ONLY_VERBOSE +#if YOUNG_LIST_VERBOSE + gclog_or_tty->print_cr("\nAfter recording pause start.\nYoung_list:"); _young_list->print(); -#endif // SCAN_ONLY_VERBOSE +#endif // YOUNG_LIST_VERBOSE if (g1_policy()->during_initial_mark_pause()) { concurrent_mark()->checkpointRootsInitialPre(); @@ -2796,12 +2731,15 @@ G1CollectedHeap::do_collection_pause_at_safepoint() { if (mark_in_progress()) concurrent_mark()->newCSet(); - // Now choose the CS. - g1_policy()->choose_collection_set(); +#if YOUNG_LIST_VERBOSE + gclog_or_tty->print_cr("\nBefore choosing collection set.\nYoung_list:"); + _young_list->print(); + g1_policy()->print_collection_set(g1_policy()->inc_cset_head(), gclog_or_tty); +#endif // YOUNG_LIST_VERBOSE - // We may abandon a pause if we find no region that will fit in the MMU - // pause. - bool abandoned = (g1_policy()->collection_set() == NULL); + // Now choose the CS. We may abandon a pause if we find no + // region that will fit in the MMU pause. + bool abandoned = g1_policy()->choose_collection_set(); // Nothing to do if we were unable to choose a collection set. if (!abandoned) { @@ -2819,40 +2757,64 @@ G1CollectedHeap::do_collection_pause_at_safepoint() { // Actually do the work... evacuate_collection_set(); + free_collection_set(g1_policy()->collection_set()); g1_policy()->clear_collection_set(); - FREE_C_HEAP_ARRAY(bool, _in_cset_fast_test_base); - // this is more for peace of mind; we're nulling them here and - // we're expecting them to be null at the beginning of the next GC - _in_cset_fast_test = NULL; - _in_cset_fast_test_base = NULL; - cleanup_surviving_young_words(); + // Start a new incremental collection set for the next pause. + g1_policy()->start_incremental_cset_building(); + + // Clear the _cset_fast_test bitmap in anticipation of adding + // regions to the incremental collection set for the next + // evacuation pause. + clear_cset_fast_test(); + if (g1_policy()->in_young_gc_mode()) { _young_list->reset_sampled_info(); - assert(check_young_list_empty(true), - "young list should be empty"); -#if SCAN_ONLY_VERBOSE + // Don't check the whole heap at this point as the + // GC alloc regions from this pause have been tagged + // as survivors and moved on to the survivor list. + // Survivor regions will fail the !is_young() check. + assert(check_young_list_empty(false /* check_heap */), + "young list should be empty"); + +#if YOUNG_LIST_VERBOSE + gclog_or_tty->print_cr("Before recording survivors.\nYoung List:"); _young_list->print(); -#endif // SCAN_ONLY_VERBOSE +#endif // YOUNG_LIST_VERBOSE g1_policy()->record_survivor_regions(_young_list->survivor_length(), _young_list->first_survivor_region(), _young_list->last_survivor_region()); + _young_list->reset_auxilary_lists(); } } else { - if (_in_cset_fast_test != NULL) { - assert(_in_cset_fast_test_base != NULL, "Since _in_cset_fast_test isn't"); - FREE_C_HEAP_ARRAY(bool, _in_cset_fast_test_base); - // this is more for peace of mind; we're nulling them here and - // we're expecting them to be null at the beginning of the next GC - _in_cset_fast_test = NULL; - _in_cset_fast_test_base = NULL; - } + // We have abandoned the current collection. This can only happen + // if we're not doing young or partially young collections, and + // we didn't find an old region that we're able to collect within + // the allowed time. + + assert(g1_policy()->collection_set() == NULL, "should be"); + assert(_young_list->length() == 0, "because it should be"); + + // This should be a no-op. + abandon_collection_set(g1_policy()->inc_cset_head()); + + g1_policy()->clear_incremental_cset(); + g1_policy()->stop_incremental_cset_building(); + + // Start a new incremental collection set for the next pause. + g1_policy()->start_incremental_cset_building(); + + // Clear the _cset_fast_test bitmap in anticipation of adding + // regions to the incremental collection set for the next + // evacuation pause. + clear_cset_fast_test(); + // This looks confusing, because the DPT should really be empty // at this point -- since we have not done any collection work, // there should not be any derived pointers in the table to update; @@ -2886,9 +2848,11 @@ G1CollectedHeap::do_collection_pause_at_safepoint() { doConcurrentMark(); } -#if SCAN_ONLY_VERBOSE +#if YOUNG_LIST_VERBOSE + gclog_or_tty->print_cr("\nEnd of the pause.\nYoung_list:"); _young_list->print(); -#endif // SCAN_ONLY_VERBOSE + g1_policy()->print_collection_set(g1_policy()->inc_cset_head(), gclog_or_tty); +#endif // YOUNG_LIST_VERBOSE double end_time_sec = os::elapsedTime(); double pause_time_ms = (end_time_sec - start_time_sec) * MILLIUNITS; @@ -4027,16 +3991,13 @@ public: OopsInHeapRegionClosure *scan_root_cl; OopsInHeapRegionClosure *scan_perm_cl; - OopsInHeapRegionClosure *scan_so_cl; if (_g1h->g1_policy()->during_initial_mark_pause()) { scan_root_cl = &scan_mark_root_cl; scan_perm_cl = &scan_mark_perm_cl; - scan_so_cl = &scan_mark_heap_rs_cl; } else { scan_root_cl = &only_scan_root_cl; scan_perm_cl = &only_scan_perm_cl; - scan_so_cl = &only_scan_heap_rs_cl; } pss.start_strong_roots(); @@ -4044,7 +4005,6 @@ public: SharedHeap::SO_AllClasses, scan_root_cl, &push_heap_rs_cl, - scan_so_cl, scan_perm_cl, i); pss.end_strong_roots(); @@ -4106,7 +4066,6 @@ g1_process_strong_roots(bool collecting_perm_gen, SharedHeap::ScanningOption so, OopClosure* scan_non_heap_roots, OopsInHeapRegionClosure* scan_rs, - OopsInHeapRegionClosure* scan_so, OopsInGenClosure* scan_perm, int worker_i) { // First scan the strong roots, including the perm gen. @@ -4126,6 +4085,7 @@ g1_process_strong_roots(bool collecting_perm_gen, &buf_scan_non_heap_roots, &eager_scan_code_roots, &buf_scan_perm); + // Finish up any enqueued closure apps. buf_scan_non_heap_roots.done(); buf_scan_perm.done(); @@ -4148,9 +4108,6 @@ g1_process_strong_roots(bool collecting_perm_gen, // XXX What should this be doing in the parallel case? g1_policy()->record_collection_pause_end_CH_strong_roots(); - if (scan_so != NULL) { - scan_scan_only_set(scan_so, worker_i); - } // Now scan the complement of the collection set. if (scan_rs != NULL) { g1_rem_set()->oops_into_collection_set_do(scan_rs, worker_i); @@ -4163,54 +4120,6 @@ g1_process_strong_roots(bool collecting_perm_gen, _process_strong_tasks->all_tasks_completed(); } -void -G1CollectedHeap::scan_scan_only_region(HeapRegion* r, - OopsInHeapRegionClosure* oc, - int worker_i) { - HeapWord* startAddr = r->bottom(); - HeapWord* endAddr = r->used_region().end(); - - oc->set_region(r); - - HeapWord* p = r->bottom(); - HeapWord* t = r->top(); - guarantee( p == r->next_top_at_mark_start(), "invariant" ); - while (p < t) { - oop obj = oop(p); - p += obj->oop_iterate(oc); - } -} - -void -G1CollectedHeap::scan_scan_only_set(OopsInHeapRegionClosure* oc, - int worker_i) { - double start = os::elapsedTime(); - - BufferingOopsInHeapRegionClosure boc(oc); - - FilterInHeapRegionAndIntoCSClosure scan_only(this, &boc); - FilterAndMarkInHeapRegionAndIntoCSClosure scan_and_mark(this, &boc, concurrent_mark()); - - OopsInHeapRegionClosure *foc; - if (g1_policy()->during_initial_mark_pause()) - foc = &scan_and_mark; - else - foc = &scan_only; - - HeapRegion* hr; - int n = 0; - while ((hr = _young_list->par_get_next_scan_only_region()) != NULL) { - scan_scan_only_region(hr, foc, worker_i); - ++n; - } - boc.done(); - - double closure_app_s = boc.closure_app_seconds(); - g1_policy()->record_obj_copy_time(worker_i, closure_app_s * 1000.0); - double ms = (os::elapsedTime() - start - closure_app_s)*1000.0; - g1_policy()->record_scan_only_time(worker_i, ms, n); -} - void G1CollectedHeap::g1_process_weak_roots(OopClosure* root_closure, OopClosure* non_root_closure) { @@ -4409,17 +4318,14 @@ void G1CollectedHeap::dirtyCardsForYoungRegions(CardTableModRefBS* ct_bs, HeapRe class G1ParCleanupCTTask : public AbstractGangTask { CardTableModRefBS* _ct_bs; G1CollectedHeap* _g1h; - HeapRegion* volatile _so_head; HeapRegion* volatile _su_head; public: G1ParCleanupCTTask(CardTableModRefBS* ct_bs, G1CollectedHeap* g1h, - HeapRegion* scan_only_list, HeapRegion* survivor_list) : AbstractGangTask("G1 Par Cleanup CT Task"), _ct_bs(ct_bs), _g1h(g1h), - _so_head(scan_only_list), _su_head(survivor_list) { } @@ -4428,14 +4334,13 @@ public: while (r = _g1h->pop_dirty_cards_region()) { clear_cards(r); } - // Redirty the cards of the scan-only and survivor regions. - dirty_list(&this->_so_head); + // Redirty the cards of the survivor regions. dirty_list(&this->_su_head); } void clear_cards(HeapRegion* r) { - // Cards for Survivor and Scan-Only regions will be dirtied later. - if (!r->is_scan_only() && !r->is_survivor()) { + // Cards for Survivor regions will be dirtied later. + if (!r->is_survivor()) { _ct_bs->clear(MemRegion(r->bottom(), r->end())); } } @@ -4468,7 +4373,7 @@ public: virtual bool doHeapRegion(HeapRegion* r) { MemRegion mr(r->bottom(), r->end()); - if (r->is_scan_only() || r->is_survivor()) { + if (r->is_survivor()) { _ct_bs->verify_dirty_region(mr); } else { _ct_bs->verify_clean_region(mr); @@ -4484,8 +4389,8 @@ void G1CollectedHeap::cleanUpCardTable() { // Iterate over the dirty cards region list. G1ParCleanupCTTask cleanup_task(ct_bs, this, - _young_list->first_scan_only_region(), _young_list->first_survivor_region()); + if (ParallelGCThreads > 0) { set_par_threads(workers()->total_workers()); workers()->run_task(&cleanup_task); @@ -4501,12 +4406,12 @@ void G1CollectedHeap::cleanUpCardTable() { } r->set_next_dirty_cards_region(NULL); } - // now, redirty the cards of the scan-only and survivor regions + // now, redirty the cards of the survivor regions // (it seemed faster to do it this way, instead of iterating over // all regions and then clearing / dirtying as appropriate) - dirtyCardsForYoungRegions(ct_bs, _young_list->first_scan_only_region()); dirtyCardsForYoungRegions(ct_bs, _young_list->first_survivor_region()); } + double elapsed = os::elapsedTime() - start; g1_policy()->record_clear_ct_time( elapsed * 1000.0); #ifndef PRODUCT @@ -4527,6 +4432,11 @@ void G1CollectedHeap::free_collection_set(HeapRegion* cs_head) { double young_time_ms = 0.0; double non_young_time_ms = 0.0; + // Since the collection set is a superset of the the young list, + // all we need to do to clear the young list is clear its + // head and length, and unlink any young regions in the code below + _young_list->clear(); + G1CollectorPolicy* policy = g1_policy(); double start_sec = os::elapsedTime(); @@ -4570,6 +4480,12 @@ void G1CollectedHeap::free_collection_set(HeapRegion* cs_head) { guarantee( (size_t)index < policy->young_cset_length(), "invariant" ); size_t words_survived = _surviving_young_words[index]; cur->record_surv_words_in_group(words_survived); + + // At this point the we have 'popped' cur from the collection set + // (linked via next_in_collection_set()) but it is still in the + // young list (linked via next_young_region()). Clear the + // _next_young_region field. + cur->set_next_young_region(NULL); } else { int index = cur->young_index_in_cset(); guarantee( index == -1, "invariant" ); @@ -4585,7 +4501,6 @@ void G1CollectedHeap::free_collection_set(HeapRegion* cs_head) { "Should not have empty regions in a CS."); free_region(cur); } else { - guarantee( !cur->is_scan_only(), "should not be scan only" ); cur->uninstall_surv_rate_group(); if (cur->is_young()) cur->set_young_index_in_cset(-1); @@ -4609,6 +4524,27 @@ void G1CollectedHeap::free_collection_set(HeapRegion* cs_head) { policy->record_non_young_free_cset_time_ms(non_young_time_ms); } +// This routine is similar to the above but does not record +// any policy statistics or update free lists; we are abandoning +// the current incremental collection set in preparation of a +// full collection. After the full GC we will start to build up +// the incremental collection set again. +// This is only called when we're doing a full collection +// and is immediately followed by the tearing down of the young list. + +void G1CollectedHeap::abandon_collection_set(HeapRegion* cs_head) { + HeapRegion* cur = cs_head; + + while (cur != NULL) { + HeapRegion* next = cur->next_in_collection_set(); + assert(cur->in_collection_set(), "bad CS"); + cur->set_next_in_collection_set(NULL); + cur->set_in_collection_set(false); + cur->set_young_index_in_cset(-1); + cur = next; + } +} + HeapRegion* G1CollectedHeap::alloc_region_from_unclean_list_locked(bool zero_filled) { assert(ZF_mon->owned_by_self(), "Precondition"); @@ -4975,12 +4911,10 @@ public: bool success() { return _success; } }; -bool G1CollectedHeap::check_young_list_empty(bool ignore_scan_only_list, - bool check_sample) { - bool ret = true; +bool G1CollectedHeap::check_young_list_empty(bool check_heap, bool check_sample) { + bool ret = _young_list->check_list_empty(check_sample); - ret = _young_list->check_list_empty(ignore_scan_only_list, check_sample); - if (!ignore_scan_only_list) { + if (check_heap) { NoYoungRegionsClosure closure; heap_region_iterate(&closure); ret = ret && closure.success(); diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp index 478e6588093..4aad5dbd661 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp @@ -1,5 +1,5 @@ /* - * Copyright 2001-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2001-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 @@ -81,33 +81,29 @@ private: HeapRegion* _head; - HeapRegion* _scan_only_head; - HeapRegion* _scan_only_tail; + HeapRegion* _survivor_head; + HeapRegion* _survivor_tail; + + HeapRegion* _curr; + size_t _length; - size_t _scan_only_length; + size_t _survivor_length; size_t _last_sampled_rs_lengths; size_t _sampled_rs_lengths; - HeapRegion* _curr; - HeapRegion* _curr_scan_only; - HeapRegion* _survivor_head; - HeapRegion* _survivor_tail; - size_t _survivor_length; - - void empty_list(HeapRegion* list); + void empty_list(HeapRegion* list); public: YoungList(G1CollectedHeap* g1h); - void push_region(HeapRegion* hr); - void add_survivor_region(HeapRegion* hr); - HeapRegion* pop_region(); - void empty_list(); - bool is_empty() { return _length == 0; } - size_t length() { return _length; } - size_t scan_only_length() { return _scan_only_length; } - size_t survivor_length() { return _survivor_length; } + void push_region(HeapRegion* hr); + void add_survivor_region(HeapRegion* hr); + + void empty_list(); + bool is_empty() { return _length == 0; } + size_t length() { return _length; } + size_t survivor_length() { return _survivor_length; } void rs_length_sampling_init(); bool rs_length_sampling_more(); @@ -120,22 +116,21 @@ public: // for development purposes void reset_auxilary_lists(); + void clear() { _head = NULL; _length = 0; } + + void clear_survivors() { + _survivor_head = NULL; + _survivor_tail = NULL; + _survivor_length = 0; + } + HeapRegion* first_region() { return _head; } - HeapRegion* first_scan_only_region() { return _scan_only_head; } HeapRegion* first_survivor_region() { return _survivor_head; } HeapRegion* last_survivor_region() { return _survivor_tail; } - HeapRegion* par_get_next_scan_only_region() { - MutexLockerEx x(ParGCRareEvent_lock, Mutex::_no_safepoint_check_flag); - HeapRegion* ret = _curr_scan_only; - if (ret != NULL) - _curr_scan_only = ret->get_next_young_region(); - return ret; - } // debugging bool check_list_well_formed(); - bool check_list_empty(bool ignore_scan_only_list, - bool check_sample = true); + bool check_list_empty(bool check_sample = true); void print(); }; @@ -405,8 +400,7 @@ public: assert(_in_cset_fast_test_base != NULL, "sanity"); assert(r->in_collection_set(), "invariant"); int index = r->hrs_index(); - assert(0 <= (size_t) index && (size_t) index < _in_cset_fast_test_length, - "invariant"); + assert(0 <= index && (size_t) index < _in_cset_fast_test_length, "invariant"); assert(!_in_cset_fast_test_base[index], "invariant"); _in_cset_fast_test_base[index] = true; } @@ -431,6 +425,12 @@ public: } } + void clear_cset_fast_test() { + assert(_in_cset_fast_test_base != NULL, "sanity"); + memset(_in_cset_fast_test_base, false, + _in_cset_fast_test_length * sizeof(bool)); + } + protected: // Shrink the garbage-first heap by at most the given size (in bytes!). @@ -476,6 +476,10 @@ protected: // regions. void free_collection_set(HeapRegion* cs_head); + // Abandon the current collection set without recording policy + // statistics or updating free lists. + void abandon_collection_set(HeapRegion* cs_head); + // Applies "scan_non_heap_roots" to roots outside the heap, // "scan_rs" to roots inside the heap (having done "set_region" to // indicate the region in which the root resides), and does "scan_perm" @@ -488,16 +492,9 @@ protected: SharedHeap::ScanningOption so, OopClosure* scan_non_heap_roots, OopsInHeapRegionClosure* scan_rs, - OopsInHeapRegionClosure* scan_so, OopsInGenClosure* scan_perm, int worker_i); - void scan_scan_only_set(OopsInHeapRegionClosure* oc, - int worker_i); - void scan_scan_only_region(HeapRegion* hr, - OopsInHeapRegionClosure* oc, - int worker_i); - // Apply "blk" to all the weak roots of the system. These include // JNI weak roots, the code cache, system dictionary, symbol table, // string table, and referents of reachable weak refs. @@ -1136,36 +1133,14 @@ public: void set_region_short_lived_locked(HeapRegion* hr); // add appropriate methods for any other surv rate groups - void young_list_rs_length_sampling_init() { - _young_list->rs_length_sampling_init(); - } - bool young_list_rs_length_sampling_more() { - return _young_list->rs_length_sampling_more(); - } - void young_list_rs_length_sampling_next() { - _young_list->rs_length_sampling_next(); - } - size_t young_list_sampled_rs_lengths() { - return _young_list->sampled_rs_lengths(); - } - - size_t young_list_length() { return _young_list->length(); } - size_t young_list_scan_only_length() { - return _young_list->scan_only_length(); } - - HeapRegion* pop_region_from_young_list() { - return _young_list->pop_region(); - } - - HeapRegion* young_list_first_region() { - return _young_list->first_region(); - } + YoungList* young_list() { return _young_list; } // debugging bool check_young_list_well_formed() { return _young_list->check_list_well_formed(); } - bool check_young_list_empty(bool ignore_scan_only_list, + + bool check_young_list_empty(bool check_heap, bool check_sample = true); // *** Stuff related to concurrent marking. It's not clear to me that so diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp index d88c2fc624e..d3131b160db 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2001-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2001-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 @@ -42,10 +42,6 @@ static double cost_per_card_ms_defaults[] = { 0.01, 0.005, 0.005, 0.003, 0.003, 0.002, 0.002, 0.0015 }; -static double cost_per_scan_only_region_ms_defaults[] = { - 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 -}; - // all the same static double fully_young_cards_per_entry_ratio_defaults[] = { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 @@ -125,7 +121,6 @@ G1CollectorPolicy::G1CollectorPolicy() : _pending_card_diff_seq(new TruncatedSeq(TruncatedSeqLength)), _rs_length_diff_seq(new TruncatedSeq(TruncatedSeqLength)), _cost_per_card_ms_seq(new TruncatedSeq(TruncatedSeqLength)), - _cost_per_scan_only_region_ms_seq(new TruncatedSeq(TruncatedSeqLength)), _fully_young_cards_per_entry_ratio_seq(new TruncatedSeq(TruncatedSeqLength)), _partially_young_cards_per_entry_ratio_seq( new TruncatedSeq(TruncatedSeqLength)), @@ -133,7 +128,6 @@ G1CollectorPolicy::G1CollectorPolicy() : _partially_young_cost_per_entry_ms_seq(new TruncatedSeq(TruncatedSeqLength)), _cost_per_byte_ms_seq(new TruncatedSeq(TruncatedSeqLength)), _cost_per_byte_ms_during_cm_seq(new TruncatedSeq(TruncatedSeqLength)), - _cost_per_scan_only_region_ms_during_cm_seq(new TruncatedSeq(TruncatedSeqLength)), _constant_other_time_ms_seq(new TruncatedSeq(TruncatedSeqLength)), _young_other_cost_per_region_ms_seq(new TruncatedSeq(TruncatedSeqLength)), _non_young_other_cost_per_region_ms_seq( @@ -186,6 +180,22 @@ G1CollectorPolicy::G1CollectorPolicy() : _prev_collection_pause_used_at_end_bytes(0), _collection_set(NULL), + _collection_set_size(0), + _collection_set_bytes_used_before(0), + + // Incremental CSet attributes + _inc_cset_build_state(Inactive), + _inc_cset_head(NULL), + _inc_cset_tail(NULL), + _inc_cset_size(0), + _inc_cset_young_index(0), + _inc_cset_bytes_used_before(0), + _inc_cset_max_finger(NULL), + _inc_cset_recorded_young_bytes(0), + _inc_cset_recorded_rs_lengths(0), + _inc_cset_predicted_elapsed_time_ms(0.0), + _inc_cset_predicted_bytes_to_copy(0), + #ifdef _MSC_VER // the use of 'this' below gets a warning, make it go away #pragma warning( disable:4355 ) // 'this' : used in base member initializer list #endif // _MSC_VER @@ -223,8 +233,6 @@ G1CollectorPolicy::G1CollectorPolicy() : _par_last_ext_root_scan_times_ms = new double[_parallel_gc_threads]; _par_last_mark_stack_scan_times_ms = new double[_parallel_gc_threads]; - _par_last_scan_only_times_ms = new double[_parallel_gc_threads]; - _par_last_scan_only_regions_scanned = new double[_parallel_gc_threads]; _par_last_update_rs_start_times_ms = new double[_parallel_gc_threads]; _par_last_update_rs_times_ms = new double[_parallel_gc_threads]; @@ -254,8 +262,6 @@ G1CollectorPolicy::G1CollectorPolicy() : _pending_card_diff_seq->add(0.0); _rs_length_diff_seq->add(rs_length_diff_defaults[index]); _cost_per_card_ms_seq->add(cost_per_card_ms_defaults[index]); - _cost_per_scan_only_region_ms_seq->add( - cost_per_scan_only_region_ms_defaults[index]); _fully_young_cards_per_entry_ratio_seq->add( fully_young_cards_per_entry_ratio_defaults[index]); _cost_per_entry_ms_seq->add(cost_per_entry_ms_defaults[index]); @@ -283,7 +289,7 @@ G1CollectorPolicy::G1CollectorPolicy() : // if G1FixedSurvivorSpaceSize is 0 which means the size is not // fixed, then _max_survivor_regions will be calculated at - // calculate_young_list_target_config during initialization + // calculate_young_list_target_length during initialization _max_survivor_regions = G1FixedSurvivorSpaceSize / HeapRegion::GrainBytes; assert(GCTimeRatio > 0, @@ -357,15 +363,18 @@ void G1CollectorPolicy::init() { set_adaptive_young_list_length(false); _young_list_fixed_length = initial_region_num; } - _free_regions_at_end_of_collection = _g1->free_regions(); - _scan_only_regions_at_end_of_collection = 0; - calculate_young_list_min_length(); - guarantee( _young_list_min_length == 0, "invariant, not enough info" ); - calculate_young_list_target_config(); - } else { + _free_regions_at_end_of_collection = _g1->free_regions(); + calculate_young_list_min_length(); + guarantee( _young_list_min_length == 0, "invariant, not enough info" ); + calculate_young_list_target_length(); + } else { _young_list_fixed_length = 0; _in_young_gc_mode = false; } + + // We may immediately start allocating regions and placing them on the + // collection set list. Initialize the per-collection set info + start_incremental_cset_building(); } // Create the jstat counters for the policy. @@ -385,112 +394,29 @@ void G1CollectorPolicy::calculate_young_list_min_length() { double when_ms = _mmu_tracker->when_max_gc_sec(now_sec) * 1000.0; double alloc_rate_ms = predict_alloc_rate_ms(); int min_regions = (int) ceil(alloc_rate_ms * when_ms); - int current_region_num = (int) _g1->young_list_length(); + int current_region_num = (int) _g1->young_list()->length(); _young_list_min_length = min_regions + current_region_num; } } -void G1CollectorPolicy::calculate_young_list_target_config() { +void G1CollectorPolicy::calculate_young_list_target_length() { if (adaptive_young_list_length()) { size_t rs_lengths = (size_t) get_new_prediction(_rs_lengths_seq); - calculate_young_list_target_config(rs_lengths); + calculate_young_list_target_length(rs_lengths); } else { if (full_young_gcs()) _young_list_target_length = _young_list_fixed_length; else _young_list_target_length = _young_list_fixed_length / 2; + _young_list_target_length = MAX2(_young_list_target_length, (size_t)1); - size_t so_length = calculate_optimal_so_length(_young_list_target_length); - guarantee( so_length < _young_list_target_length, "invariant" ); - _young_list_so_prefix_length = so_length; } calculate_survivors_policy(); } -// This method calculate the optimal scan-only set for a fixed young -// gen size. I couldn't work out how to reuse the more elaborate one, -// i.e. calculate_young_list_target_config(rs_length), as the loops are -// fundamentally different (the other one finds a config for different -// S-O lengths, whereas here we need to do the opposite). -size_t G1CollectorPolicy::calculate_optimal_so_length( - size_t young_list_length) { - if (!G1UseScanOnlyPrefix) - return 0; - - if (_all_pause_times_ms->num() < 3) { - // we won't use a scan-only set at the beginning to allow the rest - // of the predictors to warm up - return 0; - } - - if (_cost_per_scan_only_region_ms_seq->num() < 3) { - // then, we'll only set the S-O set to 1 for a little bit of time, - // to get enough information on the scanning cost - return 1; - } - - size_t pending_cards = (size_t) get_new_prediction(_pending_cards_seq); - size_t rs_lengths = (size_t) get_new_prediction(_rs_lengths_seq); - size_t adj_rs_lengths = rs_lengths + predict_rs_length_diff(); - size_t scanned_cards; - if (full_young_gcs()) - scanned_cards = predict_young_card_num(adj_rs_lengths); - else - scanned_cards = predict_non_young_card_num(adj_rs_lengths); - double base_time_ms = predict_base_elapsed_time_ms(pending_cards, - scanned_cards); - - size_t so_length = 0; - double max_gc_eff = 0.0; - for (size_t i = 0; i < young_list_length; ++i) { - double gc_eff = 0.0; - double pause_time_ms = 0.0; - predict_gc_eff(young_list_length, i, base_time_ms, - &gc_eff, &pause_time_ms); - if (gc_eff > max_gc_eff) { - max_gc_eff = gc_eff; - so_length = i; - } - } - - // set it to 95% of the optimal to make sure we sample the "area" - // around the optimal length to get up-to-date survival rate data - return so_length * 950 / 1000; -} - -// This is a really cool piece of code! It finds the best -// target configuration (young length / scan-only prefix length) so -// that GC efficiency is maximized and that we also meet a pause -// time. It's a triple nested loop. These loops are explained below -// from the inside-out :-) -// -// (a) The innermost loop will try to find the optimal young length -// for a fixed S-O length. It uses a binary search to speed up the -// process. We assume that, for a fixed S-O length, as we add more -// young regions to the CSet, the GC efficiency will only go up (I'll -// skip the proof). So, using a binary search to optimize this process -// makes perfect sense. -// -// (b) The middle loop will fix the S-O length before calling the -// innermost one. It will vary it between two parameters, increasing -// it by a given increment. -// -// (c) The outermost loop will call the middle loop three times. -// (1) The first time it will explore all possible S-O length values -// from 0 to as large as it can get, using a coarse increment (to -// quickly "home in" to where the optimal seems to be). -// (2) The second time it will explore the values around the optimal -// that was found by the first iteration using a fine increment. -// (3) Once the optimal config has been determined by the second -// iteration, we'll redo the calculation, but setting the S-O length -// to 95% of the optimal to make sure we sample the "area" -// around the optimal length to get up-to-date survival rate data -// -// Termination conditions for the iterations are several: the pause -// time is over the limit, we do not have enough to-space, etc. - -void G1CollectorPolicy::calculate_young_list_target_config(size_t rs_lengths) { +void G1CollectorPolicy::calculate_young_list_target_length(size_t rs_lengths) { guarantee( adaptive_young_list_length(), "pre-condition" ); + guarantee( !_in_marking_window || !_last_full_young_gc, "invariant" ); double start_time_sec = os::elapsedTime(); size_t min_reserve_perc = MAX2((size_t)2, (size_t)G1ReservePercent); @@ -504,285 +430,80 @@ void G1CollectorPolicy::calculate_young_list_target_config(size_t rs_lengths) { double survivor_regions_evac_time = predict_survivor_regions_evac_time(); - size_t min_so_length = 0; - size_t max_so_length = 0; - - if (G1UseScanOnlyPrefix) { - if (_all_pause_times_ms->num() < 3) { - // we won't use a scan-only set at the beginning to allow the rest - // of the predictors to warm up - min_so_length = 0; - max_so_length = 0; - } else if (_cost_per_scan_only_region_ms_seq->num() < 3) { - // then, we'll only set the S-O set to 1 for a little bit of time, - // to get enough information on the scanning cost - min_so_length = 1; - max_so_length = 1; - } else if (_in_marking_window || _last_full_young_gc) { - // no S-O prefix during a marking phase either, as at the end - // of the marking phase we'll have to use a very small young - // length target to fill up the rest of the CSet with - // non-young regions and, if we have lots of scan-only regions - // left-over, we will not be able to add any more non-young - // regions. - min_so_length = 0; - max_so_length = 0; - } else { - // this is the common case; we'll never reach the maximum, we - // one of the end conditions will fire well before that - // (hopefully!) - min_so_length = 0; - max_so_length = _free_regions_at_end_of_collection - 1; - } - } else { - // no S-O prefix, as the switch is not set, but we still need to - // do one iteration to calculate the best young target that - // meets the pause time; this way we reuse the same code instead - // of replicating it - min_so_length = 0; - max_so_length = 0; - } - double target_pause_time_ms = _mmu_tracker->max_gc_time() * 1000.0; size_t pending_cards = (size_t) get_new_prediction(_pending_cards_seq); size_t adj_rs_lengths = rs_lengths + predict_rs_length_diff(); - size_t scanned_cards; - if (full_young_gcs()) - scanned_cards = predict_young_card_num(adj_rs_lengths); - else - scanned_cards = predict_non_young_card_num(adj_rs_lengths); - // calculate this once, so that we don't have to recalculate it in - // the innermost loop + size_t scanned_cards = predict_young_card_num(adj_rs_lengths); double base_time_ms = predict_base_elapsed_time_ms(pending_cards, scanned_cards) + survivor_regions_evac_time; + // the result size_t final_young_length = 0; - size_t final_so_length = 0; - double final_gc_eff = 0.0; - // we'll also keep track of how many times we go into the inner loop - // this is for profiling reasons - size_t calculations = 0; - // this determines which of the three iterations the outer loop is in - typedef enum { - pass_type_coarse, - pass_type_fine, - pass_type_final - } pass_type_t; + size_t init_free_regions = + MAX2((size_t)0, _free_regions_at_end_of_collection - reserve_regions); - // range of the outer loop's iteration - size_t from_so_length = min_so_length; - size_t to_so_length = max_so_length; - guarantee( from_so_length <= to_so_length, "invariant" ); + // if we're still under the pause target... + if (base_time_ms <= target_pause_time_ms) { + // We make sure that the shortest young length that makes sense + // fits within the target pause time. + size_t min_young_length = 1; - // this will keep the S-O length that's found by the second - // iteration of the outer loop; we'll keep it just in case the third - // iteration fails to find something - size_t fine_so_length = 0; + if (predict_will_fit(min_young_length, base_time_ms, + init_free_regions, target_pause_time_ms)) { + // The shortest young length will fit within the target pause time; + // we'll now check whether the absolute maximum number of young + // regions will fit in the target pause time. If not, we'll do + // a binary search between min_young_length and max_young_length + size_t abs_max_young_length = _free_regions_at_end_of_collection - 1; + size_t max_young_length = abs_max_young_length; - // the increment step for the coarse (first) iteration - size_t so_coarse_increments = 5; + if (max_young_length > min_young_length) { + // Let's check if the initial max young length will fit within the + // target pause. If so then there is no need to search for a maximal + // young length - we'll return the initial maximum - // the common case, we'll start with the coarse iteration - pass_type_t pass = pass_type_coarse; - size_t so_length_incr = so_coarse_increments; - - if (from_so_length == to_so_length) { - // not point in doing the coarse iteration, we'll go directly into - // the fine one (we essentially trying to find the optimal young - // length for a fixed S-O length). - so_length_incr = 1; - pass = pass_type_final; - } else if (to_so_length - from_so_length < 3 * so_coarse_increments) { - // again, the range is too short so no point in foind the coarse - // iteration either - so_length_incr = 1; - pass = pass_type_fine; - } - - bool done = false; - // this is the outermost loop - while (!done) { -#ifdef TRACE_CALC_YOUNG_CONFIG - // leave this in for debugging, just in case - gclog_or_tty->print_cr("searching between " SIZE_FORMAT " and " SIZE_FORMAT - ", incr " SIZE_FORMAT ", pass %s", - from_so_length, to_so_length, so_length_incr, - (pass == pass_type_coarse) ? "coarse" : - (pass == pass_type_fine) ? "fine" : "final"); -#endif // TRACE_CALC_YOUNG_CONFIG - - size_t so_length = from_so_length; - size_t init_free_regions = - MAX2((size_t)0, - _free_regions_at_end_of_collection + - _scan_only_regions_at_end_of_collection - reserve_regions); - - // this determines whether a configuration was found - bool gc_eff_set = false; - // this is the middle loop - while (so_length <= to_so_length) { - // base time, which excludes region-related time; again we - // calculate it once to avoid recalculating it in the - // innermost loop - double base_time_with_so_ms = - base_time_ms + predict_scan_only_time_ms(so_length); - // it's already over the pause target, go around - if (base_time_with_so_ms > target_pause_time_ms) - break; - - size_t starting_young_length = so_length+1; - - // we make sure that the short young length that makes sense - // (one more than the S-O length) is feasible - size_t min_young_length = starting_young_length; - double min_gc_eff; - bool min_ok; - ++calculations; - min_ok = predict_gc_eff(min_young_length, so_length, - base_time_with_so_ms, - init_free_regions, target_pause_time_ms, - &min_gc_eff); - - if (min_ok) { - // the shortest young length is indeed feasible; we'll know - // set up the max young length and we'll do a binary search - // between min_young_length and max_young_length - size_t max_young_length = _free_regions_at_end_of_collection - 1; - double max_gc_eff = 0.0; - bool max_ok = false; - - // the innermost loop! (finally!) - while (max_young_length > min_young_length) { - // we'll make sure that min_young_length is always at a - // feasible config - guarantee( min_ok, "invariant" ); - - ++calculations; - max_ok = predict_gc_eff(max_young_length, so_length, - base_time_with_so_ms, - init_free_regions, target_pause_time_ms, - &max_gc_eff); + if (predict_will_fit(max_young_length, base_time_ms, + init_free_regions, target_pause_time_ms)) { + // The maximum young length will satisfy the target pause time. + // We are done so set min young length to this maximum length. + // The code after the loop will then set final_young_length using + // the value cached in the minimum length. + min_young_length = max_young_length; + } else { + // The maximum possible number of young regions will not fit within + // the target pause time so let's search.... size_t diff = (max_young_length - min_young_length) / 2; - if (max_ok) { - min_young_length = max_young_length; - min_gc_eff = max_gc_eff; - min_ok = true; - } max_young_length = min_young_length + diff; - } - // the innermost loop found a config - guarantee( min_ok, "invariant" ); - if (min_gc_eff > final_gc_eff) { - // it's the best config so far, so we'll keep it - final_gc_eff = min_gc_eff; - final_young_length = min_young_length; - final_so_length = so_length; - gc_eff_set = true; + while (max_young_length > min_young_length) { + if (predict_will_fit(max_young_length, base_time_ms, + init_free_regions, target_pause_time_ms)) { + + // The current max young length will fit within the target + // pause time. Note we do not exit the loop here. By setting + // min = max, and then increasing the max below means that + // we will continue searching for an upper bound in the + // range [max..max+diff] + min_young_length = max_young_length; + } + diff = (max_young_length - min_young_length) / 2; + max_young_length = min_young_length + diff; + } + // the above loop found a maximal young length that will fit + // within the target pause time. } + assert(min_young_length <= abs_max_young_length, "just checking"); } - - // incremental the fixed S-O length and go around - so_length += so_length_incr; + final_young_length = min_young_length; } - - // this is the end of the outermost loop and we need to decide - // what to do during the next iteration - if (pass == pass_type_coarse) { - // we just did the coarse pass (first iteration) - - if (!gc_eff_set) - // we didn't find a feasible config so we'll just bail out; of - // course, it might be the case that we missed it; but I'd say - // it's a bit unlikely - done = true; - else { - // We did find a feasible config with optimal GC eff during - // the first pass. So the second pass we'll only consider the - // S-O lengths around that config with a fine increment. - - guarantee( so_length_incr == so_coarse_increments, "invariant" ); - guarantee( final_so_length >= min_so_length, "invariant" ); - -#ifdef TRACE_CALC_YOUNG_CONFIG - // leave this in for debugging, just in case - gclog_or_tty->print_cr(" coarse pass: SO length " SIZE_FORMAT, - final_so_length); -#endif // TRACE_CALC_YOUNG_CONFIG - - from_so_length = - (final_so_length - min_so_length > so_coarse_increments) ? - final_so_length - so_coarse_increments + 1 : min_so_length; - to_so_length = - (max_so_length - final_so_length > so_coarse_increments) ? - final_so_length + so_coarse_increments - 1 : max_so_length; - - pass = pass_type_fine; - so_length_incr = 1; - } - } else if (pass == pass_type_fine) { - // we just finished the second pass - - if (!gc_eff_set) { - // we didn't find a feasible config (yes, it's possible; - // notice that, sometimes, we go directly into the fine - // iteration and skip the coarse one) so we bail out - done = true; - } else { - // We did find a feasible config with optimal GC eff - guarantee( so_length_incr == 1, "invariant" ); - - if (final_so_length == 0) { - // The config is of an empty S-O set, so we'll just bail out - done = true; - } else { - // we'll go around once more, setting the S-O length to 95% - // of the optimal - size_t new_so_length = 950 * final_so_length / 1000; - -#ifdef TRACE_CALC_YOUNG_CONFIG - // leave this in for debugging, just in case - gclog_or_tty->print_cr(" fine pass: SO length " SIZE_FORMAT - ", setting it to " SIZE_FORMAT, - final_so_length, new_so_length); -#endif // TRACE_CALC_YOUNG_CONFIG - - from_so_length = new_so_length; - to_so_length = new_so_length; - fine_so_length = final_so_length; - - pass = pass_type_final; - } - } - } else if (pass == pass_type_final) { - // we just finished the final (third) pass - - if (!gc_eff_set) - // we didn't find a feasible config, so we'll just use the one - // we found during the second pass, which we saved - final_so_length = fine_so_length; - - // and we're done! - done = true; - } else { - guarantee( false, "should never reach here" ); - } - - // we now go around the outermost loop } + // and we're done! // we should have at least one region in the target young length _young_list_target_length = MAX2((size_t) 1, final_young_length + _recorded_survivor_regions); - if (final_so_length >= final_young_length) - // and we need to ensure that the S-O length is not greater than - // the target young length (this is being a bit careful) - final_so_length = 0; - _young_list_so_prefix_length = final_so_length; - guarantee( !_in_marking_window || !_last_full_young_gc || - _young_list_so_prefix_length == 0, "invariant" ); // let's keep an eye of how long we spend on this calculation // right now, I assume that we'll print it when we need it; we @@ -790,142 +511,91 @@ void G1CollectorPolicy::calculate_young_list_target_config(size_t rs_lengths) { double end_time_sec = os::elapsedTime(); double elapsed_time_ms = (end_time_sec - start_time_sec) * 1000.0; -#ifdef TRACE_CALC_YOUNG_CONFIG +#ifdef TRACE_CALC_YOUNG_LENGTH // leave this in for debugging, just in case - gclog_or_tty->print_cr("target = %1.1lf ms, young = " SIZE_FORMAT - ", SO = " SIZE_FORMAT ", " - "elapsed %1.2lf ms, calcs: " SIZE_FORMAT " (%s%s) " - SIZE_FORMAT SIZE_FORMAT, + gclog_or_tty->print_cr("target = %1.1lf ms, young = " SIZE_FORMAT ", " + "elapsed %1.2lf ms, (%s%s) " SIZE_FORMAT SIZE_FORMAT, target_pause_time_ms, - _young_list_target_length - _young_list_so_prefix_length, - _young_list_so_prefix_length, + _young_list_target_length elapsed_time_ms, - calculations, full_young_gcs() ? "full" : "partial", during_initial_mark_pause() ? " i-m" : "", _in_marking_window, _in_marking_window_im); -#endif // TRACE_CALC_YOUNG_CONFIG +#endif // TRACE_CALC_YOUNG_LENGTH if (_young_list_target_length < _young_list_min_length) { - // bummer; this means that, if we do a pause when the optimal - // config dictates, we'll violate the pause spacing target (the + // bummer; this means that, if we do a pause when the maximal + // length dictates, we'll violate the pause spacing target (the // min length was calculate based on the application's current // alloc rate); // so, we have to bite the bullet, and allocate the minimum // number. We'll violate our target, but we just can't meet it. - size_t so_length = 0; - // a note further up explains why we do not want an S-O length - // during marking - if (!_in_marking_window && !_last_full_young_gc) - // but we can still try to see whether we can find an optimal - // S-O length - so_length = calculate_optimal_so_length(_young_list_min_length); - -#ifdef TRACE_CALC_YOUNG_CONFIG +#ifdef TRACE_CALC_YOUNG_LENGTH // leave this in for debugging, just in case gclog_or_tty->print_cr("adjusted target length from " - SIZE_FORMAT " to " SIZE_FORMAT - ", SO " SIZE_FORMAT, - _young_list_target_length, _young_list_min_length, - so_length); -#endif // TRACE_CALC_YOUNG_CONFIG + SIZE_FORMAT " to " SIZE_FORMAT, + _young_list_target_length, _young_list_min_length); +#endif // TRACE_CALC_YOUNG_LENGTH - _young_list_target_length = - MAX2(_young_list_min_length, (size_t)1); - _young_list_so_prefix_length = so_length; + _young_list_target_length = _young_list_min_length; } } else { // we are in a partially-young mode or we've run out of regions (due // to evacuation failure) -#ifdef TRACE_CALC_YOUNG_CONFIG +#ifdef TRACE_CALC_YOUNG_LENGTH // leave this in for debugging, just in case gclog_or_tty->print_cr("(partial) setting target to " SIZE_FORMAT - ", SO " SIZE_FORMAT, - _young_list_min_length, 0); -#endif // TRACE_CALC_YOUNG_CONFIG - - // we'll do the pause as soon as possible and with no S-O prefix - // (see above for the reasons behind the latter) + _young_list_min_length); +#endif // TRACE_CALC_YOUNG_LENGTH + // we'll do the pause as soon as possible by choosing the minimum _young_list_target_length = MAX2(_young_list_min_length, (size_t) 1); - _young_list_so_prefix_length = 0; } _rs_lengths_prediction = rs_lengths; } -// This is used by: calculate_optimal_so_length(length). It returns -// the GC eff and predicted pause time for a particular config -void -G1CollectorPolicy::predict_gc_eff(size_t young_length, - size_t so_length, - double base_time_ms, - double* ret_gc_eff, - double* ret_pause_time_ms) { - double so_time_ms = predict_scan_only_time_ms(so_length); - double accum_surv_rate_adj = 0.0; - if (so_length > 0) - accum_surv_rate_adj = accum_yg_surv_rate_pred((int)(so_length - 1)); - double accum_surv_rate = - accum_yg_surv_rate_pred((int)(young_length - 1)) - accum_surv_rate_adj; - size_t bytes_to_copy = - (size_t) (accum_surv_rate * (double) HeapRegion::GrainBytes); - double copy_time_ms = predict_object_copy_time_ms(bytes_to_copy); - double young_other_time_ms = - predict_young_other_time_ms(young_length - so_length); - double pause_time_ms = - base_time_ms + so_time_ms + copy_time_ms + young_other_time_ms; - size_t reclaimed_bytes = - (young_length - so_length) * HeapRegion::GrainBytes - bytes_to_copy; - double gc_eff = (double) reclaimed_bytes / pause_time_ms; - - *ret_gc_eff = gc_eff; - *ret_pause_time_ms = pause_time_ms; -} - -// This is used by: calculate_young_list_target_config(rs_length). It -// returns the GC eff of a particular config. It returns false if that -// config violates any of the end conditions of the search in the -// calling method, or true upon success. The end conditions were put -// here since it's called twice and it was best not to replicate them -// in the caller. Also, passing the parameteres avoids having to -// recalculate them in the innermost loop. +// This is used by: calculate_young_list_target_length(rs_length). It +// returns true iff: +// the predicted pause time for the given young list will not overflow +// the target pause time +// and: +// the predicted amount of surviving data will not overflow the +// the amount of free space available for survivor regions. +// bool -G1CollectorPolicy::predict_gc_eff(size_t young_length, - size_t so_length, - double base_time_with_so_ms, - size_t init_free_regions, - double target_pause_time_ms, - double* ret_gc_eff) { - *ret_gc_eff = 0.0; +G1CollectorPolicy::predict_will_fit(size_t young_length, + double base_time_ms, + size_t init_free_regions, + double target_pause_time_ms) { if (young_length >= init_free_regions) // end condition 1: not enough space for the young regions return false; double accum_surv_rate_adj = 0.0; - if (so_length > 0) - accum_surv_rate_adj = accum_yg_surv_rate_pred((int)(so_length - 1)); double accum_surv_rate = accum_yg_surv_rate_pred((int)(young_length - 1)) - accum_surv_rate_adj; + size_t bytes_to_copy = (size_t) (accum_surv_rate * (double) HeapRegion::GrainBytes); + double copy_time_ms = predict_object_copy_time_ms(bytes_to_copy); + double young_other_time_ms = - predict_young_other_time_ms(young_length - so_length); + predict_young_other_time_ms(young_length); + double pause_time_ms = - base_time_with_so_ms + copy_time_ms + young_other_time_ms; + base_time_ms + copy_time_ms + young_other_time_ms; if (pause_time_ms > target_pause_time_ms) // end condition 2: over the target pause time return false; - size_t reclaimed_bytes = - (young_length - so_length) * HeapRegion::GrainBytes - bytes_to_copy; size_t free_bytes = (init_free_regions - young_length) * HeapRegion::GrainBytes; @@ -934,9 +604,6 @@ G1CollectorPolicy::predict_gc_eff(size_t young_length, return false; // success! - double gc_eff = (double) reclaimed_bytes / pause_time_ms; - *ret_gc_eff = gc_eff; - return true; } @@ -953,11 +620,11 @@ double G1CollectorPolicy::predict_survivor_regions_evac_time() { void G1CollectorPolicy::check_prediction_validity() { guarantee( adaptive_young_list_length(), "should not call this otherwise" ); - size_t rs_lengths = _g1->young_list_sampled_rs_lengths(); + size_t rs_lengths = _g1->young_list()->sampled_rs_lengths(); if (rs_lengths > _rs_lengths_prediction) { // add 10% to avoid having to recalculate often size_t rs_lengths_prediction = rs_lengths * 1100 / 1000; - calculate_young_list_target_config(rs_lengths_prediction); + calculate_young_list_target_length(rs_lengths_prediction); } } @@ -979,7 +646,7 @@ HeapWord* G1CollectorPolicy::satisfy_failed_allocation(size_t size, #ifndef PRODUCT bool G1CollectorPolicy::verify_young_ages() { - HeapRegion* head = _g1->young_list_first_region(); + HeapRegion* head = _g1->young_list()->first_region(); return verify_young_ages(head, _short_lived_surv_rate_group); // also call verify_young_ages on any additional surv rate groups @@ -1056,7 +723,6 @@ void G1CollectorPolicy::record_full_collection_end() { _in_marking_window = false; _in_marking_window_im = false; - _short_lived_surv_rate_group->record_scan_only_prefix(0); _short_lived_surv_rate_group->start_adding_regions(); // also call this on any additional surv rate groups @@ -1066,11 +732,10 @@ void G1CollectorPolicy::record_full_collection_end() { _prev_region_num_tenured = _region_num_tenured; _free_regions_at_end_of_collection = _g1->free_regions(); - _scan_only_regions_at_end_of_collection = 0; // Reset survivors SurvRateGroup. _survivor_surv_rate_group->reset(); calculate_young_list_min_length(); - calculate_young_list_target_config(); + calculate_young_list_target_length(); } void G1CollectorPolicy::record_before_bytes(size_t bytes) { @@ -1119,8 +784,6 @@ void G1CollectorPolicy::record_collection_pause_start(double start_time_sec, for (int i = 0; i < _parallel_gc_threads; ++i) { _par_last_ext_root_scan_times_ms[i] = -666.0; _par_last_mark_stack_scan_times_ms[i] = -666.0; - _par_last_scan_only_times_ms[i] = -666.0; - _par_last_scan_only_regions_scanned[i] = -666.0; _par_last_update_rs_start_times_ms[i] = -666.0; _par_last_update_rs_times_ms[i] = -666.0; _par_last_update_rs_processed_buffers[i] = -666.0; @@ -1143,47 +806,13 @@ void G1CollectorPolicy::record_collection_pause_start(double start_time_sec, if (in_young_gc_mode()) _last_young_gc_full = false; - // do that for any other surv rate groups _short_lived_surv_rate_group->stop_adding_regions(); - size_t short_lived_so_length = _young_list_so_prefix_length; - _short_lived_surv_rate_group->record_scan_only_prefix(short_lived_so_length); - tag_scan_only(short_lived_so_length); _survivors_age_table.clear(); assert( verify_young_ages(), "region age verification" ); } -void G1CollectorPolicy::tag_scan_only(size_t short_lived_scan_only_length) { - // done in a way that it can be extended for other surv rate groups too... - - HeapRegion* head = _g1->young_list_first_region(); - bool finished_short_lived = (short_lived_scan_only_length == 0); - - if (finished_short_lived) - return; - - for (HeapRegion* curr = head; - curr != NULL; - curr = curr->get_next_young_region()) { - SurvRateGroup* surv_rate_group = curr->surv_rate_group(); - int age = curr->age_in_surv_rate_group(); - - if (surv_rate_group == _short_lived_surv_rate_group) { - if ((size_t)age < short_lived_scan_only_length) - curr->set_scan_only(); - else - finished_short_lived = true; - } - - - if (finished_short_lived) - return; - } - - guarantee( false, "we should never reach here" ); -} - void G1CollectorPolicy::record_mark_closure_time(double mark_closure_time_ms) { _mark_closure_time_ms = mark_closure_time_ms; } @@ -1277,7 +906,7 @@ G1CollectorPolicy::record_concurrent_mark_cleanup_completed() { _last_full_young_gc = true; _in_marking_window = false; if (adaptive_young_list_length()) - calculate_young_list_target_config(); + calculate_young_list_target_length(); } } @@ -1512,6 +1141,7 @@ void G1CollectorPolicy::record_collection_pause_end(bool abandoned) { size_t freed_bytes = _cur_collection_pause_used_at_start_bytes - cur_used_bytes; size_t surviving_bytes = _collection_set_bytes_used_before - freed_bytes; + double survival_fraction = (double)surviving_bytes/ (double)_collection_set_bytes_used_before; @@ -1599,9 +1229,6 @@ void G1CollectorPolicy::record_collection_pause_end(bool abandoned) { double ext_root_scan_time = avg_value(_par_last_ext_root_scan_times_ms); double mark_stack_scan_time = avg_value(_par_last_mark_stack_scan_times_ms); - double scan_only_time = avg_value(_par_last_scan_only_times_ms); - double scan_only_regions_scanned = - sum_of_values(_par_last_scan_only_regions_scanned); double update_rs_time = avg_value(_par_last_update_rs_times_ms); double update_rs_processed_buffers = sum_of_values(_par_last_update_rs_processed_buffers); @@ -1611,7 +1238,7 @@ void G1CollectorPolicy::record_collection_pause_end(bool abandoned) { double parallel_other_time = _cur_collection_par_time_ms - (update_rs_time + ext_root_scan_time + mark_stack_scan_time + - scan_only_time + scan_rs_time + obj_copy_time + termination_time); + scan_rs_time + obj_copy_time + termination_time); if (update_stats) { MainBodySummary* body_summary = summary->main_body_summary(); guarantee(body_summary != NULL, "should not be null!"); @@ -1622,7 +1249,6 @@ void G1CollectorPolicy::record_collection_pause_end(bool abandoned) { body_summary->record_satb_drain_time_ms(0.0); body_summary->record_ext_root_scan_time_ms(ext_root_scan_time); body_summary->record_mark_stack_scan_time_ms(mark_stack_scan_time); - body_summary->record_scan_only_time_ms(scan_only_time); body_summary->record_update_rs_time_ms(update_rs_time); body_summary->record_scan_rs_time_ms(scan_rs_time); body_summary->record_obj_copy_time_ms(obj_copy_time); @@ -1676,7 +1302,7 @@ void G1CollectorPolicy::record_collection_pause_end(bool abandoned) { else other_time_ms -= update_rs_time + - ext_root_scan_time + mark_stack_scan_time + scan_only_time + + ext_root_scan_time + mark_stack_scan_time + scan_rs_time + obj_copy_time; } @@ -1701,9 +1327,6 @@ void G1CollectorPolicy::record_collection_pause_end(bool abandoned) { _par_last_update_rs_processed_buffers, true); print_par_stats(2, "Ext Root Scanning", _par_last_ext_root_scan_times_ms); print_par_stats(2, "Mark Stack Scanning", _par_last_mark_stack_scan_times_ms); - print_par_stats(2, "Scan-Only Scanning", _par_last_scan_only_times_ms); - print_par_buffers(3, "Scan-Only Regions", - _par_last_scan_only_regions_scanned, true); print_par_stats(2, "Scan RS", _par_last_scan_rs_times_ms); print_par_stats(2, "Object Copy", _par_last_obj_copy_times_ms); print_par_stats(2, "Termination", _par_last_termination_times_ms); @@ -1715,7 +1338,6 @@ void G1CollectorPolicy::record_collection_pause_end(bool abandoned) { (int)update_rs_processed_buffers); print_stats(1, "Ext Root Scanning", ext_root_scan_time); print_stats(1, "Mark Stack Scanning", mark_stack_scan_time); - print_stats(1, "Scan-Only Scanning", scan_only_time); print_stats(1, "Scan RS", scan_rs_time); print_stats(1, "Object Copying", obj_copy_time); } @@ -1730,6 +1352,8 @@ void G1CollectorPolicy::record_collection_pause_end(bool abandoned) { } #endif print_stats(1, "Other", other_time_ms); + print_stats(2, "Choose CSet", _recorded_young_cset_choice_time_ms); + for (int i = 0; i < _aux_num; ++i) { if (_cur_aux_times_set[i]) { char buffer[96]; @@ -1815,16 +1439,6 @@ void G1CollectorPolicy::record_collection_pause_end(bool abandoned) { _cost_per_card_ms_seq->add(cost_per_card_ms); } - double cost_per_scan_only_region_ms = 0.0; - if (scan_only_regions_scanned > 0.0) { - cost_per_scan_only_region_ms = - scan_only_time / scan_only_regions_scanned; - if (_in_marking_window_im) - _cost_per_scan_only_region_ms_during_cm_seq->add(cost_per_scan_only_region_ms); - else - _cost_per_scan_only_region_ms_seq->add(cost_per_scan_only_region_ms); - } - size_t cards_scanned = _g1->cards_scanned(); double cost_per_entry_ms = 0.0; @@ -1860,7 +1474,7 @@ void G1CollectorPolicy::record_collection_pause_end(bool abandoned) { } double all_other_time_ms = pause_time_ms - - (update_rs_time + scan_only_time + scan_rs_time + obj_copy_time + + (update_rs_time + scan_rs_time + obj_copy_time + _mark_closure_time_ms + termination_time); double young_other_time_ms = 0.0; @@ -1907,11 +1521,10 @@ void G1CollectorPolicy::record_collection_pause_end(bool abandoned) { if (PREDICTIONS_VERBOSE) { gclog_or_tty->print_cr(""); gclog_or_tty->print_cr("PREDICTIONS %1.4lf %d " - "REGIONS %d %d %d %d " + "REGIONS %d %d %d " "PENDING_CARDS %d %d " "CARDS_SCANNED %d %d " "RS_LENGTHS %d %d " - "SCAN_ONLY_SCAN %1.6lf %1.6lf " "RS_UPDATE %1.6lf %1.6lf RS_SCAN %1.6lf %1.6lf " "SURVIVAL_RATIO %1.6lf %1.6lf " "OBJECT_COPY %1.6lf %1.6lf OTHER_CONSTANT %1.6lf %1.6lf " @@ -1924,12 +1537,10 @@ void G1CollectorPolicy::record_collection_pause_end(bool abandoned) { (last_pause_included_initial_mark) ? 1 : 0, _recorded_region_num, _recorded_young_regions, - _recorded_scan_only_regions, _recorded_non_young_regions, _predicted_pending_cards, _pending_cards, _predicted_cards_scanned, cards_scanned, _predicted_rs_lengths, _max_rs_lengths, - _predicted_scan_only_scan_time_ms, scan_only_time, _predicted_rs_update_time_ms, update_rs_time, _predicted_rs_scan_time_ms, scan_rs_time, _predicted_survival_ratio, survival_ratio, @@ -1954,14 +1565,12 @@ void G1CollectorPolicy::record_collection_pause_end(bool abandoned) { _in_marking_window = new_in_marking_window; _in_marking_window_im = new_in_marking_window_im; _free_regions_at_end_of_collection = _g1->free_regions(); - _scan_only_regions_at_end_of_collection = _g1->young_list_length(); calculate_young_list_min_length(); - calculate_young_list_target_config(); + calculate_young_list_target_length(); // Note that _mmu_tracker->max_gc_time() returns the time in seconds. double update_rs_time_goal_ms = _mmu_tracker->max_gc_time() * MILLIUNITS * G1RSetUpdatingPauseTimePercent / 100.0; adjust_concurrent_refinement(update_rs_time, update_rs_processed_buffers, update_rs_time_goal_ms); - // _target_pause_time_ms = -1.0; @@ -2016,13 +1625,13 @@ predict_young_collection_elapsed_time_ms(size_t adjustment) { guarantee( adjustment == 0 || adjustment == 1, "invariant" ); G1CollectedHeap* g1h = G1CollectedHeap::heap(); - size_t young_num = g1h->young_list_length(); + size_t young_num = g1h->young_list()->length(); if (young_num == 0) return 0.0; young_num += adjustment; size_t pending_cards = predict_pending_cards(); - size_t rs_lengths = g1h->young_list_sampled_rs_lengths() + + size_t rs_lengths = g1h->young_list()->sampled_rs_lengths() + predict_rs_length_diff(); size_t card_num; if (full_young_gcs()) @@ -2106,31 +1715,22 @@ G1CollectorPolicy::predict_bytes_to_copy(HeapRegion* hr) { void G1CollectorPolicy::start_recording_regions() { _recorded_rs_lengths = 0; - _recorded_scan_only_regions = 0; _recorded_young_regions = 0; _recorded_non_young_regions = 0; #if PREDICTIONS_VERBOSE - _predicted_rs_lengths = 0; - _predicted_cards_scanned = 0; - _recorded_marked_bytes = 0; _recorded_young_bytes = 0; _predicted_bytes_to_copy = 0; + _predicted_rs_lengths = 0; + _predicted_cards_scanned = 0; #endif // PREDICTIONS_VERBOSE } void -G1CollectorPolicy::record_cset_region(HeapRegion* hr, bool young) { - if (young) { - ++_recorded_young_regions; - } else { - ++_recorded_non_young_regions; - } +G1CollectorPolicy::record_cset_region_info(HeapRegion* hr, bool young) { #if PREDICTIONS_VERBOSE - if (young) { - _recorded_young_bytes += hr->used(); - } else { + if (!young) { _recorded_marked_bytes += hr->max_live_bytes(); } _predicted_bytes_to_copy += predict_bytes_to_copy(hr); @@ -2141,12 +1741,37 @@ G1CollectorPolicy::record_cset_region(HeapRegion* hr, bool young) { } void -G1CollectorPolicy::record_scan_only_regions(size_t scan_only_length) { - _recorded_scan_only_regions = scan_only_length; +G1CollectorPolicy::record_non_young_cset_region(HeapRegion* hr) { + assert(!hr->is_young(), "should not call this"); + ++_recorded_non_young_regions; + record_cset_region_info(hr, false); +} + +void +G1CollectorPolicy::set_recorded_young_regions(size_t n_regions) { + _recorded_young_regions = n_regions; +} + +void G1CollectorPolicy::set_recorded_young_bytes(size_t bytes) { +#if PREDICTIONS_VERBOSE + _recorded_young_bytes = bytes; +#endif // PREDICTIONS_VERBOSE +} + +void G1CollectorPolicy::set_recorded_rs_lengths(size_t rs_lengths) { + _recorded_rs_lengths = rs_lengths; +} + +void G1CollectorPolicy::set_predicted_bytes_to_copy(size_t bytes) { + _predicted_bytes_to_copy = bytes; } void G1CollectorPolicy::end_recording_regions() { + // The _predicted_pause_time_ms field is referenced in code + // not under PREDICTIONS_VERBOSE. Let's initialize it. + _predicted_pause_time_ms = -1.0; + #if PREDICTIONS_VERBOSE _predicted_pending_cards = predict_pending_cards(); _predicted_rs_lengths = _recorded_rs_lengths + predict_rs_length_diff(); @@ -2157,8 +1782,6 @@ G1CollectorPolicy::end_recording_regions() { predict_non_young_card_num(_predicted_rs_lengths); _recorded_region_num = _recorded_young_regions + _recorded_non_young_regions; - _predicted_scan_only_scan_time_ms = - predict_scan_only_time_ms(_recorded_scan_only_regions); _predicted_rs_update_time_ms = predict_rs_update_time_ms(_g1->pending_card_num()); _predicted_rs_scan_time_ms = @@ -2173,7 +1796,6 @@ G1CollectorPolicy::end_recording_regions() { predict_non_young_other_time_ms(_recorded_non_young_regions); _predicted_pause_time_ms = - _predicted_scan_only_scan_time_ms + _predicted_rs_update_time_ms + _predicted_rs_scan_time_ms + _predicted_object_copy_time_ms + @@ -2463,8 +2085,6 @@ void G1CollectorPolicy::print_summary(PauseSummary* summary) const { body_summary->get_ext_root_scan_seq()); print_summary(2, "Mark Stack Scanning", body_summary->get_mark_stack_scan_seq()); - print_summary(2, "Scan-Only Scanning", - body_summary->get_scan_only_seq()); print_summary(2, "Scan RS", body_summary->get_scan_rs_seq()); print_summary(2, "Object Copy", body_summary->get_obj_copy_seq()); print_summary(2, "Termination", body_summary->get_termination_seq()); @@ -2474,7 +2094,6 @@ void G1CollectorPolicy::print_summary(PauseSummary* summary) const { body_summary->get_update_rs_seq(), body_summary->get_ext_root_scan_seq(), body_summary->get_mark_stack_scan_seq(), - body_summary->get_scan_only_seq(), body_summary->get_scan_rs_seq(), body_summary->get_obj_copy_seq(), body_summary->get_termination_seq() @@ -2492,8 +2111,6 @@ void G1CollectorPolicy::print_summary(PauseSummary* summary) const { body_summary->get_ext_root_scan_seq()); print_summary(1, "Mark Stack Scanning", body_summary->get_mark_stack_scan_seq()); - print_summary(1, "Scan-Only Scanning", - body_summary->get_scan_only_seq()); print_summary(1, "Scan RS", body_summary->get_scan_rs_seq()); print_summary(1, "Object Copy", body_summary->get_obj_copy_seq()); } @@ -2519,7 +2136,6 @@ void G1CollectorPolicy::print_summary(PauseSummary* summary) const { body_summary->get_update_rs_seq(), body_summary->get_ext_root_scan_seq(), body_summary->get_mark_stack_scan_seq(), - body_summary->get_scan_only_seq(), body_summary->get_scan_rs_seq(), body_summary->get_obj_copy_seq() }; @@ -2613,7 +2229,7 @@ bool G1CollectorPolicy::should_add_next_region_to_young_list() { assert(in_young_gc_mode(), "should be in young GC mode"); bool ret; - size_t young_list_length = _g1->young_list_length(); + size_t young_list_length = _g1->young_list()->length(); size_t young_list_max_length = _young_list_target_length; if (G1FixedEdenSize) { young_list_max_length -= _max_survivor_regions; @@ -2676,7 +2292,7 @@ G1CollectorPolicy_BestRegionsFirst::should_do_collection_pause(size_t assert(_g1->regions_accounted_for(), "Region leakage!"); double max_pause_time_ms = _mmu_tracker->max_gc_time() * 1000.0; - size_t young_list_length = _g1->young_list_length(); + size_t young_list_length = _g1->young_list()->length(); size_t young_list_max_length = _young_list_target_length; if (G1FixedEdenSize) { young_list_max_length -= _max_survivor_regions; @@ -2685,7 +2301,7 @@ G1CollectorPolicy_BestRegionsFirst::should_do_collection_pause(size_t if (in_young_gc_mode()) { if (reached_target_length) { - assert( young_list_length > 0 && _g1->young_list_length() > 0, + assert( young_list_length > 0 && _g1->young_list()->length() > 0, "invariant" ); _target_pause_time_ms = max_pause_time_ms; return true; @@ -2946,10 +2562,12 @@ record_concurrent_mark_cleanup_end(size_t freed_bytes, } } -// Add the heap region to the collection set and return the conservative -// estimate of the number of live bytes. +// Add the heap region at the head of the non-incremental collection set void G1CollectorPolicy:: add_to_collection_set(HeapRegion* hr) { + assert(_inc_cset_build_state == Active, "Precondition"); + assert(!hr->is_young(), "non-incremental add of young region"); + if (G1PrintHeapRegions) { gclog_or_tty->print_cr("added region to cset " "%d:["PTR_FORMAT", "PTR_FORMAT"], " @@ -2961,8 +2579,7 @@ add_to_collection_set(HeapRegion* hr) { if (_g1->mark_in_progress()) _g1->concurrent_mark()->registerCSetRegion(hr); - assert(!hr->in_collection_set(), - "should not already be in the CSet"); + assert(!hr->in_collection_set(), "should not already be in the CSet"); hr->set_in_collection_set(true); hr->set_next_in_collection_set(_collection_set); _collection_set = hr; @@ -2971,10 +2588,230 @@ add_to_collection_set(HeapRegion* hr) { _g1->register_region_with_in_cset_fast_test(hr); } -void -G1CollectorPolicy_BestRegionsFirst:: -choose_collection_set() { - double non_young_start_time_sec; +// Initialize the per-collection-set information +void G1CollectorPolicy::start_incremental_cset_building() { + assert(_inc_cset_build_state == Inactive, "Precondition"); + + _inc_cset_head = NULL; + _inc_cset_tail = NULL; + _inc_cset_size = 0; + _inc_cset_bytes_used_before = 0; + + if (in_young_gc_mode()) { + _inc_cset_young_index = 0; + } + + _inc_cset_max_finger = 0; + _inc_cset_recorded_young_bytes = 0; + _inc_cset_recorded_rs_lengths = 0; + _inc_cset_predicted_elapsed_time_ms = 0; + _inc_cset_predicted_bytes_to_copy = 0; + _inc_cset_build_state = Active; +} + +void G1CollectorPolicy::add_to_incremental_cset_info(HeapRegion* hr, size_t rs_length) { + // This routine is used when: + // * adding survivor regions to the incremental cset at the end of an + // evacuation pause, + // * adding the current allocation region to the incremental cset + // when it is retired, and + // * updating existing policy information for a region in the + // incremental cset via young list RSet sampling. + // Therefore this routine may be called at a safepoint by the + // VM thread, or in-between safepoints by mutator threads (when + // retiring the current allocation region) or a concurrent + // refine thread (RSet sampling). + + double region_elapsed_time_ms = predict_region_elapsed_time_ms(hr, true); + size_t used_bytes = hr->used(); + + _inc_cset_recorded_rs_lengths += rs_length; + _inc_cset_predicted_elapsed_time_ms += region_elapsed_time_ms; + + _inc_cset_bytes_used_before += used_bytes; + + // Cache the values we have added to the aggregated informtion + // in the heap region in case we have to remove this region from + // the incremental collection set, or it is updated by the + // rset sampling code + hr->set_recorded_rs_length(rs_length); + hr->set_predicted_elapsed_time_ms(region_elapsed_time_ms); + +#if PREDICTIONS_VERBOSE + size_t bytes_to_copy = predict_bytes_to_copy(hr); + _inc_cset_predicted_bytes_to_copy += bytes_to_copy; + + // Record the number of bytes used in this region + _inc_cset_recorded_young_bytes += used_bytes; + + // Cache the values we have added to the aggregated informtion + // in the heap region in case we have to remove this region from + // the incremental collection set, or it is updated by the + // rset sampling code + hr->set_predicted_bytes_to_copy(bytes_to_copy); +#endif // PREDICTIONS_VERBOSE +} + +void G1CollectorPolicy::remove_from_incremental_cset_info(HeapRegion* hr) { + // This routine is currently only called as part of the updating of + // existing policy information for regions in the incremental cset that + // is performed by the concurrent refine thread(s) as part of young list + // RSet sampling. Therefore we should not be at a safepoint. + + assert(!SafepointSynchronize::is_at_safepoint(), "should not be at safepoint"); + assert(hr->is_young(), "it should be"); + + size_t used_bytes = hr->used(); + size_t old_rs_length = hr->recorded_rs_length(); + double old_elapsed_time_ms = hr->predicted_elapsed_time_ms(); + + // Subtract the old recorded/predicted policy information for + // the given heap region from the collection set info. + _inc_cset_recorded_rs_lengths -= old_rs_length; + _inc_cset_predicted_elapsed_time_ms -= old_elapsed_time_ms; + + _inc_cset_bytes_used_before -= used_bytes; + + // Clear the values cached in the heap region + hr->set_recorded_rs_length(0); + hr->set_predicted_elapsed_time_ms(0); + +#if PREDICTIONS_VERBOSE + size_t old_predicted_bytes_to_copy = hr->predicted_bytes_to_copy(); + _inc_cset_predicted_bytes_to_copy -= old_predicted_bytes_to_copy; + + // Subtract the number of bytes used in this region + _inc_cset_recorded_young_bytes -= used_bytes; + + // Clear the values cached in the heap region + hr->set_predicted_bytes_to_copy(0); +#endif // PREDICTIONS_VERBOSE +} + +void G1CollectorPolicy::update_incremental_cset_info(HeapRegion* hr, size_t new_rs_length) { + // Update the collection set information that is dependent on the new RS length + assert(hr->is_young(), "Precondition"); + + remove_from_incremental_cset_info(hr); + add_to_incremental_cset_info(hr, new_rs_length); +} + +void G1CollectorPolicy::add_region_to_incremental_cset_common(HeapRegion* hr) { + assert( hr->is_young(), "invariant"); + assert( hr->young_index_in_cset() == -1, "invariant" ); + assert(_inc_cset_build_state == Active, "Precondition"); + + // We need to clear and set the cached recorded/cached collection set + // information in the heap region here (before the region gets added + // to the collection set). An individual heap region's cached values + // are calculated, aggregated with the policy collection set info, + // and cached in the heap region here (initially) and (subsequently) + // by the Young List sampling code. + + size_t rs_length = hr->rem_set()->occupied(); + add_to_incremental_cset_info(hr, rs_length); + + HeapWord* hr_end = hr->end(); + _inc_cset_max_finger = MAX2(_inc_cset_max_finger, hr_end); + + assert(!hr->in_collection_set(), "invariant"); + hr->set_in_collection_set(true); + assert( hr->next_in_collection_set() == NULL, "invariant"); + + _inc_cset_size++; + _g1->register_region_with_in_cset_fast_test(hr); + + hr->set_young_index_in_cset((int) _inc_cset_young_index); + ++_inc_cset_young_index; +} + +// Add the region at the RHS of the incremental cset +void G1CollectorPolicy::add_region_to_incremental_cset_rhs(HeapRegion* hr) { + // We should only ever be appending survivors at the end of a pause + assert( hr->is_survivor(), "Logic"); + + // Do the 'common' stuff + add_region_to_incremental_cset_common(hr); + + // Now add the region at the right hand side + if (_inc_cset_tail == NULL) { + assert(_inc_cset_head == NULL, "invariant"); + _inc_cset_head = hr; + } else { + _inc_cset_tail->set_next_in_collection_set(hr); + } + _inc_cset_tail = hr; + + if (G1PrintHeapRegions) { + gclog_or_tty->print_cr(" added region to incremental cset (RHS) " + "%d:["PTR_FORMAT", "PTR_FORMAT"], " + "top "PTR_FORMAT", young %s", + hr->hrs_index(), hr->bottom(), hr->end(), + hr->top(), (hr->is_young()) ? "YES" : "NO"); + } +} + +// Add the region to the LHS of the incremental cset +void G1CollectorPolicy::add_region_to_incremental_cset_lhs(HeapRegion* hr) { + // Survivors should be added to the RHS at the end of a pause + assert(!hr->is_survivor(), "Logic"); + + // Do the 'common' stuff + add_region_to_incremental_cset_common(hr); + + // Add the region at the left hand side + hr->set_next_in_collection_set(_inc_cset_head); + if (_inc_cset_head == NULL) { + assert(_inc_cset_tail == NULL, "Invariant"); + _inc_cset_tail = hr; + } + _inc_cset_head = hr; + + if (G1PrintHeapRegions) { + gclog_or_tty->print_cr(" added region to incremental cset (LHS) " + "%d:["PTR_FORMAT", "PTR_FORMAT"], " + "top "PTR_FORMAT", young %s", + hr->hrs_index(), hr->bottom(), hr->end(), + hr->top(), (hr->is_young()) ? "YES" : "NO"); + } +} + +#ifndef PRODUCT +void G1CollectorPolicy::print_collection_set(HeapRegion* list_head, outputStream* st) { + assert(list_head == inc_cset_head() || list_head == collection_set(), "must be"); + + st->print_cr("\nCollection_set:"); + HeapRegion* csr = list_head; + while (csr != NULL) { + HeapRegion* next = csr->next_in_collection_set(); + assert(csr->in_collection_set(), "bad CS"); + st->print_cr(" [%08x-%08x], t: %08x, P: %08x, N: %08x, C: %08x, " + "age: %4d, y: %d, surv: %d", + csr->bottom(), csr->end(), + csr->top(), + csr->prev_top_at_mark_start(), + csr->next_top_at_mark_start(), + csr->top_at_conc_mark_count(), + csr->age_in_surv_rate_group_cond(), + csr->is_young(), + csr->is_survivor()); + csr = next; + } +} +#endif // !PRODUCT + +bool +G1CollectorPolicy_BestRegionsFirst::choose_collection_set() { + // Set this here - in case we're not doing young collections. + double non_young_start_time_sec = os::elapsedTime(); + + // The result that this routine will return. This will be set to + // false if: + // * we're doing a young or partially young collection and we + // have added the youg regions to collection set, or + // * we add old regions to the collection set. + bool abandon_collection = true; + start_recording_regions(); guarantee(_target_pause_time_ms > -1.0 @@ -3027,47 +2864,79 @@ choose_collection_set() { if (G1PolicyVerbose > 0) { gclog_or_tty->print_cr("Adding %d young regions to the CSet", - _g1->young_list_length()); + _g1->young_list()->length()); } + _young_cset_length = 0; _last_young_gc_full = full_young_gcs() ? true : false; + if (_last_young_gc_full) ++_full_young_pause_num; else ++_partial_young_pause_num; - hr = _g1->pop_region_from_young_list(); + + // The young list is laid with the survivor regions from the previous + // pause are appended to the RHS of the young list, i.e. + // [Newly Young Regions ++ Survivors from last pause]. + + hr = _g1->young_list()->first_survivor_region(); while (hr != NULL) { - - assert( hr->young_index_in_cset() == -1, "invariant" ); - assert( hr->age_in_surv_rate_group() != -1, "invariant" ); - hr->set_young_index_in_cset((int) _young_cset_length); - - ++_young_cset_length; - double predicted_time_ms = predict_region_elapsed_time_ms(hr, true); - time_remaining_ms -= predicted_time_ms; - predicted_pause_time_ms += predicted_time_ms; - assert(!hr->in_collection_set(), "invariant"); - add_to_collection_set(hr); - record_cset_region(hr, true); - max_live_bytes -= MIN2(hr->max_live_bytes(), max_live_bytes); - if (G1PolicyVerbose > 0) { - gclog_or_tty->print_cr(" Added [" PTR_FORMAT ", " PTR_FORMAT") to CS.", - hr->bottom(), hr->end()); - gclog_or_tty->print_cr(" (" SIZE_FORMAT " KB left in heap.)", - max_live_bytes/K); - } - hr = _g1->pop_region_from_young_list(); + assert(hr->is_survivor(), "badly formed young list"); + hr->set_young(); + hr = hr->get_next_young_region(); } - record_scan_only_regions(_g1->young_list_scan_only_length()); + // Clear the fields that point to the survivor list - they are + // all young now. + _g1->young_list()->clear_survivors(); + + if (_g1->mark_in_progress()) + _g1->concurrent_mark()->register_collection_set_finger(_inc_cset_max_finger); + + _young_cset_length = _inc_cset_young_index; + _collection_set = _inc_cset_head; + _collection_set_size = _inc_cset_size; + _collection_set_bytes_used_before = _inc_cset_bytes_used_before; + + // For young regions in the collection set, we assume the worst + // case of complete survival + max_live_bytes -= _inc_cset_size * HeapRegion::GrainBytes; + + time_remaining_ms -= _inc_cset_predicted_elapsed_time_ms; + predicted_pause_time_ms += _inc_cset_predicted_elapsed_time_ms; + + // The number of recorded young regions is the incremental + // collection set's current size + set_recorded_young_regions(_inc_cset_size); + set_recorded_rs_lengths(_inc_cset_recorded_rs_lengths); + set_recorded_young_bytes(_inc_cset_recorded_young_bytes); +#if PREDICTIONS_VERBOSE + set_predicted_bytes_to_copy(_inc_cset_predicted_bytes_to_copy); +#endif // PREDICTIONS_VERBOSE + + if (G1PolicyVerbose > 0) { + gclog_or_tty->print_cr(" Added " PTR_FORMAT " Young Regions to CS.", + _inc_cset_size); + gclog_or_tty->print_cr(" (" SIZE_FORMAT " KB left in heap.)", + max_live_bytes/K); + } + + assert(_inc_cset_size == _g1->young_list()->length(), "Invariant"); + if (_inc_cset_size > 0) { + assert(_collection_set != NULL, "Invariant"); + abandon_collection = false; + } double young_end_time_sec = os::elapsedTime(); _recorded_young_cset_choice_time_ms = (young_end_time_sec - young_start_time_sec) * 1000.0; - non_young_start_time_sec = os::elapsedTime(); + // We are doing young collections so reset this. + non_young_start_time_sec = young_end_time_sec; - if (_young_cset_length > 0 && _last_young_gc_full) { + // Note we can use either _collection_set_size or + // _young_cset_length here + if (_collection_set_size > 0 && _last_young_gc_full) { // don't bother adding more regions... goto choose_collection_set_end; } @@ -3077,6 +2946,11 @@ choose_collection_set() { bool should_continue = true; NumberSeq seq; double avg_prediction = 100000000000000000.0; // something very large + + // Save the current size of the collection set to detect + // if we actually added any old regions. + size_t n_young_regions = _collection_set_size; + do { hr = _collectionSetChooser->getNextMarkedRegion(time_remaining_ms, avg_prediction); @@ -3085,7 +2959,7 @@ choose_collection_set() { time_remaining_ms -= predicted_time_ms; predicted_pause_time_ms += predicted_time_ms; add_to_collection_set(hr); - record_cset_region(hr, false); + record_non_young_cset_region(hr); max_live_bytes -= MIN2(hr->max_live_bytes(), max_live_bytes); if (G1PolicyVerbose > 0) { gclog_or_tty->print_cr(" (" SIZE_FORMAT " KB left in heap.)", @@ -3103,9 +2977,17 @@ choose_collection_set() { if (!adaptive_young_list_length() && _collection_set_size < _young_list_fixed_length) _should_revert_to_full_young_gcs = true; + + if (_collection_set_size > n_young_regions) { + // We actually added old regions to the collection set + // so we are not abandoning this collection. + abandon_collection = false; + } } choose_collection_set_end: + stop_incremental_cset_building(); + count_CS_bytes_used(); end_recording_regions(); @@ -3113,6 +2995,8 @@ choose_collection_set_end: double non_young_end_time_sec = os::elapsedTime(); _recorded_non_young_cset_choice_time_ms = (non_young_end_time_sec - non_young_start_time_sec) * 1000.0; + + return abandon_collection; } void G1CollectorPolicy_BestRegionsFirst::record_full_collection_end() { diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp index e346ea6c593..ca292bf78f5 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp @@ -1,5 +1,5 @@ /* - * Copyright 2001-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2001-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 @@ -61,7 +61,6 @@ class MainBodySummary: public CHeapObj { define_num_seq(parallel) // parallel only define_num_seq(ext_root_scan) define_num_seq(mark_stack_scan) - define_num_seq(scan_only) define_num_seq(update_rs) define_num_seq(scan_rs) define_num_seq(scan_new_refs) // Only for temp use; added to @@ -174,8 +173,6 @@ protected: double* _par_last_ext_root_scan_times_ms; double* _par_last_mark_stack_scan_times_ms; - double* _par_last_scan_only_times_ms; - double* _par_last_scan_only_regions_scanned; double* _par_last_update_rs_start_times_ms; double* _par_last_update_rs_times_ms; double* _par_last_update_rs_processed_buffers; @@ -196,7 +193,6 @@ protected: bool _adaptive_young_list_length; size_t _young_list_min_length; size_t _young_list_target_length; - size_t _young_list_so_prefix_length; size_t _young_list_fixed_length; size_t _young_cset_length; @@ -234,7 +230,6 @@ private: TruncatedSeq* _pending_card_diff_seq; TruncatedSeq* _rs_length_diff_seq; TruncatedSeq* _cost_per_card_ms_seq; - TruncatedSeq* _cost_per_scan_only_region_ms_seq; TruncatedSeq* _fully_young_cards_per_entry_ratio_seq; TruncatedSeq* _partially_young_cards_per_entry_ratio_seq; TruncatedSeq* _cost_per_entry_ms_seq; @@ -249,19 +244,16 @@ private: TruncatedSeq* _rs_lengths_seq; TruncatedSeq* _cost_per_byte_ms_during_cm_seq; - TruncatedSeq* _cost_per_scan_only_region_ms_during_cm_seq; TruncatedSeq* _young_gc_eff_seq; TruncatedSeq* _max_conc_overhead_seq; size_t _recorded_young_regions; - size_t _recorded_scan_only_regions; size_t _recorded_non_young_regions; size_t _recorded_region_num; size_t _free_regions_at_end_of_collection; - size_t _scan_only_regions_at_end_of_collection; size_t _recorded_rs_lengths; size_t _max_rs_lengths; @@ -277,7 +269,6 @@ private: double _predicted_survival_ratio; double _predicted_rs_update_time_ms; double _predicted_rs_scan_time_ms; - double _predicted_scan_only_scan_time_ms; double _predicted_object_copy_time_ms; double _predicted_constant_other_time_ms; double _predicted_young_other_time_ms; @@ -344,8 +335,6 @@ public: bool verify_young_ages(); #endif // PRODUCT - void tag_scan_only(size_t short_lived_scan_only_length); - double get_new_prediction(TruncatedSeq* seq) { return MAX2(seq->davg() + sigma() * seq->dsd(), seq->davg() * confidence_factor(seq->num())); @@ -431,23 +420,6 @@ public: get_new_prediction(_partially_young_cost_per_entry_ms_seq); } - double predict_scan_only_time_ms_during_cm(size_t scan_only_region_num) { - if (_cost_per_scan_only_region_ms_during_cm_seq->num() < 3) - return 1.5 * (double) scan_only_region_num * - get_new_prediction(_cost_per_scan_only_region_ms_seq); - else - return (double) scan_only_region_num * - get_new_prediction(_cost_per_scan_only_region_ms_during_cm_seq); - } - - double predict_scan_only_time_ms(size_t scan_only_region_num) { - if (_in_marking_window_im) - return predict_scan_only_time_ms_during_cm(scan_only_region_num); - else - return (double) scan_only_region_num * - get_new_prediction(_cost_per_scan_only_region_ms_seq); - } - double predict_object_copy_time_ms_during_cm(size_t bytes_to_copy) { if (_cost_per_byte_ms_during_cm_seq->num() < 3) return 1.1 * (double) bytes_to_copy * @@ -490,24 +462,21 @@ public: size_t predict_bytes_to_copy(HeapRegion* hr); double predict_region_elapsed_time_ms(HeapRegion* hr, bool young); - // for use by: calculate_optimal_so_length(length) - void predict_gc_eff(size_t young_region_num, - size_t so_length, - double base_time_ms, - double *gc_eff, - double *pause_time_ms); - - // for use by: calculate_young_list_target_config(rs_length) - bool predict_gc_eff(size_t young_region_num, - size_t so_length, - double base_time_with_so_ms, - size_t init_free_regions, - double target_pause_time_ms, - double* gc_eff); + // for use by: calculate_young_list_target_length(rs_length) + bool predict_will_fit(size_t young_region_num, + double base_time_ms, + size_t init_free_regions, + double target_pause_time_ms); void start_recording_regions(); - void record_cset_region(HeapRegion* hr, bool young); - void record_scan_only_regions(size_t scan_only_length); + void record_cset_region_info(HeapRegion* hr, bool young); + void record_non_young_cset_region(HeapRegion* hr); + + void set_recorded_young_regions(size_t n_regions); + void set_recorded_young_bytes(size_t bytes); + void set_recorded_rs_lengths(size_t rs_lengths); + void set_predicted_bytes_to_copy(size_t bytes); + void end_recording_regions(); void record_vtime_diff_ms(double vtime_diff_ms) { @@ -638,11 +607,74 @@ protected: void update_recent_gc_times(double end_time_sec, double elapsed_ms); // The head of the list (via "next_in_collection_set()") representing the - // current collection set. + // current collection set. Set from the incrementally built collection + // set at the start of the pause. HeapRegion* _collection_set; + + // The number of regions in the collection set. Set from the incrementally + // built collection set at the start of an evacuation pause. size_t _collection_set_size; + + // The number of bytes in the collection set before the pause. Set from + // the incrementally built collection set at the start of an evacuation + // pause. size_t _collection_set_bytes_used_before; + // The associated information that is maintained while the incremental + // collection set is being built with young regions. Used to populate + // the recorded info for the evacuation pause. + + enum CSetBuildType { + Active, // We are actively building the collection set + Inactive // We are not actively building the collection set + }; + + CSetBuildType _inc_cset_build_state; + + // The head of the incrementally built collection set. + HeapRegion* _inc_cset_head; + + // The tail of the incrementally built collection set. + HeapRegion* _inc_cset_tail; + + // The number of regions in the incrementally built collection set. + // Used to set _collection_set_size at the start of an evacuation + // pause. + size_t _inc_cset_size; + + // Used as the index in the surving young words structure + // which tracks the amount of space, for each young region, + // that survives the pause. + size_t _inc_cset_young_index; + + // The number of bytes in the incrementally built collection set. + // Used to set _collection_set_bytes_used_before at the start of + // an evacuation pause. + size_t _inc_cset_bytes_used_before; + + // Used to record the highest end of heap region in collection set + HeapWord* _inc_cset_max_finger; + + // The number of recorded used bytes in the young regions + // of the collection set. This is the sum of the used() bytes + // of retired young regions in the collection set. + size_t _inc_cset_recorded_young_bytes; + + // The RSet lengths recorded for regions in the collection set + // (updated by the periodic sampling of the regions in the + // young list/collection set). + size_t _inc_cset_recorded_rs_lengths; + + // The predicted elapsed time it will take to collect the regions + // in the collection set (updated by the periodic sampling of the + // regions in the young list/collection set). + double _inc_cset_predicted_elapsed_time_ms; + + // The predicted bytes to copy for the regions in the collection + // set (updated by the periodic sampling of the regions in the + // young list/collection set). + size_t _inc_cset_predicted_bytes_to_copy; + // Info about marking. int _n_marks; // Sticky at 2, so we know when we've done at least 2. @@ -761,9 +793,8 @@ protected: double _mark_closure_time_ms; void calculate_young_list_min_length(); - void calculate_young_list_target_config(); - void calculate_young_list_target_config(size_t rs_lengths); - size_t calculate_optimal_so_length(size_t young_list_length); + void calculate_young_list_target_length(); + void calculate_young_list_target_length(size_t rs_lengths); public: @@ -868,11 +899,6 @@ public: _par_last_mark_stack_scan_times_ms[worker_i] = ms; } - void record_scan_only_time(int worker_i, double ms, int n) { - _par_last_scan_only_times_ms[worker_i] = ms; - _par_last_scan_only_regions_scanned[worker_i] = (double) n; - } - void record_satb_drain_time(double ms) { _cur_satb_drain_time_ms = ms; _satb_drain_time_set = true; @@ -987,20 +1013,67 @@ public: // Choose a new collection set. Marks the chosen regions as being // "in_collection_set", and links them together. The head and number of // the collection set are available via access methods. - virtual void choose_collection_set() = 0; - - void clear_collection_set() { _collection_set = NULL; } + virtual bool choose_collection_set() = 0; // The head of the list (via "next_in_collection_set()") representing the // current collection set. HeapRegion* collection_set() { return _collection_set; } + void clear_collection_set() { _collection_set = NULL; } + // The number of elements in the current collection set. size_t collection_set_size() { return _collection_set_size; } // Add "hr" to the CS. void add_to_collection_set(HeapRegion* hr); + // Incremental CSet Support + + // The head of the incrementally built collection set. + HeapRegion* inc_cset_head() { return _inc_cset_head; } + + // The tail of the incrementally built collection set. + HeapRegion* inc_set_tail() { return _inc_cset_tail; } + + // The number of elements in the incrementally built collection set. + size_t inc_cset_size() { return _inc_cset_size; } + + // Initialize incremental collection set info. + void start_incremental_cset_building(); + + void clear_incremental_cset() { + _inc_cset_head = NULL; + _inc_cset_tail = NULL; + } + + // Stop adding regions to the incremental collection set + void stop_incremental_cset_building() { _inc_cset_build_state = Inactive; } + + // Add/remove information about hr to the aggregated information + // for the incrementally built collection set. + void add_to_incremental_cset_info(HeapRegion* hr, size_t rs_length); + void remove_from_incremental_cset_info(HeapRegion* hr); + + // Update information about hr in the aggregated information for + // the incrementally built collection set. + void update_incremental_cset_info(HeapRegion* hr, size_t new_rs_length); + +private: + // Update the incremental cset information when adding a region + // (should not be called directly). + void add_region_to_incremental_cset_common(HeapRegion* hr); + +public: + // Add hr to the LHS of the incremental collection set. + void add_region_to_incremental_cset_lhs(HeapRegion* hr); + + // Add hr to the RHS of the incremental collection set. + void add_region_to_incremental_cset_rhs(HeapRegion* hr); + +#ifndef PRODUCT + void print_collection_set(HeapRegion* list_head, outputStream* st); +#endif // !PRODUCT + bool initiate_conc_mark_if_possible() { return _initiate_conc_mark_if_possible; } void set_initiate_conc_mark_if_possible() { _initiate_conc_mark_if_possible = true; } void clear_initiate_conc_mark_if_possible() { _initiate_conc_mark_if_possible = false; } @@ -1191,7 +1264,7 @@ class G1CollectorPolicy_BestRegionsFirst: public G1CollectorPolicy { // If the estimated is less then desirable, resize if possible. void expand_if_possible(size_t numRegions); - virtual void choose_collection_set(); + virtual bool choose_collection_set(); virtual void record_collection_pause_start(double start_time_sec, size_t start_used); virtual void record_concurrent_mark_cleanup_end(size_t freed_bytes, diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp index 7e74f68d4d2..f6b1365943d 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp @@ -1,5 +1,5 @@ /* - * Copyright 2001-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2001-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 @@ -226,10 +226,6 @@ "the number of regions for which we'll print a surv rate " \ "summary.") \ \ - develop(bool, G1UseScanOnlyPrefix, false, \ - "It determines whether the system will calculate an optimum " \ - "scan-only set.") \ - \ product(intx, G1ReservePercent, 10, \ "It determines the minimum reserve we should have in the heap " \ "to minimize the probability of promotion failure.") \ diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp b/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp index 2fa9f702aa9..bff10363daf 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2001-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2001-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 @@ -450,7 +450,9 @@ HeapRegion(G1BlockOffsetSharedArray* sharedOffsetArray, _young_type(NotYoung), _next_young_region(NULL), _next_dirty_cards_region(NULL), _young_index_in_cset(-1), _surv_rate_group(NULL), _age_index(-1), - _rem_set(NULL), _zfs(NotZeroFilled) + _rem_set(NULL), _zfs(NotZeroFilled), + _recorded_rs_length(0), _predicted_elapsed_time_ms(0), + _predicted_bytes_to_copy(0) { _orig_end = mr.end(); // Note that initialize() will set the start of the unmarked area of the @@ -733,7 +735,7 @@ void HeapRegion::print_on(outputStream* st) const { else st->print(" "); if (is_young()) - st->print(is_scan_only() ? " SO" : (is_survivor() ? " SU" : " Y ")); + st->print(is_survivor() ? " SU" : " Y "); else st->print(" "); if (is_empty()) diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegion.hpp b/hotspot/src/share/vm/gc_implementation/g1/heapRegion.hpp index fd88a3798b4..0ed1ededc54 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegion.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegion.hpp @@ -1,5 +1,5 @@ /* - * Copyright 2001-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2001-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 @@ -247,7 +247,6 @@ class HeapRegion: public G1OffsetTableContigSpace { enum YoungType { NotYoung, // a region is not young - ScanOnly, // a region is young and scan-only Young, // a region is young Survivor // a region is young and it contains // survivor @@ -292,6 +291,20 @@ class HeapRegion: public G1OffsetTableContigSpace { _young_type = new_type; } + // Cached attributes used in the collection set policy information + + // The RSet length that was added to the total value + // for the collection set. + size_t _recorded_rs_length; + + // The predicted elapsed time that was added to total value + // for the collection set. + double _predicted_elapsed_time_ms; + + // The predicted number of bytes to copy that was added to + // the total value for the collection set. + size_t _predicted_bytes_to_copy; + public: // If "is_zeroed" is "true", the region "mr" can be assumed to contain zeros. HeapRegion(G1BlockOffsetSharedArray* sharedOffsetArray, @@ -614,7 +627,6 @@ class HeapRegion: public G1OffsetTableContigSpace { // bool is_young() const { return _young_type != NotYoung; } - bool is_scan_only() const { return _young_type == ScanOnly; } bool is_survivor() const { return _young_type == Survivor; } int young_index_in_cset() const { return _young_index_in_cset; } @@ -629,12 +641,6 @@ class HeapRegion: public G1OffsetTableContigSpace { return _surv_rate_group->age_in_group(_age_index); } - void recalculate_age_in_surv_rate_group() { - assert( _surv_rate_group != NULL, "pre-condition" ); - assert( _age_index > -1, "pre-condition" ); - _age_index = _surv_rate_group->recalculate_age_index(_age_index); - } - void record_surv_words_in_group(size_t words_survived) { assert( _surv_rate_group != NULL, "pre-condition" ); assert( _age_index > -1, "pre-condition" ); @@ -676,8 +682,6 @@ class HeapRegion: public G1OffsetTableContigSpace { void set_young() { set_young_type(Young); } - void set_scan_only() { set_young_type(ScanOnly); } - void set_survivor() { set_young_type(Survivor); } void set_not_young() { set_young_type(NotYoung); } @@ -775,6 +779,22 @@ class HeapRegion: public G1OffsetTableContigSpace { _zero_filler = NULL; } + size_t recorded_rs_length() const { return _recorded_rs_length; } + double predicted_elapsed_time_ms() const { return _predicted_elapsed_time_ms; } + size_t predicted_bytes_to_copy() const { return _predicted_bytes_to_copy; } + + void set_recorded_rs_length(size_t rs_length) { + _recorded_rs_length = rs_length; + } + + void set_predicted_elapsed_time_ms(double ms) { + _predicted_elapsed_time_ms = ms; + } + + void set_predicted_bytes_to_copy(size_t bytes) { + _predicted_bytes_to_copy = bytes; + } + #define HeapRegion_OOP_SINCE_SAVE_MARKS_DECL(OopClosureType, nv_suffix) \ virtual void oop_since_save_marks_iterate##nv_suffix(OopClosureType* cl); SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES(HeapRegion_OOP_SINCE_SAVE_MARKS_DECL) diff --git a/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.cpp b/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.cpp index e1d2b1890f6..371d72b407a 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2001-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2001-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 @@ -55,7 +55,6 @@ SurvRateGroup::SurvRateGroup(G1CollectorPolicy* g1p, void SurvRateGroup::reset() { _all_regions_allocated = 0; - _scan_only_prefix = 0; _setup_seq_num = 0; _stats_arrays_length = 0; _accum_surv_rate = 0.0; @@ -74,7 +73,7 @@ void SurvRateGroup::reset() void SurvRateGroup::start_adding_regions() { _setup_seq_num = _stats_arrays_length; - _region_num = _scan_only_prefix; + _region_num = 0; _accum_surv_rate = 0.0; #if 0 @@ -163,12 +162,6 @@ SurvRateGroup::next_age_index() { return (int) ++_all_regions_allocated; } -void -SurvRateGroup::record_scan_only_prefix(size_t scan_only_prefix) { - guarantee( scan_only_prefix <= _region_num, "pre-condition" ); - _scan_only_prefix = scan_only_prefix; -} - void SurvRateGroup::record_surviving_words(int age_in_group, size_t surv_words) { guarantee( 0 <= age_in_group && (size_t) age_in_group < _region_num, @@ -218,13 +211,12 @@ SurvRateGroup::all_surviving_words_recorded(bool propagate) { #ifndef PRODUCT void SurvRateGroup::print() { - gclog_or_tty->print_cr("Surv Rate Group: %s (%d entries, %d scan-only)", - _name, _region_num, _scan_only_prefix); + gclog_or_tty->print_cr("Surv Rate Group: %s (%d entries)", + _name, _region_num); for (size_t i = 0; i < _region_num; ++i) { - gclog_or_tty->print_cr(" age %4d surv rate %6.2lf %% pred %6.2lf %%%s", + gclog_or_tty->print_cr(" age %4d surv rate %6.2lf %% pred %6.2lf %%", i, _surv_rate[i] * 100.0, - _g1p->get_new_prediction(_surv_rate_pred[i]) * 100.0, - (i < _scan_only_prefix) ? " S-O" : " "); + _g1p->get_new_prediction(_surv_rate_pred[i]) * 100.0); } } diff --git a/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.hpp b/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.hpp index 889453b3cea..dca1cdc09af 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.hpp @@ -1,5 +1,5 @@ /* - * Copyright 2001-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2001-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 @@ -41,7 +41,6 @@ private: int _all_regions_allocated; size_t _region_num; - size_t _scan_only_prefix; size_t _setup_seq_num; public: @@ -51,13 +50,11 @@ public: void reset(); void start_adding_regions(); void stop_adding_regions(); - void record_scan_only_prefix(size_t scan_only_prefix); void record_surviving_words(int age_in_group, size_t surv_words); void all_surviving_words_recorded(bool propagate); const char* name() { return _name; } size_t region_num() { return _region_num; } - size_t scan_only_length() { return _scan_only_prefix; } double accum_surv_rate_pred(int age) { assert(age >= 0, "must be"); if ((size_t)age < _stats_arrays_length) @@ -82,17 +79,12 @@ public: int next_age_index(); int age_in_group(int age_index) { - int ret = (int) (_all_regions_allocated - age_index); + int ret = (int) (_all_regions_allocated - age_index); assert( ret >= 0, "invariant" ); return ret; } - int recalculate_age_index(int age_index) { - int new_age_index = (int) _scan_only_prefix - age_in_group(age_index); - guarantee( new_age_index >= 0, "invariant" ); - return new_age_index; - } void finished_recalculating_age_indexes() { - _all_regions_allocated = (int) _scan_only_prefix; + _all_regions_allocated = 0; } #ifndef PRODUCT diff --git a/hotspot/src/share/vm/services/g1MemoryPool.cpp b/hotspot/src/share/vm/services/g1MemoryPool.cpp index 7b73f7c79ba..b15b322160b 100644 --- a/hotspot/src/share/vm/services/g1MemoryPool.cpp +++ b/hotspot/src/share/vm/services/g1MemoryPool.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2007-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 @@ -45,7 +45,7 @@ size_t G1MemoryPoolSuper::eden_space_committed(G1CollectedHeap* g1h) { // See the comment at the top of g1MemoryPool.hpp size_t G1MemoryPoolSuper::eden_space_used(G1CollectedHeap* g1h) { - size_t young_list_length = g1h->young_list_length(); + size_t young_list_length = g1h->young_list()->length(); size_t eden_used = young_list_length * HeapRegion::GrainBytes; size_t survivor_used = survivor_space_used(g1h); eden_used = subtract_up_to_zero(eden_used, survivor_used); From 7105f7c9c3b10e98a5851908979511434c994540 Mon Sep 17 00:00:00 2001 From: Michael Wilkerson Date: Thu, 22 Apr 2010 16:54:18 -0700 Subject: [PATCH 70/91] Added tag jdk7-b90 for changeset ffbb10639cc8 --- .hgtags-top-repo | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags-top-repo b/.hgtags-top-repo index 5abe6bf24de..56347c8d156 100644 --- a/.hgtags-top-repo +++ b/.hgtags-top-repo @@ -64,3 +64,4 @@ cf26288a114be67c39f2758959ce50b60f5ae330 jdk7-b85 6b1069f53fbc30663ccef49d78c31bb7d6967bde jdk7-b87 82135c848d5fcddb065e98ae77b81077c858f593 jdk7-b88 7f1ba4459972bf84b8201dc1cc4f62b1fe1c74f4 jdk7-b89 +425ba3efabbfe0b188105c10aaf7c3c8fa8d1a38 jdk7-b90 From 6b237fafac229a5a2015215c516dda44a88e1ac6 Mon Sep 17 00:00:00 2001 From: Michael Wilkerson Date: Thu, 22 Apr 2010 16:54:19 -0700 Subject: [PATCH 71/91] Added tag jdk7-b90 for changeset 637841d87234 --- corba/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/corba/.hgtags b/corba/.hgtags index 97e7794b2b6..405a05a6939 100644 --- a/corba/.hgtags +++ b/corba/.hgtags @@ -64,3 +64,4 @@ c67a9df7bc0ca291f08f9a9cc05cb78ea15d25e6 jdk7-b85 09a41111a401d327f65e453384d976a10154d9ea jdk7-b87 39e14d2da687c7e592142137517aaf689544820f jdk7-b88 bb4424c5e778b842c064a8b1aa902b35f4397654 jdk7-b89 +56ce07b0eb47b93a98a72adef0f21e602c460623 jdk7-b90 From f0c93107d37b38ff420472635470e0a99899ff56 Mon Sep 17 00:00:00 2001 From: Michael Wilkerson Date: Thu, 22 Apr 2010 16:54:23 -0700 Subject: [PATCH 72/91] Added tag jdk7-b90 for changeset f1a81d71d1c6 --- hotspot/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/hotspot/.hgtags b/hotspot/.hgtags index 4b0784bf932..a47a270d5e8 100644 --- a/hotspot/.hgtags +++ b/hotspot/.hgtags @@ -89,3 +89,4 @@ e7e7e36ccdb5d56edd47e5744351202d38f3b7ad jdk7-b87 4b60f23c42231f7ecd62ad1fcb6a9ca26fa57d1b jdk7-b88 15836273ac2494f36ef62088bc1cb6f3f011f565 jdk7-b89 4b60f23c42231f7ecd62ad1fcb6a9ca26fa57d1b hs18-b02 +605c9707a766ff518cd841fc04f9bb4b36a3a30b jdk7-b90 From 1c77657b60762a1173bbfc1306b65d7935cec4ce Mon Sep 17 00:00:00 2001 From: Michael Wilkerson Date: Thu, 22 Apr 2010 16:54:28 -0700 Subject: [PATCH 73/91] Added tag jdk7-b90 for changeset 785ad20ceb84 --- jaxp/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/jaxp/.hgtags b/jaxp/.hgtags index 24f93501115..906fcdd5f09 100644 --- a/jaxp/.hgtags +++ b/jaxp/.hgtags @@ -64,3 +64,4 @@ c876ad22e4bf9d3c6460080db7ace478e29a3ff9 jdk7-b82 8b493f1aa136d86de0885fcba15262c4fa2b1412 jdk7-b87 d8ebd15910034f2ba50b2f129f959f86cca01419 jdk7-b88 d2818fd2b036f3b3154a9a7de41afcf4ac679c1b jdk7-b89 +c5d932ee326d6f7fd4634b11c7185ea82d184df2 jdk7-b90 From 4eb5d78bbefa43b917fde5c214ba728442ca65ff Mon Sep 17 00:00:00 2001 From: Michael Wilkerson Date: Thu, 22 Apr 2010 16:54:28 -0700 Subject: [PATCH 74/91] Added tag jdk7-b90 for changeset ab2911ce6db7 --- jaxws/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/jaxws/.hgtags b/jaxws/.hgtags index a929154499b..d988da222a4 100644 --- a/jaxws/.hgtags +++ b/jaxws/.hgtags @@ -64,3 +64,4 @@ f051045fe94a48fae1097f90cbd9227e6aae6b7e jdk7-b81 3febd6fab2ac8ffddbaf7bed00d11290262af153 jdk7-b87 8c666f8f3565974e301ccb58b7538912551a6e26 jdk7-b88 bf3675aa7f20fc6f241ce95760005aef2a30ff41 jdk7-b89 +ead7c4566a0017bcb44b468b3ac03b60dc5333ce jdk7-b90 From 68bf3a5f3774c50f611d557085f89dad09d3812c Mon Sep 17 00:00:00 2001 From: Michael Wilkerson Date: Thu, 22 Apr 2010 16:54:34 -0700 Subject: [PATCH 75/91] Added tag jdk7-b90 for changeset 89baf99a5e06 --- jdk/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/jdk/.hgtags b/jdk/.hgtags index 83aac469273..95bdf2ea44c 100644 --- a/jdk/.hgtags +++ b/jdk/.hgtags @@ -64,3 +64,4 @@ eae6e9ab26064d9ba0e7665dd646a1fd2506fcc1 jdk7-b86 2cafbbe9825e911a6ca6c17d9a18eb1f0bf0873c jdk7-b87 b3c69282f6d3c90ec21056cd1ab70dc0c895b069 jdk7-b88 4a6abb7e224cc8d9a583c23c5782e4668739a119 jdk7-b89 +7f90d0b9dbb7ab4c60d0b0233e4e77fb4fac597c jdk7-b90 From 24bf601cb1f1120252a97dfd60e5aa75638afc3f Mon Sep 17 00:00:00 2001 From: Michael Wilkerson Date: Thu, 22 Apr 2010 16:54:44 -0700 Subject: [PATCH 76/91] Added tag jdk7-b90 for changeset e04dfc23e480 --- langtools/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/langtools/.hgtags b/langtools/.hgtags index b143649c02c..c855c6e4256 100644 --- a/langtools/.hgtags +++ b/langtools/.hgtags @@ -64,3 +64,4 @@ ef07347428f2198ae6b8144ac0b9086bbe39fd16 jdk7-b86 409db93d19c002333980df5b797c6b965150c7a0 jdk7-b87 f9b5d4867a26f8c4b90ad37fe2c345b721e93d6b jdk7-b88 6cea9a143208bc1185ced046942c0f4e45dbeba5 jdk7-b89 +71c2c23a7c35b2896c87004023b9743b6d1b7758 jdk7-b90 From cd48f31efee9c39d657de6f714ca4d84cfa1d5fa Mon Sep 17 00:00:00 2001 From: Hiroshi Yamauchi Date: Mon, 26 Apr 2010 11:27:21 -0700 Subject: [PATCH 77/91] 6946040: add intrinsic for short and char reverseBytes Reviewed-by: never, twisti --- hotspot/make/linux/makefiles/adlc.make | 5 +- hotspot/make/solaris/makefiles/adlc.make | 5 +- hotspot/src/cpu/sparc/vm/assembler_sparc.hpp | 3 - hotspot/src/cpu/sparc/vm/sparc.ad | 184 ++++++++++++------ hotspot/src/cpu/x86/vm/x86_32.ad | 26 ++- hotspot/src/cpu/x86/vm/x86_64.ad | 26 ++- hotspot/src/share/vm/adlc/formssel.cpp | 4 +- hotspot/src/share/vm/classfile/vmSymbols.hpp | 8 +- hotspot/src/share/vm/opto/classes.hpp | 4 +- hotspot/src/share/vm/opto/library_call.cpp | 22 ++- hotspot/src/share/vm/opto/subnode.hpp | 22 ++- hotspot/test/compiler/6431242/Test.java | 176 +++++++++++++++++ .../6946040/TestCharShortByteSwap.java | 88 +++++++++ 13 files changed, 495 insertions(+), 78 deletions(-) create mode 100644 hotspot/test/compiler/6431242/Test.java create mode 100644 hotspot/test/compiler/6946040/TestCharShortByteSwap.java diff --git a/hotspot/make/linux/makefiles/adlc.make b/hotspot/make/linux/makefiles/adlc.make index 927462967f7..daea9555929 100644 --- a/hotspot/make/linux/makefiles/adlc.make +++ b/hotspot/make/linux/makefiles/adlc.make @@ -127,6 +127,9 @@ $(GENERATEDFILES): refresh_adfiles # Note that product files are updated via "mv", which is atomic. TEMPDIR := $(OUTDIR)/mktmp$(shell echo $$$$) +# Debuggable by default +CFLAGS += -g + # Pass -D flags into ADLC. ADLCFLAGS += $(SYSDEFS) @@ -135,7 +138,7 @@ ADLCFLAGS += -q -T # Normally, debugging is done directly on the ad_*.cpp files. # But -g will put #line directives in those files pointing back to .ad. -#ADLCFLAGS += -g +ADLCFLAGS += -g ifdef LP64 ADLCFLAGS += -D_LP64 diff --git a/hotspot/make/solaris/makefiles/adlc.make b/hotspot/make/solaris/makefiles/adlc.make index e2f848c26a5..47c521538e0 100644 --- a/hotspot/make/solaris/makefiles/adlc.make +++ b/hotspot/make/solaris/makefiles/adlc.make @@ -147,6 +147,9 @@ $(GENERATEDFILES): refresh_adfiles # Note that product files are updated via "mv", which is atomic. TEMPDIR := $(OUTDIR)/mktmp$(shell echo $$$$) +# Debuggable by default +CFLAGS += -g + # Pass -D flags into ADLC. ADLCFLAGS += $(SYSDEFS) @@ -155,7 +158,7 @@ ADLCFLAGS += -q -T # Normally, debugging is done directly on the ad_*.cpp files. # But -g will put #line directives in those files pointing back to .ad. -#ADLCFLAGS += -g +ADLCFLAGS += -g ifdef LP64 ADLCFLAGS += -D_LP64 diff --git a/hotspot/src/cpu/sparc/vm/assembler_sparc.hpp b/hotspot/src/cpu/sparc/vm/assembler_sparc.hpp index 1e184bd4584..f053ec57771 100644 --- a/hotspot/src/cpu/sparc/vm/assembler_sparc.hpp +++ b/hotspot/src/cpu/sparc/vm/assembler_sparc.hpp @@ -661,9 +661,6 @@ class Assembler : public AbstractAssembler { stx_op3 = 0x0e, swap_op3 = 0x0f, - lduwa_op3 = 0x10, - ldxa_op3 = 0x1b, - stwa_op3 = 0x14, stxa_op3 = 0x1e, diff --git a/hotspot/src/cpu/sparc/vm/sparc.ad b/hotspot/src/cpu/sparc/vm/sparc.ad index 7f495a9569f..8991015596e 100644 --- a/hotspot/src/cpu/sparc/vm/sparc.ad +++ b/hotspot/src/cpu/sparc/vm/sparc.ad @@ -923,38 +923,6 @@ void emit_form3_mem_reg(CodeBuffer &cbuf, const MachNode* n, int primary, int te #endif } -void emit_form3_mem_reg_asi(CodeBuffer &cbuf, const MachNode* n, int primary, int tertiary, - int src1_enc, int disp32, int src2_enc, int dst_enc, int asi) { - - uint instr; - instr = (Assembler::ldst_op << 30) - | (dst_enc << 25) - | (primary << 19) - | (src1_enc << 14); - - int disp = disp32; - int index = src2_enc; - - if (src1_enc == R_SP_enc || src1_enc == R_FP_enc) - disp += STACK_BIAS; - - // We should have a compiler bailout here rather than a guarantee. - // Better yet would be some mechanism to handle variable-size matches correctly. - guarantee(Assembler::is_simm13(disp), "Do not match large constant offsets" ); - - if( disp != 0 ) { - // use reg-reg form - // set src2=R_O7 contains offset - index = R_O7_enc; - emit3_simm13( cbuf, Assembler::arith_op, index, Assembler::or_op3, 0, disp); - } - instr |= (asi << 5); - instr |= index; - uint *code = (uint*)cbuf.code_end(); - *code = instr; - cbuf.set_code_end(cbuf.code_end() + BytesPerInstWord); -} - void emit_call_reloc(CodeBuffer &cbuf, intptr_t entry_point, relocInfo::relocType rtype, bool preserve_g2 = false, bool force_far_call = false) { // The method which records debug information at every safepoint // expects the call to be the first instruction in the snippet as @@ -1954,11 +1922,6 @@ encode %{ $mem$$base, $mem$$disp, $mem$$index, $dst$$reg); %} - enc_class form3_mem_reg_little( memory mem, iRegI dst) %{ - emit_form3_mem_reg_asi(cbuf, this, $primary, -1, - $mem$$base, $mem$$disp, $mem$$index, $dst$$reg, Assembler::ASI_PRIMARY_LITTLE); - %} - enc_class form3_mem_prefetch_read( memory mem ) %{ emit_form3_mem_reg(cbuf, this, $primary, -1, $mem$$base, $mem$$disp, $mem$$index, 0/*prefetch function many-reads*/); @@ -4311,8 +4274,8 @@ operand cmpOp_commute() %{ // instructions for every form of operand when the instruction accepts // multiple operand types with the same basic encoding and format. The classic // case of this is memory operands. -// Indirect is not included since its use is limited to Compare & Swap opclass memory( indirect, indOffset13, indIndex ); +opclass indIndexMemory( indIndex ); //----------PIPELINE----------------------------------------------------------- pipeline %{ @@ -9666,84 +9629,179 @@ instruct popCountL(iRegI dst, iRegL src) %{ instruct bytes_reverse_int(iRegI dst, stackSlotI src) %{ match(Set dst (ReverseBytesI src)); - effect(DEF dst, USE src); // Op cost is artificially doubled to make sure that load or store // instructions are preferred over this one which requires a spill // onto a stack slot. ins_cost(2*DEFAULT_COST + MEMORY_REF_COST); - size(8); format %{ "LDUWA $src, $dst\t!asi=primary_little" %} - opcode(Assembler::lduwa_op3); - ins_encode( form3_mem_reg_little(src, dst) ); + + ins_encode %{ + __ set($src$$disp + STACK_BIAS, O7); + __ lduwa($src$$base$$Register, O7, Assembler::ASI_PRIMARY_LITTLE, $dst$$Register); + %} ins_pipe( iload_mem ); %} instruct bytes_reverse_long(iRegL dst, stackSlotL src) %{ match(Set dst (ReverseBytesL src)); - effect(DEF dst, USE src); // Op cost is artificially doubled to make sure that load or store // instructions are preferred over this one which requires a spill // onto a stack slot. ins_cost(2*DEFAULT_COST + MEMORY_REF_COST); - size(8); format %{ "LDXA $src, $dst\t!asi=primary_little" %} - opcode(Assembler::ldxa_op3); - ins_encode( form3_mem_reg_little(src, dst) ); + ins_encode %{ + __ set($src$$disp + STACK_BIAS, O7); + __ ldxa($src$$base$$Register, O7, Assembler::ASI_PRIMARY_LITTLE, $dst$$Register); + %} + ins_pipe( iload_mem ); +%} + +instruct bytes_reverse_unsigned_short(iRegI dst, stackSlotI src) %{ + match(Set dst (ReverseBytesUS src)); + + // Op cost is artificially doubled to make sure that load or store + // instructions are preferred over this one which requires a spill + // onto a stack slot. + ins_cost(2*DEFAULT_COST + MEMORY_REF_COST); + format %{ "LDUHA $src, $dst\t!asi=primary_little\n\t" %} + + ins_encode %{ + // the value was spilled as an int so bias the load + __ set($src$$disp + STACK_BIAS + 2, O7); + __ lduha($src$$base$$Register, O7, Assembler::ASI_PRIMARY_LITTLE, $dst$$Register); + %} + ins_pipe( iload_mem ); +%} + +instruct bytes_reverse_short(iRegI dst, stackSlotI src) %{ + match(Set dst (ReverseBytesS src)); + + // Op cost is artificially doubled to make sure that load or store + // instructions are preferred over this one which requires a spill + // onto a stack slot. + ins_cost(2*DEFAULT_COST + MEMORY_REF_COST); + format %{ "LDSHA $src, $dst\t!asi=primary_little\n\t" %} + + ins_encode %{ + // the value was spilled as an int so bias the load + __ set($src$$disp + STACK_BIAS + 2, O7); + __ ldsha($src$$base$$Register, O7, Assembler::ASI_PRIMARY_LITTLE, $dst$$Register); + %} ins_pipe( iload_mem ); %} // Load Integer reversed byte order -instruct loadI_reversed(iRegI dst, memory src) %{ +instruct loadI_reversed(iRegI dst, indIndexMemory src) %{ match(Set dst (ReverseBytesI (LoadI src))); ins_cost(DEFAULT_COST + MEMORY_REF_COST); - size(8); + size(4); format %{ "LDUWA $src, $dst\t!asi=primary_little" %} - opcode(Assembler::lduwa_op3); - ins_encode( form3_mem_reg_little( src, dst) ); + ins_encode %{ + __ lduwa($src$$base$$Register, $src$$index$$Register, Assembler::ASI_PRIMARY_LITTLE, $dst$$Register); + %} ins_pipe(iload_mem); %} // Load Long - aligned and reversed -instruct loadL_reversed(iRegL dst, memory src) %{ +instruct loadL_reversed(iRegL dst, indIndexMemory src) %{ match(Set dst (ReverseBytesL (LoadL src))); - ins_cost(DEFAULT_COST + MEMORY_REF_COST); - size(8); + ins_cost(MEMORY_REF_COST); + size(4); format %{ "LDXA $src, $dst\t!asi=primary_little" %} - opcode(Assembler::ldxa_op3); - ins_encode( form3_mem_reg_little( src, dst ) ); + ins_encode %{ + __ ldxa($src$$base$$Register, $src$$index$$Register, Assembler::ASI_PRIMARY_LITTLE, $dst$$Register); + %} + ins_pipe(iload_mem); +%} + +// Load unsigned short / char reversed byte order +instruct loadUS_reversed(iRegI dst, indIndexMemory src) %{ + match(Set dst (ReverseBytesUS (LoadUS src))); + + ins_cost(MEMORY_REF_COST); + size(4); + format %{ "LDUHA $src, $dst\t!asi=primary_little" %} + + ins_encode %{ + __ lduha($src$$base$$Register, $src$$index$$Register, Assembler::ASI_PRIMARY_LITTLE, $dst$$Register); + %} + ins_pipe(iload_mem); +%} + +// Load short reversed byte order +instruct loadS_reversed(iRegI dst, indIndexMemory src) %{ + match(Set dst (ReverseBytesS (LoadS src))); + + ins_cost(MEMORY_REF_COST); + size(4); + format %{ "LDSHA $src, $dst\t!asi=primary_little" %} + + ins_encode %{ + __ ldsha($src$$base$$Register, $src$$index$$Register, Assembler::ASI_PRIMARY_LITTLE, $dst$$Register); + %} ins_pipe(iload_mem); %} // Store Integer reversed byte order -instruct storeI_reversed(memory dst, iRegI src) %{ +instruct storeI_reversed(indIndexMemory dst, iRegI src) %{ match(Set dst (StoreI dst (ReverseBytesI src))); ins_cost(MEMORY_REF_COST); - size(8); + size(4); format %{ "STWA $src, $dst\t!asi=primary_little" %} - opcode(Assembler::stwa_op3); - ins_encode( form3_mem_reg_little( dst, src) ); + ins_encode %{ + __ stwa($src$$Register, $dst$$base$$Register, $dst$$index$$Register, Assembler::ASI_PRIMARY_LITTLE); + %} ins_pipe(istore_mem_reg); %} // Store Long reversed byte order -instruct storeL_reversed(memory dst, iRegL src) %{ +instruct storeL_reversed(indIndexMemory dst, iRegL src) %{ match(Set dst (StoreL dst (ReverseBytesL src))); ins_cost(MEMORY_REF_COST); - size(8); + size(4); format %{ "STXA $src, $dst\t!asi=primary_little" %} - opcode(Assembler::stxa_op3); - ins_encode( form3_mem_reg_little( dst, src) ); + ins_encode %{ + __ stxa($src$$Register, $dst$$base$$Register, $dst$$index$$Register, Assembler::ASI_PRIMARY_LITTLE); + %} + ins_pipe(istore_mem_reg); +%} + +// Store unsighed short/char reversed byte order +instruct storeUS_reversed(indIndexMemory dst, iRegI src) %{ + match(Set dst (StoreC dst (ReverseBytesUS src))); + + ins_cost(MEMORY_REF_COST); + size(4); + format %{ "STHA $src, $dst\t!asi=primary_little" %} + + ins_encode %{ + __ stha($src$$Register, $dst$$base$$Register, $dst$$index$$Register, Assembler::ASI_PRIMARY_LITTLE); + %} + ins_pipe(istore_mem_reg); +%} + +// Store short reversed byte order +instruct storeS_reversed(indIndexMemory dst, iRegI src) %{ + match(Set dst (StoreC dst (ReverseBytesS src))); + + ins_cost(MEMORY_REF_COST); + size(4); + format %{ "STHA $src, $dst\t!asi=primary_little" %} + + ins_encode %{ + __ stha($src$$Register, $dst$$base$$Register, $dst$$index$$Register, Assembler::ASI_PRIMARY_LITTLE); + %} ins_pipe(istore_mem_reg); %} diff --git a/hotspot/src/cpu/x86/vm/x86_32.ad b/hotspot/src/cpu/x86/vm/x86_32.ad index 4e78eb1b7f1..9455d15d13a 100644 --- a/hotspot/src/cpu/x86/vm/x86_32.ad +++ b/hotspot/src/cpu/x86/vm/x86_32.ad @@ -1,5 +1,5 @@ // -// Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved. +// Copyright 1997-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 @@ -6272,6 +6272,30 @@ instruct bytes_reverse_long(eRegL dst) %{ ins_pipe( ialu_reg_reg); %} +instruct bytes_reverse_unsigned_short(eRegI dst) %{ + match(Set dst (ReverseBytesUS dst)); + + format %{ "BSWAP $dst\n\t" + "SHR $dst,16\n\t" %} + ins_encode %{ + __ bswapl($dst$$Register); + __ shrl($dst$$Register, 16); + %} + ins_pipe( ialu_reg ); +%} + +instruct bytes_reverse_short(eRegI dst) %{ + match(Set dst (ReverseBytesS dst)); + + format %{ "BSWAP $dst\n\t" + "SAR $dst,16\n\t" %} + ins_encode %{ + __ bswapl($dst$$Register); + __ sarl($dst$$Register, 16); + %} + ins_pipe( ialu_reg ); +%} + //---------- Zeros Count Instructions ------------------------------------------ diff --git a/hotspot/src/cpu/x86/vm/x86_64.ad b/hotspot/src/cpu/x86/vm/x86_64.ad index 32e8eaceeaf..c5eecc626c4 100644 --- a/hotspot/src/cpu/x86/vm/x86_64.ad +++ b/hotspot/src/cpu/x86/vm/x86_64.ad @@ -1,5 +1,5 @@ // -// Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved. +// Copyright 2003-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 @@ -7371,6 +7371,30 @@ instruct bytes_reverse_long(rRegL dst) %{ ins_pipe( ialu_reg); %} +instruct bytes_reverse_unsigned_short(rRegI dst) %{ + match(Set dst (ReverseBytesUS dst)); + + format %{ "bswapl $dst\n\t" + "shrl $dst,16\n\t" %} + ins_encode %{ + __ bswapl($dst$$Register); + __ shrl($dst$$Register, 16); + %} + ins_pipe( ialu_reg ); +%} + +instruct bytes_reverse_short(rRegI dst) %{ + match(Set dst (ReverseBytesS dst)); + + format %{ "bswapl $dst\n\t" + "sar $dst,16\n\t" %} + ins_encode %{ + __ bswapl($dst$$Register); + __ sarl($dst$$Register, 16); + %} + ins_pipe( ialu_reg ); +%} + instruct loadI_reversed(rRegI dst, memory src) %{ match(Set dst (ReverseBytesI (LoadI src))); diff --git a/hotspot/src/share/vm/adlc/formssel.cpp b/hotspot/src/share/vm/adlc/formssel.cpp index 2ec20c66109..5791248f3e1 100644 --- a/hotspot/src/share/vm/adlc/formssel.cpp +++ b/hotspot/src/share/vm/adlc/formssel.cpp @@ -1,5 +1,5 @@ /* - * Copyright 1998-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1998-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 @@ -3861,6 +3861,8 @@ int MatchRule::is_expensive() const { strcmp(opType,"RoundFloat")==0 || strcmp(opType,"ReverseBytesI")==0 || strcmp(opType,"ReverseBytesL")==0 || + strcmp(opType,"ReverseBytesUS")==0 || + strcmp(opType,"ReverseBytesS")==0 || strcmp(opType,"Replicate16B")==0 || strcmp(opType,"Replicate8B")==0 || strcmp(opType,"Replicate4B")==0 || diff --git a/hotspot/src/share/vm/classfile/vmSymbols.hpp b/hotspot/src/share/vm/classfile/vmSymbols.hpp index 0b4652157d1..a7ee43ee6ac 100644 --- a/hotspot/src/share/vm/classfile/vmSymbols.hpp +++ b/hotspot/src/share/vm/classfile/vmSymbols.hpp @@ -1,5 +1,5 @@ /* - * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-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 @@ -357,6 +357,8 @@ template(void_double_signature, "()D") \ template(int_void_signature, "(I)V") \ template(int_int_signature, "(I)I") \ + template(char_char_signature, "(C)C") \ + template(short_short_signature, "(S)S") \ template(int_bool_signature, "(I)Z") \ template(float_int_signature, "(F)I") \ template(double_long_signature, "(D)J") \ @@ -584,6 +586,10 @@ do_intrinsic(_reverseBytes_i, java_lang_Integer, reverseBytes_name, int_int_signature, F_S) \ do_name( reverseBytes_name, "reverseBytes") \ do_intrinsic(_reverseBytes_l, java_lang_Long, reverseBytes_name, long_long_signature, F_S) \ + /* (symbol reverseBytes_name defined above) */ \ + do_intrinsic(_reverseBytes_c, java_lang_Character, reverseBytes_name, char_char_signature, F_S) \ + /* (symbol reverseBytes_name defined above) */ \ + do_intrinsic(_reverseBytes_s, java_lang_Short, reverseBytes_name, short_short_signature, F_S) \ /* (symbol reverseBytes_name defined above) */ \ \ do_intrinsic(_identityHashCode, java_lang_System, identityHashCode_name, object_int_signature, F_S) \ diff --git a/hotspot/src/share/vm/opto/classes.hpp b/hotspot/src/share/vm/opto/classes.hpp index f2320fc7ebe..acb4fe0e1cf 100644 --- a/hotspot/src/share/vm/opto/classes.hpp +++ b/hotspot/src/share/vm/opto/classes.hpp @@ -1,5 +1,5 @@ /* - * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-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 @@ -44,6 +44,8 @@ macro(Bool) macro(BoxLock) macro(ReverseBytesI) macro(ReverseBytesL) +macro(ReverseBytesUS) +macro(ReverseBytesS) macro(CProj) macro(CallDynamicJava) macro(CallJava) diff --git a/hotspot/src/share/vm/opto/library_call.cpp b/hotspot/src/share/vm/opto/library_call.cpp index 8f69208911e..eaa2a06ebb4 100644 --- a/hotspot/src/share/vm/opto/library_call.cpp +++ b/hotspot/src/share/vm/opto/library_call.cpp @@ -636,6 +636,8 @@ bool LibraryCallKit::try_to_inline() { case vmIntrinsics::_reverseBytes_i: case vmIntrinsics::_reverseBytes_l: + case vmIntrinsics::_reverseBytes_s: + case vmIntrinsics::_reverseBytes_c: return inline_reverseBytes((vmIntrinsics::ID) intrinsic_id()); case vmIntrinsics::_get_AtomicLong: @@ -2010,13 +2012,19 @@ bool LibraryCallKit::inline_bitCount(vmIntrinsics::ID id) { return true; } -//----------------------------inline_reverseBytes_int/long------------------- +//----------------------------inline_reverseBytes_int/long/char/short------------------- // inline Integer.reverseBytes(int) // inline Long.reverseBytes(long) +// inline Character.reverseBytes(char) +// inline Short.reverseBytes(short) bool LibraryCallKit::inline_reverseBytes(vmIntrinsics::ID id) { - assert(id == vmIntrinsics::_reverseBytes_i || id == vmIntrinsics::_reverseBytes_l, "not reverse Bytes"); - if (id == vmIntrinsics::_reverseBytes_i && !Matcher::has_match_rule(Op_ReverseBytesI)) return false; - if (id == vmIntrinsics::_reverseBytes_l && !Matcher::has_match_rule(Op_ReverseBytesL)) return false; + assert(id == vmIntrinsics::_reverseBytes_i || id == vmIntrinsics::_reverseBytes_l || + id == vmIntrinsics::_reverseBytes_c || id == vmIntrinsics::_reverseBytes_s, + "not reverse Bytes"); + if (id == vmIntrinsics::_reverseBytes_i && !Matcher::has_match_rule(Op_ReverseBytesI)) return false; + if (id == vmIntrinsics::_reverseBytes_l && !Matcher::has_match_rule(Op_ReverseBytesL)) return false; + if (id == vmIntrinsics::_reverseBytes_c && !Matcher::has_match_rule(Op_ReverseBytesUS)) return false; + if (id == vmIntrinsics::_reverseBytes_s && !Matcher::has_match_rule(Op_ReverseBytesS)) return false; _sp += arg_size(); // restore stack pointer switch (id) { case vmIntrinsics::_reverseBytes_i: @@ -2025,6 +2033,12 @@ bool LibraryCallKit::inline_reverseBytes(vmIntrinsics::ID id) { case vmIntrinsics::_reverseBytes_l: push_pair(_gvn.transform(new (C, 2) ReverseBytesLNode(0, pop_pair()))); break; + case vmIntrinsics::_reverseBytes_c: + push(_gvn.transform(new (C, 2) ReverseBytesUSNode(0, pop()))); + break; + case vmIntrinsics::_reverseBytes_s: + push(_gvn.transform(new (C, 2) ReverseBytesSNode(0, pop()))); + break; default: ; } diff --git a/hotspot/src/share/vm/opto/subnode.hpp b/hotspot/src/share/vm/opto/subnode.hpp index ecdd10e1eea..07157089268 100644 --- a/hotspot/src/share/vm/opto/subnode.hpp +++ b/hotspot/src/share/vm/opto/subnode.hpp @@ -1,5 +1,5 @@ /* - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-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 @@ -509,3 +509,23 @@ public: const Type *bottom_type() const { return TypeLong::LONG; } virtual uint ideal_reg() const { return Op_RegL; } }; + +//-------------------------------ReverseBytesUSNode-------------------------------- +// reverse bytes of an unsigned short / char +class ReverseBytesUSNode : public Node { +public: + ReverseBytesUSNode(Node *c, Node *in1) : Node(c, in1) {} + virtual int Opcode() const; + const Type *bottom_type() const { return TypeInt::CHAR; } + virtual uint ideal_reg() const { return Op_RegI; } +}; + +//-------------------------------ReverseBytesSNode-------------------------------- +// reverse bytes of a short +class ReverseBytesSNode : public Node { +public: + ReverseBytesSNode(Node *c, Node *in1) : Node(c, in1) {} + virtual int Opcode() const; + const Type *bottom_type() const { return TypeInt::SHORT; } + virtual uint ideal_reg() const { return Op_RegI; } +}; diff --git a/hotspot/test/compiler/6431242/Test.java b/hotspot/test/compiler/6431242/Test.java new file mode 100644 index 00000000000..4ad22b8a78a --- /dev/null +++ b/hotspot/test/compiler/6431242/Test.java @@ -0,0 +1,176 @@ +/* + * Copyright 2006 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 6431242 + * @run main/othervm -server -XX:+PrintCompilation Test + */ + +public class Test{ + + int _len = 8; + int[] _arr_i = new int[_len]; + long[] _arr_l = new long[_len]; + + int[] _arr_i_cp = new int [_len]; + long[] _arr_l_cp = new long [_len]; + + int _k = 0x12345678; + int _j = 0; + int _ir = 0x78563412; + int _ir1 = 0x78563413; + int _ir2 = 0x79563412; + + long _m = 0x123456789abcdef0L; + long _l = 0L; + long _lr = 0xf0debc9a78563412L; + long _lr1 = 0xf0debc9a78563413L; + long _lr2 = 0xf1debc9a78563412L; + + void init() { + for (int i=0; i<_arr_i.length; i++) { + _arr_i[i] = _k; + _arr_l[i] = _m; + } + } + + public int test_int_reversed(int i) { + return Integer.reverseBytes(i); + } + + public long test_long_reversed(long i) { + return Long.reverseBytes(i); + } + + public void test_copy_ints(int[] dst, int[] src) { + for(int i=0; i 0) { + try { + return (short) Integer.valueOf(args[0]).intValue(); + } catch (NumberFormatException e) { } + } + return v; + } + + private static char initChar(String[] args, char v) { + if (args.length > 0) { + try { + return (char) Integer.valueOf(args[0]).intValue(); + } catch (NumberFormatException e) { } + } + return v; + } + + private static void testChar(char a, char b) { + if (a != Character.reverseBytes(b)) { + throw new RuntimeException("FAIL: " + (int)a + " != Character.reverseBytes(" + (int)b + ")"); + } + if (b != Character.reverseBytes(a)) { + throw new RuntimeException("FAIL: " + (int)b + " != Character.reverseBytes(" + (int)a + ")"); + } + } + + private static void testShort(short a, short b) { + if (a != Short.reverseBytes(b)) { + throw new RuntimeException("FAIL: " + (int)a + " != Short.reverseBytes(" + (int)b + ")"); + } + if (b != Short.reverseBytes(a)) { + throw new RuntimeException("FAIL: " + (int)b + " != Short.reverseBytes(" + (int)a + ")"); + } + } + + public static void main(String[] args) { + for (int i = 0; i < 100000; ++i) { // Trigger compilation + char c1 = initChar(args, (char) 0x0123); + char c2 = initChar(args, (char) 0x2301); + char c3 = initChar(args, (char) 0xaabb); + char c4 = initChar(args, (char) 0xbbaa); + short s1 = initShort(args, (short) 0x0123); + short s2 = initShort(args, (short) 0x2301); + short s3 = initShort(args, (short) 0xaabb); + short s4 = initShort(args, (short) 0xbbaa); + testChar(c1, c2); + testChar(c3, c4); + testShort(s1, s2); + testShort(s3, s4); + } + } +} From eb534d777ad46687ff960c7419f3af4517115c43 Mon Sep 17 00:00:00 2001 From: Tom Rodriguez Date: Mon, 26 Apr 2010 23:59:45 -0700 Subject: [PATCH 78/91] 6943485: JVMTI always on capabilities change code generation too much Reviewed-by: twisti, dcubed --- hotspot/src/share/vm/c1/c1_Compilation.cpp | 4 +--- hotspot/src/share/vm/c1/c1_Compilation.hpp | 5 +---- hotspot/src/share/vm/c1/c1_GraphBuilder.cpp | 1 - hotspot/src/share/vm/c1/c1_LinearScan.cpp | 5 +---- hotspot/src/share/vm/c1/c1_globals.hpp | 5 +---- hotspot/src/share/vm/ci/bcEscapeAnalyzer.cpp | 7 +++++-- hotspot/src/share/vm/ci/ciEnv.cpp | 3 --- hotspot/src/share/vm/ci/ciEnv.hpp | 2 -- hotspot/src/share/vm/opto/c2compiler.cpp | 5 ++--- hotspot/src/share/vm/opto/compile.cpp | 1 - hotspot/src/share/vm/opto/compile.hpp | 2 -- hotspot/src/share/vm/opto/graphKit.cpp | 11 +++-------- hotspot/src/share/vm/prims/jvmtiExport.cpp | 1 - hotspot/src/share/vm/prims/jvmtiExport.hpp | 3 --- .../vm/prims/jvmtiManageCapabilities.cpp | 19 ++++++------------- 15 files changed, 20 insertions(+), 54 deletions(-) diff --git a/hotspot/src/share/vm/c1/c1_Compilation.cpp b/hotspot/src/share/vm/c1/c1_Compilation.cpp index 5fd667cb7d0..9543fc6642c 100644 --- a/hotspot/src/share/vm/c1/c1_Compilation.cpp +++ b/hotspot/src/share/vm/c1/c1_Compilation.cpp @@ -316,7 +316,7 @@ void Compilation::install_code(int frame_size) { implicit_exception_table(), compiler(), _env->comp_level(), - needs_debug_information(), + true, has_unsafe_access() ); } @@ -449,8 +449,6 @@ Compilation::Compilation(AbstractCompiler* compiler, ciEnv* env, ciMethod* metho assert(_arena == NULL, "shouldn't only one instance of Compilation in existence at a time"); _arena = Thread::current()->resource_area(); _compilation = this; - _needs_debug_information = _env->jvmti_can_examine_or_deopt_anywhere() || - JavaMonitorsInStackTrace || AlwaysEmitDebugInfo || DeoptimizeALot; _exception_info_list = new ExceptionInfoList(); _implicit_exception_table.set_size(0); compile_method(); diff --git a/hotspot/src/share/vm/c1/c1_Compilation.hpp b/hotspot/src/share/vm/c1/c1_Compilation.hpp index c0332491bde..f347c8888a9 100644 --- a/hotspot/src/share/vm/c1/c1_Compilation.hpp +++ b/hotspot/src/share/vm/c1/c1_Compilation.hpp @@ -1,5 +1,5 @@ /* - * Copyright 1999-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1999-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 @@ -70,7 +70,6 @@ class Compilation: public StackObj { int _max_spills; FrameMap* _frame_map; C1_MacroAssembler* _masm; - bool _needs_debug_information; bool _has_exception_handlers; bool _has_fpu_code; bool _has_unsafe_access; @@ -117,7 +116,6 @@ class Compilation: public StackObj { // accessors ciEnv* env() const { return _env; } AbstractCompiler* compiler() const { return _compiler; } - bool needs_debug_information() const { return _needs_debug_information; } bool has_exception_handlers() const { return _has_exception_handlers; } bool has_fpu_code() const { return _has_fpu_code; } bool has_unsafe_access() const { return _has_unsafe_access; } @@ -132,7 +130,6 @@ class Compilation: public StackObj { CodeOffsets* offsets() { return &_offsets; } // setters - void set_needs_debug_information(bool f) { _needs_debug_information = f; } void set_has_exception_handlers(bool f) { _has_exception_handlers = f; } void set_has_fpu_code(bool f) { _has_fpu_code = f; } void set_has_unsafe_access(bool f) { _has_unsafe_access = f; } diff --git a/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp b/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp index 808adc78cf4..5e622e4a8b6 100644 --- a/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp +++ b/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp @@ -1493,7 +1493,6 @@ void GraphBuilder::access_field(Bytecodes::Code code) { Dependencies* GraphBuilder::dependency_recorder() const { assert(DeoptC1, "need debug information"); - compilation()->set_needs_debug_information(true); return compilation()->dependency_recorder(); } diff --git a/hotspot/src/share/vm/c1/c1_LinearScan.cpp b/hotspot/src/share/vm/c1/c1_LinearScan.cpp index 8460c65997e..e6cc2f8ff6a 100644 --- a/hotspot/src/share/vm/c1/c1_LinearScan.cpp +++ b/hotspot/src/share/vm/c1/c1_LinearScan.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2005-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 @@ -2814,9 +2814,6 @@ IRScopeDebugInfo* LinearScan::compute_debug_info_for_scope(int op_id, IRScope* c void LinearScan::compute_debug_info(CodeEmitInfo* info, int op_id) { - if (!compilation()->needs_debug_information()) { - return; - } TRACE_LINEAR_SCAN(3, tty->print_cr("creating debug information at op_id %d", op_id)); IRScope* innermost_scope = info->scope(); diff --git a/hotspot/src/share/vm/c1/c1_globals.hpp b/hotspot/src/share/vm/c1/c1_globals.hpp index 87efd1b04da..5ec5c7de013 100644 --- a/hotspot/src/share/vm/c1/c1_globals.hpp +++ b/hotspot/src/share/vm/c1/c1_globals.hpp @@ -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 @@ -252,9 +252,6 @@ develop(bool, BailoutOnExceptionHandlers, false, \ "bailout of compilation for methods with exception handlers") \ \ - develop(bool, AlwaysEmitDebugInfo, false, \ - "always emit debug info") \ - \ develop(bool, InstallMethods, true, \ "Install methods at the end of successful compilations") \ \ diff --git a/hotspot/src/share/vm/ci/bcEscapeAnalyzer.cpp b/hotspot/src/share/vm/ci/bcEscapeAnalyzer.cpp index 71cffdbd6da..b3be9b8eb57 100644 --- a/hotspot/src/share/vm/ci/bcEscapeAnalyzer.cpp +++ b/hotspot/src/share/vm/ci/bcEscapeAnalyzer.cpp @@ -1408,8 +1408,11 @@ BCEscapeAnalyzer::BCEscapeAnalyzer(ciMethod* method, BCEscapeAnalyzer* parent) } void BCEscapeAnalyzer::copy_dependencies(Dependencies *deps) { - if(!has_dependencies()) - return; + if (ciEnv::current()->jvmti_can_hotswap_or_post_breakpoint()) { + // Also record evol dependencies so redefinition of the + // callee will trigger recompilation. + deps->assert_evol_method(method()); + } for (int i = 0; i < _dependencies.length(); i+=2) { ciKlass *k = _dependencies[i]->as_klass(); ciMethod *m = _dependencies[i+1]->as_method(); diff --git a/hotspot/src/share/vm/ci/ciEnv.cpp b/hotspot/src/share/vm/ci/ciEnv.cpp index 5e3eee4f405..b947e50ab8f 100644 --- a/hotspot/src/share/vm/ci/ciEnv.cpp +++ b/hotspot/src/share/vm/ci/ciEnv.cpp @@ -176,7 +176,6 @@ void ciEnv::cache_jvmti_state() { // Get Jvmti capabilities under lock to get consistant values. MutexLocker mu(JvmtiThreadState_lock); _jvmti_can_hotswap_or_post_breakpoint = JvmtiExport::can_hotswap_or_post_breakpoint(); - _jvmti_can_examine_or_deopt_anywhere = JvmtiExport::can_examine_or_deopt_anywhere(); _jvmti_can_access_local_variables = JvmtiExport::can_access_local_variables(); _jvmti_can_post_on_exceptions = JvmtiExport::can_post_on_exceptions(); } @@ -887,8 +886,6 @@ void ciEnv::register_method(ciMethod* target, if (!failing() && ( (!jvmti_can_hotswap_or_post_breakpoint() && JvmtiExport::can_hotswap_or_post_breakpoint()) || - (!jvmti_can_examine_or_deopt_anywhere() && - JvmtiExport::can_examine_or_deopt_anywhere()) || (!jvmti_can_access_local_variables() && JvmtiExport::can_access_local_variables()) || (!jvmti_can_post_on_exceptions() && diff --git a/hotspot/src/share/vm/ci/ciEnv.hpp b/hotspot/src/share/vm/ci/ciEnv.hpp index d20c1d1a380..22503fb2d72 100644 --- a/hotspot/src/share/vm/ci/ciEnv.hpp +++ b/hotspot/src/share/vm/ci/ciEnv.hpp @@ -55,7 +55,6 @@ private: // Cache Jvmti state bool _jvmti_can_hotswap_or_post_breakpoint; - bool _jvmti_can_examine_or_deopt_anywhere; bool _jvmti_can_access_local_variables; bool _jvmti_can_post_on_exceptions; @@ -257,7 +256,6 @@ public: // Cache Jvmti state void cache_jvmti_state(); bool jvmti_can_hotswap_or_post_breakpoint() const { return _jvmti_can_hotswap_or_post_breakpoint; } - bool jvmti_can_examine_or_deopt_anywhere() const { return _jvmti_can_examine_or_deopt_anywhere; } bool jvmti_can_access_local_variables() const { return _jvmti_can_access_local_variables; } bool jvmti_can_post_on_exceptions() const { return _jvmti_can_post_on_exceptions; } diff --git a/hotspot/src/share/vm/opto/c2compiler.cpp b/hotspot/src/share/vm/opto/c2compiler.cpp index 4ee3a6f5d2c..d4b6f2a162f 100644 --- a/hotspot/src/share/vm/opto/c2compiler.cpp +++ b/hotspot/src/share/vm/opto/c2compiler.cpp @@ -1,5 +1,5 @@ /* - * Copyright 1999-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1999-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,8 +105,7 @@ void C2Compiler::compile_method(ciEnv* env, } bool subsume_loads = true; bool do_escape_analysis = DoEscapeAnalysis && - !(env->jvmti_can_hotswap_or_post_breakpoint() || - env->jvmti_can_examine_or_deopt_anywhere()); + !env->jvmti_can_access_local_variables(); while (!env->failing()) { // Attempt to compile while subsuming loads into machine instructions. Compile C(env, this, target, entry_bci, subsume_loads, do_escape_analysis); diff --git a/hotspot/src/share/vm/opto/compile.cpp b/hotspot/src/share/vm/opto/compile.cpp index 5ca0286b545..595a6aa7033 100644 --- a/hotspot/src/share/vm/opto/compile.cpp +++ b/hotspot/src/share/vm/opto/compile.cpp @@ -871,7 +871,6 @@ void Compile::Init(int aliaslevel) { set_has_split_ifs(false); set_has_loops(has_method() && method()->has_loops()); // first approximation set_has_stringbuilder(false); - _deopt_happens = true; // start out assuming the worst _trap_can_recompile = false; // no traps emitted yet _major_progress = true; // start out assuming good things will happen set_has_unsafe_access(false); diff --git a/hotspot/src/share/vm/opto/compile.hpp b/hotspot/src/share/vm/opto/compile.hpp index 7027d29d533..51361dc3f39 100644 --- a/hotspot/src/share/vm/opto/compile.hpp +++ b/hotspot/src/share/vm/opto/compile.hpp @@ -146,7 +146,6 @@ class Compile : public Phase { int _orig_pc_slot_offset_in_bytes; int _major_progress; // Count of something big happening - bool _deopt_happens; // TRUE if de-optimization CAN happen bool _has_loops; // True if the method _may_ have some loops bool _has_split_ifs; // True if the method _may_ have some split-if bool _has_unsafe_access; // True if the method _may_ produce faults in unsafe loads or stores. @@ -300,7 +299,6 @@ class Compile : public Phase { void set_freq_inline_size(int n) { _freq_inline_size = n; } int freq_inline_size() const { return _freq_inline_size; } void set_max_inline_size(int n) { _max_inline_size = n; } - bool deopt_happens() const { return _deopt_happens; } bool has_loops() const { return _has_loops; } void set_has_loops(bool z) { _has_loops = z; } bool has_split_ifs() const { return _has_split_ifs; } diff --git a/hotspot/src/share/vm/opto/graphKit.cpp b/hotspot/src/share/vm/opto/graphKit.cpp index 3d550551451..780ac554bfe 100644 --- a/hotspot/src/share/vm/opto/graphKit.cpp +++ b/hotspot/src/share/vm/opto/graphKit.cpp @@ -812,10 +812,6 @@ void GraphKit::add_safepoint_edges(SafePointNode* call, bool must_throw) { JVMState* youngest_jvms = sync_jvms(); - // Do we need debug info here? If it is a SafePoint and this method - // cannot de-opt, then we do NOT need any debug info. - bool full_info = (C->deopt_happens() || call->Opcode() != Op_SafePoint); - // If we are guaranteed to throw, we can prune everything but the // input to the current bytecode. bool can_prune_locals = false; @@ -829,10 +825,9 @@ void GraphKit::add_safepoint_edges(SafePointNode* call, bool must_throw) { } } - if (env()->jvmti_can_examine_or_deopt_anywhere()) { + if (env()->jvmti_can_access_local_variables()) { // At any safepoint, this method can get breakpointed, which would // then require an immediate deoptimization. - full_info = true; can_prune_locals = false; // do not prune locals stack_slots_not_pruned = 0; } @@ -890,7 +885,7 @@ void GraphKit::add_safepoint_edges(SafePointNode* call, bool must_throw) { k = in_jvms->locoff(); l = in_jvms->loc_size(); out_jvms->set_locoff(p); - if (full_info && !can_prune_locals) { + if (!can_prune_locals) { for (j = 0; j < l; j++) call->set_req(p++, in_map->in(k+j)); } else { @@ -901,7 +896,7 @@ void GraphKit::add_safepoint_edges(SafePointNode* call, bool must_throw) { k = in_jvms->stkoff(); l = in_jvms->sp(); out_jvms->set_stkoff(p); - if (full_info && !can_prune_locals) { + if (!can_prune_locals) { for (j = 0; j < l; j++) call->set_req(p++, in_map->in(k+j)); } else if (can_prune_locals && stack_slots_not_pruned != 0) { diff --git a/hotspot/src/share/vm/prims/jvmtiExport.cpp b/hotspot/src/share/vm/prims/jvmtiExport.cpp index 7d189e5beee..d2a37c86494 100644 --- a/hotspot/src/share/vm/prims/jvmtiExport.cpp +++ b/hotspot/src/share/vm/prims/jvmtiExport.cpp @@ -270,7 +270,6 @@ int JvmtiExport::_field_access_count = 0; int JvmtiExport::_field_modification_count = 0; bool JvmtiExport::_can_access_local_variables = false; -bool JvmtiExport::_can_examine_or_deopt_anywhere = false; bool JvmtiExport::_can_hotswap_or_post_breakpoint = false; bool JvmtiExport::_can_modify_any_class = false; bool JvmtiExport::_can_walk_any_space = false; diff --git a/hotspot/src/share/vm/prims/jvmtiExport.hpp b/hotspot/src/share/vm/prims/jvmtiExport.hpp index a7e264ba78f..250b1adfdc9 100644 --- a/hotspot/src/share/vm/prims/jvmtiExport.hpp +++ b/hotspot/src/share/vm/prims/jvmtiExport.hpp @@ -58,7 +58,6 @@ class JvmtiExport : public AllStatic { static int _field_modification_count; static bool _can_access_local_variables; - static bool _can_examine_or_deopt_anywhere; static bool _can_hotswap_or_post_breakpoint; static bool _can_modify_any_class; static bool _can_walk_any_space; @@ -112,7 +111,6 @@ class JvmtiExport : public AllStatic { // these should only be called by the friend class friend class JvmtiManageCapabilities; - inline static void set_can_examine_or_deopt_anywhere(bool on) { _can_examine_or_deopt_anywhere = (on != 0); } inline static void set_can_modify_any_class(bool on) { _can_modify_any_class = (on != 0); } inline static void set_can_access_local_variables(bool on) { _can_access_local_variables = (on != 0); } inline static void set_can_hotswap_or_post_breakpoint(bool on) { _can_hotswap_or_post_breakpoint = (on != 0); } @@ -220,7 +218,6 @@ class JvmtiExport : public AllStatic { static void enter_live_phase(); // ------ can_* conditions (below) are set at OnLoad and never changed ------------ - inline static bool can_examine_or_deopt_anywhere() { return _can_examine_or_deopt_anywhere; } inline static bool can_modify_any_class() { return _can_modify_any_class; } inline static bool can_access_local_variables() { return _can_access_local_variables; } inline static bool can_hotswap_or_post_breakpoint() { return _can_hotswap_or_post_breakpoint; } diff --git a/hotspot/src/share/vm/prims/jvmtiManageCapabilities.cpp b/hotspot/src/share/vm/prims/jvmtiManageCapabilities.cpp index 195607346c5..6ac7226f963 100644 --- a/hotspot/src/share/vm/prims/jvmtiManageCapabilities.cpp +++ b/hotspot/src/share/vm/prims/jvmtiManageCapabilities.cpp @@ -332,16 +332,6 @@ void JvmtiManageCapabilities::update() { } JvmtiExport::set_can_get_source_debug_extension(avail.can_get_source_debug_extension); - JvmtiExport::set_can_examine_or_deopt_anywhere( - avail.can_generate_breakpoint_events || - interp_events || - avail.can_redefine_classes || - avail.can_retransform_classes || - avail.can_access_local_variables || - avail.can_get_owned_monitor_info || - avail.can_get_current_contended_monitor || - avail.can_get_monitor_info || - avail.can_get_owned_monitor_stack_depth_info); JvmtiExport::set_can_maintain_original_method_order(avail.can_maintain_original_method_order); JvmtiExport::set_can_post_interpreter_events(interp_events); JvmtiExport::set_can_hotswap_or_post_breakpoint( @@ -353,10 +343,13 @@ void JvmtiManageCapabilities::update() { avail.can_generate_all_class_hook_events); JvmtiExport::set_can_walk_any_space( avail.can_tag_objects); // disable sharing in onload phase + // This controls whether the compilers keep extra locals live to + // improve the debugging experience so only set them if the selected + // capabilities look like a debugger. JvmtiExport::set_can_access_local_variables( - avail.can_access_local_variables || - avail.can_redefine_classes || - avail.can_retransform_classes); + avail.can_access_local_variables || + avail.can_generate_breakpoint_events || + avail.can_generate_frame_pop_events); JvmtiExport::set_can_post_on_exceptions( avail.can_generate_exception_events || avail.can_generate_frame_pop_events || From cb911cf09865363b61e0391ab36b4f61f85ae222 Mon Sep 17 00:00:00 2001 From: Igor Veresov Date: Tue, 27 Apr 2010 11:19:12 -0700 Subject: [PATCH 79/91] 6946892: c1 shouldn't sign-extend to upper 32bits on x64 C1 does sign-extension when it loads ints and shorts from memory to 64-bit registers. This causes problems for c2 because it relies on the fact the int passed in a 64-bit register is zero-extended. Reviewed-by: never --- hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp b/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp index 966a01d8624..6118e79b842 100644 --- a/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp +++ b/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp @@ -1244,8 +1244,7 @@ void LIR_Assembler::mem2reg(LIR_Opr src, LIR_Opr dest, BasicType type, LIR_Patch break; #endif // _L64 case T_INT: - // %%% could this be a movl? this is safer but longer instruction - __ movl2ptr(dest->as_register(), from_addr); + __ movl(dest->as_register(), from_addr); break; case T_LONG: { @@ -1303,7 +1302,6 @@ void LIR_Assembler::mem2reg(LIR_Opr src, LIR_Opr dest, BasicType type, LIR_Patch __ shll(dest_reg, 24); __ sarl(dest_reg, 24); } - // These are unsigned so the zero extension on 64bit is just what we need break; } @@ -1315,8 +1313,6 @@ void LIR_Assembler::mem2reg(LIR_Opr src, LIR_Opr dest, BasicType type, LIR_Patch } else { __ movw(dest_reg, from_addr); } - // This is unsigned so the zero extension on 64bit is just what we need - // __ movl2ptr(dest_reg, dest_reg); break; } @@ -1329,8 +1325,6 @@ void LIR_Assembler::mem2reg(LIR_Opr src, LIR_Opr dest, BasicType type, LIR_Patch __ shll(dest_reg, 16); __ sarl(dest_reg, 16); } - // Might not be needed in 64bit but certainly doesn't hurt (except for code size) - __ movl2ptr(dest_reg, dest_reg); break; } From 5d05e67d86193ec0a3cb6459d9b5c7ec47622ecb Mon Sep 17 00:00:00 2001 From: Michael Wilkerson Date: Thu, 29 Apr 2010 14:32:39 -0700 Subject: [PATCH 80/91] Added tag jdk7-b91 for changeset cc69164423eb --- .hgtags-top-repo | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags-top-repo b/.hgtags-top-repo index 56347c8d156..8116335042d 100644 --- a/.hgtags-top-repo +++ b/.hgtags-top-repo @@ -65,3 +65,4 @@ cf26288a114be67c39f2758959ce50b60f5ae330 jdk7-b85 82135c848d5fcddb065e98ae77b81077c858f593 jdk7-b88 7f1ba4459972bf84b8201dc1cc4f62b1fe1c74f4 jdk7-b89 425ba3efabbfe0b188105c10aaf7c3c8fa8d1a38 jdk7-b90 +97d8b6c659c29c8493a8b2b72c2796a021a8cf79 jdk7-b91 From 2467acb3fadd185c20b1936240922f7bbb056057 Mon Sep 17 00:00:00 2001 From: Michael Wilkerson Date: Thu, 29 Apr 2010 14:32:40 -0700 Subject: [PATCH 81/91] Added tag jdk7-b91 for changeset acab8ba96315 --- corba/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/corba/.hgtags b/corba/.hgtags index 405a05a6939..019373740ec 100644 --- a/corba/.hgtags +++ b/corba/.hgtags @@ -65,3 +65,4 @@ c67a9df7bc0ca291f08f9a9cc05cb78ea15d25e6 jdk7-b85 39e14d2da687c7e592142137517aaf689544820f jdk7-b88 bb4424c5e778b842c064a8b1aa902b35f4397654 jdk7-b89 56ce07b0eb47b93a98a72adef0f21e602c460623 jdk7-b90 +bcd2fc089227559ac5be927923609fac29f067fa jdk7-b91 From 1273d6969f26ba70eed15dbfbeb17ee2bce8eaf4 Mon Sep 17 00:00:00 2001 From: Michael Wilkerson Date: Thu, 29 Apr 2010 14:32:43 -0700 Subject: [PATCH 82/91] Added tag jdk7-b91 for changeset c5092b6d8193 --- hotspot/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/hotspot/.hgtags b/hotspot/.hgtags index a47a270d5e8..2e0258455ee 100644 --- a/hotspot/.hgtags +++ b/hotspot/.hgtags @@ -90,3 +90,4 @@ e7e7e36ccdb5d56edd47e5744351202d38f3b7ad jdk7-b87 15836273ac2494f36ef62088bc1cb6f3f011f565 jdk7-b89 4b60f23c42231f7ecd62ad1fcb6a9ca26fa57d1b hs18-b02 605c9707a766ff518cd841fc04f9bb4b36a3a30b jdk7-b90 +e0a1a502e402dbe7bf2d9102b4084a7e79a99a9b jdk7-b91 From 332c6ac18126b848aec49c47b3d3af01c1ab69db Mon Sep 17 00:00:00 2001 From: Michael Wilkerson Date: Thu, 29 Apr 2010 14:32:48 -0700 Subject: [PATCH 83/91] Added tag jdk7-b91 for changeset d93fc4179dc2 --- jaxp/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/jaxp/.hgtags b/jaxp/.hgtags index 906fcdd5f09..824ee0d21d2 100644 --- a/jaxp/.hgtags +++ b/jaxp/.hgtags @@ -65,3 +65,4 @@ c876ad22e4bf9d3c6460080db7ace478e29a3ff9 jdk7-b82 d8ebd15910034f2ba50b2f129f959f86cca01419 jdk7-b88 d2818fd2b036f3b3154a9a7de41afcf4ac679c1b jdk7-b89 c5d932ee326d6f7fd4634b11c7185ea82d184df2 jdk7-b90 +b89b2c3044a298d542f84a2e9d957202b7d8cdb9 jdk7-b91 From 088d5c41e98a765de4ef924570cba04ee5ce1099 Mon Sep 17 00:00:00 2001 From: Michael Wilkerson Date: Thu, 29 Apr 2010 14:32:48 -0700 Subject: [PATCH 84/91] Added tag jdk7-b91 for changeset e675c1f4d97e --- jaxws/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/jaxws/.hgtags b/jaxws/.hgtags index d988da222a4..92df3581436 100644 --- a/jaxws/.hgtags +++ b/jaxws/.hgtags @@ -65,3 +65,4 @@ f051045fe94a48fae1097f90cbd9227e6aae6b7e jdk7-b81 8c666f8f3565974e301ccb58b7538912551a6e26 jdk7-b88 bf3675aa7f20fc6f241ce95760005aef2a30ff41 jdk7-b89 ead7c4566a0017bcb44b468b3ac03b60dc5333ce jdk7-b90 +cf4686bf35abd1e573f09fa43cbec66403160ae9 jdk7-b91 From 7320b428801230a0d68872b83db5c28a9dd33591 Mon Sep 17 00:00:00 2001 From: Michael Wilkerson Date: Thu, 29 Apr 2010 14:32:53 -0700 Subject: [PATCH 85/91] Added tag jdk7-b91 for changeset bafb4ec71cd3 --- jdk/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/jdk/.hgtags b/jdk/.hgtags index 95bdf2ea44c..6a96881983e 100644 --- a/jdk/.hgtags +++ b/jdk/.hgtags @@ -65,3 +65,4 @@ eae6e9ab26064d9ba0e7665dd646a1fd2506fcc1 jdk7-b86 b3c69282f6d3c90ec21056cd1ab70dc0c895b069 jdk7-b88 4a6abb7e224cc8d9a583c23c5782e4668739a119 jdk7-b89 7f90d0b9dbb7ab4c60d0b0233e4e77fb4fac597c jdk7-b90 +08a31cab971fcad4695e913d0f3be7bde3a90747 jdk7-b91 From 74597db90f521a3f1bdcd737d694ee433c5128a7 Mon Sep 17 00:00:00 2001 From: Michael Wilkerson Date: Thu, 29 Apr 2010 14:33:03 -0700 Subject: [PATCH 86/91] Added tag jdk7-b91 for changeset cdc146f667c7 --- langtools/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/langtools/.hgtags b/langtools/.hgtags index c855c6e4256..1cb22441614 100644 --- a/langtools/.hgtags +++ b/langtools/.hgtags @@ -65,3 +65,4 @@ ef07347428f2198ae6b8144ac0b9086bbe39fd16 jdk7-b86 f9b5d4867a26f8c4b90ad37fe2c345b721e93d6b jdk7-b88 6cea9a143208bc1185ced046942c0f4e45dbeba5 jdk7-b89 71c2c23a7c35b2896c87004023b9743b6d1b7758 jdk7-b90 +97b6fa97b8ddb3a49394011c2a0ec5d6535e594c jdk7-b91 From a7fa37352db540f8c85a22d26c1969872fc50461 Mon Sep 17 00:00:00 2001 From: Erik Trimble Date: Thu, 29 Apr 2010 15:47:28 -0700 Subject: [PATCH 87/91] 6948636: Bump the HS18 build number to 04 Update the HS18 build number to 04 Reviewed-by: jcoomes --- hotspot/make/hotspot_version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hotspot/make/hotspot_version b/hotspot/make/hotspot_version index ddf2f38ffa9..840d867917e 100644 --- a/hotspot/make/hotspot_version +++ b/hotspot/make/hotspot_version @@ -35,7 +35,7 @@ HOTSPOT_VM_COPYRIGHT=Copyright 2010 HS_MAJOR_VER=18 HS_MINOR_VER=0 -HS_BUILD_NUMBER=03 +HS_BUILD_NUMBER=04 JDK_MAJOR_VER=1 JDK_MINOR_VER=7 From 510d77a436da20ccc29e4559206cfa5e94e190b5 Mon Sep 17 00:00:00 2001 From: Erik Trimble Date: Tue, 4 May 2010 12:25:39 -0700 Subject: [PATCH 88/91] Added tag hs18-b03 for changeset d5db8102090b --- hotspot/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/hotspot/.hgtags b/hotspot/.hgtags index 2e0258455ee..4fb4ca49028 100644 --- a/hotspot/.hgtags +++ b/hotspot/.hgtags @@ -91,3 +91,4 @@ e7e7e36ccdb5d56edd47e5744351202d38f3b7ad jdk7-b87 4b60f23c42231f7ecd62ad1fcb6a9ca26fa57d1b hs18-b02 605c9707a766ff518cd841fc04f9bb4b36a3a30b jdk7-b90 e0a1a502e402dbe7bf2d9102b4084a7e79a99a9b jdk7-b91 +25f53b53aaa3eb8b2d5391a1e8de9a76ae1dd8a2 hs18-b03 From 75ce04fa11d0d1992dc8cef0a8768a5336b06404 Mon Sep 17 00:00:00 2001 From: "J. Duke" Date: Wed, 5 Jul 2017 17:09:51 +0200 Subject: [PATCH 89/91] Added tag jdk7-b89 for changeset 44158f6d3b94 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 028b8e671ca..cbaaf52ea04 100644 --- a/.hgtags +++ b/.hgtags @@ -63,3 +63,4 @@ b6f633a93ae0ec4555ff4bf756f5e2150c9bdede jdk7-b85 c94d9cc81f495d97817eba9d71b84fc45f7661a5 jdk7-b86 b7456c473862048fa70ed8092313a4ef0a55d403 jdk7-b87 7077b95d42f6b3942a8751bba033801ff50e5889 jdk7-b88 +44158f6d3b94c0fa020e33632532473d92d1ea96 jdk7-b89 From e7e93ff0ddb4e5b6c06a726668523616b987b4e6 Mon Sep 17 00:00:00 2001 From: "J. Duke" Date: Wed, 5 Jul 2017 17:10:17 +0200 Subject: [PATCH 90/91] Added tag jdk7-b90 for changeset 1d1927f9ec09 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index cbaaf52ea04..9151c4dc7d6 100644 --- a/.hgtags +++ b/.hgtags @@ -64,3 +64,4 @@ c94d9cc81f495d97817eba9d71b84fc45f7661a5 jdk7-b86 b7456c473862048fa70ed8092313a4ef0a55d403 jdk7-b87 7077b95d42f6b3942a8751bba033801ff50e5889 jdk7-b88 44158f6d3b94c0fa020e33632532473d92d1ea96 jdk7-b89 +1d1927f9ec097b62c913921e2dfa5dbaf5dc325b jdk7-b90 From 404ff1ae4b3d13f1e90238cfe7f166e3ee5a1e74 Mon Sep 17 00:00:00 2001 From: "J. Duke" Date: Wed, 5 Jul 2017 17:10:46 +0200 Subject: [PATCH 91/91] Added tag jdk7-b91 for changeset 308ad8f68b8d --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 9151c4dc7d6..1cf6191516b 100644 --- a/.hgtags +++ b/.hgtags @@ -65,3 +65,4 @@ b7456c473862048fa70ed8092313a4ef0a55d403 jdk7-b87 7077b95d42f6b3942a8751bba033801ff50e5889 jdk7-b88 44158f6d3b94c0fa020e33632532473d92d1ea96 jdk7-b89 1d1927f9ec097b62c913921e2dfa5dbaf5dc325b jdk7-b90 +308ad8f68b8dd68e22d73dd490e110059b732422 jdk7-b91