Merge
This commit is contained in:
commit
271bfc2715
@ -51,6 +51,7 @@ DEV_DOCS_URL-5 = http://java.sun.com/j2se/1.5.0/docs/index.html
|
||||
DEV_DOCS_URL-6 = http://download.oracle.com/javase/6/docs/index.html
|
||||
DEV_DOCS_URL-7 = http://download.oracle.com/javase/7/docs/index.html
|
||||
DEV_DOCS_URL = $(DEV_DOCS_URL-$(JDK_MINOR_VERSION))
|
||||
DOCS_BASE_URL = http://download.oracle.com/javase/7/docs
|
||||
|
||||
# Url to Java Language Spec
|
||||
#JLS3_URL = http://java.sun.com/docs/books/jls/
|
||||
@ -205,7 +206,13 @@ COMMON_JAVADOCFLAGS = \
|
||||
-use \
|
||||
-keywords \
|
||||
$(ADDITIONAL_JAVADOCFLAGS)
|
||||
ADDITIONAL_JAVADOCFLAGS =
|
||||
|
||||
ifdef OPENJDK
|
||||
ADDITIONAL_JAVADOCFLAGS = \
|
||||
-Xdocrootparent $(DOCS_BASE_URL)
|
||||
else
|
||||
ADDITIONAL_JAVADOCFLAGS =
|
||||
endif
|
||||
|
||||
# Draft used for non-fcs documents
|
||||
JDK_IS_FCS = false
|
||||
@ -1142,56 +1149,6 @@ $(SCTPAPI_PACKAGES_FILE): $(DIRECTORY_CACHE) $(call PackageDependencies,$(SCTPAP
|
||||
$(prep-target)
|
||||
$(call PackageFilter,$(SCTPAPI_PKGS))
|
||||
|
||||
#############################################################
|
||||
#
|
||||
# tracingdocs
|
||||
#
|
||||
|
||||
ALL_OTHER_TARGETS += tracingdocs
|
||||
|
||||
TRACING_DOCDIR := $(JRE_API_DOCSDIR)/tracing
|
||||
TRACING2COREAPI := ../$(JDKJRE2COREAPI)
|
||||
TRACING_DOCTITLE := Java$(TRADEMARK) Platform Tracing
|
||||
TRACING_WINDOWTITLE := Platform Tracing
|
||||
TRACING_HEADER := <strong>Platform Tracing</strong>
|
||||
TRACING_BOTTOM := $(call CommonBottom,$(TRACING_FIRST_COPYRIGHT_YEAR))
|
||||
# TRACING_PKGS is located in NON_CORE_PKGS.gmk
|
||||
|
||||
TRACING_INDEX_HTML = $(TRACING_DOCDIR)/index.html
|
||||
TRACING_OPTIONS_FILE = $(DOCSTMPDIR)/tracing.options
|
||||
TRACING_PACKAGES_FILE = $(DOCSTMPDIR)/tracing.packages
|
||||
|
||||
tracingdocs: $(TRACING_INDEX_HTML)
|
||||
|
||||
# Set relative location to core api document root
|
||||
$(TRACING_INDEX_HTML): GET2DOCSDIR=$(TRACING2COREAPI)/..
|
||||
|
||||
# Run javadoc if the index file is out of date or missing
|
||||
$(TRACING_INDEX_HTML): $(TRACING_OPTIONS_FILE) $(TRACING_PACKAGES_FILE)
|
||||
$(prep-javadoc)
|
||||
$(call JavadocSummary,$(TRACING_OPTIONS_FILE),$(TRACING_PACKAGES_FILE))
|
||||
$(JAVADOC_CMD) $(JAVADOC_VM_MEMORY_FLAGS) -d $(@D) \
|
||||
@$(TRACING_OPTIONS_FILE) @$(TRACING_PACKAGES_FILE)
|
||||
|
||||
# Create file with javadoc options in it
|
||||
$(TRACING_OPTIONS_FILE):
|
||||
$(prep-target)
|
||||
@($(call OptionOnly,$(COMMON_JAVADOCFLAGS)) ; \
|
||||
$(call OptionPair,-sourcepath,$(RELEASEDOCS_SOURCEPATH)) ; \
|
||||
$(call OptionPair,-encoding,ascii) ; \
|
||||
$(call OptionOnly,-nodeprecatedlist) ; \
|
||||
$(call OptionPair,-doctitle,$(TRACING_DOCTITLE)) ; \
|
||||
$(call OptionPair,-windowtitle,$(TRACING_WINDOWTITLE) $(DRAFT_WINTITLE));\
|
||||
$(call OptionPair,-header,$(TRACING_HEADER)$(DRAFT_HEADER)) ; \
|
||||
$(call OptionPair,-bottom,$(TRACING_BOTTOM)$(DRAFT_BOTTOM)) ; \
|
||||
$(call OptionTrip,-linkoffline,$(TRACING2COREAPI),$(COREAPI_DOCSDIR)/); \
|
||||
) >> $@
|
||||
|
||||
# Create a file with the package names in it
|
||||
$(TRACING_PACKAGES_FILE): $(DIRECTORY_CACHE) $(call PackageDependencies,$(TRACING_PKGS))
|
||||
$(prep-target)
|
||||
$(call PackageFilter,$(TRACING_PKGS))
|
||||
|
||||
#############################################################
|
||||
#
|
||||
# Get a cache of all the directories
|
||||
|
@ -88,9 +88,6 @@ SMARTCARDIO_PKGS = javax.smartcardio
|
||||
|
||||
SCTPAPI_PKGS = com.sun.nio.sctp
|
||||
|
||||
TRACING_PKGS = com.sun.tracing \
|
||||
com.sun.tracing.dtrace
|
||||
|
||||
# non-core packages in rt.jar
|
||||
NON_CORE_PKGS = $(DOMAPI_PKGS) \
|
||||
$(MGMT_PKGS) \
|
||||
@ -100,6 +97,5 @@ NON_CORE_PKGS = $(DOMAPI_PKGS) \
|
||||
$(OLD_JSSE_PKGS) \
|
||||
$(HTTPSERVER_PKGS) \
|
||||
$(SMARTCARDIO_PKGS) \
|
||||
$(TRACING_PKGS) \
|
||||
$(SCTPAPI_PKGS)
|
||||
|
||||
|
@ -356,6 +356,7 @@ JAVA_JAVA_java = \
|
||||
java/util/regex/Matcher.java \
|
||||
java/util/regex/MatchResult.java \
|
||||
java/util/regex/ASCII.java \
|
||||
java/util/regex/UnicodeProp.java \
|
||||
java/util/regex/PatternSyntaxException.java \
|
||||
java/util/prefs/Preferences.java \
|
||||
java/util/prefs/AbstractPreferences.java \
|
||||
|
@ -345,30 +345,35 @@ $(GENSRCDIR)/java/lang/CharacterDataLatin1.java \
|
||||
-template $(CHARACTERDATA)/CharacterDataLatin1.java.template \
|
||||
-spec $(UNICODEDATA)/UnicodeData.txt \
|
||||
-specialcasing $(UNICODEDATA)/SpecialCasing.txt \
|
||||
-proplist $(UNICODEDATA)/PropList.txt \
|
||||
-o $(GENSRCDIR)/java/lang/CharacterDataLatin1.java -string \
|
||||
-usecharforbyte -latin1 8
|
||||
$(BOOT_JAVA_CMD) -jar $(GENERATECHARACTER_JARFILE) -plane 0 \
|
||||
-template $(CHARACTERDATA)/CharacterData00.java.template \
|
||||
-spec $(UNICODEDATA)/UnicodeData.txt \
|
||||
-specialcasing $(UNICODEDATA)/SpecialCasing.txt \
|
||||
-proplist $(UNICODEDATA)/PropList.txt \
|
||||
-o $(GENSRCDIR)/java/lang/CharacterData00.java -string \
|
||||
-usecharforbyte 11 4 1
|
||||
$(BOOT_JAVA_CMD) -jar $(GENERATECHARACTER_JARFILE) -plane 1 \
|
||||
-template $(CHARACTERDATA)/CharacterData01.java.template \
|
||||
-spec $(UNICODEDATA)/UnicodeData.txt \
|
||||
-specialcasing $(UNICODEDATA)/SpecialCasing.txt \
|
||||
-proplist $(UNICODEDATA)/PropList.txt \
|
||||
-o $(GENSRCDIR)/java/lang/CharacterData01.java -string \
|
||||
-usecharforbyte 11 4 1
|
||||
$(BOOT_JAVA_CMD) -jar $(GENERATECHARACTER_JARFILE) -plane 2 \
|
||||
-template $(CHARACTERDATA)/CharacterData02.java.template \
|
||||
-spec $(UNICODEDATA)/UnicodeData.txt \
|
||||
-specialcasing $(UNICODEDATA)/SpecialCasing.txt \
|
||||
-proplist $(UNICODEDATA)/PropList.txt \
|
||||
-o $(GENSRCDIR)/java/lang/CharacterData02.java -string \
|
||||
-usecharforbyte 11 4 1
|
||||
$(BOOT_JAVA_CMD) -jar $(GENERATECHARACTER_JARFILE) -plane 14 \
|
||||
-template $(CHARACTERDATA)/CharacterData0E.java.template \
|
||||
-spec $(UNICODEDATA)/UnicodeData.txt \
|
||||
-specialcasing $(UNICODEDATA)/SpecialCasing.txt \
|
||||
-proplist $(UNICODEDATA)/PropList.txt \
|
||||
-o $(GENSRCDIR)/java/lang/CharacterData0E.java -string \
|
||||
-usecharforbyte 11 4 1
|
||||
|
||||
|
@ -71,6 +71,7 @@ FILES_src = \
|
||||
java/nio/charset/CoderMalfunctionError.java \
|
||||
java/nio/charset/CodingErrorAction.java \
|
||||
java/nio/charset/MalformedInputException.java \
|
||||
java/nio/charset/StandardCharset.java \
|
||||
java/nio/charset/UnmappableCharacterException.java \
|
||||
\
|
||||
java/nio/charset/spi/CharsetProvider.java \
|
||||
|
@ -44,7 +44,6 @@ SUNWprivate_1.1 {
|
||||
Java_sun_nio_ch_EPollArrayWrapper_interrupt;
|
||||
Java_sun_nio_ch_EPollArrayWrapper_offsetofData;
|
||||
Java_sun_nio_ch_EPollArrayWrapper_sizeofEPollEvent;
|
||||
Java_sun_nio_ch_EPoll_init;
|
||||
Java_sun_nio_ch_EPoll_eventSize;
|
||||
Java_sun_nio_ch_EPoll_eventsOffset;
|
||||
Java_sun_nio_ch_EPoll_dataOffset;
|
||||
@ -129,7 +128,6 @@ SUNWprivate_1.1 {
|
||||
Java_sun_nio_fs_GnomeFileTypeDetector_probeUsingGio;
|
||||
Java_sun_nio_fs_GnomeFileTypeDetector_initializeGnomeVfs;
|
||||
Java_sun_nio_fs_GnomeFileTypeDetector_probeUsingGnomeVfs;
|
||||
Java_sun_nio_fs_LinuxWatchService_init;
|
||||
Java_sun_nio_fs_LinuxWatchService_eventSize;
|
||||
Java_sun_nio_fs_LinuxWatchService_eventOffsets;
|
||||
Java_sun_nio_fs_LinuxWatchService_inotifyInit;
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 1996, 2011 Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@ -44,11 +44,9 @@ PROPS_SRC = $(TOPDIR)/src/share/lib/security/java.security-solaris
|
||||
|
||||
else # PLATFORM
|
||||
|
||||
# Register Microsoft CryptoAPI provider only on (non-64-bit) Windows platform.
|
||||
# Register Microsoft CryptoAPI provider only on Windows platform.
|
||||
ifeq ($(PLATFORM), windows)
|
||||
ifneq ($(ARCH_DATA_MODEL), 64)
|
||||
PROPS_SRC = $(TOPDIR)/src/share/lib/security/java.security-windows
|
||||
endif
|
||||
PROPS_SRC = $(TOPDIR)/src/share/lib/security/java.security-windows
|
||||
endif
|
||||
endif # PLATFORM
|
||||
|
||||
|
@ -2190,7 +2190,8 @@ JDWP "Java(tm) Debug Wire Protocol"
|
||||
(Out
|
||||
(byte eventKind "Event kind to request. "
|
||||
"See <a href=\"#JDWP_EventKind\">JDWP.EventKind</a> "
|
||||
"for a complete list of events that can be requested. "
|
||||
"for a complete list of events that can be requested; "
|
||||
"some events may require a capability in order to be requested. "
|
||||
)
|
||||
(byte suspendPolicy
|
||||
"What threads are suspended when this event occurs? "
|
||||
@ -2732,6 +2733,8 @@ JDWP "Java(tm) Debug Wire Protocol"
|
||||
(Alt MonitorContendedEnter=JDWP.EventKind.MONITOR_CONTENDED_ENTER
|
||||
"Notification that a thread in the target VM is attempting "
|
||||
"to enter a monitor that is already acquired by another thread. "
|
||||
"Requires canRequestMonitorEvents capability - see "
|
||||
"<a href=\"#JDWP_VirtualMachine_CapabilitiesNew\">CapabilitiesNew</a>. "
|
||||
"<p>Since JDWP version 1.6. "
|
||||
|
||||
(int requestID
|
||||
@ -2743,6 +2746,8 @@ JDWP "Java(tm) Debug Wire Protocol"
|
||||
(Alt MonitorContendedEntered=JDWP.EventKind.MONITOR_CONTENDED_ENTERED
|
||||
"Notification of a thread in the target VM is entering a monitor "
|
||||
"after waiting for it to be released by another thread. "
|
||||
"Requires canRequestMonitorEvents capability - see "
|
||||
"<a href=\"#JDWP_VirtualMachine_CapabilitiesNew\">CapabilitiesNew</a>. "
|
||||
"<p>Since JDWP version 1.6. "
|
||||
|
||||
(int requestID
|
||||
@ -2753,6 +2758,8 @@ JDWP "Java(tm) Debug Wire Protocol"
|
||||
)
|
||||
(Alt MonitorWait=JDWP.EventKind.MONITOR_WAIT
|
||||
"Notification of a thread about to wait on a monitor object. "
|
||||
"Requires canRequestMonitorEvents capability - see "
|
||||
"<a href=\"#JDWP_VirtualMachine_CapabilitiesNew\">CapabilitiesNew</a>. "
|
||||
"<p>Since JDWP version 1.6. "
|
||||
|
||||
(int requestID
|
||||
@ -2764,6 +2771,8 @@ JDWP "Java(tm) Debug Wire Protocol"
|
||||
)
|
||||
(Alt MonitorWaited=JDWP.EventKind.MONITOR_WAITED
|
||||
"Notification that a thread in the target VM has finished waiting on "
|
||||
"Requires canRequestMonitorEvents capability - see "
|
||||
"<a href=\"#JDWP_VirtualMachine_CapabilitiesNew\">CapabilitiesNew</a>. "
|
||||
"a monitor object. "
|
||||
"<p>Since JDWP version 1.6. "
|
||||
|
||||
@ -3050,9 +3059,9 @@ JDWP "Java(tm) Debug Wire Protocol"
|
||||
(Constant METHOD_EXIT =41 )
|
||||
(Constant METHOD_EXIT_WITH_RETURN_VALUE =42 )
|
||||
(Constant MONITOR_CONTENDED_ENTER =43 )
|
||||
(Constant MONITOR_CONTENDED_ENTERED =44 )
|
||||
(Constant MONITOR_WAIT =45 )
|
||||
(Constant MONITOR_WAITED =46 )
|
||||
(Constant MONITOR_CONTENDED_ENTERED =44 )
|
||||
(Constant MONITOR_WAIT =45 )
|
||||
(Constant MONITOR_WAITED =46 )
|
||||
(Constant VM_START =90 )
|
||||
(Constant VM_INIT =90 "obsolete - was used in jvmdi")
|
||||
(Constant VM_DEATH =99 )
|
||||
|
@ -21,4 +21,4 @@
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
tzdata2011e
|
||||
tzdata2011g
|
||||
|
@ -234,7 +234,21 @@ Rule Egypt 1989 only - May 6 1:00 1:00 S
|
||||
Rule Egypt 1990 1994 - May 1 1:00 1:00 S
|
||||
# IATA (after 1990) says transitions are at 0:00.
|
||||
# Go with IATA starting in 1995, except correct 1995 entry from 09-30 to 09-29.
|
||||
Rule Egypt 1995 max - Apr lastFri 0:00s 1:00 S
|
||||
|
||||
# From Alexander Krivenyshev (2011-04-20):
|
||||
# "...Egypt's interim cabinet decided on Wednesday to cancel daylight
|
||||
# saving time after a poll posted on its website showed the majority of
|
||||
# Egyptians would approve the cancellation."
|
||||
#
|
||||
# Egypt to cancel daylight saving time
|
||||
# <a href="http://www.almasryalyoum.com/en/node/407168">
|
||||
# http://www.almasryalyoum.com/en/node/407168
|
||||
# </a>
|
||||
# or
|
||||
# <a href="http://www.worldtimezone.com/dst_news/dst_news_egypt04.html">
|
||||
# http://www.worldtimezone.com/dst_news/dst_news_egypt04.html
|
||||
# </a>
|
||||
Rule Egypt 1995 2010 - Apr lastFri 0:00s 1:00 S
|
||||
Rule Egypt 1995 2005 - Sep lastThu 23:00s 0 -
|
||||
# From Steffen Thorsen (2006-09-19):
|
||||
# The Egyptian Gazette, issue 41,090 (2006-09-18), page 1, reports:
|
||||
@ -335,7 +349,7 @@ Rule Egypt 2008 only - Aug lastThu 23:00s 0 -
|
||||
Rule Egypt 2009 only - Aug 20 23:00s 0 -
|
||||
Rule Egypt 2010 only - Aug 11 0:00 0 -
|
||||
Rule Egypt 2010 only - Sep 10 0:00 1:00 S
|
||||
Rule Egypt 2010 max - Sep lastThu 23:00s 0 -
|
||||
Rule Egypt 2010 only - Sep lastThu 23:00s 0 -
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
Zone Africa/Cairo 2:05:00 - LMT 1900 Oct
|
||||
|
@ -168,7 +168,7 @@
|
||||
# A monument to Willett was unveiled on 1927-05-21, in an open space in
|
||||
# a 45-acre wood near Chislehurst, Kent that was purchased by popular
|
||||
# subscription and open to the public. On the south face of the monolith,
|
||||
# designed by G. W. Miller, is the the William Willett Memorial Sundial,
|
||||
# designed by G. W. Miller, is the...William Willett Memorial Sundial,
|
||||
# which is permanently set to Summer Time.
|
||||
|
||||
# From Winston Churchill (1934-04-28):
|
||||
@ -1808,7 +1808,7 @@ Zone Europe/Oslo 0:43:00 - LMT 1895 Jan 1
|
||||
#
|
||||
# All these events predate our cutoff date of 1970. Unless we can
|
||||
# come up with more definitive info about the timekeeping during the
|
||||
# war years it's probably best just do do the following for now:
|
||||
# war years it's probably best just do...the following for now:
|
||||
Link Europe/Oslo Arctic/Longyearbyen
|
||||
|
||||
# Poland
|
||||
|
@ -767,7 +767,7 @@ Zone America/La_Paz -4:32:36 - LMT 1890
|
||||
#
|
||||
# As a result of the above Decree I believe the America/Rio_Branco
|
||||
# timezone shall be modified from UTC-5 to UTC-4 and a new timezone shall
|
||||
# be created to represent the the west side of the Para State. I
|
||||
# be created to represent the...west side of the Para State. I
|
||||
# suggest this new timezone be called Santarem as the most
|
||||
# important/populated city in the affected area.
|
||||
#
|
||||
@ -1365,6 +1365,24 @@ Zone Pacific/Galapagos -5:58:24 - LMT 1931 # Puerto Baquerizo Moreno
|
||||
# For now, we'll just record the time in Stanley, since we have no
|
||||
# better info.
|
||||
|
||||
# From Steffen Thorsen (2011-04-01):
|
||||
# The Falkland Islands will not turn back clocks this winter, but stay on
|
||||
# daylight saving time.
|
||||
#
|
||||
# One source:
|
||||
# <a href="http://www.falklandnews.com/public/story.cfm?get=5914&source=3">
|
||||
# http://www.falklandnews.com/public/story.cfm?get=5914&source=3
|
||||
# </a>
|
||||
#
|
||||
# We have gotten this confirmed by a clerk of the legislative assembly:
|
||||
# Normally the clocks revert to Local Mean Time (UTC/GMT -4 hours) on the
|
||||
# third Sunday of April at 0200hrs and advance to Summer Time (UTC/GMT -3
|
||||
# hours) on the first Sunday of September at 0200hrs.
|
||||
#
|
||||
# IMPORTANT NOTE: During 2011, on a trial basis, the Falkland Islands
|
||||
# will not revert to local mean time, but clocks will remain on Summer
|
||||
# time (UTC/GMT - 3 hours) throughout the whole of 2011. Any long term
|
||||
# change to local time following the trial period will be notified.
|
||||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||||
Rule Falk 1937 1938 - Sep lastSun 0:00 1:00 S
|
||||
Rule Falk 1938 1942 - Mar Sun>=19 0:00 0 -
|
||||
@ -1376,7 +1394,8 @@ Rule Falk 1984 1985 - Apr lastSun 0:00 0 -
|
||||
Rule Falk 1984 only - Sep 16 0:00 1:00 S
|
||||
Rule Falk 1985 2000 - Sep Sun>=9 0:00 1:00 S
|
||||
Rule Falk 1986 2000 - Apr Sun>=16 0:00 0 -
|
||||
Rule Falk 2001 max - Apr Sun>=15 2:00 0 -
|
||||
Rule Falk 2001 2010 - Apr Sun>=15 2:00 0 -
|
||||
Rule Falk 2012 max - Apr Sun>=15 2:00 0 -
|
||||
Rule Falk 2001 max - Sep Sun>=1 2:00 1:00 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
Zone Atlantic/Stanley -3:51:24 - LMT 1890
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@ -52,12 +52,10 @@ ifeq ($(ARCH_DATA_MODEL), 64)
|
||||
endif
|
||||
endif
|
||||
|
||||
# Build Microsoft CryptoAPI provider only on (non-64-bit) Windows platform.
|
||||
# Build Microsoft CryptoAPI provider only on Windows platform.
|
||||
MSCAPI =
|
||||
ifeq ($(PLATFORM), windows)
|
||||
ifneq ($(ARCH_DATA_MODEL), 64)
|
||||
MSCAPI = mscapi
|
||||
endif
|
||||
MSCAPI = mscapi
|
||||
endif
|
||||
|
||||
# Build in-tree elliptic curve crypto provider only when
|
||||
|
@ -73,11 +73,37 @@ class CharacterData00 extends CharacterData {
|
||||
return props;
|
||||
}
|
||||
|
||||
int getPropertiesEx(int ch) {
|
||||
char offset = (char)ch;
|
||||
int props = $$LookupEx(offset);
|
||||
return props;
|
||||
}
|
||||
|
||||
int getType(int ch) {
|
||||
int props = getProperties(ch);
|
||||
return (props & $$maskType);
|
||||
}
|
||||
|
||||
boolean isOtherLowercase(int ch) {
|
||||
int props = getPropertiesEx(ch);
|
||||
return (props & $$maskOtherLowercase) != 0;
|
||||
}
|
||||
|
||||
boolean isOtherUppercase(int ch) {
|
||||
int props = getPropertiesEx(ch);
|
||||
return (props & $$maskOtherUppercase) != 0;
|
||||
}
|
||||
|
||||
boolean isOtherAlphabetic(int ch) {
|
||||
int props = getPropertiesEx(ch);
|
||||
return (props & $$maskOtherAlphabetic) != 0;
|
||||
}
|
||||
|
||||
boolean isIdeographic(int ch) {
|
||||
int props = getPropertiesEx(ch);
|
||||
return (props & $$maskIdeographic) != 0;
|
||||
}
|
||||
|
||||
boolean isJavaIdentifierStart(int ch) {
|
||||
int props = getProperties(ch);
|
||||
return ((props & $$maskIdentifierInfo) >= $$lowJavaStart);
|
||||
|
@ -72,11 +72,37 @@ class CharacterData01 extends CharacterData {
|
||||
return props;
|
||||
}
|
||||
|
||||
int getPropertiesEx(int ch) {
|
||||
char offset = (char)ch;
|
||||
int props = $$LookupEx(offset);
|
||||
return props;
|
||||
}
|
||||
|
||||
int getType(int ch) {
|
||||
int props = getProperties(ch);
|
||||
return (props & $$maskType);
|
||||
}
|
||||
|
||||
boolean isOtherLowercase(int ch) {
|
||||
int props = getPropertiesEx(ch);
|
||||
return (props & $$maskOtherLowercase) != 0;
|
||||
}
|
||||
|
||||
boolean isOtherUppercase(int ch) {
|
||||
int props = getPropertiesEx(ch);
|
||||
return (props & $$maskOtherUppercase) != 0;
|
||||
}
|
||||
|
||||
boolean isOtherAlphabetic(int ch) {
|
||||
int props = getPropertiesEx(ch);
|
||||
return (props & $$maskOtherAlphabetic) != 0;
|
||||
}
|
||||
|
||||
boolean isIdeographic(int ch) {
|
||||
int props = getPropertiesEx(ch);
|
||||
return (props & $$maskIdeographic) != 0;
|
||||
}
|
||||
|
||||
boolean isJavaIdentifierStart(int ch) {
|
||||
int props = getProperties(ch);
|
||||
return ((props & $$maskIdentifierInfo) >= $$lowJavaStart);
|
||||
|
@ -66,11 +66,37 @@ class CharacterData02 extends CharacterData {
|
||||
*/
|
||||
|
||||
int getProperties(int ch) {
|
||||
char offset = (char)ch;
|
||||
char offset = (char)ch;
|
||||
int props = $$Lookup(offset);
|
||||
return props;
|
||||
}
|
||||
|
||||
int getPropertiesEx(int ch) {
|
||||
char offset = (char)ch;
|
||||
int props = $$LookupEx(offset);
|
||||
return props;
|
||||
}
|
||||
|
||||
boolean isOtherLowercase(int ch) {
|
||||
int props = getPropertiesEx(ch);
|
||||
return (props & $$maskOtherLowercase) != 0;
|
||||
}
|
||||
|
||||
boolean isOtherUppercase(int ch) {
|
||||
int props = getPropertiesEx(ch);
|
||||
return (props & $$maskOtherUppercase) != 0;
|
||||
}
|
||||
|
||||
boolean isOtherAlphabetic(int ch) {
|
||||
int props = getPropertiesEx(ch);
|
||||
return (props & $$maskOtherAlphabetic) != 0;
|
||||
}
|
||||
|
||||
boolean isIdeographic(int ch) {
|
||||
int props = getPropertiesEx(ch);
|
||||
return (props & $$maskIdeographic) != 0;
|
||||
}
|
||||
|
||||
int getType(int ch) {
|
||||
int props = getProperties(ch);
|
||||
return (props & $$maskType);
|
||||
|
@ -66,11 +66,37 @@ class CharacterData0E extends CharacterData {
|
||||
*/
|
||||
|
||||
int getProperties(int ch) {
|
||||
char offset = (char)ch;
|
||||
char offset = (char)ch;
|
||||
int props = $$Lookup(offset);
|
||||
return props;
|
||||
}
|
||||
|
||||
int getPropertiesEx(int ch) {
|
||||
char offset = (char)ch;
|
||||
int props = $$LookupEx(offset);
|
||||
return props;
|
||||
}
|
||||
|
||||
boolean isOtherLowercase(int ch) {
|
||||
int props = getPropertiesEx(ch);
|
||||
return (props & $$maskOtherLowercase) != 0;
|
||||
}
|
||||
|
||||
boolean isOtherUppercase(int ch) {
|
||||
int props = getPropertiesEx(ch);
|
||||
return (props & $$maskOtherUppercase) != 0;
|
||||
}
|
||||
|
||||
boolean isOtherAlphabetic(int ch) {
|
||||
int props = getPropertiesEx(ch);
|
||||
return (props & $$maskOtherAlphabetic) != 0;
|
||||
}
|
||||
|
||||
boolean isIdeographic(int ch) {
|
||||
int props = getPropertiesEx(ch);
|
||||
return (props & $$maskIdeographic) != 0;
|
||||
}
|
||||
|
||||
int getType(int ch) {
|
||||
int props = getProperties(ch);
|
||||
return (props & $$maskType);
|
||||
|
@ -67,11 +67,37 @@ class CharacterDataLatin1 extends CharacterData {
|
||||
*/
|
||||
|
||||
int getProperties(int ch) {
|
||||
char offset = (char)ch;
|
||||
char offset = (char)ch;
|
||||
int props = $$Lookup(offset);
|
||||
return props;
|
||||
}
|
||||
|
||||
int getPropertiesEx(int ch) {
|
||||
char offset = (char)ch;
|
||||
int props = $$LookupEx(offset);
|
||||
return props;
|
||||
}
|
||||
|
||||
boolean isOtherLowercase(int ch) {
|
||||
int props = getPropertiesEx(ch);
|
||||
return (props & $$maskOtherLowercase) != 0;
|
||||
}
|
||||
|
||||
boolean isOtherUppercase(int ch) {
|
||||
int props = getPropertiesEx(ch);
|
||||
return (props & $$maskOtherUppercase) != 0;
|
||||
}
|
||||
|
||||
boolean isOtherAlphabetic(int ch) {
|
||||
int props = getPropertiesEx(ch);
|
||||
return (props & $$maskOtherAlphabetic) != 0;
|
||||
}
|
||||
|
||||
boolean isIdeographic(int ch) {
|
||||
int props = getPropertiesEx(ch);
|
||||
return (props & $$maskIdeographic) != 0;
|
||||
}
|
||||
|
||||
int getType(int ch) {
|
||||
int props = getProperties(ch);
|
||||
return (props & $$maskType);
|
||||
|
1296
jdk/make/tools/UnicodeData/PropList.txt
Normal file
1296
jdk/make/tools/UnicodeData/PropList.txt
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,4 +1,3 @@
|
||||
|
||||
/*
|
||||
* Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
@ -34,6 +33,7 @@ import java.io.PrintWriter;
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.FileWriter;
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
|
||||
import build.tools.generatecharacter.CharacterName;
|
||||
|
||||
@ -68,18 +68,17 @@ public class GenerateCharacter {
|
||||
|
||||
final static boolean DEBUG = false;
|
||||
|
||||
final static int MAX_UNICODE_VALUE = 0xFFFF;
|
||||
final static String commandMarker = "$$";
|
||||
static String ROOT = "";
|
||||
static String DefaultUnicodeSpecFileName = ROOT + "UnicodeData.txt";
|
||||
static String DefaultSpecialCasingFileName = ROOT + "SpecialCasing.txt";
|
||||
static String DefaultPropListFileName = ROOT + "PropList.txt";
|
||||
static String DefaultJavaTemplateFileName = ROOT + "Character.java.template";
|
||||
static String DefaultJavaOutputFileName = ROOT + "Character.java";
|
||||
static String DefaultCTemplateFileName = ROOT + "Character.c.template";
|
||||
static String DefaultCOutputFileName = ROOT + "Character.c";
|
||||
|
||||
static String CharacterDataClassName = "CharacterData";
|
||||
static int plane = 0;
|
||||
static int plane = 0;
|
||||
|
||||
/* The overall idea is that, in the generated Character class source code,
|
||||
most character property data is stored in a special multi-level table whose
|
||||
@ -105,7 +104,11 @@ public class GenerateCharacter {
|
||||
entries are short rather than byte).
|
||||
*/
|
||||
|
||||
/* The character properties are currently encoded into 32 bits in the following manner:
|
||||
/* The character properties are currently encoded into A (32 bits)and B (16 bits)
|
||||
two parts.
|
||||
|
||||
A: the low 32 bits are defined in the following manner:
|
||||
|
||||
1 bit Mirrored property.
|
||||
4 bits Bidirectional category (see below) (unused if -nobidi switch specified)
|
||||
9 bits A signed offset used for converting case .
|
||||
@ -148,6 +151,14 @@ public class GenerateCharacter {
|
||||
will produce the desired numeric value.
|
||||
5 bits The digit offset (see description of previous field)
|
||||
5 bits Character type (see below)
|
||||
|
||||
B: the high 16 bits are defined as:
|
||||
1 bit Other_Lowercase property
|
||||
1 bit Other_Uppercase property
|
||||
1 bit Other_Alphabetic property
|
||||
1 bit Other_Math property
|
||||
1 bit Ideographic property
|
||||
1 bit Noncharacter codepoint property
|
||||
*/
|
||||
|
||||
|
||||
@ -173,9 +184,22 @@ public class GenerateCharacter {
|
||||
// case offset are 9 bits
|
||||
maskCase = 0x01FF,
|
||||
shiftBidi = 27, maskBidi = 0x78000000,
|
||||
shiftMirrored = 31, maskMirrored = 0x80000000,
|
||||
shiftMirrored = 31, //maskMirrored = 0x80000000,
|
||||
shiftPlane = 16, maskPlane = 0xFF0000;
|
||||
|
||||
// maskMirrored needs to be long, if up 16-bit
|
||||
private static final long maskMirrored = 0x80000000L;
|
||||
|
||||
// bit masks identify the 16-bit priperty field described above, in B
|
||||
// table
|
||||
private static final long
|
||||
maskOtherLowercase = 0x100000000L,
|
||||
maskOtherUppercase = 0x200000000L,
|
||||
maskOtherAlphabetic = 0x400000000L,
|
||||
maskOtherMath = 0x800000000L,
|
||||
maskIdeographic = 0x1000000000L,
|
||||
maskNoncharacterCP = 0x2000000000L;
|
||||
|
||||
// Can compare masked values with these to determine
|
||||
// numeric or lexical types.
|
||||
public static int
|
||||
@ -258,7 +282,7 @@ public class GenerateCharacter {
|
||||
* The specification file is assumed to contain its data in sorted order by
|
||||
* character code; as a result, the array passed as an argument to this method
|
||||
* has its components in the same sorted order, with one entry for each defined
|
||||
* Unicode character or character range. (A range is indicated by two consecutive
|
||||
* Unicode character or character range. (A range is indicated by two consecutive
|
||||
* entries, such that the name of the first entry begins with "<" and ends with
|
||||
* "First>" and the second entry begins with "<" and ends with "Last>".) This is
|
||||
* therefore a sparse representation of the character property data.
|
||||
@ -282,7 +306,8 @@ public class GenerateCharacter {
|
||||
* @see GenerateCharacter#buildOne
|
||||
*/
|
||||
|
||||
static long[] buildMap(UnicodeSpec[] data, SpecialCaseMap[] specialMaps) {
|
||||
static long[] buildMap(UnicodeSpec[] data, SpecialCaseMap[] specialMaps, PropList propList)
|
||||
{
|
||||
long[] result;
|
||||
if (bLatin1 == true) {
|
||||
result = new long[256];
|
||||
@ -290,13 +315,13 @@ public class GenerateCharacter {
|
||||
result = new long[1<<16];
|
||||
}
|
||||
int k=0;
|
||||
int codePoint = plane<<16;
|
||||
int codePoint = plane<<16;
|
||||
UnicodeSpec nonCharSpec = new UnicodeSpec();
|
||||
for (int j = 0; j < data.length && k < result.length; j++) {
|
||||
if (data[j].codePoint == codePoint) {
|
||||
result[k] = buildOne(codePoint, data[j], specialMaps);
|
||||
++k;
|
||||
++codePoint;
|
||||
++codePoint;
|
||||
}
|
||||
else if(data[j].codePoint > codePoint) {
|
||||
if (data[j].name.endsWith("Last>")) {
|
||||
@ -304,7 +329,7 @@ public class GenerateCharacter {
|
||||
while (codePoint < data[j].codePoint && k < result.length) {
|
||||
result[k] = buildOne(codePoint, data[j], specialMaps);
|
||||
++k;
|
||||
++codePoint;
|
||||
++codePoint;
|
||||
}
|
||||
}
|
||||
else {
|
||||
@ -312,15 +337,14 @@ public class GenerateCharacter {
|
||||
while (codePoint < data[j].codePoint && k < result.length) {
|
||||
result[k] = buildOne(codePoint, nonCharSpec, specialMaps);
|
||||
++k;
|
||||
++codePoint;
|
||||
++codePoint;
|
||||
}
|
||||
}
|
||||
k = data[j].codePoint & 0xFFFF;
|
||||
codePoint = data[j].codePoint;
|
||||
codePoint = data[j].codePoint;
|
||||
result[k] = buildOne(codePoint, data[j], specialMaps);
|
||||
++k;
|
||||
++codePoint;
|
||||
|
||||
++codePoint;
|
||||
}
|
||||
else {
|
||||
System.out.println("An error has occured during spec mapping.");
|
||||
@ -333,8 +357,17 @@ public class GenerateCharacter {
|
||||
while (k < result.length) {
|
||||
result[k] = buildOne(codePoint, nonCharSpec, specialMaps);
|
||||
++k;
|
||||
++codePoint;
|
||||
++codePoint;
|
||||
}
|
||||
// now add all extra supported properties from PropList, to the
|
||||
// upper 16-bit
|
||||
addExProp(result, propList, "Other_Lowercase", maskOtherLowercase);
|
||||
addExProp(result, propList, "Other_Uppercase", maskOtherUppercase);
|
||||
addExProp(result, propList, "Other_Alphabetic", maskOtherAlphabetic);
|
||||
addExProp(result, propList, "Ideographic", maskIdeographic);
|
||||
//addExProp(result, propList, "Other_Math", maskOtherMath);
|
||||
//addExProp(result, propList, "Noncharacter_CodePoint", maskNoncharacterCP);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -381,15 +414,15 @@ public class GenerateCharacter {
|
||||
// record the general category
|
||||
resultA |= us.generalCategory;
|
||||
|
||||
// record the numeric properties
|
||||
NUMERIC: {
|
||||
// record the numeric properties
|
||||
NUMERIC: {
|
||||
STRANGE: {
|
||||
int val = 0;
|
||||
// c is A-Z
|
||||
// c is A-Z
|
||||
if ((c >= 0x0041) && (c <= 0x005A)) {
|
||||
val = c - 0x0041;
|
||||
resultA |= valueJavaSupradecimal;
|
||||
// c is a-z
|
||||
// c is a-z
|
||||
} else if ((c >= 0x0061) && (c <= 0x007A)) {
|
||||
val = c - 0x0061;
|
||||
resultA |= valueJavaSupradecimal;
|
||||
@ -428,7 +461,7 @@ public class GenerateCharacter {
|
||||
resultA |= valueStrangeNumeric;
|
||||
} // end NUMERIC
|
||||
|
||||
// record case mapping
|
||||
// record case mapping
|
||||
int offset = 0;
|
||||
// might have a 1:M mapping
|
||||
int specialMap = SpecialCaseMap.find(c, specialCaseMaps);
|
||||
@ -458,12 +491,12 @@ public class GenerateCharacter {
|
||||
}
|
||||
}
|
||||
if ((us.hasTitleMap() && us.titleMap != us.upperMap) ||
|
||||
(bHasUpper && us.hasLowerMap())) {
|
||||
(bHasUpper && us.hasLowerMap())) {
|
||||
resultA |= maskTitleCase;
|
||||
}
|
||||
if (bHasUpper && !us.hasLowerMap() && !us.hasTitleMap() && verbose) {
|
||||
System.out.println("Warning: Character " + hex4(c) + " has upper but " +
|
||||
"no title case; Java won't know this");
|
||||
System.out.println("Warning: Character " + hex4(c) + " has upper but " +
|
||||
"no title case; Java won't know this");
|
||||
}
|
||||
if (offset < minOffsetSeen) minOffsetSeen = offset;
|
||||
if (offset > maxOffsetSeen) maxOffsetSeen = offset;
|
||||
@ -475,8 +508,7 @@ public class GenerateCharacter {
|
||||
}
|
||||
resultA |= ((offset & maskCase) << shiftCaseOffset);
|
||||
|
||||
|
||||
// record lexical info about this character
|
||||
// record lexical info about this character
|
||||
if (us.generalCategory == UnicodeSpec.LOWERCASE_LETTER
|
||||
|| us.generalCategory == UnicodeSpec.UPPERCASE_LETTER
|
||||
|| us.generalCategory == UnicodeSpec.TITLECASE_LETTER
|
||||
@ -539,6 +571,16 @@ public class GenerateCharacter {
|
||||
return resultA;
|
||||
}
|
||||
|
||||
static void addExProp(long[] map, PropList propList, String prop, long mask) {
|
||||
List<Integer> cps = propList.codepoints(prop);
|
||||
if (cps != null) {
|
||||
for (Integer cp : cps) {
|
||||
if (cp < map.length)
|
||||
map[cp] |= mask;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This is the heart of the table compression strategy. The inputs are a map
|
||||
* and a number of bits (size). The map is simply an array of long integer values;
|
||||
@ -645,8 +687,8 @@ OUTER: for (int i = 0; i < n; i += m) {
|
||||
*/
|
||||
|
||||
static void generateCharacterClass(String theTemplateFileName,
|
||||
String theOutputFileName)
|
||||
throws FileNotFoundException, IOException {
|
||||
String theOutputFileName)
|
||||
throws FileNotFoundException, IOException {
|
||||
BufferedReader in = new BufferedReader(new FileReader(theTemplateFileName));
|
||||
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(theOutputFileName)));
|
||||
out.println(commentStart +
|
||||
@ -719,6 +761,9 @@ OUTER: for (int i = 0; i < n; i += m) {
|
||||
if (x.length() >= 9 && x.substring(0, 7).equals("Lookup(") &&
|
||||
x.substring(x.length()-1).equals(")") )
|
||||
return genAccess("A", x.substring(7, x.length()-1), (identifiers ? 2 : 32));
|
||||
if (x.length() >= 11 && x.substring(0, 9).equals("LookupEx(") &&
|
||||
x.substring(x.length()-1).equals(")") )
|
||||
return genAccess("B", x.substring(9, x.length()-1), 16);
|
||||
if (x.equals("shiftType")) return Long.toString(shiftType);
|
||||
if (x.equals("shiftIdentifierInfo")) return Long.toString(shiftIdentifierInfo);
|
||||
if (x.equals("maskIdentifierInfo")) return "0x" + hex8(maskIdentifierInfo);
|
||||
@ -731,6 +776,10 @@ OUTER: for (int i = 0; i < n; i += m) {
|
||||
if (x.equals("maskLowerCase")) return "0x" + hex8(maskLowerCase);
|
||||
if (x.equals("maskUpperCase")) return "0x" + hex8(maskUpperCase);
|
||||
if (x.equals("maskTitleCase")) return "0x" + hex8(maskTitleCase);
|
||||
if (x.equals("maskOtherLowercase")) return "0x" + hex4(maskOtherLowercase >> 32);
|
||||
if (x.equals("maskOtherUppercase")) return "0x" + hex4(maskOtherUppercase >> 32);
|
||||
if (x.equals("maskOtherAlphabetic")) return "0x" + hex4(maskOtherAlphabetic >> 32);
|
||||
if (x.equals("maskIdeographic")) return "0x" + hex4(maskIdeographic >> 32);
|
||||
if (x.equals("valueIgnorable")) return "0x" + hex8(valueIgnorable);
|
||||
if (x.equals("valueJavaUnicodeStart")) return "0x" + hex8(valueJavaUnicodeStart);
|
||||
if (x.equals("valueJavaOnlyStart")) return "0x" + hex8(valueJavaOnlyStart);
|
||||
@ -899,7 +948,7 @@ OUTER: for (int i = 0; i < n; i += m) {
|
||||
|
||||
// If we ever need more than 32 bits to represent the character properties,
|
||||
// then a table "B" may be needed as well.
|
||||
// genTable(result, "B", tables[n - 1], 32, 16, sizes[n - 1], false, 0, true, true, false);
|
||||
genTable(result, "B", tables[n - 1], 32, 16, sizes[n - 1], false, 0, true, true, false);
|
||||
|
||||
totalBytes += ((((tables[n - 1].length * (identifiers ? 2 : 32)) + 31) >> 5) << 2);
|
||||
result.append(commentStart);
|
||||
@ -1080,9 +1129,9 @@ OUTER: for (int i = 0; i < n; i += m) {
|
||||
*/
|
||||
|
||||
static void genTable(StringBuffer result, String name,
|
||||
long[] table, int extract, int bits, int size,
|
||||
boolean preshifted, int shift, boolean hexFormat,
|
||||
boolean properties, boolean hexComment) {
|
||||
long[] table, int extract, int bits, int size,
|
||||
boolean preshifted, int shift, boolean hexFormat,
|
||||
boolean properties, boolean hexComment) {
|
||||
|
||||
String atype = bits == 1 ? (Csyntax ? "unsigned long" : "int") :
|
||||
bits == 2 ? (Csyntax ? "unsigned long" : "int") :
|
||||
@ -1137,7 +1186,12 @@ OUTER: for (int i = 0; i < n; i += m) {
|
||||
char ch = '\u0000';
|
||||
int charsPerEntry = -entriesPerChar;
|
||||
for (int j=0; j<table.length; ++j) {
|
||||
long entry = table[j] >> extract;
|
||||
//long entry = table[j] >> extract;
|
||||
long entry;
|
||||
if ("A".equals(name))
|
||||
entry = (table[j] & 0xffffffffL) >> extract;
|
||||
else
|
||||
entry = (table[j] >> extract);
|
||||
if (shiftEntries) entry <<= shift;
|
||||
if (entry >= (1L << bits)) {
|
||||
FAIL("Entry too big");
|
||||
@ -1549,6 +1603,7 @@ OUTER: for (int i = 0; i < n; i += m) {
|
||||
static String OutputFileName = null;
|
||||
static String UnicodeSpecFileName = null; // liu
|
||||
static String SpecialCasingFileName = null;
|
||||
static String PropListFileName = null;
|
||||
static boolean useCharForByte = false;
|
||||
static int[] sizes;
|
||||
static int bins = 0; // liu; if > 0, then perform search
|
||||
@ -1668,20 +1723,28 @@ OUTER: for (int i = 0; i < n; i += m) {
|
||||
SpecialCasingFileName = args[++j];
|
||||
}
|
||||
}
|
||||
else if (args[j].equals("-plane")) {
|
||||
if (j == args.length -1) {
|
||||
FAIL("Plane number missing after -plane");
|
||||
}
|
||||
else {
|
||||
plane = Integer.parseInt(args[++j]);
|
||||
}
|
||||
if (plane > 0) {
|
||||
bLatin1 = false;
|
||||
}
|
||||
}
|
||||
else if ("-usecharforbyte".equals(args[j])) {
|
||||
useCharForByte = true;
|
||||
}
|
||||
else if (args[j].equals("-proplist")) {
|
||||
if (j == args.length -1) {
|
||||
FAIL("File name missing after -proplist");
|
||||
}
|
||||
else {
|
||||
PropListFileName = args[++j];
|
||||
}
|
||||
}
|
||||
else if (args[j].equals("-plane")) {
|
||||
if (j == args.length -1) {
|
||||
FAIL("Plane number missing after -plane");
|
||||
}
|
||||
else {
|
||||
plane = Integer.parseInt(args[++j]);
|
||||
}
|
||||
if (plane > 0) {
|
||||
bLatin1 = false;
|
||||
}
|
||||
}
|
||||
else if ("-usecharforbyte".equals(args[j])) {
|
||||
useCharForByte = true;
|
||||
}
|
||||
else if (args[j].equals("-latin1")) {
|
||||
bLatin1 = true;
|
||||
plane = 0;
|
||||
@ -1728,6 +1791,10 @@ OUTER: for (int i = 0; i < n; i += m) {
|
||||
SpecialCasingFileName = DefaultSpecialCasingFileName;
|
||||
desc.append(" [-specialcasing " + SpecialCasingFileName + ']');
|
||||
}
|
||||
if (PropListFileName == null) {
|
||||
PropListFileName = DefaultPropListFileName;
|
||||
desc.append(" [-proplist " + PropListFileName + ']');
|
||||
}
|
||||
if (TemplateFileName == null) {
|
||||
TemplateFileName = (Csyntax ? DefaultCTemplateFileName
|
||||
: DefaultJavaTemplateFileName);
|
||||
@ -1877,12 +1944,13 @@ OUTER: for (int i = 0; i < n; i += m) {
|
||||
try {
|
||||
|
||||
UnicodeSpec[] data = UnicodeSpec.readSpecFile(new File(UnicodeSpecFileName), plane);
|
||||
|
||||
specialCaseMaps = SpecialCaseMap.readSpecFile(new File(SpecialCasingFileName), plane);
|
||||
PropList propList = PropList.readSpecFile(new File(PropListFileName), plane);
|
||||
|
||||
if (verbose) {
|
||||
System.out.println(data.length + " items read from Unicode spec file " + UnicodeSpecFileName); // liu
|
||||
}
|
||||
long[] map = buildMap(data, specialCaseMaps);
|
||||
long[] map = buildMap(data, specialCaseMaps, propList);
|
||||
if (verbose) {
|
||||
System.err.println("Completed building of initial map");
|
||||
}
|
||||
|
102
jdk/make/tools/src/build/tools/generatecharacter/PropList.java
Normal file
102
jdk/make/tools/src/build/tools/generatecharacter/PropList.java
Normal file
@ -0,0 +1,102 @@
|
||||
/*
|
||||
* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation. Oracle designates this
|
||||
* particular file as subject to the "Classpath" exception as provided
|
||||
* by Oracle in the LICENSE file that accompanied this code.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
package build.tools.generatecharacter;
|
||||
|
||||
import java.util.regex.*;
|
||||
import java.util.*;
|
||||
import java.io.*;
|
||||
|
||||
/**
|
||||
* A PropList object contains the lists of code points that have
|
||||
* the same Unicode property defined in PropList.txt
|
||||
*
|
||||
* @author Xueming Shen
|
||||
*/
|
||||
public class PropList {
|
||||
|
||||
public static PropList readSpecFile(File file, int plane)
|
||||
throws IOException
|
||||
{
|
||||
return new PropList(file, plane);
|
||||
}
|
||||
|
||||
public List<Integer> codepoints(String name) {
|
||||
return propMap.get(name);
|
||||
}
|
||||
|
||||
public Set<String> names() {
|
||||
return propMap.keySet();
|
||||
}
|
||||
|
||||
private Map<String, ArrayList<Integer>> propMap =
|
||||
new LinkedHashMap<String, ArrayList<Integer>>();
|
||||
|
||||
private PropList(File file, int plane) throws IOException {
|
||||
|
||||
int i, j;
|
||||
BufferedReader sbfr = new BufferedReader(new FileReader(file));
|
||||
Matcher m = Pattern.compile("(\\p{XDigit}+)(?:\\.{2}(\\p{XDigit}+))?\\s*;\\s+(\\w+)\\s+#.*").matcher("");
|
||||
String line = null;
|
||||
int lineNo = 0;
|
||||
while ((line = sbfr.readLine()) != null) {
|
||||
lineNo++;
|
||||
if (line.length() <= 1 || line.charAt(0) == '#') {
|
||||
continue;
|
||||
}
|
||||
m.reset(line);
|
||||
if (m.matches()) {
|
||||
int start = Integer.parseInt(m.group(1), 16);
|
||||
if ((start >> 16) != plane)
|
||||
continue;
|
||||
int end = (m.group(2)==null)?start
|
||||
:Integer.parseInt(m.group(2), 16);
|
||||
String name = m.group(3);
|
||||
|
||||
start &= 0xffff;
|
||||
end &= 0xffff;
|
||||
|
||||
ArrayList<Integer> list = propMap.get(name);
|
||||
if (list == null) {
|
||||
list = new ArrayList<Integer>();
|
||||
propMap.put(name, list);
|
||||
}
|
||||
while (start <= end)
|
||||
list.add(start++);
|
||||
} else {
|
||||
System.out.printf("Warning: Unrecognized line %d <%s>%n", lineNo, line);
|
||||
}
|
||||
}
|
||||
sbfr.close();
|
||||
|
||||
//for (String name: propMap.keySet()) {
|
||||
// System.out.printf("%s %d%n", name, propMap.get(name).size());
|
||||
//}
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws IOException {
|
||||
readSpecFile(new File(args[0]), Integer.decode(args[1]));
|
||||
}
|
||||
}
|
@ -1666,7 +1666,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern
|
||||
*/
|
||||
protected void removeCurrentRow() {
|
||||
((Row)getCurrentRow()).setDeleted();
|
||||
rvh.remove(cursorPos);
|
||||
rvh.remove(cursorPos - 1);
|
||||
--numRows;
|
||||
}
|
||||
|
||||
@ -6349,7 +6349,6 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern
|
||||
// this can happen if deleted rows are being shown
|
||||
if (row.getDeleted() == true) {
|
||||
removeCurrentRow();
|
||||
--numRows;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -395,7 +395,13 @@ public class Krb5LoginModule implements LoginModule {
|
||||
private boolean succeeded = false;
|
||||
private boolean commitSucceeded = false;
|
||||
private String username;
|
||||
|
||||
// Encryption keys calculated from password. Assigned when storekey == true
|
||||
// and useKeyTab == false (or true but not found)
|
||||
private EncryptionKey[] encKeys = null;
|
||||
|
||||
KeyTab ktab = null;
|
||||
|
||||
private Credentials cred = null;
|
||||
|
||||
private PrincipalName principal = null;
|
||||
@ -663,28 +669,49 @@ public class Krb5LoginModule implements LoginModule {
|
||||
(krb5PrincName.toString(),
|
||||
PrincipalName.KRB_NT_PRINCIPAL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Before dynamic KeyTab support (6894072), here we check if
|
||||
* the keytab contains keys for the principal. If no, keytab
|
||||
* will not be used and password is prompted for.
|
||||
*
|
||||
* After 6894072, we normally don't check it, and expect the
|
||||
* keys can be populated until a real connection is made. The
|
||||
* check is still done when isInitiator == true, where the keys
|
||||
* will be used right now.
|
||||
*
|
||||
* Probably tricky relations:
|
||||
*
|
||||
* useKeyTab is config flag, but when it's true but the ktab
|
||||
* does not contains keys for principal, we would use password
|
||||
* and keep the flag unchanged (for reuse?). In this method,
|
||||
* we use (ktab != null) to check whether keytab is used.
|
||||
* After this method (and when storeKey == true), we use
|
||||
* (encKeys == null) to check.
|
||||
*/
|
||||
if (useKeyTab) {
|
||||
encKeys =
|
||||
EncryptionKey.acquireSecretKeys(principal, keyTabName);
|
||||
|
||||
if (debug) {
|
||||
if (encKeys != null)
|
||||
System.out.println
|
||||
("principal's key obtained from the keytab");
|
||||
else
|
||||
System.out.println
|
||||
("Key for the principal " +
|
||||
principal +
|
||||
" not available in " +
|
||||
((keyTabName == null) ?
|
||||
"default key tab" : keyTabName));
|
||||
ktab = (keyTabName == null)
|
||||
? KeyTab.getInstance()
|
||||
: KeyTab.getInstance(new File(keyTabName));
|
||||
if (isInitiator) {
|
||||
if (Krb5Util.keysFromJavaxKeyTab(ktab, principal).length
|
||||
== 0) {
|
||||
ktab = null;
|
||||
if (debug) {
|
||||
System.out.println
|
||||
("Key for the principal " +
|
||||
principal +
|
||||
" not available in " +
|
||||
((keyTabName == null) ?
|
||||
"default key tab" : keyTabName));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
KrbAsReqBuilder builder;
|
||||
// We can't get the key from the keytab so prompt
|
||||
if (encKeys == null) {
|
||||
|
||||
if (ktab == null) {
|
||||
promptForPass(getPasswdFromSharedState);
|
||||
builder = new KrbAsReqBuilder(principal, password);
|
||||
if (isInitiator) {
|
||||
@ -693,9 +720,13 @@ public class Krb5LoginModule implements LoginModule {
|
||||
// updated with PA info
|
||||
cred = builder.action().getCreds();
|
||||
}
|
||||
encKeys = builder.getKeys();
|
||||
if (storeKey) {
|
||||
encKeys = builder.getKeys();
|
||||
// When encKeys is empty, the login actually fails.
|
||||
// For compatibility, exception is thrown in commit().
|
||||
}
|
||||
} else {
|
||||
builder = new KrbAsReqBuilder(principal, encKeys);
|
||||
builder = new KrbAsReqBuilder(principal, ktab);
|
||||
if (isInitiator) {
|
||||
cred = builder.action().getCreds();
|
||||
}
|
||||
@ -705,10 +736,15 @@ public class Krb5LoginModule implements LoginModule {
|
||||
if (debug) {
|
||||
System.out.println("principal is " + principal);
|
||||
HexDumpEncoder hd = new HexDumpEncoder();
|
||||
for (int i = 0; i < encKeys.length; i++) {
|
||||
System.out.println("EncryptionKey: keyType=" +
|
||||
encKeys[i].getEType() + " keyBytes (hex dump)=" +
|
||||
hd.encodeBuffer(encKeys[i].getBytes()));
|
||||
if (ktab != null) {
|
||||
System.out.println("Will use keytab");
|
||||
} else if (storeKey) {
|
||||
for (int i = 0; i < encKeys.length; i++) {
|
||||
System.out.println("EncryptionKey: keyType=" +
|
||||
encKeys[i].getEType() +
|
||||
" keyBytes (hex dump)=" +
|
||||
hd.encodeBuffer(encKeys[i].getBytes()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -989,8 +1025,8 @@ public class Krb5LoginModule implements LoginModule {
|
||||
kerbTicket = Krb5Util.credsToTicket(cred);
|
||||
}
|
||||
|
||||
if (storeKey) {
|
||||
if (encKeys == null || encKeys.length <= 0) {
|
||||
if (storeKey && encKeys != null) {
|
||||
if (encKeys.length == 0) {
|
||||
succeeded = false;
|
||||
throw new LoginException("Null Server Key ");
|
||||
}
|
||||
@ -1006,10 +1042,11 @@ public class Krb5LoginModule implements LoginModule {
|
||||
}
|
||||
|
||||
}
|
||||
// Let us add the kerbClientPrinc,kerbTicket and kerbKey (if
|
||||
// Let us add the kerbClientPrinc,kerbTicket and KeyTab/KerbKey (if
|
||||
// storeKey is true)
|
||||
if (!princSet.contains(kerbClientPrinc))
|
||||
if (!princSet.contains(kerbClientPrinc)) {
|
||||
princSet.add(kerbClientPrinc);
|
||||
}
|
||||
|
||||
// add the TGT
|
||||
if (kerbTicket != null) {
|
||||
@ -1018,19 +1055,29 @@ public class Krb5LoginModule implements LoginModule {
|
||||
}
|
||||
|
||||
if (storeKey) {
|
||||
for (int i = 0; i < kerbKeys.length; i++) {
|
||||
if (!privCredSet.contains(kerbKeys[i])) {
|
||||
privCredSet.add(kerbKeys[i]);
|
||||
if (encKeys == null) {
|
||||
if (!privCredSet.contains(ktab)) {
|
||||
privCredSet.add(ktab);
|
||||
// Compatibility; also add keys to privCredSet
|
||||
for (KerberosKey key: ktab.getKeys(kerbClientPrinc)) {
|
||||
privCredSet.add(new Krb5Util.KeysFromKeyTab(key));
|
||||
}
|
||||
}
|
||||
encKeys[i].destroy();
|
||||
encKeys[i] = null;
|
||||
if (debug) {
|
||||
System.out.println("Added server's key"
|
||||
+ kerbKeys[i]);
|
||||
System.out.println("\t\t[Krb5LoginModule] " +
|
||||
"added Krb5Principal " +
|
||||
kerbClientPrinc.toString()
|
||||
+ " to Subject");
|
||||
} else {
|
||||
for (int i = 0; i < kerbKeys.length; i ++) {
|
||||
if (!privCredSet.contains(kerbKeys[i])) {
|
||||
privCredSet.add(kerbKeys[i]);
|
||||
}
|
||||
encKeys[i].destroy();
|
||||
encKeys[i] = null;
|
||||
if (debug) {
|
||||
System.out.println("Added server's key"
|
||||
+ kerbKeys[i]);
|
||||
System.out.println("\t\t[Krb5LoginModule] " +
|
||||
"added Krb5Principal " +
|
||||
kerbClientPrinc.toString()
|
||||
+ " to Subject");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1106,7 +1153,8 @@ public class Krb5LoginModule implements LoginModule {
|
||||
while (it.hasNext()) {
|
||||
Object o = it.next();
|
||||
if (o instanceof KerberosTicket ||
|
||||
o instanceof KerberosKey) {
|
||||
o instanceof KerberosKey ||
|
||||
o instanceof KeyTab) {
|
||||
it.remove();
|
||||
}
|
||||
}
|
||||
@ -1161,6 +1209,7 @@ public class Krb5LoginModule implements LoginModule {
|
||||
} else {
|
||||
// remove temp results for the next try
|
||||
encKeys = null;
|
||||
ktab = null;
|
||||
principal = null;
|
||||
}
|
||||
username = null;
|
||||
|
@ -26,7 +26,6 @@
|
||||
package com.sun.tools.example.debug.bdi;
|
||||
|
||||
import com.sun.jdi.*;
|
||||
import com.sun.jdi.request.*;
|
||||
|
||||
public class AccessWatchpointSpec extends WatchpointSpec {
|
||||
|
||||
@ -38,6 +37,7 @@ public class AccessWatchpointSpec extends WatchpointSpec {
|
||||
/**
|
||||
* The 'refType' is known to match.
|
||||
*/
|
||||
@Override
|
||||
void resolve(ReferenceType refType) throws InvalidTypeException,
|
||||
NoSuchFieldException {
|
||||
if (!(refType instanceof ClassType)) {
|
||||
@ -51,6 +51,7 @@ public class AccessWatchpointSpec extends WatchpointSpec {
|
||||
.createAccessWatchpointRequest(field));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
return (obj instanceof AccessWatchpointSpec) && super.equals(obj);
|
||||
}
|
||||
|
@ -27,6 +27,9 @@ package com.sun.tools.example.debug.bdi;
|
||||
|
||||
public class AmbiguousMethodException extends Exception
|
||||
{
|
||||
|
||||
private static final long serialVersionUID = 7793370943251707514L;
|
||||
|
||||
public AmbiguousMethodException()
|
||||
{
|
||||
super();
|
||||
|
@ -25,30 +25,33 @@
|
||||
|
||||
package com.sun.tools.example.debug.bdi;
|
||||
|
||||
import com.sun.jdi.request.*;
|
||||
|
||||
public abstract class BreakpointSpec extends EventRequestSpec {
|
||||
|
||||
BreakpointSpec(EventRequestSpecList specs, ReferenceTypeSpec refSpec) {
|
||||
super(specs, refSpec);
|
||||
}
|
||||
|
||||
@Override
|
||||
void notifySet(SpecListener listener, SpecEvent evt) {
|
||||
listener.breakpointSet(evt);
|
||||
}
|
||||
|
||||
@Override
|
||||
void notifyDeferred(SpecListener listener, SpecEvent evt) {
|
||||
listener.breakpointDeferred(evt);
|
||||
}
|
||||
|
||||
@Override
|
||||
void notifyResolved(SpecListener listener, SpecEvent evt) {
|
||||
listener.breakpointResolved(evt);
|
||||
}
|
||||
|
||||
@Override
|
||||
void notifyDeleted(SpecListener listener, SpecEvent evt) {
|
||||
listener.breakpointDeleted(evt);
|
||||
}
|
||||
|
||||
@Override
|
||||
void notifyError(SpecListener listener, SpecErrorEvent evt) {
|
||||
listener.breakpointError(evt);
|
||||
}
|
||||
|
@ -43,10 +43,6 @@ class ChildSession extends Session {
|
||||
private BufferedReader out;
|
||||
private BufferedReader err;
|
||||
|
||||
private InputWriter inputWriter;
|
||||
private OutputReader outputReader;
|
||||
private OutputReader errorReader;
|
||||
|
||||
private InputListener input;
|
||||
private OutputListener output;
|
||||
private OutputListener error;
|
||||
@ -84,6 +80,7 @@ class ChildSession extends Session {
|
||||
this.error = error;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean attach() {
|
||||
|
||||
if (!connectToVMProcess()) {
|
||||
@ -131,6 +128,7 @@ class ChildSession extends Session {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void detach() {
|
||||
|
||||
//### debug
|
||||
@ -242,10 +240,7 @@ class ChildSession extends Session {
|
||||
this.diagnostics = diagnostics;
|
||||
}
|
||||
|
||||
public void quit() {
|
||||
running = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
int count;
|
||||
@ -254,6 +249,7 @@ class ChildSession extends Session {
|
||||
// Run in Swing event dispatcher thread.
|
||||
final String chars = new String(buffer, 0, count);
|
||||
SwingUtilities.invokeLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
output.putString(chars);
|
||||
}
|
||||
@ -264,6 +260,7 @@ class ChildSession extends Session {
|
||||
} catch (IOException e) {
|
||||
// Run in Swing event dispatcher thread.
|
||||
SwingUtilities.invokeLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
diagnostics.putString("IO error reading " +
|
||||
streamName +
|
||||
@ -288,11 +285,7 @@ class ChildSession extends Session {
|
||||
this.input = input;
|
||||
}
|
||||
|
||||
public void quit() {
|
||||
//### Won't have much effect if blocked on input!
|
||||
running = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
String line;
|
||||
while (running) {
|
||||
|
@ -25,4 +25,7 @@
|
||||
|
||||
package com.sun.tools.example.debug.bdi;
|
||||
|
||||
public class EvaluationException extends Exception {}
|
||||
public class EvaluationException extends Exception {
|
||||
|
||||
private static final long serialVersionUID = 4947109680354951694L;
|
||||
}
|
||||
|
@ -25,8 +25,6 @@
|
||||
|
||||
package com.sun.tools.example.debug.bdi;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import com.sun.jdi.*;
|
||||
import com.sun.jdi.request.EventRequest;
|
||||
|
||||
|
@ -26,11 +26,6 @@
|
||||
package com.sun.tools.example.debug.bdi;
|
||||
|
||||
import com.sun.jdi.ReferenceType;
|
||||
import com.sun.jdi.request.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Iterator;
|
||||
|
||||
public class ExceptionSpec extends EventRequestSpec {
|
||||
|
||||
@ -45,22 +40,27 @@ public class ExceptionSpec extends EventRequestSpec {
|
||||
this.notifyUncaught = notifyUncaught;
|
||||
}
|
||||
|
||||
@Override
|
||||
void notifySet(SpecListener listener, SpecEvent evt) {
|
||||
listener.exceptionInterceptSet(evt);
|
||||
}
|
||||
|
||||
@Override
|
||||
void notifyDeferred(SpecListener listener, SpecEvent evt) {
|
||||
listener.exceptionInterceptDeferred(evt);
|
||||
}
|
||||
|
||||
@Override
|
||||
void notifyResolved(SpecListener listener, SpecEvent evt) {
|
||||
listener.exceptionInterceptResolved(evt);
|
||||
}
|
||||
|
||||
@Override
|
||||
void notifyDeleted(SpecListener listener, SpecEvent evt) {
|
||||
listener.exceptionInterceptDeleted(evt);
|
||||
}
|
||||
|
||||
@Override
|
||||
void notifyError(SpecListener listener, SpecErrorEvent evt) {
|
||||
listener.exceptionInterceptError(evt);
|
||||
}
|
||||
@ -68,16 +68,19 @@ public class ExceptionSpec extends EventRequestSpec {
|
||||
/**
|
||||
* The 'refType' is known to match.
|
||||
*/
|
||||
@Override
|
||||
void resolve(ReferenceType refType) {
|
||||
setRequest(refType.virtualMachine().eventRequestManager()
|
||||
.createExceptionRequest(refType,
|
||||
notifyCaught, notifyUncaught));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return refSpec.hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof ExceptionSpec) {
|
||||
ExceptionSpec es = (ExceptionSpec)obj;
|
||||
@ -88,6 +91,7 @@ public class ExceptionSpec extends EventRequestSpec {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuffer buffer = new StringBuffer("exception catch ");
|
||||
buffer.append(refSpec.toString());
|
||||
|
@ -26,7 +26,6 @@
|
||||
package com.sun.tools.example.debug.bdi;
|
||||
|
||||
import com.sun.jdi.*;
|
||||
import com.sun.jdi.event.*;
|
||||
import com.sun.jdi.request.*;
|
||||
import com.sun.jdi.connect.*;
|
||||
import com.sun.tools.example.debug.expr.ExpressionParser;
|
||||
@ -56,7 +55,7 @@ public class ExecutionManager {
|
||||
|
||||
// Session Listeners
|
||||
|
||||
Vector<SessionListener> sessionListeners = new Vector<SessionListener>();
|
||||
ArrayList<SessionListener> sessionListeners = new ArrayList<SessionListener>();
|
||||
|
||||
public void addSessionListener(SessionListener listener) {
|
||||
sessionListeners.add(listener);
|
||||
@ -68,7 +67,7 @@ public class ExecutionManager {
|
||||
|
||||
// Spec Listeners
|
||||
|
||||
Vector<SpecListener> specListeners = new Vector<SpecListener>();
|
||||
ArrayList<SpecListener> specListeners = new ArrayList<SpecListener>();
|
||||
|
||||
public void addSpecListener(SpecListener cl) {
|
||||
specListeners.add(cl);
|
||||
@ -80,7 +79,7 @@ public class ExecutionManager {
|
||||
|
||||
// JDI Listeners
|
||||
|
||||
Vector<JDIListener> jdiListeners = new Vector<JDIListener>();
|
||||
ArrayList<JDIListener> jdiListeners = new ArrayList<JDIListener>();
|
||||
|
||||
/**
|
||||
* Adds a JDIListener
|
||||
@ -105,50 +104,50 @@ public class ExecutionManager {
|
||||
|
||||
// App Echo Listeners
|
||||
|
||||
private Vector<OutputListener> appEchoListeners = new Vector<OutputListener>();
|
||||
private ArrayList<OutputListener> appEchoListeners = new ArrayList<OutputListener>();
|
||||
|
||||
public void addApplicationEchoListener(OutputListener l) {
|
||||
appEchoListeners.addElement(l);
|
||||
appEchoListeners.add(l);
|
||||
}
|
||||
|
||||
public void removeApplicationEchoListener(OutputListener l) {
|
||||
appEchoListeners.removeElement(l);
|
||||
appEchoListeners.remove(l);
|
||||
}
|
||||
|
||||
// App Output Listeners
|
||||
|
||||
private Vector<OutputListener> appOutputListeners = new Vector<OutputListener>();
|
||||
private ArrayList<OutputListener> appOutputListeners = new ArrayList<OutputListener>();
|
||||
|
||||
public void addApplicationOutputListener(OutputListener l) {
|
||||
appOutputListeners.addElement(l);
|
||||
appOutputListeners.add(l);
|
||||
}
|
||||
|
||||
public void removeApplicationOutputListener(OutputListener l) {
|
||||
appOutputListeners.removeElement(l);
|
||||
appOutputListeners.remove(l);
|
||||
}
|
||||
|
||||
// App Error Listeners
|
||||
|
||||
private Vector<OutputListener> appErrorListeners = new Vector<OutputListener>();
|
||||
private ArrayList<OutputListener> appErrorListeners = new ArrayList<OutputListener>();
|
||||
|
||||
public void addApplicationErrorListener(OutputListener l) {
|
||||
appErrorListeners.addElement(l);
|
||||
appErrorListeners.add(l);
|
||||
}
|
||||
|
||||
public void removeApplicationErrorListener(OutputListener l) {
|
||||
appErrorListeners.removeElement(l);
|
||||
appErrorListeners.remove(l);
|
||||
}
|
||||
|
||||
// Diagnostic Listeners
|
||||
|
||||
private Vector<OutputListener> diagnosticsListeners = new Vector<OutputListener>();
|
||||
private ArrayList<OutputListener> diagnosticsListeners = new ArrayList<OutputListener>();
|
||||
|
||||
public void addDiagnosticsListener(OutputListener l) {
|
||||
diagnosticsListeners.addElement(l);
|
||||
diagnosticsListeners.add(l);
|
||||
}
|
||||
|
||||
public void removeDiagnosticsListener(OutputListener l) {
|
||||
diagnosticsListeners.removeElement(l);
|
||||
diagnosticsListeners.remove(l);
|
||||
}
|
||||
|
||||
/////////// End Listener Registration //////////////
|
||||
@ -159,7 +158,9 @@ public class ExecutionManager {
|
||||
}
|
||||
|
||||
void ensureActiveSession() throws NoSessionException {
|
||||
if (session == null) throw new NoSessionException();
|
||||
if (session == null) {
|
||||
throw new NoSessionException();
|
||||
}
|
||||
}
|
||||
|
||||
public EventRequestManager eventRequestManager() {
|
||||
@ -293,6 +294,7 @@ public class ExecutionManager {
|
||||
ensureActiveSession();
|
||||
if (f != null) {
|
||||
frameGetter = new ExpressionParser.GetFrame() {
|
||||
@Override
|
||||
public StackFrame get() /* throws IncompatibleThreadStateException */ {
|
||||
return f;
|
||||
}
|
||||
@ -628,35 +630,35 @@ public class ExecutionManager {
|
||||
*/
|
||||
|
||||
private void notifyInterrupted() {
|
||||
Vector l = (Vector)sessionListeners.clone();
|
||||
ArrayList<SessionListener> l = new ArrayList<SessionListener>(sessionListeners);
|
||||
EventObject evt = new EventObject(this);
|
||||
for (int i = 0; i < l.size(); i++) {
|
||||
((SessionListener)l.elementAt(i)).sessionInterrupt(evt);
|
||||
l.get(i).sessionInterrupt(evt);
|
||||
}
|
||||
}
|
||||
|
||||
private void notifyContinued() {
|
||||
Vector l = (Vector)sessionListeners.clone();
|
||||
ArrayList<SessionListener> l = new ArrayList<SessionListener>(sessionListeners);
|
||||
EventObject evt = new EventObject(this);
|
||||
for (int i = 0; i < l.size(); i++) {
|
||||
((SessionListener)l.elementAt(i)).sessionContinue(evt);
|
||||
l.get(i).sessionContinue(evt);
|
||||
}
|
||||
}
|
||||
|
||||
private void notifySessionStart() {
|
||||
Vector l = (Vector)sessionListeners.clone();
|
||||
ArrayList<SessionListener> l = new ArrayList<SessionListener>(sessionListeners);
|
||||
EventObject evt = new EventObject(this);
|
||||
for (int i = 0; i < l.size(); i++) {
|
||||
((SessionListener)l.elementAt(i)).sessionStart(evt);
|
||||
l.get(i).sessionStart(evt);
|
||||
}
|
||||
}
|
||||
|
||||
private void notifySessionDeath() {
|
||||
/*** noop for now
|
||||
Vector l = (Vector)sessionListeners.clone();
|
||||
ArrayList<SessionListener> l = new ArrayList<SessionListener>(sessionListeners);
|
||||
EventObject evt = new EventObject(this);
|
||||
for (int i = 0; i < l.size(); i++) {
|
||||
((SessionListener)l.elementAt(i)).sessionDeath(evt);
|
||||
((SessionListener)l.get(i)).sessionDeath(evt);
|
||||
}
|
||||
****/
|
||||
}
|
||||
@ -684,6 +686,7 @@ public class ExecutionManager {
|
||||
}
|
||||
|
||||
private InputListener appInput = new InputListener() {
|
||||
@Override
|
||||
public String getLine() {
|
||||
// Don't allow reader to be interrupted -- catch and retry.
|
||||
String line = null;
|
||||
@ -703,6 +706,7 @@ public class ExecutionManager {
|
||||
// Run in Swing event dispatcher thread.
|
||||
final String input = line;
|
||||
SwingUtilities.invokeLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
echoInputLine(input);
|
||||
}
|
||||
@ -714,37 +718,40 @@ public class ExecutionManager {
|
||||
private static String newline = System.getProperty("line.separator");
|
||||
|
||||
private void echoInputLine(String line) {
|
||||
Vector l = (Vector)appEchoListeners.clone();
|
||||
ArrayList<OutputListener> l = new ArrayList<OutputListener>(appEchoListeners);
|
||||
for (int i = 0; i < l.size(); i++) {
|
||||
OutputListener ol = (OutputListener)l.elementAt(i);
|
||||
OutputListener ol = l.get(i);
|
||||
ol.putString(line);
|
||||
ol.putString(newline);
|
||||
}
|
||||
}
|
||||
|
||||
private OutputListener appOutput = new OutputListener() {
|
||||
@Override
|
||||
public void putString(String string) {
|
||||
Vector l = (Vector)appOutputListeners.clone();
|
||||
ArrayList<OutputListener> l = new ArrayList<OutputListener>(appEchoListeners);
|
||||
for (int i = 0; i < l.size(); i++) {
|
||||
((OutputListener)l.elementAt(i)).putString(string);
|
||||
l.get(i).putString(string);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private OutputListener appError = new OutputListener() {
|
||||
@Override
|
||||
public void putString(String string) {
|
||||
Vector l = (Vector)appErrorListeners.clone();
|
||||
ArrayList<OutputListener> l = new ArrayList<OutputListener>(appEchoListeners);
|
||||
for (int i = 0; i < l.size(); i++) {
|
||||
((OutputListener)l.elementAt(i)).putString(string);
|
||||
l.get(i).putString(string);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private OutputListener diagnostics = new OutputListener() {
|
||||
@Override
|
||||
public void putString(String string) {
|
||||
Vector l = (Vector)diagnosticsListeners.clone();
|
||||
ArrayList<OutputListener> l = new ArrayList<OutputListener>(diagnosticsListeners);
|
||||
for (int i = 0; i < l.size(); i++) {
|
||||
((OutputListener)l.elementAt(i)).putString(string);
|
||||
l.get(i).putString(string);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -25,4 +25,7 @@
|
||||
|
||||
package com.sun.tools.example.debug.bdi;
|
||||
|
||||
public class FrameIndexOutOfBoundsException extends IndexOutOfBoundsException {}
|
||||
public class FrameIndexOutOfBoundsException extends IndexOutOfBoundsException {
|
||||
|
||||
private static final long serialVersionUID = -4870148107027371437L;
|
||||
}
|
||||
|
@ -28,8 +28,6 @@ package com.sun.tools.example.debug.bdi;
|
||||
import com.sun.jdi.*;
|
||||
import com.sun.jdi.event.*;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import com.sun.tools.example.debug.event.*;
|
||||
|
||||
import javax.swing.SwingUtilities;
|
||||
@ -55,6 +53,7 @@ class JDIEventSource extends Thread {
|
||||
this.queue = session.vm.eventQueue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
runLoop();
|
||||
@ -78,6 +77,7 @@ class JDIEventSource extends Thread {
|
||||
//### Gross foul hackery!
|
||||
private void dispatchEventSet(final AbstractEventSet es) {
|
||||
SwingUtilities.invokeLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
boolean interrupted = es.suspendedAll();
|
||||
es.notify(firstListener);
|
||||
@ -117,54 +117,65 @@ class JDIEventSource extends Thread {
|
||||
//### This is a Hack, deal with it
|
||||
private class FirstListener implements JDIListener {
|
||||
|
||||
@Override
|
||||
public void accessWatchpoint(AccessWatchpointEventSet e) {
|
||||
session.runtime.validateThreadInfo();
|
||||
wantInterrupt = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void classPrepare(ClassPrepareEventSet e) {
|
||||
wantInterrupt = false;
|
||||
runtime.resolve(e.getReferenceType());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void classUnload(ClassUnloadEventSet e) {
|
||||
wantInterrupt = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exception(ExceptionEventSet e) {
|
||||
wantInterrupt = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void locationTrigger(LocationTriggerEventSet e) {
|
||||
session.runtime.validateThreadInfo();
|
||||
wantInterrupt = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void modificationWatchpoint(ModificationWatchpointEventSet e) {
|
||||
session.runtime.validateThreadInfo();
|
||||
wantInterrupt = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void threadDeath(ThreadDeathEventSet e) {
|
||||
wantInterrupt = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void threadStart(ThreadStartEventSet e) {
|
||||
wantInterrupt = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void vmDeath(VMDeathEventSet e) {
|
||||
//### Should have some way to notify user
|
||||
//### that VM died before the session ended.
|
||||
wantInterrupt = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void vmDisconnect(VMDisconnectEventSet e) {
|
||||
//### Notify user?
|
||||
wantInterrupt = false;
|
||||
session.runtime.endSession();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void vmStart(VMStartEventSet e) {
|
||||
//### Do we need to do anything with it?
|
||||
wantInterrupt = false;
|
||||
|
@ -26,11 +26,7 @@
|
||||
package com.sun.tools.example.debug.bdi;
|
||||
|
||||
import com.sun.jdi.*;
|
||||
import com.sun.jdi.request.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Iterator;
|
||||
|
||||
public class LineBreakpointSpec extends BreakpointSpec {
|
||||
int lineNumber;
|
||||
@ -44,6 +40,7 @@ public class LineBreakpointSpec extends BreakpointSpec {
|
||||
/**
|
||||
* The 'refType' is known to match.
|
||||
*/
|
||||
@Override
|
||||
void resolve(ReferenceType refType) throws InvalidTypeException,
|
||||
LineNotFoundException {
|
||||
if (!(refType instanceof ClassType)) {
|
||||
@ -81,10 +78,12 @@ public class LineBreakpointSpec extends BreakpointSpec {
|
||||
return lineNumber;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return refSpec.hashCode() + lineNumber;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof LineBreakpointSpec) {
|
||||
LineBreakpointSpec breakpoint = (LineBreakpointSpec)obj;
|
||||
@ -96,6 +95,7 @@ public class LineBreakpointSpec extends BreakpointSpec {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String errorMessageFor(Exception e) {
|
||||
if (e instanceof LineNotFoundException) {
|
||||
return ("No code at line " + lineNumber() + " in " + refSpec);
|
||||
@ -107,6 +107,7 @@ public class LineBreakpointSpec extends BreakpointSpec {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuffer buffer = new StringBuffer("breakpoint ");
|
||||
buffer.append(refSpec.toString());
|
||||
|
@ -27,6 +27,9 @@ package com.sun.tools.example.debug.bdi;
|
||||
|
||||
public class LineNotFoundException extends Exception
|
||||
{
|
||||
|
||||
private static final long serialVersionUID = -5630418117861587582L;
|
||||
|
||||
public LineNotFoundException()
|
||||
{
|
||||
super();
|
||||
|
@ -26,6 +26,9 @@
|
||||
package com.sun.tools.example.debug.bdi;
|
||||
|
||||
class MalformedMemberNameException extends Exception {
|
||||
|
||||
private static final long serialVersionUID = -7726664097374844485L;
|
||||
|
||||
public MalformedMemberNameException() {
|
||||
super();
|
||||
}
|
||||
|
@ -26,11 +26,8 @@
|
||||
package com.sun.tools.example.debug.bdi;
|
||||
|
||||
import com.sun.jdi.*;
|
||||
import com.sun.jdi.request.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Iterator;
|
||||
|
||||
public class MethodBreakpointSpec extends BreakpointSpec {
|
||||
String methodId;
|
||||
@ -47,6 +44,7 @@ public class MethodBreakpointSpec extends BreakpointSpec {
|
||||
/**
|
||||
* The 'refType' is known to match.
|
||||
*/
|
||||
@Override
|
||||
void resolve(ReferenceType refType) throws MalformedMemberNameException,
|
||||
AmbiguousMethodException,
|
||||
InvalidTypeException,
|
||||
@ -80,12 +78,14 @@ public class MethodBreakpointSpec extends BreakpointSpec {
|
||||
return methodArgs;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return refSpec.hashCode() +
|
||||
((methodId != null) ? methodId.hashCode() : 0) +
|
||||
((methodArgs != null) ? methodArgs.hashCode() : 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof MethodBreakpointSpec) {
|
||||
MethodBreakpointSpec breakpoint = (MethodBreakpointSpec)obj;
|
||||
@ -98,6 +98,7 @@ public class MethodBreakpointSpec extends BreakpointSpec {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String errorMessageFor(Exception e) {
|
||||
if (e instanceof AmbiguousMethodException) {
|
||||
return ("Method " + methodName() + " is overloaded; specify arguments");
|
||||
@ -114,6 +115,7 @@ public class MethodBreakpointSpec extends BreakpointSpec {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuffer buffer = new StringBuffer("breakpoint ");
|
||||
buffer.append(refSpec.toString());
|
||||
@ -257,7 +259,7 @@ public class MethodBreakpointSpec extends BreakpointSpec {
|
||||
*/
|
||||
if ((name.indexOf('.') == -1) || name.startsWith("*.")) {
|
||||
try {
|
||||
List refs = specs.runtime.findClassesMatchingPattern(name);
|
||||
List<?> refs = specs.runtime.findClassesMatchingPattern(name);
|
||||
if (refs.size() > 0) { //### ambiguity???
|
||||
name = ((ReferenceType)(refs.get(0))).name();
|
||||
}
|
||||
|
@ -27,6 +27,8 @@ package com.sun.tools.example.debug.bdi;
|
||||
|
||||
public class MethodNotFoundException extends Exception
|
||||
{
|
||||
private static final long serialVersionUID = -2064968107599632609L;
|
||||
|
||||
public MethodNotFoundException()
|
||||
{
|
||||
super();
|
||||
|
@ -26,7 +26,6 @@
|
||||
package com.sun.tools.example.debug.bdi;
|
||||
|
||||
import com.sun.jdi.*;
|
||||
import com.sun.jdi.request.*;
|
||||
|
||||
public class ModificationWatchpointSpec extends WatchpointSpec {
|
||||
|
||||
@ -38,6 +37,7 @@ public class ModificationWatchpointSpec extends WatchpointSpec {
|
||||
/**
|
||||
* The 'refType' is known to match.
|
||||
*/
|
||||
@Override
|
||||
void resolve(ReferenceType refType) throws InvalidTypeException,
|
||||
NoSuchFieldException {
|
||||
if (!(refType instanceof ClassType)) {
|
||||
@ -51,6 +51,7 @@ public class ModificationWatchpointSpec extends WatchpointSpec {
|
||||
.createModificationWatchpointRequest(field));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
return (obj instanceof ModificationWatchpointSpec) &&
|
||||
super.equals(obj);
|
||||
|
@ -25,4 +25,7 @@
|
||||
|
||||
package com.sun.tools.example.debug.bdi;
|
||||
|
||||
public class NoSessionException extends Exception {}
|
||||
public class NoSessionException extends Exception {
|
||||
|
||||
private static final long serialVersionUID = -7324357828115128603L;
|
||||
}
|
||||
|
@ -25,4 +25,8 @@
|
||||
|
||||
package com.sun.tools.example.debug.bdi;
|
||||
|
||||
public class NoThreadException extends Exception {}
|
||||
public class NoThreadException extends Exception {
|
||||
|
||||
private static final long serialVersionUID = 1846613539928921998L;
|
||||
|
||||
}
|
||||
|
@ -47,6 +47,7 @@ class PatternReferenceTypeSpec implements ReferenceTypeSpec {
|
||||
/**
|
||||
* Does the specified ReferenceType match this spec.
|
||||
*/
|
||||
@Override
|
||||
public boolean matches(ReferenceType refType) {
|
||||
if (isWild) {
|
||||
return refType.name().endsWith(classId);
|
||||
@ -55,10 +56,12 @@ class PatternReferenceTypeSpec implements ReferenceTypeSpec {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return classId.hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof PatternReferenceTypeSpec) {
|
||||
PatternReferenceTypeSpec spec = (PatternReferenceTypeSpec)obj;
|
||||
@ -89,6 +92,7 @@ class PatternReferenceTypeSpec implements ReferenceTypeSpec {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return isWild? "*" + classId : classId;
|
||||
}
|
||||
|
@ -33,7 +33,9 @@ interface ReferenceTypeSpec {
|
||||
*/
|
||||
boolean matches(ReferenceType refType);
|
||||
|
||||
@Override
|
||||
int hashCode();
|
||||
|
||||
@Override
|
||||
boolean equals(Object obj);
|
||||
}
|
||||
|
@ -27,7 +27,6 @@ package com.sun.tools.example.debug.bdi;
|
||||
|
||||
import com.sun.jdi.VirtualMachine;
|
||||
import com.sun.jdi.VMDisconnectedException;
|
||||
import com.sun.jdi.event.EventSet;
|
||||
|
||||
/**
|
||||
* Our repository of what we know about the state of one
|
||||
|
@ -39,6 +39,7 @@ class SourceNameReferenceTypeSpec implements ReferenceTypeSpec {
|
||||
/**
|
||||
* Does the specified ReferenceType match this spec.
|
||||
*/
|
||||
@Override
|
||||
public boolean matches(ReferenceType refType) {
|
||||
try {
|
||||
if (refType.sourceName().equals(sourceName)) {
|
||||
@ -48,9 +49,6 @@ class SourceNameReferenceTypeSpec implements ReferenceTypeSpec {
|
||||
return true;
|
||||
} catch(AbsentInformationException exc) {
|
||||
} catch(ObjectCollectedException exc) {
|
||||
} catch(InvalidLineNumberException exc) {
|
||||
// } catch(ClassNotPreparedException exc) {
|
||||
// -- should not happen, so don't catch this ---
|
||||
}
|
||||
}
|
||||
} catch(AbsentInformationException exc) {
|
||||
@ -59,10 +57,12 @@ class SourceNameReferenceTypeSpec implements ReferenceTypeSpec {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return sourceName.hashCode() + linenumber;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof SourceNameReferenceTypeSpec) {
|
||||
SourceNameReferenceTypeSpec spec = (SourceNameReferenceTypeSpec)obj;
|
||||
@ -74,6 +74,7 @@ class SourceNameReferenceTypeSpec implements ReferenceTypeSpec {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return sourceName + "@" + linenumber;
|
||||
}
|
||||
|
@ -25,10 +25,9 @@
|
||||
|
||||
package com.sun.tools.example.debug.bdi;
|
||||
|
||||
import java.util.EventObject;
|
||||
|
||||
public class SpecErrorEvent extends SpecEvent {
|
||||
|
||||
private static final long serialVersionUID = 8162634387866409578L;
|
||||
private Exception reason;
|
||||
|
||||
public SpecErrorEvent(EventRequestSpec eventRequestSpec,
|
||||
|
@ -31,6 +31,7 @@ import com.sun.jdi.request.EventRequest;
|
||||
|
||||
public class SpecEvent extends EventObject {
|
||||
|
||||
private static final long serialVersionUID = 4820735456787276230L;
|
||||
private EventRequestSpec eventRequestSpec;
|
||||
|
||||
public SpecEvent(EventRequestSpec eventRequestSpec) {
|
||||
|
@ -26,7 +26,6 @@
|
||||
package com.sun.tools.example.debug.bdi;
|
||||
|
||||
import com.sun.jdi.ThreadGroupReference;
|
||||
import com.sun.jdi.ThreadReference;
|
||||
import java.util.List;
|
||||
import java.util.Stack;
|
||||
import java.util.ArrayList;
|
||||
@ -73,10 +72,12 @@ public class ThreadGroupIterator implements Iterator<ThreadGroupReference> {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasNext() {
|
||||
return !stack.isEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ThreadGroupReference next() {
|
||||
return nextThreadGroup();
|
||||
}
|
||||
@ -87,6 +88,7 @@ public class ThreadGroupIterator implements Iterator<ThreadGroupReference> {
|
||||
return tg;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
@ -26,9 +26,6 @@
|
||||
package com.sun.tools.example.debug.bdi;
|
||||
|
||||
import com.sun.jdi.*;
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
|
||||
//### Should handle target VM death or connection failure cleanly.
|
||||
|
||||
|
@ -43,6 +43,7 @@ public class ThreadIterator implements Iterator<ThreadReference> {
|
||||
tgi = new ThreadGroupIterator(tgl);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasNext() {
|
||||
while (it == null || !it.hasNext()) {
|
||||
if (!tgi.hasNext()) {
|
||||
@ -53,6 +54,7 @@ public class ThreadIterator implements Iterator<ThreadReference> {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ThreadReference next() {
|
||||
return it.next();
|
||||
}
|
||||
@ -61,6 +63,7 @@ public class ThreadIterator implements Iterator<ThreadReference> {
|
||||
return next();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
@ -26,9 +26,6 @@
|
||||
package com.sun.tools.example.debug.bdi; //### does it belong here?
|
||||
|
||||
import com.sun.jdi.*;
|
||||
import com.sun.tools.jdi.*;
|
||||
import java.util.*;
|
||||
import java.io.*;
|
||||
|
||||
public class Utils {
|
||||
|
||||
|
@ -25,4 +25,7 @@
|
||||
|
||||
package com.sun.tools.example.debug.bdi;
|
||||
|
||||
public class VMLaunchFailureException extends Exception {}
|
||||
public class VMLaunchFailureException extends Exception {
|
||||
|
||||
private static final long serialVersionUID = -2439646729274310108L;
|
||||
}
|
||||
|
@ -25,4 +25,7 @@
|
||||
|
||||
package com.sun.tools.example.debug.bdi;
|
||||
|
||||
public class VMNotInterruptedException extends Exception {}
|
||||
public class VMNotInterruptedException extends Exception {
|
||||
|
||||
private static final long serialVersionUID = 8111074582188765600L;
|
||||
}
|
||||
|
@ -25,9 +25,6 @@
|
||||
|
||||
package com.sun.tools.example.debug.bdi;
|
||||
|
||||
import com.sun.jdi.*;
|
||||
import com.sun.jdi.request.*;
|
||||
|
||||
public abstract class WatchpointSpec extends EventRequestSpec {
|
||||
final String fieldId;
|
||||
|
||||
@ -40,31 +37,38 @@ public abstract class WatchpointSpec extends EventRequestSpec {
|
||||
// }
|
||||
}
|
||||
|
||||
@Override
|
||||
void notifySet(SpecListener listener, SpecEvent evt) {
|
||||
listener.watchpointSet(evt);
|
||||
}
|
||||
|
||||
@Override
|
||||
void notifyDeferred(SpecListener listener, SpecEvent evt) {
|
||||
listener.watchpointDeferred(evt);
|
||||
}
|
||||
|
||||
@Override
|
||||
void notifyResolved(SpecListener listener, SpecEvent evt) {
|
||||
listener.watchpointResolved(evt);
|
||||
}
|
||||
|
||||
@Override
|
||||
void notifyDeleted(SpecListener listener, SpecEvent evt) {
|
||||
listener.watchpointDeleted(evt);
|
||||
}
|
||||
|
||||
@Override
|
||||
void notifyError(SpecListener listener, SpecErrorEvent evt) {
|
||||
listener.watchpointError(evt);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return refSpec.hashCode() + fieldId.hashCode() +
|
||||
getClass().hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof WatchpointSpec) {
|
||||
WatchpointSpec watchpoint = (WatchpointSpec)obj;
|
||||
@ -77,6 +81,7 @@ public abstract class WatchpointSpec extends EventRequestSpec {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String errorMessageFor(Exception e) {
|
||||
if (e instanceof NoSuchFieldException) {
|
||||
return ("No field " + fieldId + " in " + refSpec);
|
||||
|
@ -33,6 +33,7 @@ import java.util.*;
|
||||
|
||||
public abstract class AbstractEventSet extends EventObject implements EventSet {
|
||||
|
||||
private static final long serialVersionUID = 2772717574222076977L;
|
||||
private final EventSet jdiEventSet;
|
||||
final Event oneEvent;
|
||||
|
||||
@ -81,6 +82,7 @@ public abstract class AbstractEventSet extends EventObject implements EventSet {
|
||||
|
||||
// Implement Mirror
|
||||
|
||||
@Override
|
||||
public VirtualMachine virtualMachine() {
|
||||
return jdiEventSet.virtualMachine();
|
||||
}
|
||||
@ -105,10 +107,12 @@ public abstract class AbstractEventSet extends EventObject implements EventSet {
|
||||
return jdiEventSet.suspendPolicy();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resume() {
|
||||
jdiEventSet.resume();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int suspendPolicy() {
|
||||
return jdiEventSet.suspendPolicy();
|
||||
}
|
||||
@ -128,6 +132,7 @@ public abstract class AbstractEventSet extends EventObject implements EventSet {
|
||||
/**
|
||||
* Return an iterator specific to {@link Event} objects.
|
||||
*/
|
||||
@Override
|
||||
public EventIterator eventIterator() {
|
||||
return jdiEventSet.eventIterator();
|
||||
}
|
||||
@ -142,6 +147,7 @@ public abstract class AbstractEventSet extends EventObject implements EventSet {
|
||||
*
|
||||
* @return the number of elements in this set (its cardinality).
|
||||
*/
|
||||
@Override
|
||||
public int size() {
|
||||
return jdiEventSet.size();
|
||||
}
|
||||
@ -151,6 +157,7 @@ public abstract class AbstractEventSet extends EventObject implements EventSet {
|
||||
*
|
||||
* @return <tt>true</tt> if this set contains no elements.
|
||||
*/
|
||||
@Override
|
||||
public boolean isEmpty() {
|
||||
return jdiEventSet.isEmpty();
|
||||
}
|
||||
@ -163,6 +170,7 @@ public abstract class AbstractEventSet extends EventObject implements EventSet {
|
||||
*
|
||||
* @return <tt>true</tt> if this set contains the specified element.
|
||||
*/
|
||||
@Override
|
||||
public boolean contains(Object o) {
|
||||
return jdiEventSet.contains(o);
|
||||
}
|
||||
@ -174,6 +182,7 @@ public abstract class AbstractEventSet extends EventObject implements EventSet {
|
||||
*
|
||||
* @return an iterator over the elements in this set.
|
||||
*/
|
||||
@Override
|
||||
public Iterator<Event> iterator() {
|
||||
return jdiEventSet.iterator();
|
||||
}
|
||||
@ -184,6 +193,7 @@ public abstract class AbstractEventSet extends EventObject implements EventSet {
|
||||
*
|
||||
* @return an array containing all of the elements in this set.
|
||||
*/
|
||||
@Override
|
||||
public Object[] toArray() {
|
||||
return jdiEventSet.toArray();
|
||||
}
|
||||
@ -202,6 +212,7 @@ public abstract class AbstractEventSet extends EventObject implements EventSet {
|
||||
* @throws ArrayStoreException the runtime type of a is not a supertype
|
||||
* of the runtime type of every element in this set.
|
||||
*/
|
||||
@Override
|
||||
public <T> T[] toArray(T a[]) {
|
||||
return jdiEventSet.toArray(a);
|
||||
}
|
||||
@ -217,6 +228,7 @@ public abstract class AbstractEventSet extends EventObject implements EventSet {
|
||||
* @return <tt>true</tt> if this set contains all of the elements of the
|
||||
* specified collection.
|
||||
*/
|
||||
@Override
|
||||
public boolean containsAll(Collection<?> c) {
|
||||
return jdiEventSet.containsAll(c);
|
||||
}
|
||||
@ -224,21 +236,27 @@ public abstract class AbstractEventSet extends EventObject implements EventSet {
|
||||
|
||||
// Make the rest of Set unmodifiable
|
||||
|
||||
@Override
|
||||
public boolean add(Event e){
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
@Override
|
||||
public boolean remove(Object o) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
@Override
|
||||
public boolean addAll(Collection<? extends Event> coll) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
@Override
|
||||
public boolean removeAll(Collection<?> coll) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
@Override
|
||||
public boolean retainAll(Collection<?> coll) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
@Override
|
||||
public void clear() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
@ -25,15 +25,17 @@
|
||||
|
||||
package com.sun.tools.example.debug.event;
|
||||
|
||||
import com.sun.jdi.*;
|
||||
import com.sun.jdi.event.*;
|
||||
|
||||
public class AccessWatchpointEventSet extends WatchpointEventSet {
|
||||
|
||||
private static final long serialVersionUID = -2620394219156607673L;
|
||||
|
||||
AccessWatchpointEventSet(EventSet jdiEventSet) {
|
||||
super(jdiEventSet);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notify(JDIListener listener) {
|
||||
listener.accessWatchpoint(this);
|
||||
}
|
||||
|
@ -30,6 +30,8 @@ import com.sun.jdi.event.*;
|
||||
|
||||
public class ClassPrepareEventSet extends AbstractEventSet {
|
||||
|
||||
private static final long serialVersionUID = 5958493423581010491L;
|
||||
|
||||
ClassPrepareEventSet(EventSet jdiEventSet) {
|
||||
super(jdiEventSet);
|
||||
}
|
||||
@ -55,6 +57,7 @@ public class ClassPrepareEventSet extends AbstractEventSet {
|
||||
return ((ClassPrepareEvent)oneEvent).referenceType();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notify(JDIListener listener) {
|
||||
listener.classPrepare(this);
|
||||
}
|
||||
|
@ -25,11 +25,12 @@
|
||||
|
||||
package com.sun.tools.example.debug.event;
|
||||
|
||||
import com.sun.jdi.*;
|
||||
import com.sun.jdi.event.*;
|
||||
|
||||
public class ClassUnloadEventSet extends AbstractEventSet {
|
||||
|
||||
private static final long serialVersionUID = 8370341450345835866L;
|
||||
|
||||
ClassUnloadEventSet(EventSet jdiEventSet) {
|
||||
super(jdiEventSet);
|
||||
}
|
||||
@ -48,6 +49,7 @@ public class ClassUnloadEventSet extends AbstractEventSet {
|
||||
return ((ClassUnloadEvent)oneEvent).classSignature();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notify(JDIListener listener) {
|
||||
listener.classUnload(this);
|
||||
}
|
||||
|
@ -30,6 +30,8 @@ import com.sun.jdi.event.*;
|
||||
|
||||
public class ExceptionEventSet extends LocatableEventSet {
|
||||
|
||||
private static final long serialVersionUID = 5328140167954640711L;
|
||||
|
||||
ExceptionEventSet(EventSet jdiEventSet) {
|
||||
super(jdiEventSet);
|
||||
}
|
||||
@ -75,6 +77,7 @@ public class ExceptionEventSet extends LocatableEventSet {
|
||||
return ((ExceptionEvent)oneEvent).catchLocation();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notify(JDIListener listener) {
|
||||
listener.exception(this);
|
||||
}
|
||||
|
@ -33,36 +33,47 @@ package com.sun.tools.example.debug.event;
|
||||
*/
|
||||
public class JDIAdapter implements JDIListener {
|
||||
|
||||
@Override
|
||||
public void accessWatchpoint(AccessWatchpointEventSet e) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void classPrepare(ClassPrepareEventSet e) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void classUnload(ClassUnloadEventSet e) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exception(ExceptionEventSet e) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void locationTrigger(LocationTriggerEventSet e) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void modificationWatchpoint(ModificationWatchpointEventSet e) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void threadDeath(ThreadDeathEventSet e) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void threadStart(ThreadStartEventSet e) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void vmDeath(VMDeathEventSet e) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void vmDisconnect(VMDisconnectEventSet e) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void vmStart(VMStartEventSet e) {
|
||||
}
|
||||
|
||||
|
@ -33,6 +33,8 @@ import com.sun.jdi.event.*;
|
||||
*/
|
||||
public abstract class LocatableEventSet extends AbstractEventSet {
|
||||
|
||||
private static final long serialVersionUID = 1027131209997915620L;
|
||||
|
||||
LocatableEventSet(EventSet jdiEventSet) {
|
||||
super(jdiEventSet);
|
||||
}
|
||||
|
@ -25,15 +25,17 @@
|
||||
|
||||
package com.sun.tools.example.debug.event;
|
||||
|
||||
import com.sun.jdi.*;
|
||||
import com.sun.jdi.event.*;
|
||||
|
||||
public class LocationTriggerEventSet extends LocatableEventSet {
|
||||
|
||||
private static final long serialVersionUID = -3674631710485872487L;
|
||||
|
||||
LocationTriggerEventSet(EventSet jdiEventSet) {
|
||||
super(jdiEventSet);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notify(JDIListener listener) {
|
||||
listener.locationTrigger(this);
|
||||
}
|
||||
|
@ -30,6 +30,8 @@ import com.sun.jdi.event.*;
|
||||
|
||||
public class ModificationWatchpointEventSet extends WatchpointEventSet {
|
||||
|
||||
private static final long serialVersionUID = -680889300856154719L;
|
||||
|
||||
ModificationWatchpointEventSet(EventSet jdiEventSet) {
|
||||
super(jdiEventSet);
|
||||
}
|
||||
@ -42,6 +44,7 @@ public class ModificationWatchpointEventSet extends WatchpointEventSet {
|
||||
return ((ModificationWatchpointEvent)oneEvent).valueToBe();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notify(JDIListener listener) {
|
||||
listener.modificationWatchpoint(this);
|
||||
}
|
||||
|
@ -30,6 +30,8 @@ import com.sun.jdi.event.*;
|
||||
|
||||
public class ThreadDeathEventSet extends AbstractEventSet {
|
||||
|
||||
private static final long serialVersionUID = -8801604712308151331L;
|
||||
|
||||
ThreadDeathEventSet(EventSet jdiEventSet) {
|
||||
super(jdiEventSet);
|
||||
}
|
||||
@ -44,6 +46,7 @@ public class ThreadDeathEventSet extends AbstractEventSet {
|
||||
return ((ThreadDeathEvent)oneEvent).thread();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notify(JDIListener listener) {
|
||||
listener.threadDeath(this);
|
||||
}
|
||||
|
@ -30,6 +30,8 @@ import com.sun.jdi.event.*;
|
||||
|
||||
public class ThreadStartEventSet extends AbstractEventSet {
|
||||
|
||||
private static final long serialVersionUID = -3802096132294933502L;
|
||||
|
||||
ThreadStartEventSet(EventSet jdiEventSet) {
|
||||
super(jdiEventSet);
|
||||
}
|
||||
@ -44,6 +46,7 @@ public class ThreadStartEventSet extends AbstractEventSet {
|
||||
return ((ThreadStartEvent)oneEvent).thread();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notify(JDIListener listener) {
|
||||
listener.threadStart(this);
|
||||
}
|
||||
|
@ -29,10 +29,13 @@ import com.sun.jdi.event.*;
|
||||
|
||||
public class VMDeathEventSet extends AbstractEventSet {
|
||||
|
||||
private static final long serialVersionUID = 1163097303940092229L;
|
||||
|
||||
VMDeathEventSet(EventSet jdiEventSet) {
|
||||
super(jdiEventSet);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notify(JDIListener listener) {
|
||||
listener.vmDeath(this);
|
||||
}
|
||||
|
@ -29,10 +29,13 @@ import com.sun.jdi.event.*;
|
||||
|
||||
public class VMDisconnectEventSet extends AbstractEventSet {
|
||||
|
||||
private static final long serialVersionUID = 7968123152344675342L;
|
||||
|
||||
VMDisconnectEventSet(EventSet jdiEventSet) {
|
||||
super(jdiEventSet);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notify(JDIListener listener) {
|
||||
listener.vmDisconnect(this);
|
||||
}
|
||||
|
@ -30,6 +30,8 @@ import com.sun.jdi.event.*;
|
||||
|
||||
public class VMStartEventSet extends AbstractEventSet {
|
||||
|
||||
private static final long serialVersionUID = -3384957227835478191L;
|
||||
|
||||
VMStartEventSet(EventSet jdiEventSet) {
|
||||
super(jdiEventSet);
|
||||
}
|
||||
@ -44,6 +46,7 @@ public class VMStartEventSet extends AbstractEventSet {
|
||||
return ((VMStartEvent)oneEvent).thread();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notify(JDIListener listener) {
|
||||
listener.vmStart(this);
|
||||
}
|
||||
|
@ -30,6 +30,8 @@ import com.sun.jdi.event.*;
|
||||
|
||||
public abstract class WatchpointEventSet extends LocatableEventSet {
|
||||
|
||||
private static final long serialVersionUID = 5606285209703845409L;
|
||||
|
||||
WatchpointEventSet(EventSet jdiEventSet) {
|
||||
super(jdiEventSet);
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -156,6 +156,7 @@ abstract class LValue {
|
||||
return new LValueArrayElement(interiorGetValue(), index);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
try {
|
||||
return interiorGetValue().toString();
|
||||
@ -419,6 +420,7 @@ abstract class LValue {
|
||||
this.var = var;
|
||||
}
|
||||
|
||||
@Override
|
||||
Value getValue() {
|
||||
if (jdiValue == null) {
|
||||
jdiValue = frame.getValue(var);
|
||||
@ -426,12 +428,14 @@ abstract class LValue {
|
||||
return jdiValue;
|
||||
}
|
||||
|
||||
@Override
|
||||
void setValue0(Value val) throws InvalidTypeException,
|
||||
ClassNotLoadedException {
|
||||
frame.setValue(var, val);
|
||||
jdiValue = val;
|
||||
}
|
||||
|
||||
@Override
|
||||
void invokeWith(List<Value> arguments) throws ParseException {
|
||||
throw new ParseException(var.name() + " is not a method");
|
||||
}
|
||||
@ -469,6 +473,7 @@ abstract class LValue {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
Value getValue() throws InvocationException, InvalidTypeException,
|
||||
ClassNotLoadedException, IncompatibleThreadStateException,
|
||||
ParseException {
|
||||
@ -485,6 +490,7 @@ abstract class LValue {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
void setValue0(Value val) throws ParseException,
|
||||
InvalidTypeException,
|
||||
ClassNotLoadedException {
|
||||
@ -495,6 +501,7 @@ abstract class LValue {
|
||||
jdiValue = val;
|
||||
}
|
||||
|
||||
@Override
|
||||
void invokeWith(List<Value> arguments) throws ParseException {
|
||||
if (matchingMethod != null) {
|
||||
throw new ParseException("Invalid consecutive invocations");
|
||||
@ -531,6 +538,7 @@ abstract class LValue {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
Value getValue() throws InvocationException, InvalidTypeException,
|
||||
ClassNotLoadedException, IncompatibleThreadStateException,
|
||||
ParseException {
|
||||
@ -548,6 +556,7 @@ abstract class LValue {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
void setValue0(Value val)
|
||||
throws ParseException, InvalidTypeException,
|
||||
ClassNotLoadedException {
|
||||
@ -562,6 +571,7 @@ abstract class LValue {
|
||||
jdiValue = val;
|
||||
}
|
||||
|
||||
@Override
|
||||
void invokeWith(List<Value> arguments) throws ParseException {
|
||||
if (matchingMethod != null) {
|
||||
throw new ParseException("Invalid consecutive invocations");
|
||||
@ -589,6 +599,7 @@ abstract class LValue {
|
||||
this.arrayRef = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
Value getValue() {
|
||||
if (jdiValue == null) {
|
||||
jdiValue = arrayRef.virtualMachine().mirrorOf(arrayRef.length());
|
||||
@ -596,10 +607,12 @@ abstract class LValue {
|
||||
return jdiValue;
|
||||
}
|
||||
|
||||
@Override
|
||||
void setValue0(Value value) throws ParseException {
|
||||
throw new ParseException("Cannot set constant: " + value);
|
||||
}
|
||||
|
||||
@Override
|
||||
void invokeWith(List<Value> arguments) throws ParseException {
|
||||
throw new ParseException("Array element is not a method");
|
||||
}
|
||||
@ -618,6 +631,7 @@ abstract class LValue {
|
||||
this.index = index;
|
||||
}
|
||||
|
||||
@Override
|
||||
Value getValue() {
|
||||
if (jdiValue == null) {
|
||||
jdiValue = array.getValue(index);
|
||||
@ -625,12 +639,14 @@ abstract class LValue {
|
||||
return jdiValue;
|
||||
}
|
||||
|
||||
@Override
|
||||
void setValue0(Value val) throws InvalidTypeException,
|
||||
ClassNotLoadedException {
|
||||
array.setValue(index, val);
|
||||
jdiValue = val;
|
||||
}
|
||||
|
||||
@Override
|
||||
void invokeWith(List<Value> arguments) throws ParseException {
|
||||
throw new ParseException("Array element is not a method");
|
||||
}
|
||||
@ -643,6 +659,7 @@ abstract class LValue {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
Value getValue() {
|
||||
if (jdiValue == null) {
|
||||
jdiValue = value;
|
||||
@ -650,10 +667,12 @@ abstract class LValue {
|
||||
return jdiValue;
|
||||
}
|
||||
|
||||
@Override
|
||||
void setValue0(Value val) throws ParseException {
|
||||
throw new ParseException("Cannot set constant: " + value);
|
||||
}
|
||||
|
||||
@Override
|
||||
void invokeWith(List<Value> arguments) throws ParseException {
|
||||
throw new ParseException("Constant is not a method");
|
||||
}
|
||||
|
@ -37,6 +37,8 @@ package com.sun.tools.example.debug.expr;
|
||||
*/
|
||||
public class ParseException extends Exception {
|
||||
|
||||
private static final long serialVersionUID = 7978489144303647901L;
|
||||
|
||||
/**
|
||||
* This constructor is used by the method "generateParseException"
|
||||
* in the generated parser. Calling this constructor generates
|
||||
@ -119,20 +121,21 @@ public class ParseException extends Exception {
|
||||
* of the final stack trace, and hence the correct error message
|
||||
* gets displayed.
|
||||
*/
|
||||
@Override
|
||||
public String getMessage() {
|
||||
if (!specialConstructor) {
|
||||
return super.getMessage();
|
||||
}
|
||||
String expected = "";
|
||||
int maxSize = 0;
|
||||
for (int i = 0; i < expectedTokenSequences.length; i++) {
|
||||
if (maxSize < expectedTokenSequences[i].length) {
|
||||
maxSize = expectedTokenSequences[i].length;
|
||||
for (int[] expectedTokenSequence : expectedTokenSequences) {
|
||||
if (maxSize < expectedTokenSequence.length) {
|
||||
maxSize = expectedTokenSequence.length;
|
||||
}
|
||||
for (int j = 0; j < expectedTokenSequences[i].length; j++) {
|
||||
expected += tokenImage[expectedTokenSequences[i][j]] + " ";
|
||||
for (int j = 0; j < expectedTokenSequence.length; j++) {
|
||||
expected += tokenImage[expectedTokenSequence[j]] + " ";
|
||||
}
|
||||
if (expectedTokenSequences[i][expectedTokenSequences[i].length - 1] != 0) {
|
||||
if (expectedTokenSequence[expectedTokenSequence.length - 1] != 0) {
|
||||
expected += "...";
|
||||
}
|
||||
expected += eol + " ";
|
||||
@ -140,7 +143,9 @@ public class ParseException extends Exception {
|
||||
String retval = "Encountered \"";
|
||||
Token tok = currentToken.next;
|
||||
for (int i = 0; i < maxSize; i++) {
|
||||
if (i != 0) retval += " ";
|
||||
if (i != 0) {
|
||||
retval += " ";
|
||||
}
|
||||
if (tok.kind == 0) {
|
||||
retval += tokenImage[0];
|
||||
break;
|
||||
|
@ -78,6 +78,7 @@ public class Token {
|
||||
/**
|
||||
* Returns the image.
|
||||
*/
|
||||
@Override
|
||||
public final String toString()
|
||||
{
|
||||
return image;
|
||||
|
@ -32,6 +32,8 @@ public class TokenMgrError extends Error
|
||||
* Ordinals for various reasons why an Error of this type can be thrown.
|
||||
*/
|
||||
|
||||
private static final long serialVersionUID = -6236440836177601522L;
|
||||
|
||||
/**
|
||||
* Lexical error occured.
|
||||
*/
|
||||
@ -136,6 +138,7 @@ public class TokenMgrError extends Error
|
||||
*
|
||||
* from this method for such cases in the release version of your parser.
|
||||
*/
|
||||
@Override
|
||||
public String getMessage() {
|
||||
return super.getMessage();
|
||||
}
|
||||
|
@ -29,12 +29,12 @@ import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
|
||||
import com.sun.jdi.*;
|
||||
import com.sun.tools.example.debug.bdi.*;
|
||||
|
||||
public class ApplicationTool extends JPanel {
|
||||
|
||||
private Environment env;
|
||||
private static final long serialVersionUID = 310966063293205714L;
|
||||
|
||||
private ExecutionManager runtime;
|
||||
|
||||
private TypeScript script;
|
||||
@ -45,13 +45,13 @@ public class ApplicationTool extends JPanel {
|
||||
|
||||
super(new BorderLayout());
|
||||
|
||||
this.env = env;
|
||||
this.runtime = env.getExecutionManager();
|
||||
|
||||
this.script = new TypeScript(PROMPT, false); // No implicit echo.
|
||||
this.add(script);
|
||||
|
||||
script.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
runtime.sendLineToApplication(script.readln());
|
||||
}
|
||||
|
@ -25,12 +25,10 @@
|
||||
|
||||
package com.sun.tools.example.debug.gui;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.*;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.tree.*;
|
||||
import javax.swing.event.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
|
||||
@ -40,6 +38,8 @@ import com.sun.tools.example.debug.bdi.*;
|
||||
|
||||
public class ClassTreeTool extends JPanel {
|
||||
|
||||
private static final long serialVersionUID = 526178912591739259L;
|
||||
|
||||
private Environment env;
|
||||
|
||||
private ExecutionManager runtime;
|
||||
@ -49,7 +49,7 @@ public class ClassTreeTool extends JPanel {
|
||||
private JTree tree;
|
||||
private DefaultTreeModel treeModel;
|
||||
private ClassTreeNode root;
|
||||
private SearchPath sourcePath;
|
||||
// private SearchPath sourcePath;
|
||||
|
||||
private CommandInterpreter interpreter;
|
||||
|
||||
@ -87,6 +87,7 @@ public class ClassTreeTool extends JPanel {
|
||||
******/
|
||||
|
||||
MouseListener ml = new MouseAdapter() {
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
int selRow = tree.getRowForLocation(e.getX(), e.getY());
|
||||
TreePath selPath = tree.getPathForLocation(e.getX(), e.getY());
|
||||
@ -121,6 +122,7 @@ public class ClassTreeTool extends JPanel {
|
||||
|
||||
// SessionListener
|
||||
|
||||
@Override
|
||||
public void sessionStart(EventObject e) {
|
||||
// Get system classes and any others loaded before attaching.
|
||||
try {
|
||||
@ -134,19 +136,24 @@ public class ClassTreeTool extends JPanel {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sessionInterrupt(EventObject e) {}
|
||||
@Override
|
||||
public void sessionContinue(EventObject e) {}
|
||||
|
||||
// JDIListener
|
||||
|
||||
@Override
|
||||
public void classPrepare(ClassPrepareEventSet e) {
|
||||
root.addClass(e.getReferenceType());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void classUnload(ClassUnloadEventSet e) {
|
||||
root.removeClass(e.getClassName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void vmDisconnect(VMDisconnectEventSet e) {
|
||||
// Clear contents of this view.
|
||||
root = createClassTree(HEADING);
|
||||
@ -169,6 +176,7 @@ public class ClassTreeTool extends JPanel {
|
||||
this.refTy = refTy;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return name;
|
||||
}
|
||||
@ -185,6 +193,7 @@ public class ClassTreeTool extends JPanel {
|
||||
return (refTy == null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isLeaf() {
|
||||
return !isPackage();
|
||||
}
|
||||
|
@ -29,8 +29,6 @@ import java.io.*;
|
||||
import java.util.*;
|
||||
|
||||
import com.sun.jdi.*;
|
||||
import com.sun.jdi.request.*;
|
||||
|
||||
import com.sun.tools.example.debug.bdi.*;
|
||||
|
||||
public class CommandInterpreter {
|
||||
@ -93,9 +91,9 @@ public class CommandInterpreter {
|
||||
try {
|
||||
ThreadReference[] threads = threads();
|
||||
long threadID = Long.parseLong(id, 16);
|
||||
for (int i = 0; i < threads.length; i++) {
|
||||
if (threads[i].uniqueID() == threadID) {
|
||||
thread = threads[i];
|
||||
for (ThreadReference thread2 : threads) {
|
||||
if (thread2.uniqueID() == threadID) {
|
||||
thread = thread2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -239,16 +237,18 @@ public class CommandInterpreter {
|
||||
for (int i = 0 ; i < tlist.size() ; i++) {
|
||||
ThreadReference thr = tlist.get(i);
|
||||
int len = Utils.description(thr).length();
|
||||
if (len > maxId)
|
||||
if (len > maxId) {
|
||||
maxId = len;
|
||||
}
|
||||
String name = thr.name();
|
||||
int iDot = name.lastIndexOf('.');
|
||||
if (iDot >= 0 && name.length() > iDot) {
|
||||
name = name.substring(iDot + 1);
|
||||
}
|
||||
if (name.length() > maxName)
|
||||
if (name.length() > maxName) {
|
||||
maxName = name.length();
|
||||
}
|
||||
}
|
||||
String maxNumString = String.valueOf(iThread + tlist.size());
|
||||
int maxNumDigits = maxNumString.length();
|
||||
for (int i = 0 ; i < tlist.size() ; i++) {
|
||||
@ -616,7 +616,6 @@ public class CommandInterpreter {
|
||||
int cnt = 1;
|
||||
if (t.hasMoreTokens()) {
|
||||
String idToken = t.nextToken();
|
||||
int n;
|
||||
try {
|
||||
cnt = Integer.valueOf(idToken).intValue();
|
||||
} catch (NumberFormatException e) {
|
||||
@ -885,7 +884,6 @@ public class CommandInterpreter {
|
||||
}
|
||||
|
||||
private void commandStop(StringTokenizer t) throws NoSessionException {
|
||||
Location bploc;
|
||||
String token;
|
||||
|
||||
if (!t.hasMoreTokens()) {
|
||||
|
@ -40,6 +40,8 @@ import com.sun.tools.example.debug.event.*;
|
||||
|
||||
public class CommandTool extends JPanel {
|
||||
|
||||
private static final long serialVersionUID = 8613516856378346415L;
|
||||
|
||||
private Environment env;
|
||||
|
||||
private ContextManager context;
|
||||
@ -68,6 +70,7 @@ public class CommandTool extends JPanel {
|
||||
// Establish handler for incoming commands.
|
||||
|
||||
script.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
interpreter.executeCommand(script.readln());
|
||||
}
|
||||
@ -107,15 +110,17 @@ public class CommandTool extends JPanel {
|
||||
|
||||
// JDIListener
|
||||
|
||||
@Override
|
||||
public void accessWatchpoint(AccessWatchpointEventSet e) {
|
||||
setThread(e);
|
||||
for (EventIterator it = e.eventIterator(); it.hasNext(); ) {
|
||||
Event evt = it.nextEvent();
|
||||
it.nextEvent();
|
||||
diagnostics.putString("Watchpoint hit: " +
|
||||
locationString(e));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void classPrepare(ClassPrepareEventSet e) {
|
||||
if (context.getVerboseFlag()) {
|
||||
String name = e.getReferenceType().name();
|
||||
@ -123,6 +128,7 @@ public class CommandTool extends JPanel {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void classUnload(ClassUnloadEventSet e) {
|
||||
if (context.getVerboseFlag()) {
|
||||
diagnostics.putString("Class " + e.getClassName() +
|
||||
@ -130,12 +136,14 @@ public class CommandTool extends JPanel {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exception(ExceptionEventSet e) {
|
||||
setThread(e);
|
||||
String name = e.getException().referenceType().name();
|
||||
diagnostics.putString("Exception: " + name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void locationTrigger(LocationTriggerEventSet e) {
|
||||
String locString = locationString(e);
|
||||
setThread(e);
|
||||
@ -155,15 +163,17 @@ public class CommandTool extends JPanel {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void modificationWatchpoint(ModificationWatchpointEventSet e) {
|
||||
setThread(e);
|
||||
for (EventIterator it = e.eventIterator(); it.hasNext(); ) {
|
||||
Event evt = it.nextEvent();
|
||||
it.nextEvent();
|
||||
diagnostics.putString("Watchpoint hit: " +
|
||||
locationString(e));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void threadDeath(ThreadDeathEventSet e) {
|
||||
if (context.getVerboseFlag()) {
|
||||
diagnostics.putString("Thread " + e.getThread() +
|
||||
@ -171,6 +181,7 @@ public class CommandTool extends JPanel {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void threadStart(ThreadStartEventSet e) {
|
||||
if (context.getVerboseFlag()) {
|
||||
diagnostics.putString("Thread " + e.getThread() +
|
||||
@ -178,16 +189,19 @@ public class CommandTool extends JPanel {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void vmDeath(VMDeathEventSet e) {
|
||||
script.setPrompt(DEFAULT_CMD_PROMPT);
|
||||
diagnostics.putString("VM exited");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void vmDisconnect(VMDisconnectEventSet e) {
|
||||
script.setPrompt(DEFAULT_CMD_PROMPT);
|
||||
diagnostics.putString("Disconnected from VM");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void vmStart(VMStartEventSet e) {
|
||||
script.setPrompt(DEFAULT_CMD_PROMPT);
|
||||
diagnostics.putString("VM started");
|
||||
@ -195,14 +209,17 @@ public class CommandTool extends JPanel {
|
||||
|
||||
// SessionListener
|
||||
|
||||
@Override
|
||||
public void sessionStart(EventObject e) {}
|
||||
|
||||
@Override
|
||||
public void sessionInterrupt(EventObject e) {
|
||||
Thread.yield(); // fetch output
|
||||
diagnostics.putString("VM interrupted by user.");
|
||||
script.setPrompt(DEFAULT_CMD_PROMPT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sessionContinue(EventObject e) {
|
||||
diagnostics.putString("Execution resumed.");
|
||||
script.setPrompt(DEFAULT_CMD_PROMPT);
|
||||
@ -210,23 +227,28 @@ public class CommandTool extends JPanel {
|
||||
|
||||
// SpecListener
|
||||
|
||||
@Override
|
||||
public void breakpointSet(SpecEvent e) {
|
||||
EventRequestSpec spec = e.getEventRequestSpec();
|
||||
diagnostics.putString("Breakpoint set at " + spec + ".");
|
||||
}
|
||||
@Override
|
||||
public void breakpointDeferred(SpecEvent e) {
|
||||
EventRequestSpec spec = e.getEventRequestSpec();
|
||||
diagnostics.putString("Breakpoint will be set at " +
|
||||
spec + " when its class is loaded.");
|
||||
}
|
||||
@Override
|
||||
public void breakpointDeleted(SpecEvent e) {
|
||||
EventRequestSpec spec = e.getEventRequestSpec();
|
||||
diagnostics.putString("Breakpoint at " + spec.toString() + " deleted.");
|
||||
}
|
||||
@Override
|
||||
public void breakpointResolved(SpecEvent e) {
|
||||
EventRequestSpec spec = e.getEventRequestSpec();
|
||||
diagnostics.putString("Breakpoint resolved to " + spec.toString() + ".");
|
||||
}
|
||||
@Override
|
||||
public void breakpointError(SpecErrorEvent e) {
|
||||
EventRequestSpec spec = e.getEventRequestSpec();
|
||||
diagnostics.putString("Deferred breakpoint at " +
|
||||
@ -236,25 +258,35 @@ public class CommandTool extends JPanel {
|
||||
|
||||
//### Add info for watchpoints and exceptions
|
||||
|
||||
@Override
|
||||
public void watchpointSet(SpecEvent e) {
|
||||
}
|
||||
@Override
|
||||
public void watchpointDeferred(SpecEvent e) {
|
||||
}
|
||||
@Override
|
||||
public void watchpointDeleted(SpecEvent e) {
|
||||
}
|
||||
@Override
|
||||
public void watchpointResolved(SpecEvent e) {
|
||||
}
|
||||
@Override
|
||||
public void watchpointError(SpecErrorEvent e) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exceptionInterceptSet(SpecEvent e) {
|
||||
}
|
||||
@Override
|
||||
public void exceptionInterceptDeferred(SpecEvent e) {
|
||||
}
|
||||
@Override
|
||||
public void exceptionInterceptDeleted(SpecEvent e) {
|
||||
}
|
||||
@Override
|
||||
public void exceptionInterceptResolved(SpecEvent e) {
|
||||
}
|
||||
@Override
|
||||
public void exceptionInterceptError(SpecErrorEvent e) {
|
||||
}
|
||||
|
||||
@ -263,6 +295,7 @@ public class CommandTool extends JPanel {
|
||||
|
||||
// If the user selects a new current thread or frame, update prompt.
|
||||
|
||||
@Override
|
||||
public void currentFrameChanged(CurrentFrameChangedEvent e) {
|
||||
// Update prompt only if affect thread is current.
|
||||
ThreadReference thread = e.getThread();
|
||||
|
@ -46,7 +46,7 @@ public class ContextManager {
|
||||
|
||||
private boolean verbose;
|
||||
|
||||
private Vector<ContextListener> contextListeners = new Vector<ContextListener>();
|
||||
private ArrayList<ContextListener> contextListeners = new ArrayList<ContextListener>();
|
||||
|
||||
public ContextManager(Environment env) {
|
||||
classManager = env.getClassManager();
|
||||
@ -264,11 +264,11 @@ public class ContextManager {
|
||||
|
||||
private void notifyCurrentFrameChanged(ThreadInfo tinfo, int index,
|
||||
boolean invalidate) {
|
||||
Vector l = (Vector)contextListeners.clone();
|
||||
ArrayList<ContextListener> l = new ArrayList<ContextListener>(contextListeners);
|
||||
CurrentFrameChangedEvent evt =
|
||||
new CurrentFrameChangedEvent(this, tinfo, index, invalidate);
|
||||
for (int i = 0; i < l.size(); i++) {
|
||||
((ContextListener)l.elementAt(i)).currentFrameChanged(evt);
|
||||
l.get(i).currentFrameChanged(evt);
|
||||
}
|
||||
}
|
||||
|
||||
@ -277,28 +277,34 @@ public class ContextManager {
|
||||
|
||||
// SessionListener
|
||||
|
||||
@Override
|
||||
public void sessionStart(EventObject e) {
|
||||
invalidateCurrentThread();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sessionInterrupt(EventObject e) {
|
||||
setCurrentThreadInvalidate(currentThread);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sessionContinue(EventObject e) {
|
||||
invalidateCurrentThread();
|
||||
}
|
||||
|
||||
// JDIListener
|
||||
|
||||
@Override
|
||||
public void locationTrigger(LocationTriggerEventSet e) {
|
||||
setCurrentThreadInvalidate(e.getThread());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exception(ExceptionEventSet e) {
|
||||
setCurrentThreadInvalidate(e.getThread());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void vmDisconnect(VMDisconnectEventSet e) {
|
||||
invalidateCurrentThread();
|
||||
}
|
||||
|
@ -31,6 +31,7 @@ import java.util.EventObject;
|
||||
|
||||
public class CurrentFrameChangedEvent extends EventObject {
|
||||
|
||||
private static final long serialVersionUID = 4214479486546762179L;
|
||||
private ThreadInfo tinfo;
|
||||
private int index;
|
||||
private boolean invalidate;
|
||||
|
@ -26,8 +26,6 @@
|
||||
package com.sun.tools.example.debug.gui;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.*;
|
||||
|
||||
import com.sun.jdi.*;
|
||||
import com.sun.tools.example.debug.bdi.*;
|
||||
|
||||
|
@ -26,8 +26,6 @@
|
||||
package com.sun.tools.example.debug.gui;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.*;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.border.*;
|
||||
import java.awt.*;
|
||||
@ -38,6 +36,7 @@ import com.sun.tools.example.debug.bdi.*;
|
||||
|
||||
public class GUI extends JPanel {
|
||||
|
||||
private static final long serialVersionUID = 3292463234530679091L;
|
||||
private CommandTool cmdTool;
|
||||
private ApplicationTool appTool;
|
||||
//###HACK##
|
||||
@ -87,7 +86,7 @@ public class GUI extends JPanel {
|
||||
threadTreeTool = new ThreadTreeTool(env);
|
||||
threadTreeTool.setPreferredSize(new java.awt.Dimension(200, 450));
|
||||
|
||||
JTabbedPane treePane = new JTabbedPane(JTabbedPane.BOTTOM);
|
||||
JTabbedPane treePane = new JTabbedPane(SwingConstants.BOTTOM);
|
||||
treePane.addTab("Source", null, sourceTreeTool);
|
||||
treePane.addTab("Classes", null, classTreeTool);
|
||||
treePane.addTab("Threads", null, threadTreeTool);
|
||||
@ -139,12 +138,9 @@ public class GUI extends JPanel {
|
||||
}
|
||||
|
||||
public static void main(String argv[]) {
|
||||
String remote = null;
|
||||
String clsName = "";
|
||||
String progArgs = "";
|
||||
String javaArgs = "";
|
||||
boolean verbose = false; //### Not implemented.
|
||||
|
||||
final Environment env = new Environment();
|
||||
|
||||
JPanel mainPanel = new GUI(env);
|
||||
@ -246,13 +242,14 @@ public class GUI extends JPanel {
|
||||
frame.setContentPane(mainPanel);
|
||||
|
||||
frame.addWindowListener(new WindowAdapter() {
|
||||
@Override
|
||||
public void windowClosing(WindowEvent e) {
|
||||
env.terminate();
|
||||
}
|
||||
});
|
||||
|
||||
frame.pack();
|
||||
frame.show();
|
||||
frame.setVisible(true);
|
||||
|
||||
}
|
||||
|
||||
|
@ -28,7 +28,6 @@ package com.sun.tools.example.debug.gui;
|
||||
import java.io.File;
|
||||
import java.util.Hashtable;
|
||||
import java.util.Enumeration;
|
||||
import javax.swing.*;
|
||||
import javax.swing.filechooser.*;
|
||||
|
||||
//### Renamed from 'ExampleFileFilter.java' provided with Swing demos.
|
||||
@ -93,8 +92,12 @@ public class JDBFileFilter extends FileFilter {
|
||||
*/
|
||||
public JDBFileFilter(String extension, String description) {
|
||||
this();
|
||||
if(extension!=null) addExtension(extension);
|
||||
if(description!=null) setDescription(description);
|
||||
if(extension!=null) {
|
||||
addExtension(extension);
|
||||
}
|
||||
if(description!=null) {
|
||||
setDescription(description);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -120,11 +123,13 @@ public class JDBFileFilter extends FileFilter {
|
||||
*/
|
||||
public JDBFileFilter(String[] filters, String description) {
|
||||
this();
|
||||
for (int i = 0; i < filters.length; i++) {
|
||||
for (String filter : filters) {
|
||||
// add filters one by one
|
||||
addExtension(filters[i]);
|
||||
addExtension(filter);
|
||||
}
|
||||
if(description!=null) setDescription(description);
|
||||
if(description!=null) {
|
||||
setDescription(description);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -136,6 +141,7 @@ public class JDBFileFilter extends FileFilter {
|
||||
* @see #getExtension
|
||||
* @see FileFilter#accepts
|
||||
*/
|
||||
@Override
|
||||
public boolean accept(File f) {
|
||||
if(f != null) {
|
||||
if(f.isDirectory()) {
|
||||
@ -196,6 +202,7 @@ public class JDBFileFilter extends FileFilter {
|
||||
* @see isExtensionListInDescription
|
||||
* @see FileFilter#getDescription
|
||||
*/
|
||||
@Override
|
||||
public String getDescription() {
|
||||
if(fullDescription == null) {
|
||||
if(description == null || isExtensionListInDescription()) {
|
||||
|
@ -31,7 +31,6 @@ import java.awt.event.*;
|
||||
import java.util.Vector;
|
||||
import java.util.List;
|
||||
|
||||
import com.sun.jdi.*;
|
||||
import com.sun.tools.example.debug.bdi.*;
|
||||
|
||||
//### This is currently just a placeholder!
|
||||
@ -57,6 +56,7 @@ class JDBMenuBar extends JMenuBar {
|
||||
|
||||
JMenuItem openItem = new JMenuItem("Open...", 'O');
|
||||
openItem.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
openCommand();
|
||||
}
|
||||
@ -93,6 +93,7 @@ class JDBMenuBar extends JMenuBar {
|
||||
|
||||
JMenuItem monitorItem = new JMenuItem("Monitor Expression...", 'M');
|
||||
monitorItem.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
monitorCommand();
|
||||
}
|
||||
@ -101,6 +102,7 @@ class JDBMenuBar extends JMenuBar {
|
||||
|
||||
JMenuItem unmonitorItem = new JMenuItem("Unmonitor Expression...");
|
||||
unmonitorItem.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
unmonitorCommand();
|
||||
}
|
||||
@ -110,6 +112,7 @@ class JDBMenuBar extends JMenuBar {
|
||||
JMenu breakpointMenu = new JMenu("Breakpoint");
|
||||
JMenuItem stopItem = new JMenuItem("Stop in...", 'S');
|
||||
stopItem.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
buildBreakpoint();
|
||||
}
|
||||
@ -176,6 +179,7 @@ class JDBMenuBar extends JMenuBar {
|
||||
mi.setToolTipText(toolTip);
|
||||
final String cmd = command;
|
||||
mi.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
interpreter.executeCommand(cmd);
|
||||
}
|
||||
|
@ -26,10 +26,8 @@
|
||||
package com.sun.tools.example.debug.gui;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
|
||||
import com.sun.jdi.*;
|
||||
import com.sun.tools.example.debug.bdi.*;
|
||||
|
||||
class JDBToolBar extends JToolBar {
|
||||
@ -92,6 +90,7 @@ class JDBToolBar extends JToolBar {
|
||||
button.setToolTipText(toolTip);
|
||||
final String cmd = command;
|
||||
button.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
interpreter.executeCommand(cmd);
|
||||
}
|
||||
|
@ -29,18 +29,10 @@ import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Map;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Color;
|
||||
import java.awt.Container;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.WindowAdapter;
|
||||
import java.awt.event.WindowEvent;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.border.Border;
|
||||
import javax.swing.border.TitledBorder;
|
||||
@ -98,6 +90,7 @@ class LaunchTool {
|
||||
comp.add(panel);
|
||||
}
|
||||
|
||||
@Override
|
||||
String getText() {
|
||||
return textField.getText();
|
||||
}
|
||||
@ -114,6 +107,7 @@ class LaunchTool {
|
||||
comp.add(panel);
|
||||
}
|
||||
|
||||
@Override
|
||||
String getText() {
|
||||
return ((Connector.BooleanArgument)arg)
|
||||
.stringValueOf(check.getModel().isSelected());
|
||||
@ -147,6 +141,7 @@ class LaunchTool {
|
||||
|
||||
final boolean[] oked = {false};
|
||||
JPanel buttonPanel = okCancel( dialog, new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent event) {
|
||||
if (radioGroup.getSelection() == null) {
|
||||
JOptionPane.showMessageDialog(dialog,
|
||||
@ -162,7 +157,7 @@ class LaunchTool {
|
||||
} );
|
||||
content.add(BorderLayout.SOUTH, buttonPanel);
|
||||
dialog.pack();
|
||||
dialog.show();
|
||||
dialog.setVisible(true);
|
||||
|
||||
return oked[0] ?
|
||||
modelToConnector.get(radioGroup.getSelection()) :
|
||||
@ -178,7 +173,7 @@ class LaunchTool {
|
||||
Container content = dialog.getContentPane();
|
||||
JPanel guts = new JPanel();
|
||||
Border etched = BorderFactory.createEtchedBorder();
|
||||
Border titled = BorderFactory.createTitledBorder(etched,
|
||||
BorderFactory.createTitledBorder(etched,
|
||||
connector.description(),
|
||||
TitledBorder.LEFT, TitledBorder.TOP);
|
||||
guts.setBorder(etched);
|
||||
@ -199,6 +194,7 @@ class LaunchTool {
|
||||
content.add(guts);
|
||||
|
||||
JPanel buttonPanel = okCancel( dialog, new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent event) {
|
||||
for (ArgRep ar : argReps) {
|
||||
if (!ar.isSpecified()) {
|
||||
@ -236,7 +232,7 @@ class LaunchTool {
|
||||
} );
|
||||
content.add(BorderLayout.SOUTH, buttonPanel);
|
||||
dialog.pack();
|
||||
dialog.show();
|
||||
dialog.setVisible(true);
|
||||
}
|
||||
|
||||
private JPanel okCancel(final JDialog dialog, ActionListener okListener) {
|
||||
@ -247,6 +243,7 @@ class LaunchTool {
|
||||
buttonPanel.add(cancel);
|
||||
ok.addActionListener(okListener);
|
||||
cancel.addActionListener( new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent event) {
|
||||
dialog.setVisible(false);
|
||||
dialog.dispose();
|
||||
|
@ -42,10 +42,12 @@ public class MonitorListModel extends AbstractListModel {
|
||||
//### remove listeners on exit!
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getElementAt(int index) {
|
||||
return monitors.get(index);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSize() {
|
||||
return monitors.size();
|
||||
}
|
||||
@ -70,7 +72,7 @@ public class MonitorListModel extends AbstractListModel {
|
||||
return Collections.unmodifiableList(monitors);
|
||||
}
|
||||
|
||||
public Iterator iterator() {
|
||||
public Iterator<?> iterator() {
|
||||
return monitors().iterator();
|
||||
}
|
||||
|
||||
@ -80,7 +82,8 @@ public class MonitorListModel extends AbstractListModel {
|
||||
|
||||
private class MonitorListListener implements ContextListener {
|
||||
|
||||
public void currentFrameChanged(CurrentFrameChangedEvent e) {
|
||||
@Override
|
||||
public void currentFrameChanged(final CurrentFrameChangedEvent e) {
|
||||
invalidate();
|
||||
}
|
||||
}
|
||||
|
@ -25,15 +25,9 @@
|
||||
|
||||
package com.sun.tools.example.debug.gui;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.*;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.tree.*;
|
||||
import javax.swing.event.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
|
||||
import com.sun.jdi.*;
|
||||
import com.sun.tools.example.debug.bdi.*;
|
||||
import com.sun.tools.example.debug.expr.ExpressionParser;
|
||||
@ -41,6 +35,7 @@ import com.sun.tools.example.debug.expr.ParseException;
|
||||
|
||||
public class MonitorTool extends JPanel {
|
||||
|
||||
private static final long serialVersionUID = -645235951031726647L;
|
||||
private ExecutionManager runtime;
|
||||
private ContextManager context;
|
||||
|
||||
@ -64,6 +59,7 @@ public class MonitorTool extends JPanel {
|
||||
}
|
||||
|
||||
private class MonitorToolListener implements ListSelectionListener {
|
||||
@Override
|
||||
public void valueChanged(ListSelectionEvent e) {
|
||||
int index = list.getSelectedIndex();
|
||||
if (index != -1) {
|
||||
@ -78,6 +74,7 @@ public class MonitorTool extends JPanel {
|
||||
IncompatibleThreadStateException {
|
||||
ExpressionParser.GetFrame frameGetter =
|
||||
new ExpressionParser.GetFrame() {
|
||||
@Override
|
||||
public StackFrame get()
|
||||
throws IncompatibleThreadStateException
|
||||
{
|
||||
@ -93,6 +90,7 @@ public class MonitorTool extends JPanel {
|
||||
|
||||
private class MonitorRenderer extends DefaultListCellRenderer {
|
||||
|
||||
@Override
|
||||
public Component getListCellRendererComponent(JList list,
|
||||
Object value,
|
||||
int index,
|
||||
|
@ -58,8 +58,8 @@ public class SearchPath {
|
||||
}
|
||||
|
||||
public File resolve(String relativeFileName) {
|
||||
for (int i = 0; i < pathArray.length; i++) {
|
||||
File path = new File(pathArray[i], relativeFileName);
|
||||
for (String element : pathArray) {
|
||||
File path = new File(element, relativeFileName);
|
||||
if (path.exists()) {
|
||||
return path;
|
||||
}
|
||||
@ -76,8 +76,8 @@ public class SearchPath {
|
||||
// classpath is retained. This is the one that will be
|
||||
// found if we later do a 'resolve'.
|
||||
SortedSet<String> s = new TreeSet<String>(); // sorted, no duplicates
|
||||
for (int i = 0; i < pathArray.length; i++) {
|
||||
File path = new File(pathArray[i], relativeDirName);
|
||||
for (String element : pathArray) {
|
||||
File path = new File(element, relativeDirName);
|
||||
if (path.exists()) {
|
||||
String[] childArray = path.list(filter);
|
||||
if (childArray != null) {
|
||||
|
@ -25,22 +25,25 @@
|
||||
|
||||
package com.sun.tools.example.debug.gui;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.tree.*;
|
||||
|
||||
public class SingleLeafTreeSelectionModel extends DefaultTreeSelectionModel {
|
||||
|
||||
private static final long serialVersionUID = -7849105107888117679L;
|
||||
|
||||
SingleLeafTreeSelectionModel() {
|
||||
super();
|
||||
selectionMode = SINGLE_TREE_SELECTION;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSelectionPath(TreePath path) {
|
||||
if(((TreeNode)(path.getLastPathComponent())).isLeaf()) {
|
||||
super.setSelectionPath(path);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSelectionPaths(TreePath[] paths) {
|
||||
// Only look at first path, as all others will be
|
||||
// ignored anyway in single tree selection mode.
|
||||
@ -49,12 +52,14 @@ public class SingleLeafTreeSelectionModel extends DefaultTreeSelectionModel {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addSelectionPath(TreePath path) {
|
||||
if(((TreeNode)(path.getLastPathComponent())).isLeaf()) {
|
||||
super.setSelectionPath(path);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addSelectionPaths(TreePath[] paths) {
|
||||
// Only look at first path, as all others will be
|
||||
// ignored anyway in single tree selection mode.
|
||||
|
@ -31,7 +31,6 @@ import java.util.*;
|
||||
import com.sun.jdi.*;
|
||||
|
||||
import com.sun.tools.example.debug.event.*;
|
||||
import com.sun.tools.example.debug.bdi.*;
|
||||
|
||||
/**
|
||||
* Manage the list of source files.
|
||||
@ -45,7 +44,7 @@ public class SourceManager {
|
||||
private List<SourceModel> sourceList;
|
||||
private SearchPath sourcePath;
|
||||
|
||||
private Vector<SourceListener> sourceListeners = new Vector<SourceListener>();
|
||||
private ArrayList<SourceListener> sourceListeners = new ArrayList<SourceListener>();
|
||||
|
||||
private Map<ReferenceType, SourceModel> classToSource = new HashMap<ReferenceType, SourceModel>();
|
||||
|
||||
@ -79,18 +78,18 @@ public class SourceManager {
|
||||
}
|
||||
|
||||
public void addSourceListener(SourceListener l) {
|
||||
sourceListeners.addElement(l);
|
||||
sourceListeners.add(l);
|
||||
}
|
||||
|
||||
public void removeSourceListener(SourceListener l) {
|
||||
sourceListeners.removeElement(l);
|
||||
sourceListeners.remove(l);
|
||||
}
|
||||
|
||||
private void notifySourcepathChanged() {
|
||||
Vector l = (Vector)sourceListeners.clone();
|
||||
ArrayList<SourceListener> l = new ArrayList<SourceListener>(sourceListeners);
|
||||
SourcepathChangedEvent evt = new SourcepathChangedEvent(this);
|
||||
for (int i = 0; i < l.size(); i++) {
|
||||
((SourceListener)l.elementAt(i)).sourcepathChanged(evt);
|
||||
l.get(i).sourcepathChanged(evt);
|
||||
}
|
||||
}
|
||||
|
||||
@ -163,6 +162,7 @@ public class SourceManager {
|
||||
private class SMClassListener extends JDIAdapter
|
||||
implements JDIListener {
|
||||
|
||||
@Override
|
||||
public void classPrepare(ClassPrepareEventSet e) {
|
||||
ReferenceType refType = e.getReferenceType();
|
||||
SourceModel sm = sourceForClass(refType);
|
||||
@ -171,6 +171,7 @@ public class SourceManager {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void classUnload(ClassUnloadEventSet e) {
|
||||
//### iterate through looking for (e.getTypeName()).
|
||||
//### then remove it.
|
||||
|
@ -31,8 +31,6 @@ import java.util.*;
|
||||
import com.sun.jdi.*;
|
||||
import com.sun.jdi.request.*;
|
||||
|
||||
import com.sun.tools.example.debug.bdi.*;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
/**
|
||||
@ -101,6 +99,7 @@ public class SourceModel extends AbstractListModel {
|
||||
|
||||
// **** Implement ListModel *****
|
||||
|
||||
@Override
|
||||
public Object getElementAt(int index) {
|
||||
if (sourceLines == null) {
|
||||
initialize();
|
||||
@ -108,6 +107,7 @@ public class SourceModel extends AbstractListModel {
|
||||
return sourceLines.get(index);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSize() {
|
||||
if (sourceLines == null) {
|
||||
initialize();
|
||||
|
@ -26,8 +26,6 @@
|
||||
package com.sun.tools.example.debug.gui;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.*;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
import javax.swing.*;
|
||||
@ -35,13 +33,12 @@ import javax.swing.*;
|
||||
import com.sun.jdi.*;
|
||||
import com.sun.jdi.request.*;
|
||||
|
||||
import com.sun.tools.example.debug.event.*;
|
||||
import com.sun.tools.example.debug.bdi.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class SourceTool extends JPanel {
|
||||
|
||||
private static final long serialVersionUID = -5461299294186395257L;
|
||||
|
||||
private Environment env;
|
||||
|
||||
private ExecutionManager runtime;
|
||||
@ -99,6 +96,7 @@ public class SourceTool extends JPanel {
|
||||
|
||||
// ContextListener
|
||||
|
||||
@Override
|
||||
public void currentFrameChanged(CurrentFrameChangedEvent e) {
|
||||
showSourceContext(e.getThread(), e.getIndex());
|
||||
}
|
||||
@ -108,6 +106,7 @@ public class SourceTool extends JPanel {
|
||||
|
||||
// SourceListener
|
||||
|
||||
@Override
|
||||
public void sourcepathChanged(SourcepathChangedEvent e) {
|
||||
// Reload source view if its contents depend
|
||||
// on the source path.
|
||||
@ -120,12 +119,15 @@ public class SourceTool extends JPanel {
|
||||
|
||||
// SpecListener
|
||||
|
||||
@Override
|
||||
public void breakpointSet(SpecEvent e) {
|
||||
breakpointResolved(e);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void breakpointDeferred(SpecEvent e) { }
|
||||
|
||||
@Override
|
||||
public void breakpointDeleted(SpecEvent e) {
|
||||
BreakpointRequest req = (BreakpointRequest)e.getEventRequest();
|
||||
Location loc = req.location();
|
||||
@ -139,6 +141,7 @@ public class SourceTool extends JPanel {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void breakpointResolved(SpecEvent e) {
|
||||
BreakpointRequest req = (BreakpointRequest)e.getEventRequest();
|
||||
Location loc = req.location();
|
||||
@ -150,29 +153,40 @@ public class SourceTool extends JPanel {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void breakpointError(SpecErrorEvent e) {
|
||||
breakpointDeleted(e);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void watchpointSet(SpecEvent e) {
|
||||
}
|
||||
@Override
|
||||
public void watchpointDeferred(SpecEvent e) {
|
||||
}
|
||||
@Override
|
||||
public void watchpointDeleted(SpecEvent e) {
|
||||
}
|
||||
@Override
|
||||
public void watchpointResolved(SpecEvent e) {
|
||||
}
|
||||
@Override
|
||||
public void watchpointError(SpecErrorEvent e) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exceptionInterceptSet(SpecEvent e) {
|
||||
}
|
||||
@Override
|
||||
public void exceptionInterceptDeferred(SpecEvent e) {
|
||||
}
|
||||
@Override
|
||||
public void exceptionInterceptDeleted(SpecEvent e) {
|
||||
}
|
||||
@Override
|
||||
public void exceptionInterceptResolved(SpecEvent e) {
|
||||
}
|
||||
@Override
|
||||
public void exceptionInterceptError(SpecErrorEvent e) {
|
||||
}
|
||||
}
|
||||
@ -269,6 +283,7 @@ public class SourceTool extends JPanel {
|
||||
|
||||
private class SourceLineRenderer extends DefaultListCellRenderer {
|
||||
|
||||
@Override
|
||||
public Component getListCellRendererComponent(JList list,
|
||||
Object value,
|
||||
int index,
|
||||
@ -301,6 +316,7 @@ public class SourceTool extends JPanel {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Dimension getPreferredSize() {
|
||||
Dimension dim = super.getPreferredSize();
|
||||
return new Dimension(dim.width, dim.height-5);
|
||||
@ -309,6 +325,7 @@ public class SourceTool extends JPanel {
|
||||
}
|
||||
|
||||
private class STMouseListener extends MouseAdapter implements MouseListener {
|
||||
@Override
|
||||
public void mousePressed(MouseEvent e) {
|
||||
if (e.isPopupTrigger()) {
|
||||
showPopupMenu((Component)e.getSource(),
|
||||
@ -316,6 +333,7 @@ public class SourceTool extends JPanel {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseReleased(MouseEvent e) {
|
||||
if (e.isPopupTrigger()) {
|
||||
showPopupMenu((Component)e.getSource(),
|
||||
@ -354,6 +372,7 @@ public class SourceTool extends JPanel {
|
||||
private JMenuItem commandItem(String label, final String cmd) {
|
||||
JMenuItem item = new JMenuItem(label);
|
||||
item.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
interpreter.executeCommand(cmd);
|
||||
}
|
||||
|
@ -30,15 +30,15 @@ import java.util.*;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.tree.*;
|
||||
import javax.swing.event.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
|
||||
import com.sun.jdi.*;
|
||||
import com.sun.tools.example.debug.bdi.*;
|
||||
|
||||
public class SourceTreeTool extends JPanel {
|
||||
|
||||
private static final long serialVersionUID = 3336680912107956419L;
|
||||
|
||||
private Environment env;
|
||||
|
||||
private ExecutionManager runtime;
|
||||
@ -81,6 +81,7 @@ public class SourceTreeTool extends JPanel {
|
||||
******/
|
||||
|
||||
MouseListener ml = new MouseAdapter() {
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
int selRow = tree.getRowForLocation(e.getX(), e.getY());
|
||||
TreePath selPath = tree.getPathForLocation(e.getX(), e.getY());
|
||||
@ -112,6 +113,7 @@ public class SourceTreeTool extends JPanel {
|
||||
|
||||
private class SourceTreeToolListener implements SourceListener {
|
||||
|
||||
@Override
|
||||
public void sourcepathChanged(SourcepathChangedEvent e) {
|
||||
sourcePath = sourceManager.getSourcePath();
|
||||
root = createDirectoryTree(HEADING);
|
||||
@ -121,6 +123,7 @@ public class SourceTreeTool extends JPanel {
|
||||
}
|
||||
|
||||
private static class SourceOrDirectoryFilter implements FilenameFilter {
|
||||
@Override
|
||||
public boolean accept(File dir, String name) {
|
||||
return (name.endsWith(".java") ||
|
||||
new File(dir, name).isDirectory());
|
||||
@ -158,6 +161,7 @@ public class SourceTreeTool extends JPanel {
|
||||
this.isDirectory = isDirectory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return name;
|
||||
}
|
||||
@ -195,6 +199,7 @@ public class SourceTreeTool extends JPanel {
|
||||
* Returns the child <code>TreeNode</code> at index
|
||||
* <code>childIndex</code>.
|
||||
*/
|
||||
@Override
|
||||
public TreeNode getChildAt(int childIndex) {
|
||||
expandIfNeeded();
|
||||
return children[childIndex];
|
||||
@ -204,6 +209,7 @@ public class SourceTreeTool extends JPanel {
|
||||
* Returns the number of children <code>TreeNode</code>s the receiver
|
||||
* contains.
|
||||
*/
|
||||
@Override
|
||||
public int getChildCount() {
|
||||
expandIfNeeded();
|
||||
return children.length;
|
||||
@ -212,6 +218,7 @@ public class SourceTreeTool extends JPanel {
|
||||
/**
|
||||
* Returns the parent <code>TreeNode</code> of the receiver.
|
||||
*/
|
||||
@Override
|
||||
public TreeNode getParent() {
|
||||
return parent;
|
||||
}
|
||||
@ -221,18 +228,21 @@ public class SourceTreeTool extends JPanel {
|
||||
* If the receiver does not contain <code>node</code>, -1 will be
|
||||
* returned.
|
||||
*/
|
||||
@Override
|
||||
public int getIndex(TreeNode node) {
|
||||
expandIfNeeded();
|
||||
for (int i = 0; i < children.length; i++) {
|
||||
if (children[i] == node)
|
||||
if (children[i] == node) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the receiver allows children.
|
||||
*/
|
||||
@Override
|
||||
public boolean getAllowsChildren() {
|
||||
return isDirectory;
|
||||
}
|
||||
@ -240,6 +250,7 @@ public class SourceTreeTool extends JPanel {
|
||||
/**
|
||||
* Returns true if the receiver is a leaf.
|
||||
*/
|
||||
@Override
|
||||
public boolean isLeaf() {
|
||||
expandIfNeeded();
|
||||
return !isDirectory;
|
||||
@ -248,13 +259,16 @@ public class SourceTreeTool extends JPanel {
|
||||
/**
|
||||
* Returns the children of the receiver as an Enumeration.
|
||||
*/
|
||||
@Override
|
||||
public Enumeration children() {
|
||||
expandIfNeeded();
|
||||
return new Enumeration() {
|
||||
int i = 0;
|
||||
@Override
|
||||
public boolean hasMoreElements() {
|
||||
return (i < children.length);
|
||||
}
|
||||
@Override
|
||||
public Object nextElement() throws NoSuchElementException {
|
||||
if (i >= children.length) {
|
||||
throw new NoSuchElementException();
|
||||
|
@ -29,6 +29,8 @@ import java.util.EventObject;
|
||||
|
||||
public class SourcepathChangedEvent extends EventObject {
|
||||
|
||||
private static final long serialVersionUID = 8762169481005804121L;
|
||||
|
||||
public SourcepathChangedEvent(Object source) {
|
||||
super(source);
|
||||
}
|
||||
|
@ -25,21 +25,16 @@
|
||||
|
||||
package com.sun.tools.example.debug.gui;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.*;
|
||||
import java.util.List; // Must import explicitly due to conflict with javax.awt.List
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.tree.*;
|
||||
import javax.swing.event.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
|
||||
import com.sun.jdi.*;
|
||||
import com.sun.tools.example.debug.bdi.*;
|
||||
|
||||
public class StackTraceTool extends JPanel {
|
||||
|
||||
private static final long serialVersionUID = 9140041989427965718L;
|
||||
|
||||
private Environment env;
|
||||
|
||||
private ExecutionManager runtime;
|
||||
@ -85,6 +80,7 @@ public class StackTraceTool extends JPanel {
|
||||
|
||||
//### I suspect we handle the case badly that the VM is not interrupted.
|
||||
|
||||
@Override
|
||||
public void currentFrameChanged(CurrentFrameChangedEvent e) {
|
||||
// If the current frame of the thread appearing in this
|
||||
// view is changed, move the selection to track it.
|
||||
@ -103,6 +99,7 @@ public class StackTraceTool extends JPanel {
|
||||
|
||||
// ListSelectionListener
|
||||
|
||||
@Override
|
||||
public void valueChanged(ListSelectionEvent e) {
|
||||
int index = list.getSelectedIndex();
|
||||
if (index != -1) {
|
||||
@ -117,6 +114,7 @@ public class StackTraceTool extends JPanel {
|
||||
|
||||
private class StackFrameRenderer extends DefaultListCellRenderer {
|
||||
|
||||
@Override
|
||||
public Component getListCellRendererComponent(JList list,
|
||||
Object value,
|
||||
int index,
|
||||
@ -174,6 +172,7 @@ public class StackTraceTool extends JPanel {
|
||||
this.tinfo = tinfo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getElementAt(int index) {
|
||||
try {
|
||||
return tinfo == null? null : tinfo.getFrame(index);
|
||||
@ -186,6 +185,7 @@ public class StackTraceTool extends JPanel {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSize() {
|
||||
try {
|
||||
return tinfo == null? 1 : tinfo.getFrameCount();
|
||||
|
@ -25,13 +25,11 @@
|
||||
|
||||
package com.sun.tools.example.debug.gui;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.*;
|
||||
import java.util.List; // Must import explicitly due to conflict with javax.awt.List
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.tree.*;
|
||||
import javax.swing.event.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
|
||||
@ -45,6 +43,8 @@ import com.sun.tools.example.debug.bdi.*;
|
||||
|
||||
public class ThreadTreeTool extends JPanel {
|
||||
|
||||
private static final long serialVersionUID = 4168599992853038878L;
|
||||
|
||||
private Environment env;
|
||||
|
||||
private ExecutionManager runtime;
|
||||
@ -79,6 +79,7 @@ public class ThreadTreeTool extends JPanel {
|
||||
tree.setSelectionModel(new SingleLeafTreeSelectionModel());
|
||||
|
||||
MouseListener ml = new MouseAdapter() {
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
int selRow = tree.getRowForLocation(e.getX(), e.getY());
|
||||
TreePath selPath = tree.getPathForLocation(e.getX(), e.getY());
|
||||
@ -131,6 +132,7 @@ public class ThreadTreeTool extends JPanel {
|
||||
|
||||
// SessionListener
|
||||
|
||||
@Override
|
||||
public void sessionStart(EventObject e) {
|
||||
try {
|
||||
for (ThreadReference thread : runtime.allThreads()) {
|
||||
@ -143,20 +145,25 @@ public class ThreadTreeTool extends JPanel {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sessionInterrupt(EventObject e) {}
|
||||
@Override
|
||||
public void sessionContinue(EventObject e) {}
|
||||
|
||||
|
||||
// JDIListener
|
||||
|
||||
@Override
|
||||
public void threadStart(ThreadStartEventSet e) {
|
||||
root.addThread(e.getThread());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void threadDeath(ThreadDeathEventSet e) {
|
||||
root.removeThread(e.getThread());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void vmDisconnect(VMDisconnectEventSet e) {
|
||||
// Clear the contents of this view.
|
||||
root = createThreadTree(HEADING);
|
||||
@ -193,6 +200,7 @@ public class ThreadTreeTool extends JPanel {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return description;
|
||||
}
|
||||
@ -213,6 +221,7 @@ public class ThreadTreeTool extends JPanel {
|
||||
return (thread == null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isLeaf() {
|
||||
return !isThreadGroup();
|
||||
}
|
||||
|
@ -28,10 +28,10 @@ package com.sun.tools.example.debug.gui;
|
||||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
import javax.swing.*;
|
||||
import javax.swing.border.*;
|
||||
|
||||
public class TypeScript extends JPanel {
|
||||
|
||||
private static final long serialVersionUID = -983704841363534885L;
|
||||
private JTextArea history;
|
||||
private JTextField entry;
|
||||
|
||||
@ -41,7 +41,6 @@ public class TypeScript extends JPanel {
|
||||
private JScrollBar historyHScrollBar;
|
||||
|
||||
private boolean echoInput = false;
|
||||
private boolean nlPending = false;
|
||||
|
||||
private static String newline = System.getProperty("line.separator");
|
||||
|
||||
|
@ -25,7 +25,6 @@
|
||||
|
||||
package com.sun.tools.example.debug.gui;
|
||||
|
||||
import javax.swing.*;
|
||||
import com.sun.tools.example.debug.bdi.OutputListener;
|
||||
|
||||
public class TypeScriptOutputListener implements OutputListener {
|
||||
@ -42,10 +41,12 @@ public class TypeScriptOutputListener implements OutputListener {
|
||||
this.appendNewline = appendNewline;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void putString(String s) {
|
||||
script.append(s);
|
||||
if (appendNewline)
|
||||
if (appendNewline) {
|
||||
script.newline();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user